retrieve_toolsLABSCO SUMMARY
One search tool replaces hundreds of schemas, and the call variants make intent explicit.
Cursor's 40-tool limit and OpenAI's 128-function cap are the reason this exists, and the fix is a discovery step: the agent asks for what it needs in keywords and gets back a handful of matches. Splitting the call into read, write and destructive variants is the part that matters for review — the proxy knows which one an agent reached for, and the activity log records it. New servers land in quarantine until you approve them, which is the right default for a proxy that federates other people's code.
What it is
A federating proxy: one endpoint in front of every MCP server you use, with a search step so the agent loads only the tools it needs for the task at hand.
What you get
- retrieve_tools — BM25 search across every connected server, returning the top matches with a hint about which call variant to use
- call_tool_read, call_tool_write and call_tool_destructive — the three call variants, split by what the tool actually does
- upstream_servers for managing the connected servers, and code_execution for JavaScript orchestration
- Routing modes on separate paths: /mcp/call for search-then-call, /mcp/all to expose every upstream tool directly as serverName__toolName, and /mcp/code for the orchestration mode
- Automatic quarantine of newly added servers until you approve them, which blocks tool poisoning
- Pluggable Docker-based security scanners — Snyk, Semgrep, Trivy, Cisco — run against quarantined servers, with findings normalised to SARIF and a composite risk score
- An embedded web UI in the binary, with a server dashboard, activity log and sensitive-data detection
- An optional macOS menu-bar app for start/stop, health, quarantine and logs
Requirements
A single binary for macOS, Windows and Linux — DMG and Windows installers, Homebrew cask or formula, apt and dnf repositories with a hardened systemd unit, or the AUR. Servers are listed in a JSON config with a name and either a command or a URL. Connect a client to http://localhost:8080/mcp/ over HTTP.
Setup effort
Follow the published steps — go install github.com/smart-mcp-proxy/mcpproxy-go/cmd/mcpproxy@latest
USE CASES
Getting past your client's tool limit
Connect one endpoint; the agent searches for tools instead of loading every schema.
Adding a server you have not vetted
It arrives quarantined; run the Docker-based scanners against it and read the risk score before approving.
Keeping destructive calls visible
Reads, writes and destructive operations go through different call variants, so the log distinguishes them.
Chaining several upstream calls
Use the code-execution routing mode to orchestrate them in one step.
10 tools
Listed in project docs. Your client may show a different list.
describe_toolcall_tool_readcall_tool_writecall_tool_destructiveupstream_serverscode_executionread_cachelist_registriessearch_serversBEFORE YOU INSTALL
What to know first
Tools you get
10 tools named in the project's documentation.
Requires
go on PATH
Where it runs
All 3 documented setups run the server on your machine.
INSTALLATION
Connect your client
Server setup
Install
go install github.com/smart-mcp-proxy/mcpproxy-go/cmd/mcpproxy@latestRun — starts the HTTP server on :8080
mcpproxy serveAdd your first server
In ~/.mcpproxy/mcp_config.json, list the servers you want behind the proxy under "mcpServers", each with a "name" and either a "command" (stdio) or a "url" (http).
MCP Clients
Claude Desktop
{
"mcpServers": {
"mcpproxy": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:8080/mcp"
]
}
}
}Claude Desktop — HTTPS
{
"mcpServers": {
"mcpproxy": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://localhost:8080/mcp"
],
"env": {
"NODE_EXTRA_CA_CERTS": "~/.mcpproxy/certs/ca.pem"
}
}
}
}Cursor
{
"mcpServers": {
"MCPProxy": {
"type": "http",
"url": "http://localhost:8080/mcp/"
}
}
}