A Model Context Protocol (MCP) server that enables LLMs to interact with Plane.so, allowing them to manage projects and issues through Plane's API. Using this server, LLMs like Claude can directly interact with your project management workflows while maintaining user control and security.
The quickest way to get started is to use Smithery to install the server directly:
# Install to Claude for Desktop
npx -y @smithery/cli install @kelvin6365/plane-mcp-server --client claude
This command will automatically set up the Plane MCP Server for use with Claude. After installation, you'll need to configure the server with your Plane API key and workspace slug through the Claude settings.
Valid client options are: claude, cline, windsurf, roo-cline, witsy, enconvo, cursor
Example for installing with Cursor:
npx -y @smithery/cli install @kelvin6365/plane-mcp-server --client cursor
If you prefer to set up the server manually, follow these steps:
git clone https://github.com/kelvin6365/plane-mcp-server.git
cd plane-mcp-server
npm install
npm run build
Note: If you used Option 1 (Smithery) above, you can skip this section. Smithery automatically configures the MCP server for you.
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"plane": {
"command": "node",
"args": ["path/to/plane-mcp-server/build/index.js"],
"env": {
"PLANE_API_KEY": "your_plane_api_key_here",
"PLANE_WORKSPACE_SLUG": "your_workspace_slug_here"
}
}
}
}
Note: Tool names use hyphens (e.g.,
list-projects
), not underscores. The server will automatically convert underscores to hyphens for compatibility.
Lists all projects in your Plane workspace.
Parameters: None
Example:
{}
Gets detailed information about a specific project.
Parameters:
- project_id
: ID of the project to retrieve
Example:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef"
}
Creates a new issue in a specified project.
Parameters:
- project_id
: ID of the project where the issue should be created
- name
: Title of the issue
- description_html
: HTML description of the issue (required by Plane API)
- priority
(optional): Priority of the issue ("urgent", "high", "medium", "low", "none")
- state_id
(optional): ID of the state for this issue
- assignees
(optional): Array of user IDs to assign to this issue
Note: The
assignees
parameter must be an array of user ID strings. Common errors include providing a dictionary/object instead of an array, or accidentally nesting the entire issue data inside the assignees field. The server will attempt to handle these cases, but it's best to use the correct format.
Example:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"name": "Implement new feature",
"description_html": "<p>We need to implement the new reporting feature</p>",
"priority": "high",
"assignees": ["user-id-1", "user-id-2"]
}
Lists issues from a specified project with optional filtering.
Parameters:
- project_id
: ID of the project to get issues from
- state_id
(optional): Filter by state ID
- priority
(optional): Filter by priority
- assignee_id
(optional): Filter by assignee ID
- limit
(optional): Maximum number of issues to return (default: 50)
Example:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"priority": "high",
"limit": 10
}
Gets detailed information about a specific issue.
Parameters:
- project_id
: ID of the project containing the issue
- issue_id
: ID of the issue to retrieve
Example:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq"
}
Updates an existing issue in a project.
Parameters:
- project_id
: ID of the project containing the issue
- issue_id
: ID of the issue to update
- name
(optional): Updated title of the issue
- description_html
(optional): HTML description of the issue (required by Plane API)
- priority
(optional): Updated priority of the issue
- state_id
(optional): Updated state ID of the issue
- assignees
(optional): Updated array of user IDs to assign to this issue
Note: The
assignees
parameter must be an array of user ID strings, following the same format guidelines as the create-issue tool.
Example:
{
"project_id": "01abc123-4567-89de-0123-456789abcdef",
"issue_id": "01def456-7890-12gh-3456-789ijklmnopq",
"priority": "urgent",
"description_html": "<p>Updated description with <strong>more details</strong></p>"
}
npm install --save-dev typescript @types/node
npm run dev
You can test the server using the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.js
Here are some example interactions you can try with Claude after setting up the Plane MCP server:
Claude will use the appropriate tools to interact with Plane while asking for your approval before creating or modifying any issues.
git checkout -b feature/amazing-feature
)git commit -m 'Add some amazing feature'
)git push origin feature/amazing-feature
)This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions: