mcp-anything
Gateway Meta-MCP: pesquise ~75 mil servidores MCP nos registros públicos por meio de cinco meta-ferramentas e chame qualquer um deles em tempo real — local-first, com proteção SSRF e lista de permissões stdio.
Documentação
mcp-anything
Um servidor MCP que pode descobrir e chamar (quase) qualquer servidor MCP do mundo.

mcp-anything é um servidor MCP meta: em vez de configurar dezenas de servidores MCP no seu host (Claude Desktop, Claude Code, Cursor, ...), você configura apenas um. Ele indexa o registro oficial de MCP localmente e expõe cinco pequenas meta-ferramentas que permitem ao modelo buscar servidores, inspecioná-los e chamar suas ferramentas em tempo real — sem nunca carregar milhares de esquemas de ferramentas na janela de contexto.
Host / LLM
│ (5 meta-tools, constant context cost)
▼
mcp-anything ──── local BM25 index ◄──┬── official MCP registry (moderated, richest metadata)
│ (cross-source dedupe, ├── PulseMCP (~22k servers, stars & downloads)
│ popularity-boosted ├── npm (~67k packages tagged mcp)
│ ranking) └── Glama (~75k indexed servers)
│
│ security policy: SSRF guard · stdio allowlist · secrets injection · timeouts
▼
downstream MCP servers (streamable-http / sse / stdio via npx·uvx)
Por quê
- Descoberta: milhares de servidores MCP existem; seu host só conhece aqueles que você configurou manualmente.
- Contexto: carregar muitos servidores consome sua janela de contexto. As meta-ferramentas mantêm o custo constante — o modelo busca capacidades em duas fases (buscar → inspecionar → chamar), o mesmo padrão que o Tool Search da Anthropic usa.
- Uma configuração: uma única entrada na configuração do seu cliente MCP em vez de uma por servidor.
Início rápido
# Run directly (Node >= 20):
npx mcp-anything sync # first-time index download (~few seconds)
npx mcp-anything serve # start the meta-MCP server on stdio
Claude Code
claude mcp add anything -- npx -y mcp-anything serve
Claude Desktop / outros hosts
{
"mcpServers": {
"anything": {
"command": "npx",
"args": ["-y", "mcp-anything", "serve"]
}
}
}
Depois, basta pedir ao seu modelo coisas como "encontre um servidor MCP que possa consultar Postgres e liste suas ferramentas" — ele usará as meta-ferramentas por conta própria.
Modo HTTP e descoberta hospedada
mcp-anything serve --http # streamable HTTP on :8080 (POST /mcp)
mcp-anything serve --http --discovery-only # safe for public hosting: search/describe only
Uma instância pública com execução habilitada seria um proxy aberto — nunca hospede uma instância completa publicamente. O Dockerfile usa apenas descoberta por padrão exatamente por esse motivo. Uma instância de descoberta hospedada permite que qualquer cliente MCP busque no ecossistema; conectar e chamar ferramentas de fato é para isso que serve a instalação local.
CLI
mcp-anything sync # refresh the registry index
mcp-anything search "weather" # search the index from your terminal
mcp-anything serve # stdio MCP server (default command)
As meta-ferramentas
| Ferramenta | O que faz |
|---|---|
search_mcp_servers | Busca por palavras-chave (BM25 + difusa) no registro indexado. Retorna candidatos com um veredito de conectividade. |
describe_mcp_server | Metadados completos do registro: transportes, pacotes, variáveis de ambiente / segredos necessários, veredito de política. |
list_mcp_tools | Conecta ao vivo (conforme a política) e lista as ferramentas reais do servidor com esquemas JSON. |
call_mcp_tool | Executa uma ferramenta em um servidor downstream. As sessões são agrupadas e reutilizadas. |
sync_registry | Força uma atualização do índice (caso contrário, é atualizado automaticamente quando o TTL expira). |
Modelo de segurança
Conectar um LLM a servidores arbitrários de um registro público é perigoso por padrão. O mcp-anything vem com padrões conservadores e torna cada flexibilização explícita:
- Servidores remotos (streamable-http / sse): permitidos, mas endereços privados/loopback/link-local (incluindo endpoints de metadados de nuvem como
169.254.169.254) ehttp:simples são bloqueados — uma proteção contra SSRF para entradas do registro que apontam para sua rede. Desative comremote.allowPrivateNetwork(útil apenas para desenvolvimento local). - Servidores stdio (que iniciam processos
npx/uvx): desabilitados por padrão. Executar um pacote de um registro público é execução arbitrária de código na sua máquina. Habilite apenas com uma lista de permissões explícita por pacote. - Segredos: chaves de API nunca são indexadas ou expostas ao modelo. Você as mapeia por servidor na sua configuração; elas são injetadas no momento da conexão (cabeçalhos para remoto, env para stdio).
- Saída não confiável: resultados e descrições de ferramentas de servidores downstream são rotulados como dados de terceiros para que o modelo os trate como dados, não como instruções. Isso reduz o risco de injeção de prompt; não o elimina — veja SECURITY.md.
- Limites: timeouts de conexão/chamada, truncamento de tamanho de resposta, pool de sessões limitado.
Configuração
~/.config/mcp-anything/config.json (ou --config <path>, ou MCP_ANYTHING_CONFIG):
{
"registryUrl": "https://registry.modelcontextprotocol.io",
"sources": ["official"],
"qualityFilter": true,
"cacheTtlHours": 24,
"maxServers": 10000,
"policy": {
"remote": {
"enabled": true,
"allowPrivateNetwork": false,
"headers": {
"io.github.example/github": { "Authorization": "Bearer ghp_..." }
}
},
"stdio": {
"enabled": false,
"allowPackages": ["@modelcontextprotocol/server-filesystem"],
"env": {
"io.github.example/postgres": { "DATABASE_URL": "postgres://..." }
}
},
"limits": {
"callTimeoutMs": 60000,
"connectTimeoutMs": 20000,
"maxSessions": 8,
"maxResultChars": 100000
}
}
}
Todo campo é opcional; os padrões acima (menos os exemplos de cabeçalhos/env) são o que você obtém sem nenhuma configuração. O registryUrl aceita qualquer registro que implemente a API REST oficial — incluindo um privado/auto-hospedado.
Fontes de índice — ampliando o alcance
sources controla quanto do ecossistema é indexado:
| Fonte | Escala | O que adiciona |
|---|---|---|
official (padrão) | milhares | Entradas moderadas com os metadados mais ricos (transportes, variáveis de ambiente, versões) |
pulsemcp | ~22 mil | Catálogo amplo + estrelas do GitHub e contagens de downloads (alimenta o ranqueamento) |
npm | ~67 mil pacotes com tags | O maior pool bruto de servidores stdio, com downloads mensais |
glama | ~75 mil | O índice mais amplo (adaptador de melhor esforço) |
{ "sources": ["official", "pulsemcp", "npm"] }
Entradas que aparecem em vários catálogos são deduplicadas por URL de repositório normalizada e identificador de pacote; a fonte mais confiável vence na identidade, os metadados são preenchidos a partir das outras, e estrelas/downloads se acumulam. O ranqueamento então combina relevância BM25 com um impulso de popularidade em escala logarítmica (e um bônus para entradas do registro oficial), para que o search_mcp_servers traga à tona a implementação mantida de uma capacidade em vez do centésimo clone abandonado. O qualityFilter (ligado por padrão) descarta entradas sem forma de conexão e sem descrição utilizável — com fontes amplas, mais só é melhor se o lixo ficar fora do top-5. Uma fonte com falha degrada com elegância: a sincronização mantém o que as outras fontes retornaram e relata a falha.
Notas de design
- Busca lexical, não embeddings. Totalmente local, custo zero de API, sem etapa de construção de índice — e para descoberta de ferramentas, busca por palavras-chave com correspondência difusa tem desempenho comparável na prática (o Tool Search da Anthropic fez a mesma escolha com BM25/regex).
- Sessões, não chamadas sem estado. MCP é orientado a sessão (handshake de inicialização, negociação de capacidades). Conexões downstream são agrupadas e reutilizadas entre chamadas com evicção LRU.
- Degradação elegante. Se o registro estiver inacessível, o cache da última sincronização continua funcionando.
Trabalhos anteriores e posicionamento
Este espaço está ativo: MetaMCP e outros gateways agregam servidores que você configura; o Rube da Composio roteia para seu próprio catálogo curado; hosts estão crescendo com busca nativa de ferramentas. O nicho do mcp-anything é a combinação aberta: o registro público como catálogo, um único binário local-first e uma política de segurança explícita — sem conta em nuvem, sem aprisionamento de curadoria, auto-hospedável contra um registro privado.
Roadmap
- Verificações de saúde ao vivo e sinais de qualidade de resultados no ranqueamento
- Busca por ferramenta (não apenas por servidor) indexando
tools/listde servidores populares - Passagem de fluxo OAuth para servidores remotos que exigem
- Sandboxing em contêiner/Wasm para servidores stdio como alternativa à lista de permissões
- Múltiplos registros com federação e deduplicação
- Modo opcional de serviço streamable-http (para implantação compartilhada/em equipe)
Desenvolvimento
npm install
npm test # unit + end-to-end (mock registry + real downstream MCP server)
npm run typecheck
npm run build
node scripts/smoke.mjs # spawns the built CLI as a real stdio MCP server
Veja CONTRIBUTING.md. Licenciado sob MIT.