Package Exports
- @zethictech/plane-mcp-server
- @zethictech/plane-mcp-server/dist/src/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@zethictech/plane-mcp-server) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Plane MCP
Connect Claude to your Plane workspace to manage projects, work items, cycles, modules, and more — directly from Claude.
Prerequisites
You need a Plane API key. To generate one:
- Go to
https://<your-plane-host>/<workspace>/settings/account/api-tokens - Click Add personal access token
- Copy the token
Setup
A single Docker container runs the Plane MCP server centrally so that team members can connect from Claude Code or Claude Desktop without installing anything locally.
How it works
Claude Code / Desktop
│
│ HTTP (Authorization: Bearer <api_key>)
▼
┌─────────────────────┐
│ Node.js Proxy :3000│ ← auth gate, header whitelist, bulk_create handler
│ │ │
│ ▼ │
│ Python MCP :8211 │ ← plane-mcp-server (upstream)
└─────────────────────┘
│
│ REST API (X-Api-Key)
▼
Plane Instance- The Node.js proxy on port 3000 is the only exposed endpoint. It enforces authentication (rejects requests without a valid
Authorization: Bearerheader), whitelists headers forwarded upstream, validates inputs, and handles thebulk_create_work_itemstool directly with rate-limit retry logic. - The Python MCP server (
plane-mcp-server) runs internally on port 8211. It implements the MCP protocol and translates tool calls into Plane REST API requests. - Each user authenticates with their own Plane API key. The proxy passes it through to both the Python server and the Plane API — no shared credentials are stored on the server.
Endpoints:
| Method | Path | Description |
|---|---|---|
POST |
/mcp |
MCP JSON-RPC endpoint |
GET |
/mcp |
SSE notification stream |
DELETE |
/mcp |
MCP session cleanup |
GET |
/health |
Health check (returns upstream status) |
Limits: Request body 1 MB, response body 5 MB, bulk create max 100 items per call.
Connect from Claude Code
claude mcp add plane-mcp --transport http \
--url https://<server-host>/mcp \
--header "Authorization: Bearer YOUR_PLANE_API_KEY"To target a specific workspace:
claude mcp add plane-mcp --transport http \
--url https://<server-host>/mcp \
--header "Authorization: Bearer YOUR_PLANE_API_KEY" \
--header "x-workspace-slug: your-workspace"Connect from Claude Desktop (HTTP transport)
Claude Desktop does not natively support HTTP transport, so we use mcp-remote as a bridge. Add to your claude_desktop_config.json:
macOS / Linux:
{
"mcpServers": {
"plane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://<server-host>/mcp",
"--header",
"Authorization: Bearer ${PLANE_API_KEY}"
],
"env": {
"PLANE_API_KEY": "YOUR_PLANE_API_KEY"
}
}
}
}Windows:
On Windows, npx often fails due to spaces in the Node.js install path (C:\Program Files\nodejs\). Install mcp-remote globally first, then reference it directly:
npm install -g mcp-remote{
"mcpServers": {
"plane": {
"command": "mcp-remote",
"args": [
"https://<server-host>/mcp",
"--header",
"Authorization: Bearer ${PLANE_API_KEY}"
],
"env": {
"PLANE_API_KEY": "YOUR_PLANE_API_KEY"
}
}
}
}Deploy the Server
# Clone and start
docker compose up -d --buildEnvironment variables:
| Variable | Default | Description |
|---|---|---|
PLANE_BASE_URL |
(required) | Your Plane instance URL |
DEFAULT_WORKSPACE_SLUG |
(empty) | Fallback when x-workspace-slug header is not sent |
PORT |
3000 |
Proxy listen port |
Health check:
curl http://localhost:3000/healthAvailable Tools
| Category | Tools |
|---|---|
| Projects | list, create, update, delete projects; get/update project features |
| Work Items | list, search, create, update, delete work items |
| Work Item Types | list, create, update, delete work item types |
| Work Item Properties | list, create, update, delete custom properties |
| States & Labels | list, create, update, delete states and labels |
| Cycles | list, create, update, delete, archive/unarchive cycles; manage cycle work items |
| Modules | list, create, update, delete, archive/unarchive modules; manage module work items |
| Epics | list, create, update, delete epics |
| Milestones | list, create, update, delete milestones; manage milestone work items |
| Initiatives | list, create, update, delete initiatives |
| Intake | list, create, update, delete intake work items |
| Comments | list, create, update, delete comments on work items |
| Relations & Links | manage work item relations and external links |
| Time Tracking | create, update, list work logs; get project worklog summary |
| Pages | create, retrieve project and workspace pages |
| Workspace | get members, get/update workspace features |
| Bulk Operations | bulk_create_work_items — create many items with automatic rate-limit handling |
License
MIT