Comprueba lo que declara un servidor MCP
Una descripción de herramienta no es documentación. El cliente recibe los nombres y descripciones de las herramientas en
tools/list, antes de que se llame a cualquier herramienta, y pasan al contexto del modelo — por lo tanto, una descripción
es ejecutable en el único sentido que importa: puede contener instrucciones.
Cuándo aplica
- añadir un servidor MCP a un agente y querer saber qué expondrá
- una revisión de seguridad que pregunta a qué herramientas de terceros puede llamar el agente
- un agente que se comporta de forma extraña, donde una descripción de herramienta es sospechosa
Ejecútalo
pip install "git+https://github.com/sushant-me/mcpaudit"
mcpaudit audit tools.json # sale con código 1 si hay hallazgos, 0 si está limpio
Instálalo desde el repositorio, no desde PyPI — el nombre mcpaudit en PyPI es un proyecto diferente
y no relacionado cuyo CLI no aceptará un argumento de archivo.
Obtén tools.json de lo que haya recibido el cliente: mcp-client --list > tools.json, o el
archivo de declaración publicado por el proveedor (mejor, ya que no se ejecuta nada). También funciona con tuberías:
mcp-client --list | mcpaudit audit -
Las once comprobaciones
critical — reserved-name-collision: una herramienta con un nombre que el framework instala fuera de la
tabla de herramientas (set_model_response, google_search, finish), por lo que desplaza silenciosamente una primitiva.
high — instruction-in-declaration, invisible-characters, look-alike-tool-names,
destructive-declared-read-only, duplicate-tool-name.
medium / low — confusable-tool-name, missing-annotations, unconstrained-sink-parameter,
url-in-description, undocumented-tool.
Dos de estas no se pueden ver leyendo la declaración. El bloque de etiquetas Unicode codifica
ASCII imprimible en texto de ancho visible cero, y mcpaudit informa a qué se decodifica. Dos
nombres que se normalizan al mismo ASCII (search / ѕearch) derrotan una lista blanca escrita de memoria.
Triage
Trabaja de arriba abajo por severidad. Un hallazgo critical es una parada: resuélvelo, o haz que el riesgo sea aceptado por
escrito, antes de conectar. Un resultado limpio es un resultado: un servidor bien comportado produce cero
hallazgos, lo que permite a un revisor aprobarlo rápidamente.
Límite
Esto lee declaraciones, no comportamiento. No puede decirte si la implementación de un servidor es correcta, solo si lo que anuncia es seguro para ponerlo frente a un modelo.
¿Quieres la parte de aplicación?
Fijar el conjunto de herramientas aprobado como archivo de política, para que un servidor que edite silenciosamente una descripción después de la revisión falle en CI en lugar de cambiar sin aviso, es la versión de pago: MCP Server Security Review, listada en Agensi. Hasta que esa lista esté activa, la referencia de reglas con ejemplos prácticos está en https://github.com/sushant-me/mcpaudit-mcp-security
Límite
Esto lee declaraciones, no comportamiento. No puede decirte si la implementación de un servidor es correcta, solo si lo que anuncia es seguro para ponerlo frente a un modelo.