things_add_project takes an items array in which headings act as dividers for the to-dos beneath them, so a plan with phases lands structured instead of as a flat pile that you then reorganise by hand. Reading is equally complete — every built-in list has its own tool and its own max_results ceiling, which keeps a Logbook query from dragging in years of history. Updates route through the JSON API path, and that is where completed and canceled state is set rather than through a separate action.
A Things client with 20 tools that write to-dos and projects into the app and read every built-in list, area and tag back out.
- To-do creation carrying title, notes, tags, deadline, when, target list and checklist_items for tasks with several components
- Project creation where the items array mixes to-dos and headings, and each heading groups the to-dos that follow it
- A dedicated read for each built-in list — Inbox, Today, Upcoming, Anytime, Someday, Logbook and Trash — each bounded by max_results
- Reads by container: a specific project, an area, or a list by name, plus areas, tags and active projects in full
- Deadline, notes and status for a single to-do through things_get_todo_details
- Updates to an existing to-do or project, including completed and canceled state, and appending items to a project already in flight
- Navigation that opens a specific item, list or search inside the app
Things itself plus its authorization token in THINGS_AUTH_TOKEN; every read and write in the tool set goes through the app.
One command plus a key — npx github:hildersantos/things-mcp, then supply credentials
