plane-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PLANE_API_KEY | Yes | Plane API key (Workspace Settings → API tokens) | |
| PLANE_API_URL | Yes | Base URL of the Plane host (e.g., https://plane.example.com or https://app.plane.so) | |
| PLANE_PROJECT_ID | Yes | UUID of the Plane project this server instance is tied to | |
| PLANE_WORKSPACE_SLUG | Yes | Workspace slug for the Plane instance |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_tasksA | List tasks in the configured project, optionally filtered. Filtering is done client-side because Plane's list endpoint silently
ignores state/assignee query params. We page through up to 500 raw
items and return at most |
| get_taskA | Retrieve a single task by UUID or by If description_html embeds Plane asset URLs (inline images), the
response also includes an |
| create_taskB | Create a new task in the configured project. |
| update_taskB | Patch any combination of fields on an existing task. |
| change_statusA | Move a task to a different state. Provide status_group OR state_id. Convenience wrapper around update_task — kept separate because it's the most common single-field update and reads cleaner in transcripts. |
| add_commentA | Post a comment on a task. body_html is run through nh3 with the default allowlist before being sent to Plane. Plane sanitizes description_html server-side but not comment_html, so we mirror its sanitizer here to keep parity. |
| list_commentsA | List comments on a task, oldest first. Returns trimmed fields useful for reading context: id, comment_html, comment_stripped, actor_id, created_at, updated_at. Comments that embed inline images also include an |
| add_comment_with_imageA | Post a comment with an embedded inline image. Workflow: upload the file as a task attachment (which gives a stable Plane asset URL), build an tag with the absolute URL, splice it into body_html, sanitize, and post the comment. The image will also appear in the task's Attachments tab — Plane's public API doesn't expose a comment-scoped asset entity type, so any inline image is also a regular attachment by design. |
| list_statesA | List workflow states for the configured project (cached 5 min). Each state has: id, name, group (backlog/unstarted/started/completed/ cancelled), color, sequence. LLMs need this to map status_group → state_id when creating or updating tasks. |
| list_membersA | List project members (cached 5 min). Returns id, display_name, email. |
| list_labelsA | List project labels (cached 5 min). Returns id, name, color. |
| upload_attachmentA | Attach a file from disk to a task. Three-step flow under the hood: request presigned S3 URL from Plane, upload the bytes directly to S3, confirm upload back to Plane. Returns the created attachment metadata. |
| list_attachmentsA | List file attachments on a task. Returns trimmed metadata only. |
| get_attachment_urlA | Get URLs for an attachment. Returns two URLs:
|
| delete_attachmentA | Soft-delete an attachment from a task. |
| read_attachment_imageA | Fetch an image attachment and return it as MCP image content. Lets vision-capable models look at a screenshot/photo on a task directly, instead of receiving a URL and having to download via a shell tool. Resolves the presigned URL, fetches the bytes, returns them as native MCP image content. Capped at 5 MB (Plane's default FILE_SIZE_LIMIT); raises if the attachment isn't an image MIME type or exceeds the cap. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/babazulu/plane-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server