What MCP is
What the Model Context Protocol lets a client do against a workspace here.
The Model Context Protocol lets an AI client call tools in another system. This
product exposes five tools at one endpoint, /mcp, so a client such as Claude
can read and work the helpdesk queue on your behalf.
Five tools, and nothing else. The rest of the product is not reachable this way. See Limits for what that rules out.
The five tools
| Tool | What it does | Role needed |
|---|---|---|
list_tickets | Filter and page the ticket queue | viewer |
get_ticket | Read one ticket with its message timeline | viewer |
create_ticket | Open a new ticket | editor |
reply_to_ticket | Post a customer reply or an internal note | editor |
search_knowledge_base | Semantic search over the workspace knowledge bases | viewer |
Source: services/runtime/src/runtime/mcp/tools.py:422-541.
Every call acts inside one workspace
A connection authenticates once. A workspace is chosen per call, not per connection, because one account can belong to several workspaces.
Each tool takes an optional workspace_id. If you belong to exactly one
workspace you can leave it out and the server uses that one. If you belong to
several and name none, the call is refused and you are asked to name one. If you
name a workspace you are not a member of, you get the same answer as naming one
that does not exist.
Source: services/runtime/src/runtime/mcp/tools.py:132-166 and
services/runtime/src/runtime/auth/workspaces.py:164-197.
It is the same product, not a copy of it
Each tool is a thin wrapper. It works out which workspace the call acts in, applies the same role check the equivalent HTTP route applies, binds the identity the database reads for row level security, and then calls the very same function the REST API calls. No query is written twice, so no rule can be enforced in one place and forgotten in the other.
Source: services/runtime/src/runtime/mcp/tools.py:1-10 and the five handlers at
services/runtime/src/runtime/mcp/tools.py:249-409.
What is off by default
MCP is off unless an operator turns it on. A deployment that never opted in has
no /mcp route at all.
Source: services/runtime/src/runtime/config.py:522 and
services/runtime/src/runtime/main.py:254-261.
No public endpoint exists yet
Nothing is deployed. There is no public MCP host to connect to today. The connect procedure is written from the transport, the discovery documents and the authentication configuration, all of which are readable in source, but it has never been run against a live public deployment.
How these pages are kept honest
The MCP surface is invisible to the generated API reference, by construction:
/mcp is registered as a plain route rather than a documented one
(services/runtime/src/runtime/mcp/asgi.py:85-87), and the two discovery routes
are excluded from the schema
(services/runtime/src/runtime/mcp/well_known.py:62-68). Nothing generates these
pages and nothing will catch them going stale.
So every behavioural statement in this section names the file and line it came
from. Review trigger: any change under
services/runtime/src/runtime/mcp/ requires these pages to be re-checked
against source in the same change. It is a human gate, and it is weaker than
the check that protects the REST reference.