plane-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@plane-mcpshow me tickets in the current cycle"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
plane-mcp
Local MCP server for a self-hosted Plane instance. Exposes tickets (work items), cycles, modules, labels, and states as MCP tools, plus a small set of mutation tools (label add/remove, state changes, ticket create/update, module attach).
The Plane API key is read only from the PLANE_API_KEY environment
variable. It is never logged, never printed, and never included in tool
output — errors are redacted before being returned.
Setup
npm install
npm run build
export PLANE_BASE_URL="https://your-plane-instance.example.com"
export PLANE_API_KEY="..."
export PLANE_DEFAULT_WORKSPACE="..." # optional
export PLANE_DEFAULT_PROJECT_ID="..." # optional
export PLANE_DEFAULT_PROJECT_IDENTIFIER="..." # optional
export PLANE_ENABLE_WRITES="false" # optional; must be true for mutationsCopy .env.example to .env for reference (placeholders only — never
commit a real .env).
Related MCP server: plane-mcp-server
Run
npm start
# or during development:
npm run devThe server speaks MCP over stdio.
MCP client config (stdio)
{
"mcpServers": {
"plane": {
"command": "node",
"args": ["/absolute/path/to/plane-mcp/dist/src/index.js"],
"env": {
"PLANE_BASE_URL": "https://your-plane-instance.example.com",
"PLANE_API_KEY": "${PLANE_API_KEY}",
"PLANE_DEFAULT_WORKSPACE": "${PLANE_DEFAULT_WORKSPACE}",
"PLANE_DEFAULT_PROJECT_ID": "${PLANE_DEFAULT_PROJECT_ID}",
"PLANE_ENABLE_WRITES": "false"
}
}
}
}Exposed tools
Tool | Purpose |
| List accessible workspaces |
| List projects in a workspace |
| Resolve a project identifier (e.g. |
| Search work items by query/key |
| Fetch a full ticket by UUID or key (e.g. |
| List cycles (sprints/milestones) |
| Fetch the current active cycle |
| List tickets in a cycle |
| One-shot "what's in the current cycle"; link summaries by default |
| List modules (epics/milestones) |
| List tickets in a module |
| List labels for a project |
| Add labels without clobbering existing ones |
| Remove labels from a ticket |
| Patch basic ticket fields |
| Add a comment to a ticket/work item |
| List states/statuses |
| Move a ticket to a state by name or id |
| Create a ticket, optionally attach to cycle/module |
| Attach an existing ticket to a module |
| List child tickets by filtering on |
Tools return normalized, allowlisted summaries rather than raw Plane API
records. Mutating tools accept dry_run: boolean for previews. Real writes
are disabled unless PLANE_ENABLE_WRITES=true is set, and each mutating call
must also pass confirm: true; successful ticket updates are verified by
re-fetching the record afterward, while comment creation returns the created
comment from Plane.
plane_add_comment accepts either comment_text or comment_html.
comment_text is escaped and converted to simple paragraph HTML before it is
sent to Plane. Comments default to access: "INTERNAL" unless supplied.
Testing
npm testUnit tests mock fetch — no real Plane API key is required. Coverage
includes: auth header presence without leaking the key, redaction of
secrets from errors and result payloads, safe path construction, bounded
cursor pagination, schema limits, ticket-key normalization, and label-union
(non-clobbering) behavior.
Smoke test
With real credentials exported (see Setup), you can drive the server
directly with the MCP inspector, or manually via any MCP-compatible
client pointed at node dist/src/index.js. A minimal manual check:
node --input-type=module -e "
import { PlaneClient } from './dist/src/planeClient.js';
const client = new PlaneClient({
baseUrl: process.env.PLANE_BASE_URL,
apiKey: process.env.PLANE_API_KEY,
defaultWorkspace: process.env.PLANE_DEFAULT_WORKSPACE,
});
console.log(await client.paginate('/api/v1/workspaces/'));
"Known quirks (self-hosted Plane)
GET /api/v1/workspaces/may 404 (no cross-workspace listing endpoint on some self-hosted deployments). SetPLANE_DEFAULT_WORKSPACEand use workspace-scoped tools directly instead of relying onplane_list_workspaces.Advanced search may return no results when
project_idis included; the client retries workspace-wide and filters client-side.Cycle-issue and module-issue list endpoints may return link objects (
{ issue: <uuid> }) rather than full ticket records. Current-cycle tools keep link summaries by default; passinclude_full_tickets: trueto join normalized ticket summaries.
Security
Credentials are read only from environment variables (
PLANE_API_KEY,PLANE_BASE_URL).The API key is never printed, logged, or embedded in responses.
Errors (HTTP failures, network failures, JSON parse failures) are passed through a redactor before being surfaced to the MCP client.
Tool arguments used in Plane URL paths are validated and encoded before request construction.
Tool outputs are allowlisted and redacted; raw Plane API records are not returned to MCP clients.
Writes are off by default and require both
PLANE_ENABLE_WRITES=trueandconfirm: trueon each mutating call..envis gitignored; only.env.examplewith placeholders is committed.
This server cannot be deployed
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
- mcpOAuthcom.airtable
Official Airtable MCP server — database and operations layer for agents.
- SupabaseOAuthcom.supabase
MCP server for interacting with the Supabase platform
MCP server for Linear project management and issue tracking
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that enables LLMs to fully manage a Plane workspace, including projects, work items, states, labels, cycles, modules, comments, and members.38MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for integrating AI agents with the Plane project management platform, providing tools to manage projects, work items, cycles, modules, and more.MIT
- AlicenseBqualityAmaintenanceUnofficial MCP server for self-hosted Plane Community Edition, enabling project management tasks like managing work items, cycles, modules, and initiatives via natural language.1002MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for the Plane project management API, enabling issue retrieval, listing, commenting, state changes, and creation.1MIT