Skip to content

Releases

v1.4.7 — FastMCP 4

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 13 Nov 18:56

Changed

  • Now runs on FastMCP 4 (fastmcp>=4,<5), replacing the temporary <3.4 cap from 1.4.5. FastMCP 3.x is no longer supported.

Fixed

  • Validation errors are rewritten into agent-facing messages again on current FastMCP (e.g. Unknown field 'bogusField'). Since FastMCP 3.4 they arrive wrapped in FastMCP's own error type, which the reformatter did not recognise.

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.4.6 — Startup Access Errors

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 13 Nov 18:56

Fixed

  • Server no longer crashes at startup when macOS blocks access to OmniFocus's folders (seen with Claude Desktop on recent macOS, where the client only reported "Connection closed"). The startup sweep now runs inside error mode, so the server stays up and every tool call explains the fix: the Allow prompt, or Full Disk Access for the launching program, naming the resolved uvx path when it can be found.
  • A database or .ofocus path that macOS refuses to show is no longer reported as "not found".

Changed

  • README: the temporary Full Disk Access note now covers both routes and mise-shim setups.

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.4.5 — FastMCP Version Cap

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 13 Nov 18:56

Fixed

  • Validation errors lost their agent-facing wording (e.g. Unknown field 'bogusField') on FastMCP 3.4 and newer, which uvx installs pulled in automatically. The dependency is now capped at fastmcp>=3.1.1,<3.4, the range the full test suite passes on, until the migration to newer FastMCP lands.

Added

  • README: temporary Full Disk Access step for Claude Desktop on recent macOS.

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.4.4 — Batch Limit Increase

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 13 Nov 18:56

Changed

  • Batch processing limit increased from 50 to 150 items per add_tasks / edit_tasks call.

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.4.3 — First-Run UX

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 13 Nov 18:56

Added

  • First-run welcome banners in bridge.js — frame OmniFocus's one-time permission dialog with two-click instructions, sized to its ~11-line preview viewport
  • Startup log line — omnifocus-operator v<X.Y.Z> starting to stderr + ~/Library/Logs/omnifocus-operator.log

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.4.2 — UNTIL Format Hotfix

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 13 Nov 18:56

Fixed

  • RRULE parser now accepts both RFC 5545 §3.3.10 UNTIL forms — DATE (YYYYMMDD) and DATE-TIME (YYYYMMDDTHHMMSSZ). Prior versions rejected the DATE form, causing list_tasks / get_all / get_task to fail with UNTIL must match YYYYMMDDTHHMMSSZ format whenever the OmniFocus database contained a task with an end-by-date repetition rule created via the OmniFocus UI (the UI emits DATE form; pre-1.4.2 server writes emitted DATE-TIME form). One bad row poisoned every snapshot read.

Changed

  • RRULE builder now emits UNTIL in DATE form (YYYYMMDD), matching OmniFocus's own UI serializer. Pre-1.4.2 rules already stored in user databases (UNTIL=YYYYMMDDT000000Z) continue to round-trip cleanly via the new parser tolerance; no migration required. Editing a legacy rule's repetition spec rewrites it to the canonical DATE form on write; edits that don't touch the repetition spec leave the legacy form in place.

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.4.1 — Task Properties & Subtree

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 25 Apr 14:04

Added

  • completesWithChildren and type ("parallel" | "sequential") writable on add_tasks / edit_tasks with patch semantics — null rejected on type
  • Omitted completesWithChildren / type on add_tasks resolve to the user's OmniFocus preference explicitly (factory fallbacks: true / "parallel") — server never relies on OmniFocus implicit defaulting
  • Derived presence flags on default task/project responses — hasNote, hasRepetition, hasAttachments (strip when false)
  • isSequential on tasks and projects; dependsOnChildren on tasks (hasChildren AND NOT completesWithChildren)
  • hierarchy include group extended — adds hasChildren, type, completesWithChildren on tasks and projects (type on projects includes "singleActions")
  • parent filter on list_tasks — single reference (name or ID); returns all descendants at any depth; resolved task preserved as anchor (bypasses subtree-pruning filters)
  • parent: "$inbox" supported as equivalent to project: "$inbox"
  • New warnings: empty-scope-intersection when project + parent are disjoint; parent-resolves-to-project hint; filtered-subtree warning now also fires on parent

Changed

  • Name-resolver filters (project, parent, tags) resolving to zero matches now return empty results + FILTER_NO_MATCH warning — previously project silently skipped the filter and returned all tasks — breaking behavior change

Infrastructure

  • PyPI publishing via uvx omnifocus-operator
  • Dynamic versioning with hatch-vcs (git tags as source of truth)
  • Platform check — non-macOS prints clear error and exits

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.4 — Response Shaping & Batch Processing

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 25 Apr 14:03

Added

  • Response stripping — null/[]/""/false/"none" auto-removed from entity fields; availability and envelope fields always preserved
  • include on list_tasks / list_projects — add field groups to defaults: notes, metadata, hierarchy, time, * (projects also: review)
  • only on list_tasks / list_projects — return exactly named fields; id always included; mutually exclusive with include
  • limit: 0 returns count-only: {items: [], total: N, hasMore: ...}
  • Batch processing — add_tasks / edit_tasks accept up to 50 items per call with per-item status / warnings; add_tasks best-effort, edit_tasks fail-fast
  • actions.note.append on edit_tasks — appends text with \n separator; whitespace-only is a no-op
  • actions.note.replace on edit_tasks — replaces full note; null or "" clears

Changed

  • effective* → inherited* across all tool responses (6 fields: dueDate, deferDate, plannedDate, flagged, dropDate, completionDate) — breaking rename
  • inherited* fields now only appear when truly inherited from an ancestor — self-values stripped; per-field aggregation: min (dueDate), max (deferDate), OR (flagged), first-found (others)
  • Top-level note removed from edit_tasks input — use actions.note.append / actions.note.replace — breaking

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.3.3 — Ordering & Move Fix

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 25 Apr 14:03

Added

  • order field on task responses — 1-based integer reflecting outline order within parent

Fixed

  • moveTo beginning/ending on same container no longer silently ignored
  • Move no-op warning now checks ordinal position, not just container membership

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md

v1.3.2 — Date Filtering

Choose a tag to compare

@HelloThisIsFlo HelloThisIsFlo released this 25 Apr 14:03

Added

  • Date filters on list_tasks: due, defer, planned, completed, dropped, added, modified
  • String shortcuts: "today", "overdue", "soon", "any", "none"
  • Shorthand periods: {this: "w"}, {last: "3d"}, {next: "1m"}
  • Absolute bounds: {after: "...", before: "..."}
  • Configurable due-soon threshold (OPERATOR_DUE_SOON)

Changed

  • urgency filter removed — absorbed into due: "overdue" and due: "soon"
  • completed boolean filter replaced by completed date filter

Full CHANGELOG: https://github.com/HelloThisIsFlo/omnifocus-operator/blob/main/CHANGELOG.md