The MCP server.
Eleven tools, one endpoint.
Vibeflow ships a Model Context Protocol server — two ways in. Start
the local server with vibeflow kanban (or
vibeflow serve in API-only mode) and the MCP
endpoint is live at /api/mcp over the
Streamable HTTP transport; or have your client spawn
vibeflow mcp --project <dir> per
project over stdio — no port, nothing to keep running. Either way,
connect a client and your agent can list, claim and update tasks
directly.
Connect
One endpoint, loopback by default.
The server speaks the MCP Streamable HTTP transport: POST JSON-RPC
to http://localhost:3700/api/mcp, keep the
mcp-session-id the server returns from
initialize, and close the session with
DELETE. Clients are configured against the URL only — see the
MCP documentation
for your client's exact syntax.
The handshake below is enough to prove the endpoint is alive:
a correct initialize answers 200 with
a session id header and serverInfo.name:
"vibeflow".
-
Start first — no server, no endpoint.
vibeflow kanbanis the shortest path. - Loopback only — without a token, non-loopback requests are refused with 401.
- Session lifetime — idle sessions are closed after 30 minutes; a client re-initializes transparently.
stdio
Or spawn one server per project — no port at all.
Don't want a running server? Your MCP client can spawn
vibeflow mcp --project <dir>
itself: one process per project, JSON-RPC on stdin/stdout, the
same eleven tools. No port, no session lifecycle, nothing to
keep running — and the process exits when the client closes
stdin.
Add the server to your client's MCP config (Claude Desktop,
Cursor, .mcp.json — the shape is the
same everywhere) and the client owns the lifecycle:
-
--projectis required — a spawned client's cwd (often your home directory) is never trusted; the root is resolved and validated once at startup. - stdout is the protocol — the startup announcement and any refusal go to stderr, so every line on stdout is a valid JSON-RPC frame.
- Same eleven tools — stdio and HTTP mount the identical manifest; only the transport differs.
Why one server per project. The root is resolved once, at startup, and every tool call uses that one root. A server therefore has exactly one project: it cannot write into the wrong one, and there is no path to validate on every call.
Don't point one global server at every repo. A
project argument per call is deliberately
not supported — one process serves one root, resolved at startup.
Configure the server per project, with the project.
Tool reference
Eleven tools, each mirroring a command.
Every tool wraps the same operation as its CLI equivalent, so the rules your agent learns from the commands carry over unchanged.
| Tool | What it does | CLI equivalent |
|---|---|---|
list_tasks |
List tasks with filters. Roots only unless children is set; the response reports hidden children. | tasks + filters |
get_task |
Full details of one task, including comments and files. | tasks --get |
get_project |
Report the project this server is attached to: name, absolute root, git branch and mode. Read-only, takes no input. | status |
create_task |
Create a task with title, description, type, priority, tags or parent. | tasks --add |
update_task |
Edit fields, status, links and the verification verdict (pass, fail or cleared). | tasks --edit |
claim_next_task |
Claim the highest-priority root task in todo — never a child. | tasks --next |
add_comment |
Add a comment to a task. | tasks --comment |
attach_file |
Attach a file to a task (content as base64), e.g. a research report. | tasks --report-file |
export_prompt |
Export task(s) as a formatted prompt for LLM consumption. | tasks --get --json |
verify_task |
Run visual verification against the task's baseline snapshot. | verify |
push_tasks |
Push local tasks to a Vibeflow SaaS workspace. | push |
Security model
Loopback first, token if you must.
-
No token configured — the endpoint serves loopback (
127.0.0.1/::1) only; every other address gets 401. -
Token configured — requests must carry it as a Bearer token; it is read from
~/.vibeflow/auth.json. -
LAN sharing —
--host 0.0.0.0opens the board to your network, but the MCP endpoint stays closed until a token exists. - stdio transport — no listening socket at all: the pipes belong to the spawning client, so the loopback and token rules above describe the HTTP endpoint only.
- Status — the MCP server is stable and supported. It is pinned to one project root, and every refusal comes back as a code plus a recovery hint.
If something looks wrong
Common questions.
Is the MCP server stable?
Yes — the MCP server is stable. It is pinned to one project root, every refusal comes back as a code plus a recovery hint, and dryRun is a real preview: it answers with what would have happened and writes nothing.
My client gets 401 Unauthorized.
Without a token configured, the endpoint answers loopback only. A request from any other address is refused with MCP requires authentication for non-loopback connections. If you need remote access, configure an auth token in ~/.vibeflow/auth.json and send it as a Bearer token.
Do the tools behave differently from the CLI?
No — the eleven tools wrap the same operations as the commands they mirror: list_tasks returns roots only (unless you ask for children), claim_next_task never claims a child, and the review transition enforces the same report and verification gates.
Related pages
Where to go next.
- How to use Vibeflow — the three-step CLI workflow
- vibeflow tasks — the commands these tools mirror
- vibeflow kanban — the shortest path to a running endpoint
- vibeflow serve — API-only mode for existing apps
- Give your AI agent UI context — the problem this whole workflow solves
Ten seconds to your
first annotated task.
No account, no cloud, no browser extension.
Apache-2.0 · Node.js 22+ · tasks stay in your repository