Skip to main content
Glama
kydycode

Enhanced Todoist MCP Server Extended

todoist_create_label

Create custom labels in Todoist to organize tasks by category, priority, or context using name, color, favorites, and ordering options.

Instructions

Create a new label.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the label.
colorNoLabel color name or code (e.g., 'berry_red', '#FF0000') (optional).
isFavoriteNoWhether the label should be a favorite (optional).
orderNoThe order of the label in the list (optional).

Implementation Reference

  • Handler implementation for todoist_create_label tool. Validates input with isCreateLabelArgs type guard, calls todoistClient.addLabel(args), formats response using formatLabel helper, and handles errors.
    if (name === "todoist_create_label") {
      if (!isCreateLabelArgs(args)) {
        return { content: [{ type: "text", text: "Invalid arguments for create_label" }], isError: true };
      }
      try {
        const label = await todoistClient.addLabel(args);
        return { 
          content: [{ type: "text", text: `Label created:\n${formatLabel(label)}` }], 
          isError: false 
        };
      } catch (error: any) {
        return { content: [{ type: "text", text: `Error creating label: ${error.message}` }], isError: true };
      }
    }
  • Tool schema definition for todoist_create_label, including input schema with required 'name' and optional color, isFavorite, order.
    const CREATE_LABEL_TOOL: Tool = {
      name: "todoist_create_label",
      description: "Create a new label.",
      inputSchema: {
        type: "object",
        properties: {
          name: { type: "string", description: "The name of the label." },
          color: { type: "string", description: "Label color name or code (e.g., 'berry_red', '#FF0000') (optional)." },
          isFavorite: { type: "boolean", description: "Whether the label should be a favorite (optional)." },
          order: { type: "number", description: "The order of the label in the list (optional)." }
        },
        required: ["name"]
      }
    };
  • src/index.ts:1083-1121 (registration)
    Registration of all tools including todoist_create_label via CREATE_LABEL_TOOL in the ListToolsRequestSchema handler's tools array.
    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 isCreateLabelArgs used to validate input arguments for the todoist_create_label handler.
    function isCreateLabelArgs(args: unknown): args is {
      name: string;
      color?: string;
      isFavorite?: boolean;
      order?: number;
    } {
      return (
        typeof args === "object" &&
        args !== null &&
        "name" in args &&
        typeof (args as { name: string }).name === "string"
      );
    }
  • Helper function formatLabel used to format the output of created/updated labels in responses.
    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}`: ''}`;
    }

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