Use the MCP server
This guide shows you how to connect an external MCP client — Claude Code, an editor, the MCP Inspector — to Control Center’s own tool server.
Control Center registers 109 tools and serves them over the Model Context
Protocol at protocol version 2024-11-05. Whole tool families you might expect
are absent: there are no meeting or calendar tools and no project tools.
Find the endpoint
Section titled “Find the endpoint”The MCP surface shares the main cc_server listener. There is no separate MCP
port.
| Endpoint | Method | Purpose |
|---|---|---|
/mcp |
POST |
Streamable HTTP transport — this is what a client speaks |
/mcp |
DELETE |
End a session |
/sse |
GET |
Server-sent notification stream |
So a default local install is at http://127.0.0.1:9030/mcp.
- Go to Settings → Server → MCP servers
- Read the MCP server card — it shows running or stopped and the port it is listening on
The surface is on by default on a fresh install, so a loopback client works with no settings trip. Start on app launch controls whether it comes back after a restart; Start / Stop are session controls that do not change that preference.
The server binds loopback by default, so the endpoint is only reachable from the
machine cc_server runs on unless you started it with --bind any.
Connect a client
Section titled “Connect a client”Point your client at the Streamable HTTP endpoint. The exact configuration shape is your client’s business; the URL is the same either way.
{ "mcpServers": { "control-center": { "type": "http", "url": "http://127.0.0.1:9030/mcp" } }}Claude Code
Section titled “Claude Code”Claude Code will not pick this up from a project .mcp.json — it gates
project-scoped MCP servers behind an approval prompt that a non-interactive
claude -p never answers. Pass the config explicitly:
claude --mcp-config /path/to/mcp.json --strict-mcp-config--strict-mcp-config makes Claude use only that file, so the same server is not
also discovered from the project and registered twice.
Checkpoint: ask the client to list its tools. You should see mcp__* entries
covering tickets, spaces, memory, code graph and review.
Serve MCP beyond the host
Section titled “Serve MCP beyond the host”- On Settings → Server → MCP servers, on the Authentication token row, press Set and paste a token
- Send it as
Authorization: Bearer <token>on everyPOST /mcprequest
A tokenless surface refuses any non-loopback caller with 403. That is fail-closed by design: the token is what makes off-host service possible at all.
Token changes apply to the live surface immediately — no restart.
Scope every call to a workspace
Section titled “Scope every call to a workspace”Every tool that touches workspace-scoped data requires workspace_id and a call
without it is refused rather than resolved against some “current” workspace:
{ "workspace_id": "acme", "title": "Fix login bug", "priority": "high"}The id is the one in your browser or app URL: /workspaces/<workspace_id>/…. The
only exemptions are tools that genuinely span workspaces, such as
list_workspaces and the newsfeed tools — the newsfeed is per-user and an agent
has no user of its own, so those tools operate on the server owner’s feeds.
Repo-scoped tools additionally check that the repo is linked to that workspace.
Know what the surface will refuse
Section titled “Know what the surface will refuse”- Mode gating. A call is resolved against the mode of the calling agent’s
space, server-side. An agent in a read-only mode cannot reach a write
tool by omitting
space_id— the mode is looked up from its active run instead. - Action guardrails. Mutating tools declare their effect classes and go through the same policy the rest of the product uses. See Configure guardrails.
- Confirmation. Some destructive tools build a confirmation payload that has to be approved before the call proceeds.
The full catalogue is advertised in tools/list with no discovery gating — an
external MCP client refuses to call a tool that is not in its cached list, so
hiding tools breaks them rather than tidying them.
Troubleshooting
Section titled “Troubleshooting”The client sees no tools
Section titled “The client sees no tools”- Check the MCP server card says running
- Check the port matches your
cc_serverport - On Claude Code, check you passed
--mcp-configand--strict-mcp-config
403 from a machine that is not the server
Section titled “403 from a machine that is not the server”No bearer token is configured. Set one and send it.
A tool call fails with “Missing or invalid argument: workspace_id”
Section titled “A tool call fails with “Missing or invalid argument: workspace_id””Add workspace_id. There is no implicit workspace.
A tool you read about is not there
Section titled “A tool you read about is not there”A tool class no longer sits on disk unregistered — every one that exists is
wired, and a ratchet test fails the build otherwise. What you may have read about
is a tool that was deleted: create_workspace, the project tools,
hire_agent, fire_agent, doctor and ask_user_question are all gone and
return “unknown tool”. MCP tools lists the
catalogue and what has no tool behind it.