
Product
Introducing Repository Access Permissions and Custom Roles
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.
mcp-vibekanban
Advanced tools
Enhanced MCP server for Vibe Kanban โ simplified tools with env-based project/repo locking, real-time WebSocket streaming & session messaging
The MCP bridge between your AI coding assistant and Vibe Kanban. Create tasks, launch workspace sessions, and message coding agents โ all without leaving your editor.
โก Get Started โข ๐ฏ Why mcp-vibekanban โข ๐ฎ Tools โข โ๏ธ Configuration โข ๐ Workflows
mcp-vibekanban is the project management backbone for your AI coding assistant. Instead of alt-tabbing to a Kanban board, your AI creates tasks, launches coding agent sessions, and sends follow-up messages โ all through MCP. Project and repo IDs are locked via environment variables, so every tool call is clean and minimal.
๐Task ManagementCreate, list, update, delete |
๐Workspace SessionsLaunch any coding agent |
๐ฌSession MessagingFollow-up + auto-queue |
๐Env-Locked IDsNo ID juggling per call |
Here's how it works:
The official Vibe Kanban MCP requires passing project_id and repo_id in every call. mcp-vibekanban locks those via env vars and adds session messaging.
| โ Old Way (Official MCP) | โ New Way (mcp-vibekanban) |
|
|
You need Vibe Kanban running (the upstream project):
npx vibe-kanban # default port 9119
# or: PORT=1990 npx vibe-kanban
| Client | Config File | Docs |
|---|---|---|
| ๐ฅ๏ธ Claude Desktop | claude_desktop_config.json | Setup |
| โจ๏ธ Claude Code | CLI or ~/.claude.json | Setup |
| ๐ฏ Cursor / ๐ Windsurf | .cursor/mcp.json | Setup |
Quick install:
npx install-mcp mcp-vibekanban --client claude-desktop \
--env VKB_API_URL=https://your-vibekanban-instance.com \
--env VKB_PROJECT_SLUG=your-project \
--env VKB_REPOSITORY_SLUG=your-repo
Manual config โ add to claude_desktop_config.json:
{
"mcpServers": {
"vibekanban": {
"command": "npx",
"args": ["-y", "mcp-vibekanban"],
"env": {
"VKB_API_URL": "https://your-vibekanban-instance.com",
"VKB_PROJECT_SLUG": "your-project",
"VKB_REPOSITORY_SLUG": "your-repo"
}
}
}
}
claude mcp add vibekanban npx \
--scope user \
--env VKB_API_URL=https://your-vibekanban-instance.com \
--env VKB_PROJECT_SLUG=your-project \
--env VKB_REPOSITORY_SLUG=your-repo \
-- -y mcp-vibekanban
Or manually add to ~/.claude.json:
{
"mcpServers": {
"vibekanban": {
"command": "npx",
"args": ["-y", "mcp-vibekanban"],
"env": {
"VKB_API_URL": "https://your-vibekanban-instance.com",
"VKB_PROJECT_SLUG": "your-project",
"VKB_REPOSITORY_SLUG": "your-repo"
}
}
}
}
Add to .cursor/mcp.json (or equivalent):
{
"mcpServers": {
"vibekanban": {
"command": "npx",
"args": ["-y", "mcp-vibekanban"],
"env": {
"VKB_API_URL": "https://your-vibekanban-instance.com",
"VKB_PROJECT_SLUG": "your-project",
"VKB_REPOSITORY_SLUG": "your-repo"
}
}
}
}
Backward Compatibility: The old package name
vibe-kanban-better-mcpstill works as a binary alias. Existing configs don't need updating.
Vibe Kanban supports three transport modes:
| Mode | Use Case | How to Start |
|---|---|---|
| STDIO (default) | Claude Desktop, Cursor, Windsurf | npx mcp-vibekanban |
| HTTP Streamable | Self-hosted, Docker, LAN sharing | MCP_TRANSPORT=http npx mcp-vibekanban |
| Cloudflare Workers | Serverless, globally distributed | Already deployed โ |
A remote MCP endpoint is deployed and ready to use:
https://mcp-vibekanban.seodoold.workers.dev/mcp
Connect from any MCP client that supports HTTP Streamable transport:
{
"mcpServers": {
"vibekanban-remote": {
"type": "streamable-http",
"url": "https://mcp-vibekanban.seodoold.workers.dev/mcp"
}
}
}
# Start on default port 3001
MCP_TRANSPORT=http npx mcp-vibekanban
# Custom port
MCP_TRANSPORT=http MCP_PORT=8080 npx mcp-vibekanban
{
"mcpServers": {
"vibekanban-http": {
"type": "streamable-http",
"url": "http://localhost:3001/mcp"
}
}
}
mcp-vibekanban exposes 12 MCP tools across three categories:
๐get_contextWorkspace info |
๐list_tasksFilter & browse |
โcreate_taskNew task |
๐get_taskFull details |
โ๏ธupdate_taskEdit & transition |
๐๏ธdelete_taskRemove task |
๐start_workspace_sessionLaunch agent |
๐list_sessionsAll sessions |
๐get_sessionSession info |
๐ฌsend_messageFollow-up |
๐คget_queue_statusPending check |
๐ซcancel_queueClear queue |
get_contextGet current workspace context โ project, active task, and workspace info.
| Parameter | Type | Required | Description |
|---|---|---|---|
| (none) | โ | โ | No parameters needed |
get_context()
list_tasksList tasks in the project, optionally filtered by status.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
status | string | No | all | todo ยท inprogress ยท inreview ยท done ยท cancelled |
limit | number | No | 50 | Max results (1โ100) |
list_tasks(status="inprogress", limit=10)
create_taskCreate a new task. Supports @tag expansion in descriptions.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Task title (1โ500 chars) |
description | string | No | Details, supports @tag expansion |
create_task(title="Add user auth", description="Implement OAuth with @google-auth")
get_taskGet full task details by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id | string (UUID) | Yes | Task UUID |
get_task(task_id="abc123...")
update_taskUpdate task title, description, or status. At least one field required.
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id | string (UUID) | Yes | Task UUID |
title | string | No | New title |
description | string | No | New description |
status | string | No | todo ยท inprogress ยท inreview ยท done ยท cancelled |
update_task(task_id="abc123...", status="done")
delete_taskPermanently delete a task. Cannot be undone.
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id | string (UUID) | Yes | Task UUID |
delete_task(task_id="abc123...")
start_workspace_sessionLaunch a coding agent session for a task. Creates workspace + session.
| Parameter | Type | Required | Description |
|---|---|---|---|
task_id | string (UUID) | Yes | Task UUID |
executor | string | Yes | claude_code ยท amp ยท gemini ยท codex ยท opencode ยท cursor ยท qwen_code ยท copilot ยท droid |
variant | string | No | e.g., PLAN, IMPLEMENT |
base_branch | string | No | Branch to work from (default: main) |
start_workspace_session(task_id="abc123...", executor="claude_code")
list_sessionsList all sessions for a workspace.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace_id | string (UUID) | Yes | Workspace UUID |
list_sessions(workspace_id="xyz789...")
get_sessionGet session details including assigned executor.
| Parameter | Type | Required | Description |
|---|---|---|---|
session_id | string (UUID) | Yes | Session UUID |
get_session(session_id="sess123...")
send_messageSend a follow-up message to an active coding agent session. Auto-queues if the executor is busy.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
session_id | string (UUID) | Yes | โ | Session UUID |
prompt | string | Yes | โ | Message to send |
executor | string | No | auto | Auto-detected from session |
variant | string | No | โ | e.g., PLAN |
auto_queue | boolean | No | true | Queue message if executor is busy |
send_message(session_id="sess123...", prompt="Add error handling for edge cases")
get_queue_statusCheck if a message is queued for a session.
| Parameter | Type | Required | Description |
|---|---|---|---|
session_id | string (UUID) | Yes | Session UUID |
get_queue_status(session_id="sess123...")
cancel_queueCancel a pending queued message.
| Parameter | Type | Required | Description |
|---|---|---|---|
session_id | string (UUID) | Yes | Session UUID |
cancel_queue(session_id="sess123...")
| Variable | Required | Default | Description |
|---|---|---|---|
VKB_API_URL | โ Yes | โ | Vibe Kanban instance URL (e.g., https://your-instance.com) |
VKB_PROJECT_SLUG | โ Yes | โ | Project slug or UUID โ locked for all tool calls |
VKB_REPOSITORY_SLUG | โ Yes | โ | Repository slug or UUID โ locked for all tool calls |
All three variables are required and lock the project/repository context so you never need to pass IDs in individual tool calls.
The most common pattern: create a task, start a session, and iterate with follow-ups.
1. create_task(title="Add OAuth login")
โ Returns task_id
2. start_workspace_session(task_id="...", executor="claude_code")
โ Returns workspace_id
3. list_sessions(workspace_id="...")
โ Returns session_id
4. send_message(session_id="...", prompt="Add Google as a provider")
โ Sent (or auto-queued if busy)
5. get_queue_status(session_id="...")
โ Check pending messages
Review existing tasks and move them through your pipeline.
1. list_tasks(status="todo")
โ See all pending work
2. get_task(task_id="...")
โ Read full details
3. update_task(task_id="...", status="inprogress")
โ Move to active
4. start_workspace_session(task_id="...", executor="amp")
โ Hand off to a coding agent
Run different agents on different tasks simultaneously.
1. create_task(title="Refactor auth module")
2. create_task(title="Write API tests")
3. create_task(title="Update migration guide")
4. start_workspace_session(task_id="task1", executor="claude_code")
5. start_workspace_session(task_id="task2", executor="gemini")
6. start_workspace_session(task_id="task3", executor="copilot")
git clone https://github.com/yigitkonur/mcp-vibekanban.git
cd mcp-vibekanban
npm install
npm run dev # Run with tsx (hot reload)
npm run build # Compile TypeScript
npm start # Run compiled output
src/
โโโ index.ts # Server entry point
โโโ config.ts # Env var loader & validation
โโโ tools/
โ โโโ index.ts # All 12 tool definitions
โโโ api/ # Vibe Kanban HTTP client
โโโ resources.ts # MCP resource handlers
โโโ tasks.ts # Task primitive integration
โโโ utils/ # Formatter & progress helpers
| Problem | Solution |
|---|---|
| Server exits with "VKB_PROJECT_SLUG is required" | Set all three required env vars: VKB_API_URL, VKB_PROJECT_SLUG, VKB_REPOSITORY_SLUG. |
| Connection refused / ECONNREFUSED | Make sure your Vibe Kanban instance is running and VKB_API_URL is correct. |
| EHOSTUNREACH on Apple Silicon | The HTTP client uses curl subprocess to work around ARM64 macOS network issues with Node.js native clients. Ensure curl is available. |
| "Unknown tool" error | Verify you're on the latest version: npx mcp-vibekanban@latest. |
| Send message returns "executor busy" | This is normal. With auto_queue: true (default), the message is automatically queued and will execute when the current process completes. |
| Task ID format error | All IDs must be valid UUIDs (e.g., 123e4567-e89b-12d3-a456-426614174000). |
| Old binary name still works? | Yes โ vibe-kanban-better-mcp and vkb-mcp are kept as binary aliases for backward compatibility. |
MIT ยฉ Yiฤit Konur
FAQs
Enhanced MCP server for Vibe Kanban โ simplified tools with env-based project/repo locking, real-time WebSocket streaming & session messaging
We found that mcp-vibekanban demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.ย It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.

Product
Socket MCP now lets AI assistants review org alerts, investigate threats using the Socket threat feed, and inspect package files in addition to dependency scoring.

Product
Socket Firewall blocks malicious VS Code and Open VSX extensions before install, protecting developers from compromised editor marketplaces.