Skip to main content

Plane MCP Server CE

MCP server for self-hosted Plane Community Edition.

  • Package: plane-community-mcp
  • Command: plane-mcp-server-ce
  • Transports: stdio and Streamable HTTP with PAT headers
  • OAuth and SSE are not supported.

Install

Python 3.10 or later is required. Package: plane-community-mcp; command: plane-mcp-server-ce.

uvx (no install; runs the latest release, or a pinned one):

uvx --from plane-community-mcp plane-mcp-server-ce --help
uvx --from plane-community-mcp==0.7.0 plane-mcp-server-ce --help

pip / pipx:

pip install plane-community-mcp
pipx install plane-community-mcp

Docker (see HTTP for run flags):

docker build -t plane-mcp-server-ce .

Verify an installation:

plane-mcp-server-ce --help          # pip/pipx
uvx --from plane-community-mcp plane-mcp-server-ce --help   # uvx

Update

How to move an existing setup to a new release.

uvx caches the resolved package; pass --refresh to pick up the new release:

uvx --refresh --from plane-community-mcp plane-mcp-server-ce --help

MCP client configs using uvx --from plane-community-mcp … keep the cache per client; add --refresh once after upgrading, or run the command above manually, then restart the client. Pinned configs (==x.y.z) must be edited to the new version.

pip / pipx:

pip install --upgrade plane-community-mcp
pipx upgrade plane-community-mcp

Docker: rebuild the image so the new version is baked in:

git pull && docker build -t plane-mcp-server-ce .

Upgrading to 0.7.0

  • Pages are served by one resource tool, page(action=...), with actions list, retrieve, create, update, archive, unarchive, delete. The previous per-operation tools (create_page, update_page, …) remain callable but no longer appear in tools/list; clients that cache tool lists should refresh them.
  • update_page now takes (page_id, project_id, name=None, description_html=None). MCP calls use named arguments and are unaffected; positional callers must switch to named arguments.
  • On CE without session credentials, page tools are hidden and direct calls fail with a clear credentials error instead of a cryptic 401/404.

Stdio

Set the Plane URL, API key, and workspace slug:

export PLANE_BASE_URL="https://plane.example.com"
export PLANE_API_KEY="your-api-key"
export PLANE_WORKSPACE_SLUG="your-workspace"
export PLANE_MCP_EDITION="community"

uvx --from plane-community-mcp plane-mcp-server-ce stdio

Example MCP configuration:

{
  "mcpServers": {
    "plane": {
      "command": "uvx",
      "args": ["--from", "plane-community-mcp", "plane-mcp-server-ce", "stdio"],
      "env": {
        "PLANE_BASE_URL": "https://plane.example.com",
        "PLANE_API_KEY": "your-api-key",
        "PLANE_WORKSPACE_SLUG": "your-workspace",
        "PLANE_MCP_EDITION": "community"
      }
    }
  }
}

HTTP

Start the server:

export PLANE_BASE_URL="https://plane.example.com"
export PLANE_MCP_EDITION="community"
uvx --from plane-community-mcp plane-mcp-server-ce http

Endpoint:

http://<host>:8211/http/api-key/mcp

Clients must send both headers:

Authorization: Bearer <api-key>
x-workspace-slug: <workspace-slug>

Example with mcp-remote:

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": [
        "mcp-remote@latest",
        "http://plane-mcp:8211/http/api-key/mcp",
        "--header", "Authorization: Bearer ${PLANE_API_KEY}",
        "--header", "x-workspace-slug: ${PLANE_WORKSPACE_SLUG}"
      ]
    }
  }
}

Docker:

docker build -t plane-mcp-server-ce .
docker run -p 8211:8211 \
  -e PLANE_BASE_URL="https://plane.example.com" \
  -e PLANE_MCP_EDITION="community" \
  plane-mcp-server-ce

Configuration

Variable Required Description
PLANE_BASE_URL Yes for self-hosted Plane Plane instance origin.
PLANE_API_KEY stdio Personal API key.
PLANE_WORKSPACE_SLUG stdio Workspace slug.
PLANE_MCP_EDITION Recommended Set to community for CE-only tool discovery.
PLANE_CE_CAPABILITIES No Comma-separated CE capability keys (e.g. pages.parent_id) enabled beyond the verified baseline.
PLANE_INTERNAL_BASE_URL No Internal Plane URL for server-to-server calls.
MCP_PATH_PREFIX No HTTP route prefix.
LOG_LEVEL No Python log level; default INFO.
LOG_USER_INFO No Set to true to include display name in logs.

Session-only CE tools

CE exposes project pages and work-item archive operations through its app API, not the public API. Enable these tools with either a session cookie or login credentials:

export PLANE_SESSION_COOKIE="<session-id-cookie>"
# Or:
export PLANE_SESSION_EMAIL="you@example.com"
export PLANE_SESSION_PASSWORD="your-password"

Without these variables, session-only tools are hidden. Prefer a session cookie over an account password. The cookie is the session-id value from an active browser session and must be replaced when it expires.

Page operations are exposed through the page(action=...) resource tool (list, retrieve, create, update, archive, unarchive, delete). The previous per-operation names below remain callable but are hidden from discovery, so existing clients keep working. update_page / page(action="update") accepts name and/or description_html; on CE they are applied through the app API's separate name and content routes, in that order. On Plane Cloud all page actions use the public SDK/API path.

Old tool Replacement
list_pages page(action="list")
retrieve_page page(action="retrieve")
create_page page(action="create")
update_page page(action="update")
update_page_content page(action="update", description_html=…)
archive_page page(action="archive")
unarchive_page page(action="unarchive")
delete_page page(action="delete")

On CE, parent_id/collection_id on page(action="create") are rejected before any write (silently ignored on every target probed so far). Set PLANE_CE_CAPABILITIES (comma-separated, e.g. pages.parent_id) to enable them on a target you have verified yourself; see CE_COMPAT.md.

CE scope

CE mode exposes supported projects, work items, cycles, modules, labels, states, comments, links, attachments, activities, and project pages. Unsupported or partial endpoints are omitted from discovery where possible. See CE_COMPAT.md for endpoint evidence and the complete matrix.

Logging

Logs are JSON. Each tool call emits one success or error event with the tool name and duration. Request payloads are not logged.

Development

uv sync --all-extras
uv run ruff check .
uv run pytest

Release

See RELEASING.md.

Contributing

See CONTRIBUTING.md.

License

MIT

Release files for plane-community-mcp 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plane-community-mcp 0.7.0
File Size Uploaded
plane_community_mcp-0.7.0.tar.gz 66.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for plane-community-mcp 0.7.0
File Interpreter ABI Platform
plane_community_mcp-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 141.9 kB

Release files / plane_community_mcp-0.7.0.tar.gz

Download URL plane_community_mcp-0.7.0.tar.gz
Size 66.9 kB
Tags Source
SHA-256 checksum
How to use checksums
37044465ee81b6ba5a1d78b7c55180722adcd16939e2cb8c0f5a76f1454acbb5
BLAKE2b-256 checksum
How to use checksums
178343e8e41b66a11a3242d739bc9d57f8c0d316599284cad365783d4ce6a042
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.

Transparency log

Release files / plane_community_mcp-0.7.0-py3-none-any.whl

Download URL plane_community_mcp-0.7.0-py3-none-any.whl
Size 75.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
86af39b3122df0a5d5ef8249126c99966257e5b057213928898a750881ebdd88
BLAKE2b-256 checksum
How to use checksums
ccd60284ae919aa2c80541f3b773aef2b812a42f6c65cfff79b089be8645b576
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 5, 2026.

Transparency log

Release history Release notifications | RSS feed

0.7.1

2 release files

This release

0.7.0 This release

2 release files

0.6.0

2 release files

0.5.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page