mcp-anything
Puerta de enlace Meta-MCP: busca ~75k servidores MCP en los registros públicos mediante cinco meta-herramientas y llama a cualquiera de ellos sobre la marcha — local-primero, con protección SSRF y lista blanca de stdio.
Documentación
mcp-anything
Un servidor MCP que puede descubrir y llamar a (casi) cualquier servidor MCP del mundo.

mcp-anything es un servidor MCP meta: en lugar de configurar docenas de servidores MCP en tu host (Claude Desktop, Claude Code, Cursor, ...), configuras exactamente uno. Indexa el registro oficial de MCP localmente y expone cinco pequeñas meta-herramientas que permiten al modelo buscar servidores, inspeccionarlos y llamar a sus herramientas sobre la marcha — sin cargar nunca miles de esquemas de herramientas en la ventana 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é
- Descubrimiento: existen miles de servidores MCP; tu host solo conoce los que configuraste manualmente.
- Contexto: cargar muchos servidores consume tu ventana de contexto. Las meta-herramientas mantienen el costo constante — el modelo busca capacidades en dos fases (buscar → inspeccionar → llamar), el mismo patrón que usa Tool Search de Anthropic.
- Una sola configuración: una única entrada en la configuración de tu cliente MCP en lugar de una por servidor.
Inicio 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 / otros hosts
{
"mcpServers": {
"anything": {
"command": "npx",
"args": ["-y", "mcp-anything", "serve"]
}
}
}
Luego solo pídele a tu modelo cosas como "encuentra un servidor MCP que pueda consultar Postgres y lista sus herramientas" — usará las meta-herramientas por sí mismo.
Modo HTTP y descubrimiento alojado
mcp-anything serve --http # streamable HTTP on :8080 (POST /mcp)
mcp-anything serve --http --discovery-only # safe for public hosting: search/describe only
Una instancia pública con ejecución habilitada sería un proxy abierto — nunca alojes una instancia completa públicamente. El Dockerfile usa solo descubrimiento por defecto precisamente por esta razón. Una instancia de descubrimiento alojada permite que cualquier cliente MCP busque en el ecosistema; conectar y llamar herramientas es para lo que sirve la instalación 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)
Las meta-herramientas
| Herramienta | Qué hace |
|---|---|
search_mcp_servers | Búsqueda por palabras clave (BM25 + difusa) sobre el registro indexado. Devuelve candidatos con un veredicto de conectividad. |
describe_mcp_server | Metadatos completos del registro: transportes, paquetes, variables de entorno / secretos requeridos, veredicto de política. |
list_mcp_tools | Se conecta en vivo (según política) y lista las herramientas reales del servidor con esquemas JSON. |
call_mcp_tool | Ejecuta una herramienta en un servidor descendente. Las sesiones se agrupan y reutilizan. |
sync_registry | Fuerza una actualización del índice (de lo contrario, se actualiza automáticamente al expirar el TTL). |
Modelo de seguridad
Conectar un LLM a servidores arbitrarios de un registro público es peligroso por defecto. mcp-anything incluye valores predeterminados conservadores y hace explícita cada relajación:
- Servidores remotos (streamable-http / sse): permitidos, pero las direcciones privadas/loopback/link-local (incluidos los endpoints de metadatos de nube como
169.254.169.254) yhttp:sin cifrar están bloqueados — una protección SSRF para entradas del registro que apunten a tu red. Puedes desactivarlo conremote.allowPrivateNetwork(útil solo para desarrollo local). - Servidores stdio (que lanzan procesos
npx/uvx): deshabilitados por defecto. Ejecutar un paquete de un registro público es ejecución de código arbitrario en tu máquina. Habilítalo solo con una lista de permitidos explícita por paquete. - Secretos: las claves de API nunca se indexan ni se exponen al modelo. Las mapeas por servidor en tu configuración; se inyectan al momento de conectar (encabezados para remoto, env para stdio).
- Salida no confiable: los resultados y descripciones de herramientas de servidores descendentes se etiquetan como datos de terceros para que el modelo los trate como datos, no como instrucciones. Esto reduce el riesgo de inyección de prompts; no lo elimina — consulta SECURITY.md.
- Límites: tiempos de espera de conexión/llamada, truncamiento del tamaño de respuesta, grupo de sesiones acotado.
Configuración
~/.config/mcp-anything/config.json (o --config <path>, o 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
}
}
}
Cada campo es opcional; los valores predeterminados anteriores (menos los encabezados/env de ejemplo) son lo que obtienes sin configuración alguna. registryUrl acepta cualquier registro que implemente la API REST oficial — incluido uno privado/autoalojado.
Fuentes de índice — ampliando el alcance
sources controla cuánto del ecosistema se indexa:
| Fuente | Escala | Qué añade |
|---|---|---|
official (predeterminada) | miles | Entradas moderadas con los metadatos más ricos (transportes, variables de entorno, versiones) |
pulsemcp | ~22k | Catálogo amplio + estrellas de GitHub y conteos de descargas (alimenta el ranking) |
npm | ~67k paquetes etiquetados | El grupo bruto más grande de servidores stdio, con descargas mensuales |
glama | ~75k | El índice más amplio (adaptador de mejor esfuerzo) |
{ "sources": ["official", "pulsemcp", "npm"] }
Las entradas que aparecen en varios catálogos se deduplican por URL de repositorio normalizada e identificador de paquete; la fuente más confiable gana la identidad, los metadatos se completan desde las demás, y las estrellas/descargas se acumulan. El ranking combina entonces la relevancia BM25 con un impulso de popularidad en escala logarítmica (y una bonificación para entradas del registro oficial), de modo que search_mcp_servers muestra la implementación mantenida de una capacidad en lugar del clon abandonado número cien. qualityFilter (activado por defecto) descarta entradas sin forma de conectar y sin descripción utilizable — con fuentes amplias, más solo es mejor si la basura se mantiene fuera del top-5. Una fuente fallida degrada con elegancia: la sincronización conserva lo que devolvieron las otras fuentes e informa del fallo.
Notas de diseño
- Búsqueda léxica, no embeddings. Totalmente local, costo de API cero, sin paso de construcción de índice — y para descubrimiento de herramientas, la búsqueda por palabras clave con coincidencia difusa rinde de manera comparable en la práctica (Tool Search de Anthropic tomó la misma decisión con BM25/regex).
- Sesiones, no llamadas sin estado. MCP está orientado a sesiones (handshake de inicialización, negociación de capacidades). Las conexiones descendentes se agrupan y reutilizan entre llamadas con evicción LRU.
- Degradación elegante. Si el registro no está disponible, la caché de la última sincronización sigue funcionando.
Trabajo previo y posicionamiento
Este espacio está activo: MetaMCP y otras puertas de enlace agregan servidores que tú configuras; Rube de Composio enruta hacia su propio catálogo curado; los hosts están incorporando búsqueda de herramientas nativa. El nicho de mcp-anything es la combinación abierta: el registro público como catálogo, un único binario local-first y una política de seguridad explícita — sin cuenta en la nube, sin bloqueo de curación, autoalojable contra un registro privado.
Hoja de ruta
- Comprobaciones de salud en vivo y señales de calidad de resultados en el ranking
- Búsqueda por herramienta (no solo por servidor) indexando
tools/listde servidores populares - Paso a través del flujo OAuth para servidores remotos que lo requieran
- Sandboxing de contenedor/Wasm para servidores stdio como alternativa a la lista de permitidos
- Múltiples registros con federación y deduplicación
- Modo de servicio streamable-http opcional (para despliegue compartido/en equipo)
Desarrollo
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
Consulta CONTRIBUTING.md. Licenciado bajo MIT.