Skip to main content
Glama
makeplane

Plane MCP Server

Official
by makeplane

update_cycle

Modify existing project cycles in Plane's project management system by updating fields like start date, end date, progress, and issue statuses using the MCP server's standardized API.

Instructions

Update an existing cycle

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cycle_dataYesThe fields to update on the cycle
cycle_idYesThe uuid identifier of the cycle to update
project_idYesThe uuid identifier of the project containing the cycle

Implementation Reference

  • The async handler function for the update_cycle tool that performs a PATCH request to the Plane API endpoint to update the cycle and returns the JSON response.
    async ({ project_id, cycle_id, cycle_data }) => { const response = await makePlaneRequest( "PATCH", `workspaces/${process.env.PLANE_WORKSPACE_SLUG}/projects/${project_id}/cycles/${cycle_id}/`, cycle_data ); return { content: [ { type: "text", text: JSON.stringify(response, null, 2), }, ], }; }
  • Inline Zod input schema for the update_cycle tool parameters.
    { project_id: z.string().describe("The uuid identifier of the project containing the cycle"), cycle_id: z.string().describe("The uuid identifier of the cycle to update"), cycle_data: CycleSchema.partial().describe("The fields to update on the cycle"), },
  • Zod schema for Cycle object, imported as CycleSchema and used as partial() for the cycle_data parameter in update_cycle.
    export const Cycle = z.object({ archived_at: z.string().datetime({ offset: true }).optional(), backlog_issues: z.number().int().readonly(), cancelled_issues: z.number().int().readonly(), completed_estimates: z.number().readonly(), completed_issues: z.number().int().readonly(), created_at: z.string().datetime({ offset: true }).readonly(), created_by: z.string().uuid().readonly(), deleted_at: z.string().datetime({ offset: true }).readonly(), description: z.string().optional(), end_date: z.string().date().optional().describe("The end date of the cycle of format YYYY-MM-DD"), external_id: z.string().max(255).optional(), external_source: z.string().max(255).optional(), id: z.string().uuid().readonly(), logo_props: z.any().optional(), name: z.string().max(255), owned_by: z.string().uuid().readonly(), progress_snapshot: z.any().optional(), project_id: z.string().uuid().readonly(), sort_order: z.number().optional(), start_date: z.string().date().optional().describe("The start date of the cycle of format YYYY-MM-DD"), started_estimates: z.number().readonly(), started_issues: z.number().int().readonly(), timezone: z.any().optional(), total_estimates: z.number().readonly(), total_issues: z.number().int().readonly(), unstarted_issues: z.number().int().readonly(), updated_at: z.string().datetime({ offset: true }).readonly(), updated_by: z.string().uuid().readonly(), version: z.number().int().gte(-2147483648).lte(2147483647).optional(), view_props: z.any().optional(), workspace: z.string().uuid().readonly(), });
  • Registration of the update_cycle tool via server.tool() within the registerCycleTools function.
    server.tool( "update_cycle", "Update an existing cycle", { project_id: z.string().describe("The uuid identifier of the project containing the cycle"), cycle_id: z.string().describe("The uuid identifier of the cycle to update"), cycle_data: CycleSchema.partial().describe("The fields to update on the cycle"), }, async ({ project_id, cycle_id, cycle_data }) => { const response = await makePlaneRequest( "PATCH", `workspaces/${process.env.PLANE_WORKSPACE_SLUG}/projects/${project_id}/cycles/${cycle_id}/`, cycle_data ); return { content: [ { type: "text", text: JSON.stringify(response, null, 2), }, ], }; } );

Latest Blog Posts

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/makeplane/plane-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server