Thank you for showing an interest in contributing to Plane MCP Server! All kinds of contributions are valuable to us. In this guide, we will cover how you can quickly onboard and make your first contribution.
Before submitting a new issue, please search the issues tab. Maybe an issue or discussion already exists and might inform you of workarounds. Otherwise, you can give new information.
While we want to fix all the issues, before fixing a bug we need to be able to reproduce and confirm it. Please provide us with a minimal reproduction scenario. Having a live, reproducible scenario gives us the information without asking questions back & forth with additional questions like:
- Python version and OS
- MCP client being used (Claude Desktop, etc.)
- Transport method (stdio, HTTP, SSE)
- A use-case that fails
Without said minimal reproduction, we won't be able to investigate all issues, and the issue might not be resolved.
You can open a new issue with this issue form.
When opening a new issue, please use a clear and concise title that follows this format:
- For bugs:
Bug: [short description] - For features:
Feature: [short description] - For improvements:
Improvement: [short description] - For documentation:
Docs: [short description]
Examples:
Bug: OAuth token refresh fails with Redis backendFeature: Add support for custom fields in work itemsImprovement: Better error messages for missing environment variablesDocs: Clarify PAT token setup for HTTP transport
This helps us triage and manage issues more efficiently.
- Python 3.10+
- uv (fast Python package installer)
- A Plane instance (cloud or self-hosted) with an API key for testing
- Clone the repo
git clone https://github.com/makeplane/plane-mcp-server.git
cd plane-mcp-server- Install dependencies
uv pip install -e ".[dev]"- Configure environment variables
cp .env.test .env.test.local
# Edit .env.test.local with your Plane API credentials- Run the server locally (stdio mode)
PLANE_API_KEY="your-api-key" PLANE_WORKSPACE_SLUG="your-workspace" python -m plane_mcp stdio- Run the tests
export $(cat .env.test.local | xargs) && pytest tests/ -vIf a feature is missing, you can directly request a new one here. If you would like to implement it, an issue with your proposal must be submitted first, to be sure that we can use it. Please consider the guidelines given below.
To ensure consistency throughout the source code, please keep these rules in mind as you are working:
- All features or bug fixes must be tested by one or more specs (unit-tests).
- We format with Black (line length: 100) and lint with Ruff (rules: E, F, I, UP, B; line length: 100).
- Use Python 3.10+ union syntax (
str | Noneinstead ofOptional[str]). - Tool functions must follow the existing pattern: use
@mcp.tool()decorator, accept typed parameters, and return Pydantic models fromplane-sdk. - Include docstrings with
ArgsandReturnssections for all new tools.
- Create or update a module in
plane_mcp/tools/following the existing domain organization. - Implement a
register_*_tools(mcp: FastMCP)function. - Register it in
plane_mcp/tools/__init__.py. - Add tests covering the new tool.
# Format
black plane_mcp/
# Lint
ruff check plane_mcp/
# Test
pytest- Try the Plane MCP Server with different MCP clients and give feedback
- Help with open issues or create your own
- Add new tools for Plane API endpoints
- Improve existing tool documentation and descriptions
- Report bugs
- Propose features
Questions, suggestions, and thoughts are most welcome. We can also be reached on our community forum.