Skip to main content
Glama

things_get_inbox

Retrieve all pending to-do items from your Things 3 Inbox to review and organize tasks for better productivity management.

Instructions

Get all to-dos in the Inbox

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
max_resultsNoLimit number of results returned (defaults to all if not specified)

Implementation Reference

  • src/tools/get.ts:11-15 (registration)
    The 'things_get_inbox' tool is registered within the 'GetToolHandler' class in the 'definitions' array.
    {
      name: 'things_get_inbox',
      description: 'Get all to-dos in the Inbox',
      schema: GetListSchema
    },
  • The 'execute' method handles the execution of all tools in this class, including 'things_get_inbox'. It maps the tool to a script named 'get-inbox' and executes it via AppleScript.
    async execute(toolName: string, params: GetParams): Promise<string> {
      let scriptName: string;
      
      // Handle the get_list tool separately
      if (toolName === 'things_get_list') {
        const listParams = params as z.infer<typeof GetListByNameSchema>;
        scriptName = this.listNameToScript[listParams.list];
        if (!scriptName) {
          throw new Error(`Unknown list: ${listParams.list}`);
        }
      } else {
        scriptName = this.scriptMap[toolName];
        if (!scriptName) {
          throw new Error(`Unknown tool: ${toolName}`);
        }
      }
      
      let scriptArgs: string[] = [];
      const options = { maxResults: (params as any).max_results };
      
      // Handle specific tools that need arguments
      if (toolName === 'things_get_project') {
        const projectParams = params as z.infer<typeof GetProjectSchema>;
        scriptArgs = [projectParams.project_id];
      } else if (toolName === 'things_get_area') {
        const areaParams = params as z.infer<typeof GetAreaSchema>;
        scriptArgs = [areaParams.area_id];
      } else if (toolName === 'things_get_todo_details') {
        const todoParams = params as z.infer<typeof GetTodoDetailsSchema>;
        scriptArgs = [todoParams.id];
        // Don't pass maxResults for todo details since it's a single item
        delete options.maxResults;
      }
      
      const output = await executeAppleScriptFile(scriptName, scriptArgs, options);
      
      // Return empty array for empty output
      if (!output.trim()) {
        const emptyResult = toolName.includes('project') || toolName.includes('area') 
          ? { todos: [] }
          : { [this.getResultKey(toolName)]: [] };
        return JSON.stringify(emptyResult, null, 2);
      }
      
      // Parse based on tool type
      let result;
      switch (toolName) {
        case 'things_get_projects':
          result = { projects: parseProjectList(output) };
          break;
        case 'things_get_areas':
          result = { areas: parseAreaList(output) };
          break;
        case 'things_get_tags':
          result = { tags: parseTagList(output) };
          break;
        case 'things_get_todo_details':
          result = parseTodoDetails(output);
          break;
        default:
          result = { todos: parseTodoList(output) };
      }
      
      return JSON.stringify(result, null, 2);
    }
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It fails to indicate whether this is a read-only operation (though implied by 'Get'), what happens if the inbox is empty, or whether results are paginated. The phrase 'all to-dos' suggests completeness but doesn't clarify interaction with the max_results parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at five words. It is front-loaded with the action verb and wastes no space. However, given the lack of annotations and the presence of many siblings, this brevity comes at the cost of necessary context, preventing a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations, no output schema, and a crowded namespace of 16 sibling tools with similar purposes, the description is insufficient. It does not explain the return structure, the concept of the Inbox in Things (uncategorized items), or provide selection criteria to help the agent choose this over things_get_list or other views.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the max_results parameter ('Limit number of results returned'). The description adds no parameter-specific context, but since the schema fully documents the optional limiting behavior, it meets the baseline expectation without adding value beyond the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('Get') and specifies the resource ('to-dos in the Inbox'), which distinguishes it from siblings like things_get_today or things_get_anytime by naming the specific list. However, it lacks explicit differentiation from things_get_list or guidance on what constitutes 'Inbox' in the Things app workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus the 16 sibling tools available (e.g., things_get_today, things_get_anytime, things_get_someday). It does not indicate that the Inbox typically contains uncategorized/new items or when a user might prefer this over other list views.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/hildersantos/things-mcp'

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