About vibe-gate-mcp
vibe-gate-mcp is an MCP server for adversarial code reviews in AI-assisted IDEs. It sends changed source files to a Critic LLM and lets a human resolve deadlocks.
Key features
- 01Debate between IDE agent and Critic LLM
- 02Read complete changed files from disk
- 03Support API and local CLI providers
- 04Read-only review mode
- 05Limit source context to ten blocks
Use cases
- 01Reviewing code changes before completion
- 02Checking files without modifying review state
- 03Using a signed-in local CLI as the critic
MCP support
Exposes a phase-review tool to MCP clients. Clients provide changed file paths and a report; the server reads the files and passes their contents to the Critic.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y vibe-gate-mcpVIBE_WORKSPACE_ROOTConsumer project root (auto-detected from the working directory if omitted)CRITIC_PROVIDERCritic provider: openai, anthropic, google, minimax, opencode, codex-cli, claude-code, cursor-agent or opencode-cli (a signed-in local CLI is auto-detected if omitted)CRITIC_MODELModel id override; required for opencode-cli as provider/modelCRITIC_PERSONACritic persona: security-first, performance-freak or clean-code-monkOPENAI_API_KEYSecretOpenAI API key (CRITIC_PROVIDER=openai)ANTHROPIC_API_KEYSecretAnthropic API key (CRITIC_PROVIDER=anthropic)GOOGLE_GENERATIVE_AI_API_KEYSecretGoogle Gemini API key (CRITIC_PROVIDER=google)MINIMAX_API_KEYSecretMiniMax API key (CRITIC_PROVIDER=minimax)OPENCODE_API_KEYSecretOpenCode API key (CRITIC_PROVIDER=opencode)OPENCODE_PLANOpenCode plan: go (subscription) or zen (pay-as-you-go)CODEX_CLI_PATHPath to the codex executable (CRITIC_PROVIDER=codex-cli)CLAUDE_CODE_CLI_PATHPath to the claude executable (CRITIC_PROVIDER=claude-code)CURSOR_AGENT_CLI_PATHPath to the agent executable (CRITIC_PROVIDER=cursor-agent)OPENCODE_CLI_PATHPath to the opencode executable (CRITIC_PROVIDER=opencode-cli)CRITIC_CLI_TIMEOUT_MSLocal CLI timeout in milliseconds, from 1000 to 600000DEBUGLog parse and read failures to stderrLocal servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
2Saved tool list · updated 3w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| files | array | No | PREFERRED. Workspace-relative source paths under VIBE_WORKSPACE_ROOT. MCP reads each file and builds FILE:...CONTENT: payload. Exactly one of: files | semanticDiffPath | semanticDiff. Max 10 files. |
| round | integer | No | Round number (1-3), default 1 |
| report | string | Yes | Implementer report. MUST INCLUDE: 1. Specific file paths & line numbers. 2. What changed and why. 3. Confirmation that NO "future solutions" or "TODOs" remain (instant fixes only). |
| phaseId | string | Yes | Phase identifier (e.g., phase-6-§1a or 1.1.1) |
| readOnly | boolean | No | When true, do not write or delete workspace state, sessions, debt logs, conflict counts or case files. Overrides updateStatus. Default: false; no durable review round is saved. |
| logToDebt | object | No | When DEBT verdict and Implementer accepts, log to DEBT.md |
| logToDebt.subject | string | Yes | |
| logToDebt.rationale | string | Yes | |
| dependencies | array | No | New/updated package names |
| semanticDiff | string | No | Inline FILE:...CONTENT: payload. Prefer files[]. Exactly one of: files | semanticDiffPath | semanticDiff. NOT git diff. |
| updateStatus | boolean | No | When false, ACCEPT does not write .vibe/status.json. Default: true except phaseIds with mcp-smoke- / vibe-gate-probe- prefixes. |
| semanticDiffPath | string | No | Workspace-relative path to a pre-built FILE:...CONTENT: payload file (raw or JSON {"semanticDiff":"..."}). Exactly one of: files | semanticDiffPath | semanticDiff. |
Details
From the project READMEVibe-Gate (MCP)
An Adversarial Quality Gate for AI-assisted IDEs: the IDE agent and a Critic LLM debate code; the human decides only on deadlock.
Quick start (npm / npx)
1. Choose a Critic provider
Use a direct API provider with its key, or use a local CLI that is already installed and signed in. Local CLI providers do not need a separate provider API key. If CRITIC_PROVIDER is omitted, Vibe-Gate selects the first installed local CLI in this order: Codex, Claude Code, Cursor Agent, then OpenCode CLI. OpenCode CLI moves to the front when CRITIC_MODEL is in provider/model form. The first review response includes a notice naming the selected CLI. If none is found, OpenAI remains the default and requires OPENAI_API_KEY. Set CRITIC_PROVIDER to choose explicitly.
Copy from the package’s .env.example:
# Direct API example
CRITIC_PROVIDER=openai
OPENAI_API_KEY=YOUR_OPENAI_API_KEY
# Or use the signed-in Codex CLI account (no API key)
# CRITIC_PROVIDER=codex-cli
# Or another signed-in local CLI (no separate API key)
# CRITIC_PROVIDER=claude-code
# CRITIC_PROVIDER=cursor-agent
# CRITIC_PROVIDER=opencode-cli
# CRITIC_MODEL=provider/model # required for opencode-cli; see `opencode models`
# Or OpenCode (https://opencode.ai/auth)
# CRITIC_PROVIDER=opencode
# OPENCODE_API_KEY=...
# OPENCODE_PLAN=go
# CRITIC_MODEL=minimax-m3
| Provider | CRITIC_PROVIDER | Authentication |
|---|---|---|
| OpenAI | openai | OPENAI_API_KEY |
| Anthropic | anthropic | ANTHROPIC_API_KEY |
| Google Gemini | google | GOOGLE_GENERATIVE_AI_API_KEY |
| MiniMax | minimax | MINIMAX_API_KEY |
| OpenCode | opencode | OPENCODE_API_KEY (+ optional OPENCODE_PLAN) |
| Codex CLI | codex-cli | Existing codex login session |
| Claude Code | claude-code | Existing Claude Code account session |
| Cursor Agent | cursor-agent | Existing agent login session |
| OpenCode CLI | opencode-cli | Saved opencode auth login credentials + model |
For Cursor Agent, Vibe-Gate runs agent first and falls back to the legacy cursor-agent executable if the primary command is unavailable.
opencode is still the separate Zen/Go HTTP provider and needs OPENCODE_API_KEY. opencode-cli runs the local CLI and requires a provider/model value in CRITIC_MODEL; see the CLI guide for details.
CRITIC_MODEL is passed to the selected provider or CLI without a Vibe-Gate model allowlist; the provider must support that model ID. The OpenAI API provider uses the Responses API. See provider configuration.
See CLI provider setup and alternatives for CLI installation, login, configuration, OpenCode session details, and other candidates we evaluated. Full variable list: docs/project/VARIABLES.md.
2. Configure Cursor MCP (any consumer repo)
Project or user .cursor/mcp.json for Codex CLI (or use the API-key example):
{
"mcpServers": {
"vibe-gate": {
"command": "npx",
"args": ["-y", "vibe-gate-mcp"],
"env": {
"VIBE_WORKSPACE_ROOT": "${workspaceFolder}",
"CRITIC_PROVIDER": "codex-cli"
}
}
}
}
For direct providers, prefer keys in a local .env next to the package or in the consumer project under VIBE_WORKSPACE_ROOT (never commit secrets). MCP env overrides .env. For a CLI provider, install and sign in to that CLI as the same OS user running the MCP server.
3. Call the tool (agents)
{
"phaseId": "phase-1-§3",
"report": "What changed, why, file:line — no TODOs",
"files": ["src/a.ts", "src/b.ts"],
"readOnly": true,
"round": 1
}
Pass changed source paths in files[]. MCP reads the complete files from disk and serializes FILE/CONTENT internally for the Critic. The agent supplies paths and a completion report; it does not need to paste file bodies or generate a corpus. The example uses readOnly: true to keep review state untouched. See docs/SEMANTIC_DIFF_PAYLOAD.md.
Local development (this repo)
corepack yarn install
npm run build
npm test
cp .env.example .env # fill Critic key
npm start # stdio MCP
User MCP while developing: examples/cursor-mcp.user-local-dev.json (node dist/index.mjs + VIBE_WORKSPACE_ROOT=${workspaceFolder}).
After npm run build, restart the vibe-gate MCP server in the IDE.
Publish
Releases are automatic. Every push to main runs .github/workflows/publish.yml: it runs yarn quality, lets
semantic-release choose the version from the conventional commits (fix: is a patch, feat: a minor), publishes
vibe-gate-mcp to npm with provenance, and lists that version in the
MCP Registry as io.github.mustafacagri/vibe-gate-mcp. No token is
stored: npm and the registry both trust the workflow through GitHub OIDC. server.json is the registry entry and
is kept at the release version by scripts/sync-server-json.mjs.
yarn quality # what the workflow checks before it tags anything
npm pack --dry-run # inspect the exact tarball contents
Consumers then use npx -y vibe-gate-mcp as above.
Payload sources — prefer files[]
| Priority | Field | Use |
|---|---|---|
| 1 | files[] | Normal batches |
| 2 | semanticDiffPath | Existing compatibility carrier |
| 3 | semanticDiff | Existing compatibility carrier |
Use readOnly: true for probes. updateStatus: false and mcp-smoke- / vibe-gate-probe- phase prefixes only skip phase status writes.
Documentation
| Doc | Description |
|---|---|
| docs/INSTALLATION.md | Install + multi-repo MCP |
| docs/USAGE.md | First run and providers |
| docs/CLI_PROVIDERS.md | Local CLI providers |
| docs/SEMANTIC_DIFF_PAYLOAD.md | files[] contract |
| docs/ROADMAP.md | Release checklist |
| docs/TROUBLESHOOTING.md | Stale MCP, path errors |
| docs/project/VARIABLES.md | Env SSoT |
| examples/ | Cursor mcp.json templates |
Read-only review and full source slot limit
Set readOnly: true on submit_phase_review for a check that must leave the workspace untouched. It overrides updateStatus: true and prevents session clearing/saving, status updates, debt appends, conflict counter updates and deadlock case writes. Verdicts and concern verification still follow the ordinary review rules; deadlock case data is returned without saving it. Existing matching sessions can be read on later rounds, but read-only calls do not save a new round. logToDebt still expresses acceptance of debt when required, without writing the log. The default is false. updateStatus: false alone only disables phase status updates.
Every carrier (files[], inline semanticDiff, raw/JSON semanticDiffPath) is limited to ten actual FILE/CONTENT source blocks, including additional REQUEST: context on later rounds. Duplicate blocks and both rename endpoints count separately, even if their paths or bytes match. An oversized corpus fails before the enlarged Critic request; it is never reduced to the first ten blocks. Requested line ranges are read as complete files, subject to the existing file and aggregate size limits. Markdown, JSON and other document/data endpoints are rejected as source context. Callers positively classify their selected source endpoints; files[] lets MCP supply the full source bodies. For deleted files and old rename endpoints, an orchestrator such as Vibe-Pilot materializes pinned Git base blobs at real snapshot paths before passing those paths to files[]. MCP reads those files from disk; it does not read Git history itself.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.