Skip to main content
Glama

OmniFocus MCP Plus

A comprehensive MCP server for OmniFocus 4 with 53 tools covering task management, project/folder/tag CRUD, GTD review workflow, analytics, custom perspectives (including rule editing), attachments, notifications, and advanced filtering — plus MCP prompts, resources, tool annotations, and a Claude Code skill.

Originally forked from jqlts1/omnifocus-mcp-enhanced. Additional tools inspired by vitalyrodnenko/OmnifocusMCP.

Installation

Requires macOS with OmniFocus 4 and Node.js 22+. API documentation lookup requires OmniFocus 4.9+ (which requires macOS 15.2+). Existing task tools continue to work on OmniFocus 4.8.13.

From Source

git clone https://github.com/psufka/omnifocus-mcp-plus.git
cd omnifocus-mcp-plus
npm install && npm run build
npm test  # all tests should pass
claude mcp add omnifocus -- node "$(pwd)/dist/server.js"

Restart Claude Code to pick up the new server.

Related MCP server: OmniFocus MCP Enhanced

CLI, diagnostics and reliable writes

The CLI uses the same validation, normalization and dispatcher as MCP:

node dist/cli.js doctor
node dist/cli.js list
node dist/cli.js call filter_tasks '{"countOnly":true,"dateMode":"effective"}'
node dist/cli.js call batch_edit_items --stdin < edits.json

The installed binary is omnifocus-mcp. Tool results include readable text and structuredContent: {success, tool, data, meta?} with output schemas. Use server_info to confirm the version, commit/build hash, Node executable, OmniFocus version and connectivity. batch_edit_items previews or applies up to 100 edits with per-item verification. Creates accept idempotencyKey to coordinate retries across clients.

Compatibility changes in 0.6: task queries exclude project root tasks by default; includeProjectRoots: true opts in. Filters/counts/analytics default to dateMode: "direct", forecast to "effective". Every week filter now starts Sunday unless weekStartsOn: "monday" is supplied; completion weeks used Monday previously. Tag assignments accept IDs or unique paths, and ambiguous names fail before writes.

Read the operations guide for result shapes, request-key recovery, rollback states, freshness and process coordination.

OmniFocus 4.9 support (0.7.0)

Search the running application's own API reference, including TypeScript declarations and comments, without executing any returned code:

node dist/cli.js call search_automation_api '{"query":"Task.RepetitionRule","maxCharacters":12000}'

Use nextOffset as the next call's offset when truncated is true. Searches return at most 40,000 UTF-16 characters per page (default 12,000). The generated timestamp and setup preamble are omitted; API comments are retained. An unmatched query returns empty text. This is documentation lookup, not task search or an arbitrary-script execution tool. A process-local cache retains up to 16 queries / 1,000,000 characters for five minutes. Every call checks the running app's version and build; refresh: true bypasses the cache. server_info reports omnifocus.capabilities.automationApiLookup. Older apps return a clear unsupported-feature error for this tool while other tools remain available.

Structured monthly repetition now supports next-to-last weekdays and calendar days:

{"task_id":"TASK_ID","schedule_type":"regularly","frequency":"monthly","daysOfWeek":[{"day":"friday","position":-2}]}

For the next-to-last calendar day, use daysOfMonth: [-2] instead of daysOfWeek. -1 still means last. Repetition writes retain read-back verification and restore the previous rule when that verification fails. See OmniFocus 4.9 release notes and Omni's API lookup announcement.

Tools (53)

Task Management

Tool

Description

add_omnifocus_task

Add a new task with dates, tags, project, parent task

edit_item

Edit task/project: rename, dates, flags, status, tags, move

remove_item

Remove a task or project (duplicate-name safe)

move_task

Move task to project, parent task, or inbox

duplicate_task

Duplicate a task with note, dates, flags, tags; optionally into a different project

get_task_by_id

Get task details by ID or name

list_subtasks

List children (subtasks), optionally recursive for full hierarchy

complete_task

Mark a task as completed

uncomplete_task

Mark a completed task as incomplete

set_task_repetition

Set/clear repeating schedule — structured fields ("2nd Tuesday monthly") or raw iCal RRULE

append_to_note

Append text to a task or project note

batch_add_items

Add multiple tasks/projects in one call — tempId hierarchy, dryRun, atomic rollback

batch_edit_items

Preview or apply up to 100 task/project edits with per-item verification

batch_remove_items

Remove multiple items in one call (dryRun supported)

batch_move_tasks

Move multiple tasks to a destination in one call (dryRun supported)

reorder_task

Reorder task within its container: before/after sibling, or beginning/ending

convert_task_to_project

Promote a task (with subtasks, tags, note) into a project

find_similar_tasks

Duplicate detection before create — ranked similarity matches with ids

manage_attachments

List/read/add/remove file attachments on a task or project

Task Queries

Tool

Description

filter_tasks

Advanced filtering: status, all date fields, folder tree, tags, regex, and/or/not clauses, countOnly, paging

search_items

One search across tasks, projects, folders, and tags

analyze

Evidence-only analytics: health snapshot, velocity, overdue clusters, stalled projects

get_inbox_tasks

Get inbox tasks

get_flagged_tasks

Get flagged tasks with optional project filter

get_forecast_tasks

Get due/deferred tasks in date range

get_tasks_by_tag

Get tasks by tag name

get_today_completed_tasks

Get tasks completed today

get_task_counts

Aggregate counts: total, available, completed, overdue, due soon, flagged

get_custom_perspective_tasks

Get tasks from a custom perspective

list_custom_perspectives

List all custom perspectives (includeRules returns their filter rules)

update_perspective_rules

Edit a custom perspective's filter rules — validated, read-back verified, undo-able

dump_database

Full database export

Notifications

Tool

Description

list_notifications

List all notifications (reminders) on a task

add_notification

Add absolute or relative notification to a task

remove_notification

Remove a notification by index

Projects

Tool

Description

add_project

Create a new project

list_projects

List/filter projects by folder, status, stalled state

search_projects

Search projects by name

get_project_counts

Aggregate counts by status

manage_reviews

GTD review workflow: list due, mark reviewed (batch-capable), set schedule

App Control

Tool

Description

app_control

Sync, undo/redo (confirm-gated), window focus get/set/clear, reveal an item

Folders

Tool

Description

list_folders

List all folders with project counts

get_folder

Get folder details including projects and subfolders

create_folder

Create a folder, optionally nested

update_folder

Update folder name or status

delete_folder

Delete a folder (and all projects inside it)

Tags

Tool

Description

list_tags

List tags with task counts, filter by status

search_tags

Search tags by name

create_tag

Create a tag, optionally nested

update_tag

Update tag name or status

delete_tag

Delete a tag

Diagnostics

Tool

Description

server_info

Report build/executable details and probe OmniFocus connectivity/capabilities

search_automation_api

Search installed API documentation with pagination and version-aware caching (OmniFocus 4.9+)

MCP Surface & Environment

Beyond tools, the server exposes 4 prompts (weekly_review, inbox_processing, daily_planning, task_health_scan — surfaced as slash commands in Claude Code), 4 resources (omnifocus://inbox, today, flagged, stats), tool annotations (readOnly/destructive/idempotent hints on all 53 tools), and handshake instructions that steer clients toward the cheap tools. A Claude Code skill lives at docs/skills/omnifocus/ (install: ln -s "$(pwd)/docs/skills/omnifocus" ~/.claude/skills/omnifocus).

All MCP/CLI clients share two execution slots for the macOS user. Environment variables: OMNIFOCUS_MCP_MAX_CONCURRENT (local limit, default 2, range 1–8; still subject to the two shared slots), OMNIFOCUS_MCP_STATE_DIR (shared lock/request directory, default ~/.omnifocus-mcp), OMNIFOCUS_SCRIPT_TIMEOUT_MS (default 120000), OMNIFOCUS_SCRIPT_MAX_OUTPUT_BYTES (default 50MB).

Usage Examples

All tools are called automatically by Claude via MCP. The examples below show the tool parameters for common operations.

Tasks

Add a task with a due date and tags:

{
  "name": "Review quarterly report",
  "dueDate": "2026-03-15T17:00:00-05:00",
  "tags": ["Work", "Urgent"],
  "projectName": "Q1 Review"
}

Set a task to repeat every weekday:

{
  "task_id": "abc123",
  "rule_string": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR",
  "schedule_type": "regularly"
}

Set a task to repeat 3 days after completion:

{
  "task_id": "abc123",
  "rule_string": "FREQ=DAILY;INTERVAL=3",
  "schedule_type": "from_completion"
}

Append to a task's note (without overwriting):

{
  "object_type": "task",
  "object_id": "abc123",
  "text": "\nUpdated 2026-03-10: waiting on response"
}

Projects

List stalled projects (active but stuck):

{ "stalledOnly": true }

List projects in a folder sorted by remaining tasks:

{
  "folder": "Work",
  "status": "active",
  "sortBy": "remainingTaskCount",
  "sortOrder": "desc"
}

Folders & Tags

Create a nested folder:

{ "name": "Q2 Projects", "parent": "Work" }

Create a nested tag:

{ "name": "Urgent", "parent": "Priority" }

Put a tag on hold:

{ "name_or_id": "Waiting", "status": "on_hold" }

Filtering

Get overdue tasks in a specific project:

{
  "overdue": true,
  "projectFilter": "Home Renovation"
}

Get tasks due this week with a specific tag:

{
  "dueThisWeek": true,
  "tagFilter": "Work"
}

Date Format

Use valid ISO calendar dates or timestamps. Bare dates such as 2026-03-15 mean local midnight. Full timestamps with an offset or Z pin an instant. Impossible dates such as 2026-02-31 are rejected. Empty strings clear dates only in edit fields. Readable results show local time; structured results may use ISO instants or epoch milliseconds.

"2026-03-15T17:00:00-05:00"   (CDT)
"2026-03-15T17:00:00-06:00"   (CST)

RRULE Reference

The set_task_repetition tool uses iCal RRULE syntax:

Pattern

RRULE

Daily

FREQ=DAILY;INTERVAL=1

Every 3 days

FREQ=DAILY;INTERVAL=3

Weekly on Mon/Wed/Fri

FREQ=WEEKLY;BYDAY=MO,WE,FR

Biweekly

FREQ=WEEKLY;INTERVAL=2

Monthly on the 1st

FREQ=MONTHLY;BYMONTHDAY=1

Yearly

FREQ=YEARLY;INTERVAL=1

Architecture

All tools use OmniJS via JXA — inline JavaScript executed inside OmniFocus via runOmniJs(). No AppleScript escaping issues, native access to all OmniJS APIs. Query tools use external .js scripts in src/utils/omnifocusScripts/ loaded via executeOmniFocusScript(). The core task/project CRUD tools (add, edit, remove) were migrated from AppleScript to OmniJS in v0.3.0.

Changelog

Current version: 0.6.0. See CHANGELOG.md for the full release history.

Known Limitations

  • Cache scope — GUI edits and other processes’ writes become visible on TTL expiry; use fresh: true on cacheable reads when current data is required.

  • Uncertain creates — Request keys are durable and never expire automatically. A pending record requires inspection rather than an automatic second create.

  • Notification API — Relative notification offset retrieval may not work on all OmniFocus versions. Absolute notifications are fully supported.

Contributing

PRs welcome! All tools use OmniJS — write inline JavaScript that runs inside OmniFocus via runOmniJs(). No escaping issues, full access to the OmniJS API. See src/tools/primitives/folderTools.ts for examples.

To add a new tool:

  1. Create a primitive in src/tools/primitives/yourTool.ts

  2. Create a definition in src/tools/definitions/yourTool.ts (Zod schema + handler)

  3. Register in src/server.ts

  4. npm run build && npm test

Credits

License

MIT

Available Tools

53 tools
add_notificationAdd notificationA

Add a notification (reminder) to a task — absolute date or relative to due date

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoWhen the notification fires — required for absolute notifications. Bare 'YYYY-MM-DD' is interpreted as LOCAL midnight on that calendar day; add a time and offset (e.g. 2026-03-05T09:00:00-06:00) to pin an exact moment.
typeYesNotification type: 'absolute' for a specific date/time, 'relative' for minutes before due date
taskIdNoThe ID of the task
taskNameNoThe name of the task (alternative to taskId)
minutesBeforeNoMinutes before the due date for relative notifications (e.g. 30 for 30 minutes before). Requires the task to have a due date.
idempotencyKeyNoStable request key for this create. Reuse identical arguments to replay its result across clients; an uncertain earlier attempt is never repeated.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already carry the safety profile (readOnlyHint=false confirming a write, destructiveHint=false). The description adds the mode distinction but little else about behavior — no side effects, no mention of what happens when a relative notification is set on a task without a due date, and no duplicate/replay semantics beyond what the idempotencyKey schema text already provides.

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

Conciseness5/5

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

A single sentence with the verb and resource front-loaded and the mode distinction appended via em-dash. Every word earns its place; zero filler or redundancy.

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

Completeness4/5

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

The schema (100% coverage, detailed semantics) and output schema carry substantial load, so the short description suffices for the core operation and timing modes. Minor gaps: it does not note that a task must be identified via taskId or taskName, and does not point to sibling lifecycle tools (list_notifications, remove_notification).

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?

Schema coverage is 100% with rich parameter descriptions (date interpretation rules, enum semantics, idempotency replay behavior, due-date requirement for minutesBefore). Per the rubric, baseline 3 applies; the description only restates the absolute/relative distinction already encoded in the type enum, adding no parameter-level meaning beyond the schema.

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

Purpose5/5

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

States a specific verb ('Add') and resource ('notification (reminder) to a task'), plus the two timing modes (absolute date or relative to due date). The verb 'add' clearly differentiates it from sibling tools list_notifications and remove_notification, so an agent can distinguish them without opening schemas.

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

Usage Guidelines3/5

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

Usage is implied — use this when attaching a reminder to a task, choosing between absolute and relative timing. However, the description gives no explicit when-to-use/when-not-to-use guidance and does not route to alternatives such as list_notifications or remove_notification for managing existing notifications.

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

add_omnifocus_taskAdd taskA

Add a new task to OmniFocus. Before creating a task that may already exist, call find_similar_tasks with the same name and reuse the returned id instead if a strong match comes back.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the task
noteNoAdditional notes for the task
tagsNoTags to assign to the task
tagIdsNoExact tag IDs; combine with names/paths in tags. Unknown IDs fail before any write.
dueDateNoThe due date. Bare 'YYYY-MM-DD' is interpreted as LOCAL midnight on that calendar day; add a time and offset (e.g. 2026-03-05T09:00:00-06:00) to pin an exact moment.
flaggedNoWhether the task is flagged or not
deferDateNoThe defer date. Bare 'YYYY-MM-DD' is interpreted as LOCAL midnight on that calendar day; add a time and offset (e.g. 2026-03-05T09:00:00-06:00) to pin an exact moment.
plannedDateNoThe planned date. Bare 'YYYY-MM-DD' is interpreted as LOCAL midnight on that calendar day; add a time and offset (e.g. 2026-03-05T09:00:00-06:00) to pin an exact moment.
projectNameNoThe name of the project to add the task to (will add to inbox if not specified)
parentTaskIdNoThe ID of the parent task to create this task as a subtask
idempotencyKeyNoStable request key for this create. Reuse identical arguments to replay its result across clients; an uncertain earlier attempt is never repeated.
parentTaskNameNoThe name of the parent task to create this task as a subtask (alternative to parentTaskId)
estimatedMinutesNoEstimated time to complete the task, in minutes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (which only establish this as a non-read-only, non-destructive write), the description discloses a genuine behavioral trait: the tool performs no duplicate detection, so creating a task with an existing similar name can produce a duplicate unless the agent runs the pre-check. This meaningfully exceeds annotation coverage.

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

Conciseness5/5

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

Two sentences with zero filler. The primary action is front-loaded, and the conditional dedup instruction earns its place as the single most important operational caveat. Every word carries signal.

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

Completeness4/5

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

For a 13-parameter, 1-required write tool, the combination of a fully self-documenting schema, annotations, an output schema, and the dedup guidance leaves nothing needed to invoke the tool correctly unexplained. The only marginal gap is explicit routing to batch_add_items for bulk creation.

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?

Schema description coverage is 100% — all 13 parameters (name, note, tags, tagIds, dates, idempotencyKey, parentTaskId, etc.) are individually documented. Per the baseline, the description need not add parameter detail. Its dedup note relates to the name parameter but supplies workflow guidance rather than new semantics.

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

Purpose5/5

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

The description states a specific action with a clear verb and resource: 'Add a new task to OmniFocus.' This distinguishes it from sibling tools like add_project, edit_item, or batch_add_items, and the duplicate-check instruction signals this is the single-task creation entry point.

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

Usage Guidelines4/5

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

The description gives an explicit precondition: before creating a possibly-duplicate task, call find_similar_tasks with the same name and reuse the returned id on a strong match. This is clear when-to-use guidance, but it does not name exclusions or alternatives such as batch_add_items for bulk creation.

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

add_projectAdd projectB

Add a new project to OmniFocus

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the project
noteNoAdditional notes for the project
tagsNoTags to assign to the project
tagIdsNoExact tag IDs; combine with names/paths in tags. Unknown IDs fail before any write.
dueDateNoDue date, ISO 8601 (e.g., 2026-03-05T09:00:00-06:00). A bare YYYY-MM-DD is treated as local midnight on that calendar day.
flaggedNoWhether the project is flagged or not
deferDateNoDefer date, ISO 8601 (e.g., 2026-03-05T09:00:00-06:00). A bare YYYY-MM-DD is treated as local midnight on that calendar day.
folderNameNoName or ID of the folder to add the project to (adds at root if omitted). A name matching more than one folder is rejected — pass the folder ID instead.
sequentialNoWhether tasks in the project should be sequential (default: false)
plannedDateNoPlanned date, ISO 8601 (e.g., 2026-03-05T09:00:00-06:00). A bare YYYY-MM-DD is treated as local midnight on that calendar day.
idempotencyKeyNoStable request key for this create. Reuse identical arguments to replay its result across clients; an uncertain earlier attempt is never repeated.
estimatedMinutesNoEstimated time to complete the project, in minutes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

B3.2/5.0
Behavior2/5

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

The annotations already state readOnly=false and destructive=false, and the description merely says 'Add', which is consistent but adds no behavioral context beyond those annotations. It does not disclose idempotency behavior, failure semantics for invalid tag IDs or ambiguous folder names, or what happens after creation.

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 a single, focused sentence with no redundant wording and is easy to parse. It is concise but provides no additional structure or high-level context beyond the bare purpose.

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

Completeness3/5

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

Given the tool has 12 parameters and non-trivial behavior around folder resolution, tag IDs, and idempotency, the one-sentence description alone is not complete. However, the rich parameter schema and presence of an output schema compensate for most invocation details, leaving only high-level usage and behavioral guidance gaps.

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 schema has 100% description coverage, so all 12 parameters are already documented in detail. The tool description adds no parameter-level meaning, but because the schema fully covers parameter semantics, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Add') and resource ('project') and names the target system ('OmniFocus'), clearly identifying what the tool does. This also distinguishes it from sibling tools like add_omnifocus_task, create_folder, or create_tag, which involve different resources.

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?

No usage guidance is provided. There is no discussion of when to use this tool versus alternatives such as add_omnifocus_task for tasks or convert_task_to_project, and no prerequisites or exclusions are mentioned. The agent must infer usage solely from the tool name and description.

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

analyzeAnalyze databaseA
Read-only

Read-only analytics over the OmniFocus database: health_snapshot, velocity, overdue_clusters, or stalled_projects. Returns counts, rates, lists and dates as markdown — no scores and no recommendations — so the caller does the interpreting.

ParametersJSON Schema
NameRequiredDescriptionDefault
freshNoBypass the process-local cache. Other clients and GUI changes may otherwise remain cached for the advertised TTL.
analysisYesWhich analysis to run. health_snapshot = one-pass counts of inbox, incomplete, overdue, due-today, flagged, untagged, un-estimated tasks plus project status counts and recent completions. velocity = per-day completed/created counts over a trailing window. overdue_clusters = overdue tasks grouped by project and by tag. stalled_projects = active projects with no next action and/or no recent activity.
dateModeNoDate predicates use dates set directly on tasks, or effective dates inherited from parents/projects. Default: direct.
velocityNoOptions for analysis="velocity"; ignored by other analyses
overdueClustersNoOptions for analysis="overdue_clusters"; ignored by other analyses
stalledProjectsNoOptions for analysis="stalled_projects"; ignored by other analyses
includeProjectRootsNoInclude project root tasks (default false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.3/5.0
Behavior4/5

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

The description adds meaningful behavior beyond the readOnlyHint=true annotation: output is markdown-formatted counts/rates/lists/dates, and the tool intentionally provides no scores or recommendations. This helps an agent set expectations about the return value and its limitations. It does not mention the cache behavior, but the fresh parameter already documents that in the schema.

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

Conciseness5/5

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

Two tight sentences with no filler. The action, scope, output format, and key caveat are all front-loaded, and every clause earns its place. This is an exemplar of concise tool documentation.

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

Completeness5/5

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

Given the rich schema covering all 7 parameters and the presence of an output schema, the description is complete for call selection and invocation. It states what the tool does, what it returns, and an important behavioral boundary. Nothing critical for an agent to invoke this tool correctly is missing.

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?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description only repeats the analysis enum names without adding parameter-level detail. Per the calibration baseline, 3 is appropriate because the description adds no semantic value beyond the schema for parameters.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Read-only analytics over the OmniFocus database', then enumerates the four supported analyses. This clearly distinguishes the tool from sibling CRUD/search tools and even from other read-only tools like dump_database or get_project_counts by framing it as analytics rather than raw retrieval.

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

Usage Guidelines4/5

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

The description clearly conveys when to use the tool: whenever an agent needs summarized analytics such as health_snapshot, velocity, overdue_clusters, or stalled_projects. The phrase 'no scores and no recommendations — so the caller does the interpreting' also tells the agent that this tool is not for decisions requiring judgment. However, it does not explicitly name alternatives or exclusion conditions relative to sibling tools.

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

app_controlOmniFocus app controlA
Destructive

Application-level OmniFocus control: start a sync, step the undo/redo stack, read/set/clear the sidebar focus of the front window, or reveal (select) a task or project. Undo and redo are destructive and require confirm: true — the top of the undo stack is often the user's own manual edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoreveal only: ID of the task to select.
confirmNoRequired (true) for 'undo' and 'redo'. Without it those operations only REPORT the undo/redo state and change nothing. Only valid with undo/redo.
taskNameNoreveal only: name of the task to select (alternative to taskId).
folderIdsNoset_focus only: folder IDs to focus on.
operationYesWhat to do: 'sync' starts an OmniFocus sync (fire-and-forget). 'undo' / 'redo' step the OmniFocus undo stack — DESTRUCTIVE, requires confirm: true. 'get_focus' reports what the front window is focused on. 'set_focus' focuses the sidebar on specific folders/projects. 'clear_focus' removes any focus. 'reveal' selects a task or project in the front window.
projectIdNoreveal only: ID of the project to select. NOTE: for set_focus use projectIds (plural).
projectIdsNoset_focus only: project IDs to focus on.
folderNamesNoset_focus only: folder names to focus on.
projectNameNoreveal only: name of the project to select. NOTE: for set_focus use projectNames (plural).
projectNamesNoset_focus only: project names to focus on.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.5/5.0
Behavior4/5

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

The description goes beyond the destructiveHint annotation by specifying that confirm:true is required for undo/redo and that without it these operations only report state. It also notes sync is fire-and-forget. This adds valuable behavioral context beyond the annotations.

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

Conciseness5/5

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

Two tight sentences that front-load the purpose and immediately highlight the destructive operations. No wasted words; every sentence earns its place.

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

Completeness5/5

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

Despite 10 parameters and 7 operations, the description covers the operations, the confirm requirement, and the plural/singular distinction. Output schema exists, so return values are handled. An agent has everything needed to call this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaningful semantics: it explains the operation enum values, clarifies the confirm flag's effect, and distinguishes projectId vs projectIds (singular/plural) for reveal vs set_focus. This is more than the schema provides.

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

Purpose5/5

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

The description states a clear purpose: 'Application-level OmniFocus control' and enumerates the exact operations (sync, undo/redo, focus, reveal). It is specific and distinct from the many task-level sibling tools, so an agent can easily tell this tool is for app-wide control.

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

Usage Guidelines4/5

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

The description gives context by labeling the tool as 'Application-level' and explaining the destructive nature of undo/redo with the confirm requirement. It doesn't explicitly say 'use this instead of X', but the scope is clearly defined and differentiates from the task-centric siblings.

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

append_to_noteAppend to noteB

Append text to a task or project's note without overwriting existing content

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe ID of the task or project. Canonical field; legacy alias 'object_id' also accepted.
textYesThe text to append to the note
itemTypeNoWhether to append to a task or project note. Canonical field; legacy alias 'object_type' also accepted.
object_idNo[DEPRECATED] Alias for id. Prefer id.
object_typeNo[DEPRECATED] Alias for itemType. Prefer itemType.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already indicate not read-only and not destructive; the description adds the key behavioral detail that existing content is preserved. However, it doesn't disclose behavior for missing notes, permission requirements, or side effects. With annotations covering the safety profile, this is adequate but not rich.

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?

A single sentence with no filler; the verb and direct object are front-loaded. Could arguably be 5, but it lacks any structured guidance for the deprecated aliases or optional parameters, so 4.

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?

The schema leaves id and itemType optional, yet the description doesn't explain what happens when they are omitted or how the target is resolved. For a mutation tool with multiple parameters and deprecated aliases, the description alone is insufficient for correct invocation.

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?

Schema coverage is 100%, so parameters are documented. The description adds no extra meaning about the optionality of id/itemType or the deprecated aliases. At high schema coverage the baseline is 3; no additional value is provided.

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?

States the specific operation (append) and resource (task or project note), and explicitly notes the non-destructive behavior ('without overwriting'), which distinguishes it from edit-type tools. It doesn't name sibling tools explicitly, so not a 5.

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?

No guidance on when to use this vs alternatives like edit_item or batch_edit_items, no prerequisites (e.g., must supply id/itemType), and no exclusions. The one-sentence description implies 'use to append' but offers no decision support.

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

batch_add_itemsBatch add itemsA

Add multiple tasks or projects to OmniFocus in a single operation. Supports tempId/parentTempId hierarchy wiring, dryRun preview, stopOnError, and atomic rollback. Before adding tasks that may already exist, call find_similar_tasks for each name and drop or replace any item with a strong match — batch creation multiplies duplicates.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesArray of items (tasks or projects) to add
atomicNoAll-or-nothing: if ANY item fails, every object already created by this batch is deleted again in the same script and the result reports rolledBack: true. Implies stopOnError; passing atomic: true with stopOnError: false is rejected.
dryRunNoResolve every project/folder/parent/tag lookup and report exactly what WOULD be created, without writing anything. Default false.
stopOnErrorNoStop at the first failed item instead of continuing; the remaining items are reported as skipped. Default false (continue on error). Implied by atomic.
idempotencyKeyNoStable request key for this create. Reuse identical arguments to replay its result across clients; an uncertain earlier attempt is never repeated.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false) establish the write-not-destructive profile; the description adds behavioral context beyond that: dryRun preview, stopOnError, and atomic rollback. The rollback disclosure is genuinely meaningful — the agent learns failed batches delete already-created objects. Nothing contradicts the annotations.

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

Conciseness5/5

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

Three sentences with zero filler: purpose first, then a compact feature summary, then an actionable pre-condition warning. Every sentence earns its place and nothing restates the title or schema verbatim.

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

Completeness4/5

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

This is a complex tool (nested item array, atomicity, rollback, dryRun, idempotency), but the schema exhaustively documents all parameters, an output schema exists, and annotations cover the safety profile. The description covers purpose, key behaviors, and the critical duplicate-prevention workflow. Only minor gap: no explicit contrast with single-item add siblings, though the batch scope is stated.

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?

Schema coverage is 100%, and the schema's per-property descriptions already explain tempId/parentTempId wiring, date parsing semantics, atomic/stopOnError interaction, and idempotencyKey. The description names the key semantics (hierarchy wiring, dryRun, atomic rollback) but adds no depth that the schema lacks, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Add'), resource ('tasks or projects to OmniFocus'), and scope ('multiple... in a single operation'). The batch nature distinguishes it from single-add siblings (add_omnifocus_task, add_project), and the mention of 'add' separates it from batch_edit_items. The cross-reference to find_similar_tasks further orients the agent.

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

Usage Guidelines4/5

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

The final sentence gives explicit pre-use guidance: 'Before adding tasks that may already exist, call find_similar_tasks for each name and drop or replace any item with a strong match' — naming the alternative tool and the condition that triggers it. It also explains the rationale ('batch creation multiplies duplicates'). It does not explicitly exclude single-item add tools, but the 'multiple... in a single operation' phrasing makes the batch context clear.

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

batch_edit_itemsBatch edit itemsA
Destructive

Edit up to 100 tasks/projects in one call with preview and per-item read-back verification. Earlier edits remain if a later item fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesUp to 100 task/project edits, in order. Each item resolves and verifies independently.
dryRunNoPreview all edits without changing OmniFocus.
stopOnErrorNoStop after the first failure. Earlier successful edits remain; this is not an atomic batch.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark this as destructive (destructiveHint=true), so the write nature is known. The description goes further by disclosing non-atomic behavior ('Earlier edits remain if a later item fails') and per-item verification, which are not visible in annotations or the schema.

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

Conciseness5/5

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

Two sentences, front-loaded with the core capability and immediately followed by the critical failure-behavior caveat. Every clause carries information; nothing is redundant or generic.

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

Completeness5/5

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

Given the extensive schema (which documents all parameters and their semantics), an output schema for return values, and annotations covering safety, the description supplies exactly the missing behavioral context: batch scope, non-atomicity, and verification. An agent selecting and invoking the tool has all necessary cues.

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?

Schema description coverage is 100%, with detailed per-property explanations (date formats, ID vs name resolution, tag creation, status enum meanings). The tool description adds no parameter-specific detail, so it correctly relies on the schema's rich documentation.

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

Purpose5/5

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

The description states a specific verb ('Edit'), resource ('tasks/projects'), a concrete bound ('up to 100'), and distinctive capabilities ('preview and per-item read-back verification'). It clearly differentiates this from sibling tools like edit_item and batch_add_items.

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

Usage Guidelines3/5

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

The description implies a batch use case with 'in one call' but does not explicitly contrast with single-item edit_item or state when to choose this tool over alternatives. The context is inferred rather than spelled out.

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

batch_move_tasksBatch move tasksA
Destructive

Move multiple tasks to a project, parent task, or inbox in a single operation

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYesArray of tasks to move
dryRunNoResolve the destination and every task exactly as a real move would and report what WOULD move (including each task's current container), without moving anything. Default false.
targetInboxNoMove tasks to inbox
targetProjectIdNoDestination project ID
targetProjectNameNoDestination project name
targetParentTaskIdNoDestination parent task ID
targetParentTaskNameNoDestination parent task name

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, and the description's 'Move' matches that destructive intent without contradicting it. The description adds the scope of the operation but does not disclose details like partial failure behavior, conflicts between destinations, or atomicity. With annotations carrying the destructive-safety signal, this is acceptable but not rich.

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

Conciseness5/5

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

One sentence with no filler. It front-loads the action, scope, and allowed destinations, making the tool's core purpose immediately clear.

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

Completeness3/5

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

The schema and output schema cover a lot, but the description does not clarify an important cross-parameter constraint: whether exactly one destination must be specified and what happens if multiple target parameters are provided. Since only 'tasks' is required in the schema, an agent might invoke the tool without a destination and fail. This gap keeps the definition from being fully complete.

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?

Schema description coverage is 100%, so the parameter names and descriptions already explain each field. The description adds general destination types (project, parent task, inbox) that map onto the target parameters, but it does not add meaning beyond what the schema already provides.

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

Purpose5/5

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

States a specific verb and resource: 'Move multiple tasks to a project, parent task, or inbox in a single operation.' It clearly scopes the tool to batch operation over multiple tasks, distinguishing it from the sibling move_task which handles a single task.

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

Usage Guidelines4/5

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

The description clearly conveys when to use this tool: when moving multiple tasks at once. It doesn't explicitly name alternatives or exclusions, but the 'multiple tasks' and 'single operation' phrasing provides enough context to route an agent toward this tool for batch moves and away from single-task equivalents.

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

batch_remove_itemsBatch remove itemsA
Destructive

Remove multiple tasks or projects from OmniFocus in a single operation

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesArray of items (tasks or projects) to remove
dryRunNoResolve every item exactly as a real removal would and report what WOULD be deleted, without deleting anything. Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4/5.0
Behavior3/5

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

The destructiveHint annotation already communicates that this is a destructive operation, and the description's 'Remove' is consistent with that. The description does not add much beyond the annotation except the batch/single-operation scope; it does not mention irreversibility, cascading project deletion, or failure behavior. With annotations present, the bar is lower, so this is adequate but not exceptional.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. It names the action, the target resource, and the batching behavior without wasting any words.

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

Completeness4/5

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

For a destructive batch operation, the description is terse, but the rich input schema, destructive annotation, and presence of an output schema cover most operational detail an agent needs. It would be slightly stronger with explicit guidance about using remove_item for single removals, but the tool is otherwise complete enough to select and invoke correctly.

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?

Schema description coverage is 100%, and the schema already explains items, itemType, id, name, and dryRun clearly, including the important fallback rule for id vs name. The tool description adds no parameter-level guidance beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Remove'), a clear resource ('multiple tasks or projects from OmniFocus'), and a scoping qualifier ('in a single operation'). This makes it easy to distinguish from single-item siblings like remove_item and from add/edit batch siblings like batch_add_items and batch_edit_items.

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

Usage Guidelines4/5

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

The phrase 'multiple... in a single operation' clearly indicates when this tool is appropriate: when several items need deletion at once. It does not explicitly name alternatives or state when not to use it, but the batch context is clear enough to guide selection.

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

complete_taskComplete taskA

Complete a task. Already-completed tasks are unchanged; repeating tasks advance on each call, so do not blindly retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID. Already-completed tasks are unchanged; repeating tasks advance on every call. Do not blindly retry.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only indicate that the operation is non-read-only and non-idempotent. The description adds meaningful behavioral context: already-completed tasks are unchanged, while repeating tasks advance on each call, which explains the non-idempotency and warns against retries. This goes beyond the annotation flags.

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

Conciseness5/5

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

Three short sentences with no filler. The core action is front-loaded, and the important edge cases about already-completed and repeating tasks are stated efficiently.

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

Completeness5/5

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

For a single-parameter tool with an output schema and clear behavioral warnings, the description is complete enough for correct invocation. No additional prerequisites, return-value explanations, or alternative routing are necessary for this level of complexity.

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?

Schema description coverage is 100%, and the tool-level description adds no parameter-level detail beyond what is already in the schema. The task_id parameter is documented with the same behavioral notes, so the description does not compensate beyond the schema baseline.

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 states a specific verb ('Complete') and resource ('a task'), and clarifies the action's semantics by noting that already-completed tasks are unchanged while repeating tasks advance. It does not explicitly contrast with sibling tools like uncomplete_task, but the verb and resource are enough to identify the tool's role.

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

Usage Guidelines4/5

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

The description provides clear context that completing a task is the intended action and warns against blind retries because repeating tasks advance on each call. It does not name alternatives or exclusions, but the retry warning is practical guidance for when not to call again.

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

convert_task_to_projectConvert task to projectA

Promote an existing task into a full project, keeping its subtasks, tags, and note. Optionally file it into a folder; without one the new project lands at the top level of the library.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoID of the task to promote into a project. A stale ID is an error — it never falls back to the name.
folderIdNoOptional destination folder ID (alternative to folderName).
keepTagsNoTags always carry over to the new project (they live on its root task). Pass false to strip them after conversion. Default true.
taskNameNoName of the task to promote (alternative to taskId). Ambiguous names are rejected with the list of matches.
folderNameNoOptional destination folder name. Omit to place the new project at the top level of the library.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4/5.0
Behavior3/5

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

The description discloses useful non-obvious behavior: subtasks, tags, and notes are preserved, and a missing folder defaults the project to the library top level. But it leaves the fate of the original task ambiguous and does not discuss reversibility or error behavior; with all annotations false, the description carries this burden.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, then preservation behavior and default placement. Every sentence earns its place with no redundant filler.

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

Completeness4/5

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

The schema covers all parameter semantics and an output schema exists, so the description plus schema give an agent enough to invoke the tool correctly. The main remaining gaps are an explicit alternative-routing rule and the ambiguous fate of the original task, which are minor at this complexity level.

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?

All five parameters already have full schema descriptions, so the description needs little compensation. It adds general context about folder default and preservation, but no new parameter-level detail beyond the schema.

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

Purpose5/5

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

The description uses a specific verb ('Promote') and resource ('an existing task into a full project'), and adds distinguishing preservation semantics (subtasks, tags, note). This clearly separates it from siblings like add_project or move_task.

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

Usage Guidelines4/5

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

The trigger condition is clear: use it when an existing task should become a full project. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full exclusion guidance.

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

create_folderCreate folderB

Create a new folder in OmniFocus, optionally nested under a parent folder

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new folder
parentNoParent folder name or ID (creates at top level if omitted)
idempotencyKeyNoStable request key for this create. Reuse identical arguments to replay its result across clients; an uncertain earlier attempt is never repeated.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already indicate this is a non-read-only, non-destructive write, and the description adds 'new' plus optional nesting. It does not disclose edge behaviors like duplicate-name handling or missing-parent handling, but it does not contradict the annotations either.

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?

A single, readable sentence with no filler. It is front-loaded with the core action and includes the key nesting option, though it is slightly redundant with the title.

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

Completeness4/5

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

For a low-complexity creation tool with full schema coverage, annotations, and an output schema, the description is largely sufficient to invoke the tool correctly. The main missing piece is explicit sibling routing, but that is a usage-guidance gap rather than a fundamental completeness failure.

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?

Schema description coverage is 100%, so the schema fully documents the parameters. The description's 'optionally nested under a parent folder' adds little beyond the parent parameter's own schema description, which already says a parent folder name or ID can be supplied and that top-level is used if omitted.

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 clearly states the action ('Create') and resource ('new folder in OmniFocus'), and adds the useful nesting qualifier. It is unambiguous, though it does not explicitly distinguish itself from sibling tools like add_project or create_tag.

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?

No guidance is given on when to use this tool versus related alternatives such as add_project, create_tag, or update_folder. The optional-parent hint is functional, not selection guidance, so the agent must infer appropriateness from the tool name alone.

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

create_tagCreate tagA

Create a new tag in OmniFocus, optionally nested under a parent tag

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new tag
parentNoParent tag name or ID (creates at top level if omitted)
idempotencyKeyNoStable request key for this create. Reuse identical arguments to replay its result across clients; an uncertain earlier attempt is never repeated.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutating but non-destructive nature is covered. The description adds a useful behavioral detail about optional parent nesting, but does not disclose behaviors like duplicate-name handling or side effects beyond creation.

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

Conciseness5/5

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

A single, front-loaded sentence that immediately states the verb, resource, domain, and the key optional behavior. There is no filler or repetition of schema details.

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

Completeness4/5

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

Given the low parameter count, full schema coverage, annotations, and an output schema, the description is nearly sufficient. It could add a note about duplicate names or explicit alternatives, but nothing essential is missing for a basic create operation.

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?

Schema description coverage is 100%, so the schema already fully documents name, parent, and idempotencyKey semantics. The description's phrase 'optionally nested under a parent tag' paraphrases the parent parameter but adds little beyond the schema.

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

Purpose5/5

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

The description names a specific action ('Create'), a specific resource ('a new tag'), and the domain ('in OmniFocus'), plus the optional nesting behavior. This clearly distinguishes it from siblings like update_tag, delete_tag, and list_tags.

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

Usage Guidelines4/5

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

The description makes it obvious when to use this tool: when creating a tag, including an optional parent for nesting. It does not explicitly say 'use update_tag for modifications', but the verb choice and context provide clear guidance without ambiguity.

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

delete_folderDelete folderA
Destructive

Delete an OmniFocus folder. WARNING: this also deletes all projects inside the folder.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_or_idYesFolder name or ID to delete. WARNING: deleting a folder deletes all projects inside it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already mark destructiveHint=true, and the description adds meaningful detail beyond that by warning that all projects inside the folder will also be deleted. This is precisely the kind of behavioral context an agent needs before invoking a destructive operation.

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 short and front-loads the core action, with the warning immediately following. Every sentence earns its place, though the first clause largely restates the title.

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

Completeness4/5

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

For a single-parameter destructive tool with a complete schema and output schema, the description is sufficiently complete. The destructive warning covers the most important operational consequence, and no other missing context would prevent correct invocation.

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?

Schema description coverage is 100%, so the parameter name_or_id is already fully documented. The description adds no additional parameter-level detail beyond repeating the warning, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Delete an OmniFocus folder') and immediately adds the critical destructive consequence. This clearly distinguishes it from other folder-related tools like create_folder, update_folder, and get_folder.

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 gives no guidance on when to use this tool versus alternatives such as remove_item or batch_remove_items. The intended use is implied by the name and first phrase, but there is no explicit context, prerequisites, or exclusions.

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

delete_tagDelete tagC
Destructive

Delete an OmniFocus tag

ParametersJSON Schema
NameRequiredDescriptionDefault
name_or_idYesTag name or ID to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already communicate that this is destructive (destructiveHint=true) and not read-only, so the description adds no new behavioral context. It does not disclose irreversible effects, what happens to tasks using the tag, or any deletion constraints. There is no contradiction with annotations, but no value beyond them either.

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 a single, zero-waste sentence that front-loads the core action and resource. It is concise, but it is also minimal enough that some behavioral or usage context is absent, which keeps it from a perfect score.

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

Completeness3/5

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

For a one-parameter destructive tool with an output schema and annotations, the definition is minimally viable: the agent knows what to call and what argument to provide. However, it lacks any mention of side effects or conditions for safe deletion, which matters for a destructive operation.

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?

Schema description coverage is 100%, with one clearly documented required parameter, name_or_id. The description itself adds no parameter-level meaning, but the schema already carries the semantic weight. A baseline of 3 is appropriate here.

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 states a specific verb and resource: 'Delete an OmniFocus tag.' This is clear enough to identify the operation, and the resource type 'tag' naturally distinguishes it from siblings like delete_folder and remove_item. It does not explicitly call out sibling differentiation, so it stops short of a full 5.

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 gives no guidance on when to use this tool versus alternatives such as remove_item, batch_remove_items, or delete_folder. There is no stated context, prerequisite, or exclusion. The agent must infer usage entirely from the name and resource type.

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

dump_databaseDump databaseA
Read-only

Gets the current state of your OmniFocus database

ParametersJSON Schema
NameRequiredDescriptionDefault
hideCompletedNoSet to false to show completed and dropped tasks (default: true). Completed/dropped tasks are capped at the most recent 50 per project; the report notes how many were omitted.
hideRecurringDuplicatesNoWhen completed tasks are shown (hideCompleted: false), collapse repeated completed instances of the same recurring task — same name, same project, has a repetition rule — into the most recent instance, marked '(×N completed instances)'. Has no effect when hideCompleted is true (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds value by noting the database state is 'current' and the parameter descriptions disclose important behavioral details: completed/dropped tasks are capped at 50 per project and the report notes omissions. This goes beyond the annotations.

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 a single concise sentence that front-loads the core purpose. The parameter descriptions carry the detailed behavioral information, which is appropriate placement. No wasted words.

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

Completeness4/5

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

The tool has an output schema, so return values are documented elsewhere. The description plus rich parameter descriptions cover the key behaviors (completion cap, recurring duplicate collapsing). It's slightly incomplete in not stating the overall scope of what 'current state' includes (e.g., projects, tasks, folders, tags), but the output schema likely covers that.

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?

Schema description coverage is 100%, so the schema already fully documents both parameters. The description itself doesn't add parameter-level meaning beyond what the schema provides, but the schema's parameter descriptions are rich (explaining defaults, caps, and the recurring-duplicate collapse behavior). Baseline 3 is appropriate.

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 'Gets the current state of your OmniFocus database' clearly identifies the tool as a read-only database dump operation. It distinguishes it from sibling tools like get_flagged_tasks or get_inbox_tasks by its broad scope, though it doesn't explicitly name a sibling alternative.

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

Usage Guidelines3/5

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

The description implies this is the tool to use when you need the full current state of the database, as opposed to specific filtered views. However, it doesn't explicitly state when to use this over alternatives like filter_tasks or search_items, nor does it mention any exclusions or prerequisites.

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

duplicate_taskDuplicate taskA

Duplicate an existing task, optionally into a different project. Copies name, note, dates, flags, tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoThe ID of the task to duplicate
newNameNoName for the duplicate (defaults to source task name)
taskNameNoThe name of the task to duplicate (alternative to taskId)
includeNoteNoCopy note from source (default: true). Set false to clear the duplicate's note.
includeTagsNoCopy tags from source (default: true). Set false to strip tags from the duplicate.
newProjectIdNoProject ID to place the duplicate in
idempotencyKeyNoStable request key for this create. Reuse identical arguments to replay its result across clients; an uncertain earlier attempt is never repeated.
newProjectNameNoProject name to place the duplicate in (must match exactly one project; ignored if newProjectId is given)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate the operation is neither read-only nor destructive. The description adds useful detail about which fields are copied (name, note, dates, flags, tags) and the optional destination project. It leaves open whether unlisted data such as subtasks, attachments, or repetition are excluded, and it does not explicitly state that a new task is created.

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

Conciseness5/5

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

One front-loaded, single-sentence description conveys the action, resource, optional project behavior, and copied fields with no filler. Every phrase contributes useful information.

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

Completeness3/5

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

With full schema coverage and an output schema present, the description covers the core purpose adequately. It still leaves some call-relevant ambiguity: default project placement when no project is supplied, interaction between taskId and taskName, and whether non-listed data is silently omitted.

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?

Schema description coverage is 100%, so the schema already documents all eight parameters, setting the baseline at 3. The description's copied-fields list lightly reinforces includeNote/includeTags but adds little beyond what the schema already states.

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 states a specific action ('Duplicate') on a clear resource ('an existing task') and lists the copied fields, which makes the tool's purpose immediately understandable and distinct from edit/move siblings. It does not explicitly contrast itself with any sibling, so it stops short of full differentiation.

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

Usage Guidelines3/5

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

Usage is implied: an agent can infer that this tool is for duplicating tasks, and the optional different-project behavior adds context. However, there is no explicit when-to-use or when-not-to-use guidance, nor any reference to alternatives like move_task or edit_item.

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

edit_itemEdit itemC
Destructive

Edit a task or project in OmniFocus. Supports: rename, set/clear dates (due, defer, planned), flag/unflag, set status (complete, drop, reopen), add/remove/replace tags, set estimated minutes, move to different project/parent task/inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe ID of the task or project to edit. An ID that matches nothing is an error — it never falls back to the name.
nameNoThe name of the task or project to edit (used only when no ID is provided; errors on duplicate names)
dryRunNoResolve the complete edit and preview changes without writing.
addTagsNoTags to add (works for tasks and projects). Tags that don't exist yet are created.
newNameNoNew name for the item
newNoteNoNew note for the item
itemTypeYesType of item to edit ('task' or 'project')
addTagIdsNoExact tag IDs to add; may be combined with addTags paths.
newStatusNoFor tasks: new status (incomplete, completed, dropped). For projects use newProjectStatus.
newDueDateNoDue date. Full ISO 8601 with timezone (e.g., 2026-03-05T09:00:00-06:00), or a bare YYYY-MM-DD which is interpreted as local midnight on that day. Set to empty string to clear.
newFlaggedNoSet flagged status (set to false for no flag, true for flag)
removeTagsNoTags to remove (works for tasks and projects)
moveToInboxNoFor tasks: move task to inbox
newFolderIdNoFor projects: new folder to move the project to, by ID. Use list_folders to find IDs. Preferred when names are ambiguous and a path is awkward.
replaceTagsNoTags to replace all existing tags with (works for tasks and projects). Pass an empty array to clear every tag; omit the field to leave tags unchanged.
newDeferDateNoDefer date. Full ISO 8601 with timezone (e.g., 2026-03-05T09:00:00-06:00), or a bare YYYY-MM-DD which is interpreted as local midnight on that day. Set to empty string to clear.
newProjectIdNoFor tasks: move task to this project ID
removeTagIdsNoExact tag IDs to remove.
newFolderNameNoFor projects: new folder to move the project to, by name. Accepts slash-separated paths (e.g. 'Someday/Maybe/Travel') when a bare name is ambiguous. Literal-name lookup wins first, so folder names containing '/' still work.
newSequentialNoFor projects: whether the project should be sequential
replaceTagIdsNoExact tag IDs to replace all tags with; may be combined with replaceTags paths.
newPlannedDateNoPlanned date. Full ISO 8601 with timezone (e.g., 2026-03-05T09:00:00-06:00), or a bare YYYY-MM-DD which is interpreted as local midnight on that day. Set to empty string to clear. Requires an OmniFocus build with planned dates; unsupported builds return a warning instead of failing.
newProjectNameNoFor tasks: move task to this project name (errors on duplicate names)
newParentTaskIdNoFor tasks: move task under this parent task ID
newProjectStatusNoFor projects: new status. For tasks use newStatus.
newParentTaskNameNoFor tasks: move task under this parent task name (errors on duplicate names)
dropAllOccurrencesNoOnly meaningful with newStatus: 'dropped' or newProjectStatus: 'dropped'. Defaults to false, which drops just the current occurrence of a repeating item; set true to drop every future occurrence as well.
newEstimatedMinutesNoNew estimated minutes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already carry readOnlyHint=false and destructiveHint=true, so the description does not need to restate that this mutates data. However, it adds little behavioral context beyond what the parameter schema already shows — no mention of permanence, side effects, ambiguous-ID behavior, or the dryRun preview option. There is no annotation contradiction.

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 a single front-loaded sentence that clearly opens with the tool's purpose before listing supported operations. It is dense but not bloated; the list is reasonable for a tool of this breadth.

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

Completeness3/5

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

The very rich input schema, output schema, and annotations cover most invocation details, so the description need not explain parameters or return values. Still, the missing usage guidance and lack of sibling differentiation leave the description somewhat incomplete as a stand-alone decision aid.

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?

Schema description coverage is 100%, so the input schema fully documents all 28 parameters. The description's 'Supports:' list mostly mirrors schema property names and categories, adding convenience but no deeper meaning beyond what the schema already provides.

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 clearly states the tool edits tasks or projects in OmniFocus and enumerates concrete operations (rename, dates, tags, status, etc.). It does not explicitly differentiate itself from siblings like complete_task, move_task, or batch_edit_items, but the verb+resource and capability list make its scope understandable.

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?

There is no guidance about when to use this tool instead of sibling tools such as complete_task, uncomplete_task, move_task, batch_edit_items, or append_to_note. The description implies it is the general-purpose editor, but it never states exclusions or routing rules.

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

filter_tasksFilter tasksA
Read-only

Advanced task filtering: status, dates (due/defer/planned/completed/added/modified/dropped), project, folder tree, tags, name/regex, note, repeat, estimate — plus and/or/not clauses, countOnly, field projection, and offset paging.

ParametersJSON Schema
NameRequiredDescriptionDefault
orNoAt least one condition must be true
andNoEvery condition must be true
notNoThe condition must be false
limitNoMaximum number of tasks to return (default: 100). Applied after all filters and sorting; the output notes when results were capped
fieldsNoOptional detail components to render ('project' = per-project headings). Id and name always render; omit for all
offsetNoSkip this many matches (default: 0). Applied after the sort, so paging never repeats or skips a task
sortByNoSort results by field
flaggedNoFilter by flagged status
hasNoteNotrue = only tasks with a non-empty note; false = only tasks without one
overdueNoShow overdue tasks only
dateModeNoDate predicates use dates set directly on tasks, or effective dates inherited from parents/projects. Default: direct.
dueAfterNoShow tasks due after this date. Bare YYYY-MM-DD is safe: it means local midnight that day. Full ISO 8601 (e.g., 2026-03-05T09:00:00-06:00) also accepted
dueTodayNoShow tasks due today
folderIdNoSame as folderName, by id. An id matching nothing is an error; never falls back to name
countOnlyNoReturn only the number of matches. Far cheaper — no task details are read
dueBeforeNoShow tasks due before this date. Bare YYYY-MM-DD is safe: it means local midnight that day. Full ISO 8601 (e.g., 2026-03-05T09:00:00-06:00) also accepted
sortOrderNoSort order (default: asc)
tagFilterNoFilter by tag name(s). Can be single tag or array of tags
addedAfterNoShow tasks created after this date
deferAfterNoShow tasks with defer date after this date. Bare YYYY-MM-DD is safe: it means local midnight that day
deferTodayNoShow tasks deferred to today
folderNameNoOnly tasks whose project is in this folder or any folder nested inside it. Inbox tasks never match
searchTextNoSearch in task names and notes
taskStatusNoFilter by task status. Can specify multiple statuses
addedBeforeNoShow tasks created before this date
deferBeforeNoShow tasks with defer date before this date. Bare YYYY-MM-DD is safe: it means local midnight that day
dueThisWeekNoShow tasks due this week (Sunday through Saturday, local time)
isRepeatingNotrue = only repeating tasks; false = only non-repeating tasks
nameMatchesNoCase-insensitive regex matched against the task name. Invalid patterns are rejected
perspectiveNoLimit search to specific perspective: inbox, flagged, all tasks
droppedAfterNoShow tasks dropped after this date (implies dropped tasks)
dueThisMonthNoShow tasks due this month
nameContainsNoCase-insensitive substring match on the task name only
plannedAfterNoShow tasks planned after this date. Bare YYYY-MM-DD is safe: it means local midnight that day
plannedTodayNoShow tasks planned for today
tagMatchModeNoMatch any tag (OR, default) or all tags (AND)
weekStartsOnNoStart of every week predicate, including completedThisWeek. Default Sunday (changed from Monday for completions in 0.6).
deferThisWeekNoShow tasks deferred to this week (Sunday through Saturday, local time)
droppedBeforeNoShow tasks dropped before this date (implies dropped tasks)
exactTagMatchNoSet to true for exact tag name match, false for partial (default: false)
modifiedAfterNoShow tasks last modified after this date
plannedBeforeNoShow tasks planned before this date. Bare YYYY-MM-DD is safe: it means local midnight that day
projectFilterNoFilter by project name (partial match)
completedAfterNoShow tasks completed after this date. Bare YYYY-MM-DD is safe: it means local midnight that day
completedTodayNoShow tasks completed today (since local midnight)
deferAvailableNoShow tasks whose defer date has passed (now available)
modifiedBeforeNoShow tasks last modified before this date
completedBeforeNoShow tasks completed before this date. Bare YYYY-MM-DD is safe: it means local midnight that day
plannedThisWeekNoShow tasks planned for this week (Sunday through Saturday, local time)
estimatedMinutesNoEstimate in minutes. All supplied comparators must hold; no estimate never matches
plannedThisMonthNoShow tasks planned for this month
completedThisWeekNoShow tasks completed since the start of this week at local midnight (default Sunday)
completedThisMonthNoShow tasks completed since the 1st of this month at local midnight
completedYesterdayNoShow tasks completed yesterday (local midnight to local midnight)
includeProjectRootsNoInclude project root tasks (default false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the key non-mutating behavior. The description adds little beyond a feature list (e.g., 'offset paging') and does not disclose edge cases or side effects, but it does not contradict the annotations.

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 a single dense sentence with no filler, front-loaded with 'Advanced task filtering'. It packs many meaningful feature categories into a compact overview, though it reads as a long laundry list and could be structured with examples or bullets for easier scanning.

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

Completeness4/5

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

Given the enormous 55-parameter schema with descriptions and a declared output schema, the description provides a sufficient high-level map of capabilities. It doesn't include examples or common usage patterns, but the schema's per-parameter descriptions fill most gaps.

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?

Schema description coverage is 100%, with every parameter individually described. The tool description adds a high-level conceptual grouping—and/or/not clauses, countOnly, field projection, offset paging—but does not provide any parameter-level detail beyond what the schema already gives.

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 states a specific verb and resource: 'Advanced task filtering' of tasks, and enumerates the dimensions (status, dates, project, folder tree, tags, name/regex, note, repeat, estimate). It clearly distinguishes itself from simpler sibling getters via the word 'Advanced', though it never names an alternative tool directly.

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

Usage Guidelines3/5

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

The description implies use for complex or multi-dimensional filtering but gives no explicit when-to-use guidance or exclusions. It doesn't route the agent to simpler siblings like get_inbox_tasks or get_flagged_tasks when advanced clauses aren't needed, leaving the selection largely to inference.

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

find_similar_tasksFind similar tasksA
Read-only

Find existing OmniFocus tasks whose names are similar to a proposed new task name. Run this BEFORE creating a task that might already exist — it returns ranked matches with similarity scores and task IDs so you can reuse an existing task instead of creating a duplicate. Tolerant of typos, word reordering, and partial names.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe task name you are about to create. Existing tasks are ranked by how closely their names match this.
freshNoBypass the process-local cache. Other clients and GUI changes may otherwise remain cached for the advertised TTL.
limitNoMaximum number of matches to return (1-20). Default 5.
minScoreNoMinimum similarity score (0-1) a task must reach to be listed. Default 0.35. Raise it (e.g. 0.6) for near-exact matches only; lower it to cast a wider net.
includeCompletedNoAlso search completed and dropped tasks. Default false — a finished task is rarely the one you want to reuse, but this is useful for checking whether something was already done.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.3/5.0
Behavior4/5

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

The readOnlyHint annotation already signals a safe read operation. The description adds valuable behavioral context beyond that: it returns 'ranked matches with similarity scores and task IDs' and is 'tolerant of typos, word reordering, and partial names.' This explains matching semantics without contradicting the annotation.

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

Conciseness5/5

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

Three sentences, each earning its place: purpose, usage timing, and matching tolerance. Information is front-loaded and there is no filler, repetition, or vague language. It is both concise and information-dense.

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

Completeness5/5

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

The description covers the core workflow, result type, and matching behavior. With a fully self-documenting schema, readOnlyHint annotation, and an output schema present, nothing essential is missing for an agent to select and invoke the tool correctly.

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?

Schema description coverage is 100%, and each parameter already has a detailed description (e.g., minScore explains raising/lowering thresholds). The tool description adds marginal value by framing the name parameter as 'the task name you are about to create' and mentioning tolerance behaviors, but it does not need to restate schema information.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Find existing OmniFocus tasks whose names are similar to a proposed new task name.' It clearly identifies the tool's purpose and distinguishes it from general search or filter tools by focusing on similarity matching and duplicate prevention. The workflow context ('Run this BEFORE creating a task...') further differentiates it from creation and editing siblings.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use guidance: 'Run this BEFORE creating a task that might already exist' and explains the goal of reusing an existing task to avoid duplicates. It does not name specific alternative tools or give exclusions, but the context is clear enough for an agent to route to this tool during task creation.

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

get_custom_perspective_tasksCustom perspective tasksA
Read-only

Get tasks from a specific OmniFocus custom perspective by name. Use this when user refers to perspective names like 'Today', 'Weekly Review', 'This Week' etc. - these are custom views created in OmniFocus, NOT tags. Supports hierarchical tree display of task relationships.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tasks to return in any display mode, including the tree modes (default: 1000). When tasks are truncated the output says '(showing N of M tasks)'.
displayModeNoDisplay mode for perspective tasks: project_tree (group by project + task hierarchy), task_tree (global task hierarchy), or flat (simple list). Default: project_tree
hideCompletedNoWhether to hide completed tasks. Set to false to show all tasks including completed ones (default: true)
showHierarchyNoDisplay tasks in hierarchical tree structure showing parent-child relationships. Use this when user wants 'hierarchy view' or 'tree view' (default: false)
groupByProjectNoLegacy parameter. Group tasks by project when displayMode is not provided. Default: true
perspectiveNameYesExact name of the OmniFocus custom perspective (e.g., 'Today', 'Weekly Review', 'This Week'). This is NOT a tag name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, covering the safety profile. The description adds a useful semantic distinction (custom perspectives vs tags) and mentions hierarchical tree display, but this largely overlaps with schema parameter descriptions and does not disclose deeper behavioral traits such as error handling, truncation behavior, or response structure beyond what the schema already provides.

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

Conciseness5/5

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

The description is three sentences, each earning its place: the action, the when-to-use guidance, and the tree-display capability. It is front-loaded with the core purpose and contains no filler or repetition.

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

Completeness4/5

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

The tool has 6 parameters all documented in the schema, an output schema, and a readOnly annotation. The description adds the key use-case context and the critical distinction from tags. It is slightly incomplete in not pointing to list_custom_perspectives for discovering perspective names, but that is a minor gap given the rich schema.

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?

Schema description coverage is 100%, so the schema fully documents all 6 parameters. The description reinforces the meaning of perspectiveName with examples and the 'NOT tags' distinction, but it does not add additional parameter-level semantics beyond that. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a clear verb+resource pair: 'Get tasks from a specific OmniFocus custom perspective by name.' It differentiates itself from tag-based tools by explicitly saying 'NOT tags' and providing concrete example perspective names, making it easy for an agent to distinguish from siblings like get_tasks_by_tag.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use guidance: 'Use this when user refers to perspective names like 'Today', 'Weekly Review', 'This Week' etc.' It also gives a when-not signal by clarifying these are not tags. However, it does not explicitly name an alternative tool (e.g., get_tasks_by_tag or list_custom_perspectives), so it stops short of a perfect 5.

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

get_flagged_tasksFlagged tasksB
Read-only

Get flagged tasks from OmniFocus with optional project filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
hideCompletedNoSet to false to show completed flagged tasks (default: true)
projectFilterNoFilter flagged tasks by project name (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, covering the read-only nature. The description adds no extra behavioral context beyond that—no mention of default hideCompleted behavior or that without a filter it returns all flagged tasks. It does not contradict annotations.

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 a single concise sentence that front-loads the core action. It contains no filler, though it could arguably include a note about the default hideCompleted behavior without becoming verbose.

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

Completeness3/5

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

Given the simple tool with only two optional parameters and a read-only annotation, the description is adequate but sparse. It doesn't mention that without a project filter all flagged tasks are returned, or any limitations. The output schema exists, so return details are not required, but a bit more context would improve completeness.

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 schema description coverage is 100%, with both parameters already documented. The description's phrase 'optional project filtering' adds minimal value beyond the schema's parameter description for projectFilter. Baseline of 3 is appropriate since the schema carries the parameter meaning.

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 states a specific verb and resource ('Get flagged tasks') and mentions optional project filtering, which is clear. However, it does not explicitly distinguish itself from sibling tools like filter_tasks or get_tasks_by_tag, though the resource 'flagged tasks' is specific enough.

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?

No guidance is provided on when to use this tool versus alternatives. With many sibling tools offering overlapping task-listing capabilities (e.g., filter_tasks, get_forecast_tasks, get_inbox_tasks), the description leaves the agent to infer the appropriate context.

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

get_folderGet folderA
Read-only

Get details of an OmniFocus folder including its projects and subfolders

ParametersJSON Schema
NameRequiredDescriptionDefault
name_or_idYesFolder name or ID to look up

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering safety and scope. The description adds that the tool returns projects and subfolders, which is useful context beyond annotations. However, it does not disclose any potential details like depth of recursion, performance implications, or whether it returns only immediate children or all descendants. Since annotations cover the main safety aspect, a 3 is appropriate with some additional value from the description.

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

Conciseness5/5

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

The description is a single sentence that is direct and efficient, with no filler. It is appropriately concise and front-loads the action and resource, making it immediately comprehensible.

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

Completeness4/5

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

Given it is a read-only operation with a single parameter, well-covered schema, and an output schema present (though not analyzed), the description provides the essential context: what it returns (details, projects, subfolders). It does not explicitly mention the output schema, but since the output schema exists, the description doesn't need to explain return values in detail. Minor gap: deeper behavioral details like depth of subfolders are absent, but for a simple lookup tool, this is sufficient.

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?

Schema coverage is 100%: the only parameter 'name_or_id' is described as 'Folder name or ID to look up', which is clear. The description adds minimal semantic value beyond this, since it doesn't clarify whether the ID is a database ID or an OmniFocus identifier, or how to distinguish a name from an ID. But with full coverage, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Get details') and the resource ('an OmniFocus folder'), and specifies the scope ('including its projects and subfolders'). This distinguishes it from sibling tools like 'list_folders' (which lists folders) and 'get_project_counts' (which counts projects), making its purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies it is for retrieving a single folder's details, contrasting with list_folders for listing all, but it does not explicitly state when to use this tool versus alternatives like search_projects or list_projects. There is no mention of when not to use it or direct comparison to siblings, so the usage context is only implied rather than explicit.

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

get_forecast_tasksForecast tasksA
Read-only

Get tasks from OmniFocus forecast perspective (due/deferred tasks in date range)

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLength of the forecast window in days, counting today as day 1: days=7 covers today through today+6 (default: 7). Overdue tasks are always included.
dateModeNoDate predicates use dates set directly on tasks, or effective dates inherited from parents/projects. Default: effective.
hideCompletedNoSet to false to show completed tasks in forecast (default: true)
includeDeferredOnlyNoSet to true to show only tasks becoming available by defer date in the window; due and overdue tasks are excluded (default: false)
includeProjectRootsNoInclude project root tasks (default false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true and openWorldHint=false, so the agent already knows this is a safe read operation. The description adds only the forecast-scope context; richer behavioral nuances (e.g., 'Overdue tasks are always included', dateMode semantics) live in the schema parameter descriptions, not the tool description. No contradictions found.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It states the resource and the core filter in a compact parenthetical, which is exactly as concise as it needs to be.

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

Completeness4/5

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

The description itself is minimal, but the input schema thoroughly documents every parameter, an output schema exists, and annotations cover the read-only safety profile. The only gap is the lack of explicit sibling-tool routing, but that's a usage-guidance concern rather than a completeness gap.

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 all five parameters, including defaults and edge cases. The tool description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('tasks from OmniFocus forecast perspective'), and clarifies the scope with 'due/deferred tasks in date range'. This clearly distinguishes it from siblings like get_flagged_tasks or get_inbox_tasks, even without reading the schema.

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

Usage Guidelines3/5

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

The description implies the use case—retrieving forecast tasks—but provides no explicit guidance on when to prefer it over alternatives like get_custom_perspective_tasks or get_today_completed_tasks. There is no 'when not to use' or mention of sibling tools.

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

get_inbox_tasksInbox tasksB
Read-only

Get tasks from OmniFocus inbox perspective

ParametersJSON Schema
NameRequiredDescriptionDefault
hideCompletedNoSet to false to show completed tasks in inbox (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds no further behavioral context, such as how the inbox perspective is defined, whether it includes project tasks or only loose tasks, or any rate limits or side effects. With annotations covering the safety profile, the description adds minimal extra value, making a 3 appropriate.

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

Conciseness5/5

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

The description is a single concise sentence with no filler. It is front-loaded with the core action and resource. Every word earns its place, and there is nothing unnecessary.

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

Completeness4/5

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

For a simple read-only tool with one parameter and an output schema (which is present but not shown in the description), the description is sufficiently complete for calling the tool. The agent knows what it does and how to use the parameter. The only gap is the absence of usage guidance, but that falls under dimension 2 rather than completeness for a single invocation.

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 single parameter hideCompleted is fully documented in the input schema with its meaning and default. Schema coverage is 100%, and the description does not add any additional semantics beyond what the schema provides. Baseline for high coverage is 3, and there is no extra value added.

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 states a clear verb and resource: 'Get tasks from OmniFocus inbox perspective.' It clearly identifies the action and the specific perspective. However, it doesn't differentiate from sibling tools like get_flagged_tasks or get_forecast_tasks, which follow a similar pattern, so it's clear but not distinct.

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?

No guidance is provided on when to use this tool versus alternatives. There is no mention of other inbox-related perspectives, no exclusions, and no context about prerequisites or typical use cases. Agents are left to infer that this is the tool for the inbox perspective among many similar get-* tools.

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

get_project_countsProject countsA
Read-only

Get aggregate project counts by status (active, on hold, completed, dropped, stalled)

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNoOptional folder name to scope counts to

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true ben openWorldHint=false, covering the safety profile. The description adds no additional behavioral details such as pagination, empty results, or error behavior, but for a simple aggregate read operation with an output schema, this is acceptable.

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

Conciseness5/5

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

A single sentence that front-loads the primary operation and the key grouping dimension. No filler or redundant elaboration.

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

Completeness5/5

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

For a simple aggregate-read tool with one optional parameter, full schema coverage, readOnlyHint, and an output schema, the description conveys everything an agent needs to invoke it correctly.

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?

Schema description coverage is 100% and the parameter description already explains that folder is an optional scope. The tool description adds no extra meaning beyond what the schema provides, matching the baseline of 3.

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

Purpose5/5

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

Description states a specific verb ('Get') with a clear resource ('aggregate project counts') and the dimension by which counts are grouped (status). It clearly distinguishes itself from list_projects and get_task_counts by focusing on status-based aggregate counts.

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

Usage Guidelines4/5

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

The description implies the tool is for retrieving aggregate status counts, with an optional folder scope, which provides clear context for when to use it. However, it does not explicitly mention when not to use it or name alternatives like list_projects for detailed project data.

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

get_task_by_idGet task by IDA
Read-only

Get information about a specific task by ID or name

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoThe ID of the task to retrieve
taskNameNoThe name of the task to retrieve (alternative to taskId)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior4/5

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

The annotation readOnlyHint=true already signals a safe read operation, so the description does not need to repeat that. The description adds that retrieval can be by ID or name, which is a behavioral nuance beyond the schema. It also implies a single task result, which is helpful context. No contradictions.

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

Conciseness5/5

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

The description is a single, short sentence that directly states the tool's purpose and the two ways to specify the task (ID or name). There is no fluff, and the key information is front-loaded.

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

Completeness4/5

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

The tool is simple: two optional parameters, both fully described in the schema, and an output schema exists (implicitly providing return structure). The description covers the core selection logic. It would be slightly better if it mentioned the exclusivity of the two params or fallback behavior, but given the available structured information, it is sufficiently complete.

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?

Schema description coverage is 100%, so the schema already documents both parameters. The description restates what the schema says (ID or name) but does not add new meaning such as format requirements, mutual exclusivity, or which is preferred. Baseline of 3 is appropriate given full schema coverage.

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 states a specific verb ('Get') and resource ('information about a specific task') and indicates retrieval by ID or name. It is clear what the tool does, though it does not explicitly differentiate from siblings like 'get_task_counts' or 'find_similar_tasks'.

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

Usage Guidelines3/5

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

The description implies the tool is for fetching a single task by ID or name, but it does not state when to use this versus other retrieval tools (e.g., filter_tasks, get_tasks_by_tag) or mention any prerequisites or limitations (e.g., exactly one of taskId or taskName must be provided).

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

get_task_countsTask countsB
Read-only

Get aggregate task counts with optional filters (project, tag, flagged, date range). Returns total, available, completed, overdue, due soon, flagged, deferred.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter to tasks with this tag (name match)
flaggedNoFilter to flagged (true) or unflagged (false) tasks
projectNoFilter to tasks in this project (name match)
dateModeNoDate predicates use dates set directly on tasks, or effective dates inherited from parents/projects. Default: direct.
dueAfterNoOnly count tasks due after this date. Bare YYYY-MM-DD is safe: it means local midnight that day
dueBeforeNoOnly count tasks due before this date. Bare YYYY-MM-DD is safe: it means local midnight that day
includeProjectRootsNoInclude project root tasks (default false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already flag this as read-only (readOnlyHint=true) and closed-world (openWorldHint=false), so no destructive-behavior disclosure is needed. The description adds a useful summary of the metric categories (total, available, completed, etc.) but doesn't go beyond that into quirks such as default exclusions or date-mode behavior.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the operation and followed by the output categories; every phrase earns its place.

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

Completeness4/5

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

For a read-only aggregate tool with a complete schema and an output schema available, the description is sufficient for selection and invocation. It captures the essential filters and return categories, though it doesn't spell out default behavior (e.g., includeProjectRoots) or dateMode semantics—those are already encoded in the schema.

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?

Schema coverage is 100%, with each of the seven parameters documented inline, so the baseline is 3. The description merely names filter dimensions already in the schema and adds no format, default, or interaction detail beyond it.

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 opens with a specific verb and object ('Get aggregate task counts') and enumerates the available filter dimensions and returned metrics, so an agent immediately understands the deliverable. It doesn't explicitly contrast with siblings such as get_project_counts or filter_tasks, but the 'task counts' resource and aggregated nature are unambiguous.

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?

There is no guidance on when to choose this over filter_tasks, get_flagged_tasks, or get_tasks_by_tag; the description states only what the tool does, not when alternatives are more appropriate. The optional-filters phrase implies a counting use case, but no exclusions or alternative routing are provided.

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

get_tasks_by_tagTasks by tagA
Read-only

Get tasks filtered by OmniFocus tags (labels like @home, @work, @urgent). Use this for tag-based filtering, NOT for custom perspective names. Tags are labels assigned to individual tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNameYesName of the tag to filter tasks by
exactMatchNoSet to true for exact tag name match, false for partial (default: false)
hideCompletedNoSet to false to show completed tasks with this tag (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds the context that tags are labels assigned to individual tasks, which clarifies the domain but does not disclose additional behavioral traits such as pagination, result limits, or any edge cases. Given the annotations, the description provides minimal extra behavioral value beyond what the schema and annotations already imply.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and usage guidance, with no redundant information. Every word contributes to clarity.

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

Completeness4/5

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

The tool has an output schema, so return values are covered. The description gives enough context to understand the tool's purpose and usage, including the distinction from custom perspectives. It does not mention when to use filter_tasks as an alternative, but the primary usage guidance is sufficient for most cases. The definition is adequate for a read-only filtering tool with three parameters.

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?

Schema description coverage is 100%, so all three parameters (tagName, exactMatch, hideCompleted) are documented in the schema. The description does not add any additional meaning or clarifications about the parameters beyond what the schema already provides, so it meets the baseline of 3.

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

Purpose5/5

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

The description states a specific verb ('Get'), resource ('tasks'), and filtering criteria ('by OmniFocus tags'), and explicitly distinguishes from custom perspective names. This makes it clear what the tool does and differentiates it from sibling tools like get_custom_perspective_tasks.

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

Usage Guidelines5/5

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

The description explicitly says 'Use this for tag-based filtering, NOT for custom perspective names,' providing a clear when-to-use directive and an exclusion. This directly guides the agent away from inappropriate alternatives.

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

get_today_completed_tasksCompleted todayC
Read-only

Get tasks completed today - view today's accomplishments

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tasks to return (default: 20)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, so the description carries less burden. However, the description adds only the mild framing 'view today's accomplishments' and does not disclose any additional behavioral traits such as response format, pagination, or sorting. It adds minimal value beyond the annotations.

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 a single concise sentence that front-loads the action. The second clause 'view today's accomplishments' is slightly redundant with the first, but overall the description is efficient and avoids unnecessary verbosity.

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

Completeness3/5

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

For a simple read tool with one optional parameter and an existing output schema (per context signals), the description is minimally adequate. It clearly states the purpose, and the annotations cover the read-only nature. However, it lacks usage context or clarification on how it differs from other task-list requests, leaving the agent to infer when to use it.

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 schema covers the single parameter 'limit' with a description at 100% coverage. The tool description does not mention the limit parameter, so it adds no extra meaning beyond the schema. Per the baseline for high schema coverage, a score of 3 is appropriate.

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 clearly states the verb 'get' and the resource 'tasks completed today', making the purpose unambiguous. It is specific enough to distinguish from siblings by name and scope (completed today), though it does not explicitly contrast with other task-listing tools like get_inbox_tasks or get_forecast_tasks.

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 alternatives. It simply states what it does but gives no context about when an agent should prefer it over other task-list tools, nor does it mention any exclusions or conditions.

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

list_custom_perspectivesList custom perspectivesA
Read-only

List all custom perspectives defined in OmniFocus. Pass includeRules to also get each perspective's filter rules and aggregation.

ParametersJSON Schema
NameRequiredDescriptionDefault
freshNoBypass the process-local cache. Other clients and GUI changes may otherwise remain cached for the advertised TTL.
formatNoOutput format: simple (names only) or detailed (with identifiers) - default: simple
includeRulesNoAlso return each perspective's archived filter rules (raw JSON) and its top-level filter aggregation ('all' | 'any' | none). Use this to inspect a perspective's definition before editing it with update_perspective_rules. Implies detailed output. Default: false

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already provide the safety profile with readOnlyHint=true and openWorldHint=false. The description adds the conditional behavior that includeRules expands results with filter rules and aggregation, which is useful. It does not contradict annotations, and it adds modest value beyond them.

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

Conciseness5/5

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

Two concise sentences with the core action first and the optional behavior second. There is no filler, redundancy, or unnecessary detail.

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

Completeness5/5

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

For a simple read-only enumeration tool with an output schema and fully documented optional parameters, the description plus structured fields is complete. An agent has enough information to call it correctly without missing prerequisites or hidden behavior.

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?

Schema description coverage is 100%, and each parameter already has a clear structured description. The tool description adds little beyond what the schema states, especially for fresh and format. The includeRules mention is helpful but largely duplicates the schema text.

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 specific verb and resource: 'List all custom perspectives defined in OmniFocus.' It also names the optional behavior around includeRules, which adds precision. It is distinct from task-focused siblings like get_custom_perspective_tasks, but it does not explicitly call out sibling differentiation, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is implied: the tool is the obvious way to enumerate custom perspectives, and the sentence about includeRules gives a direct usage condition. However, it does not name alternatives such as get_custom_perspective_tasks or update_perspective_rules, nor does it state when not to use this tool.

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

list_foldersList foldersA
Read-only

List all OmniFocus folders with project counts

ParametersJSON Schema
NameRequiredDescriptionDefault
freshNoBypass the process-local cache. Other clients and GUI changes may otherwise remain cached for the advertised TTL.
limitNoMaximum number of folders to return (default: 100)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.1/5.0
Behavior4/5

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

The description adds useful behavior beyond the annotations: it lists all folders and includes project counts in the result. The readOnlyHint already covers safety, and there is no contradiction with the annotations.

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

Conciseness5/5

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

The description is one short sentence with no filler and front-loads the action and target resource. Every word contributes to understanding what the tool does.

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

Completeness5/5

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

For a simple read-only list operation, the description, annotations, input schema, and output schema together provide everything an agent needs. Nothing essential is missing for selecting or invoking the tool correctly.

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 both parameters, so the schema carries the parameter-documentation burden. The tool description itself adds no parameter-level meaning, which matches the baseline of 3.

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

Purpose5/5

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

The description names a specific verb ('List') and resource ('OmniFocus folders') and adds the scope qualifier 'all'. The project-count detail further distinguishes it from siblings like get_folder and list_projects.

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

Usage Guidelines3/5

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

The usage is implied by the resource name: an agent can reasonably infer this is the folder-listing tool. However, the description does not explicitly state when to prefer it over get_folder, list_projects, or get_project_counts, nor does it mention when not to use it.

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

list_notificationsList notificationsA
Read-only

List all notifications (reminders) on a task

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoThe ID of the task
taskNameNoThe name of the task (alternative to taskId)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the description does not need to restate safety. It adds the useful clarification that notifications are reminders, but does not describe return format, ordering, or behavior when no parameters are given. Value is modest given the annotation coverage.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that conveys the action and scope without any filler. It is concise and immediately understandable.

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

Completeness4/5

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

For a straightforward read-only list operation with an output schema and two optional, well-documented parameters, the description is adequate. It does not explain the case where neither parameter is provided, but the schema implies at least one is needed, and the overall tool is simple.

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?

Schema coverage is 100% with descriptions for both parameters, so the description adds no new meaning beyond what the schema already provides. It does not clarify that taskId and taskName are alternatives or which one to use, but the schema itself notes taskName is an alternative.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'all notifications (reminders)' scoped to a task. It distinguishes itself from sibling add_notification and remove_notification tools by purpose, leaving no ambiguity about what operation this performs.

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

Usage Guidelines3/5

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

While this is the only list-notifications tool among siblings, the description gives no explicit guidance on when to use it or which parameter (taskId vs taskName) to prefer. The use case is implied rather than stated, and no exclusions or alternatives are mentioned.

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

list_projectsList projectsA
Read-only

List and filter OmniFocus projects by folder, status, stalled state, with sorting and pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
freshNoBypass the process-local cache. Other clients and GUI changes may otherwise remain cached for the advertised TTL.
limitNoMaximum number of projects to return (default: 100)
folderNoFilter to projects within this folder name
sortByNoSort field (default: name)
statusNoFilter by project status
sortOrderNoSort order (default: asc)
stalledOnlyNoOnly return stalled projects (active with tasks but no next action)
completedAfterNoOnly projects completed after this date. Bare 'YYYY-MM-DD' is interpreted as LOCAL midnight on that calendar day; add a time and offset (e.g. 2026-03-05T09:00:00-06:00) to pin an exact moment.
completedBeforeNoOnly projects completed before this date. Bare 'YYYY-MM-DD' is interpreted as LOCAL midnight on that calendar day; add a time and offset (e.g. 2026-03-05T09:00:00-06:00) to pin an exact moment.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds behavioral context by mentioning filtering, sorting, and pagination, and the schema adds cache-bypass semantics via the 'fresh' parameter. The description itself doesn't add much beyond the schema, but the combination of annotations and schema covers behavior well. A 4 is justified because the description plus structured data give a clear behavioral picture without contradiction.

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

Conciseness5/5

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

One sentence, front-loaded with the core action and resource, then the filter dimensions. Zero waste. Every word earns its place.

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

Completeness4/5

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

For a read-only list tool with a rich output schema, 100% parameter coverage, and readOnlyHint annotation, the description is nearly complete. The only minor gap is that it doesn't explicitly state the default sort order or that all parameters are optional, but the schema already covers those. A 4 is appropriate because the description plus structured data leave little to inference.

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?

Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly, including defaults, enums, and date-time semantics. The description adds no parameter-level detail beyond what the schema provides. Baseline 3 is correct when the schema does the heavy lifting.

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

Purpose5/5

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

The description states a specific verb ('List and filter'), a clear resource ('OmniFocus projects'), and enumerates the exact filter dimensions (folder, status, stalled state) plus sorting and pagination. This distinguishes it from siblings like search_projects and get_project_counts without needing to open schemas.

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

Usage Guidelines4/5

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

The description implies when to use this tool: when you need a paginated, filterable list of projects. It does not explicitly name alternatives or exclusion conditions (e.g., 'use search_projects for text search'), but the filter dimensions and pagination signal the intended use case clearly. A 4 is appropriate because context is clear but exclusions are not stated.

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

list_subtasksList subtasksA
Read-only

List children (subtasks) of a task, optionally recursive to show full hierarchy

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoThe ID of the parent task
taskNameNoThe name of the parent task (alternative to taskId)
recursiveNoInclude all descendants, not just direct children (default: false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds the recursive option and the notion of showing 'full hierarchy', which gives an agent insight into the tool's behavior beyond the schema annotation. It does not contradict annotations.

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

Conciseness5/5

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

A single, front-loaded sentence that states the verb, resource, and key optional behavior without any filler. Every word contributes to the tool's purpose and usage.

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

Completeness5/5

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

For a low-complexity read-only tool with no required parameters, an output schema, and full parameter descriptions, the description is sufficient. An agent can correctly invoke the tool and understand its behavior without additional context.

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?

Schema description coverage is 100%, so the schema fully documents all three parameters. The description mentions 'recursive' in a way that aligns with the schema's default and meaning, but does not add information beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('List'), a concrete resource ('children (subtasks) of a task'), and adds the optional recursive behavior. This clearly differentiates it from siblings like get_task_by_id or filter_tasks, which focus on individual tasks or broad filtering rather than parent-child hierarchy.

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

Usage Guidelines4/5

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

The description provides a clear context: use this when you need to list subtasks of a given task. It does not explicitly name alternatives or state when not to use it, but the purpose is specific enough that the intended usage is unambiguous. No exclusions are mentioned, but the context is clear.

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

list_tagsList tagsA
Read-only

List all OmniFocus tags with available task counts, filterable by status

ParametersJSON Schema
NameRequiredDescriptionDefault
freshNoBypass the process-local cache. Other clients and GUI changes may otherwise remain cached for the advertised TTL.
limitNoMaximum number of tags to return (default: 100)
sortByNoSort field (default: name)
statusNoFilter by tag status

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=trueverse, and the description adds only modest behavioral context: output includes task counts and results can be filtered by status. It does not contradict the annotations and does not need to disclose mutation behavior, but it also does not describe defaults, cache behavior, or other operational traits beyond what the schema already provides.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. It conveys the operation, resource, result content, and a filtering option efficiently.

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

Completeness5/5

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

With a complete input schema, readOnlyHint, and an output schema present, the description is sufficient for an agent to invoke the tool correctly. There are no required parameterscars, and the description covers the essential behavior of listing tags with counts and status filtering.

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?

Schema description coverage is 100%; all four parameters have descriptions and the key enums are defined. The description only echoes the status filter and adds nothing beyond the schema for fresh, limit, or sortBy, so the baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb and resource: 'List all OmniFocus tags' and adds meaningful result details ('with available task counts') and a filtering dimension ('filterable by status'). This clearly distinguishes it from siblings such as search_tags, create_tag, or get_task_counts.

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?

There is no guidance on when to prefer list_tags over alternatives like search_tags or get_tasks_by_tag, and no exclusions or prerequisites are mentioned. The sentence states the tool's purpose, not the decision context.

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

manage_attachmentsManage attachmentsA
Destructive

List, read, add, or remove file attachments on a task or project. 'read' returns small files inline as base64 and writes larger ones to an absolute savePath; 'add' takes either base64 content or an absolute filePath. 10MB limit either way.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoread/remove only: zero-based attachment index from 'list'. Indices shift after a removal, so re-list before removing a second attachment.
base64Noadd only: file contents as base64. Use this for content you generated. Max 10485760 bytes decoded. Mutually exclusive with filePath.
taskIdNoID of the task that owns the attachments.
filePathNoadd only: ABSOLUTE path to a file on disk to attach. Mutually exclusive with base64. Max 10485760 bytes.
filenameNoadd only: the filename to store the attachment under (e.g. 'receipt.pdf'). Include the extension — OmniFocus uses it to pick an icon and a handler app.
savePathNoread only: ABSOLUTE path to write the attachment to. Required for attachments of 262144 bytes or more. An existing file is never overwritten.
taskNameNoName of the task (alternative to taskId).
operationYes'list' shows every attachment with its index and size. 'read' returns one attachment (inline base64 when small, otherwise written to savePath). 'add' attaches a new file. 'remove' deletes an attachment by index.
projectIdNoID of the project that owns the attachments.
projectNameNoName of the project (alternative to projectId).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (destructiveHint true, readOnlyHint false), the description discloses key runtime behaviors: 'read' returns small files inline as base64 and writes larger ones to an absolute savePath, 'add' accepts either base64 or filePath, and there is a 10MB limit. This adds practical detail about output and input handling that is not present in the annotations.

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

Conciseness5/5

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

The description is exactly two sentences, front-loads the core purpose and operation list, and packs in the most relevant behavioral details (inline vs. file, base64 vs. path, 10MB limit) without redundancy. Every clause earns its place.

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

Completeness4/5

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

Given the presence of an output schema (which covers return values) and a fully documented input schema, the description covers the essential operational context: what operations exist, how input is provided, and size constraints. It does not mention edge cases like re-listing after removal, but that is already in the index parameter description, so the description is complete for an agent to call the tool correctly.

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 schema provides 100% coverage, so every parameter already has a meaningful description. The tool description adds a high-level summary of the operations and the 10MB limit, but it does not introduce semantics beyond what the schema already states (e.g., the 262144-byte threshold for savePath is in the schema). This matches the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the verb 'manage' and the resource 'file attachments on a task or project', then enumerates the four specific operations (list, read, add, remove). This distinguishes it from sibling tools that handle tasks, projects, or notes, and leaves no ambiguity about its scope.

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

Usage Guidelines4/5

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

The description implicitly defines when to use this tool—any time file attachments need to be handled on a task or project—and the operation field further clarifies the use case for each action. It does not explicitly name alternatives, but the sibling set contains no other attachment-specific tool, so the usage context is clear and unambiguous.

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

manage_reviewsManage project reviewsA
Destructive

Project review workflow. 'list_due' lists projects whose review date has arrived (all: true = every scheduled project); 'mark_reviewed' stamps one project or up to 100 via projectIds and advances each next review date by its own interval; 'set_schedule' sets the review interval (unit + steps).

ParametersJSON Schema
NameRequiredDescriptionDefault
allNolist_due only. false (default) returns only projects whose next review date has arrived; true returns every reviewable project that has a review schedule, due or not.
unitNoset_schedule only. Review interval unit. Combined with steps: unit 'week' + steps 2 = review every 2 weeks.
stepsNoset_schedule only. How many units between reviews (whole number >= 1).
operationYesWhat to do. 'list_due' = show projects whose review date has arrived (read-only). 'mark_reviewed' = stamp a project (or many) as reviewed now and advance its next review date by its own review interval. 'set_schedule' = set how often a project should be reviewed.
projectIdNoProject ID. Used by mark_reviewed (single project) and set_schedule. A stale ID is an error — it never falls back to the name.
projectIdsNomark_reviewed only. Mark many projects reviewed in one pass (1-100 IDs). Mutually exclusive with projectId/projectName.
projectNameNoProject name (alternative to projectId). Ambiguous names are rejected with the list of matches.
includeOnHoldNolist_due only. Include on-hold projects (default true — on-hold projects are still reviewable in OmniFocus). Completed and dropped projects are never returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, lowering the burden. The description adds meaningful behavioral context by stating that mark_reviewed stamps projects and advances next review dates, and that set_schedule changes intervals. It does not contradict the annotations, though it could more explicitly warn that set_schedule overwrites existing schedules.

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 a single dense paragraph organized by operation, with the workflow label front-loaded and no filler. It earns a 4 rather than 5 because the packed semicolon-heavy structure requires careful reading, though it remains efficient.

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

Completeness4/5

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

The schema is rich, covering all parameters, constraints, and mutual exclusions, and an output schema exists, so the description only needs to provide operation-level orientation, which it does. The only notable gap is not explicitly stating that mutating operations are destructive, but the annotation already supplies that signal.

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?

Schema coverage is 100%, so the baseline is 3. The description adds operation-level grouping of parameters like all, projectIds, and unit/steps, but it largely restates the schema's own descriptions rather than adding genuinely new parameter semantics.

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

Purpose5/5

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

The description names a specific workflow and enumerates three distinct operations with concrete verbs and resources: list_due, mark_reviewed, and set_schedule. This clearly distinguishes the tool from generic project-management siblings and from the title alone.

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

Usage Guidelines4/5

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

The description explicitly maps each operation to its intended task: listing due reviews, marking projects reviewed while advancing schedules, and setting review intervals. It does not name alternatives or exclusions relative to sibling tools, but the operation-level routing is clear and sufficient for the review workflow.

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

move_taskMove taskA
Destructive

Move an existing task to a project, parent task, or inbox

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe ID of the task to move
nameNoThe name of the task to move (fallback if ID not provided)
targetInboxNoMove task to inbox
targetProjectIdNoDestination project ID
targetProjectNameNoDestination project name (errors on duplicate names)
targetParentTaskIdNoDestination parent task ID
targetParentTaskNameNoDestination parent task name (errors on duplicate names)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, so the description needn't repeat that. The description adds no extra behavioral context beyond the mutation itself—e.g., what happens to subtasks or dependencies, or whether the move is reversible. Since annotations cover the key risk, a 3 is appropriate; the description is neutral and non-contradictory.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero fluff. It immediately conveys the action and scope. Efficient and well-structured.

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

Completeness3/5

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

While the schema documents all parameters, the description does not clarify that exactly one destination (inbox, project, or parent) must be specified, and that the target fields are mutually exclusive. This is a key usage constraint that an agent needs to know. The output schema exists, so return format is covered, but this single-target expectation is missing. Given the tool's parameter complexity, the description is slightly under-specified.

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?

Schema description coverage is 100%, so all seven parameters are documented with their roles. The tool description does not add any parameter-level meaning beyond what the schema already provides. Baseline of 3 is correct given the high coverage; no additional clarification is needed.

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

Purpose5/5

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

The description states a specific verb ('move') with a clear resource ('existing task') and explicit destinations (project, parent task, inbox). This distinguishes it from siblings like batch_move_tasks (multiple tasks) and reorder_task (reordering within a list), though it doesn't name them directly. The purpose is unambiguous.

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

Usage Guidelines3/5

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

The description implies its usage—moving a single task—but provides no explicit guidance on when to choose this over batch_move_tasks or reorder_task. There is no mention of exclusions or alternative tools. Given the sibling list includes a batch variant, an agent would benefit from a note like 'for single-task moves, use this; for multiple, use batch_move_tasks.'

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

remove_itemRemove itemB
Destructive

Remove a task or project from OmniFocus

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe ID of the task or project to remove. If provided and it matches nothing, the removal fails — it does NOT fall back to the name.
nameNoThe name of the task or project to remove (used only when no ID is given). Must match exactly one item; ambiguous names are rejected.
itemTypeYesType of item to remove ('task' or 'project')

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

B3.2/5.0
Behavior2/5

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

The description adds no behavioral context beyond the annotations. While destructiveHint=true already signals destruction, the description does not mention permanence, side effects (e.g., cascading deletion of sub-tasks), or any caution. It simply restates the action without elaborating on consequences.

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

Conciseness5/5

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

The description is a single, concise sentence that is front-loaded with the core purpose. There is no wasted wording, and it is immediately understandable.

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?

For a destructive tool, the description is too minimal. It lacks guidance on single-item scope (versus batch), does not warn about irreversibility or cascading effects, and does not mention what happens to dependent items. While the output schema and annotations cover some aspects, the description itself is incomplete for safe and correct usage.

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?

Schema description coverage is 100%, and the schema itself provides detailed descriptions for id and name, including the fallback behavior. The description adds no parameter-specific information, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Remove') and the resource ('a task or project from OmniFocus'), which is specific and distinct from sibling tools like batch_remove_items or delete_folder. The verb and object are unambiguous.

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 alternatives. It does not mention batch_remove_items for multiple removals or clarify that this is for single items. There is no 'when not to use' or explicit differentiation from similar removal tools.

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

remove_notificationRemove notificationA
Destructive

Remove a notification (reminder) from a task by index

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYesIndex of the notification to remove (use list_notifications to see indices). Indices shift after every removal — the remaining list is returned so you can re-target correctly.
taskIdNoThe ID of the task
taskNameNoThe name of the task (alternative to taskId)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.2/5.0
Behavior4/5

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

While annotations already indicate destructiveness (destructiveHint=true), the description adds valuable behavior beyond that: the side effect of indices shifting and the fact that the remaining list is returned. This helps the agent predict the outcome and re-target correctly, which is not covered by annotations alone.

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

Conciseness5/5

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

The description is a single, concise sentence that conveys the core purpose without wasted words. It is front-loaded with the key action and resource, making it easy to parse. The schema handles the rest, so no additional verbosity is needed.

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

Completeness4/5

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

For a simple removal tool with three parameters and an output schema, the description is sufficient. The schema provides detailed parameter semantics, and annotations cover the destructive nature. The description adds the critical index-shifting behavior, making it complete in context. Minor gaps like prerequisites are not necessary given the simplicity.

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 description coverage is 100%, with each parameter well-described (index includes behavior details, taskId/taskName are clear). The tool description itself adds no parameter-specific information beyond what the schema already provides. Baseline 3 is appropriate when the schema handles parameter semantics fully.

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

Purpose5/5

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

The description states a specific verb ('remove'), a specific resource ('notification (reminder)'), and the method ('by index'). This clearly distinguishes it from siblings like add_notification or list_notifications, and from remove_item which targets items rather than notifications.

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

Usage Guidelines4/5

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

The description implies the correct usage via 'by index', and the schema mentions using list_notifications to see indices. It also warns that indices shift and that the remaining list is returned for re-targeting. However, it does not explicitly state when not to use this tool or name alternatives, though the context strongly implies the workflow.

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

reorder_taskReorder taskA

Reorder a task within its container — move before/after a sibling, or to beginning/ending. Controls next action in sequential projects.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoThe ID of the task to reorder
positionNoMove task to beginning or ending of its container
taskNameNoThe name of the task to reorder (alternative to taskId)
afterTaskIdNoPlace task after this sibling task ID. Must be a true sibling (same parent task, or same project at the same level, or both in the inbox) — a reference task in another container is rejected rather than silently moving the task there. Use move_task to relocate.
beforeTaskIdNoPlace task before this sibling task ID. Must be a true sibling (same parent task, or same project at the same level, or both in the inbox) — a reference task in another container is rejected rather than silently moving the task there. Use move_task to relocate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate this is not read-only and not destructive. The description goes beyond that by disclosing the container-scoped behavior, the supported movement modes, and the consequence that reordering 'Controls next action in sequential projects.' It does not cover permissions or reversibility, but reordering is a low-risk mutation and no contradiction exists.

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

Conciseness5/5

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

Two tightly written sentences. The first front-loads the action, resource, and placement modes; the second explains the sequential-project effect. No repetition of annotations or schema details, and no filler.

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

Completeness4/5

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

With a rich schema, output schema, and the keywords in the description, an agent can determine what to supply and what the call will accomplish. The only mild gap is that the exact required combination (taskId or taskName plus one placement mode) is left implicit because all parameters are marked optional in the schema.

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?

Schema description coverage is 100%, so the baseline is 3. The description summarizes the placement categories but does not add per-parameter semantics that the schema doesn't already provide. The schema descriptions already explain taskId vs taskName, sibling requirements, and the move_task alternative.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Reorder a task within its container.' It then lists the exact placement modes (before/after a sibling, beginning/ending) and gives the domain purpose ('Controls next action in sequential projects'). This clearly distinguishes it from move_task, which relocates across containers, even though that sibling is not named in the prose.

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

Usage Guidelines4/5

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

'Within its container' signals this is not for relocation, and the schema's sibling-target descriptions explicitly reject cross-container references and say 'Use move_task to relocate.' Adding 'Controls next action in sequential projects' provides practical context for when reordering matters. The main gap is that the prose itself doesn't explicitly say 'for container changes, use move_task,' though the schema supplies that guidance.

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

search_automation_apiSearch automation APIA
Read-only

Search installed OmniFocus API docs (4.9+). Returns paginated TypeScript declarations and comments; does not execute code.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesAPI search text, e.g. Task.RepetitionRule or getTypeScriptDeclarations. Searches documentation, not tasks.
offsetNoUTF-16 character offset; use nextOffset from the previous page (default 0).
refreshNoBypass the documentation cache. The running OmniFocus version/build is checked on every call regardless.
maxCharactersNoMaximum returned text characters (default 12000).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior4/5

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

With readOnlyHint=true already in annotations, the description still adds behavioral value by stating it 'Returns paginated TypeScript declarations and comments' and 'does not execute code'. This tells the agent what to expect from the output and reinforces the non-executing, read-only nature beyond what annotations convey.

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

Conciseness5/5

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

The description is a single tightly packed sentence that front-loads the core purpose and adds two valuable behavioral clarifications: paginated TypeScript content and no code execution. Every clause earns its place with zero filler.

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

Completeness4/5

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

Given the read-only annotations, a fully self-describing schema, and the presence of an output schema, the description is largely complete for invoking this tool correctly. The main gap is the absence of any comparison to sibling search tools, such as search_items or analyze, which would have made usage guidance complete.

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?

Schema description coverage is 100%, so the input schema fully explains each parameter including query, offset, refresh, and maxCharacters. The description adds general context about searching API docs but no parameter-specific details beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb-resource pair: 'Search installed OmniFocus API docs (4.9+)', which is distinct from sibling search tools that target tasks, projects, or tags. It also clarifies it 'does not execute code', further disambiguating it from tools like analyze. This is a clear, non-tautological statement of what the tool does.

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 implies the tool is for looking up API documentation but offers no explicit guidance on when to choose it over sibling search tools or analyze, and names no alternatives or exclusions. The only implicit usage clue is the scope 'installed OmniFocus API docs', which is not enough to route an agent confidently.

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

search_itemsSearch itemsA
Read-only

Search tasks, projects, folders, and tags in one pass by name (optionally notes). Case-insensitive substring match; returns ids grouped by type with honest per-type totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText to look for. Plain case-insensitive SUBSTRING match — not fuzzy, not a regular expression
typesNoWhich entity types to search (default: all four — task, project, folder, tag)
searchInNoWhere to look (default: names). Notes only exist on tasks and projects, so 'notes' returns nothing for folders and tags
limitPerTypeNoMaximum rows returned PER TYPE (default: 20, max: 100). Every match is counted before the cut, so the output always reports the true total
includeCompletedNoInclude finished work (default: false, which hides completed/dropped tasks and done/dropped projects)
includeProjectRootsNoInclude project root tasks (default false).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the description correctly aligns with a safe read operation. It adds valuable behavioral context beyond the annotations: it specifies the exact matching semantics (plain substring, case-insensitive, not fuzzy or regex), that results are grouped by type, that per-type totals are honest (counted before the limit is applied), and that notes only exist on tasks/projects. These details help the agent set expectations and avoid misinterpreting results.

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

Conciseness5/5

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

The entire description is a single, well-structured sentence that front-loads the core purpose and then packs in the key behavioral facts (case-insensitive substring, grouped ids, honest totals) without any filler. It earns every word and remains immediately scannable, which is ideal for an agent deciding whether to invoke the tool.

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

Completeness4/5

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

The tool has an output schema, so the description doesn't need to detail return structures. The description covers the core search semantics, the type limitation for notes, and the honest-total guarantee. It omits the default for includeCompleted and limitPerType, but those are already in the schema with clear defaults. Overall, an agent has everything needed to call it correctly without extra probing.

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 schema provides a description for every parameter (100% coverage), so the description itself doesn't need to re-explain each one. However, it does add a couple of useful cross-cutting cues, like the substring match behavior and the note limitation, that aren't captured in any single parameter description. Since the schema already does the heavy lifting and the description adds only marginal param-specific value, a 3 is appropriate per the baseline.

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

Purpose5/5

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

The description states a specific verb ('Search') and a concrete resource scope ('tasks, projects, folders, and tags in one pass'), which immediately distinguishes it from narrower siblings like search_projects and search_tags. It also clarifies the matching mode ('Case-insensitive substring match') and the output shape ('returns ids grouped by type'), so an agent knows exactly what this tool does and how it differs from the rest.

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

Usage Guidelines3/5

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

The description implies this is the go-to tool for searching across multiple entity types at once, but it never explicitly names alternatives like search_projects or search_tags, nor does it say 'use this when you need a unified search' or 'when you only need one type, use the specific search'. The behavioral details (notes only on tasks/projects) provide context, but there is no direct guidance on when to choose this over a dedicated sibling, so the agent must infer the routing.

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

search_projectsSearch projectsA
Read-only

Search OmniFocus projects by name query

ParametersJSON Schema
NameRequiredDescriptionDefault
freshNoBypass the process-local cache. Other clients and GUI changes may otherwise remain cached for the advertised TTL.
limitNoMaximum number of results (default: 50)
queryYesSearch query to match against project names

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds the scoping detail that matching is against project names, but it does not disclose behaviors such as caching, case sensitivity, or how results are ordered beyond what the schema and output schema provide.

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

Conciseness5/5

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

A single, front-loaded sentence with the verb and resource up front. There is no filler or repetition; every word earns its place.

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

Completeness4/5

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

For a simple read-only search tool, the description combined with a fully documented schema and an output schema is largely sufficient. It does not point to sibling tools for when to use alternatives, but that is a minor gap for such a straightforward operation.

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?

Schema description coverage is 100%: query, limit, and fresh all have descriptions. The tool description adds no extra parameter semantics beyond restating that search matches project names, so the schema does the heavy lifting.

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

Purpose5/5

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

Description uses a specific verb 'Search', names the resource 'OmniFocus projects', and specifies the matching field 'by name query'. This clearly distinguishes it from list_projects (which lists all projects) and search_items/search_tags (which search other object types).

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

Usage Guidelines3/5

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

The phrase 'by name query' implies this tool is for name-based lookups, but there is no explicit guidance on when to use it versus alternatives like list_projects or search_items. No exclusions or conditions are stated.

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

search_tagsSearch tagsA
Read-only

Search OmniFocus tags by name query

ParametersJSON Schema
NameRequiredDescriptionDefault
freshNoBypass the process-local cache. Other clients and GUI changes may otherwise remain cached for the advertised TTL.
limitNoMaximum number of results (default: 50)
queryYesSearch query to match against tag names

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description need not restate that. The description adds no further behavioral context beyond the operation itself (e.g., caching behavior, ordering, or case sensitivity), but given the simplicity and the presence of annotations, this is adequate. It does not contradict the annotations.

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

Conciseness5/5

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

The description is a single sentence with zero fluff, front-loading the verb and resource. Every word earns its place, making it easy to parse quickly.

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

Completeness4/5

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

Given the presence of a rich output schema (though not shown in the prompt but indicated by 'Has output schema: true') and detailed annotations, the description is sufficient for an agent to call the tool correctly. It lacks guidance on when to use it over siblings, but that's already addressed in usage_guidelines. For a simple search operation, it covers the essential intent.

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 covers all parameters with descriptions (100% coverage), including 'query', 'limit', and 'fresh'. The description does not add any meaning beyond what the schema provides, so the baseline of 3 applies. It neither enhances nor interferes with the schema's clarity.

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

Purpose5/5

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

The description clearly states a specific verb ('Search') and resource ('OmniFocus tags') with a qualifier ('by name query'), distinguishing it from sibling tools like list_tags (which lists all tags) and get_tasks_by_tag (which retrieves tasks). It is unambiguous and immediately understandable.

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

Usage Guidelines3/5

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

The description does not explicitly mention when to use this tool versus alternatives (e.g., list_tags for all tags). It implies the use case by describing a name-based search, but an agent would benefit from explicit routing to list_tags when a full listing is needed. Minimal guidance but not misleading.

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

server_infoServer diagnosticsA
Read-only

Report server build, executable, OmniFocus version/capabilities and automation connectivity.

ParametersJSON Schema
NameRequiredDescriptionDefault
probeNoCheck OmniFocus automation connectivity and capabilities (default true). False reads only local build information.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.1/5.0
Behavior4/5

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

The description states that the tool reads build, executable, version, and connectivity information, which is consistent with readOnlyHint=true. It adds useful behavioral context beyond the annotation by naming what is inspected, without promising any write or side-effecting behavior.

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

Conciseness5/5

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

A single well-structured sentence front-loads the verb and lists all reported categories with no filler, redundancy, or repetition of information already present in the annotations or schema.

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

Completeness5/5

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

Annotations cover safety and scope, the schema fully documents the only parameter, and an output schema is present so return-value structure does not need to be restated. The definition is complete enough for an agent to invoke the tool correctly.

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 only parameter, probe, is fully described in the schema with its default value and behavioral distinction between checking connectivity and reading only local build info. The description adds no additional parameter semantics, so the schema-coverage baseline of 3 applies.

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

Purpose5/5

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

Description uses the verb 'Report' and enumerates the exact resource contents: server build, executable, OmniFocus version/capabilities, and automation connectivity. This clearly distinguishes it from task-manipulation siblings and makes the tool's scope immediately identifiable.

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

Usage Guidelines3/5

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

The intended use is only implied by the diagnostic focus and title; there is no explicit when-to-use guidance or mention of alternatives such as search_automation_api or dump_database. An agent can infer when it is relevant, but the description does not state it.

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

set_task_repetitionSet task repetitionA
Destructive

Set or clear a repeating schedule on a task. Use the structured fields (frequency/interval/daysOfWeek/daysOfMonth/count/endDate) — e.g. 2nd Tuesday monthly — or pass a raw iCal RRULE via rule_string. Verified by read-back.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoStructured repetition: stop after this many occurrences (ICS COUNT). Mutually exclusive with endDate.
endDateNoStructured repetition: stop repeating after this date (ICS UNTIL). Bare 'YYYY-MM-DD' emits the ICS DATE form for that calendar day; a full date-time is converted to the UTC form the ICS spec requires. Mutually exclusive with count.
task_idYesThe ID of the task
intervalNoStructured repetition: repeat every N periods of `frequency` (default 1). E.g. frequency 'weekly' + interval 2 = every other week.
frequencyNoStructured repetition: how often the task repeats. Required when using any other structured field.
daysOfWeekNoStructured repetition: which weekdays. Either plain names (monday/tuesday/wednesday/thursday/friday/saturday/sunday) or objects like { day: 'tuesday', position: 2 } for '2nd Tuesday' / { day: 'friday', position: -1 } for 'last Friday'. Positions require frequency 'monthly' or 'yearly'. Cannot be used with frequency 'daily' or together with daysOfMonth.
daysOfMonthNoStructured repetition: days of the month, 1-31, -1 for the last day, or -2 for the next-to-last day. Requires frequency 'monthly' or 'yearly'. Cannot be combined with daysOfWeek.
rule_stringNoRaw iCal RRULE string, e.g. 'FREQ=DAILY;INTERVAL=1', 'FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE,FR'. Escape hatch for rules the structured fields below cannot express. Mutually exclusive with frequency/interval/daysOfWeek/daysOfMonth/count/endDate. Ignored when schedule_type is 'none'.
schedule_typeYes'regularly' = fixed schedule (repeats on the calendar regardless of when you finish), 'from_completion' = OmniFocus 'Due Again' (next due date measured from the completion date), 'defer_from_completion' = OmniFocus 'Defer Another' (next defer date measured from the completion date), 'none' = clear repetition

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, so the agent knows this mutates state. The description adds value by disclosing that the operation is 'Verified by read-back' (i.e., the tool confirms the change by reading it back), and by explaining the semantics of schedule_type values (e.g., 'from_completion' = OmniFocus 'Due Again'). It also clarifies that rule_string is ignored when schedule_type is 'none'. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences with no filler. The core action is front-loaded, the two modes are stated compactly, and the read-back verification is a useful one-liner at the end. Every sentence earns its place.

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

Completeness4/5

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

For a 9-parameter mutation tool with 100% schema coverage and an output schema, the description is nearly complete. It covers the two input modes, the clearing behavior, and the verification behavior. It doesn't spell out mutual-exclusion rules, but those are already in the schema descriptions, so the description doesn't need to repeat them.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description adds a compact summary of the structured-vs-raw distinction and the '2nd Tuesday monthly' example, which helps an agent understand the overall model without reading every field. It doesn't repeat every schema detail, which is appropriate given the high coverage.

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

Purpose5/5

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

The description states a specific verb ('Set or clear') and resource ('a repeating schedule on a task'), and immediately distinguishes the two modes: structured fields vs raw iCal RRULE. It also mentions clearing via schedule_type 'none', which differentiates it from sibling task-editing tools like edit_item or move_task.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool (setting/clearing repetition) and explains the two input modes. It doesn't explicitly name sibling alternatives or state when NOT to use it, but the scope is specific enough that an agent can route correctly. The 'Verified by read-back' note adds operational context.

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

uncomplete_taskUncomplete taskA

Mark a completed task as incomplete again

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe ID of the completed task to mark incomplete. Idempotent: a task that is already incomplete succeeds and reports no change.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, and the description does not contradict them. The schema's idempotency disclosure—'a task that is already incomplete succeeds and reports no change'—adds valuable behavioral transparency beyond the annotations. It could go further by describing side effects or return value, but for a simple state-change tool this is solid.

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

Conciseness5/5

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

One sentence, zero wasted words, and the core purpose is front-loaded. The idempotency detail is appropriately placed in the schema, keeping the main description compact and scannable.

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

Completeness4/5

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

For a single-parameter tool with full schema coverage, an output schema, and clear annotations, the description is nearly complete. It states the action and the schema defines the parameter. It does not discuss edge cases like task subtasks or notifications, but for this tool's simplicity that is a minor gap.

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

Parameters4/5

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

Schema description coverage is 100%, and the description of task_id provides meaningful semantics beyond the name: 'The ID of the completed task to mark incomplete' and the idempotency behavior. Since the schema already documents the parameter well, the description doesn't need to add much, but what it adds is useful.

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 'Mark a completed task as incomplete again' clearly states the specific action and resource: un-completing a task. It distinguishes itself from the sibling tool 'complete_task' through the verb and meaning, though it does not explicitly name the sibling. It is clear and specific, but could be even stronger with explicit differentiation.

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

Usage Guidelines4/5

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

The description implies the use case: when a task was previously completed and needs to be reverted. The idempotency note in the schema adds context about behavior for already-incomplete tasks. However, it does not explicitly state when not to use it or mention alternatives, so it falls short of full guidance.

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

update_folderUpdate folderA
Destructive

Update an OmniFocus folder's name or status

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the folder
statusNoNew status for the folder
name_or_idYesFolder name or ID to update

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already cover the safety profile with readOnlyHint=false and destructiveHint=true. The description adds only that name or status can be changed, without explaining side effects of dropping a folder or irreversibility. That is acceptable given the annotation coverage, but it adds little beyond what structured metadata already communicates.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler or redundant detail. It directly states the action, target, and updatable fields, making it appropriately concise for a simple update operation.

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

Completeness5/5

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

For a low-complexity update tool, the combo of a 100%-covered schema, an output schema, and annotations (readOnlyHint=false, destructiveHint=true) covers the essential invocation knowledge. The required name_or_id is documented in the schema, so the description need not repeat it.

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?

Schema description coverage is 100%, with clear descriptions for name, status, and name_or_id and an enum for status. The description does not add meaning beyond those schema fieldshola; it merely restates the updatable attributes. This meets the baseline but does not exceed it.

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

Purpose5/5

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

The description clearly and specifically states a verb ('Update'), a resource ('an OmniFocus folder'), and the mutable attributes ('name or status'). It differentiates this tool from sibling folder tools like create_folder, delete_folder, get_folder, and list_folders without ambiguity.

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 explicit guidance on when to use this tool versus alternatives, no prerequisites (e.g., the folder must already exist), and no exclusions. Usage context must be inferred entirely from the tool's name and minimal description.

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

update_perspective_rulesUpdate perspective rulesA
Destructive

Replace a custom perspective's filter rules (and optionally its aggregation). Overwrites — read current rules first via list_custom_perspectives includeRules. Keys are validated before writing (OmniFocus silently accepts invalid rules), the write is read-back verified with rollback, and the previous rules are returned for undo.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesYesThe COMPLETE replacement rule array — this overwrites the perspective's rules, it does not merge. Read the current value with list_custom_perspectives({includeRules: true}) first. Leaf rules use keys such as: actionAvailability, actionStatus, actionHasDuration, actionWithinDuration, actionIsUntagged, actionHasTagWithStatus, actionHasAnyOfTags, actionHasAllOfTags, actionHasNoProject, actionHasProjectWithStatus, actionIsInSingleActionsList, actionWithinFocus, … Nest with { aggregateRules: [...], aggregateType: 'all' | 'any' | 'none' } and disable a clause with { disabledRule: {...} }. Example: [{ actionAvailability: 'remaining' }, { aggregateRules: [{ actionStatus: 'flagged' }, { actionStatus: 'due' }], aggregateType: 'any' }]
aggregationNoTop-level filter aggregation: 'all' = every rule must match, 'any' = at least one. Pass null to clear it. Omit to leave the perspective's current aggregation untouched.
perspectiveIdNoIdentifier of the custom perspective (from list_custom_perspectives). Takes precedence over perspectiveName.
perspectiveNameNoName of the custom perspective to rewrite. Ambiguous names are rejected with the matching identifiers — use perspectiveId then.
allowUnknownKeysNoWrite rule keys this tool does not recognize. Default false. OmniFocus silently ignores unknown keys, which can turn a narrow perspective into one that matches everything — only set this if you are certain the key is valid for your OmniFocus version.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses that keys are validated before writing because OmniFocus silently accepts invalid rules, that the write is read-back verified with rollback, and that previous rules are returned for undo. This gives an agent confidence and a recovery path. It clearly describes the mutation and its safeguards.

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

Conciseness5/5

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

Two compact sentences lead with the core operation, then immediately flag the overwrite behavior, then pack in validation, rollback, and undo value. No filler or repetition of schema content.

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

Completeness5/5

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

The description covers the destructive nature, prerequisite read, validation/rollback safeguards, and undo output, while the schema supplies parameter specifics and the output schema covers the return shape. Nothing an agent needs to invoke this safely is missing.

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?

Schema description coverage is 100%, so the schema already documents all five parameters, including the complete-replacement semantics of rules and the allowed aggregation values. The description reinforces that the operation optionally writes aggregation and says to read current rules first, but doesn't add parameter-level detail beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

Description opens with a specific verb and resource: 'Replace a custom perspective's filter rules' and explicitly notes optional aggregation. It self-identifies as overwriting rather than merging, so an agent can distinguish it from read-only perspective tools like list_custom_perspectives. No ambiguity remains.

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

Usage Guidelines4/5

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

Gives clear preconditions: 'read current rules first via list_custom_perspectives includeRules' and explains that the tool overwrites. It doesn't state exclusions or name an alternative for the same write operation, but no sibling provides this exact update capability, so the context is sufficient.

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

update_tagUpdate tagA
Destructive

Update an OmniFocus tag's name or status

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the tag
statusNoNew status for the tag
name_or_idYesTag name or ID to update

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
metaNo
toolYes
successYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered by structured data. The description adds only the 'name or status' detail and does not disclose side effects on tasks using the tag, reversibility, or permission requirements; no contradiction exists, but little context is added beyond annotations.

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

Conciseness5/5

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

The description is a single, tightly worded sentence that front-loads the key action and resource. Every word earns its place, and it is appropriately sized for a tool with three self-explanatory parameters.

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

Completeness4/5

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

The simple update semantics are adequately covered by the concise description and full schema documentation, and an output schema is present so return values need not be described. Minor omissions like explicit sibling routing or downstream effects of status changes exist, but they are not essential for correct invocation.

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?

Schema description coverage is 100%: all three parameters (name, status, name_or_id) have descriptions. The description's phrase 'name or status' simply echoes the schema's property descriptions and provides no additional semantic meaning beyond what the schema already offers.

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

Purpose5/5

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

The description states a specific operation and resource: 'Update an OmniFocus tag's name or status', naming both the entity (tag) and the mutable fields. This clearly distinguishes it from sibling tools like create_tag, delete_tag, and update_folder by specifying exactly what can be changed.

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

Usage Guidelines3/5

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

The description implies usage by explaining what can be updated, but it does not explicitly say when to use this tool versus alternatives like create_tag or delete_tag. There are no exclusions or alternative routing, so the decision is left to inference.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 53 tool updatesv0.7.0
    • First observedadd_notification
    • First observedadd_omnifocus_task
    • First observedadd_project
    • First observedanalyze
    • First observedapp_control
    • First observedappend_to_note
    • First observedbatch_add_items
    • First observedbatch_edit_items
    • First observedbatch_move_tasks
    • First observedbatch_remove_items
    • First observedcomplete_task
    • First observedconvert_task_to_project
    • First observedcreate_folder
    • First observedcreate_tag
    • First observeddelete_folder
    • First observeddelete_tag
    • First observeddump_database
    • First observedduplicate_task
    • First observededit_item
    • First observedfilter_tasks
    • First observedfind_similar_tasks
    • First observedget_custom_perspective_tasks
    • First observedget_flagged_tasks
    • First observedget_folder
    • First observedget_forecast_tasks
    • First observedget_inbox_tasks
    • First observedget_project_counts
    • First observedget_task_by_id
    • First observedget_task_counts
    • First observedget_tasks_by_tag
    • First observedget_today_completed_tasks
    • First observedlist_custom_perspectives
    • First observedlist_folders
    • First observedlist_notifications
    • First observedlist_projects
    • First observedlist_subtasks
    • First observedlist_tags
    • First observedmanage_attachments
    • First observedmanage_reviews
    • First observedmove_task
    • First observedremove_item
    • First observedremove_notification
    • First observedreorder_task
    • First observedsearch_automation_api
    • First observedsearch_items
    • First observedsearch_projects
    • First observedsearch_tags
    • First observedserver_info
    • First observedset_task_repetition
    • First observeduncomplete_task
    • First observedupdate_folder
    • First observedupdate_perspective_rules
    • First observedupdate_tag

TDQS

B3.3/5.0

Scored across 53 tools

Disambiguation2/5

Several task-retrieval tools overlap substantially: filter_tasks can express flag, tag, date, project, and inbox queries, yet dedicated get_flagged_tasks, get_today_completed_tasks, get_inbox_tasks, get_forecast_tasks, and get_tasks_by_tag are also present. Single/batch variants and complete_task/edit_item create further selection ambiguity. Descriptions help, but an agent will often have multiple valid tools for the same request.

Naming Consistency4/5

Most tools follow a snake_case verb_noun pattern such as list_projects, create_tag, delete_folder, and complete_task. Exceptions like server_info, analyze, and app_control, plus mixed object specificity (add_omnifocus_task vs add_project), keep it from being fully consistent.

Tool Count2/5

53 tools is well over the threshold where agents can easily navigate a tool list. Many tools are parameterized variants of one another—single vs batch, generic filter vs specialized getters—so the count feels inflated rather than curated.

Completeness4/5

The server covers task/project CRUD, folders, tags, notifications, attachments, reviews, perspectives, and app control, so there are no obvious dead ends. Minor gaps remain, such as no create/delete for custom perspectives and no dedicated get-project-by-id, but core OmniFocus workflows are well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that enables automation and management of OmniFocus tasks, projects, and tags using natural language and programmable interfaces from VS Code, command line, or any MCP-compatible client.
    12
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    An MCP server that provides full read/write access to OmniFocus, enabling AI assistants to manage tasks, projects, folders, tags, and perspectives via 51 tools, resources, and prompts.
    51
    11 npm
    21
    MIT