Skip to main content
Glama
josh-thurston

Vanta MCP Server

Servidor MCP de Vanta

Un servidor MCP para la plataforma de cumplimiento Vanta. Expone 16 herramientas para gestionar controles, vulnerabilidades, proveedores, pruebas, escenarios de riesgo, políticas, equipos monitorizados, documentos y hallazgos.

Transportes

Transporte

Endpoint

Caso de uso

Streamable HTTP

http://<host>:8010/mcp

Claude Desktop, la mayoría de clientes MCP

SSE

http://<host>:8010/sse

Clientes heredados (n8n, etc.)

Health

http://<host>:8010/health

Comprobaciones de estado del contenedor

Inicio rápido — Docker

1. Obtener credenciales

  1. Inicia sesión en la Consola de desarrollador de Vanta.

  2. Ve a Settings → API Access.

  3. Crea una aplicación OAuth: copia el Client ID y el Client Secret.

  4. Concede los alcances (scopes) que requieran tus herramientas (normalmente vanta.read y vanta.write).

2. Configurar

cp .env.example .env
# Edit .env — set OAUTH_CLIENT_ID and OAUTH_CLIENT_SECRET at minimum

Ejemplo de .env:

OAUTH_CLIENT_ID=your_client_id
OAUTH_CLIENT_SECRET=your_client_secret
AUTH_TOKEN=          # optional — requires Bearer auth on /mcp and /sse
PORT=8010

3. Ejecutar

docker compose up -d
# Server: http://localhost:8010
# Health: http://localhost:8010/health

4. Conectar Claude Desktop

Añade a claude_desktop_config.json:

{
  "mcpServers": {
    "vanta": {
      "type": "http",
      "url": "http://localhost:8010/mcp"
    }
  }
}

Si AUTH_TOKEN está configurado:

{
  "mcpServers": {
    "vanta": {
      "type": "http",
      "url": "http://localhost:8010/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_AUTH_TOKEN"
      }
    }
  }
}

Inicio rápido — Local (sin Docker)

python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
export OAUTH_CLIENT_ID=your_client_id
export OAUTH_CLIENT_SECRET=your_client_secret
python -m src.server

Variables de entorno

Variable

Predeterminado

Descripción

TRANSPORT_MODE

streamable-http

Informativo: tanto /mcp como /sse están siempre activos

MCP_HOST

0.0.0.0

Dirección de enlace

MCP_PORT

8010

Puerto HTTP (también acepta el PORT heredado)

AUTH_TOKEN

(desactivado)

Si se establece, los clientes deben enviar Authorization: Bearer <AUTH_TOKEN>

LOG_LEVEL

INFO

DEBUG, INFO, WARNING, ERROR

TIMEOUT_SECONDS

60

Tiempo de espera de solicitud HTTP en segundos

API_BASE_URL

https://api.vanta.com

URL base de la API de Vanta

OAUTH_CLIENT_ID

Inquilino predeterminado: ID de cliente OAuth2 de Vanta (vci_...)

OAUTH_CLIENT_SECRET

Inquilino predeterminado: secreto de cliente OAuth2 de Vanta (vcs_...)

OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET solo se utilizan para crear automáticamente una entrada de inquilino "default". Para despliegues multiinquilino, utiliza config/tenants.json en su lugar.


Multiinquilino

Para múltiples organizaciones de Vanta, rellena config/tenants.json (copia desde config/tenants.json.example):

{
  "tenants": [
    {
      "id": "acme-corp",
      "vanta_base_url": "https://api.vanta.com",
      "vanta_client_id": "vci_CLIENT_ID_A",
      "vanta_client_secret": "vcs_CLIENT_SECRET_A"
    },
    {
      "id": "contoso",
      "vanta_base_url": "https://api.vanta.com",
      "vanta_api_token": "vat_PERSONAL_ACCESS_TOKEN_B"
    }
  ]
}

El valor id es lo que tu agente/cliente envía en la cabecera de solicitud X-Tenant-ID:

X-Tenant-ID: acme-corp
Authorization: Bearer <AUTH_TOKEN>   ← only if AUTH_TOKEN is set in .env

Campos de credenciales:

Campo

Requerido

Descripción

id

Debe coincidir exactamente con la cabecera X-Tenant-ID (distingue entre mayúsculas y minúsculas)

vanta_base_url

Opcional

Predeterminado a https://api.vanta.com

vanta_client_id

*

ID de cliente OAuth (prefijo: vci_)

vanta_client_secret

*

Secreto de cliente OAuth (prefijo: vcs_)

vanta_api_token

*

Token de acceso personal: alternativa a OAuth (prefijo: vat_)

*Se requiere un método de autenticación por inquilino. Se recomienda OAuth para producción.

Si existe "default" en tenants.json, las solicitudes sin una cabecera X-Tenant-ID utilizarán automáticamente esas credenciales. Consulta ../MCP-Multi-Tenant-Guide.md para ver ejemplos completos de arquitectura y uso del cliente.

config/tenants.json está ignorado por git y nunca se incluye en la imagen de Docker; se monta en tiempo de ejecución a través del volumen ./config:/app/config:ro.


Herramientas

Controles

Herramienta

Descripción

list_controls

Lista todos los controles con paginación opcional

get_control

Obtiene todos los detalles de un control específico por ID

list_control_tests

Lista todas las pruebas vinculadas a un control específico

Vulnerabilidades

Herramienta

Descripción

list_vulnerabilities

Lista vulnerabilidades con paginación opcional

remediate_vulnerability

Actualiza el estado de remediación y las notas de una vulnerabilidad

list_vulnerability_findings

Lista hallazgos de vulnerabilidades con paginación opcional

deactivate_vulnerability

Desactiva una vulnerabilidad por ID

Proveedores

Herramienta

Descripción

list_vendors

Lista proveedores aprobados con paginación opcional

get_vendor

Obtiene todos los detalles de un proveedor específico por ID

list_discovered_vendors

Lista proveedores descubiertos automáticamente (desde integraciones)

Pruebas

Herramienta

Descripción

list_tests

Lista todas las pruebas de cumplimiento con paginación opcional

list_test_entities

Lista entidades asociadas con una prueba específica

Riesgos y políticas

Herramienta

Descripción

list_risk_scenarios

Lista escenarios de riesgo con paginación opcional

list_policies

Lista políticas de seguridad con paginación opcional

Activos y documentos

Herramienta

Descripción

list_monitored_computers

Lista equipos monitorizados por agentes de Vanta

list_documents

Lista documentos (políticas, procedimientos, evidencia)


Flujo de autenticación

Claude Desktop → POST /mcp
  → TenantAuthMiddleware (validates AUTH_TOKEN if set, reads X-Tenant-ID)
  → _require_client() → tenants.json lookup or env vars
  → OAuth2 token exchange (POST https://api.vanta.com/oauth/token)
  → Vanta API call with Bearer token
  → Response

Los tokens se almacenan en caché por instancia de inquilino y se actualizan automáticamente en caso de error 401.


Diseño del proyecto

Vanta-MCP/
├── src/
│   ├── server.py              # Starlette app; /mcp, /sse, /health endpoints
│   ├── middleware.py          # TenantAuthMiddleware (AUTH_TOKEN + X-Tenant-ID)
│   ├── context.py             # Request-scoped tenant ID storage
│   ├── tools.py               # All 16 MCP tool functions
│   └── vanta_client.py        # Vanta API client (OAuth2, all endpoints)
├── config/
│   ├── tenants.json           # Gitignored — your multi-tenant config
│   └── tenants.json.example   # Template — safe to commit
├── Dockerfile
├── docker-compose.yml
├── docker-compose.override.yml.example
├── requirements.txt
├── .env.example
└── README.md

Solución de problemas

401 Unauthorized

  • Verifica que OAUTH_CLIENT_ID y OAUTH_CLIENT_SECRET sean correctos.

  • Asegúrate de que la aplicación OAuth tenga los alcances requeridos en la Consola de desarrollador de Vanta.

  • Si usas AUTH_TOKEN, confirma que el cliente envíe Authorization: Bearer <token>.

403 Forbidden

  • El alcance de la aplicación OAuth es insuficiente. Actualízalo en la Consola de desarrollador de Vanta.

404 Not Found

  • El ID del recurso no existe en tu organización de Vanta.

Las herramientas no aparecen en Claude Desktop

  • Reinicia Claude Desktop después de cambiar claude_desktop_config.json.

  • Confirma que el servidor se está ejecutando: curl http://localhost:8010/health.

No Vanta credentials found

  • Asegúrate de que OAUTH_CLIENT_ID y OAUTH_CLIENT_SECRET estén configurados en .env (o en el entorno).

  • O confirma que config/tenants.json esté montado y contenga una entrada válida para el inquilino solicitado.

Los cambios de código en Docker no se reflejan

  • docker compose restart NO reconstruye la imagen. Ejecuta:

    docker compose build --no-cache && docker compose up -d

Licencia

MIT

Related MCP Connectors