Plane
公式Planeの公式MCPサーバーは、Plane APIとの統合を提供し、Planeプロジェクト、作業アイテム、サイクルなどの完全なAI自動化を可能にします。
Plane MCPで何ができますか?
- 作業項目を作成 — アシスタントにプロジェクト内の作業項目を作成してもらい、名前やその他の詳細を
workitemツールで指定します。 - PQLで作業項目をクエリ — Plane Query Languageを使用して、状態、優先度、または担当者でフィルタリングした作業項目を一覧表示またはカウントします(例:)。
- サイクルを管理 — プロジェクト内のサイクルをアーカイブまたは更新します(例:
cycle(action="archive", project_id=..., cycle_id=...))。 - PQL構文リファレンスにアクセス —
get_pql_referenceツールをリクエストして、完全なPQL構文、演算子、および実例を取得します。
ドキュメント
Plane MCP サーバー
Plane 用の Model Context Protocol サーバーです。AIエージェントに、プロジェクト、ワークアイテム、サイクル、モジュール、リリース、顧客などを読み取り・管理するためのツールを提供します。
FastMCP と公式の plane-sdk 上に構築されています。
- 30のツール、Planeリソースごとに1つ、207の操作をカバー
- ローカルまたはリモート — stdio、ストリーミングHTTP、SSE
- OAuthまたはAPIキー認証
クイックスタート
PlaneからAPIキーを取得: ワークスペース設定 → APIトークン。
これをMCPクライアントの設定に追加します:
{
"mcpServers": {
"plane": {
"command": "uvx",
"args": ["plane-mcp-server", "stdio"],
"env": {
"PLANE_API_KEY": "<your-api-key>",
"PLANE_WORKSPACE_SLUG": "<your-workspace-slug>"
}
}
}
}
uvx はインストール手順は不要です。Python 3.10以上が必要です。
セルフホスト型Planeの場合は、"PLANE_BASE_URL": "https://plane.example.com" を追加してください。
トランスポート
stdio — ローカル
MCPクライアントのサブプロセスとして実行されます。設定は上記のとおりです。PLANE_API_KEY と PLANE_WORKSPACE_SLUG が必要です。
PLANE_API_KEY=... PLANE_WORKSPACE_SLUG=... uvx plane-mcp-server stdio
OAuthを使用したHTTP — ホスト型
https://mcp.plane.so/http/mcp
OAuthフローは接続時に処理されます。設定に資格情報は不要です。ネイティブのリモートMCPサポートがないクライアントの場合は、mcp-remote でブリッジします:
{
"mcpServers": {
"plane": {
"command": "npx",
"args": ["mcp-remote@latest", "https://mcp.plane.so/http/mcp"]
}
}
}
Node.js 22以上が必要です。
個人アクセストークンを使用したHTTP — ホスト型
https://mcp.plane.so/http/api-key/mcp
| ヘッダー | 値 |
|---|---|
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 — 非推奨
https://mcp.plane.so/sse は後方互換性のためだけに維持されています。代わりにHTTPトランスポートを使用してください。
ツール
サーバーは30のツールを提供します。リソースごとに1つです。各ツールは操作を選択する action パラメータを受け取ります:
workitem(action="create", project_id=..., name="Fix login")
workitem(action="list", project_id=..., pql='state__group = "started"')
cycle(action="archive", project_id=..., cycle_id=...)
各ツールの説明には、必須パラメータとオプションパラメータを含むアクションがリストされているため、カタログは呼び出し時に自己文書化されます。
ワークアイテムのクエリ
リスト、カウント、検索は、Planeのクエリ言語である PQL を受け入れます:
workitem(action="list", project_id=..., pql='state__group = "started" AND priority = "urgent"')
workitem(action="count", pql='assignees__id = "<member id>"', group_by="state_id")
完全な構文、演算子、実例については get_pql_reference を呼び出してください。
操作ごとのツールからのアップグレード
以前のリリースでは、API操作ごとに1つのツールが公開されていました。既存の統合は引き続き機能します: 177の名前のうち169は統合ツールに解決されるため、create_work_item または list_cycles を呼び出す保存済みプロンプトやスクリプトは変更不要です。これらはもはや公開されず、出荷時のパラメータ名を保持します(work_item_id であり、workitem_id ではありません)。
7つの名前はパラメータ(manage_project_archive(archive=False))を持つ2つの操作の間で選択されていましたが、これは1つのツールとアクションのペアでは再現できません。呼び出すと置き換え先が通知されます。get_pql_reference は変更されていません。
設定
認証
| 変数 | 必須 | 目的 |
|---|---|---|
PLANE_API_KEY | stdio | APIキー |
PLANE_WORKSPACE_SLUG | stdio | 対象ワークスペース |
PLANE_BASE_URL | オプション | Plane API URL(デフォルト https://api.plane.so) |
リモートトランスポートは接続内で資格情報を運びます — OAuthフローまたはPATヘッダー — これらのいずれも必要ありません。
サーバー自体をセルフホストする場合:
| 変数 | 目的 |
|---|---|
PLANE_INTERNAL_BASE_URL | サーバー間呼び出し用の内部URL。PLANE_BASE_URL より優先 |
REDIS_URL | OAuthトークンストレージを1つの接続URLとして(redis:// または TLS用の rediss://)。ホスト/ポートより優先 |
REDIS_HOST / REDIS_PORT | OAuthトークンストレージ。インメモリにフォールバック |
PLANE_OAUTH_PROVIDER_* | OAuthクライアント資格情報とベースURL |
MCP_PATH_PREFIX | プロキシの背後にマウントする場合のHTTPルートのパスプレフィックス — /plane は /plane/http/mcp を提供 |
OAuthリダイレクトURI
OAuthトランスポートは、各クライアントのリダイレクトURIを許可リストに対して検証します。一般的なクライアント(Cursor、VS Code、Claude.ai、ChatGPTコネクタ、localhost)はデフォルトで許可されています。
リリースなしで新しいクライアントをオンボードするには、パターンを追加します:
export PLANE_OAUTH_ALLOWED_REDIRECT_URIS="https://newclient.com/cb,https://other.app/oauth/*"
* は任意のポート、パスセグメント、サブドメインに一致します。ホストは固定し、ポートまたはパスのみをワイルドカードにしてください。
ロギング
構造化JSON。各ツール呼び出しは、名前、期間、ステータス、および利用可能な場合は不透明なユーザーIDとワークスペーススラッグをログに記録します。
export LOG_USER_INFO=false # also log the display name (PII);
export LOG_PAYLOADS=false # keep request payloads out of logs; default true
表示名を運ぶのはOAuthおよびPATトランスポートのみです。stdioは影響を受けません。
開発
git clone https://github.com/makeplane/plane-mcp-server
cd plane-mcp-server
uv pip install -e ".[dev]"
ワークスペースに対してサーバーを実行:
PLANE_API_KEY=... PLANE_WORKSPACE_SLUG=... python -m plane_mcp stdio
python -m plane_mcp http # port 8211
テスト、フォーマット、リント:
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
スイートは完全にオフラインで実行されます — すべてのリソースのすべてのアクションが、各呼び出しを本物の plane-sdk シグネチャにバインドするスタンドインに対して実行されます。plane_mcp/tools/README.md を参照してください。
ライブ統合テストは、実行中のサーバーを指定しない限りスキップされます:
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
それらはそのワークスペースに実際のデータを書き込みます。
リポジトリ構成
| パス | 内容 |
|---|---|
plane_mcp/__main__.py | エントリポイント。argv[1] からトランスポートを選択 |
plane_mcp/server.py | トランスポートごとに1つのファクトリ |
plane_mcp/client.py | 資格情報を plane-sdk クライアントに解決 |
plane_mcp/auth/ | OAuthプロバイダーとヘッダー認証 |
plane_mcp/tools/ | ツールサーフェス: Planeリソースごとに1つのモジュール |
plane_mcp/toolkit/ | ツールサーフェス用の共有ビルディングブロック |
plane_mcp/pql_reference.py | モデルに提供されるPQL構文リファレンス |
貢献
プルリクエスト歓迎します。提出前に pytest と ruff check を実行してください。新しいツールには、plane_mcp/tools/README.md に記載されている不変条件を含める必要があります。
CONTRIBUTING.md と CODE_OF_CONDUCT.md を参照してください。
Node.jsサーバーからの移行
@makeplane/plane-mcp-server (Node.js) は非推奨でメンテナンスされていません。このPython実装が置き換えます。
| Node.js | Python |
|---|---|
PLANE_API_KEY | PLANE_API_KEY |
PLANE_API_HOST_URL | PLANE_BASE_URL |
PLANE_WORKSPACE_SLUG | PLANE_WORKSPACE_SLUG |
command と args を クイックスタート のstdio設定に置き換えてください。
ライセンス
MIT — LICENSE を参照してください。