Server data from the Official MCP Registry
Smart MCP proxy with BM25 tool discovery, quarantine security, and ~99% token savings
Smart MCP proxy with BM25 tool discovery, quarantine security, and ~99% token savings
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry. Trust signals: trusted author (3/3 approved); 4 highly-trusted packages.
9 files analyzed Β· No issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
From the project's GitHub README.
MCPProxy is an open-source desktop application that super-charges AI agents with intelligent tool discovery, massive token savings, and built-in security quarantine against malicious MCP servers.
π Visit mcpproxy.app
retrieve_tools function instead of hundreds of schemas. Research shows ~99 % token reduction with 43 % accuracy improvement.macOS (Recommended - DMG Installer):
Download the latest DMG installer for your architecture:
mcpproxy-*-darwin-arm64.dmgmcpproxy-*-darwin-amd64.dmgWindows (Recommended - Installer):
Download the latest Windows installer for your architecture:
mcpproxy-setup-*-amd64.exemcpproxy-setup-*-arm64.exeThe installer automatically:
mcpproxy.exe (core server) and mcpproxy-tray.exe (system tray app) to Program Files.\mcpproxy-setup.exe /VERYSILENTAlternative install methods:
macOS (Homebrew):
brew install smart-mcp-proxy/mcpproxy/mcpproxy
Linux (Debian/Ubuntu) β apt repository, auto-updates via apt upgrade:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://apt.mcpproxy.app/mcpproxy.gpg \
| sudo tee /etc/apt/keyrings/mcpproxy.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/mcpproxy.gpg] https://apt.mcpproxy.app stable main" \
| sudo tee /etc/apt/sources.list.d/mcpproxy.list > /dev/null
sudo apt update && sudo apt install mcpproxy
Linux (Fedora / RHEL / Rocky / AlmaLinux) β dnf repository, auto-updates via dnf upgrade:
sudo dnf config-manager --add-repo https://rpm.mcpproxy.app/mcpproxy.repo
sudo dnf install -y mcpproxy
Both packages ship a hardened systemd unit and start the service automatically. Repository signing key fingerprint: 3B6F A1AD 5D53 59DA 51F1 8DDC E1B5 9B9B A1CB 8A3B.
For one-off .deb / .rpm downloads (air-gapped installs), grab them from the latest release.
Manual download (all platforms):
Prerelease Builds (Latest Features):
Want to try the newest features? Download prerelease builds from the next branch:
dmg-darwin-arm64 (Apple Silicon Macs)dmg-darwin-amd64 (Intel Macs)versioned-linux-amd64, versioned-windows-amd64 (other platforms)Note: Prerelease builds are signed and notarized for macOS but contain cutting-edge features that may be unstable.
Anywhere with Go 1.22+:
go install github.com/smart-mcp-proxy/mcpproxy-go/cmd/mcpproxy@latest
mcpproxy serve # starts HTTP server on :8080 and shows tray
Edit mcp_config.json (see below). Or ask LLM to add servers (see doc).
π Complete Setup Guide - Detailed instructions for Cursor, VS Code, Claude Desktop, and Goose
"MCPProxy": {
"type": "http",
"url": "http://localhost:8080/mcp/"
}
~/.mcpproxy/mcp_config.json){
"listen": "127.0.0.1:8080", // Localhost-only by default for security
"data_dir": "~/.mcpproxy",
"enable_tray": true,
// Search & tool limits
"top_k": 5,
"tools_limit": 15,
"tool_response_limit": 20000,
// Optional HTTPS configuration (disabled by default)
"tls": {
"enabled": false, // Set to true to enable HTTPS
"require_client_cert": false,
"hsts": true
},
"mcpServers": [
{ "name": "local-python", "command": "python", "args": ["-m", "my_server"], "protocol": "stdio", "enabled": true },
{ "name": "remote-http", "url": "http://localhost:3001", "protocol": "http", "enabled": true }
]
}
| Field | Description | Default |
|---|---|---|
listen | Address the proxy listens on | 127.0.0.1:8080 |
data_dir | Folder for config, DB & logs | ~/.mcpproxy |
enable_tray | Show native system-tray UI | true |
top_k | Tools returned by retrieve_tools | 5 |
tools_limit | Max tools returned to client | 15 |
tool_response_limit | Auto-truncate responses above N chars (0 disables) | 20000 |
tls.enabled | Enable HTTPS with local CA certificates | false |
tls.require_client_cert | Enable mutual TLS (mTLS) for client authentication | false |
tls.certs_dir | Custom directory for TLS certificates | {data_dir}/certs |
tls.hsts | Send HTTP Strict Transport Security headers | true |
docker_isolation | Docker security isolation settings (see below) | enabled: false |
Main Commands:
mcpproxy serve # Start proxy server with system tray
mcpproxy tools list --server=NAME # Debug tool discovery for specific server
mcpproxy trust-cert # Install CA certificate as trusted (for HTTPS)
Management Commands:
# Single-server operations
mcpproxy upstream list # List all servers with status
mcpproxy upstream restart <name> # Restart specific server
mcpproxy upstream enable <name> # Enable specific server
mcpproxy upstream disable <name> # Disable specific server
mcpproxy upstream logs <name> # View server logs (--tail, --follow)
# Bulk operations (multiple servers)
mcpproxy upstream restart --all # Restart all configured servers
mcpproxy upstream enable --all # Enable all servers
mcpproxy upstream disable --all # Disable all servers
# Health diagnostics
mcpproxy doctor # Run comprehensive health checks
Management Service Architecture:
All management operations (CLI, REST API, and MCP protocol) share a unified service layer that provides:
disable_management and read_only_mode settingsServe Command Flags:
mcpproxy serve --help
-c, --config <file> path to mcp_config.json
-l, --listen <addr> listen address for HTTP mode
-d, --data-dir <dir> custom data directory
--log-level <level> trace|debug|info|warn|error
--log-to-file enable logging to file in standard OS location
--read-only enable read-only mode
--disable-management disable management features
--allow-server-add allow adding new servers (default true)
--allow-server-remove allow removing existing servers (default true)
--enable-prompts enable prompts for user input (default true)
--tool-response-limit <num> tool response limit in characters (0 = disabled)
Tools Command Flags:
mcpproxy tools list --help
-s, --server <name> upstream server name (required)
-l, --log-level <level> trace|debug|info|warn|error (default: info)
-t, --timeout <duration> connection timeout (default: 30s)
-o, --output <format> output format: table|json|yaml (default: table)
-c, --config <file> path to mcp_config.json
Debug Examples:
# List tools with trace logging to see all JSON-RPC frames
mcpproxy tools list --server=github-server --log-level=trace
# List tools with custom timeout for slow servers
mcpproxy tools list --server=slow-server --timeout=60s
# Output tools in JSON format for scripting
mcpproxy tools list --server=weather-api --output=json
MCPProxy provides secure secrets management using your operating system's native keyring to store sensitive information like API keys, tokens, and credentials.
${keyring:secret_name} placeholders in config filesStore a secret:
# Interactive prompt (recommended for sensitive values)
mcpproxy secrets set github_token
# From command line (less secure - visible in shell history)
mcpproxy secrets set github_token "ghp_abcd1234..."
# From environment variable
mcpproxy secrets set github_token --from-env GITHUB_TOKEN
List all secrets:
mcpproxy secrets list
# Output: Found 3 secrets in keyring:
# github_token
# openai_api_key
# database_password
Retrieve a secret:
mcpproxy secrets get github_token
Delete a secret:
mcpproxy secrets delete github_token
Use ${keyring:secret_name} placeholders in your mcp_config.json:
{
"mcpServers": [
{
"name": "github-mcp",
"command": "uvx",
"args": ["mcp-server-github"],
"protocol": "stdio",
"env": {
"GITHUB_TOKEN": "${keyring:github_token}",
"OPENAI_API_KEY": "${keyring:openai_api_key}"
},
"enabled": true
},
{
"name": "database-server",
"command": "python",
"args": ["-m", "my_db_server", "--password", "${keyring:database_password}"],
"protocol": "stdio",
"enabled": true
}
]
}
Placeholder expansion works in:
env field)args field)Storage Location:
/Applications/Utilities/Keychain Access.app)Service Name: All secrets are stored under the service name "mcpproxy"
Global Scope:
--config flag)--data-dir flag)If you use MCPProxy with multiple projects or environments, use descriptive secret names:
# Environment-specific secrets
mcpproxy secrets set prod_database_url
mcpproxy secrets set dev_database_url
mcpproxy secrets set staging_api_key
# Project-specific secrets
mcpproxy secrets set work_github_token
mcpproxy secrets set personal_github_token
mcpproxy secrets set client_a_api_key
Then reference them in your configs:
{
"mcpServers": [
{
"name": "work-github",
"env": {
"GITHUB_TOKEN": "${keyring:work_github_token}"
}
},
{
"name": "personal-github",
"env": {
"GITHUB_TOKEN": "${keyring:personal_github_token}"
}
}
]
}
Secret not found:
# Verify secret exists
mcpproxy secrets list
# Check the exact secret name (case-sensitive)
mcpproxy secrets get your_secret_name
Keyring access denied:
System Preferences > Security & Privacy > Privacy > AccessibilityPlaceholder not resolving:
# Test secret resolution
mcpproxy secrets get your_secret_name
# Check logs for secret resolution errors
mcpproxy serve --log-level=debug
MCPProxy provides Docker isolation for stdio MCP servers to enhance security by running each server in its own isolated container:
Add to your mcp_config.json:
{
"docker_isolation": {
"enabled": true,
"memory_limit": "512m",
"cpu_limit": "1.0",
"timeout": "60s",
"network_mode": "bridge",
"default_images": {
"python": "python:3.11",
"uvx": "python:3.11",
"node": "node:20",
"npx": "node:20",
"go": "golang:1.21-alpine"
}
},
"mcpServers": [
{
"name": "isolated-python-server",
"command": "uvx",
"args": ["some-python-package"],
"env": {
"API_KEY": "your-api-key"
},
"enabled": true
// Docker isolation applied automatically
},
{
"name": "custom-isolation-server",
"command": "python",
"args": ["-m", "my_server"],
"isolation": {
"enabled": true,
"image": "custom-python:latest",
"working_dir": "/app"
},
"enabled": true
}
]
}
| Command | Detected Runtime | Docker Image |
|---|---|---|
uvx | Python with UV package manager | python:3.11 |
npx | Node.js with npm | node:20 |
python, python3 | Python | python:3.11 |
node | Node.js | node:20 |
go | Go language | golang:1.21-alpine |
cargo | Rust | rust:1.75-slim |
# Check which servers are using Docker isolation
mcpproxy serve --log-level=debug --tray=false | grep -i "docker isolation"
# Monitor Docker containers created by MCPProxy
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"
# View container logs for a specific server
docker logs <container-id>
MCPProxy includes intelligent Docker recovery that automatically detects and handles Docker engine outages:
MCPProxy shows native system notifications during Docker recovery:
| Event | Notification |
|---|---|
| Recovery Started | "Docker engine detected offline. Reconnecting servers..." |
| Recovery Success | "Successfully reconnected X server(s)" |
| Recovery Failed | "Unable to reconnect servers. Check Docker status." |
| Retry Attempts | "Retry attempt X. Next check in Y" |
Servers don't reconnect after Docker recovery:
# 1. Check Docker is running
docker ps
# 2. Check mcpproxy logs
cat ~/.mcpproxy/logs/main.log | grep -i "docker recovery"
# 3. Verify container labels
docker ps -a --filter label=com.mcpproxy.managed
# 4. Force reconnect via system tray
# System Tray β Force Reconnect All Servers
Containers not cleaned up on shutdown:
# Check for orphaned containers
docker ps -a --filter label=com.mcpproxy.managed=true
# Manual cleanup if needed
docker ps -a --filter label=com.mcpproxy.managed=true -q | xargs docker rm -f
Docker recovery taking too long:
MCPProxy provides seamless OAuth 2.1 authentication for MCP servers that require user authorization (like Cloudflare AutoRAG, Runlayer, GitHub, etc.):
For most OAuth servers (including Runlayer, Cloudflare, etc.), no OAuth configuration is needed. MCPProxy automatically:
resource parameter automatically{
"mcpServers": [
{
"name": "runlayer-slack",
"url": "https://oauth.runlayer.com/api/v1/proxy/YOUR-UUID/mcp"
},
{
"name": "cloudflare_autorag",
"url": "https://autorag.mcp.cloudflare.com/mcp",
"protocol": "streamable-http"
}
]
}
That's it - no oauth block needed. MCPProxy handles everything automatically.
Use explicit configuration when you need to:
{
"mcpServers": [
{
"name": "github-enterprise",
"url": "https://github.example.com/mcp",
"protocol": "http",
"oauth": {
"scopes": ["repo", "user:email", "read:org"],
"pkce_enabled": true,
"client_id": "your-registered-client-id",
"extra_params": {
"resource": "https://api.github.example.com",
"audience": "github-enterprise-api"
}
}
}
]
}
OAuth Configuration Options (all optional):
scopes: OAuth scopes to request (auto-discovered if not specified)pkce_enabled: Enable PKCE for security (default: true, recommended)client_id: Pre-registered client ID (uses Dynamic Client Registration if empty)client_secret: Client secret (optional, for confidential clients)extra_params: Additional OAuth parameters (override auto-detected values)Check OAuth status and auto-detected parameters:
# View OAuth status for a specific server
mcpproxy auth status --server=runlayer-slack
# View all OAuth-enabled servers
mcpproxy auth status --all
# Run health diagnostics including OAuth issues
mcpproxy doctor
Enable debug logging to see the complete OAuth flow:
mcpproxy serve --log-level=debug --tray=false
Check logs for OAuth flow details:
tail -f ~/Library/Logs/mcpproxy/main.log | grep -E "(oauth|OAuth)"
Solve project context issues by specifying working directories for stdio MCP servers:
{
"mcpServers": [
{
"name": "ast-grep-project-a",
"command": "npx",
"args": ["ast-grep-mcp"],
"working_dir": "/home/user/projects/project-a",
"enabled": true
},
{
"name": "git-work-repo",
"command": "npx",
"args": ["@modelcontextprotocol/server-git"],
"working_dir": "/home/user/work/company-repo",
"enabled": true
}
]
}
Benefits:
Tool-based Management:
# Add server with working directory
mcpproxy call tool --tool-name=upstream_servers \
--json_args='{"operation":"add","name":"git-myproject","command":"npx","args_json":"[\"@modelcontextprotocol/server-git\"]","working_dir":"/home/user/projects/myproject","enabled":true}'
# Update existing server working directory
mcpproxy call tool --tool-name=upstream_servers \
--json_args='{"operation":"update","name":"git-myproject","working_dir":"/new/project/path"}'
MCPProxy works with HTTP by default for easy setup. HTTPS is optional and primarily useful for production environments or when stricter security is required.
π‘ Note: Most users can stick with HTTP (the default) as it works perfectly with all supported clients including Claude Desktop, Cursor, and VS Code.
1. Enable HTTPS (choose one method):
# Method 1: Environment variable
export MCPPROXY_TLS_ENABLED=true
mcpproxy serve
# Method 2: Config file
# Edit ~/.mcpproxy/mcp_config.json and set "tls.enabled": true
2. Trust the certificate (one-time setup):
mcpproxy trust-cert
3. Use HTTPS URLs:
https://localhost:8080/mcphttps://localhost:8080/ui/For Claude Desktop, add this to your claude_desktop_config.json:
HTTP (Default - Recommended):
{
"mcpServers": {
"mcpproxy": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:8080/mcp"
]
}
}
}
HTTPS (With Certificate Trust):
{
"mcpServers": {
"mcpproxy": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://localhost:8080/mcp"
],
"env": {
"NODE_EXTRA_CA_CERTS": "~/.mcpproxy/certs/ca.pem"
}
}
}
}
localhost, 127.0.0.1, ::1mcpproxy trust-cert to add to system keychain~/.mcpproxy/certs/ (ca.pem, server.pem, server-key.pem)Certificate trust issues:
# Re-trust certificate
mcpproxy trust-cert --force
# Check certificate location
ls ~/.mcpproxy/certs/
# Test HTTPS connection
curl -k https://localhost:8080/api/v1/status
Claude Desktop connection issues:
NODE_EXTRA_CA_CERTS points to the correct ca.pem filemcpproxy serve --log-level=debugWe welcome issues, feature ideas, and PRs!
make dev-setup # Install swag, frontend deps, Playwright
brew install prek # Install pre-commit hook runner (or: uv tool install prek)
prek install # Install pre-commit hooks
prek install --hook-type pre-push # Install pre-push hooks
We use prek to catch issues before they reach CI:
| Hook | Stage | What it does |
|---|---|---|
gofmt | pre-commit | Auto-formats staged Go files |
trailing-whitespace | pre-commit | Removes trailing whitespace |
end-of-file-fixer | pre-commit | Ensures files end with newline |
check-merge-conflict | pre-commit | Detects merge conflict markers |
swagger-verify | pre-push | Fails if OpenAPI spec is out of date |
go-build | pre-push | Verifies the project compiles |
Run hooks manually: prek run --all-files
make build # Build frontend + backend
make swagger # Regenerate OpenAPI spec
make test # Unit tests
make test-e2e # E2E tests
make lint # Run linters
Be the first to review this server!
by Modelcontextprotocol Β· Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno Β· Developer Tools
Toleno Network MCP Server β Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace Β· Developer Tools
Create, build, and publish Python MCP servers to PyPI β conversationally.
by Microsoft Β· Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace Β· Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm β conversationally
by mcp-marketplace Β· Finance
Free stock data and market news for any MCP-compatible AI assistant.