# Claude Desktop Configuration for Home Lab MCP Server
This guide shows how to connect Claude Desktop to your MCP server running on anvil via SSH.
## Configuration File Location
**macOS:**
```
~/Library/Application Support/Claude/claude_desktop_config.json
```
**Windows:**
```
%APPDATA%\Claude\claude_desktop_config.json
```
**Linux:**
```
~/.config/Claude/claude_desktop_config.json
```
## Configuration for Anvil (Home Lab)
Edit the configuration file and add:
```json
{
"mcpServers": {
"personal-productivity": {
"command": "ssh",
"args": [
"benro@100.72.67.122",
"docker",
"exec",
"-i",
"mcp-server",
"python",
"-m",
"mcp_server.server"
]
}
}
}
```
### What This Does
1. **ssh benro@100.72.67.122** - Connects to anvil via Tailscale
2. **docker exec -i mcp-server** - Attaches to the running container
3. **python -m mcp_server.server** - Starts the MCP server in stdio mode
4. **-i flag** - Keeps stdin open for bidirectional communication
## Prerequisites
### 1. SSH Key Authentication
Make sure you can SSH to anvil without a password:
```bash
# Test SSH connection
ssh benro@100.72.67.122 echo "Connected!"
# If it asks for a password, set up SSH keys:
ssh-copy-id benro@100.72.67.122
```
### 2. Tailscale Connection
Ensure Tailscale is running and connected:
```bash
# Check Tailscale status
tailscale status | grep anvil
```
You should see:
```
100.72.67.122 anvil benro@ linux -
```
### 3. MCP Server Running
Verify the container is running on anvil:
```bash
ssh benro@100.72.67.122 "docker ps | grep mcp-server"
```
You should see the mcp-server container in the output.
## Testing the Configuration
### 1. Test SSH Connection Manually
Before configuring Claude Desktop, test the full command:
```bash
ssh benro@100.72.67.122 "docker exec -i mcp-server python -m mcp_server.server"
```
This should start the MCP server and wait for input. Press Ctrl+C to exit.
### 2. Restart Claude Desktop
After editing the config file:
1. Completely quit Claude Desktop (don't just close the window)
2. Restart Claude Desktop
3. Look for the MCP server in the tools list (hammer icon)
### 3. Test a Tool
Try this in Claude Desktop:
```
Search for software engineering jobs at Anthropic
```
If configured correctly, you should see:
- Claude will use the `career_search_greenhouse` tool
- Results from Anthropic's job board will be returned
## Troubleshooting
### "Cannot connect to SSH server"
**Check:**
- Tailscale is running: `tailscale status`
- You can SSH manually: `ssh benro@100.72.67.122`
- SSH keys are set up (no password prompt)
**Fix:**
```bash
# Add SSH key if needed
ssh-copy-id benro@100.72.67.122
```
### "Container not found"
**Check:**
- Container is running on anvil
```bash
ssh benro@100.72.67.122 "docker ps"
```
**Fix:**
```bash
# Deploy/restart the MCP server
ssh benro@100.72.67.122 "cd ~/projects/mcp-project && docker compose up -d"
```
### "MCP tools not appearing in Claude"
**Check:**
- Config file JSON is valid (use a JSON validator)
- File path is correct for your OS
- Claude Desktop was fully restarted (quit and reopen)
**Fix:**
```bash
# Validate JSON
cat ~/Library/Application\ Support/Claude/claude_desktop_config.json | python -m json.tool
# Check Claude Desktop logs
# macOS: ~/Library/Logs/Claude/
# Look for connection errors
```
### "Connection times out"
**Check:**
- Tailscale is connected
- Container is running
- No firewall blocking Tailscale
**Fix:**
```bash
# Check Tailscale connectivity
tailscale ping 100.72.67.122
# Check container logs
ssh benro@100.72.67.122 "docker logs mcp-server"
```
### "Tools execute but return errors"
**Check container logs:**
```bash
ssh benro@100.72.67.122 "cd ~/projects/mcp-project && docker compose logs -f"
```
Look for Python errors, database issues, or scraping failures.
## Advanced: Multiple MCP Servers
You can run multiple MCP servers simultaneously:
```json
{
"mcpServers": {
"personal-productivity": {
"command": "ssh",
"args": ["benro@100.72.67.122", "docker", "exec", "-i", "mcp-server", "python", "-m", "mcp_server.server"]
},
"another-server": {
"command": "node",
"args": ["/path/to/other/server.js"]
}
}
}
```
## Security Notes
- **SSH over Tailscale:** Encrypted tunnel, no public internet exposure
- **No authentication on MCP server:** Single-user system, SSH provides auth
- **Credentials in .env:** Not exposed, only accessible inside container
## Performance Considerations
- **Latency:** SSH adds ~10-50ms depending on Tailscale route
- **Tailscale DERP:** If direct connection fails, traffic routes through relay
- **Container overhead:** Minimal, Docker exec is lightweight
Typical tool execution time:
- Job search: 500-2000ms (mostly scraping time)
- Database queries: <100ms
- Application tracking: <200ms
## What's Next?
Once connected, try these commands in Claude Desktop:
1. **Search for jobs:**
```
Search for jobs at Anthropic
```
2. **Track an application:**
```
Track a new application:
- Company: Anthropic
- Title: Research Engineer
- URL: https://jobs.lever.co/anthropic/example
- Status: interested
```
3. **View your pipeline:**
```
Show me my application pipeline
```
## Getting Help
- Check server logs: `ssh benro@100.72.67.122 "cd ~/projects/mcp-project && make logs"`
- Check Claude Desktop logs: `~/Library/Logs/Claude/`
- Test SSH connection: `ssh benro@100.72.67.122`
- Verify container: `ssh benro@100.72.67.122 "docker ps | grep mcp-server"`