Skip to main content
Glama

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

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • 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, }; }
  • 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, ], }));
  • 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) }` ); } }

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

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