MCP (Model Context Protocol) servers extend Claude with tools โ file access, web search, Tana, farm data, homelab ops, and more. Active server list lives in ~/Library/Application Support/Claude/claude_desktop_config.json (symlinked to ~/Sync/ED/config/claude_desktop_config.json so it Syncthing-replicates).
This page tracks what’s actually loaded right now plus what’s been built but is dormant. The list shifts as MCPs are added, retired, or moved between active and on-shelf โ for the canonical current state, the bundle (~/Sync/ED/.claude-context.md) is always more current than this page.
These thirteen are configured and load when Claude Desktop launches. Tools-by-server count is approximate; check each MCP’s list_tools for the live list.
| Server | Where it lives | Purpose |
|---|---|---|
| farm-data | ~/.mcp-servers/farm-data/server.py |
Farm DB โ species catalog, plantings, observations, harvests, inventory, hive inspections, GIS feature lookup. Farm DB docs |
| structured-exec | ~/.mcp-servers/structured-bash/server.py |
Argv-array shell execution โ exec, ssh_exec, pct_exec. No shell-string composition. Renamed in config from “structured-bash” because Cowork silently filters MCP servers with “bash” in the name |
| memory | ~/.mcp-servers/memory/server.py |
Persistent knowledge graph at ~/Sync/ED/memory/knowledge.json โ memory_search (BM25 ranked), memory_get, memory_append_observation, memory_create_entity, memory_list_entities, memory_stats. All mutations back up to knowledge.json.bak.<ts> and re-validate JSONL before swap |
| tana-local | npx mcp-remote โ http://127.0.0.1:8262/mcp |
Tana desktop app’s own MCP server. Bearer PAT auth (NOT older Input-API token). 20 tools. Token in SECRETS.md row 22. Tana details |
| ha-mcp | npx mcp-remote โ http://192.168.0.10:9583/private_<path> |
Home Assistant โ 85 tools. Currently unreachable: fpve.netbird.cloud is offline (late May 2026 outage) |
| firecrawl | ~/.mcp-servers/firecrawl/server.py |
Web scraping, crawling, content extraction, monitoring |
| cron-validator | ~/.mcp-servers/cron-validator/server.py |
Validate cron expressions, parse launchd .plist files (StartInterval, single-dict StartCalendarInterval, multi-schedule lists), check schedule overlap |
| git-semantic | ~/.mcp-servers/git-semantic/server.py |
git_repo_overview, git_search_commits, git_commit_detail, git_change_summary, git_blame_lines. Param name is repo (not repo_path). DEFAULT_REPO = ~/homelab-config (cloned from pve, pulled daily by com.bee.pull-homelab-config) |
| netbird | ~/.mcp-servers/netbird/server.py |
NetBird mesh โ list peers, list groups, list networks/routes/setup-keys, get/add/remove peer groups, delete peers |
| usda-plants | ~/.mcp-servers/usda-plants/server.py |
Plant search, native-status, symbol lookup against the USDA Plants public API |
| inaturalist | ~/.mcp-servers/inaturalist/server.py |
Species observations near coords, pollinators, county species, taxon lookup. Defaults to Brownsville coords + Licking County place_id |
| mermaid-render | ~/.mcp-servers/mermaid-render/server.py |
mermaid_render (PNG/SVG via mmdc at /opt/homebrew/bin/mmdc), mermaid_validate, mermaid_template |
| spotify-mcp | ~/.mcp-servers/spotify-mcp/server.py |
Spotify Web API โ 28 tools across playlist read/write, library (unified /me/library), listening history, basic playback. PKCE OAuth, refresh token cached on disk. Feb 2026 endpoint migration applied 2026-05-26. Spotify MCP docs |
These have working server code but aren’t in claude_desktop_config.json. Wire them up when needed โ most have been deferred either because the upstream is redundant (HA covers weather) or because the API costs money.
| Server | Status |
|---|---|
| homelab-snapshot | Runs as a launchd job (com.bee.homelab-snapshot.plist) every few minutes, writes ~/Sync/ED/.homelab-snapshot.json. Read that file directly for state instead of wiring the MCP. |
| tidal-mcp | Tidal account active, server built, not currently wired. Spotify is the active music surface. |
| nws-weather | Skipped โ Home Assistant integration covers weather more thoroughly. |
| wallabag | Server built; pending credential rotation. |
| json-schema | Server built; tier-2 install. |
| diff-preview | Wrapper around ~/scripts/diff-preview.sh. Tier-2. |
| image-gen | Needs OpenAI key. Cowork canvas-design covers basics. |
| Server | Retired | Why |
|---|---|---|
| sequential-thinking | 2026-05-24 | Internal reasoning + behavioral rules cover the original failure mode. Don’t reintroduce without explicit ask. |
| brave / kagi / tavily / exa search MCPs | rotated out as keys lapsed | Web research now goes through WebSearch + mcp__workspace__web_fetch. Re-wire any of these if they earn their keep. |
| navidrome-mcp | rotated out | Direct Navidrome web UI sufficient. |
| desktop-commander | replaced by structured-exec |
The argv-array pattern killed the shell-string-composition class of bugs. Keep desktop-commander as fallback only for interactive REPLs. |
In addition to the locally-configured 12, each Cowork session ships with a set of “connected” integrations the user has authorized via Cowork โ Gmail, Google Calendar, GitHub, Spotify, Drafts, Read/Send iMessages, PDF Tools, Claude in Chrome, Control your Mac (osascript), and others. These appear as deferred tools at session start; load their schemas with ToolSearch before calling.
These are managed by Cowork and not in claude_desktop_config.json.
Path: ~/Library/Application Support/Claude/claude_desktop_config.json
Symlink target: ~/Sync/ED/config/claude_desktop_config.json (Syncthing-replicated, so Studio and MacBook share one source of truth).
After editing, Quit Claude Desktop fully (Cmd-Q from the menu bar, not just close the window) and relaunch to reload servers. MCP venvs auto-rebuild on the MacBook via com.bee.rebuild-mcp-venvs.plist when ~/.mcp-servers/ changes.
Health monitor: ~/scripts/check-mcp-health.py runs 6ร/day (06:15, 09:15, 12:15, 15:15, 18:15, 21:15) via com.bee.mcp-health-check.plist. Scans each MCP’s log in ~/Library/Logs/Claude/mcp-server-<name>.log for Server transport closed unexpectedly, connect-timeout, fetch-failed, [error] lines in the last 6 hours; pushes a Gotify alert on any failure.