Subcore AI Docs
MCP server

Setup

Connect Claude Code or Claude Desktop to the Subcore MCP server.

Endpointhttps://api.subcore.ai/mcp
TransportStreamable HTTP, stateless
AuthAuthorization: Bearer <Subcore API key>

The key is the one you already use for the read API. It resolves to your organization and decides which agents and tools you see. There is no second credential: the server reaches your deployments by signing its own requests, so no deployment secret ever goes into a config file.

Claude Code

claude mcp add --transport http subcore https://api.subcore.ai/mcp \
  --header "Authorization: Bearer $SUBCORE_API_KEY"

Add --scope user to make it available in every project, or --scope project to commit it for the team. Then check it:

claude mcp list

To commit the server to a repository instead, write .mcp.json at its root:

{
  "mcpServers": {
    "subcore": {
      "type": "http",
      "url": "https://api.subcore.ai/mcp",
      "headers": {
        "Authorization": "Bearer ${SUBCORE_API_KEY}"
      }
    }
  }
}

Use the ${SUBCORE_API_KEY} form in a committed file and set the variable in your environment. A Subcore API key grants read access to every conversation your agents have had; it does not belong in version control.

Claude Desktop

Claude Desktop's built-in custom connectors expect the server to authenticate over OAuth. Subcore uses a static bearer token, so the connection goes through the mcp-remote bridge instead.

Open Settings → Developer → Edit Config and add:

{
  "mcpServers": {
    "subcore": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.subcore.ai/mcp",
        "--header-file",
        "/absolute/path/to/subcore-headers.txt"
      ]
    }
  }
}

with that file containing one header per line:

subcore-headers.txt
Authorization: Bearer sk_live_your_key_here

Then restart Claude Desktop completely — quit it, do not just close the window.

--header-file is used here rather than --header so the key stays out of the process arguments, where any other user on the machine could read it from the process list. chmod 600 the file. If you prefer --header, note that on Windows the spaces inside an argument get mangled, so the value has to be split into an environment variable:

"args": ["-y", "mcp-remote", "https://api.subcore.ai/mcp", "--header", "Authorization:${AUTH_HEADER}"],
"env": { "AUTH_HEADER": "Bearer sk_live_your_key_here" }

Note there is no space around the colon in the argument.

npx -y fetches whichever mcp-remote is current each time the client starts, and that package reads the file your key is in. That is the usual way MCP bridges are configured, and it is how upgrades and fixes reach you, but it does mean an unreviewed release runs against your credential. If you would rather control when that changes, pin the version and update it deliberately:

"args": ["-y", "mcp-remote@0.8.3", "https://api.subcore.ai/mcp", "--header-file", "/absolute/path/to/subcore-headers.txt"]

Pinning trades automatic upgrades for review, in both directions: a pinned version will not pick up a fix to mcp-remote either. Nothing on the Subcore side depends on the bridge version.

Checking the connection

The server has an authenticated health endpoint that reports whether it can sign requests to your deployments:

curl -H "Authorization: Bearer $SUBCORE_API_KEY" https://api.subcore.ai/mcp/health
{
  "status": "ok",
  "organizationId": "org_...",
  "server": { "name": "subcore", "version": "0.1.0" },
  "signing": { "configured": true },
  "timestamp": 1788566920224
}

From the client, ask it to call list_agents. That is the tool to start with in any case: every other tool takes a core argument that has to be one of the slugs it returns.

Troubleshooting

401 Missing Authorization header — the header is not reaching the server. With mcp-remote, check the header file path is absolute and readable.

401 Invalid or expired API key — the URL is right and the key is not.

No conversation tools in the list, only list_agents and describe_deployment — your key reaches no agent with a published manifest. Call list_agents: it reports each agent's deployment URL and connection status, and names the problem when there is one, such as an agent whose deployment URL has not been connected in the console.

No telemetry tools — the key lacks permissions.telemetry. See authentication.

Tools that fail with "Cannot reach the deployment" — the server could not sign its request to your deployment. Check signing.configured in the health response above.

On this page