Skip to main content
Glama
kydycode

Enhanced Todoist MCP Server Extended

todoist_get_labels

Retrieve all labels from Todoist with pagination support to manage and organize tasks efficiently.

Instructions

Get all labels. Supports pagination.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor for next page (optional).
limitNoMaximum number of labels to return (default: 50) (optional).

Implementation Reference

  • Handler implementation for 'todoist_get_labels' tool. Validates args with isGetLabelsArgs, calls todoistClient.getLabels(params), formats results using formatLabel, handles pagination cursor, and returns formatted text response.
    if (name === "todoist_get_labels") { if (!isGetLabelsArgs(args)) { return { content: [{ type: "text", text: "Invalid arguments for get_labels. This tool takes an optional cursor and limit." }], isError: true }; } try { const params: any = {}; if (args.cursor) params.cursor = args.cursor; if (args.limit) params.limit = args.limit; const labelsResponse = await todoistClient.getLabels(params); const labelList = labelsResponse.results?.map(formatLabel).join('\n\n') || 'No labels found'; const nextCursor = labelsResponse.nextCursor ? `\n\nNext cursor for more labels: ${labelsResponse.nextCursor}` : ''; return { content: [{ type: "text", text: `Labels:\n${labelList}${nextCursor}` }], isError: false }; } catch (error: any) { return { content: [{ type: "text", text: `Error getting labels: ${error.message}` }], isError: true }; } }
  • Tool schema definition for 'todoist_get_labels', specifying input schema with optional cursor and limit for pagination.
    const GET_LABELS_TOOL: Tool = { name: "todoist_get_labels", description: "Get all labels. Supports pagination.", inputSchema: { type: "object", properties: { cursor: { type: "string", description: "Pagination cursor for next page (optional)." }, limit: { type: "number", description: "Maximum number of labels to return (default: 50) (optional)." } } } };
  • src/index.ts:1083-1121 (registration)
    Registration of all tools including 'todoist_get_labels' (as GET_LABELS_TOOL) in the ListToolsRequestSchema handler, making it discoverable by MCP clients.
    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, ], }));
  • Helper function formatLabel used in the get_labels handler to format individual label details for output.
    function formatLabel(label: any): string { return `- ${label.name} (ID: ${label.id})${label.color ? `\n Color: ${label.color}` : ''}${label.isFavorite ? `\n Favorite: Yes` : ''}${label.order ? `\n Order: ${label.order}`: ''}`; }
  • Type guard helper isGetLabelsArgs for validating optional cursor and limit arguments in the todoist_get_labels handler.
    function isGetLabelsArgs(args: unknown): args is { cursor?: string; limit?: number; } { 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