Skip to main content
Glama

list-issues

Retrieve and filter project issues from Plane.so by project ID, with options to sort by state, priority, assignee, and limit results.

Instructions

List issues from a project

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idYesID of the project to get issues from
state_idNoFilter by state ID (optional)
priorityNoFilter by priority (optional)
assignee_idNoFilter by assignee ID (optional)
limitNoMaximum number of issues to return (default: 50)

Implementation Reference

  • The switch case handler for executing the 'list-issues' tool. It validates the project_id, builds a query string from optional filters (state_id, priority, assignee_id, limit), calls the Plane API endpoint /projects/{project_id}/issues/ with the query, and returns the JSON response.
    case "list-issues": {
      if (!args || typeof args.project_id !== "string") {
        throw new Error("Project ID is required");
      }
      const { project_id, ...queryParams } = args;
    
      // Build query string from other parameters
      const queryString = Object.entries(queryParams)
        .filter(([_, value]) => value !== undefined)
        .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)
        .join("&");
    
      const endpoint = `/projects/${project_id}/issues/${
        queryString ? `?${queryString}` : ""
      }`;
      const issues = await callPlaneAPI(endpoint, "GET");
    
      return {
        content: [{ type: "text", text: JSON.stringify(issues, null, 2) }],
        isError: false,
      };
    }
  • The Tool object definition for 'list-issues', specifying name, description, and inputSchema with required project_id and optional filters for state, priority, assignee, and limit.
    const LIST_ISSUES_TOOL: Tool = {
      name: "list-issues",
      description: "List issues from a project",
      inputSchema: {
        type: "object",
        properties: {
          project_id: {
            type: "string",
            description: "ID of the project to get issues from",
          },
          state_id: {
            type: "string",
            description: "Filter by state ID (optional)",
          },
          priority: {
            type: "string",
            description: "Filter by priority (optional)",
            enum: ["urgent", "high", "medium", "low", "none"],
          },
          assignee_id: {
            type: "string",
            description: "Filter by assignee ID (optional)",
          },
          limit: {
            type: "number",
            description: "Maximum number of issues to return (default: 50)",
          },
        },
        required: ["project_id"],
      },
    };
  • src/index.ts:262-271 (registration)
    Registration of available tools in the ListToolsRequestSchema handler, including the LIST_ISSUES_TOOL in the tools array returned to clients.
    server.setRequestHandler(ListToolsRequestSchema, async () => ({
      tools: [
        LIST_PROJECTS_TOOL,
        GET_PROJECT_TOOL,
        CREATE_ISSUE_TOOL,
        LIST_ISSUES_TOOL,
        GET_ISSUE_TOOL,
        UPDATE_ISSUE_TOOL,
      ],
    }));

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