- CLAUDE.md: Main homelab assistant context and instructions - IP-ASSIGNMENTS.md: Complete IP address assignments - NETWORK.md: Network bridges, VLANs, and configuration - EMC-ENCLOSURE.md: EMC storage enclosure documentation - SYNCTHING.md: Syncthing setup and device list - SHELL-ALIASES.md: ZSH aliases for Claude Code sessions - HOMEASSISTANT.md: Home Assistant API and automations - INFRASTRUCTURE.md: Server hardware and power management - configs/: Shared shell configurations - scripts/: Utility scripts - mcp-central/: MCP server configuration 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
130 lines
4.4 KiB
Markdown
130 lines
4.4 KiB
Markdown
# Centralized MCP Servers for Homelab
|
|
|
|
## Current State of MCP Remote Access
|
|
|
|
**The Problem**: Most MCP servers use `stdio` transport (local process communication).
|
|
Claude Code clients expect to spawn local processes.
|
|
|
|
**The Solution**: Use `mcp-remote` to bridge local clients to remote servers.
|
|
|
|
## Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ docker-host (10.10.10.206) │
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
│ │ airtable-mcp│ │ exa-mcp │ │ ticktick-mcp│ ... │
|
|
│ │ :3001/sse │ │ :3002/sse │ │ :3003/sse │ │
|
|
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
▲ ▲ ▲
|
|
│ │ │
|
|
┌──────┴───────────────┴───────────────┴──────┐
|
|
│ Tailscale / LAN │
|
|
└──────┬───────────────┬───────────────┬──────┘
|
|
│ │ │
|
|
┌─────────▼─────┐ ┌───────▼───────┐ ┌─────▼─────────┐
|
|
│ MacBook │ │ Mac Mini │ │ Windows PC │
|
|
│ Claude Code │ │ Claude Code │ │ Claude Code │
|
|
│ mcp-remote │ │ mcp-remote │ │ mcp-remote │
|
|
└───────────────┘ └───────────────┘ └───────────────┘
|
|
```
|
|
|
|
## Setup
|
|
|
|
### Step 1: Deploy MCP Servers on docker-host
|
|
|
|
```bash
|
|
ssh hutson@10.10.10.206
|
|
cd /opt/mcp-central
|
|
docker-compose up -d
|
|
```
|
|
|
|
### Step 2: Configure Claude Code Clients
|
|
|
|
Each device needs `mcp-remote` installed and configured.
|
|
|
|
**Install mcp-remote:**
|
|
```bash
|
|
npm install -g mcp-remote
|
|
```
|
|
|
|
**Update ~/.claude/settings.json:**
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"airtable": {
|
|
"command": "npx",
|
|
"args": ["mcp-remote", "http://10.10.10.206:3001/sse"]
|
|
},
|
|
"exa": {
|
|
"command": "npx",
|
|
"args": ["mcp-remote", "http://10.10.10.206:3002/sse"]
|
|
},
|
|
"ticktick": {
|
|
"command": "npx",
|
|
"args": ["mcp-remote", "http://10.10.10.206:3003/sse"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**For remote access via Tailscale, use Tailscale IP:**
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"airtable": {
|
|
"command": "npx",
|
|
"args": ["mcp-remote", "http://100.x.x.x:3001/sse"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Which Servers Can Be Centralized?
|
|
|
|
| Server | Centralizable | Notes |
|
|
|--------|--------------|-------|
|
|
| Airtable | Yes | Just needs API key |
|
|
| Exa | Yes | Just needs API key |
|
|
| TickTick | Yes | OAuth token stored server-side |
|
|
| Slack | Yes | Bot token stored server-side |
|
|
| Ref | Yes | API key only |
|
|
| Beeper | No | Needs local Beeper Desktop |
|
|
| Google Sheets | Partial | OAuth flow needs user interaction |
|
|
| Monarch Money | Partial | Credentials stored server-side |
|
|
|
|
## Alternative: Shared Config File
|
|
|
|
If full centralization is too complex, you can at least share the config:
|
|
|
|
1. Store `settings.json` in a synced folder (e.g., Syncthing `configs/`)
|
|
2. Symlink from each device:
|
|
```bash
|
|
ln -s ~/Sync/configs/claude-settings.json ~/.claude/settings.json
|
|
```
|
|
|
|
This doesn't centralize the servers, but ensures all devices have the same config.
|
|
|
|
## Traefik Integration (Optional)
|
|
|
|
Add to Traefik for HTTPS access:
|
|
|
|
```yaml
|
|
# /etc/traefik/conf.d/mcp.yaml
|
|
http:
|
|
routers:
|
|
mcp-airtable:
|
|
rule: "Host(`mcp-airtable.htsn.io`)"
|
|
service: mcp-airtable
|
|
tls:
|
|
certResolver: cloudflare
|
|
services:
|
|
mcp-airtable:
|
|
loadBalancer:
|
|
servers:
|
|
- url: "http://10.10.10.206:3001"
|
|
```
|
|
|
|
Then use: `http://mcp-airtable.htsn.io/sse` in your config.
|