Plane
offiziellDer offizielle Plane MCP Server bietet Integration mit Plane APIs und ermöglicht vollständige KI-Automatisierung von Plane-Projekten, Arbeitselementen, Zyklen und mehr.
Was kann man mit Plane MCP machen?
- Arbeitsgegenstände erstellen und aktualisieren — Bitten Sie Ihren Assistenten, einen Arbeitsgegenstand wie „Login reparieren“ zu erstellen oder dessen Status, Priorität oder Bearbeiter über das
workitem-Tool zu aktualisieren. - Arbeitsgegenstände mit PQL abfragen — Verwenden Sie die Abfragesprache von Plane, um Arbeitsgegenstände nach Filtern wie
state__group = "started" AND priority = "urgent"aufzulisten, zu zählen oder zu durchsuchen. - Zyklen und Module verwalten — Archivieren Sie Zyklen, listen Sie Projektzyklen auf oder führen Sie andere Zyklus-/Moduloperationen über die konsolidierten Ressourcen-Tools durch.
- Anhänge von URLs verarbeiten — Lösen Sie Anhang-Uploads von externen URLs aus, mit Proxy-Unterstützung für SSRF-Kontrolle über
upload_from_url. - PQL-Syntaxreferenz abrufen — Fragen Sie nach der vollständigen PQL-Syntax, Operatoren und praktischen Beispielen, indem Sie
get_pql_referenceaufrufen.
Dokumentation
Plane MCP Server
Ein Model Context Protocol-Server für Plane. Gibt einem KI-Agenten Werkzeuge zum Lesen und Verwalten von Projekten, Arbeitselementen, Zyklen, Modulen, Releases, Kunden und mehr.
Basiert auf FastMCP und dem offiziellen
plane-sdk.
- 30 Werkzeuge, eines pro Plane-Ressource, die 207 Operationen abdecken
- Lokal oder remote — stdio, streamable HTTP, SSE
- OAuth- oder API-Key-Authentifizierung
Schnellstart
Holen Sie sich einen API-Key von Plane: Workspace-Einstellungen → API-Tokens.
Fügen Sie dies zur Konfiguration Ihres MCP-Clients hinzu:
{
"mcpServers": {
"plane": {
"command": "uvx",
"args": ["plane-mcp-server", "stdio"],
"env": {
"PLANE_API_KEY": "<your-api-key>",
"PLANE_WORKSPACE_SLUG": "<your-workspace-slug>"
}
}
}
}
uvx benötigt keinen Installationsschritt. Erfordert Python 3.10+.
Für ein selbst gehostetes Plane fügen Sie "PLANE_BASE_URL": "https://plane.example.com" hinzu.
Transporte
stdio — lokal
Läuft als Unterprozess Ihres MCP-Clients. Konfiguration wie oben gezeigt; benötigt
PLANE_API_KEY und PLANE_WORKSPACE_SLUG.
PLANE_API_KEY=... PLANE_WORKSPACE_SLUG=... uvx plane-mcp-server stdio
HTTP mit OAuth — gehostet
https://mcp.plane.so/http/mcp
Der OAuth-Ablauf wird beim Verbinden abgewickelt; keine Anmeldedaten in Ihrer Konfiguration. Für Clients
ohne native Remote-MCP-Unterstützung überbrücken Sie mit mcp-remote:
{
"mcpServers": {
"plane": {
"command": "npx",
"args": ["mcp-remote@latest", "https://mcp.plane.so/http/mcp"]
}
}
}
Erfordert Node.js 22+.
HTTP mit persönlichem Zugriffstoken — gehostet
https://mcp.plane.so/http/api-key/mcp
| Header | Wert |
|---|---|
Authorization | Bearer <PAT> |
X-Workspace-slug | <workspace-slug> |
{
"mcpServers": {
"plane": {
"command": "npx",
"args": ["mcp-remote@latest", "https://mcp.plane.so/http/api-key/mcp"],
"headers": {
"Authorization": "Bearer <PAT>",
"X-Workspace-slug": "<workspace-slug>"
}
}
}
}
SSE — veraltet
https://mcp.plane.so/sse wird nur aus Gründen der Abwärtskompatibilität gepflegt. Verwenden Sie stattdessen einen
HTTP-Transport.
Werkzeuge
Der Server bietet 30 Werkzeuge an, eines pro Ressource. Jedes nimmt einen action-
Parameter an, der die Operation auswählt:
workitem(action="create", project_id=..., name="Fix login")
workitem(action="list", project_id=..., pql='state__group = "started"')
cycle(action="archive", project_id=..., cycle_id=...)
Die Beschreibung jedes Werkzeugs listet seine Aktionen mit ihren erforderlichen und optionalen Parametern auf, sodass der Katalog zur Aufrufzeit selbstdokumentierend ist.
→ Vollständige Werkzeug- und Aktionsreferenz
Abfragen von Arbeitselementen
Liste, Anzahl und Suche akzeptieren PQL, die Abfragesprache von Plane:
workitem(action="list", project_id=..., pql='state__group = "started" AND priority = "urgent"')
workitem(action="count", pql='assignees__id = "<member id>"', group_by="state_id")
Rufen Sie get_pql_reference für die vollständige Syntax, Operatoren und Beispiele auf.
Upgrade von den pro-Operation-Werkzeugen
Frühere Versionen stellten ein Werkzeug pro API-Operation bereit. Bestehende Integrationen funktionieren
weiterhin: 169 dieser 177 Namen lösen weiterhin auf das konsolidierte Werkzeug auf, sodass ein
gespeicherter Prompt oder ein Skript, das create_work_item oder list_cycles aufruft, keine
Änderung benötigt. Sie werden nicht mehr beworben und behalten die Parameternamen, mit denen sie
ausgeliefert wurden (work_item_id, nicht workitem_id).
Sieben Namen wählten zwischen zwei Operationen mit einem Parameter
(manage_project_archive(archive=False)), was ein Werkzeug-Aktions-Paar nicht reproduzieren kann;
der Aufruf eines davon teilt Ihnen seinen Ersatz mit. get_pql_reference ist
unverändert.
Konfiguration
Authentifizierung
| Variable | Erforderlich für | Zweck |
|---|---|---|
PLANE_API_KEY | stdio | API-Key |
PLANE_WORKSPACE_SLUG | stdio | Ziel-Workspace |
PLANE_BASE_URL | optional | Plane-API-URL (Standard https://api.plane.so) |
Die Remote-Transporte übertragen Anmeldedaten in der Verbindung — den OAuth-Ablauf oder die PAT-Header — und benötigen keine davon.
Ausgehender Proxy für Anhangs-Uploads
HTTP_PROXY / HTTPS_PROXY / NO_PROXY (und ihre Kleinschreibungsformen) werden
für den Anhang-Upload-per-URL-Abruf (upload_from_url) berücksichtigt. Wenn ein Proxy
für eine bestimmte Anfrage gilt, ist der Proxy — nicht dieser Server — die
SSRF-Kontrolle dieser Anfrage: Der Server pinnt oder validiert die aufgelöste Adresse des Ziels
nicht selbst, da der Proxy sich unabhängig mit dem Ziel verbindet und es auflöst. Begrenzen Sie
NO_PROXY und die Proxy-Egress-Richtlinie entsprechend.
Selbsthosting des Servers selbst:
| Variable | Zweck |
|---|---|
PLANE_INTERNAL_BASE_URL | Interne URL für Server-zu-Server-Aufrufe, bevorzugt gegenüber PLANE_BASE_URL |
REDIS_URL | OAuth-Tokenspeicherung als eine Verbindungs-URL (redis:// oder rediss:// für TLS); gewinnt gegenüber Host/Port |
REDIS_HOST / REDIS_PORT | OAuth-Tokenspeicherung; fällt auf In-Memory zurück |
PLANE_OAUTH_PROVIDER_* | OAuth-Client-Anmeldedaten und Basis-URL |
MCP_PATH_PREFIX | Pfadpräfix für die HTTP-Routen, wenn hinter einem Proxy bereitgestellt — /plane bedient /plane/http/mcp |
OAuth-Weiterleitungs-URIs
Die OAuth-Transporte validieren die Weiterleitungs-URI jedes Clients gegen eine Zulassungsliste. Gängige Clients (Cursor, VS Code, Claude.ai, ChatGPT-Konnektoren, localhost) sind standardmäßig erlaubt.
Um einen neuen Client ohne Release aufzunehmen, fügen Sie Muster hinzu:
export PLANE_OAUTH_ALLOWED_REDIRECT_URIS="https://newclient.com/cb,https://other.app/oauth/*"
* passt auf jeden Port, jedes Pfadsegment oder jede Subdomain. Halten Sie den Host gepinnt und
verwenden Sie Wildcards nur für Port oder Pfad.
Protokollierung
Strukturiertes JSON. Jeder Werkzeugaufruf protokolliert seinen Namen, seine Dauer, seinen Status und — wenn verfügbar — eine undurchsichtige Benutzer-ID und den Workspace-Slug.
export LOG_USER_INFO=false # also log the display name (PII);
export LOG_PAYLOADS=false # keep request payloads out of logs; default true
Nur die OAuth- und PAT-Transporte tragen einen Anzeigenamen; stdio ist nicht betroffen.
Entwicklung
git clone https://github.com/makeplane/plane-mcp-server
cd plane-mcp-server
uv pip install -e ".[dev]"
Führen Sie den Server gegen einen Workspace aus:
PLANE_API_KEY=... PLANE_WORKSPACE_SLUG=... python -m plane_mcp stdio
python -m plane_mcp http # port 8211
Tests, Formatierung, Lint:
pytest # no network or credentials needed
ruff format plane_mcp/ tests/ # line length 120
ruff check plane_mcp/ tests/ # rules E, F, I, UP, B
Die Suite läuft vollständig offline — jede Aktion jeder Ressource wird
gegen einen Stellvertreter ausgeführt, der jeden Aufruf an die echte plane-sdk-
Signatur bindet. Siehe plane_mcp/tools/README.md.
Live-Integrationstests werden übersprungen, es sei denn, Sie richten sie auf einen laufenden Server:
export PLANE_TEST_API_KEY=... PLANE_TEST_WORKSPACE_SLUG=...
export PLANE_TEST_MCP_URL=http://localhost:8211 # optional; this is the default
pytest tests/test_integration.py -v
Sie schreiben echte Daten in diesen Workspace.
Repository-Struktur
| Pfad | Inhalt |
|---|---|
plane_mcp/__main__.py | Einstiegspunkt; wählt den Transport aus argv[1] |
plane_mcp/server.py | eine Fabrik pro Transport |
plane_mcp/client.py | löst Anmeldedaten in einen plane-sdk-Client auf |
plane_mcp/auth/ | OAuth-Anbieter und Header-Authentifizierung |
plane_mcp/tools/ | die Werkzeugoberfläche: ein Modul pro Plane-Ressource |
plane_mcp/toolkit/ | gemeinsame Bausteine für die Werkzeugoberfläche |
plane_mcp/pql_reference.py | PQL-Syntaxreferenz, die Modellen bereitgestellt wird |
Mitwirken
Pull-Requests sind willkommen. Bitte führen Sie pytest und ruff check vor dem Einreichen aus; neue
Werkzeuge sollten mit den Invarianten kommen, die in
plane_mcp/tools/README.md beschrieben sind.
Siehe CONTRIBUTING.md und CODE_OF_CONDUCT.md.
Migration vom Node.js-Server
@makeplane/plane-mcp-server (Node.js) ist veraltet und wird nicht mehr gepflegt. Diese
Python-Implementierung ersetzt ihn.
| Node.js | Python |
|---|---|
PLANE_API_KEY | PLANE_API_KEY |
PLANE_API_HOST_URL | PLANE_BASE_URL |
PLANE_WORKSPACE_SLUG | PLANE_WORKSPACE_SLUG |
Ersetzen Sie die command und args durch die stdio-Konfiguration in
Schnellstart.
Lizenz
MIT — siehe LICENSE.