Plane MCP Server

官方

官方 Plane MCP 服务器提供与 Plane API 的集成,支持对 Plane 项目、工作项、周期等进行全面的 AI 自动化。

文档

Plane MCP Server

A Model Context Protocol (MCP) server for Plane integration. This server provides tools and resources for interacting with Plane through AI agents.

Features

  • 🔧 Plane Integration: Interact with Plane APIs and services
  • 🔌 Multiple Transports: Supports stdio, SSE, and streamable HTTP transports
  • 🌐 Remote & Local: Works both locally and as a remote service
  • 🛠️ Extensible: Easy to add new tools and resources

Usage

The server supports three transport methods. We recommend using uvx as it doesn't require installation.

Requirements:

  • Python 3.10+ (for stdio transport, via uvx)
  • Node.js 22+ (for remote transports, via npx)

1. Stdio Transport (for local use)

MCP Client Configuration (using uvx - recommended):

{
  "mcpServers": {
    "plane": {
      "command": "uvx",
      "args": ["plane-mcp-server", "stdio"],
      "env": {
        "PLANE_API_KEY": "<your-api-key>",
        "PLANE_WORKSPACE_SLUG": "<your-workspace-slug>",
        "PLANE_BASE_URL": "https://api.plane.so"
      }
    }
  }
}

2. Remote HTTP Transport with OAuth

Connect to the hosted Plane MCP server using OAuth authentication.

URL: https://mcp.plane.so/http/mcp

MCP Client Configuration (for tools like Claude Desktop without native remote MCP support):

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/http/mcp"]
    }
  }
}

Note: OAuth authentication will be handled automatically when connecting to the remote server.

3. Remote HTTP Transport using PAT Token

Connect to the hosted Plane MCP server using a Personal Access Token (PAT).

URL: https://mcp.plane.so/http/api-key/mcp

Headers:

  • Authorization: Bearer <PAT_TOKEN>
  • X-Workspace-slug: <SLUG>

MCP Client Configuration (for tools like Claude Desktop without native remote MCP support):

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/http/api-key/mcp"],
      "headers": {
        "Authorization": "Bearer <PAT_TOKEN>",
        "X-Workspace-slug": "<SLUG>"
      }
    }
  }
}

4. SSE Transport (Legacy)

⚠️ Legacy Transport: SSE (Server-Sent Events) transport is maintained for backward compatibility. New implementations should use the HTTP transport (sections 2 or 3) instead.

Connect to the hosted Plane MCP server using OAuth authentication via Server-Sent Events.

URL: https://mcp.plane.so/sse

MCP Client Configuration (for tools that support SSE transport):

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": ["mcp-remote@latest", "https://mcp.plane.so/sse"]
    }
  }
}

Note: OAuth authentication will be handled automatically when connecting to the remote server. This transport is deprecated in favor of the HTTP transport.

Configuration

Authentication

The server requires authentication via environment variables:

  • PLANE_BASE_URL: Base URL for Plane API (default: https://api.plane.so) - Optional
  • PLANE_API_KEY: API key for authentication (required for stdio transport)
  • PLANE_WORKSPACE_SLUG: Workspace slug identifier (required for stdio transport)
  • PLANE_ACCESS_TOKEN: Access token for authentication (alternative to API key)

Example (for stdio transport):

export PLANE_BASE_URL="https://api.plane.so"
export PLANE_API_KEY="your-api-key"
export PLANE_WORKSPACE_SLUG="your-workspace-slug"

Note: For remote HTTP transports (OAuth or PAT), authentication is handled via the connection method (OAuth flow or PAT headers) and does not require these environment variables.

OAuth redirect URIs

For the OAuth HTTP/SSE transports, the server validates each client's redirect URI against an allowlist. Common MCP clients (Cursor, VS Code, Claude.ai, ChatGPT connectors, localhost) are allowed by default.

To onboard a new client without a code change or release, append extra patterns via an environment variable:

  • PLANE_OAUTH_ALLOWED_REDIRECT_URIS: Comma-separated redirect URI patterns appended to the built-in allowlist.
export PLANE_OAUTH_ALLOWED_REDIRECT_URIS="https://newclient.com/cb,https://other.app/oauth/*"

Patterns support glob matching (* matches any port, path segment, or subdomain). For security, keep the host pinned and wildcard only the port/path.

Logging

The server emits structured JSON logs. Each tool call is logged with its tool name, duration, status, and (when available) the opaque user id and workspace slug.

  • LOG_USER_INFO: When true, include user info (PII such as the display name) in logs alongside the opaque user id. Defaults to false so PII is never logged unless explicitly opted in. Only the OAuth and PAT (header) HTTP transports carry a display name; stdio is unaffected.
export LOG_USER_INFO="true"

Available Tools

The server provides comprehensive tools for interacting with Plane. All tools use Pydantic models from the Plane SDK for type safety and validation.

Projects

Tool NameDescription
list_projectsList all projects in a workspace with optional pagination and filtering
create_projectCreate a new project with name, identifier, and optional configuration
retrieve_projectRetrieve a project by ID
update_projectUpdate a project with partial data
delete_projectDelete a project by ID
get_project_worklog_summaryGet work log summary for a project
get_project_membersGet all members of a project
update_project_featuresUpdate features configuration of a project

Work Items

Tool NameDescription
list_work_itemsList all work items in a project with optional filtering and pagination
create_work_itemCreate a new work item with name, assignees, labels, and other attributes
retrieve_work_itemRetrieve a work item by ID with optional field expansion
retrieve_work_item_by_identifierRetrieve a work item by project identifier and issue sequence number
update_work_itemUpdate a work item with partial data
delete_work_itemDelete a work item by ID
search_work_itemsSearch work items across a workspace with query string

Cycles

Tool NameDescription
list_cyclesList cycles in a project (set archived=true for archived)
create_cycleCreate a new cycle with name, dates, and owner
retrieve_cycleRetrieve a cycle by ID
update_cycleUpdate a cycle with partial data
delete_cycleDelete a cycle by ID
manage_cycle_work_itemsAdd and/or remove work items on a cycle
list_cycle_work_itemsList work items in a cycle
transfer_cycle_work_itemsTransfer work items from one cycle to another
manage_cycle_archiveArchive or unarchive a cycle

Modules

Tool NameDescription
list_modulesList modules in a project (set archived=true for archived)
create_moduleCreate a new module with name, dates, status, and members
retrieve_moduleRetrieve a module by ID
update_moduleUpdate a module with partial data
delete_moduleDelete a module by ID
manage_module_work_itemsAdd and/or remove work items on a module
list_module_work_itemsList work items in a module
manage_module_archiveArchive or unarchive a module

Initiatives

Tool NameDescription
list_initiativesList all initiatives in a workspace
create_initiativeCreate a new initiative with name, dates, state, and lead
retrieve_initiativeRetrieve an initiative by ID
update_initiativeUpdate an initiative with partial data
delete_initiativeDelete an initiative by ID

Intake Work Items

Tool NameDescription
list_intake_work_itemsList all intake work items in a project with optional pagination
create_intake_work_itemCreate a new intake work item in a project
retrieve_intake_work_itemRetrieve an intake work item by work item ID with optional field expansion
update_intake_work_itemUpdate an intake work item with partial data
delete_intake_work_itemDelete an intake work item by work item ID

Work Item Properties

Tool NameDescription
list_work_item_propertiesList work item properties for a work item type
create_work_item_propertyCreate a new work item property with type, settings, and validation rules
retrieve_work_item_propertyRetrieve a work item property by ID
update_work_item_propertyUpdate a work item property with partial data
delete_work_item_propertyDelete a work item property by ID

Milestones

Tool NameDescription
list_milestonesList all milestones in a project
create_milestoneCreate a new milestone
retrieve_milestoneRetrieve a milestone by ID
update_milestoneUpdate a milestone by ID
delete_milestoneDelete a milestone by ID
manage_milestone_work_itemsAdd and/or remove work items on a milestone
list_milestone_work_itemsList work items in a milestone

Labels

Tool NameDescription
list_labelsList all labels in a project
create_labelCreate a new label
retrieve_labelRetrieve a label by ID
update_labelUpdate a label by ID
delete_labelDelete a label by ID

States

Tool NameDescription
list_statesList all states in a project
create_stateCreate a new state
retrieve_stateRetrieve a state by ID
update_stateUpdate a state by ID
delete_stateDelete a state by ID

Work Item Comments

Tool NameDescription
list_work_item_commentsList comments for a work item
retrieve_work_item_commentRetrieve a specific comment for a work item
create_work_item_commentCreate a comment for a work item
update_work_item_commentUpdate a comment for a work item
delete_work_item_commentDelete a comment for a work item

Work Item Links

Tool NameDescription
list_work_item_linksList links for a work item
retrieve_work_item_linkRetrieve a specific link for a work item
create_work_item_linkCreate a link for a work item
update_work_item_linkUpdate a link for a work item
delete_work_item_linkDelete a link for a work item

Work Item Types

Tool NameDescription
list_work_item_typesList all work item types in a project
create_work_item_typeCreate a new work item type
retrieve_work_item_typeRetrieve a work item type by ID
update_work_item_typeUpdate a work item type by ID
delete_work_item_typeDelete a work item type by ID
import_work_item_types_to_projectBulk-link workspace-level work item types to a project
resolve_work_item_typeFind or create a named type for a project, auto-handling workspace vs project scope and import

Work Item Relations

Tool NameDescription
list_work_item_relationsList relations for a work item
create_work_item_relationCreate relations for a work item
remove_work_item_relationRemove a relation from a work item

Work Item Relation Definitions

Tool NameDescription
list_work_item_relation_definitionsList workspace custom relation definitions
create_work_item_relation_definitionCreate a workspace relation definition
update_work_item_relation_definitionUpdate a relation definition
delete_work_item_relation_definitionDelete a relation definition

Work Item Activities

Tool NameDescription
list_work_item_activitiesList activities for a work item
retrieve_work_item_activityRetrieve a specific activity for a work item

Work Logs

Tool NameDescription
list_work_logsList work logs for a work item
create_work_logCreate a work log for a work item
update_work_logUpdate a work log for a work item
delete_work_logDelete a work log for a work item

Pages

Tool NameDescription
list_pagesList pages (workspace, or a project's if project_id given)
retrieve_pageRetrieve a page by ID (workspace, or project's if project_id given)
create_pageCreate a workspace or project page

Workspaces

Tool NameDescription
get_workspace_membersGet all members of the current workspace
get_featuresGet feature flags (workspace, or a project's if project_id given)
update_workspace_featuresUpdate features of the current workspace

Users

Tool NameDescription
get_meGet current authenticated user information

Total Tools: 100+ tools across 20 categories

Development

Running Tests

pytest

Code Formatting

black plane_mcp/
ruff check plane_mcp/

License

MIT License - see LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Deprecation Notice

⚠️ The Node.js-based plane-mcp-server is deprecated and no longer maintained.

This repository represents the new Python+FastMCP based implementation of the Plane MCP server. If you were using the previous Node.js version, please migrate to this Python-based version for continued support and updates.

The new implementation offers:

  • Better type safety with Pydantic models
  • Improved performance with FastMCP
  • Enhanced tool coverage
  • Active maintenance and development

For migration assistance, please refer to the configuration examples in this README or open an issue for support.

Old Node.js Configuration (Deprecated):

If you were using the previous Node.js-based @makeplane/plane-mcp-server, your configuration looked like this:

{
  "mcpServers": {
    "plane": {
      "command": "npx",
      "args": [
        "-y",
        "@makeplane/plane-mcp-server"
      ],
      "env": {
        "PLANE_API_KEY": "<YOUR_API_KEY>",
        "PLANE_API_HOST_URL": "<HOST_URL_FOR_SELF_HOSTED>",
        "PLANE_WORKSPACE_SLUG": "<YOUR_WORKSPACE_SLUG>"
      }
    }
  }
}

Please migrate to the new Python-based configuration shown in the Usage section above.