POST. The server is different from the docs MCP server. The docs server
gives read-only reference pages. This server operates the platform. See
Coding agents for the docs server.
Authentication
The server accepts two credentials:- A console session JWT. A session holds the full scope vocabulary, because it is the console credential. The role checks and grant checks of the platform still apply. A session can reach all organizations that the user belongs to.
- An MCP access key. A key is a token with the prefix
mpk_. Send it as a Bearer token in theAuthorizationheader. A key holds only the narrow scopes that you select when you make it.
Scopes
A scope has the formmcp:<domain>:<action>. One scope permits one action
class in one operation group. There is no scope that permits everything.
The domains are:
The actions are:
The
security and keys domains have no write scope and no delete
scope. Every mutation in these two domains needs admin.
For example, mcp:cdr:read permits cdr.recent. The same scope does not
permit billing.summary, and it does not permit any mutation.
To see the exact scope of one operation, call describe_operation. The
result contains a requiredScope field.
The server publishes the full list at
https://portal.telequick.dev/.well-known/oauth-protected-resource, in the
scopes_supported field. This is OAuth 2.0 Protected Resource Metadata
(RFC 9728).
Make an MCP access key
Only owners and admins can make keys.- Open the console.
- Go to Admin → API keys → MCP access keys.
- Make a new key. Give the key a name that identifies the agent that will hold it.
- Select the scopes. The picker is a grid: one row for each domain, one
column for each action. Select only the cells that the agent needs. For
an agent that reads call records and nothing else, select one cell:
mcp:cdr:read. - Set an expiry date.
- Copy the
mpk_token. The console shows the token one time.
A key can never make another key. The
keys domain refuses an mpk_
credential, even one that holds mcp:keys:admin. Use the console for key
administration.Connect an agent
Add the server to your MCP client configuration:The meta-tools
The platform API has more than 540 operations. The server does not expose one MCP tool for each operation. That count is too large for MCP clients. The server exposes five meta-tools. The meta-tools reach the full catalog. The tools are in two sets. Each tool declares its set in the tool listing, in theannotations field and in the _meta field. A client can therefore
separate the two sets before it calls anything.
Public tools. These are read-only. They return metadata about the server.
They return no tenant data, and they need no scope.
Privileged tools. These reach tenant data. Each call needs the one narrow
scope of the operation.
read_operation refuses a mutation. call_operation refuses a query. The
two tools are separate for this reason: a client can permit the read tool
without permitting the write tool, and a key that holds only read scopes
can never enter the write tool.
An agent follows this sequence:
- Call
whoami. The result shows the identity and the scopes of the credential. - Call
list_operations. With no arguments, the result is one summary line per group. Passgroupto list the operations of one group. Passfilterto search all operation paths for a substring. Passgranted: trueto list only the operations that your scopes permit. - Call
describe_operationwith the operation path. The result names the required scope. Do this before the first call of an operation that the agent does not know. - Call
read_operationfor a query, orcall_operationfor a mutation.
What the privileged tools enforce
- Each call needs the one scope of the operation. The server makes this check before it dispatches anything.
- An operation in a router group that has no scope domain cannot be called at all. A new product area is unreachable over MCP until an operator classifies it.
- All role checks and grant checks of the platform apply. The server does not add a second permission system. Each call runs as the acting user.
- For an org-scoped operation, the server pins the organization id. For a
key, the server overwrites
input.orgIdwith the key’s organization. An agent cannot reach a different tenant. For a session, passorgIdin the input. If the user belongs to exactly one organization, the server fillsorgIdin. - The server truncates a result at 200,000 characters. A truncated result contains an explicit truncation marker.
Rate limits
The server accepts a maximum of 240 requests per minute from one client IP address. This limit applies before authentication. Each platform operation also has its own rate limit. Acall_operation call inherits that limit.
When you exceed a limit, the server returns HTTP status 429.
Error codes
A 403 response carries a
WWW-Authenticate header with
error="insufficient_scope" and a scope parameter. The scope parameter
names the exact scope that the operation needs. The response body also
carries the JSON-RPC result, so an agent can read the reason.
Audit
The server writes each mutation to the organization audit log as anmcp.call entry. The entry names the key that made the call and the scope that permitted it.
The server
redacts secret values (tokens, passwords, headers) from the entry before it
writes the entry.
Smoke test
Send onewhoami call with curl: