← Back to directory
M

MCPProxy

Community
Local-first MCP proxy with BM25 tool discovery, security scanning, quarantine & ~99% token savings
GitHub source repository ↗
★ 375 Stars Category · Dev Tools Very popular
62FMRS · C

MCPProxy is a local-first MCP proxy written in Go whose purpose is to provide one safe endpoint in front of all upstream MCP servers. Its standout capabilities are BM25 tool discovery (retrieve_tools) for large context savings, quarantine of new servers to block Tool Poisoning Attacks, pluggable Docker-based security scanners, and a local, auditable Activity Log. The core is a single binary with an embedded web UI, cross-platform for macOS, Linux and Windows, with an optional macOS menu-bar app. Note that it is a third-party proxy, not an official protocol implementation; it runs locally, inspects tool arguments and results, and executes commands from your config, so config trust and local permission boundaries are the key risks. Best suited to teams with many tools that care about security and token cost.

Reliability
8/20
Security and permissions
12/20
Maintenance
13/20
Documentation
16/20
Setup experience
13/20
Read the FMRS scoring method →

MCPProxy is a local-first MCP proxy written in Go that puts one safe endpoint in front of every upstream MCP server. Instead of loading hundreds of tool schemas, agents call a single retrieve_tools function that runs BM25 keyword search across all connected servers — the README cites research showing ~99% token reduction with a 43% accuracy improvement. It federates many MCP servers (the README says it bypasses Cursor's 40-tool limit and OpenAI's 128-function cap), automatically quarantines new servers to block Tool Poisoning Attacks until manually approved, and can run pluggable Docker-based scanners (Snyk, Semgrep, Trivy, Cisco and others) whose findings are normalized to SARIF with a composite risk score. Every call is recorded in a local Activity Log with a request ID for auditing. The core is a single binary with an embedded web UI for macOS, Linux and Windows; macOS also offers an optional menu-bar app.

Tools

retrieve_tools
Run a BM25 search across every connected server using plain keywords, returning only the top-ranked matching tools with a call_with hint.
describe_tool
Load the full schema of a tool on demand, batching up to 5 ids per call.
call_tool_read
Execute a tool call with read intent; it cannot reach tools annotated as destructive.
call_tool_write
Execute a tool call with write intent, used for operations that modify data.
call_tool_destructive
Execute a tool call with destructive intent for high-risk operations, subject to annotation and quarantine/approval checks.

Setup

1) Install: on macOS download the DMG or use Homebrew (brew install --cask smart-mcp-proxy/mcpproxy/mcpproxy for the menu-bar app, brew install smart-mcp-proxy/mcpproxy/mcpproxy for the CLI only); on Windows download the installer; on Linux use the apt or dnf repository, the AUR package mcpproxy-bin, or a tarball. With Go 1.26+ you can run go install github.com/smart-mcp-proxy/mcpproxy-go/cmd/mcpproxy@latest. 2) Run mcpproxy serve, which starts an HTTP server on :8080. 3) Edit ~/.mcpproxy/mcp_config.json and add upstream servers under mcpServers (local stdio or remote http). 4) Connect your IDE/client as an MCP server: in Cursor add an MCP server with type http and url http://localhost:8080/mcp/; for Claude Desktop use npx -y mcp-remote http://localhost:8080/mcp. Optional: enable HTTPS (MCPPROXY_TLS_ENABLED=true or tls.enabled in config) and trust the certificate with mcpproxy trust-cert.

claude_desktop_config.json
{
  "mcpServers": {
    "MCPProxy": {
      "type": "http",
      "url": "http://localhost:8080/mcp/"
    }
  }
}

Fit and risk

Best for

  • Developers and teams that need a unified, secure entry point in front of many MCP servers
  • Security-conscious users worried about Tool Poisoning Attacks who want new servers quarantined by default
  • AI agent users limited by context windows or client tool caps who want large token savings

Not for

  • Users who want a fully cloud-hosted setup and will not run a local proxy
  • Lightweight setups connecting only one or two simple MCP servers where discovery, quarantine and auditing add no value
  • Environments where running a Go binary or local service is not possible

Required permissions

  • Read and write the local config directory ~/.mcpproxy/ (mcp_config.json, certificates, activity logs)
  • Listen on a local HTTP port (127.0.0.1:8080 by default)
  • Spawn local stdio upstream MCP servers using the commands in your configuration
  • Connect to remote HTTP upstream servers as configured, potentially including OAuth login
  • If HTTPS is enabled, add a self-signed CA certificate to the system keychain via mcpproxy trust-cert
  • If third-party scanners are enabled, a working Docker environment is required

Risks and side effects

  • The proxy becomes the single channel for all upstream tools, so a misconfiguration could expose tools the agent should not reach
  • The proxy inspects tool arguments and responses for sensitive data, and sensitive content may end up in the local activity log
  • Quarantine blocks new servers, but an already-approved server that later changes still requires re-approval (the README notes tool changes trigger blocking)
  • Spawning stdio upstreams means the proxy can execute the commands in your config, so the config source must be trusted
  • HTTPS uses self-signed certificates that must be manually trusted, otherwise clients fail to connect

Troubleshooting

  1. Client cannot connect: confirm mcpproxy serve is running, port 8080 is free, and check the service with curl http://localhost:8080/api/v1/status
  2. HTTPS connection fails: enable TLS (MCPPROXY_TLS_ENABLED=true or tls.enabled), re-trust with mcpproxy trust-cert --force, and verify ca.pem, server.pem and server-key.pem exist under ~/.mcpproxy/certs/
  3. Claude Desktop certificate errors: make sure NODE_EXTRA_CA_CERTS points to the correct ca.pem and restart Claude Desktop afterwards
  4. Tools are missing: new servers are quarantined by default and must be approved in the web UI or via security commands; also check that enabled is true in mcp_config.json
  5. Automations fail: run mcpproxy tools preflight; exit code 10 means a transient issue (server starting), 11 means blocked and needing a human, 12 means an unknown or mistyped tool id
  6. Debugging proxy behavior: raise the log level with mcpproxy serve --log-level=debug and correlate a single workflow with mcpproxy activity list --request-id <id>

Use cases

Expose hundreds of MCP tools to an AI agent without blowing the context window or hitting client tool limits
Quarantine, scan and manually approve upstream MCP servers before letting agents use them
Preflight required tools for unattended cron/CI automations via mcpproxy tools preflight
Audit every agent tool call by request ID through the local Activity Log

Supported clients

CursorFull support
Claude DesktopFull support
VS CodeFull support
GooseFull support