Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
VantaGate MCP Server & OpenAPI integration - Human-in-the-Loop for AI Agents
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
VANTA_API_KEYValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"vantagate": {
"command": "npx",
"args": [
"-y",
"@vantagate/mcp-server"
],
"env": {
"VANTA_API_KEY": "your-value"
}
}
}
}Run this in your terminal
claude mcp add vantagate --env VANTA_API_KEY=your-value -- npx -y @vantagate/mcp-serverFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"vantagate": {
"command": "npx",
"args": [
"-y",
"@vantagate/mcp-server"
],
"env": {
"VANTA_API_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"vantagate": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@vantagate/mcp-server"
],
"env": {
"VANTA_API_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified with the GitHub account Aderix, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: VANTA_API_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.0.2) reached the registry 6 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Toggl 2.0
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Toggl 2.0 MCP server for tasks, projects, time entries, and workspace operations.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Human-in-the-Loop authorization for AI Agents. VantaGate intercepts high-risk actions, routes them to a human approver via Slack or Email, and returns a cryptographically-signed decision - so your agent resumes or halts with a full audit trail.
AI agents are increasingly capable of executing consequential real-world actions: sending emails to thousands of users, deleting database records, moving money, deploying to production. VantaGate is the trust layer that ensures humans remain in control.
Agent hits risky action
↓ POST /v1/checkpoint ──→ Human receives Slack/Email notification ↓ ↓ id and status Human reviews payload & decides ↓ ↓ Poll GET /v1/checkpoint/{id} ←── Decision recorded + payload purged ↓ APPROVED → Resume workflow REJECTED → Halt + report reason
GET /checkpoint/{id} never returns the original payloadThis package ships two integration artifacts for connecting any AI agent to VantaGate:
| Artifact | File | Best for |
|---|---|---|
| OpenAPI 3.0 Spec | vanta-gate-openapi.json | No-code tools, OpenAI GPTs, Alice, n8n, Zapier |
| MCP Server | src/index.ts / dist/index.js | Claude Desktop, Cursor, Cline, any MCP-compatible agent |
The fastest path. No manual setup required.
Step 1: Get your API key from https://vanta-gate.com/dashboard/projects
Step 2: Add VantaGate to your Claude Desktop config.
Open your claude_desktop_config.json:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": { "vantagate": { "command": "npx", "args": ["-y", "@vantagate/mcp-server"], "env": { "VANTA_API_KEY": "YOUR_API_KEY_HERE" } } } }
Step 3: Restart Claude Desktop. The tools create_vantagate_checkpoint and check_vantagate_status will appear in Claude's tool list.
Step 4: Ask Claude to do something that requires approval:
*"Delete all records from the staging database where created_at < 2024-01-01"*
Claude will automatically pause, create a checkpoint, and tell you to check your email or Slack for the approval notification.
Import vanta-gate-openapi.json directly into your tool of choice.
API Key → Header: X-API-KEYThe GPT will now pause before high-risk tool calls and ask for human approval.
vanta-gate-openapi.jsonX-API-KEY to your VantaGate API key in the credential storecreate_vantagate_checkpoint to your agent's "before high-risk action" triggerX-API-KEY header in the credential configurationfrom langchain.tools import OpenAPITool
vanta_tool = OpenAPITool.from_openapi_spec( spec_path="./vanta-gate-openapi.json", headers={"X-API-KEY": os.environ["VANTA_API_KEY"]} ) agent = initialize_agent([vanta_tool], llm, agent=AgentType.OPENAI_FUNCTIONS)
create_vantagate_checkpointPauses the agent workflow and routes a human approval request.
When Claude uses it: Before any high-risk action - financial operations, data deletion, production deployments, bulk communications.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | ✅ | Short title shown to approver. Max 200 chars. |
payload | object | ✅ | Full JSON context for the decision. Encrypted + purged after decision. |
description | string | ❌ | Additional context below the title. Max 1000 chars. |
options | string[] | ❌ | Decision options. First = approve action. Default: ["Approve", "Reject"]. Min 2, max 5. |
timeout | string | ❌ | Auto-expire duration: 30m, 4h, 2d. Default: 24h. |
notify_email | string | ❌ | Email address for magic-link notification. |
slack_webhook_url | string | ❌ | Slack webhook URL (Pro/Scale plans). From Dashboard → Add to Slack. |
callback_url | string | ❌ | Your HTTPS endpoint for signed decision webhook. |
Returns: checkpoint_id and step-by-step instructions for the agent.
check_vantagate_statusPolls the decision status of a pending checkpoint.
| Parameter | Type | Required | Description |
|---|---|---|---|
checkpoint_id | string | ✅ | The ID from create_vantagate_checkpoint. |
Returns: status (PENDING / APPROVED / REJECTED / RESOLVED / EXPIRED), selected_option, reject_reason, and the full audit trail.
Base URL: https://api.vanta-gate.com/v1 Authentication: X-API-KEY header
| Method | Endpoint | Description |
|---|---|---|
POST | /checkpoint | Create a checkpoint - pauses agent |
GET | /checkpoint/{id} | Poll for human decision |
GET | /checkpoint/secure/{token} | Decision UI (internal - magic link) |
POST | /checkpoint/secure/{token}/decide | Submit decision (internal - decision UI) |
PENDING → APPROVED (human chose first/positive option)
→ REJECTED (human rejected with optional reason) → RESOLVED (human chose non-primary option) → EXPIRED (timeout elapsed, no decision)
| HTTP | Code | Description |
|---|---|---|
| 400 | Invalid_Webhook_URL | slack_webhook_url must start with https://hooks.slack.com/ |
| 400 | Invalid_Callback_URL | callback_url is malformed or points to private IP |
| 400 | Invalid_Decision | Decision value not in checkpoint's options array |
| 400 | Validation_Error | Request body field validation failure |
| 401 | Unauthorized | Missing, invalid, or rotated API key |
| 402 | Upgrade_Required | Feature requires Pro or Scale plan |
| 403 | Forbidden | API key doesn't match the checkpoint's project |
| 404 | Not_Found | Checkpoint ID or token does not exist |
| 409 | Already_Decided | Decision already recorded for this checkpoint |
| 410 | Checkpoint_Expired | Timeout window has passed |
| 429 | Rate_Limited | Too many requests - back off and retry |
All errors follow the envelope:
{
"statusCode": 400, "error": "Machine_Readable_Code", "message": "Human-readable description." }
| Feature | Free | Pro ($49/mo) | Scale ($199/mo) |
|---|---|---|---|
| Checkpoints/month | 50 | 2,500 | 25,000 |
| Email notifications | ✅ | ✅ | ✅ |
| Slack notifications | ❌ | ✅ | ✅ |
| Webhook callbacks | ✅ | ✅ | ✅ |
| Max timeout | 24h | 7 days | 30 days |
| Log retention | 7 days | 90 days | 365 days |
Timeout values are silently clamped to your plan's maximum. A Free plan request with
timeout: "7d"will be capped to24h.
When a human decides, VantaGate sends a signed HTTPS POST to your callback_url (up to 5 retry attempts with exponential back-off).
Request headers:
Content-Type: application/json
X-Vanta-Signature: sha256= User-Agent: VantaGate-Webhook/1.0
Signature verification (Node.js):
const crypto = require('crypto')
function verifyVantaSignature(rawBody, signature, projectSecret) { const expected = 'sha256=' + crypto .createHmac('sha256', projectSecret) .update(rawBody) .digest('hex') return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(signature) ) }
app.post('/webhook/vanta', express.raw({ type: 'application/json' }), (req, res) => { const sig = req.headers['x-vanta-signature'] if (!verifyVantaSignature(req.body, sig, process.env.VANTA_PROJECT_SECRET)) { return res.status(401).json({ error: 'Invalid signature' }) } const event = JSON.parse(req.body) if (event.status === 'APPROVED') { // ✅ Resume agent workflow } else if (event.status === 'REJECTED') { // ❌ Halt - check event.reject_reason } res.json({ received: true }) })
Your Webhook Signing Secret (VANTA_PROJECT_SECRET) is distinct from your API key. Find it in Dashboard → Project Settings.
# Install dependencies
npm install
npm run build
VANTA_API_KEY=YOUR_API_KEY_HERE npm start
{
"mcpServers": { "vantagate": { "command": "npx", "args": ["-y", "@vantagate/mcp-server"], "env": { "VANTA_API_KEY": "YOUR_API_KEY_HERE" } } } }
{
"mcpServers": { "vantagate": { "command": "node", "args": ["/absolute/path/to/dist/index.js"], "env": { "VANTA_API_KEY": "YOUR_API_KEY_HERE" } } } }
X-API-KEY is hashed server-side - VantaGate never stores plaintext keys.slack_webhook_url is sent per-request and purged atomically after the decision. Zero retention.callback_url is validated against private IP ranges (SSRF prevention).MIT - see LICENSE