Vanta MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Vanta MCP Serverlist my open vulnerabilities"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Vanta MCP Server
An MCP server for the Vanta compliance platform. Exposes 16 tools for managing controls, vulnerabilities, vendors, tests, risk scenarios, policies, monitored computers, documents, and findings.
Transports
Transport | Endpoint | Use case |
Streamable HTTP |
| Claude Desktop, most MCP clients |
SSE |
| Legacy clients (n8n, etc.) |
Health |
| Container health checks |
Quick Start — Docker
1. Get Credentials
Log in to the Vanta Developer Console.
Go to Settings → API Access.
Create an OAuth application — copy the Client ID and Client Secret.
Grant the scopes your tools require (typically
vanta.readandvanta.write).
2. Configure
cp .env.example .env
# Edit .env — set OAUTH_CLIENT_ID and OAUTH_CLIENT_SECRET at minimum.env example:
OAUTH_CLIENT_ID=your_client_id
OAUTH_CLIENT_SECRET=your_client_secret
AUTH_TOKEN= # optional — requires Bearer auth on /mcp and /sse
PORT=80103. Run
docker compose up -d
# Server: http://localhost:8010
# Health: http://localhost:8010/health4. Connect Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"vanta": {
"type": "http",
"url": "http://localhost:8010/mcp"
}
}
}If AUTH_TOKEN is set:
{
"mcpServers": {
"vanta": {
"type": "http",
"url": "http://localhost:8010/mcp",
"headers": {
"Authorization": "Bearer YOUR_AUTH_TOKEN"
}
}
}
}Quick Start — Local (no 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.serverEnvironment Variables
Variable | Default | Description |
|
| Informational — both |
|
| Bind address |
|
| HTTP port (also accepts legacy |
| (disabled) | If set, clients must send |
|
|
|
|
| HTTP request timeout in seconds |
|
| Vanta API base URL |
| — | Default tenant: Vanta OAuth2 client ID ( |
| — | Default tenant: Vanta OAuth2 client secret ( |
OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET are only used to auto-create a "default" tenant entry. For multi-tenant deployments use config/tenants.json instead.
Multi-Tenant
For multiple Vanta organizations, populate config/tenants.json (copy from 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"
}
]
}The id value is what your agent/client sends in the X-Tenant-ID request header:
X-Tenant-ID: acme-corp
Authorization: Bearer <AUTH_TOKEN> ← only if AUTH_TOKEN is set in .envCredential fields:
Field | Required | Description |
| ✅ | Must match |
| Optional | Defaults to |
| ✅* | OAuth client ID (prefix: |
| ✅* | OAuth client secret (prefix: |
| ✅* | Personal access token — alternative to OAuth (prefix: |
*One auth method required per tenant. OAuth is recommended for production.
If "default" exists in tenants.json, requests without an X-Tenant-ID header will automatically use those credentials. See ../MCP-Multi-Tenant-Guide.md for full architecture and client usage examples.
config/tenants.json is gitignored and never baked into the Docker image — it is mounted at runtime via the ./config:/app/config:ro volume.
Tools
Controls
Tool | Description |
| List all controls with optional pagination |
| Get full details for a specific control by ID |
| List all tests linked to a specific control |
Vulnerabilities
Tool | Description |
| List vulnerabilities with optional pagination |
| Update a vulnerability's remediation status and notes |
| List vulnerability findings with optional pagination |
| Deactivate a vulnerability by ID |
Vendors
Tool | Description |
| List approved vendors with optional pagination |
| Get full details for a specific vendor by ID |
| List auto-discovered vendors (from integrations) |
Tests
Tool | Description |
| List all compliance tests with optional pagination |
| List entities associated with a specific test |
Risk & Policies
Tool | Description |
| List risk scenarios with optional pagination |
| List security policies with optional pagination |
Assets & Documents
Tool | Description |
| List computers monitored by Vanta agents |
| List documents (policies, procedures, evidence) |
Auth Flow
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
→ ResponseTokens are cached per tenant instance and refreshed automatically on 401.
Project Layout
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.mdTroubleshooting
401 Unauthorized
Verify
OAUTH_CLIENT_IDandOAUTH_CLIENT_SECRETare correct.Ensure the OAuth app has the required scopes in the Vanta Developer Console.
If using
AUTH_TOKEN, confirm the client sendsAuthorization: Bearer <token>.
403 Forbidden
The OAuth app scope is insufficient. Update it in the Vanta Developer Console.
404 Not Found
The resource ID does not exist in your Vanta organization.
Tools not showing in Claude Desktop
Restart Claude Desktop after changing
claude_desktop_config.json.Confirm the server is running:
curl http://localhost:8010/health.
No Vanta credentials found
Ensure
OAUTH_CLIENT_IDandOAUTH_CLIENT_SECRETare set in.env(or environment).Or confirm
config/tenants.jsonis mounted and contains a valid entry for the requested tenant.
Docker code changes not reflected
docker compose restartdoes NOT rebuild the image. Run:docker compose build --no-cache && docker compose up -d
License
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/josh-thurston/MCP-Vanta'
If you have feedback or need assistance with the MCP directory API, please join our Discord server