Skip to main content

plane-project-mcp

An MCP server for Plane — the open-source project management tool. Point it at your own Plane workspace (cloud or self-hosted) and let any MCP-compatible client (Claude Desktop, Cursor, etc.) list, create, and update your projects, issues, cycles, modules, labels, states, comments, pages, views, and more.

No fleet, no broker, no proxy — you run it, you hold your own Plane API token, it talks straight to the Plane REST API.

Install

Pick one:

# Run without installing (recommended for MCP client use)
uvx plane-project-mcp

# or
pipx run plane-project-mcp

# or install into your environment
pip install plane-project-mcp

Configuration

Self-hosted Plane users MUST set PLANE_API_URL to their instance (e.g. https://plane.yourcompany.com). It defaults to https://api.plane.so (Plane Cloud), so if you don't set it, the server talks to Plane Cloud rather than your own deployment.

Everything is configured via environment variables — there is no config file.

Variable Required Default Description
PLANE_API_KEY yes Your Plane API token
PLANE_API_URL no https://api.plane.so Plane API base URL — point this at your self-hosted instance
PLANE_WORKSPACE_SLUG no Default workspace slug (used by list_workspaces when no slug is passed)
PLANE_MCP_ENABLED_TOOLS no (all tools enabled) Comma-separated allowlist of tool names to expose
PLANE_MCP_HTTP no 0 Set to 1 to run as an HTTP/SSE service instead of stdio
PLANE_MCP_HOST no 127.0.0.1 Bind host in HTTP mode
PLANE_MCP_PORT no 8000 Bind port in HTTP mode

If PLANE_API_KEY is missing, the server fails immediately with a clear error instead of starting half-configured.

Getting a Plane API token

In Plane, go to Workspace Settings -> API Tokens -> Add API token, give it a name, and copy the value. Treat it like a password — anyone holding it can act as your workspace via this server's tools.

Using it with an MCP client

plane-project-mcp speaks stdio by default, which is the transport MCP clients launch as a subprocess.

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "plane": {
      "command": "uvx",
      "args": ["plane-project-mcp"],
      "env": {
        "PLANE_API_KEY": "your-plane-api-token",
        "PLANE_WORKSPACE_SLUG": "your-workspace-slug"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "plane": {
      "command": "uvx",
      "args": ["plane-project-mcp"],
      "env": {
        "PLANE_API_KEY": "your-plane-api-token",
        "PLANE_WORKSPACE_SLUG": "your-workspace-slug"
      }
    }
  }
}

Generic .mcp.json

Most MCP-capable clients accept the same stdio shape:

{
  "mcpServers": {
    "plane": {
      "command": "python",
      "args": ["-m", "plane_mcp.server"],
      "env": {
        "PLANE_API_KEY": "your-plane-api-token",
        "PLANE_API_URL": "https://api.plane.so",
        "PLANE_WORKSPACE_SLUG": "your-workspace-slug"
      }
    }
  }
}

Swap command/args for pip install plane-project-mcp + ["-m", "plane_mcp.server"], or uvx/pipx run + ["plane-project-mcp"] — whichever fits how you installed it.

Self-hosting as an HTTP/SSE service

If you'd rather run plane-project-mcp as a long-lived service (e.g. behind a reverse proxy) instead of launching it per-client, use --http:

pip install 'plane-project-mcp[http]'
PLANE_API_KEY=... plane-project-mcp --http --host 0.0.0.0 --port 8000

This serves an SSE endpoint at /sse (and /messages/ for posting client messages), which any MCP client with SSE transport support can connect to.

Docker

docker build -t plane-project-mcp .
docker run --rm -e PLANE_API_KEY=your-plane-api-token -p 8000:8000 plane-project-mcp

Or with Compose:

cp .env.example .env   # fill in PLANE_API_KEY
docker compose up

The bundled docker-compose.yml runs plane-project-mcp --http on port 8000.

Available tools

plane-project-mcp covers the Plane REST API surface: workspaces, projects, project members, issues (create/read/update/delete, comments, attachments, links, relations, sub-issues, activity), labels, states, cycles (+ cycle-issue membership, transfers), modules (+ module-issue membership), pages, project views, workspace views, intake/inbox issues, estimates, and webhooks.

By default every tool is enabled. To restrict a deployment to a subset (e.g. read-only, or issues-only), set PLANE_MCP_ENABLED_TOOLS to a comma-separated list of tool names, for example:

export PLANE_MCP_ENABLED_TOOLS=list_projects,list_issues,get_issue,create_issue,update_issue

Destructive operations (delete_*, remove_*) always require an explicit confirm: true argument alongside the exact target ID — there is no "delete everything" shortcut.

Development

git clone https://github.com/Etumos/plane-project-mcp
cd plane-project-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,http]"
python -m pytest

Smoke-test the server locally (uses a dummy token, makes no network calls):

PLANE_API_KEY=dummy python -m plane_mcp.server --help

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plane_project_mcp-0.1.1.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

plane_project_mcp-0.1.1-py3-none-any.whl (18.9 kB view details)

Uploaded Python 3

File details

Details for the file plane_project_mcp-0.1.1.tar.gz.

File metadata

  • Download URL: plane_project_mcp-0.1.1.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.2

File hashes

Hashes for plane_project_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 0321041ba736d6b7ed215e5e8e320f6a669df2132adbf02bc6f411cb1e0cc3b4
MD5 9b15891b9d3cfd601579826f1fffb106
BLAKE2b-256 0019bfbb26ea95236e63d8d33baeac9063466cba2575cb2e6962419b1e2dd39e

See more details on using hashes here.

File details

Details for the file plane_project_mcp-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for plane_project_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1b13ff041faed8d3e9da0a0c94b50c8fc52dd93fdb144511f453b5339df7b82a
MD5 1eb4f3a31a3a9d67632d3e48fe78bf80
BLAKE2b-256 426e4d310a4f853a8e4b7479fb0855e4d6561a79f80354d587ca24aba05fa2ed

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page