Harbor MCP
What is Harbor?
Harbor is a single-operator Kanban that stays on localhost. Use the web UI to manage projects and issues, or drive the same board from any MCP client (Claude, Cursor, and others) through a stdio MCP server that talks to the Nest API.
MCP client ──stdio──► Harbor MCP ──HTTP Bearer──► Nest API ──► Postgres
Browser ─────────────────────────► Harbor UI ──/api──► Nest APIPackage | Path | Role |
|
| NestJS + Prisma + OpenAPI |
|
| Harbor UI (Vite + React) |
|
| Stdio MCP server |
What you can do
Projects & boards — multiple projects, Columns and List layouts, column colors, reorder, done columns
Issues — create, edit, move, archive/restore, delete; priority, type, due date, effort (hours / LOC)
Dependencies — issue links (
blocks,relates_to,duplicates) with cycle checks; blocker summaries via MCPLabels, comments, activity — label attach/detach, threaded comments, activity history
Attachments — multipart file upload in the issue drawer (UI/API; max 20 MB)
Live updates — board refreshes over SSE when the API or an MCP agent changes data
Global search —
Ctrl/Cmd+Kacross projectsMCP tools — projects, columns, issues, links, blockers, epics, labels, comments, activity
Auth — first-run admin signup, cookie sessions for the UI, Bearer MCP tokens from Harbor
Quick start
Requirements: Bun 1.3+, Docker
git clone git@github.com:Eidantz/Harbor.git
cd Harbor
bun install
bun run setup:env # copies .env.example → .env and links apps/api/.env
bun run docker:up # builds & starts db + api + webService | URL (defaults) |
Harbor UI | |
API health | |
OpenAPI |
Ports come from .env (WEB_PORT, API_PORT, POSTGRES_PORT). Defaults are 3010 / 3001 / 5433 so Harbor can sit next to stacks that already use 3000 / 5432 (e.g. Langfuse).
On a fresh database, open the UI and create the admin account. After that, the same screen is sign-in. Seed data includes sample project KAN.
Stop the stack with bun run docker:down.
MCP
Harbor exposes a stdio MCP server any compatible client can launch (Claude Desktop / Claude Code, Cursor, and others).
Start Harbor (
bun run docker:up) and complete admin signup.In the UI: MCP tokens → Create token (copy it once).
Build the server:
bun run build:mcpPoint your client at the server with the same command + env:
{
"mcpServers": {
"harbor": {
"command": "node",
"args": ["/absolute/path/to/Harbor/apps/mcp/dist/index.js"],
"env": {
"KANBAN_API_URL": "http://127.0.0.1:3001",
"KANBAN_API_TOKEN": "<paste token from Harbor>"
}
}
}
}Client | Where to put the config |
Claude Desktop | Claude → Settings → Developer → Edit Config ( |
Claude Code | Project or user |
Cursor | Copy |
Use an absolute path to apps/mcp/dist/index.js when the client does not start in the repo root. Reload MCP after changing config.
Full tool catalog: apps/mcp/README.md.
Development
Keep Postgres in Docker; run API and web on the host:
bun run setup:env
docker compose up -d db
bun run db:migrate:deploy
bun run db:seed
bun run dev # API :3001 + web :3000Useful scripts: bun run dev:api, bun run dev:web, bun run db:studio, bun run smoke.
Auth & privacy
Client | Mechanism |
Harbor UI | First-run signup, then login → HTTP-only session cookie |
MCP / scripts |
|
Compose publishes ports on
127.0.0.1only.Real secrets live in
.envand local MCP config files (e.g..cursor/) — gitignored. Use.env.exampleanddocs/mcp.example.jsonas templates.Rotate
SESSION_SECRETand revoke MCP tokens for anything beyond casual local use.
License
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Eidantz/Harbor'
If you have feedback or need assistance with the MCP directory API, please join our Discord server