Prerequisites
- Two or more MCP server instances that verified successfully. An instance whose URL cannot be resolved is skipped from the bundle silently, so verify first with Add a hosted MCP server.
- An API key for the workspace.
Steps
Create the client
mcp_endpoint_url is the aggregate. Note it is served at /mcp/clients/{client_id}
— outside /v1, because it is a mounted MCP application rather than a REST route.Attach instances, with a namespace each
namespace_prefix decides the tool prefix: a search tool on
the instance namespaced gh is exposed as gh__search. Two members that both
expose search stay distinguishable only if their namespaces differ, so set the
prefix deliberately rather than leaving it null.allowed_tools names the instance’s own tools (without the prefix) the client
serves; omit it or send null to serve all of them. A tool left out is neither
listed nor callable through the endpoint. Posting the same instance again
replaces both namespace_prefix and allowed_tools, so send both every time.Attach OpenAPI connections, if the harness should call REST APIs
<namespace_prefix>__<operation> (ya__search); without a prefix the
connection’s name is the namespace, lowercased with characters outside
[a-zA-Z0-9_-] replaced by _. allowed_tools names operations, as the
connection lists them in available_tools. A call is judged by the workspace
policy as an agent’s call of the same operation is, checked against the spend
caps and, on the platform’s key, the balance, and its cost is recorded against
the client; see Tool costs. Detach one with
DELETE /v1/workspaces/{workspace}/clients/{client_id}/openapi-connections/{connection_id}.Attach platform toolsets, if the harness should manage AgentArea
List the toolsets a client can carry and the methods of each:Attach one by namespace, leaving out the methods the harness should not see:The endpoint then serves the toolset’s tools under their platform names
(
runs_list, runs_start, …), minus disabled_methods. They run in the
client’s workspace as the calling principal, so each call is authorized
exactly as it would be on the platform’s own MCP server; carrying a toolset
grants nothing the caller could not already do. Posting the same toolset
again replaces disabled_methods. Detach one with
DELETE /v1/workspaces/{workspace}/clients/{client_id}/platform-toolsets/{namespace}.Attach skills, if the client should have them
activate_skill tool
whose enum lists them, alongside the namespaced member tools.Point the harness at the endpoint
Give the harness
mcp_endpoint_url and a token. Access is checked on every
request: the token’s subject must be the client itself, or a principal holding
the use relation on that client. See Issue MCP access
tokens.Verify
List the tools through the aggregate. This is the same call the harness makes.Troubleshooting
tools/list returns an empty array
tools/list returns an empty array
Either the client id in the path does not exist, or no member resolved. A
member whose URL cannot be resolved is skipped and logged rather than
failing the whole bundle, so one broken instance looks like a missing tool
rather than an error. Check each member’s
verification.status
individually.Tool names collide
Tool names collide
Two members exposing the same tool name with the same or null namespace
produce ambiguous entries. Set a distinct
namespace_prefix on each member.
Platform tools never collide with member tools: member tools always carry a
__ separator, platform tools never do.Attaching a platform toolset returns 422
Attaching a platform toolset returns 422
The name is not a toolset a client can carry, or
disabled_methods names a
method the toolset does not have. The response lists the valid names. The
workspaces toolset is not carried: a client always acts in its own
workspace.A tool the instance has is missing from the aggregate
A tool the instance has is missing from the aggregate
The attachment’s
allowed_tools leaves it out. The list names exactly what
is served, so a tool the instance gained after you narrowed it stays out
until you add it. The web app’s checklist shows the instance’s stored tool
snapshot from its last verification; if the tool is missing there too, run
POST /v1/workspaces/{workspace}/mcp-server-instances/{instance_id}/discover-tools
on the member, then reopen the harness.A member is still exposed after you removed it elsewhere
A member is still exposed after you removed it elsewhere
Members are only ever the client’s own attachments. Remove one with
DELETE /v1/workspaces/{workspace}/clients/{client_id}/mcp-instances/{mcp_instance_id} .The endpoint 404s
The endpoint 404s
/mcp/clients/{client_id} is a mounted application, not a /v1 route, and
it is absent from the OpenAPI spec for that reason. Use the
mcp_endpoint_url from the client response rather than assembling the path
from the API base by hand.Related
Add a hosted MCP server
Run an MCP server as a managed workload
Connect a harness to AgentArea
Manage AgentArea itself over MCP, with only the toolsets you need
Issue MCP access tokens
Create, scope, rotate, and revoke the API keys that authenticate calls to
MCP endpoints and the
MCP
What the Model Context Protocol gives an agent, and how AgentArea hosts MCP
servers