Model Context Protocol servers add tools from outside. Each one is started on launch and its tools are registered alongside the built-ins.
They live in ~/.config/raunen/mcp.json rather than the main config, so a server that needs a secret in its env is not shoulder-to- shoulder with the model defaults, and can be shared without dragging the rest of the config along.
stdio runs a local subprocess and speaks JSON-RPC over its stdin and stdout. http posts to a remote Streamable-HTTP endpoint. Empty means stdio.
{
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
},
"example": {
"type": "http",
"url": "https://example.com/mcp/",
"headers": { "Authorization": "Bearer โฆ" }
}
}Headers are forwarded verbatim and nothing expands variables. A token written here sits in the file in plain text โ it is written 0600, but an env-var-based server (env on a stdio server) is the better place for a secret.
A server can be defined and left out of mcp_enabled in the main config, so it stays configured but does not start. An empty list means start every defined server.
"mcp_enabled": ["filesystem"]/mcp lists what is defined, what is active, and how many tools each one provided.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ mcp filesystem 11 tools example off 1 servers ยท 11 tools
A server that is active but shows not started failed to launch or did not complete the handshake โ /status and RAUNEN_DEBUG=1 say more.