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

CI npm License: MIT Node >= 20

Um servidor MCP que pode descobrir e chamar (quase) qualquer servidor MCP do mundo.

mcp-anything demo: searching the MCP ecosystem from the terminal

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

FerramentaO que faz
search_mcp_serversBusca por palavras-chave (BM25 + difusa) no registro indexado. Retorna candidatos com um veredito de conectividade.
describe_mcp_serverMetadados completos do registro: transportes, pacotes, variáveis de ambiente / segredos necessários, veredito de política.
list_mcp_toolsConecta ao vivo (conforme a política) e lista as ferramentas reais do servidor com esquemas JSON.
call_mcp_toolExecuta uma ferramenta em um servidor downstream. As sessões são agrupadas e reutilizadas.
sync_registryForç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) e http: simples são bloqueados — uma proteção contra SSRF para entradas do registro que apontam para sua rede. Desative com remote.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:

FonteEscalaO que adiciona
official (padrão)milharesEntradas moderadas com os metadados mais ricos (transportes, variáveis de ambiente, versões)
pulsemcp~22 milCatálogo amplo + estrelas do GitHub e contagens de downloads (alimenta o ranqueamento)
npm~67 mil pacotes com tagsO maior pool bruto de servidores stdio, com downloads mensais
glama~75 milO í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/list de 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.