Configuring MCP Servers
MCP servers are configured in JSON. The marketplace writes this for you, but you can also edit it by hand or ask BOR to. This page covers the format and the config locations.The config files
server/runtime/mcp.js discovers servers from, in order (later wins):
- Global —
~/.bed-of-roses/mcp/servers.json - Shared local —
.bed-of-roses/mcp/servers.json(the bundledbrowserbaseautomation browser is configured here by default) - Per-presence —
.bor/mcp.json(where the marketplace installs, and where the AI reads/writes)
.bor/mcp.json is the primary place; it wins over the shared templates. Its absolute path for the current presence is shown by /api/mcp/installed and handed to the AI in install tasks.
The format
All three files use the same shape:stdio server (subprocess)
streamable-http / SSE server (remote)
type: "sse" for an SSE endpoint. Headers carry auth.
Fields
| Field | Purpose |
|---|---|
type | stdio (default), sse, or streamable-http. |
command / args / cwd | For stdio: the subprocess to spawn. |
url / headers | For SSE / streamable-http: the endpoint and auth headers. |
env | Environment variables (API keys, config) for the server. |
disabled | Skip this server without removing it. |
Editing it
- Via the marketplace — Install does it for you (LLM-driven), reading the file first so it never clobbers existing servers.
- Via the AI — ask BOR to add/configure a server; it reads
.bor/mcp.json, writes the new entry, and can run any needed setup commands. - By hand — edit
.bor/mcp.jsondirectly. The runtime picks up changes (restart the presence if it doesn’t).
Verifying
list_mcp_servers— see what’s configured and connected.list_mcp_tools <server>— see the tools a server exposes.use_mcp_tool/access_mcp_resource— actually call it.GET /api/mcp/installed— the server names in this presence’s.bor/mcp.jsonplus the config path.
Secrets
API keys for MCP servers live in theenv block of .bor/mcp.json (under os-data/). Treat that file as sensitive, like config.json.