Escáner de servidores MCP
Escanea cualquier servidor MCP en busca de vulnerabilidades de seguridad antes de conectar agentes — patrones de inyección en herramientas, riesgos de ejecución de comandos, CVEs conocidos y problemas de cadena de suministro.
Qué hace el escáner
El escáner MCP de ShieldAgent se conecta a cualquier servidor MCP (HTTP o proceso stdio local), enumera las definiciones de sus herramientas y ejecuta una batería de comprobaciones de seguridad en cuatro categorías: análisis de definición de herramientas, escaneo de CVEs en dependencias, inspección de flujos OAuth y revisión del manifiesto de cadena de suministro.
Los resultados se devuelven como un ScanReport estructurado con hallazgos agrupados por severidad, un resumen de hallazgos, la lista de herramientas enumeradas y un SBOM CycloneDX 1.5 opcional cuando hay metadatos de paquetes disponibles.
| Categoría de comprobación | Qué se inspecciona |
|---|---|
| Análisis de herramientas | Lenguaje de inyección de prompts, patrones de inyección de comandos, permisos demasiado amplios en definiciones de herramientas y esquemas de parámetros |
| CVEs de dependencias | Vulnerabilidades conocidas en paquetes listados en el manifiesto del servidor o inferidos de la respuesta de información del servidor |
| Flujos OAuth | Flujos de código de autorización inseguros, PKCE ausente, uso de concesión implícita y URIs de redirección mal configurados |
| Manifiesto de cadena de suministro | Manifiestos sin firmar, hashes de integridad ausentes y metadatos de herramientas sospechosos en la lista de herramientas del servidor |
Ejecutar un escaneo
CLI
Instala el paquete del escáner y apúntalo a cualquier servidor MCP HTTP o local:
Aún no disponible en npm
El paquete @shieldagent/scanner no ha sido publicado en npm todavía. Instala desde el repositorio fuente:
# Install from source
git clone https://github.com/shieldagent-io/shieldagent.git
cd shieldagent && pnpm install
npm install -g ./backend/apps/scanner
# Scan an HTTP MCP server
shieldagent-scan https://my-mcp-server.example.com
# Scan a local stdio server
shieldagent-scan stdio -- node ./dist/server.js
# Output as Markdown report to a file
shieldagent-scan --format markdown --output report.md https://my-mcp-server.example.com
# Output as SARIF (for GitHub Security tab / CI)
shieldagent-scan --format sarif -o results.sarif https://my-mcp-server.example.comAPI REST
El escáner incluye un servidor REST Fastify para acceso programático. Inícialo con --serve y llama al endpoint de escaneo:
# Start the REST server on port 4500
shieldagent-scan --serve --port 4500# Trigger a scan via the API
curl -s -X POST http://localhost:4500/api/v1/scan \
-H 'Content-Type: application/json' \
-d '{
"target": {
"type": "http",
"url": "https://my-mcp-server.example.com"
}
}' | jq .Panel de control
Navega a Escáner en la barra lateral del panel de ShieldAgent. Introduce la URL del servidor y haz clic en Ejecutar escaneo. El panel almacena el historial de escaneos y permite comparar resultados entre ejecuciones. Los hallazgos enlazan directamente con la pantalla de gestión de políticas relevante para acelerar la remediación.
Niveles de severidad
Cada hallazgo tiene uno de cinco niveles de severidad. El CLI finaliza con código 1 cuando hay hallazgos Críticos o Altos, y con código 0 en caso contrario.
| Severidad | Significado | Código de salida CI |
|---|---|---|
| Crítico | Vector de ataque activo — inyección de prompts, envenenamiento de cadena de suministro. Bloquea el servidor inmediatamente. | 1 (fallo) |
| Alto | Patrones de inyección de comandos, esquemas de parámetros peligrosos, fallos de conexión. Remedia antes de conectar agentes. | 1 (fallo) |
| Medio | Herramientas de alto privilegio con restricciones, mala configuración OAuth. Revisar y mitigar. | 0 (aviso) |
| Bajo | Desviaciones menores de buenas prácticas. Riesgo inmediato bajo. | 0 (aviso) |
| Info | Hallazgos informativos — no se requiere acción. | 0 |
Análisis de definición de herramientas
El escáner inspecciona cada definición de herramienta devuelta por tools/list en busca de tres clases de riesgo:
Inyección de prompts
Los nombres y descripciones de herramientas se escanean en busca de lenguaje diseñado para manipular el comportamiento del agente de IA: frases como "ignora las instrucciones anteriores", "anula la seguridad", bloques [[SYSTEM]] incrustados, palabras clave de jailbreak (DAN) y patrones de reasignación de roles. Cualquier coincidencia se reporta como Critical.
Inyección de comandos
Se buscan patrones de metacaracteres de shell en nombres de herramientas, descripciones y descripciones de esquemas de parámetros: sustitución de comandos $(), ejecución con backtick, cadenas de operadores de shell (&&, ||) y llamadas directas a exec/eval/system. Las coincidencias se reportan como High.
Permisos demasiado amplios
Las herramientas cuyos nombres o descripciones indican acceso a nivel de shell o sistema (execute_*, run_shell, palabras clave como "comando arbitrario", "ejecutar como root", "sudo") se marcan. Las herramientas sin restricciones de esquema de entrada se elevan a High; las herramientas de alto privilegio con restricciones se marcan como Medium.
Formatos de salida
| Formato | Flag | Caso de uso |
|---|---|---|
| JSON | --format json | Predeterminado. ScanReport completo con todos los hallazgos, lista de herramientas, SBOM y metadatos. Ideal para procesamiento programático. |
| Markdown | --format markdown | Informe legible con hallazgos agrupados por severidad. Comparte en PRs o rastreadores de incidencias. |
| SARIF 2.1.0 | --format sarif | Pestaña de seguridad de GitHub e integración CI/CD. Sube a la API de análisis de código de GitHub para mostrar hallazgos en pull requests. |
Integración CI/CD
Añade el escáner a tu flujo de trabajo de GitHub Actions para bloquear despliegues cuando se detecten hallazgos de alta severidad. La salida SARIF se integra con la pestaña de seguridad de GitHub para anotaciones en PRs:
# .github/workflows/mcp-scan.yml
name: MCP Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install ShieldAgent Scanner from source
# @shieldagent/scanner not yet on npm — build from source
run: |
git clone https://github.com/shieldagent-io/shieldagent.git
cd shieldagent && npm install -g pnpm
pnpm install --frozen-lockfile
npm install -g ./backend/apps/scanner
- name: Scan MCP server
run: |
shieldagent-scan --format sarif -o results.sarif \
${{ secrets.MCP_SERVER_URL }}
- name: Upload SARIF to GitHub Security
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarifEl código de salida 1 del escáner fallará el paso de CI automáticamente cuando existan hallazgos Críticos o Altos — sin configuración adicional.
Integración con el panel
El panel de ShieldAgent muestra los resultados del escáner junto con los datos de monitorización en tiempo de ejecución:
- Historial de escaneos— cada ejecución se almacena con marca de tiempo, objetivo, resumen de hallazgos e informe completo. Compara resultados antes y después de actualizar un servidor.
- Seguimiento de remediación— los hallazgos pueden reconocerse, asignarse o vincularse a reglas de políticas. Los hallazgos reconocidos se excluyen del recuento activo pero siguen siendo auditables.
- Atajos de política— los hallazgos Altos y Críticos en una herramienta específica enlazan directamente con la pantalla de gestión de políticas, prerrellenada con una regla de denegación para esa herramienta.
- Visor de SBOM— cuando se genera un SBOM CycloneDX, aparece en la vista de detalle del escaneo con una lista de componentes con búsqueda y referencias cruzadas de vulnerabilidades.
Referencia de la API del escáner
Endpoints
Cuerpo de la solicitud — POST /api/v1/scan
{
"target": {
"type": "http",
"url": "https://my-mcp-server.example.com"
}
}Nota: los objetivos stdio son rechazados por la API REST por razones de seguridad. Usa el CLI para escanear procesos locales.
Respuesta — ScanReport
{
"id": "3f2a1c4d-...",
"target": { "type": "http", "url": "https://..." },
"scannedAt": "2026-04-24T12:00:00.000Z",
"durationMs": 843,
"serverInfo": {
"name": "my-mcp-server",
"version": "1.2.0",
"protocolVersion": "2024-11-05"
},
"tools": [...],
"findings": [
{
"id": "a1b2c3d4-...",
"category": "tool_analysis",
"severity": "high",
"title": "High-privilege tool \"execute_shell\" lacks input constraints",
"description": "Tool execute_shell appears to execute shell commands but defines no input schema constraints.",
"remediation": "Add a strict JSON Schema with an allowlist of permitted values.",
"metadata": { "toolName": "execute_shell" }
}
],
"summary": { "critical": 0, "high": 1, "medium": 0, "low": 0, "info": 0, "total": 1 }
}Categorías de hallazgos
| Categoría | Descripción |
|---|---|
| tool_analysis | Hallazgos del análisis de definiciones de herramientas — patrones de inyección, permisos amplios |
| dependency_cve | CVEs conocidos en paquetes descubiertos en el manifiesto del servidor o SBOM |
| oauth_flow | Mala configuración OAuth 2.0 / PKCE en los endpoints de autorización del servidor |
| connection | Errores de conectividad o protocolo en el momento del escaneo |
| supply_chain | Manifiestos sin firmar, hashes de integridad ausentes, metadatos de herramientas sospechosos |