JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 28
  • Score
    100M100P100Q83367F
  • License MIT

MCP server for Plane project management — exposes Plane API as Claude-compatible tools

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:

  1. Go to https://<your-plane-host>/<workspace>/settings/account/api-tokens
  2. Click Add personal access token
  3. 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: Bearer header), whitelists headers forwarded upstream, validates inputs, and handles the bulk_create_work_items tool 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 --build

Environment 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/health

Available 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