vibe-mcp
Click on "Deploy 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., "@vibe-mcphave vibe refactor the logging module and show me the diffstat"
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.
vibe-mcp
An MCP server that lets Claude Code hand well-specified coding work (implement, simplify, mechanical refactors) to the Mistral Vibe CLI, so the expensive model plans and reviews while a cheaper one writes the code.
Asynchronous.
vibe_submitreturns at once; Claude keeps working and callsvibe_wait.Isolated. Every job runs in its own git worktree and branch, inside a bubblewrap sandbox.
Compact. Results are short plain text (summary, diffstat, cost). The full diff is on request.
Safe to merge.
vibe_applystages a job's changes in your checkout and never commits.
Status: unit-tested against a fake sandbox (no network, no cost), and smoke-tested against real Vibe 3.1.0 with the reference sandbox by a script driving the server over stdio: parallel jobs, apply, conflict report, cancel (no processes left behind), writes outside the worktree, and serial chaining. It has also been used from a live Claude Code session on Linux: the server served the repo Claude Code was started in, the keyring login reached the jobs, and a cleanup, a review,
vibe_applyand a four-minute job all worked. Only Vibe 3.1.x andmistral-large-4have been tried.
Requirements
You need | Why | Check |
Linux | the reference sandbox uses bubblewrap | |
git 2.22+, and a repo with at least one commit | each job is a worktree branched from |
|
installs this tool; it downloads Python 3.14 itself if you lack it | ||
bubblewrap ( | the sandbox; some distros restrict namespaces and need extra setup |
|
Mistral Vibe, installed with | the reference sandbox binds |
|
A Mistral login: the system keyring ( | Vibe calls the Mistral API |
|
for the keyring login: | the sandbox reaches the keyring through a filtered D-Bus proxy; |
|
| the reference sandbox uses it to read Vibe's export |
Only Vibe 3.1.x has been tested. On the common distros the packages are called bubblewrap and
xdg-dbus-proxy.
Related MCP server: worker-mcp
Install
# 1. Vibe, then log in (skip the login if you will use MISTRAL_API_KEY instead)
uv tool install mistral-vibe # see Mistral's docs if the package name changes
vibe --setup
# 2. this project, and the reference sandbox from the same clone
git clone https://github.com/idaho06/vibe-mcp && cd vibe-mcp
install -m755 contrib/vibe-sandbox ~/.local/bin/
uv tool install .
# 3. check the machine; every failing line says how to fix it
vibe-mcp doctor
# 4. register the server with Claude Code for all your projects
claude mcp add --scope user vibe -- vibe-mcp
claude mcp list # should show `vibe` as connectedTo update later: git pull && uv tool install --force .
If you use MISTRAL_API_KEY, the server process must receive it. Pass it when registering (see
claude mcp add --help for the environment-variable option) instead of relying on your shell.
Using it
Start Claude Code inside the repository you want to work on (it needs at least one commit). The
server works on the git repository of its working directory and prints serving git repo <path> on
stderr at startup; check that line. Do not wrap the command in something that changes directory (for
example uv run --directory; use uv run --project instead), or it will serve the wrong repository.
Claude Code asks before using MCP tools. Allow the five tools (named like mcp__vibe__vibe_submit)
in its permission settings if you do not want a prompt for each call.
Using a different sandbox
sandbox_cmd in the config can point to any wrapper that behaves like this. The doctor checks that
are specific to the reference sandbox are skipped for other commands.
It is called as
vibe-sandbox RUN_DIR [vibe arguments...]with the current directory inside a git repo.RUN_DIRis namedvibe-run.*, and the wrapper makes Vibe writeRUN_DIR/export/export.json(Vibe's--output-dir RUN_DIR/export).It exits with Vibe's exit code (0 finished, 3 stopped at a limit, anything else failed).
It should let Vibe write only the current directory (the job's worktree) and the git directory.
Keep
data_dirshort: the wrapper may create a Unix socket inRUN_DIR(108-character limit).
Read contrib/vibe-sandbox before you rely on it: it decides what Vibe can see and write.
Tools
Tool | Purpose |
| Queue a task and return its job id at once. |
| Block until any (or all) of the jobs end, or |
| Vibe's own summary (unverified), diffstat, added files, scope violations, tokens, cost. |
| Cancel a queued job or kill a running one. Its worktree is kept. |
| Stage the job's changes in your checkout ( |
Typical flow: vibe_submit (one or several jobs) → vibe_wait → vibe_result → review the diff →
vibe_apply → you run the tests and git commit.
Scopes and parallel jobs
scope lists the repo-relative paths a job may touch. Jobs whose scopes overlap run one after
another; jobs with disjoint scopes run in parallel (up to max_concurrent). A job with no scope
counts as the whole repo. A waiting job reserves its scope, so it cannot be starved by later jobs.
After the run, changed files outside the scope are reported as SCOPE VIOLATIONS (not blocked).
base_job starts a job from another job's result. It waits until that job ends, and fails with a
clear message if that job failed, was cancelled, applied or discarded.
Isolation modes
isolation = "worktree"(default): every job starts from the currentHEAD.isolation = "serial": one job at a time, and each job starts from the latest finished job's branch, so work accumulates like a single shared worktree.
Skills and project context
A job runs in a fresh worktree, which holds only the files git tracks. Anything kept out of git
(a gitignored .vibe/ folder, an untracked AGENTS.md) is missing there, and Vibe cannot see your
main checkout. Two features bring that material in. Both read from your main checkout when the job
is submitted, so they work even for files git ignores.
Skills
A skill is a SKILL.md file of instructions. vibe_submit(skill="simplify", spec="...") puts the
skill's text (without its frontmatter) in front of your task. The server looks for it in:
<repo>/.vibe/skills/<name>/SKILL.md(per project; wins), then~/.vibe/skills/<name>/SKILL.md(global).
These are Vibe's own skill folders, so the same files also work in interactive Vibe. A wrong name is rejected at once with the list of available skills, and nothing is queued.
Shipped skills. contrib/skills has two lightweight skills written for
unattended jobs. Install them once:
mkdir -p ~/.vibe/skills && cp -r contrib/skills/* ~/.vibe/skills/simplifycleans up the code your task names (reuse, dead code, nesting, wasted work) without changing behavior, and edits the files in place.code-reviewis read-only and reports real defects, each with the input that triggers it.
Both never ask questions, stay inside the scope the task names, run only the commands the task gives them, and end with a short fixed-format report. They are single-agent: nothing like a multi-agent review. Write your own for anything else, or override these per project.
A third, code-simplifier, is in contrib/skills-apache: an adaptation of
Anthropic's Apache-2.0 code-simplifier
agent, kept under that license with a notice of what changed. It is also single-agent.
Writing a skill. Create <name>/SKILL.md with frontmatter holding a name (lowercase letters,
digits and hyphens) and a description, then the instructions. The frontmatter is YAML: quote the
description if it contains : (a colon followed by a space), or Vibe rejects the file. Remember the
job is headless: the skill should say not to ask questions, how to find its target, and how short the
final report must be, because Claude pays for every line of the result.
Project context
context_files in the config lists repo files to put in front of every task, for example your coding
standards when AGENTS.md is not tracked in git:
context_files = ["AGENTS.md"]Missing or empty files are skipped, and each file is cut at 50,000 characters. List only files Vibe
cannot see by itself: a tracked file is already in the worktree, and AGENTS.md is one Vibe reads on
its own. The default is empty, so specs stay self-contained unless you opt in.
Naming the target of a cleanup or review
The worktree starts at HEAD, so uncommitted changes in your checkout are not in the job. Commit
first, then say exactly what to work on in the spec: "simplify the changes in HEAD~3..HEAD" or "review
src/parser.py". The shipped skills do nothing and say so when the task names no target.
Cost
Every job pays Vibe's fixed per-session overhead, and a skill adds its own text (about 400 to 600
tokens for the shipped ones). In tests with Vibe 3.1.0 and mistral-large-4 on a 45-line change, using
larger skills than the shipped ones, a review cost about $0.02 to $0.03 and a cleanup $0.04 to $0.06.
Vibe's cost report may not include subagents, so treat figures as lower bounds, and check
vibe-mcp stats on your own work.
Configuration
Optional file ~/.config/vibe-mcp/config.toml (or the path in $VIBE_MCP_CONFIG). Unknown keys and
wrong types are rejected at startup.
Key | Default | Meaning |
|
|
|
|
| parallel jobs (forced to 1 in serial mode) |
|
| Vibe model alias |
|
| sandbox wrapper command (may include arguments) |
|
| run directories and worktrees |
|
| default per-job turn budget (per-call override) |
|
| default per-job time limit in seconds (per-call override) |
|
| default per-job price cap in dollars; 0 = no cap |
|
| cap on Vibe's final message in results |
|
| cap on the diff in results |
|
| repo files whose text is put in front of every task (see Skills) |
Things to know
Long waits are fine in Claude Code. It moves a tool call that runs longer than about 120 seconds to the background and tells Claude when it finishes. A
vibe_waiton a four-minute job returned its result that way, as a notification, without an error. (Seen in one session; other clients may differ.)Vibe's code is unreviewed. The server never runs tests or the code Vibe wrote. Read the diff (
vibe_result diff=true), then run your own checks before committing.Trust the diff, not Vibe's report. Vibe can say it wrote files outside its worktree, such as into your checkout or another job's worktree. With the reference sandbox those writes land in a throwaway in-memory filesystem and vanish, but Vibe still reports success. Only the committed diff counts.
Every job has a cost floor. A one-line fix cost about 33K tokens (mostly Vibe's cached system prompt) and $0.013 in a test with Vibe 3.1.0. Delegate medium and large tasks, not one-liners.
Jobs live with the server. Closing Claude Code kills running jobs; queued and running jobs left behind show up as
loston the next start. Their worktrees are kept until you discard them.Main checkout guard. The sandbox must share the git directory, so a job could in principle move your branch. If your checkout's branch or
HEADchanged while a job ran, the result starts with aWARNING(it also fires when you committed meanwhile).Vibe's streaming output is undocumented. It is only used for live progress and the final message; the outcome, cost and tokens come from Vibe's
export.json.
Measuring the savings
vibe-mcp stats (add --json for scripts) sums up every saved job: counts by state, total and
average cost, tokens and duration. To compare with another delegation setup, run the same tasks
through both and compare wall time and Vibe cost from stats, plus the Claude tokens in the session
transcripts.
Development
uv sync
uv run pytest # no network, no cost: uses tests/fake_sandbox.py
uv run ruff check && uv run ruff format --checkTests drive a fake sandbox (tests/fake_sandbox.py) that takes JSON directives, so the whole
scheduler, git handling and MCP surface are covered without running Vibe.
License
MIT, except contrib/skills-apache/, which is Apache-2.0 (see its README).
Available Tools
5 toolsvibe_applyA
Stage a finished job's changes in the main checkout (git merge --squash, no commit).
Conflicts are reported and nothing changes. discard=true drops the job's worktree and branch instead.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| discard | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does meaningful work: it discloses that conflicts are reported with no partial change (atomicity), that no commit is created, and that discard=true destroys the job's worktree and branch. It stops short of covering permissions or whether a successful apply can be repeated safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary behavior and the git primitive, then the failure mode, then the destructive alternative. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no annotations and no output schema, the description covers the core semantics, the no-op-on-conflict guarantee, and the destructive discard path. Only the shape of what gets reported on conflict is left unstated, which is modest given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for the non-obvious parameter by explaining exactly what discard=true does (drops the worktree and branch) rather than leaving a bare boolean. job_id's meaning is only inferable from "a finished job's changes," which is a minor remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb-and-resource pair ("Stage a finished job's changes in the main checkout") and pins down the mechanism with "git merge --squash, no commit." It does not explicitly name a sibling like vibe_result or vibe_wait, but "finished job" implicitly frames the ordering relative to those tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"A finished job's" signals the precondition that the job must have completed, which implies when this tool is appropriate. The discard branch is described as an alternative behavior, but neither branch states when an agent should choose apply versus simply reading the result with vibe_result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vibe_cancelA
Cancel a queued job, or kill a running one. Its worktree is kept.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose two useful facts: the operation is a mutation that terminates running work, and the worktree survives. It does not say whether a running job is killed gracefully, what permissions are needed, whether the call is idempotent, or whether an error is returned for already-completed jobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, and the state distinction is front-loaded before the artifact-preservation detail. Nothing is repeated and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with no annotations and no output schema, the description covers the core action and one side effect, but leaves the agent guessing about the return value, failure modes, and id provenance. It is adequate to call the tool but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required job_id parameter with 0% schema description coverage, so the description must compensate and largely does not: it never says where job_id comes from (presumably vibe_submit), what format it takes, or how an invalid or unknown id is handled. It only implies that the id must refer to a queued or running job.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb pair (cancel/kill) and the resource (a queued or running job), and its state-dependent framing makes the tool's scope immediately clear. It does not reference any sibling, but none of vibe_submit, vibe_wait, vibe_result or vibe_apply overlaps with cancellation, so disambiguation is effectively implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'a queued job' versus 'a running one' tells an agent the two contexts in which to call it and what happens in each. It stops short of exclusions or follow-up guidance, such as whether to read results via vibe_result afterwards or what to do if the job has already finished.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vibe_resultA
Outcome of a job: Vibe's own summary (unverified), diffstat, added files, scope violations, tokens and cost. diff=true appends the diff (capped).
| Name | Required | Description | Default |
|---|---|---|---|
| diff | No | ||
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does disclose real behavioral traits: the summary is explicitly 'unverified' (a trust caveat) and the diff is 'capped' when diff=true (a size limit). It omits error behavior when job_id is unknown or the job is incomplete, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the returned payload front-loaded and the diff flag explained last; there is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the return value, and it enumerates the returned fields plus the optional diff. Complete enough to call correctly, with only edge-case/error behavior and sibling routing left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does for the key optional flag: 'diff=true appends the diff (capped)' explains both effect and limit. job_id is only implicitly defined as identifying the job, leaving one parameter thinly covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('Outcome of a job') and enumerates exactly what the outcome contains: summary, diffstat, added files, scope violations, tokens, cost. That is far more concrete than the bare name, though it never explicitly names how it differs from siblings like vibe_wait or vibe_apply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: you call this to retrieve a job's outcome, presumably after it completes, but the description never says whether it works on a still-running job or how it relates to vibe_wait/vibe_apply. There are no explicit when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vibe_submitA
Queue a coding task for Mistral Vibe (a cheaper model) in an isolated git worktree.
spec: complete and self-contained; Vibe sees neither this chat nor project docs. skill: name of a Vibe skill (.vibe/skills//SKILL.md in the repo or ~) to follow. scope: repo-relative paths the task may touch; jobs with overlapping scopes run one after another (omit = whole repo). base_job: build on another job's result. Returns at once. Then: vibe_wait, vibe_result, vibe_apply.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| scope | No | ||
| skill | No | ||
| title | No | ||
| base_job | No | ||
| max_price | No | ||
| max_turns | No | ||
| time_limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the burden and it does cover the important traits: isolated worktree execution, immediate return rather than blocking, and concurrency serialization when scopes overlap (omit = whole repo). It does not state cost implications despite mentioning a 'cheaper model', nor what happens on failure, timeout, or cancellation, and never says what value is returned for handing to vibe_wait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tight and front-loaded: the purpose leads, the parameter glosses follow, and the workflow hand-off is one short line at the end. The telegraphic 'name: meaning' fragments are efficient but border on cryptic for the skill and scope lines, which cost it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is an 8-parameter mutating/queueing tool with no annotations, no output schema, and 0% schema coverage, so the description must do nearly all the work. It covers the core mental model and next steps well, but omits the four budget/limit parameters and does not say that submission returns a job identifier — a real gap given that vibe_wait, vibe_result, and vibe_apply presumably need that ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters, so the description is the only source of parameter meaning — and it only explains four of them (spec, skill, scope, base_job). Useful semantics are added for those (where the skill file lives, scope overlap behavior, building on a prior job), but title, max_price, max_turns, and time_limit get nothing beyond self-describing names, leaving half the surface un-elaborated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource — 'Queue a coding task for Mistral Vibe ... in an isolated git worktree' — naming the executor and the isolation model. It is clearly separable from siblings because the closing line maps the whole follow-up lifecycle (vibe_wait, vibe_result, vibe_apply) and leaves vibe_submit as the entry point. An agent can pick it out without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is clear: this is the asynchronous delegation path, and the spec guidance ('complete and self-contained; Vibe sees neither this chat nor project docs') tells the agent how to use it correctly. It also directs follow-up to the specific sibling tools in order. It stops short of stating when NOT to delegate or what to do instead (e.g., doing the edit inline), so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vibe_waitA
Wait until any job (every job if wait_all) in job_ids ends, or timeout seconds pass.
Default job_ids: all active jobs. timeout=0 just reports status. One line per job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_ids | No | ||
| timeout | No | ||
| wait_all | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden. It usefully discloses the blocking nature, the default scope, the timeout=0 special case, and that output is one line per job. It does not say what happens when the timeout expires before any job ends (error vs partial result), which is the key behavioral ambiguity for a wait tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core semantics (blocking wait, scope, timeout) before the defaults and output note. No redundant or filler wording; every clause conveys information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, zero-required, annotation-free tool with no output schema, the description covers defaults, special values, and the shape of the return ('one line per job'). The main remaining gap is the outcome when the timeout elapses, which an agent needs in order to handle the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: job_ids is explained with its default of all active jobs, timeout is explained as a bound with a documented timeout=0 status-only mode, and wait_all is defined as every-vs-any. Only the unit/format of timeout and the expected id format are left unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Wait until ... job[s] ... ends') and clarifies the scope of the wait (any job, or every job when wait_all is set). It does not explicitly distinguish itself from the sibling vibe_result, which an agent could reasonably confuse with a blocking wait, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Useful context is given implicitly: default job_ids covers all active jobs, and timeout=0 is a pure status check rather than a wait. However, there is no explicit statement of when to prefer vibe_wait over vibe_result or vibe_submit, so the agent must infer the choice from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
vibe_apply - First observed
vibe_cancel - First observed
vibe_result - First observed
vibe_submit - First observed
vibe_wait
TDQS
Scored across 5 tools
Each tool maps to a distinct lifecycle phase: submit queues work, wait blocks for completion, result inspects the outcome, apply stages or discards changes, and cancel aborts a job. The boundaries are reinforced by descriptions that cross-reference the natural workflow (submit -> wait -> result -> apply), leaving little room for misselection.
All tools share a consistent vibe_ prefix with single-word suffixes, which is predictable and readable. The minor deviation is that four names are verbs (submit, wait, cancel, apply) while vibe_result is a noun, though that is idiomatic for an inspection tool.
Five tools is well-scoped for a job-delegation lifecycle, and each one earns its place with no redundant overlap. Nothing feels thin because wait with timeout=0 doubles as a status poll, and nothing feels padded.
The surface covers the full lifecycle: enqueue, await, inspect (summary, diffstat, diff, cost, scope violations), apply/discard, and cancel. Minor gaps remain, such as no dedicated job-listing/history tool for finished jobs and no way to un-apply a staged squash without manual git work, but these are workable.
Maintenance
Related MCP Connectors
Source-checked CLI guides and model-aware planning for Claude Code, Codex, and Grok Build.
Work on your own computers from Claude or ChatGPT: run commands, edit and search files.
Shared work memory for Claude Code, Codex, Cursor and chat, scoped to each repository.
Claude Code / MCP skills for the dev pipeline: discover, spec, design, build, ship, operate.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude to create, manage, and clean up git worktrees automatically, including dependency installation and GitHub PR creation.5MIT
- FlicenseNot gradedqualityDmaintenanceEnables Claude to delegate coding tasks to a worker CLI, handling actual code modifications and command execution while Claude supervises and verifies results.-
- AlicenseNot gradedqualityCmaintenanceTurns Claude Code into an engineering project manager by orchestrating feature development with isolated Git worktrees, structured task validation, and approval-gated integration.1MIT
- AlicenseNot gradedqualityFmaintenanceEnables Codex to delegate bounded engineering jobs to Claude Code CLI in isolated Git worktrees with strict security and allowance pacing.MIT