Skip to main content
Glama
josh-thurston

Vanta MCP Server

Vanta MCP-Server

Ein MCP-Server für die Vanta-Compliance-Plattform. Stellt 16 Tools zur Verwaltung von Kontrollen, Schwachstellen, Anbietern, Tests, Risikoszenarien, Richtlinien, überwachten Computern, Dokumenten und Ergebnissen bereit.

Transporte

Transport

Endpunkt

Anwendungsfall

Streamable HTTP

http://<host>:8010/mcp

Claude Desktop, die meisten MCP-Clients

SSE

http://<host>:8010/sse

Legacy-Clients (n8n, etc.)

Health

http://<host>:8010/health

Container-Gesundheitsprüfungen

Schnellstart — Docker

1. Anmeldedaten abrufen

  1. Melden Sie sich bei der Vanta Developer Console an.

  2. Gehen Sie zu Settings → API Access.

  3. Erstellen Sie eine OAuth-Anwendung — kopieren Sie die Client ID und das Client Secret.

  4. Gewähren Sie die für Ihre Tools erforderlichen Scopes (normalerweise vanta.read und vanta.write).

2. Konfiguration

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

.env-Beispiel:

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. Ausführen

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

4. Claude Desktop verbinden

Fügen Sie dies zu claude_desktop_config.json hinzu:

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

Falls AUTH_TOKEN gesetzt ist:

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

Schnellstart — Lokal (ohne 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

Umgebungsvariablen

Variable

Standard

Beschreibung

TRANSPORT_MODE

streamable-http

Informativ — sowohl /mcp als auch /sse sind immer aktiv

MCP_HOST

0.0.0.0

Bind-Adresse

MCP_PORT

8010

HTTP-Port (akzeptiert auch das Legacy-PORT)

AUTH_TOKEN

(deaktiviert)

Falls gesetzt, müssen Clients Authorization: Bearer <AUTH_TOKEN> senden

LOG_LEVEL

INFO

DEBUG, INFO, WARNING, ERROR

TIMEOUT_SECONDS

60

HTTP-Request-Timeout in Sekunden

API_BASE_URL

https://api.vanta.com

Vanta API-Basis-URL

OAUTH_CLIENT_ID

Standard-Tenant: Vanta OAuth2 Client ID (vci_...)

OAUTH_CLIENT_SECRET

Standard-Tenant: Vanta OAuth2 Client Secret (vcs_...)

OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET werden nur verwendet, um automatisch einen "default"-Tenant-Eintrag zu erstellen. Für Multi-Tenant-Bereitstellungen verwenden Sie stattdessen config/tenants.json.


Multi-Tenant

Für mehrere Vanta-Organisationen füllen Sie config/tenants.json aus (kopieren Sie diese von 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"
    }
  ]
}

Der id-Wert ist das, was Ihr Agent/Client im X-Tenant-ID-Request-Header sendet:

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

Anmeldedaten-Felder:

Feld

Erforderlich

Beschreibung

id

Muss exakt mit dem X-Tenant-ID-Header übereinstimmen (Groß-/Kleinschreibung beachten)

vanta_base_url

Optional

Standard ist https://api.vanta.com

vanta_client_id

*

OAuth Client ID (Präfix: vci_)

vanta_client_secret

*

OAuth Client Secret (Präfix: vcs_)

vanta_api_token

*

Persönlicher Zugriffstoken — Alternative zu OAuth (Präfix: vat_)

*Eine Authentifizierungsmethode pro Tenant erforderlich. OAuth wird für die Produktion empfohlen.

Wenn "default" in tenants.json existiert, verwenden Anfragen ohne X-Tenant-ID-Header automatisch diese Anmeldedaten. Siehe ../MCP-Multi-Tenant-Guide.md für die vollständige Architektur und Client-Nutzungsbeispiele.

config/tenants.json ist in .gitignore enthalten und wird niemals in das Docker-Image eingebaut — es wird zur Laufzeit über das Volume ./config:/app/config:ro eingebunden.


Tools

Kontrollen

Tool

Beschreibung

list_controls

Alle Kontrollen mit optionaler Paginierung auflisten

get_control

Vollständige Details für eine bestimmte Kontrolle nach ID abrufen

list_control_tests

Alle mit einer bestimmten Kontrolle verknüpften Tests auflisten

Schwachstellen

Tool

Beschreibung

list_vulnerabilities

Schwachstellen mit optionaler Paginierung auflisten

remediate_vulnerability

Behebungsstatus und Notizen einer Schwachstelle aktualisieren

list_vulnerability_findings

Schwachstellen-Ergebnisse mit optionaler Paginierung auflisten

deactivate_vulnerability

Schwachstelle nach ID deaktivieren

Anbieter

Tool

Beschreibung

list_vendors

Zugelassene Anbieter mit optionaler Paginierung auflisten

get_vendor

Vollständige Details für einen bestimmten Anbieter nach ID abrufen

list_discovered_vendors

Automatisch erkannte Anbieter (aus Integrationen) auflisten

Tests

Tool

Beschreibung

list_tests

Alle Compliance-Tests mit optionaler Paginierung auflisten

list_test_entities

Mit einem bestimmten Test verknüpfte Entitäten auflisten

Risiko & Richtlinien

Tool

Beschreibung

list_risk_scenarios

Risikoszenarien mit optionaler Paginierung auflisten

list_policies

Sicherheitsrichtlinien mit optionaler Paginierung auflisten

Assets & Dokumente

Tool

Beschreibung

list_monitored_computers

Von Vanta-Agenten überwachte Computer auflisten

list_documents

Dokumente (Richtlinien, Verfahren, Nachweise) auflisten


Auth-Ablauf

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

Token werden pro Tenant-Instanz zwischengespeichert und bei einem 401-Fehler automatisch aktualisiert.


Projektstruktur

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

Fehlerbehebung

401 Unauthorized

  • Überprüfen Sie, ob OAUTH_CLIENT_ID und OAUTH_CLIENT_SECRET korrekt sind.

  • Stellen Sie sicher, dass die OAuth-App die erforderlichen Scopes in der Vanta Developer Console hat.

  • Wenn Sie AUTH_TOKEN verwenden, bestätigen Sie, dass der Client Authorization: Bearer <token> sendet.

403 Forbidden

  • Der OAuth-App-Scope ist unzureichend. Aktualisieren Sie ihn in der Vanta Developer Console.

404 Not Found

  • Die Ressourcen-ID existiert nicht in Ihrer Vanta-Organisation.

Tools werden in Claude Desktop nicht angezeigt

  • Starten Sie Claude Desktop neu, nachdem Sie claude_desktop_config.json geändert haben.

  • Bestätigen Sie, dass der Server läuft: curl http://localhost:8010/health.

No Vanta credentials found

  • Stellen Sie sicher, dass OAUTH_CLIENT_ID und OAUTH_CLIENT_SECRET in .env (oder der Umgebung) gesetzt sind.

  • Oder bestätigen Sie, dass config/tenants.json eingebunden ist und einen gültigen Eintrag für den angeforderten Tenant enthält.

Docker-Codeänderungen werden nicht übernommen

  • docker compose restart baut das Image NICHT neu. Führen Sie aus:

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

Lizenz

MIT

Related MCP Connectors