A Model Context Protocol (MCP) server for Plane, the open-source project management tool. This server enables AI assistants like Cline to interact with your self-hosted Plane instance to create, manage, and search issues.
This server is ideal for developers who want to:
- π Document problems and solutions while coding
- π Build a searchable knowledge base of past fixes
- π Track learning progress and technical challenges
- π·οΈ Organize issues with labels and priorities
- π Keep a history of bugs solved and features implemented
- Node.js (v18 or later)
- A running Plane instance (Docker setup included)
- Plane API key (generated from your Plane account)
The Plane instance is already installed in ../plane-selfhost. To start it:
cd ../plane-selfhost
bash setup.sh
# Select option 2 to start PlanePlane will be accessible at http://localhost:8010
- Open http://localhost:8010 in your browser
- Complete the initial setup form (name, email, company, password)
- Create a workspace and project
- Log into your Plane instance
- Click your profile icon β Profile Settings
- Go to Personal Access Tokens tab
- Click Add personal access token
- Give it a name (e.g., "MCP Server") and optionally set an expiry
- Click Add personal access token
- Copy the generated API key (you won't see it again!)
-
Copy the example environment file:
cp .env.example .env
-
Edit
.envand add your configuration:PLANE_URL=http://localhost:8010 PLANE_API_KEY=your_api_key_here PLANE_WORKSPACE=your-workspace-slug
To find your workspace slug:
- In Plane, look at the URL when viewing your workspace
- It's the part after
/(e.g.,http://localhost/my-workspaceβ slug ismy-workspace)
Add this server to your Cline MCP settings file:
Windows: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json
macOS/Linux: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
Add the following to the mcpServers object:
{
"mcpServers": {
"plane-mcp": {
"command": "node",
"args": ["C:\\Users\\alan\\code\\linear-mcp\\plane-mcp-server.js"],
"disabled": false,
"alwaysAllow": []
}
}
}Replace the path with the actual path to your plane-mcp-server.js file.
Restart VS Code or reload Cline for the MCP server to be recognized.
- get_workspaces - List all workspaces you have access to
- get_projects - List all projects in a workspace
-
create_issue - Create a new issue
- Required:
project_id,title - Optional:
description,priority,state_id,assignee_ids,label_ids,workspace_slug
- Required:
-
get_issues - List issues from a project
- Required:
project_id - Optional:
state,priority,assignee,labels,workspace_slug
- Required:
-
get_issue - Get detailed information about a specific issue
- Required:
project_id,issue_id - Optional:
workspace_slug
- Required:
-
update_issue - Update an existing issue
- Required:
project_id,issue_id - Optional:
title,description,priority,state_id,workspace_slug
- Required:
-
add_comment - Add a comment to an issue
- Required:
project_id,issue_id,comment - Optional:
workspace_slug
- Required:
-
search_issues - Search for issues using text query
- Required:
query - Optional:
project_id,workspace_slug
- Required:
You: "I just fixed a bug with async timeouts. Document it in Plane."
Cline: [Uses create_issue]
Title: "Fixed async timeout in data fetcher"
Description: "Problem: Async calls were timing out after 5s
Solution: Added configurable timeout parameter with default of 30s
Code: Updated fetchData() function in utils/api.js"
Priority: medium
Labels: ["bug-fix", "async", "solved"]
---
3 weeks later...
You: "How did I fix that async timeout issue?"
Cline: [Uses search_issues with query "async timeout"]
Found issue: "Fixed async timeout in data fetcher"
[Shows full description with solution]
Ask Cline:
"Create a Plane issue to document how I fixed the authentication bug.
Title: Fixed JWT token expiration handling
Description: Added refresh token logic that automatically renews tokens before expiry"
Ask Cline:
"Search my Plane issues for anything related to database connection pooling"
Ask Cline:
"Show me all my Plane projects"
- Use Labels: Tag issues with technology, type, or topic (e.g., "python", "bug-fix", "optimization")
- Write Detailed Descriptions: Include problem context, solution, and code snippets
- Set Priorities: Use priority levels to indicate complexity or importance
- Regular Documentation: Create issues as you solve problems, while details are fresh
- Descriptive Titles: Make titles searchable and clear
- Check that
.envfile exists and has correct values - Verify Plane is running:
docker psshould show Plane containers - Ensure API key is valid (regenerate if needed)
- Add
PLANE_WORKSPACEto your.envfile, OR - Include
workspace_slugin each request
- Regenerate your API key in Plane
- Update
.envwith the new key - Restart Cline
- Verify you're using the correct
project_id - Check that issues exist in that project
- Ensure your API key has access to the project
linear-mcp/
βββ plane-mcp-server.js # Main MCP server implementation
βββ package.json # Node.js dependencies
βββ .env.example # Example environment configuration
βββ .env # Your actual configuration (not in git)
βββ README.md # This file
- Never commit
.env- It contains your API key - Store API keys securely
- Use appropriate token expiration dates
- Consider creating separate API keys for different purposes
MIT License - Feel free to modify and use as needed.
This is a personal tool, but feel free to fork and customize for your needs!