{
  "schemaVersion": "1.0",
  "name": "plane",
  "title": "Plane",
  "description": "Model Context Protocol server for Plane. Create and query work items, plan cycles and modules, manage projects, pages, intake, and customers as the signed-in user.",
  "version": "0.3.0",
  "license": "MIT",
  "documentationUrl": "https://developers.plane.so/dev-tools/mcp-server",
  "toolsDocumentationUrl": "https://developers.plane.so/dev-tools/mcp-server-tools",
  "repositoryUrl": "https://github.com/makeplane/plane-mcp-server",
  "provider": {
    "name": "Plane Software, Inc.",
    "url": "https://plane.so"
  },
  "protocol": {
    "name": "Model Context Protocol",
    "specificationUrl": "https://modelcontextprotocol.io"
  },
  "capabilities": {
    "tools": true,
    "resources": false,
    "prompts": false
  },
  "mcpServers": {
    "plane": {
      "type": "http",
      "url": "https://mcp.plane.so/http/mcp"
    }
  },
  "servers": [
    {
      "name": "plane-cloud-oauth",
      "url": "https://mcp.plane.so/http/mcp",
      "transport": "streamable-http",
      "recommended": true,
      "description": "Interactive use. Sign in through Plane and pick a workspace; the connection stays bound to it.",
      "authentication": {
        "type": "oauth2",
        "flow": "authorization_code",
        "pkce": [
          "S256"
        ],
        "issuer": "https://mcp.plane.so/",
        "authorizationUrl": "https://mcp.plane.so/authorize",
        "tokenUrl": "https://mcp.plane.so/token",
        "registrationUrl": "https://mcp.plane.so/register",
        "dynamicClientRegistration": true,
        "scopes": {
          "read": "Read workspace data",
          "write": "Create and modify workspace data"
        },
        "metadataUrl": "https://mcp.plane.so/.well-known/oauth-authorization-server",
        "resourceMetadataUrl": "https://mcp.plane.so/.well-known/oauth-protected-resource/http/mcp"
      }
    },
    {
      "name": "plane-cloud-token",
      "url": "https://mcp.plane.so/http/api-key/mcp",
      "transport": "streamable-http",
      "recommended": false,
      "description": "Automations, CI, headless agents, and shared team setups.",
      "authentication": {
        "type": "http-bearer",
        "headers": {
          "Authorization": "Bearer <personal-access-token>",
          "x-workspace-slug": "<workspace-slug>"
        }
      }
    },
    {
      "name": "plane-cloud-sse",
      "url": "https://mcp.plane.so/sse",
      "transport": "sse",
      "deprecated": true,
      "description": "Retained only for clients that cannot use streamable HTTP. The MCP specification deprecated this transport.",
      "authentication": {
        "type": "oauth2",
        "metadataUrl": "https://mcp.plane.so/.well-known/oauth-authorization-server"
      }
    },
    {
      "name": "plane-stdio",
      "transport": "stdio",
      "command": "uvx",
      "args": [
        "plane-mcp-server",
        "stdio"
      ],
      "description": "Local mode. Use for self-hosted instances or offline development.",
      "env": {
        "PLANE_API_KEY": "<api-key>",
        "PLANE_WORKSPACE_SLUG": "<workspace-slug>",
        "PLANE_BASE_URL": "<your-plane-instance-url>"
      }
    }
  ],
  "toolCount": 28,
  "actionCount": 183,
  "retiredNameAliasCount": 169,
  "conventions": {
    "authoritativeReference": "Each tool's description is generated from its action declarations and is delivered to the client at call time. That description, not this document, is authoritative for required and optional parameters.",
    "identifiers": "Actions take UUIDs for projects, work items, states, labels, members and other resources. List or resolve the resource first when you only have a name. The one exception is `workitem retrieve_by_identifier`, whose `workitem_identifier` accepts a readable identifier such as ENG-42.",
    "scope": "Pages, work item types and work item properties can belong to a project or to the workspace. Pass `project_id` for the project's own set; omit it for the workspace's set.",
    "governedVocabulary": "Some workspaces centrally govern the type and property vocabulary and refuse project-scoped writes. Use `workitem_type resolve` to find or create a usable type without duplicates, or `workitem_type import_to_project` to link existing workspace types to a project.",
    "pagination": "Actions accepting `cursor` and `per_page` return a `next_cursor` when another page is available. Follow it until it comes back empty.",
    "updates": "Update actions change only the fields you pass.",
    "parameterCoercion": "Values are plain strings, numbers, booleans and lists; string-encoded lists, integers and booleans are coerced. Passing an argument that belongs to a different action is rejected with a message naming the permitted parameters.",
    "annotations": "Tools carry MCP `readOnlyHint` and `destructiveHint` annotations derived from their actions, so a client can gate destructive calls without hard-coding a list."
  },
  "featureGates": [
    {
      "tool": "work_log",
      "feature": "Time tracking",
      "minimumPlan": "Pro"
    },
    {
      "tool": "workitem_type",
      "feature": "Work item types",
      "minimumPlan": "Pro"
    },
    {
      "tool": "workitem_property",
      "feature": "Work item properties",
      "minimumPlan": "Pro"
    },
    {
      "tool": "initiative",
      "feature": "Initiatives",
      "minimumPlan": "Pro"
    },
    {
      "tool": "customer",
      "feature": "Customers",
      "minimumPlan": "Business"
    },
    {
      "tool": "customer_request",
      "feature": "Customers",
      "minimumPlan": "Business"
    },
    {
      "tool": "customer_property",
      "feature": "Customers",
      "minimumPlan": "Business"
    },
    {
      "tool": "page",
      "feature": "Workspace wiki",
      "minimumPlan": "Pro",
      "note": "Workspace-scoped wiki pages only; project pages are available on every plan. Nested pages require Business."
    },
    {
      "tool": "release",
      "feature": "Releases",
      "note": "Gated by the Plane API and your plan."
    },
    {
      "tool": "project",
      "feature": "Some project features",
      "note": "Individual project feature toggles can be gated."
    }
  ],
  "recipes": [
    {
      "name": "Work with epics",
      "steps": [
        "Call `workitem_type resolve` with `project_id` and `name=\"Epic\"`, keeping the returned type id.",
        "Call `workitem create` with the project, a name, and that `type_id`.",
        "List epics with `workitem list` and `pql='type = \"<type id>\"'`.",
        "Nest a work item under an epic by passing the epic's UUID as `parent` to `workitem create` or `workitem update`.",
        "List an epic's children with `workitem list` and `pql='childOf(\"ENG-12\")'`, using its readable identifier."
      ],
      "documentationUrl": "https://developers.plane.so/dev-tools/mcp-server-tools#epics"
    }
  ],
  "tools": [
    {
      "name": "workitem",
      "title": "Work items",
      "description": "Work items — issues, tasks and epics. Accepts a PQL filter on list, list_archived and count.",
      "actions": [
        "list",
        "list_archived",
        "retrieve",
        "retrieve_by_identifier",
        "search",
        "count",
        "create",
        "update",
        "delete",
        "archive",
        "manage_assignee",
        "manage_label"
      ]
    },
    {
      "name": "workitem_comment",
      "title": "Work item comments",
      "description": "Comments on a work item.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete"
      ]
    },
    {
      "name": "workitem_activity",
      "title": "Work item activity",
      "description": "Change history for a work item.",
      "actions": [
        "list",
        "retrieve"
      ]
    },
    {
      "name": "workitem_attachment",
      "title": "Work item attachments",
      "description": "Files attached to a work item.",
      "actions": [
        "list",
        "read",
        "download_url",
        "upload_from_url",
        "delete"
      ]
    },
    {
      "name": "workitem_link",
      "title": "Work item links",
      "description": "External links attached to a work item.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete"
      ]
    },
    {
      "name": "workitem_relation",
      "title": "Work item relations",
      "description": "Relations between work items, and the definitions that type them.",
      "actions": [
        "list",
        "create",
        "delete",
        "list_definitions",
        "create_definition",
        "update_definition",
        "delete_definition"
      ]
    },
    {
      "name": "work_log",
      "title": "Work logs",
      "description": "Time logged against a work item.",
      "actions": [
        "list",
        "create",
        "update",
        "delete"
      ]
    },
    {
      "name": "workitem_type",
      "title": "Work item types",
      "description": "Work item types, at project or workspace scope.",
      "actions": [
        "list",
        "retrieve",
        "resolve",
        "create",
        "update",
        "delete",
        "import_to_project"
      ]
    },
    {
      "name": "workitem_property",
      "title": "Work item properties",
      "description": "Custom work item properties, their options, and their values.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "manage_type_properties",
        "list_options",
        "retrieve_option",
        "create_option",
        "update_option",
        "delete_option",
        "get_value",
        "set_value",
        "delete_value"
      ]
    },
    {
      "name": "project_estimate",
      "title": "Project estimates",
      "description": "A project's estimate system and its points.",
      "actions": [
        "retrieve",
        "create",
        "update",
        "delete",
        "link",
        "list_points",
        "create_points",
        "update_point",
        "delete_point"
      ]
    },
    {
      "name": "cycle",
      "title": "Cycles",
      "description": "Cycles (time-boxed iterations) in a project.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "list_workitems",
        "manage_workitems",
        "transfer_workitems",
        "complete",
        "archive",
        "unarchive"
      ]
    },
    {
      "name": "module",
      "title": "Modules",
      "description": "Modules (feature groupings) in a project.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "list_workitems",
        "manage_workitems",
        "archive",
        "unarchive"
      ]
    },
    {
      "name": "milestone",
      "title": "Milestones",
      "description": "Milestones within a project.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "list_workitems",
        "manage_workitems"
      ]
    },
    {
      "name": "initiative",
      "title": "Initiatives",
      "description": "Workspace initiatives and the projects rolled up into them.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "list_projects",
        "add_projects",
        "remove_projects"
      ]
    },
    {
      "name": "release",
      "title": "Releases",
      "description": "Releases in the workspace, including their changelogs.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "get_changelog",
        "update_changelog",
        "list_workitems",
        "manage_workitems"
      ]
    },
    {
      "name": "release_tag",
      "title": "Release tags",
      "description": "Release tags (version markers).",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete"
      ]
    },
    {
      "name": "release_label",
      "title": "Release labels",
      "description": "Release labels, both the workspace palette and per-release assignment.",
      "actions": [
        "list",
        "create",
        "update",
        "delete",
        "attach",
        "detach"
      ]
    },
    {
      "name": "project",
      "title": "Projects",
      "description": "Projects in a workspace, their archive state, features, and worklog summary.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "archive",
        "unarchive",
        "worklog_summary",
        "get_features",
        "update_features"
      ]
    },
    {
      "name": "state",
      "title": "Workflow states",
      "description": "Workflow states within a project.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete"
      ]
    },
    {
      "name": "label",
      "title": "Labels",
      "description": "Labels within a project.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete"
      ]
    },
    {
      "name": "member",
      "title": "Members and roles",
      "description": "Workspace and project members, and role definitions.",
      "actions": [
        "me",
        "list_workspace",
        "list_project",
        "list_roles",
        "retrieve_role"
      ]
    },
    {
      "name": "workspace",
      "title": "Workspace settings",
      "description": "Workspace-level feature flags.",
      "actions": [
        "get_features",
        "update_features"
      ]
    },
    {
      "name": "intake",
      "title": "Intake queue",
      "description": "The intake (triage) queue for a project.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete"
      ]
    },
    {
      "name": "page",
      "title": "Pages",
      "description": "Pages at workspace (wiki) or project scope, and their links to work items.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "list_workitem_pages",
        "attach_to_workitem",
        "detach_from_workitem"
      ]
    },
    {
      "name": "customer",
      "title": "Customers",
      "description": "Customers in the workspace and the work items linked to them.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "list_workitems",
        "manage_workitems"
      ]
    },
    {
      "name": "customer_request",
      "title": "Customer requests",
      "description": "Requests raised by a customer.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete"
      ]
    },
    {
      "name": "customer_property",
      "title": "Customer properties",
      "description": "Custom properties on customers, and their values.",
      "actions": [
        "list",
        "retrieve",
        "create",
        "update",
        "delete",
        "get_values",
        "set_values"
      ]
    },
    {
      "name": "get_pql_reference",
      "title": "PQL reference",
      "description": "Plane Query Language syntax reference. Call this before composing a `pql` filter. Takes `detail`: `full` or `brief`, and has no `action` parameter.",
      "actions": []
    }
  ],
  "queryLanguage": {
    "name": "Plane Query Language",
    "abbreviation": "PQL",
    "description": "Filter syntax accepted by the `pql` parameter on workitem list, list_archived and count, and on cycle and module list_workitems. Retrieve the reference with the get_pql_reference tool before composing a filter.",
    "referenceTool": "get_pql_reference",
    "acceptedBy": [
      "workitem list",
      "workitem list_archived",
      "workitem count",
      "cycle list_workitems",
      "module list_workitems"
    ],
    "note": "UUID-backed fields — project, assignee, state, label, cycle, module, type, milestone, creator — need UUIDs. Resolve names before inserting them into a query.",
    "documentationUrl": "https://docs.plane.so/core-concepts/issues/plane-query-language"
  },
  "selfHosted": {
    "supported": true,
    "documentationUrl": "https://developers.plane.so/dev-tools/mcp-server-self-host",
    "note": "Run the server against your own instance by setting PLANE_BASE_URL, or deploy it with Docker Compose or Helm."
  },
  "relatedInterfaces": {
    "restApi": {
      "url": "https://api.plane.so/api/v1",
      "openapiUrl": "https://plane.so/openapi.json",
      "documentationUrl": "https://developers.plane.so/api-reference/introduction"
    }
  },
  "rateLimit": {
    "requests": 60,
    "window": "1m",
    "note": "The MCP server calls the Plane REST API, so the REST rate limit applies to the credential in use.",
    "documentationUrl": "https://developers.plane.so/api-reference/introduction"
  }
}
