Releases: hald/things-mcp
Releases · hald/things-mcp
Release list
v0.8.1
v0.8.1 - 2026-06-05
Features
- Add Area Creation: New
add_areatool creates Areas in Things 3. Since the Things URL scheme has noadd-areacommand, this uses AppleScript (make new area with properties {name:...}) and returns the new Area's UUID. Title strings are escaped to prevent AppleScript injection. (#45) - Update Area: New
update_areatool renames an Area and/or sets its tags, also via AppleScript. Only provided fields are changed. There is intentionally nodelete_areatool: deleting an Area in Things also deletes every project it contains. - Response Pagination: The list and search read tools now accept optional
limitandoffsetparameters, so large Things lists can be inspected in chunks instead of returning everything at once. Default behaviour is unchanged when no pagination is passed; otherwise aShowing X-Y of Z itemsheader is added, and an out-of-rangeoffsetis reported distinctly from an empty result. (#41) - Structured Responses: The 16 list/search read tools now return both the human-readable text (unchanged) and machine-readable
structured_content— the raw item dicts pluscount/total/offset/limitmetadata — so MCP clients can consume either form. Built on FastMCP 3.x's nativeToolResult/structured-output support (inspired by but supersedes the approach in #40). The structured items are the same data the text renders (full item dicts, including nested checklist / sub-items), coerced to JSON-safe values (e.g. dates → ISO strings). Uselimitto bound large lists — it shrinks both the text and structured channels together.
Maintenance
- FastMCP 3.x: Migrated to FastMCP 3.x. The dependency pin was an open-ended
fastmcp>=2.0.0, so fresh installs were already resolving FastMCP 3.x untested; the pin is now bounded tofastmcp>=3.0.0,<4. Runtime behaviour is unchanged — in 3.x the@mcp.tooldecorator returns the original function, so the test suite was updated to call tool functions directly instead of via the removed.fnaccessor. All 155 tests pass under FastMCP 3.4.0.
Credits
This release was shaped by several community contributions — thank you all 🙏
- @Jscoats — Area creation via AppleScript (#45). The new
add_areatool is based on this work, andupdate_areaextends the same AppleScript approach. - @ariiscoding — Response pagination (#41). The
limit/offsetdesign — including distinguishing an out-of-range page from an empty result — comes from this PR; it was reimplemented on the current codebase. - @NickChristensen — Structured MCP responses (#40). The dual text + structured-content design originated here; 0.8.1 realizes it natively on FastMCP 3.x.
v0.8.0
Bug fixes
- URL Encoding: Slashes in titles/notes/checklist items are now percent-encoded as
%2F. Previously a title like "Example 2/13" was silently truncated at the slash by Things' URL parser. Affects every URL-scheme operation, not just project updates. (#47 / #48) get_todayResilience:get_todayno longer crashes with'<' not supported between instances of 'NoneType' and 'str'when Things' Today view contains deadline-only overdue items mixed with dated ones. Falls back to a local, None-safe sort when the upstreamthings.today()sort hits this case. (#43 / #49)- Logbook Filter:
get_logbooknow filters by completion date (stop_date) instead of creation date. Tasks created weeks ago but checked off recently now appear in the report;7dand1wperiods return useful results. Period parsing acceptsd/w/m/yand surfaces invalid period strings explicitly. (#46 / #50)
Features
- Checklist Updates on Existing Todos:
update_todogainschecklist_items,prepend_checklist_items, andappend_checklist_itemsparameters. Existing tasks can now have their checklists edited without recreating the task and losing its UUID. (#34 / #51) - Tag Usage Report: New
get_tag_usagetool lists every tag with its open and total task counts, sorted by usage descending;only_unused=Truenarrows to cleanup candidates.update_todogains anadd_tagsparameter (append) alongside the existingtags(replace). (#14 / #52) - Bulk Updates: New
bulk_update_todostool applies the same change (list,tags/add_tags,when,deadline,heading,completed,canceled) to many to-dos in a single Things round-trip via the URL scheme'sjsonendpoint. Replaces N sequential calls for weekly-review batch moves. RequiresTHINGS_AUTH_TOKEN. (#22 / #53)
Internal
- Formatters Refactor: Centralised the duplicated
things.get-with-fallback pattern in a new_lookup_titlehelper, and the four-times-duplicated Created/Modified date block in a new_append_timestampshelper. Behaviour unchanged — the 67 existing formatter tests all still pass. - Acknowledged Things-API Limits: Recurrence creation (#42) and standalone heading creation (#10) cannot be implemented via Things' current URL scheme or AppleScript (
repetition ruleis read-only; headings can only be created inside a project's initialcreateoperation). Documented upstream so future contributors don't waste time on the same dead ends.
Credits
Huge thanks to @fwahl711 (Florian Wahl), who authored every fix and feature in this release — all of #48–#54. 🙏
v0.7.3
- Fix Someday project tasks appearing in Today/Upcoming/Anytime views
- Show "(inherited from project)" annotation for tasks in Someday projects
- Update integration test plan with view-isolation and positive-presence tests
- Backfill changelog for v0.7.0–v0.7.3
v0.7.2
v0.7.1
What's New
- MCPB now uses uvx: Fetches the package from PyPI instead of bundling source files (1KB vs 8KB)
- Cleaner README: Reorganized installation instructions
Installation
Claude Desktop
Download things-mcp-0.7.1.mcpb below and double-click to install.
Any MCP Client
uvx things-mcpSee the README for more options.
v0.6.0
v0.6.0 - 2026-01-14
- Creation Date Filtering: Added
lastparameter tosearch_advancedfor filtering by creation date (e.g., '3d' for last 3 days, '1w' for last week) - DateTime Scheduling with Reminders: Extended
whenparameter to support datetime format with reminders (YYYY-MM-DD@HH:MM) - HTTP Transport: Added optional HTTP transport mode via environment variables (
THINGS_MCP_TRANSPORT,THINGS_MCP_HOST,THINGS_MCP_PORT). Note: HTTP transport requires running the server directly and is not available when installed via the .mcpb package. - Background Execution Fix: Changed URL execution from AppleScript to shell script with
open -gto prevent Things from coming to foreground - Bug Fix: Fixed
search_advancedtype parameter causing duplicate keyword argument error - MCP Integration Test Plan: Added Claude-executable integration test plan (
docs/mcp_integration_test_plan.md) for verifying MCP tools against a live Things database
v0.5.0
What's Changed
MCPB Package Format
- Migrated from DXT to MCPB package format for Claude Desktop extensions
- Now uses
uvfor runtime dependency resolution instead of bundled wheels - Requires
uvto be installed (brew install uv)
Human-Readable Age Display
- Tasks now display "Age: X ago" showing time since creation
- Tasks now display "Last modified: X ago" showing time since last update
- Ages shown in natural language (e.g., "3 days ago", "2 weeks ago")
- Thanks to @jjprior for this contribution!
Installation
- Install uv:
brew install uv - Download
things-mcp-0.5.0.mcpbbelow - Double-click to install in Claude Desktop
v0.4.0 2025-08-19
- DXT Package Support: Added automated DXT packaging system with build_dxt.sh script and manifest.json configuration
- Improved README: Recommended DXT as preferred installation option
v0.3.1 2025-08-11
New Features
- Add
get_headings()MCP tool to list/find headings by project - Enhanced heading support throughout the system - headings now shown in project listings and todos
v0.3.0 2025-08-11
What's Changed
- Add initial Heading support for Todos by @JoeDuncko in #8
- Include checklist items in todo responses by @JoeDuncko in #11
New Features
- Include Heading With Todo: Todos now show their associated heading information
- Checklist Integration: All checklist items are now included in todo responses