Plane MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOG_USER_INFO | No | When true, include user info in logs | false |
| PLANE_API_KEY | No | API key for authentication | |
| PLANE_BASE_URL | No | Base URL for Plane API | https://api.plane.so |
| PLANE_ACCESS_TOKEN | No | Access token for authentication (alternative to API key) | |
| PLANE_WORKSPACE_SLUG | No | Workspace slug identifier | |
| PLANE_OAUTH_ALLOWED_REDIRECT_URIS | No | Comma-separated redirect URI patterns appended to the built-in allowlist |
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_projectsA | List projects in a workspace (paginated). Args: cursor: Prior response's next_cursor; omit for first page. per_page: Results per page (1-100, default 100). order_by: Sort field; prefix '-' for descending. Returns: Paginated envelope with full project objects: results + total_count, next_cursor, next_page_results. |
| create_projectA | Create a new project. Args: workspace_slug: The workspace slug identifier name: Project name identifier: Project identifier (e.g., "MP" for "My Project") description: Project description project_lead: UUID of the project lead user default_assignee: UUID of the default assignee user emoji: Emoji for the project cover_image: Cover image URL or asset ID module_view: Enable module view cycle_view: Enable cycle view issue_views_view: Enable issue views view page_view: Enable page view intake_view: Enable intake view guest_view_all_features: Allow guests to view all features archive_in: Days until auto-archive close_in: Days until auto-close timezone: Project timezone external_source: External system source name external_id: External system identifier is_issue_type_enabled: Enable issue types Returns: Created Project object |
| retrieve_projectB | Retrieve a project by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project Returns: Project object |
| update_projectA | Update a project by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project name: Project name description: Project description project_lead: UUID of the project lead user default_assignee: UUID of the default assignee user identifier: Project identifier emoji: Emoji for the project cover_image: Cover image URL or asset ID network: Project visibility (0=secret, 2=public) module_view: Enable module view cycle_view: Enable cycle view issue_views_view: Enable issue views view page_view: Enable page view intake_view: Enable intake view guest_view_all_features: Allow guests to view all features archive_in: Days until auto-archive close_in: Days until auto-close timezone: Project timezone external_source: External system source name external_id: External system identifier is_issue_type_enabled: Enable issue types is_time_tracking_enabled: Enable time tracking default_state: UUID of the default state estimate: Estimate configuration Returns: Updated Project object |
| delete_projectB | Delete a project by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project |
| manage_project_archiveA | Archive or unarchive a project. Archived projects are hidden from active project lists but not deleted. All work items, cycles, and modules are preserved. Args: project_id: UUID of the project archive: True to archive the project, False to unarchive it |
| get_project_worklog_summaryC | Get work log summary for a project. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project Returns: List of ProjectWorklogSummary objects containing work item IDs and durations |
| get_project_membersA | List members of a project (filterable). Optional filters first_name/last_name/email/display_name (case-insensitive contains), role_slug (exact), is_active, is_bot — combined with AND. Args: project_id: UUID of the project. order_by: Sort field; prefix '-' for descending. Returns: Paginated envelope: results (members incl. role, role_slug, is_active, is_bot). Self-hosted Plane returns all members in a single page, so next_page_results is always false. |
| update_project_featuresA | Update features of a project. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project modules: Enable/disable modules feature cycles: Enable/disable cycles feature views: Enable/disable views feature pages: Enable/disable pages feature intakes: Enable/disable intakes feature work_item_types: Enable/disable work item types feature Returns: Updated ProjectFeature object |
| get_project_estimateA | Get the estimate configuration for a project. Returns the active estimate system including its ID, which is required to call list_project_estimate_points. Args: project_id: UUID of the project Returns: Estimate object with id, name, and type fields |
| list_project_estimate_pointsA | List all valid estimate points for a project. Use this to discover the available estimate point UUIDs before calling update_work_item with an estimate_point value. Each EstimatePoint has an id (UUID to pass to update_work_item) and a value (display label such as "1", "2", "3", "5", "8" or "XS", "S", "M", "L", "XL"). Workflow: 1. Call get_project_estimate to get the estimate_id 2. Call list_project_estimate_points with that estimate_id 3. Pick the EstimatePoint whose value matches the user's intent 4. Pass that EstimatePoint.id to update_work_item(estimate_point=...) Args: project_id: UUID of the project estimate_id: UUID of the estimate (from get_project_estimate) Returns: List of EstimatePoint objects, each with id and value fields |
| create_project_estimateA | Create a new estimate for a project. Args: project_id: UUID of the project name: Name of the estimate (e.g., "Story Points", "T-Shirt Sizes") type: Estimate type — "categories", "points", or "time" description: Optional description last_used: Whether this becomes the active estimate (default True) external_id: External system identifier external_source: External system source name Returns: Created Estimate object |
| update_project_estimateB | Update the estimate for a project. Args: project_id: UUID of the project name: New name for the estimate description: New description external_id: External system identifier external_source: External system source name Returns: Updated Estimate object |
| delete_project_estimateB | Delete the estimate for a project. Args: project_id: UUID of the project |
| link_estimate_to_projectA | Link an estimate to a project, making it the active estimate system. Args: project_id: UUID of the project estimate_id: UUID of the estimate to activate Returns: Updated Project object |
| create_project_estimate_pointsA | Create estimate points for a project estimate. Each point dict may have: value (required, max 20 chars), key (int), description, external_id, external_source. Example: points=[ {"value": "1", "key": 0}, {"value": "2", "key": 1}, {"value": "3", "key": 2}, {"value": "5", "key": 3}, {"value": "8", "key": 4}, ] Args: project_id: UUID of the project estimate_id: UUID of the estimate points: List of point definitions Returns: List of created EstimatePoint objects |
| update_project_estimate_pointA | Update a single estimate point. Args: project_id: UUID of the project estimate_id: UUID of the estimate estimate_point_id: UUID of the estimate point to update value: New display value (max 20 chars, e.g. "XL", "13") key: New sort key (integer) description: New description external_id: External system identifier external_source: External system source name Returns: Updated EstimatePoint object |
| delete_project_estimate_pointA | Delete a single estimate point. Args: project_id: UUID of the project estimate_id: UUID of the estimate estimate_point_id: UUID of the estimate point to delete |
| list_work_itemsA | List work items with optional PQL filtering. Omit project_id to list across the entire workspace. Pass project_id to scope results to a single project. For UUID fields (assignee, state, label, cycle, module, type, milestone) call the relevant list tool first to get the UUID. Args:
project_id: UUID of the project. Omit for workspace-wide results.
pql: PQL filter. See field description for syntax.
order_by: Sort field; prefix Returns: results: Paginated list of work items. total_count: True DB total, not page-bounded — use for counts. next_cursor: Cursor for the next page. prev_cursor: Cursor for the previous page. |
| count_work_itemsA | Count work items across the workspace with optional grouping. Use this for analytics — "how many urgent items?", "distribution by state?" — without fetching full work item payloads. Args: pql: PQL filter to scope the count (e.g. 'priority = "urgent"'). group_by: Dimension to group counts by. Supported values: state_id, state__group, priority, project_id, type_id, labels__id, assignees__id, issue_module__module_id, release_work_items__release_id, cycle_id, milestone_id, created_by, target_date, start_date. sub_group_by: Second dimension for nested grouping (requires group_by). Returns: grouped_by: The group_by field used (null if none). sub_grouped_by: The sub_group_by field used (null if none). total_count: Total matching work items. grouped_counts: Dict of group_key → {count} or {count, sub_grouped_counts} when sub_group_by is set. Keys are UUIDs for FK fields, plain strings for priority/state__group, ISO dates for target_date/start_date, "None" for unset values. |
| create_work_itemA | Create a new work item. Args: project_id: UUID of the project name: Work item name (required) assignees: List of user IDs to assign to the work item labels: List of label IDs to attach to the work item type_id: UUID of the work item type point: Story point value description_html: HTML description of the work item description_stripped: Plain text description. Convenience only — it is wrapped into HTML and stored as description_html (Plane derives description_stripped server-side). Ignored if description_html is set. priority: Priority level (urgent, high, medium, low, none) start_date: Start date (ISO 8601 format) target_date: Target/end date (ISO 8601 format) sort_order: Sort order value is_draft: Whether the work item is a draft external_source: External system source name external_id: External system identifier parent: UUID of the parent work item state: UUID of the state estimate_point: Estimate point value type: Work item type identifier Returns: Created WorkItem object |
| retrieve_work_itemB | Retrieve a work item by ID. Args: project_id: UUID of the project work_item_id: UUID of the work item expand: Comma-separated fields to expand (e.g., "assignees,labels,state") fields: Comma-separated fields to include in response external_id: External system identifier for filtering external_source: External system source name for filtering order_by: Field to order results by Returns: WorkItemDetail object with expanded relationships |
| retrieve_work_item_by_identifierA | Retrieve a work item by its full identifier (project prefix + sequence number). The identifier must be in PROJECT-N format where PROJECT is the project's identifier string and N is the sequence number. Both parts are required. Valid sparse If you need the project UUID from a short identifier like "SHO",
use Args: work_item_identifier: Full work item identifier in PROJECT-N format expand: Comma-separated fields to expand (e.g., "assignees,labels,state") fields: Comma-separated sparse fieldset (see valid values above) external_id: External system identifier for filtering external_source: External system source name for filtering order_by: Field to order results by Returns: WorkItemDetail object with expanded relationships |
| update_work_itemA | Update a work item by ID. Args: project_id: UUID of the project work_item_id: UUID of the work item name: Work item name assignees: List of user IDs to assign to the work item labels: List of label IDs to attach to the work item type_id: UUID of the work item type point: Story point value description_html: HTML description of the work item description_stripped: Plain text description. Convenience only — it is wrapped into HTML and stored as description_html (Plane derives description_stripped server-side). Ignored if description_html is set. priority: Priority level (urgent, high, medium, low, none) start_date: Start date (ISO 8601 format) target_date: Target/end date (ISO 8601 format) sort_order: Sort order value is_draft: Whether the work item is a draft external_source: External system source name external_id: External system identifier parent: UUID of the parent work item state: UUID of the state estimate_point: Estimate point value type: Work item type identifier Returns: Updated WorkItem object |
| delete_work_itemB | Delete a work item by ID. Args: project_id: UUID of the project work_item_id: UUID of the work item |
| manage_work_item_assigneeA | Add or remove a single assignee on a work item without replacing the full list. Provide add_user_id, remove_user_id, or both. If both are given the removal is applied first, then the addition. Already-assigned users in add_user_id are silently skipped. Args: project_id: UUID of the project work_item_id: UUID of the work item add_user_id: UUID of the user to add as assignee remove_user_id: UUID of the user to remove from assignees Returns: Updated WorkItem object |
| manage_work_item_labelA | Add or remove a single label on a work item without replacing the full list. Provide add_label_id, remove_label_id, or both. If both are given the removal is applied first, then the addition. Already-attached labels in add_label_id are silently skipped. Args: project_id: UUID of the project work_item_id: UUID of the work item add_label_id: UUID of the label to add remove_label_id: UUID of the label to remove Returns: Updated WorkItem object |
| list_archived_work_itemsA | List archived work items in a project with optional PQL filtering. Args:
project_id: UUID of the project
pql: PQL filter expression. Omit to list all archived items.
order_by: Field to sort by; prefix with Returns: Paginated envelope with results, total_count, next_cursor, prev_cursor. |
| manage_work_item_archiveA | Archive or unarchive a work item. Only work items in a completed or cancelled state can be archived. Archived work items no longer appear in active work item lists. Args: project_id: UUID of the project work_item_id: UUID of the work item archive: True to archive the work item, False to unarchive it |
| search_work_itemsA | Search work items by text across a workspace. Matches on work item name, sequence id, and project identifier (not
description). For structured filtering (priority, state, assignee,
dates, etc.) use Args: query: Free-text string matched against name, sequence id, and project identifier expand: Comma-separated list of related fields to expand in response fields: Comma-separated list of fields to include in response external_id: External system identifier for filtering external_source: External system source name for filtering order_by: Field to order results by. Prefix with '-' for descending Returns: WorkItemSearch object containing search results |
| list_work_item_activitiesA | List activities for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item params: Optional query parameters as a dictionary Returns: List of WorkItemActivity objects |
| retrieve_work_item_activityA | Retrieve a specific activity for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item activity_id: UUID of the activity Returns: WorkItemActivity object |
| list_work_item_attachmentsA | List all attachments for a work item. Returns metadata for each attachment. To get a downloadable link for a specific attachment, use get_work_item_attachment_download_url. Args: project_id: UUID of the project work_item_id: UUID of the work item Returns: List of attachments, each with: id, name, size, content_type, created_at, created_by. |
| get_work_item_attachment_download_urlA | Get a presigned download URL for a work item attachment. Returns a time-limited URL (typically valid ~1 hour) that can be opened directly in a browser or downloaded with any HTTP client — no Plane authentication required on the URL itself. Use list_work_item_attachments first to get attachment IDs and names. Args: project_id: UUID of the project work_item_id: UUID of the work item attachment_id: UUID of the attachment Returns: Dict with: download_url (presigned S3 URL), attachment_id, name. |
| upload_work_item_attachment_from_urlA | Fetch a file from a public URL and attach it to a work item. The MCP server downloads the file server-side and uploads it to Plane via the standard three-step presigned S3 flow. The source URL must be publicly accessible without authentication and must not resolve to a private/internal network address. Args: project_id: UUID of the project work_item_id: UUID of the work item url: Publicly accessible URL of the file to attach (e.g. a GitHub raw URL, public S3 link, or direct download link) name: Override the filename. Defaults to the filename in the URL path. Returns: Created attachment metadata: id, name, size, content_type. |
| delete_work_item_attachmentA | Delete an attachment from a work item. Use list_work_item_attachments to get the attachment_id. Args: project_id: UUID of the project work_item_id: UUID of the work item attachment_id: UUID of the attachment to delete |
| read_work_item_attachmentA | Fetch an attachment's content so the LLM can read or analyze it. Supported file types: Images (returned as vision-readable image, max 5 MB): PNG, JPEG, GIF, WEBP Text (returned as a string, max 1 MB): TXT, MD, CSV, HTML, XML, YAML, JSON Not supported (use get_work_item_attachment_download_url instead): PDF — requires a text-extraction library (not installed) DOCX/XLSX/PPTX — binary Office formats, require extraction Audio / Video — non-textual binary formats Generic binary — executables, archives, etc. Args: project_id: UUID of the project work_item_id: UUID of the work item attachment_id: UUID of the attachment Returns: Image object for image files, plain string for text files. Raises: ValueError: If the file type is unsupported or the file exceeds the size limit for its category. |
| list_work_item_commentsB | List comments for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item params: Optional query parameters as a dictionary Returns: List of WorkItemComment objects |
| retrieve_work_item_commentA | Retrieve a specific comment for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item comment_id: UUID of the comment Returns: WorkItemComment object |
| create_work_item_commentA | Create a comment for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item comment_html: Comment content in HTML format comment_json: Comment content in JSON format access: Access level for the comment (INTERNAL or EXTERNAL) external_source: External system source name external_id: External system identifier Returns: Created WorkItemComment object |
| update_work_item_commentB | Update a comment for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item comment_id: UUID of the comment comment_html: Comment content in HTML format comment_json: Comment content in JSON format access: Access level for the comment (INTERNAL or EXTERNAL) external_source: External system source name external_id: External system identifier Returns: Updated WorkItemComment object |
| delete_work_item_commentA | Delete a comment for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item comment_id: UUID of the comment |
| list_work_item_linksC | List links for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item params: Optional query parameters as a dictionary Returns: List of WorkItemLink objects |
| retrieve_work_item_linkA | Retrieve a specific link for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item link_id: UUID of the link Returns: WorkItemLink object |
| create_work_item_linkB | Create a link for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item url: URL of the link Returns: Created WorkItemLink object |
| update_work_item_linkB | Update a link for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item link_id: UUID of the link url: Updated URL of the link Returns: Updated WorkItemLink object |
| delete_work_item_linkB | Delete a link for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item link_id: UUID of the link |
| list_work_item_relation_definitionsA | List every relation type usable with create_work_item_relation. Match the user's wording against an entry here before creating a relation. built_in_dependencies are fixed scheduling/blocking types; custom_definitions are workspace-specific, each with an outward and inward label. custom_definitions are also what create/update/delete_work_item_relation_definition manage. Args: is_default: Filter custom definitions to default/non-default only. is_active: Filter custom definitions to active/inactive only. Returns: built_in_dependencies: relation_type values for the dependency path. custom_definitions: workspace definitions; use the id plus the matched outward or inward label. |
| create_work_item_relation_definitionA | Create a new workspace relation definition. A relation definition describes a named relationship type with an outward label (how the source item describes the target) and an inward label (how the target item describes the source). Args: name: Unique name for this relation definition. outward: Label describing the relation from the source item's perspective. inward: Label describing the relation from the target item's perspective. is_active: Whether this definition is active and available for use. color: Hex color code for UI display. Returns: Created WorkItemRelationDefinition object. |
| update_work_item_relation_definitionA | Update an existing workspace relation definition. Args: definition_id: UUID of the relation definition to update. name: New name for this definition. outward: Updated outward label. inward: Updated inward label. is_active: Updated active status. color: Updated hex color code. Returns: Updated WorkItemRelationDefinition object. |
| delete_work_item_relation_definitionA | Delete a workspace relation definition. Args: definition_id: UUID of the relation definition to delete. |
| list_work_item_relationsB | List every relation for a work item. Args: project_id: UUID of the project. work_item_id: UUID of the work item. Returns: dependencies: Built-in dependencies grouped by the six directions. custom: Custom relations grouped by definition label. |
| create_work_item_relationA | Relate a work item to one or more targets. Always call list_work_item_relation_definitions first and match the user's wording to an entry there. If it is a built_in_dependencies value, pass it as relation_type. If it is a custom_definitions entry, pass that definition's id as relation_definition_id and the matched outward/inward label as relation_definition_label (the label sets directionality). Args: project_id: UUID of the project. work_item_id: UUID of the source work item. work_item_ids: UUIDs of the target work items. relation_type: A built_in_dependencies value, or None for a custom relation. relation_definition_id: UUID of the relation definition (custom relations). relation_definition_label: Definition's outward or inward label (custom relations). Returns: List of created WorkItemWithRelationType objects. |
| remove_work_item_relationA | Remove ONE relation between two work items. A built-in dependency and a custom relation are removed independently — removing one leaves the other intact. Set is_dependency from the relation the user named (see list_work_item_relations): True for a built-in dependency (blocking, blocked_by, start/finish ordering), False for a custom relation. Args: project_id: UUID of the project. work_item_id: UUID of the source work item. related_work_item_id: UUID of the related work item. is_dependency: True to remove a built-in dependency, False to remove a custom relation. |
| list_work_logsB | List work logs for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item params: Optional query parameters as a dictionary Returns: List of WorkItemWorkLog objects |
| create_work_logA | Create a work log for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item duration: Duration of work in minutes description: Description of the work performed Returns: Created WorkItemWorkLog object |
| update_work_logA | Update a work log for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item work_log_id: UUID of the work log duration: Duration of work in minutes description: Description of the work performed Returns: Updated WorkItemWorkLog object |
| delete_work_logA | Delete a work log for a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item work_log_id: UUID of the work log |
| list_cyclesA | List cycles in a project. Active (non-archived) cycles by default. Args: project_id: UUID of the project archived: Set True to list archived cycles instead of active ones. status: Filter active cycles by status — "current" (running now), "upcoming" (starts later), "completed" (ended), "draft" (no dates), or "incomplete" (not yet finished). Ignored when archived is True. cursor: Pagination cursor from a previous response's next_cursor (form "{per_page}:{page}:{offset}"). Omit for the first page. per_page: Number of results per page (1-100). order_by: Field to order results by. Prefix with '-' for descending. Returns: Paginated envelope: results (cycles) + total_count, next_cursor, next_page_results. |
| create_cycleB | Create a new cycle. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project name: Cycle name owned_by: UUID of the user who owns the cycle description: Cycle description start_date: Cycle start date (ISO 8601 format) end_date: Cycle end date (ISO 8601 format) external_source: External system source name external_id: External system identifier timezone: Cycle timezone Returns: Created Cycle object |
| retrieve_cycleA | Retrieve a cycle by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project cycle_id: UUID of the cycle Returns: Cycle object |
| update_cycleA | Update a cycle by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project cycle_id: UUID of the cycle name: Cycle name description: Cycle description start_date: Cycle start date (ISO 8601 format) end_date: Cycle end date (ISO 8601 format) owned_by: UUID of the user who owns the cycle external_source: External system source name external_id: External system identifier timezone: Cycle timezone Returns: Updated Cycle object |
| delete_cycleC | Delete a cycle by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project cycle_id: UUID of the cycle |
| manage_cycle_work_itemsA | Add or remove work items on a cycle in a single call. At least one of add_ids or remove_ids must be provided. Args: project_id: UUID of the project cycle_id: UUID of the cycle add_ids: UUIDs of work items to add to the cycle remove_ids: UUIDs of work items to remove from the cycle |
| list_cycle_work_itemsA | List work items in a cycle with optional PQL filtering. Args:
project_id: UUID of the project
cycle_id: UUID of the cycle
pql: PQL filter expression. See field description for syntax.
Omit to list all items in the cycle.
order_by: Field to sort by; prefix with Returns: Paginated envelope with results, total_count, next_cursor, prev_cursor. |
| transfer_cycle_work_itemsC | Transfer work items from one cycle to another. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project cycle_id: UUID of the source cycle new_cycle_id: UUID of the target cycle to transfer issues to |
| manage_cycle_archiveA | Archive or unarchive a cycle. Plane requires the cycle end_date to be in the past before archiving. When archive=True, this tool automatically sets end_date to today if the cycle is still active (end_date is missing or in the future), then archives it. Args: project_id: UUID of the project cycle_id: UUID of the cycle archive: True to archive the cycle, False to unarchive it Returns: True if the operation completed successfully |
| complete_cycleA | Complete (close) a cycle by setting its end date to today. Plane has no explicit "complete" action — a cycle is considered complete when its end_date is in the past. This tool sets end_date to today, effectively closing the cycle. Args: project_id: UUID of the project cycle_id: UUID of the cycle to complete Returns: Updated Cycle object |
| get_meA | Get current user information. Returns: UserLite object containing current user information |
| list_modulesA | List modules in a project. Args: project_id: UUID of the project archived: Set True to list archived modules instead of active ones. cursor: Pagination cursor from a previous response's next_cursor (form "{per_page}:{page}:{offset}"). Omit for the first page. per_page: Number of results per page (1-100). order_by: Field to order results by. Prefix with '-' for descending. Returns: Paginated envelope: results (modules) + total_count, next_cursor, next_page_results. |
| create_moduleC | Create a new module. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project name: Module name description: Module description start_date: Module start date (ISO 8601 format) target_date: Module target/end date (ISO 8601 format) status: Module status (backlog, planned, in-progress, paused, completed, cancelled) lead: UUID of the user who leads the module members: List of user IDs who are members of the module external_source: External system source name external_id: External system identifier Returns: Created Module object |
| retrieve_moduleA | Retrieve a module by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project module_id: UUID of the module Returns: Module object |
| update_moduleB | Update a module by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project module_id: UUID of the module name: Module name description: Module description start_date: Module start date (ISO 8601 format) target_date: Module target/end date (ISO 8601 format) status: Module status (backlog, planned, in-progress, paused, completed, cancelled) lead: UUID of the user who leads the module members: List of user IDs who are members of the module external_source: External system source name external_id: External system identifier Returns: Updated Module object |
| delete_moduleC | Delete a module by ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project module_id: UUID of the module |
| manage_module_work_itemsA | Add or remove work items on a module in a single call. At least one of add_ids or remove_ids must be provided. Args: project_id: UUID of the project module_id: UUID of the module add_ids: UUIDs of work items to add to the module remove_ids: UUIDs of work items to remove from the module |
| list_module_work_itemsA | List work items in a module with optional PQL filtering. Args:
project_id: UUID of the project
module_id: UUID of the module
pql: PQL filter expression. See field description for syntax.
Omit to list all items in the module.
order_by: Field to sort by; prefix with Returns: Paginated envelope with results, total_count, next_cursor, prev_cursor. |
| manage_module_archiveA | Archive or unarchive a module. Args: project_id: UUID of the project module_id: UUID of the module archive: True to archive the module, False to unarchive it |
| list_initiativesA | List all initiatives in a workspace. Args: params: Optional query parameters as a dictionary (e.g., per_page, cursor) Returns: List of Initiative objects Raises: ToolError: if the initiatives feature is disabled. When disabled, initiatives are "Initiative" work items — the error gives the steps. |
| create_initiativeA | Create a new initiative in the workspace. Args: name: Initiative name description_html: HTML description of the initiative start_date: Initiative start date (ISO 8601 format) end_date: Initiative end date (ISO 8601 format) logo_props: Logo properties dictionary state: Initiative state (DRAFT, PLANNED, ACTIVE, COMPLETED, CLOSED) lead: UUID of the user who leads the initiative Returns: Created Initiative object Raises: ToolError: if the workspace's initiatives feature is disabled. Native initiatives require the feature to be enabled in workspace settings. When disabled, create an "Initiative" work item instead — the error message gives the exact steps. |
| retrieve_initiativeA | Retrieve an initiative by ID. Args: initiative_id: UUID of the initiative Returns: Initiative object Raises: ToolError: if the initiatives feature is disabled. When disabled, the initiative is an "Initiative" work item — the error gives the steps. |
| update_initiativeA | Update an initiative by ID. Args: initiative_id: UUID of the initiative name: Initiative name description_html: HTML description of the initiative start_date: Initiative start date (ISO 8601 format) end_date: Initiative end date (ISO 8601 format) logo_props: Logo properties dictionary state: Initiative state (DRAFT, PLANNED, ACTIVE, COMPLETED, CLOSED) lead: UUID of the user who leads the initiative Returns: Updated Initiative object Raises: ToolError: if the initiatives feature is disabled. When disabled, the initiative is an "Initiative" work item — the error gives the steps. |
| delete_initiativeA | Delete an initiative by ID. Args: initiative_id: UUID of the initiative Raises: ToolError: if the initiatives feature is disabled. When disabled, the initiative is an "Initiative" work item — the error gives the steps. |
| list_initiative_projectsA | List projects linked to an initiative. Args: initiative_id: UUID of the initiative params: Optional query parameters (e.g., per_page, cursor) Returns: List of linked Project objects |
| manage_initiative_projectsA | Link or unlink projects of an initiative. Use list_initiative_projects to read. Args: initiative_id: UUID of the initiative action: "add" to link the projects, "remove" to unlink them project_ids: Project UUIDs to link/unlink Returns: The initiative's linked projects after the operation |
| list_intake_work_itemsA | List all intake work items in a project. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project params: Optional query parameters as a dictionary (e.g., per_page, cursor) Returns: List of IntakeWorkItem objects |
| create_intake_work_itemC | Create a new intake work item in a project. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project data: Intake work item data as a dictionary Returns: Created IntakeWorkItem object |
| retrieve_intake_work_itemB | Retrieve an intake work item by work item ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project work_item_id: UUID of the work item (use the issue field from IntakeWorkItem response, not the intake work item ID) params: Optional query parameters as a dictionary (e.g., expand, fields) Returns: IntakeWorkItem object |
| update_intake_work_itemA | Update an intake work item, including triage status. Status values: -2 = pending (default/unreviewed) -1 = declined 0 = snoozed (requires snoozed_till date) 1 = accepted (converts intake item to active work item) 2 = duplicate (requires duplicate_to work item ID) Args: project_id: UUID of the project work_item_id: UUID of the work item (use the issue field from IntakeWorkItem response, not the intake work item ID) status: Triage status (-2=pending, -1=declined, 0=snoozed, 1=accepted, 2=duplicate) snoozed_till: ISO 8601 date string, required when status=0 duplicate_to: UUID of the work item this duplicates, required when status=2 source: Source identifier source_email: Source email address Returns: Updated IntakeWorkItem object |
| delete_intake_work_itemB | Delete an intake work item by work item ID. Args: workspace_slug: The workspace slug identifier project_id: UUID of the project work_item_id: UUID of the work item (use the issue field from IntakeWorkItem response, not the intake work item ID) |
| list_labelsA | List all labels in a project. Args: project_id: UUID of the project params: Optional query parameters as a dictionary Returns: List of Label objects |
| create_labelA | Create a new label. Args: project_id: UUID of the project name: Label name color: Label color (hex color code) description: Label description parent: UUID of the parent label (for nested labels) sort_order: Sort order for the label external_source: External system source name external_id: External system identifier Returns: Created Label object |
| retrieve_labelA | Retrieve a label by ID. Args: project_id: UUID of the project label_id: UUID of the label Returns: Label object |
| update_labelB | Update a label by ID. Args: project_id: UUID of the project label_id: UUID of the label name: Label name color: Label color (hex color code) description: Label description parent: UUID of the parent label (for nested labels) sort_order: Sort order for the label external_source: External system source name external_id: External system identifier Returns: Updated Label object |
| delete_labelB | Delete a label by ID. Args: project_id: UUID of the project label_id: UUID of the label |
| list_pagesA | List pages. Lists a project's pages if project_id is given, otherwise workspace-level pages. Args: project_id: UUID of the project. Omit to list workspace pages. params: Optional query parameters as a dictionary (e.g., per_page, cursor) Returns: List of Page objects |
| attach_page_to_work_itemB | Link a page to a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item page_id: UUID of the page to link Returns: WorkItemPage link object |
| list_work_item_pagesA | List all pages linked to a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item Returns: List of WorkItemPage link objects |
| detach_page_from_work_itemA | Remove a page link from a work item. Args: project_id: UUID of the project work_item_id: UUID of the work item work_item_page_id: UUID of the work item page link (not the page ID) |
| retrieve_pageA | Retrieve a page by ID. Retrieves a project page if project_id is given, otherwise a workspace page. Args: page_id: UUID of the page project_id: UUID of the project. Omit for a workspace page. Returns: Page object |
| create_pageA | Create a page. Creates a project page if project_id is given, otherwise a workspace-level page. Args: name: Page name description_html: Page content in HTML format project_id: UUID of the project. Omit to create a workspace page. access: Access level for the page (integer) color: Page color is_locked: Whether the page is locked archived_at: Archive timestamp (ISO 8601 format) view_props: View properties dictionary logo_props: Logo properties dictionary external_id: External system identifier external_source: External system source name Returns: Created Page object |
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/leigangzhang/plane-mcp-server-adapter'
If you have feedback or need assistance with the MCP directory API, please join our Discord server