Connect your assistant
Two things go into every client on this page: an address and a key.
https://api.atmon.ai/mcp
The key is an agent key from the console; see Start if you do not have one yet. It travels as an Authorization header, never in a message and never in a file the assistant reads.
If you run atmon on your own machines, the address is your own node's /mcp instead and everything else on this page is unchanged.
The console's key page prints the block below with your own key already in it, so copying from there is one step fewer than copying from here.
Every client at once
npx add-mcp https://api.atmon.ai/mcp
That reads which assistants are installed and writes the configuration into each of them.
Claude Code
By command, naming the transport and passing the key as a header:
claude mcp add --transport http atmon https://api.atmon.ai/mcp \
--header "Authorization: Bearer amk_your_key_here"
By file, in .mcp.json at the root of a project:
{
"mcpServers": {
"atmon": {
"type": "http",
"url": "https://api.atmon.ai/mcp",
"headers": { "Authorization": "Bearer amk_your_key_here" }
}
}
}
An entry with a url and no type is read as a local command, skipped, and reported as a server that has a url but no type. That one line is the most common reason a copied block does nothing.
Claude Desktop
Claude Desktop does not take a remote server from its configuration file. Open Settings, then Connectors, then Add custom connector, and paste the address.
It shows a warning about connecting servers you trust. That warning is right to be there, and the safety page answers it.
Cursor
In .cursor/mcp.json. No type field here.
{
"mcpServers": {
"atmon": {
"url": "https://api.atmon.ai/mcp",
"headers": { "Authorization": "Bearer amk_your_key_here" }
}
}
}
VS Code with Copilot
By command. VS Code asks for the key the first time the server starts and keeps it after that:
code --add-mcp "{\"name\":\"atmon\",\"type\":\"http\",\"url\":\"https://api.atmon.ai/mcp\"}"
By file, in .vscode/mcp.json. The top-level key is servers, not mcpServers:
{
"servers": {
"atmon": {
"type": "http",
"url": "https://api.atmon.ai/mcp",
"headers": { "Authorization": "Bearer ${input:atmon-key}" }
}
}
}
Windsurf
In mcp_config.json. The address field is serverUrl rather than url, which is the single most common reason a copied block does nothing there:
{
"mcpServers": {
"atmon": {
"serverUrl": "https://api.atmon.ai/mcp",
"headers": { "Authorization": "Bearer amk_your_key_here" }
}
}
}
Codex CLI
codex mcp add atmon --url https://api.atmon.ai/mcp
In config.toml, with the key read from the environment rather than written into the file:
[mcp_servers.atmon]
url = "https://api.atmon.ai/mcp"
bearer_token_env_var = "ATMON_KEY"
Anything else
Any client that speaks streamable HTTP MCP works. It needs the address, and it needs to send the key on the Authorization header. If a client cannot send a header, it cannot connect: there is no way to put a key in the address instead, on purpose, because addresses end up in logs.
Check it worked
Ask the assistant what tools it has. Four names should come back: search_tools, describe_tool, call_tool, and submit_job, plus get_job beside the last one.
Then ask it to do something small and real. If nothing is connected yet the answer will say not_connected, which is the right answer and means the connection is working. Connect an app is the next step.
Install the atmon skill too. The connection makes acting possible; the skill is what makes it act well.