Skip to main content

Discover, health-check, and sync MCP servers across Claude Code, Cursor, Windsurf, and more. Git-native project configs with atomic IDE write-back.

Project description

arete-mcp

One CLI to discover, health-check, and sync MCP servers across Claude Code, Cursor, Windsurf, and more.

CI CodeQL Coverage Python License: MIT PyPI


The Problem

You use Claude Code, Cursor, and Windsurf. Each stores MCP servers in a different JSON file with a different schema.

~/.claude.json
~/.cursor/mcp.json
~/.windsurf/mcp_config.json

Your team can't share configs via git. Switching projects means manual copy-paste. One IDE has a server the others don't. You have no idea which servers are actually healthy.

mcp-manager gives you one CLI — and one .mcp-manager.yml in your repo — to rule them all.


30-Second Quickstart

# Install
pip install arete-mcp

# See every MCP server across every IDE
mcp-manager list

# Check if they actually work (not just "starts")
mcp-manager health --deep

# Scaffold a project config
mcp-manager project init

# Sync it to Cursor (dry-run first, then commit)
mcp-manager sync --ide cursor --dry-run
mcp-manager sync --ide cursor

What Makes This Different

arete-mcp Other Managers
Config lives in repo .mcp-manager.yml committed with your code ❌ Global per-IDE JSON files
Atomic write-back ✅ Backups + dry-run before touching IDE configs ❌ Direct overwrite, no rollback
Deep health checks ✅ Verifies tools/list responds, deps on PATH ❌ "Process started" only
Zero daemon ✅ CLI-only, no background services ❌ Some require persistent gateway/web UI
Python-native pip install, works wherever Python 3.11+ does ❌ Node/Go binaries, extra tooling
Cross-IDE discovery ✅ Reads Claude, Cursor, Windsurf, project-level .mcp.json ⚠️ Partial coverage

Features

🔍 Discovery

Reads MCP server configs from:

  • Claude Code (~/.claude.json)
  • Claude Desktop (~/.config/Claude/claude_desktop_config.json)
  • Cursor (~/.cursor/mcp.json)
  • Windsurf (~/.windsurf/mcp_config.json)
  • Project-level (.mcp.json, walks parent dirs)

🏥 Health Checks

  • Fast: Process spawn (stdio) or HTTP ping (SSE) — 10s timeout
  • Deep: Dependency validation (node, python, docker on PATH) + verify tools/list returns non-empty
  • Batch: Check all servers in parallel with mcp-manager health

📝 Config Write-Back (Atomic & Safe)

  • Writes discovered/merged configs back to IDE-specific JSON files
  • Atomic: temp file + rename (never corrupts your IDE config)
  • Backups: .mcp-manager-backup created before any modification
  • Dry-run: Preview changes without touching disk

📁 Project-Scoped Configs

Create .mcp-manager.yml in any repo root:

project: my-service
servers:
  postgres-local:
    command: node
    args: ["./mcp/postgres-server/dist/index.js"]
    env:
      DATABASE_URL: ${DATABASE_URL}
  stripe-mcp:
    command: npx
    args: ["-y", "@stripe/mcp"]
    env:
      STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY}
  • Environment variables (${VAR}) resolved at load time
  • Validated before write-back (missing env vars or commands caught early)
  • Project config wins on merge conflicts with global registry

🔄 Export / Import

Portable YAML/JSON for backup, sharing, and CI:

mcp-manager export servers.yaml
mcp-manager import servers.yaml

🖥️ Server Monitor (Auto-Restart)

Keep stdio MCP servers alive in development:

mcp-manager monitor --project .
  • Watches server processes and restarts on crash
  • Exponential backoff (1s → 2s → 4s ... max 30s)
  • Graceful shutdown on Ctrl+C / SIGTERM
  • JSON status output: mcp-manager monitor --json

🔒 CI Gate / GitHub Action

Validate .mcp-manager.yml on every PR:

# .github/workflows/mcp-validate.yml
- uses: AreteDriver/mcp-manager/.github/actions/mcp-manager-validate@main
  with:
    path: "."
    strict: "false"

Catches missing env vars, broken commands, and (with --strict) failing servers before merge.


Usage

# List all MCP servers across all IDEs
mcp-manager list

# Filter by IDE
mcp-manager list --tool cursor

# Health check all servers
mcp-manager health

# Deep health check — validate dependencies and verify tools/list
mcp-manager health --deep

# Show server-to-IDE mapping
mcp-manager map

# Export/import configs (portable YAML/JSON)
mcp-manager export servers.yaml
mcp-manager import servers.yaml

# Add/remove servers from the registry
mcp-manager add my-server --command "node server.js"
mcp-manager remove my-server

# Sync project config to IDE
mcp-manager sync --ide cursor --dry-run
mcp-manager sync --ide cursor

# Project-level MCP config
mcp-manager project init              # Scaffold .mcp-manager.yml
mcp-manager project validate          # Check env vars, commands on PATH
mcp-manager project export --ide cursor

# Keep stdio servers alive with auto-restart
mcp-manager monitor                   # Foreground monitor, Ctrl+C to stop

# CI gate — validate .mcp-manager.yml in CI
mcp-manager validate                  # Fast validation
mcp-manager validate --strict         # + deep health checks on all servers

Supported IDEs

IDE Config Path Write-Back
Claude Code ~/.claude.json
Claude Desktop ~/.config/Claude/claude_desktop_config.json
Cursor ~/.cursor/mcp.json
Windsurf ~/.windsurf/mcp_config.json
Project-level .mcp.json (walks parent dirs)

Transport Types

  • stdio — local subprocess, JSON-RPC over stdin/stdout
  • sse — Server-Sent Events over HTTP
  • http — HTTP POST JSON-RPC

Status

  • Read-only config discovery across 5 IDE configs
  • Async health checks with timeout
  • JSON registry with add/remove
  • YAML/JSON export/import
  • Protocol handshake testing
  • Config write-back (atomic, with backups)
  • Project-scoped .mcp-manager.yml support
  • Deep health checks (dependency validation + tools/list verification)
  • Server auto-restart monitor
  • CI gate (mcp-manager validate + GitHub Action)
  • Server marketplace / remote registry

See ROADMAP.md for what's next.


Contributing

git clone https://github.com/AreteDriver/mcp-manager.git
cd mcp-manager
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Preflight Checklist (required before PR)

# 1. Linting & formatting
ruff check .
ruff format --check

# 2. Type checking
mypy src/mcp_manager

# 3. Tests with coverage (must be ≥80%)
pytest --cov=mcp_manager --cov-fail-under=80

# 4. Security audit
pip-audit

CI enforces all of the above. PRs that fail any gate will not merge.


Discord — Join the community

Part of the AreteDriver AI tooling ecosystem.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

arete_mcp-0.3.0.tar.gz (51.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

arete_mcp-0.3.0-py3-none-any.whl (35.8 kB view details)

Uploaded Python 3

File details

Details for the file arete_mcp-0.3.0.tar.gz.

File metadata

  • Download URL: arete_mcp-0.3.0.tar.gz
  • Upload date:
  • Size: 51.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for arete_mcp-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e47bb16f9cc9a808aaa87465750eb5aca2a9028fad0c4ca61665188304fc6c54
MD5 19960e8d184d5056d422062b7ed9ea4d
BLAKE2b-256 fa8f557cd1d92e766ba7f3bf4be3bd58c4dd7983c50981eb35bdbb484c336c97

See more details on using hashes here.

Provenance

The following attestation bundles were made for arete_mcp-0.3.0.tar.gz:

Publisher: release.yml on AreteDriver/mcp-manager

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arete_mcp-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: arete_mcp-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 35.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for arete_mcp-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 df2f0102e725ee0b6d00769519110e0d60397c52e89641048fd96dc9c19f1527
MD5 4e67565ddc20cad7e718ae667715167f
BLAKE2b-256 5ab14b7a55d28498d383cbcacdf5905c1c9b270bad6ef89f2d252f20011b90a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for arete_mcp-0.3.0-py3-none-any.whl:

Publisher: release.yml on AreteDriver/mcp-manager

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page