Connect Claude to an MCP server
To connect Claude to an MCP server such as mcp-core, point the client at http://localhost:3200/mcp and send the token of one of your seats with every request. Claude Code can use the plugin bundle in your download. Claude Desktop uses a custom connector. Both see only the tools that seat is allowed to use.
What do you need before you connect Claude to an MCP server?
You need a running mcp-core container and a seat token. If the container is not running yet, follow Install MCP Self-hosted first. Tokens live in My Account → MCP Self-hosted, on the Seats tab of your license: each row has a Copy button in the Token column. Your first seat, called “Default install”, is created when your download is built; its token is also the BEARER_TOKEN value in .env.
Use one seat per person or device. That way you can regenerate or revoke one token without breaking the others. MCP seats explains how to add them.
Which URL do you use to connect Claude to an MCP server?
Use /mcp, the Streamable HTTP endpoint. mcp-core also keeps the legacy SSE transport on /sse for older clients. Use Streamable HTTP whenever the client supports it.
Streamable HTTP: http://localhost:3200/mcp
Legacy SSE: http://localhost:3200/sse
The compose file binds port 3200 to 127.0.0.1, so these URLs only work on the machine that runs the container. To connect from another machine, put a reverse proxy with HTTPS in front of the container and set SERVER_URL in .env to the public address. mcp-core uses that value in its discovery responses, which some clients read before they authenticate.
How do you send the token?
Every request needs the token of one seat. The standard way to send it is an Authorization header:
Authorization: Bearer YOUR_CONNECTION_TOKEN
Some connector screens only let you choose from a fixed list of header names. mcp-core also accepts the raw token, without the Bearer prefix, in any of these headers: X-Api-Key, Api-Key, ApiKey, Api-Token, X-Auth-Token or X-Access-Token.
How do you connect Claude Code with the plugin bundle?
Every download contains a claude-plugin/ folder and an INSTALL-CLAUDE-PLUGIN.md file. The plugin is pre-filled with the local URL and your “Default install” token, so you connect Claude to an MCP server without editing any JSON. Start Claude Code in the bundle folder and run:
/plugin marketplace add ./claude-plugin
/plugin install mcp-core@claude-plugin
Then ask Claude to run mcp_status. It answers with the license state and the tools and modes of your seat. The plugin config sits in claude-plugin/.mcp.json:
{
"mcpServers": {
"mcp-core": {
"type": "http",
"url": "http://localhost:3200/mcp",
"headers": { "Authorization": "Bearer YOUR_CONNECTION_TOKEN" }
}
}
}
If you regenerate that seat’s token later, update the header in this file and restart Claude Code.
How do you add the server to Claude Code by hand?
Use the claude mcp add command with the HTTP transport and the token header. Use this route to connect Claude to an MCP server with any seat other than “Default install”:
claude mcp add --transport http mcp-core http://localhost:3200/mcp \
--header "Authorization: Bearer YOUR_CONNECTION_TOKEN"
How do you connect Claude Desktop?
To connect Claude to an MCP server from Claude Desktop, add a custom connector and enter the /mcp URL of your server. The connector runs an OAuth-style setup and asks for a Client ID. Paste your seat token there. mcp-core then completes the setup for that seat directly.
If you leave the Client ID empty, mcp-core shows a page titled “Choose a connection” that lists the labels of all seats on your license. That page has no password. On a license with several seats, paste the token instead, so nobody else who reaches the URL can pick a seat that is not theirs. The MCP authentication page explains why this handshake exists.
Can other clients connect?
Yes. Any MCP client that supports Streamable HTTP or SSE uses the same URL and token header. The tool list depends on the seat, not on the client.
What if you cannot connect Claude to an MCP server?
Start with the cause that matches what you see:
- Connection refused: the container is not running, or you are not on the host. Check
docker psand the port binding. - 401 Unauthorized: the token is wrong, regenerated or revoked, or the license has no seats at all. The container log shows
Token rejectedfor each refused request. - Connected, but tools are missing: the tool is not on your license, or this seat does not have it ticked. See entitlements vs tool modes.
- Read tools only: the seat’s mode for that tool is read-only, which is the default for every tool except Brain.
- A token or tool change has no effect: the running server learns about changes at its next license check. Run
docker exec mcp-core npm run refresh-licenseto apply them now.
Without any client, curl http://localhost:3200/health shows the license state and active tools.
Once you connect Claude to an MCP server this way, every new tool on your license shows up in the same connector without a reinstall. Next step: give each person their own token in MCP seats.