list-projects
Retrieve all projects in your Plane workspace to view and manage project details for improved organization and workflow oversight.
Instructions
List all projects in the workspace
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/index.ts:283-289 (handler)Handler for the list-projects tool: calls Plane API to GET /projects/ and returns formatted JSON response.
case "list-projects": { const projects = await callPlaneAPI("/projects/", "GET"); return { content: [{ type: "text", text: JSON.stringify(projects, null, 2) }], isError: false, }; } - src/index.ts:31-39 (schema)Tool schema definition for list-projects: name, description, and empty input schema (no parameters required).
const LIST_PROJECTS_TOOL: Tool = { name: "list-projects", description: "List all projects in the workspace", inputSchema: { type: "object", properties: {}, required: [], }, }; - src/index.ts:262-271 (registration)Registration of the list-projects tool in the ListToolsRequestHandler, exposing it in the tools list.
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ LIST_PROJECTS_TOOL, GET_PROJECT_TOOL, CREATE_ISSUE_TOOL, LIST_ISSUES_TOOL, GET_ISSUE_TOOL, UPDATE_ISSUE_TOOL, ], })); - src/index.ts:198-246 (helper)Shared helper function callPlaneAPI used by list-projects handler to make authenticated API calls to Plane.
async function callPlaneAPI( endpoint: string, method: string, body?: any ): Promise<any> { const baseUrl = `${PLANE_HOST}/api/v1/workspaces/${PLANE_WORKSPACE_SLUG}`; const url = `${baseUrl}${endpoint}`; const options: RequestInit = { method, headers: { "Content-Type": "application/json", "X-API-Key": PLANE_API_KEY as string, }, }; if (body && (method === "POST" || method === "PATCH")) { options.body = JSON.stringify(body); } try { const response = await fetch(url, options); if (!response.ok) { let errorText; try { errorText = await response.text(); } catch (parseError) { errorText = "Unable to parse error response"; } throw new Error( `Plane API error: ${response.status} ${response.statusText}\n${errorText}` ); } // For DELETE requests that return 204 No Content if (response.status === 204) { return { success: true }; } return await response.json(); } catch (error) { throw new Error( `Error calling Plane API: ${ error instanceof Error ? error.message : String(error) }` ); } }