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
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for next page (optional). | |
| limit | No | Maximum number of labels to return (default: 50) (optional). |
Implementation Reference
- src/index.ts:1565-1588 (handler)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 }; } }
- src/index.ts:317-333 (schema)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, ], }));
- src/index.ts:727-729 (helper)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}`: ''}`; }
- src/index.ts:994-999 (helper)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; }