mcp-anything · meta-server · v0.1
Category: MCP Gateway Status: Experimental License: MIT

One MCP server that can call any MCP server.

Stop hand-configuring servers one by one. mcp-anything indexes the MCP registries locally — tens of thousands of servers — and gives your model five small meta-tools to search, inspect, and execute any of them on the fly. Your context window never sees more than that.

npx mcp-anything serve
agent session — discover → inspect → execute
user › what's the weather in Tel Aviv? save it to a note
⚒ search_mcp_servers({ query: "weather forecast" })
  → io.github.acme/weather  score 144.4 · streamable-http · ★ 1.2k
⚒ list_mcp_tools({ server: "io.github.acme/weather" })
  → get_forecast(city, days)  · 2 more tools
⚒ call_mcp_tool({ server: "…/weather", tool: "get_forecast", arguments: { city: "Tel Aviv" } })
  ⚡ connected on demand — session pooled for reuse
  → 31°C, clear skies, humidity 68%
assistant › Saved. 31°C and clear in Tel Aviv — note created.
§1 · Mechanism

Constant context cost, unbounded reach

Loading many MCP servers into a host burns the context window: every tool schema rides along on every request. mcp-anything inverts that. The model sees five meta-tools — nothing else — and discovers capabilities in two phases: search the local index first, then fetch the real schemas for just the one server it needs.

The index is built from four catalogs, deduplicated by repository and package identity, and ranked by BM25 relevance with a log-scaled popularity boost — so the maintained implementation of a capability outranks the hundredth abandoned clone.

Host / LLM 5 meta-tools mcp-anything index · policy · pool official registry PulseMCP ~22k npm ~9.5k Glama ~75k stdio / http synced & cached locally · downstream servers connected on demand
8,908
servers indexed live from npm alone, in 100s
~75k
reachable with all four sources enabled
5
meta-tools — total context cost, ever
0
cloud accounts, API keys, or telemetry
search_mcp_serversBM25 + popularity search over the whole index
describe_mcp_servertransports, env vars, secrets, policy verdict
list_mcp_toolslive connect — real tools with JSON schemas
call_mcp_toolexecute; sessions pooled and reused
sync_registryrefresh the index (auto-refreshed on TTL)
§2 · Security posture

Dangerous by nature, conservative by default

Letting a model reach arbitrary servers from a public catalog is a real attack surface. Every relaxation in mcp-anything is explicit and yours to make:

SSRF guard · on by default

Registry entries pointing at loopback, private ranges, or cloud metadata endpoints (169.254.169.254) are refused. Plain http too.

No arbitrary code execution · stdio off by default

Spawning npm/pypi packages is disabled until you enable it — and then only for an explicit per-package allowlist, version-pinned.

Secrets stay yours · never indexed

API keys live in your local config only, injected at connect time. Never cached, never searchable, never shown to the model.

Untrusted output, labeled · always

Downstream results and tool descriptions are marked as third-party data — a mitigation for tool-poisoning, not a cure. Read SECURITY.md.

§3 · Quickstart

Two commands, then just ask

# Claude Code
claude mcp add anything -- npx -y mcp-anything serve

# Claude Desktop / Cursor / any MCP host — add to your MCP config:
{ "mcpServers": { "anything": { "command": "npx", "args": ["-y", "mcp-anything", "serve"] } } }

# Optional: widen the index beyond the official registry (~/.config/mcp-anything/config.json)
{ "sources": ["official", "pulsemcp", "npm", "glama"] }

Then ask your model for a capability, not a server: "find something that can query Postgres and run a schema dump." Discovery is its job now.

§4 · Prior art, honestly

How this differs from what exists

Read the code on GitHub →