04 — Cross-host MCP
Let one Claude reach into another box
MCP (Model Context Protocol) lets Claude call tools that aren't built in — filesystem access, GitHub, Postgres, custom services. By default the MCP server runs as a local subprocess on the same machine as Claude. But MCP also speaks over network transports: SSE and stdio-over-SSH. That means Claude on PC A can invoke MCP tools that run on PC B.
Three transports
| Transport | How it works | Use when |
stdio | Claude launches the MCP server as a subprocess; talks over stdin/stdout. The default for local servers. | The MCP server and Claude live on the same machine. |
sse / HTTP | Claude opens an HTTP/SSE connection to a running server. The server is a long-lived process you operate separately. | Many Claudes need the same MCP tool; the tool is expensive to spin up; the server is on a different host. |
stdio over SSH | Same as local stdio but Claude launches the subprocess via ssh on a remote host. | You want a server-on-another-box without standing up an HTTP service. |
Pattern: filesystem MCP on the droplet, called from your laptop
Your laptop runs Claude. You want Claude to read live files from /var/www/ on the droplet. Configure an MCP server in ~/.claude/settings.json that runs over SSH:
"mcpServers": {
"droplet-www": {
"command": "ssh",
"args": [
"root@wholetech.com",
"npx -y @modelcontextprotocol/server-filesystem /var/www"
]
}
}
Now Claude on the laptop can list, read, and (with permission) write files inside /var/www/ on the droplet, as if they were local — but every tool call routes through the SSH tunnel to the remote process. The remote MCP server speaks stdio; SSH bridges stdio across the network.
Pattern: a long-lived MCP service on the droplet
For something heavier — say, a database connection pool or a connector that takes 10 seconds to warm up — you don't want a fresh subprocess per session. Run the MCP server as a systemd unit on the droplet, exposed on a local socket, and have Claude connect via the SSE transport over an SSH-forwarded port.
// on the droplet: systemd unit running an MCP HTTP server on 127.0.0.1:3050
// from the laptop: forward the port
$ ssh -fNL 3050:127.0.0.1:3050 root@wholetech.com
// settings.json on the laptop
"mcpServers": {
"droplet-postgres": {
"transport": "sse",
"url": "http://localhost:3050/mcp"
}
}
Pattern: exposing the WholeTech network from one Claude
The high-leverage move for a multi-machine setup: run a small MCP server on the droplet that exposes "tools" representing the rest of your network — sitemap data, nginx config snippets, scheduled-task status. Now any Claude that mounts this server can ask questions about the whole fleet without having to SSH to each box.
The dual benefit: Claude on the laptop gets reach; the droplet gets a single audit point. Every cross-host tool call goes through the one MCP server you wrote, so you can log, rate-limit, and reason about access in one place.