by makeplane
Plane's Official Model Context Protocol Server 🔌 ⌨️ 🔥
# Add to your Claude Code skills
git clone https://github.com/makeplane/plane-mcp-serverGuides for using mcp servers skills like plane-mcp-server.
Last scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T15:28:01.007Z",
"npmAuditRan": true,
"pipAuditRan": true
}plane-mcp-server is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by makeplane. Plane's Official Model Context Protocol Server 🔌 ⌨️ 🔥. It has 260 GitHub stars.
Yes. plane-mcp-server passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/makeplane/plane-mcp-server" and add it to your Claude Code skills directory (see the Installation section above).
plane-mcp-server is primarily written in Python. It is open-source under makeplane on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh plane-mcp-server against similar tools.
No comments yet. Be the first to share your thoughts!
A Model Context Protocol (MCP) server for Plane integration. This server provides tools and resources for interacting with Plane through AI agents.
The server supports three transport methods. We recommend using uvx as it doesn't require installation.
Requirements:
uvx)npx)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"
}
}
}
}
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.
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>"
}
}
}
}
⚠️ 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.
The server requires authentication via environment variables:
PLANE_BASE_URL: Base URL for Plane API (default: https://api.plane.so) - OptionalPLANE_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.
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.
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"
The server provides comprehensive tools for interacting with Plane. All tools use Pydantic models from the Plane SDK for type safety and validation.
| Tool Name | Description |
|---|---|
list_projects |
List all projects in a workspace with optional pagination and filtering |
create_project |
Create a new project with name, identifier, and optional configuration |
retrieve_project |
Retrieve a project by ID |
update_project |
Update a project with partial data |
delete_project |
Delete a project by ID |
get_project_worklog_summary |
Get work log summary for a project |
get_project_members |
Get all members of a project |
update_project_features |
Update features configuration of a project |
| Tool Name | Description |
|---|---|
list_work_items |
List all work items in a project with optional filtering and pagination |
create_work_item |
Create a new work item with name, assignees, labels, and other attributes |
retrieve_work_item |
Retrieve a work item by ID with optional field expansion |
retrieve_work_item_by_identifier |
Retrieve a work item by project identifier and issue sequence number |
update_work_item |
Update a work item with partial data |
delete_work_item |
Delete a work item by ID |
search_work_items |
Search work items across a workspace with query string |
| Tool Name | Description |
|---|---|
list_cycles |
List cycles in a project (set archived=true for archived) |
create_cycle |
Create a new cycle with name, dates, and owner |
retrieve_cycle |
Retrieve a cycle by ID |
update_cycle |
Update a cycle with partial data |
delete_cycle |
Delete a cycle by ID |
manage_cycle_work_items |
Add and/or remove work items on a cycle |
list_cycle_work_items |
List work items in a cycle |
transfer_cycle_work_items |
Transfer work items from one cycle to another |
manage_cycle_archive |
Archive or unarchive a cycle |
| Tool Name | Description |
|---|---|
list_modules |
List modules in a project (set archived=true for archived) |
create_module |
Create a new module with name, dates, status, and members |
retrieve_module |
Retrieve a module by ID |
update_module |
Update a module with partial data |
delete_module |
Delete a module by ID |
manage_module_work_items |
Add and/or remove work items on a module |
list_module_work_items |
List work items in a module |
manage_module_archive |
Archive or unarchive a module |
| Tool Name | Description |
|---|---|
list_initiatives |
List all initiatives in a workspace |
create_initiative |
Create a new initiative with name, dates, state, and lead |
retrieve_initiative |
Retrieve an initiative by ID |
update_initiative |
Update an initiative with partial data |
delete_initiative |
Delete an initiative by ID |
| Tool Name | Description |
|---|---|
list_intake_work_items |
List all intake work items in a project with optional pagination |
create_intake_work_item |
Create a new intake work item in a project |
retrieve_intake_work_item |
Retrieve an intake work item by work item ID with optional field expansion |
update_intake_work_item |
Update an intake work item with partial data |
delete_intake_work_item |
Delete an intake work item by work item ID |
| Tool Name | Description |
|---|---|
list_work_item_properties |
List work item properties for a work item type |
create_work_item_property |
Create a new work item property with type, settings, and validation rules |
retrieve_work_item_property |
Retrieve a work item property by ID |
update_work_item_property |
Update a work item property with partial data |
delete_work_item_property |
Delete a work item property by ID |
| Tool Name | Description |
|---|---|
list_milestones |
List all milestones in a project |
create_milestone |
Create a new milestone |
retrieve_milestone |
Retrieve a milestone by ID |
update_milestone |
Update a milestone by ID |
delete_milestone |
Delete a milestone by ID |
manage_milestone_work_items |
Add and/or remove work items on a milestone |
list_milestone_work_items |
List work items in a milestone |
| Tool Name | Description |
|---|---|
list_labels |
List all labels in a project |
create_label |
Create a new label |
retrieve_label |
Retrieve a label by ID |
update_label |
Update a label by ID |
delete_label |
Delete a label by ID |
| Tool Name | Description |
|---|---|
list_states |
List all states in a project |
create_state |
Create a new state |
retrieve_state |
Retrieve a state by ID |
update_state |
Update a state by ID |