Skip to main content
Glama
kydycode

Enhanced Todoist MCP Server Extended

todoist_get_sections

Retrieve sections from Todoist projects, with options to filter by project ID and manage pagination for organized task management.

Instructions

Get all sections, or sections for a specific project. Supports pagination.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectIdNoFilter sections by project ID (optional).
cursorNoPagination cursor for next page (optional).
limitNoMaximum number of sections to return (default: 50) (optional).

Implementation Reference

  • The main handler logic for executing the 'todoist_get_sections' tool. It validates arguments using isSectionArgs, calls todoistClient.getSections with optional projectId, cursor, limit parameters, formats the results into a readable list, and handles pagination cursor.
    if (name === "todoist_get_sections") {
      if (!isSectionArgs(args)) {
        throw new Error("Invalid arguments for todoist_get_sections");
      }
      
      const params: any = {};
      if (args.projectId) params.projectId = args.projectId;
      if (args.cursor) params.cursor = args.cursor;
      if (args.limit) params.limit = args.limit;
    
      const sectionsResponse = await todoistClient.getSections(params);
      
      const sectionList = sectionsResponse.results?.map((section: any) => 
        `- ${section.name} (ID: ${section.id}, Project ID: ${section.projectId})`
      ).join('\n') || 'No sections found';
      
      const nextCursorMessage = sectionsResponse.nextCursor ? `\n\nNext cursor for more sections: ${sectionsResponse.nextCursor}` : '';
      
      return {
        content: [{ 
          type: "text", 
          text: `Sections:\n${sectionList}${nextCursorMessage}` 
        }],
        isError: false,
      };
    }
  • The Tool object definition including name, description, and inputSchema for 'todoist_get_sections'.
    const GET_SECTIONS_TOOL: Tool = {
      name: "todoist_get_sections",
      description: "Get all sections, or sections for a specific project. Supports pagination.",
      inputSchema: {
        type: "object",
        properties: {
          projectId: {
            type: "string",
            description: "Filter sections by project ID (optional)."
          },
          cursor: {
            type: "string",
            description: "Pagination cursor for next page (optional)."
          },
          limit: {
            type: "number",
            description: "Maximum number of sections to return (default: 50) (optional)."
          }
        }
      }
    };
  • src/index.ts:1083-1121 (registration)
    Registration of the todoist_get_sections tool (as GET_SECTIONS_TOOL) in the list of tools returned by ListToolsRequestSchema handler.
    server.setRequestHandler(ListToolsRequestSchema, async () => ({
      tools: [
        // Task tools
        CREATE_TASK_TOOL,
        QUICK_ADD_TASK_TOOL,
        GET_TASKS_TOOL,
        GET_TASK_TOOL,
        UPDATE_TASK_TOOL,
        DELETE_TASK_TOOL,
        COMPLETE_TASK_TOOL,
        REOPEN_TASK_TOOL,
        SEARCH_TASKS_TOOL,
        MOVE_TASK_TOOL,
        BULK_MOVE_TASKS_TOOL,
        // Project tools
        GET_PROJECTS_TOOL,
        GET_PROJECT_TOOL,
        CREATE_PROJECT_TOOL,
        UPDATE_PROJECT_TOOL,
        DELETE_PROJECT_TOOL,
        // Section tools
        GET_SECTIONS_TOOL,
        CREATE_SECTION_TOOL,
        UPDATE_SECTION_TOOL,
        DELETE_SECTION_TOOL,
        // Label tools
        CREATE_LABEL_TOOL,
        GET_LABEL_TOOL,
        GET_LABELS_TOOL,
        UPDATE_LABEL_TOOL,
        DELETE_LABEL_TOOL,
        // Comment tools
        CREATE_COMMENT_TOOL,
        GET_COMMENT_TOOL,
        GET_COMMENTS_TOOL,
        UPDATE_COMMENT_TOOL,
        DELETE_COMMENT_TOOL,
      ],
    }));
  • Type guard helper function isSectionArgs used in the handler to validate input arguments for todoist_get_sections.
    function isSectionArgs(args: unknown): args is {
      projectId?: string;
      cursor?: string;
      limit?: number;
    } {
      // Allows empty object or object with optional projectId, cursor, limit
      return typeof args === "object" && args !== null;
    }

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/kydycode/todoist-mcp-server-ext'

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