Overview
Apps you build in Assembly can have their own API: a Project Tracker can list projects, a time tracker can start a timer. The Assembly MCP server gives your AI assistant two tools to reach those APIs:appsfinds the apps in your workspace and describes what each one can do.app_apicalls one of those operations.
App calls through MCP are rolling out gradually. If your assistant doesn’t list the
apps or app_api tools, they aren’t enabled for your workspace yet.Who can call an app
- Workspace members only. Every call runs as you, the person signed in to the MCP connection. The app sees you as the user and returns only what you could see if you opened it in the dashboard.
- Not clients. Clients can’t connect to the MCP server, and a client’s credential is refused if it tries to call an app this way.
- Your workspace only. You can reach the apps installed in the workspace you are working in. An app from another workspace, or one that has been uninstalled, answers as if it doesn’t exist.
Step 1: Discover with apps
The apps tool is read-only and has three actions.
retrieve is usually enough to pick the right operation. The assistant reaches for retrieve_contract when it needs the exact request body or response fields. The contractHash from list identifies the current version of that document. To skip re-reading it, pass the hash wrapped in double quotes as If-None-Match (for example "3b1f0c9e…"); the tool answers 304 Not Modified when nothing has changed, so the assistant can reuse the copy it already read.
Step 2: Call with app_api
The app_api tool sends one request to one app.
The path must be one the app lists in
retrieve. The assistant never invents a path; a path the app doesn’t expose is refused.
The app’s answer comes back as the app sent it, including its own error messages. A GET only reads. A POST, PUT, PATCH, or DELETE changes data in the app, so the assistant tells you what it is about to send, and to which app, before it calls, and asks for your confirmation before any DELETE.
Worked example: Project Tracker
Say your workspace has a Project Tracker app, and you ask:“Which projects in Project Tracker are overdue? Mark the Acme website redesign as completed.”The paths and fields below are illustrative; each app defines its own.
1
Find the app
The assistant calls
apps with action: "list" and picks Project Tracker from the result.2
Read its operations
It calls If it needs to know which filters
apps with action: "retrieve" and that appId.listProjects accepts or which fields updateProject takes, it calls retrieve_contract next.3
Read the overdue projects
It calls Project Tracker returns the overdue projects you can see, and the assistant lists them for you, including the id of the Acme website redesign (say
app_api:prj_481).4
Mark one completed
Because this changes data, the assistant first tells you it will set Project Tracker records the change as made by you.
prj_481 to completed in Project Tracker. Once you confirm, it calls app_api:Errors
When a call fails, the tool returns the HTTP status and a short message, for exampleHTTP 404: App not found.