Skip to content
Conduit

mcp server

swarmboard

🐜 A real-time kanban board built for AI-assisted development teams. Tracks what every agent is working on, what's been completed, and what's been verified β€” so project managers always know what's hap

jomael-gemota/swarmboardcommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

Before you start

  • Node.js 20 or newer
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "jomael-gemota-swarmboard": {
      "command": "npx",
      "args": [
        "-y",
        "@swarmboard/mcp-server"
      ]
    }
  }
}

same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12

Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs

README

synced Oct 17, 2026

swarmboard

A real-time kanban board built for AI-assisted development teams. Tracks what every agent is working on, what's been completed, and what's been verified β€” so project managers always know what's happening across the codebase, without asking.


Stack

LayerTechnology
FrontendReact + Vite + TypeScript + Tailwind CSS + shadcn/ui
BackendNode.js + Express + TypeScript
DatabaseMongoDB + Mongoose
Real-timeSocket.io
Background jobsBullMQ + Redis
AuthBetter Auth
AI summarizationOpenAI (optional)
MCP integration@modelcontextprotocol/sdk

Monorepo structure

swarmboard/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ web/           # React + Vite frontend
β”‚   └── api/           # Express + Socket.io backend
β”œβ”€β”€ packages/
β”‚   β”œβ”€β”€ shared/        # Shared TypeScript types (Zod schemas)
β”‚   └── mcp-server/    # MCP server for native AI agent integration
└── pnpm-workspace.yaml

Getting started

Prerequisites

  • Node.js 20+
  • pnpm 9+
  • MongoDB (local or Atlas)
  • Redis (local or Docker)

Setup

# Install dependencies
pnpm install

# Configure environment
cp apps/api/.env.example apps/api/.env
# Edit apps/api/.env β€” set DATABASE_URL, REDIS_URL, and BETTER_AUTH_SECRET

# Build shared packages
pnpm --filter @swarmboard/shared build
pnpm --filter @swarmboard/mcp-server build

# Start everything
pnpm dev

The frontend runs on http://localhost:5173 and the API on http://localhost:3001.

Redis via Docker (quick start)

docker run -d --name swarmboard-redis -p 6379:6379 redis:alpine

Deploying to Railway

Swarmboard is configured for two-service deployment on Railway:

  • swarmboard-api β€” Express + Socket.io + BullMQ workers, built from Dockerfile.api
  • swarmboard-web β€” Vite-built React SPA served by nginx, built from Dockerfile.web

Bring your own MongoDB (Atlas works great) and add a Redis plugin in Railway.

See the full step-by-step deployment guide: RAILWAY.md.


Features

Phase 1 β€” Foundation βœ…

  • Multi-tenant workspaces with role-based access (owner / admin / member / viewer)
  • Real-time kanban board with drag-and-drop
  • Git webhook integration (GitHub & GitLab) β€” auto-update tasks from commits, PRs, and CI
  • Socket.io live updates

Phase 2 β€” Agent API βœ…

  • REST Agent API for AI agents to report status
  • MCP server for native integration with Cursor, Claude Code, Windsurf, etc.
  • Agent token management (per-developer API keys)
  • Activity log feed per task (source-labelled: agent / git / ci / system)
  • Conflict detection β€” warns when two agents touch the same module
  • claimed_complete vs verified_complete trust model

Phase 3 β€” Intelligence βœ…

  • BullMQ staleness detection β€” flags tasks inactive for 4+ hours
  • AI activity log summarization (requires OPENAI_API_KEY)
  • PM dashboard with module heatmap, conflict/stale alerts, org-wide activity feed

Agent tokens

Agent tokens let AI agents (or any automated process) authenticate against the Agent API. Each token is scoped to the user and organization that created it.

Creating a token

  1. Sign in to swarmboard
  2. Navigate to your workspace β†’ Agent Tokens
  3. Click New token, give it a name, and copy the swb_… value β€” it is only shown once

Agent integration

Option A β€” MCP Server (recommended for Cursor, Claude Code, Windsurf)

The MCP server is published to npm as @swarmboard/mcp-server. Add the following to your MCP client config (e.g. .cursor/mcp.json):

{
  "mcpServers": {
    "swarmboard": {
      "command": "npx",
      "args": ["-y", "@swarmboard/mcp-server"],
      "env": {
        "SWARMBOARD_TOKEN": "swb_your_token_here"
      }
    }
  }
}

npx -y downloads and runs the package automatically β€” no local install or path needed.
SWARMBOARD_URL is optional β€” it defaults to the hosted instance (https://swarmboardapi-production.up.railway.app). Add "SWARMBOARD_URL": "http://localhost:3001" to the env block when running the API locally.

Running locally from source (for contributors):

pnpm --filter @swarmboard/shared build
pnpm --filter @swarmboard/mcp-server build

Then use node with the local path instead of npx:

{
  "command": "node",
  "args": ["C:\\path\\to\\swarmboard\\packages\\mcp-server\\dist\\index.js"]
}

Once connected, the following tools become available to the AI agent:

ToolDescription
create_planLay out an agreed plan as tasks + subtasks (after human sign-off) β€” populates an empty board
create_taskCreate a single backlog task, optionally nested under a parent
claim_taskClaim a task when you start working on it β€” moves it to in_progress
update_taskPost a progress message to the task's activity feed
complete_subtaskLog an individual step as βœ… done or ⬜ not done
flag_blockerReport a blocker β€” moves the task to in_review
complete_taskMark the task as claimed-complete, awaiting human verification
list_board_tasksList a board's pending (backlog) tasks so the agent can pick one up β€” uses the board ID from the repo's AGENTS.md
list_my_tasksList all tasks currently assigned to you

Self-service task pickup via AGENTS.md

Each board can generate an AGENTS.md block (Board β†’ βš™ settings β†’ Agent integration) that you commit into your repo. It carries the board ID (no token β€” safe to commit) plus workflow instructions, so any agent reading it can call list_board_tasks to discover pending work and claim_task to pick one up β€” without you pasting a task ID each session. The agent token stays in your local MCP config.

Option B β€” REST API

Send the token as a Bearer header to any /api/v1/tasks/* endpoint:

# Claim a task (moves to in_progress, assigns to your token's user)
curl -X POST http://localhost:3001/api/v1/tasks/<taskId>/claim \
  -H "Authorization: Bearer swb_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "agentType": "cursor", "agentModel": "claude-opus-4.8", "files": ["apps/api/src/index.ts"] }'

# Post a progress update
curl -X POST http://localhost:3001/api/v1/tasks/<taskId>/update \
  -H "Authorization: Bearer swb_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "message": "Refactored the auth module, all tests passing" }'

# Log a subtask step
curl -X POST http://localhost:3001/api/v1/tasks/<taskId>/subtask \
  -H "Authorization: Bearer swb_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Write unit tests for login handler", "done": true }'

# Flag a blocker
curl -X POST http://localhost:3001/api/v1/tasks/<taskId>/block \
  -H "Authorization: Bearer swb_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Missing API credentials for the payment gateway" }'

# Mark task complete (claimed β€” pending human verification)
curl -X POST http://localhost:3001/api/v1/tasks/<taskId>/complete \
  -H "Authorization: Bearer swb_your_token_here" \
  -H "Content-Type: application/json" \
  -d '{ "summary": "Implemented OAuth login, added 12 tests, all passing" }'

# List your active tasks
curl http://localhost:3001/api/v1/tasks \
  -H "Authorization: Bearer swb_your_token_here"

The taskId is the MongoDB _id of the task β€” visible in the task detail panel or the board URL.

Full endpoint reference

POST /api/v1/tasks/:id/claim          β€” Start working on a task
POST /api/v1/tasks/:id/update         β€” Post a progress message
POST /api/v1/tasks/:id/subtask        β€” Log a subtask step
POST /api/v1/tasks/:id/block          β€” Flag a blocker
POST /api/v1/tasks/:id/complete       β€” Mark task complete (claimed)
GET  /api/v1/tasks                    β€” List your active tasks
GET  /api/v1/boards/:boardId/tasks    β€” List a board's tasks (default: backlog)
POST /api/v1/boards/:boardId/tasks    β€” Create a task (optional parentId for a subtask)
POST /api/v1/boards/:boardId/plan     β€” Create an agreed plan (tasks + nested subtasks)

Git webhook integration

Note: A board settings UI is not yet built. You can retrieve the webhook secret via the API directly (see below).

1. Get your board's webhook URL and secret

Open the board in swarmboard, then click the βš™ gear icon that appears next to the board name in the sidebar. The settings page shows:

  • Webhook URLs for GitHub and GitLab (pre-filled with your board ID)
  • The webhook secret (masked by default, click the eye icon to reveal)

2. Register the webhook

GitHub: Go to your repo β†’ Settings β†’ Webhooks β†’ Add webhook

  • Payload URL: http://your-swarmboard.com/webhooks/github/<boardId>
  • Content type: application/json
  • Secret: paste your webhookSecret
  • Events: Pull requests, Pushes, Check runs (or Statuses)

GitLab: Go to your repo β†’ Settings β†’ Webhooks

  • URL: http://your-swarmboard.com/webhooks/gitlab/<boardId>
  • Secret token: paste your webhookSecret
  • Triggers: Push events, Merge request events

3. Reference tasks in commits and PRs

Include a task ID anywhere in your commit message or PR title/body:

  • [TASK-<id>] β€” e.g. [TASK-abc123] fix login redirect
  • #swb-<id> β€” e.g. #swb-abc123 implement OAuth

The board will auto-update task status when:

  • A commit is pushed β†’ activity log entry added
  • A PR is opened β†’ task moves to in_review
  • A PR is merged β†’ task moves to verified
  • CI passes β†’ task marked verified (if agent already claimed complete)
  • CI fails β†’ ciStatus updated to failed
↑↓ navigate openesc close