A powerful MCP server for Things 3 on macOS — with AppleScript-powered writes, analytics, and workflow tools
Things MCP has solid naming conventions (verb_noun pattern across all 28 tools) and comprehensive parameter schemas with types and descriptions. However, tool descriptions are inconsistent in depth, some are terse (e.g., 'Get all areas' for get_areas), falling below the 50-200 char LLM-optimized baseline. Output schemas are not documented in the source code provided, forcing LLMs to infer response structure. Error handling is minimal; no recovery guidance or actionable error messages visible. Security is reasonable (no exposed credentials), but composition could be tighter, some tools overlap in intent (e.g., search_todos vs search_advanced).
Create a new project, optionally with initial todos and headings using JSON structure
Create a new todo in Things. Use 'when' for natural scheduling: 'today', 'tomorrow', 'evening', 'anytime', 'someday', a date string 'YYYY-MM-DD', or 'YYYY-MM-DD@HH:MM' to include a reminder.
Mark one or more todos as canceled (via AppleScript)
Mark one or more todos as completed (via AppleScript)
Move one or more todos to Trash (via AppleScript)
Export a list of todos in JSON, Markdown, or CSV format
Get todos in the Anytime list (excludes Someday projects)
Output schemas not documented. Tools like get_inbox, get_today, get_areas return data structures that are not formally specified in the source code. LLMs cannot plan downstream tool calls or extract fields without inferring response structure.
Terse descriptions on discovery tools. get_areas, get_tags, get_overdue have descriptions under 20 characters ('Get all areas', 'Get all tags', 'Get todos that are past their deadline'). These do not explain WHEN to call them or what structure they reveal, violating the 50-200 char LLM-optimized baseline.
No error handling guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. For example, add_todo could fail if a tag or project name is invalid, but no recovery path is specified.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get all areas
Get headings, optionally filtered by project
Get all todos in the Inbox
Get completed todos from the logbook
Get todos that are past their deadline
Get completion progress for all active projects
Get all projects
Get recently created items
Get todos in the Someday list
Get todos not updated in a long time
Get productivity statistics: completion counts, inbox size, overdue count, average completion time
Get all tags
Get todos scheduled for Today
Get all open todos, optionally filtered by project ID
Get trashed items
Get upcoming scheduled todos
Move a todo to a different project, area, or built-in list (via AppleScript)
Search with multiple filters
Search todos by title or notes
Update an existing todo's properties
Generate a comprehensive weekly review: completed items, overdue, stale tasks, inbox count, and project progress
Overlapping tool intent. search_todos and search_advanced both search todos but with different filter sets. LLMs must reason about which to use, wasting tokens and risking wrong tool selection. Consolidate into a single search tool with optional filters.
weekly_review tool has no documented output schema. It is described as generating 'a comprehensive weekly review' but the structure (fields, format, nesting) is not specified, forcing LLMs to guess.