Skip to main content
Glama

🚀 OmniFocus MCP Enhanced

npm version License: MIT Node.js CI macOS

🌟 NEW: Native Custom Perspective Access with Hierarchical Display!

Transform OmniFocus into an AI-powered productivity powerhouse with custom perspective support

Enhanced Model Context Protocol (MCP) server for OmniFocus featuring native custom perspective access, hierarchical task display, AI-optimized tool selection, and comprehensive task management.

In plain English: this lets your AI assistant read your OmniFocus data, create tasks/projects, organize subtasks, review perspectives, and help you plan work without you manually jumping between apps.

🌠 Why This Project Exists

OmniFocus is already powerful, but it is still mostly a tool you drive by hand.

The bigger idea behind this project is simple:

  • less clicking, more conversation

  • less manual cleanup, more AI-assisted planning

  • less tool memorization, more natural task management

The goal is not just to expose more OmniFocus commands. The goal is to let you work with OmniFocus like this:

Plan my day.
Clean up my Inbox.
Turn these notes into a project.
Show me what is blocked.
Reorganize these tasks safely.

If that feels natural, this MCP server is doing its job.

Want to see where the project is heading next? See the roadmap.

Related MCP server: OmniFocus MCP Server

🆕 Releases

Full notes for every release are on the Releases page. Current surface: 26 tools (16 with structured output), 6 prompts, 3 resources.

Version

Date

Highlights

v2.4.0

2026-08-05

Structured output for the five tools that mint identifiers: add_omnifocus_task, add_project, duplicate_task, create_project_from_outline, and mark_projects_reviewed. Creating something and then referencing it no longer requires parsing an ID out of a sentence. Each of these tools now also reports an error instead of a success when OmniFocus returns no ID, replacing the id: undefined message it used to print

v2.3.0

2026-08-04

Structured output: 11 tools now return MCP structuredContent alongside their text, so an assistant reads stable IDs and per-item outcomes as data instead of parsing prose. Covers every read (filter_tasks, get_tasks, get_projects, manage_folders, manage_tags), all five batch tools, and count_tasks. Rendered text is unchanged

v2.2.0

2026-08-04

batch_edit_items — fields, tags, relative date shifts, and project review cadence across up to 100 tasks or projects in one verified, rollback-safe transaction. Also fixes exclusive tag groups, which never actually dropped a sibling tag, and drops the phantom fixed field from review interval output

v2.1.1

2026-08-04

Due, defer, and planned dates keep their time of day instead of collapsing to midnight

v2.1.0

2026-07-31

manage_perspectives reads, explains, and edits custom perspective filter rules; skill CLI 2.1x faster

v2.0.0

2026-07-31

Breaking: 41 tools consolidated into 25 (get_tasks, get_projects, manage_*); legacy names removed

v1.21.0

2026-07-29

batch_complete_tasks — up to 100 tasks in one verified, rollback-safe transaction

v1.20.0

2026-07-29

Repetition readable and verified everywhere; repetition accepted at creation

v1.19.0

2026-07-28

create_project_from_outline turns one confirmed outline into a full project tree

v1.18.0

2026-07-28

Reliability: MCP SDK 1.30.0, bounded Resource snapshots, rebuilt batch_remove_items

v1.17.1

2026-07-27

Modern MCP registration APIs, Node.js 22 baseline, npm tarball 2.27 MB → 117 KB

v1.17.0

2026-07-27

filter_tasks keyset pagination with stateless cursors

v1.16.0

2026-07-27

daily_review count-first discovery with capacity and deadline risks

v1.15.0

2026-07-27

mark_projects_reviewed completes the Weekly Review workflow

v1.14.0

2026-07-27

batch_move_tasks for safe, fully preflighted Inbox organization

Version

Date

Highlights

v1.13.1

2026-07-26

Server version read from package.json, ending version drift

v1.13.0

2026-07-26

Task-tree-aware reads: subtask counts plus showSubtasks / maxSubtaskDepth

v1.12.0

2026-07-26

filter_tasks / count_tasks rebuilt on one OmniJS predicate; get_projects added

v1.11.1

2026-07-26

install-skill defaults to the current project; --global opts out

v1.11.0

2026-07-26

Bundled omnifocus-cli agent skill — drive OmniFocus by shell instead of tool schemas

v1.10.0

2026-07-25

Tag management, task notifications, plus MCP Prompts and Resources

v1.9.0

2026-07-25

append_to_note, count_tasks, duplicate_task

v1.8.0

2026-07-25

Folder management: create, rename, move, and inspect nested folders (consolidated into manage_folders in v2.0.0)

v1.7.0

2026-07-24

set_repetition_rule (OmniFocus 4.7+ ICS rules) and exclusiveTags

v1.6.10

2026-03-22

Inbox completion, AppleScript escaping, and JSON escaping fixes

v1.6.9

2026-03-17

Task attachments: metadata in reads plus read_task_attachment

v1.6.8

2026-02-25

move_task with duplicate-name and cycle protection

v1.6.6

2026-02-12

Planned Date support across create, edit, read, filter, sort, and export

✨ Key Features

🌟 NEW: Native Custom Perspective Access

  • 🎯 Direct Integration - Native access to your OmniFocus custom perspectives via Perspective.Custom API

  • 🌳 Hierarchical Display - Tree-style task visualization with parent-child relationships

  • 🧠 AI-Optimized - Enhanced tool descriptions prevent AI confusion between perspectives and tags

  • ⚡ Zero Setup - Works with your existing custom perspectives instantly

🏗️ Complete Task Management

  • 🏗️ Complete Subtask Support - Create hierarchical tasks with parent-child relationships

  • 🔍 Built-in Perspectives - Access Inbox, Flagged, Forecast, and Tag-based views

  • 🚀 Ultimate Task Filter - Advanced filtering beyond OmniFocus native capabilities

  • 🎯 Batch Operations - Add/remove multiple tasks efficiently

  • 📊 Smart Querying - Find tasks by ID, name, or complex criteria

  • 🔄 Full CRUD Operations - Create, read, update, delete tasks and projects

  • 📁 Folder Management - Full CRUD for folders with nested hierarchy, move/rename, and content inspection

  • 🏷️ Tag Management - Full CRUD for tags with nesting, status control, and fuzzy search

  • 🔔 Task Notifications - List, add, and remove reminders (absolute time or relative to due date)

  • 💬 MCP Prompts - 6 guided workflows (daily, weekly, inbox processing, project planning, project shaping, task health scan)

  • 📡 MCP Resources - 3 live JSON snapshots (inbox, today, active projects)

  • 🛠️ Agent Skill - One-command install of a local CLI covering all 26 consolidated tools, to keep AI context usage low

  • 📅 Time Management - Due, defer, planned dates, estimates, and scheduling

  • 🏷️ Advanced Tagging - Tag-based filtering with exact/partial matching

  • 🚫 Mutually Exclusive Tags - Automatically respects exclusive tag groups when applying tags

  • 🔁 Repeat Rules - Full OmniFocus 4.7+ repetition support (ICS rules, schedule type, anchor date, catch-up, end date, count)

  • 🤖 AI Integration - Seamless Claude AI integration for intelligent workflows

  • 🖼️ Attachment-Aware Reads - Surface note attachments and linked files before deciding whether AI should inspect them

📦 Installation

Claude Code

# One-line installation
claude mcp add omnifocus-enhanced -- npx -y omnifocus-mcp-enhanced

Alternative methods for Claude Code:

# Upgrade to latest
npm install -g omnifocus-mcp-enhanced@latest

# Global installation
npm install -g omnifocus-mcp-enhanced
claude mcp add omnifocus-enhanced -- omnifocus-mcp-enhanced

# Local project installation (project-scoped)
# This creates/updates the current project's .mcp.json so the server is only available here.
git clone https://github.com/jqlts1/omnifocus-mcp-enhanced.git
cd omnifocus-mcp-enhanced
npm install && npm run build
claude mcp add -s project omnifocus-enhanced -- node "/path/to/omnifocus-mcp-enhanced/dist/server.js"

You can also install from npm into the consuming project's devDependencies instead of cloning:

npm install --save-dev omnifocus-mcp-enhanced
claude mcp add -s project omnifocus-enhanced -- npx -y omnifocus-mcp-enhanced

After adding, run claude once in the project directory and approve the pending MCP connection.

Claude Desktop / Cowork

Add the server to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "omnifocus-enhanced": {
      "command": "npx",
      "args": ["-y", "omnifocus-mcp-enhanced"]
    }
  }
}

For a local clone, use:

{
  "mcpServers": {
    "omnifocus-enhanced": {
      "command": "node",
      "args": ["/path/to/omnifocus-mcp-enhanced/dist/server.js"]
    }
  }
}

Restart Claude Desktop after editing the config file.

Using Both Claude Code and Claude Desktop / Cowork

Claude Code and Claude Desktop read separate configurations. If you want to use this MCP server from both, you need to install it in both places — run claude mcp add for Claude Code and add the entry to claude_desktop_config.json for Claude Desktop / Cowork.

📋 Requirements

  • macOS 10.15+ - OmniFocus is macOS-only

  • OmniFocus 3+ - The application must be installed and running

  • OmniFocus Pro - Required for custom perspectives (new features in v1.6.0)

  • Node.js 18+ - For running the MCP server

  • Any MCP-capable client - Claude Code, mcporter, or another MCP host

🚦 Start Here

If you only want the fastest way to understand this project, remember this:

  1. Connect the MCP server to your AI client.

  2. Talk to the AI naturally.

  3. Let it read, plan, create, move, or update your OmniFocus tasks for you.

You do not need to memorize all tool names first.

🙋 What This Is Good For

  • Daily planning: ask your AI what is due today, what is flagged, and what you can finish in 30 minutes.

  • Project setup: give the AI a rough goal, then let it create a project and break it into subtasks.

  • Inbox cleanup: ask it to review Inbox tasks and sort them into next actions, projects, or someday/later buckets.

  • Perspective reviews: ask it to open one of your custom perspectives and summarize what matters.

  • Batch capture: paste meeting notes or a brainstorm list and let the AI create multiple tasks at once.

  • Attachment-aware review: let the AI inspect task attachments only when needed.

💬 Example AI Conversations

This is the primary way to use this server. You don't call tools by hand — you talk to your assistant and it picks the tools. These prompts work in Claude Code, Claude Desktop, or any MCP client wired to the same server.

Planning your day

Check my Forecast and flagged tasks, then tell me the 3 most important things to do today.
Prefer tasks that take under 60 minutes first.
Open my custom perspective "今日工作安排" and summarize:
- what is due soon
- what looks blocked
- what I can finish quickly

Clearing the Inbox

Review my Inbox and group the tasks into:
1. do today
2. schedule later
3. turn into projects
Then help me clean up the obvious ones.
Turn these meeting notes into OmniFocus tasks under the project "Website Refresh".
Use subtasks where it makes sense and keep the task names short.

Shaping and editing work

Create a project called "Launch spring newsletter".
Add the main subtasks, estimated minutes, and mark the most important step as flagged.
Everything in "Website Refresh" slipped a week.
Show me the affected tasks first, then push every due date out by 7 days once I confirm.
Make "Weekly finance review" repeat every Monday at 9am,
and add a reminder 30 minutes before it is due.

Reviewing

Which projects are due for review? Walk me through them one at a time,
then mark the ones I confirm as reviewed.
My "Today" perspective is matching far too much.
Show me the filter rules behind it and explain what each one does before changing anything.

Working with attachments

Find the task called "Review design draft".
Show me what attachments it has first.
Only open the image attachment if there is one.

🧭 Practical Usage Tips

  • Ask the AI to look first, then change things if you want safer workflows.

  • Use task IDs when you have duplicate task names.

  • For subtasks, let the parent task determine the project. Do not also pass projectName.

  • For mcporter, complex arrays are much more reliable with --args '{...}'.

🎯 Core Capabilities

Capability

What it does

Key tools

🏗️ Subtasks

Full parent/child trees to any depth, with visible-child counts and on-demand expansion

add_omnifocus_task, batch_add_items

🔍 Perspective views

Inbox, Flagged, Forecast, and Tags as first-class reads

get_tasks

🌟 Custom perspectives

Read your own perspectives — and edit the filter rules behind them

get_tasks (source: "custom"), manage_perspectives

🚀 Task filtering

Dates, estimates, notes, tags, and status in one OmniJS predicate, with cursor pagination

filter_tasks, count_tasks

🎯 Batch operations

Up to 100 items per transaction — preflighted, verified, and rolled back on failure

batch_add_items, batch_move_tasks, batch_complete_tasks, batch_edit_items, batch_remove_items

📐 Project shaping

One confirmed outline becomes a complete project tree

create_project_from_outline

🔁 Repeating tasks

ICS repeat rules readable and writable, verified field by field

set_repetition_rule

🗂️ Folders & tags

Nested hierarchies with cycle protection and exclusive tag groups

manage_folders, manage_tags

📋 Review workflow

Native OmniFocus review metadata, marked in verified batches

get_projects, mark_projects_reviewed

🖼️ Attachments

Inspect metadata first, open images only when needed

read_task_attachment

📤 Structured output

11 tools return structuredContent next to their text, so IDs and per-item outcomes arrive as data

filter_tasks, get_tasks, get_projects, manage_folders, manage_tags, count_tasks, the five batch_* tools

Runnable examples for every row are in the Cookbook.

🛠️ Complete Tool Reference — 26 Tools

Task and project operations

  1. dump_database - Export the OmniFocus database

  2. add_omnifocus_task - Create one task, including subtasks and repetition

  3. add_project - Create one project

  4. remove_item - Delete a task or project

  5. edit_item - Edit or reposition a task or project

  6. move_task - Move one task

  7. batch_move_tasks - Atomically move a confirmed task set

  8. batch_complete_tasks - Atomically complete or reopen up to 100 tasks

  9. batch_edit_items - Atomically edit fields, tags, and project review cadence on up to 100 tasks or projects, with relative date shifts

  10. batch_add_items - Add multiple tasks or projects

  11. batch_remove_items - Atomically delete a confirmed item set

  12. create_project_from_outline - Create and verify one complete project tree

  13. get_task_by_id - Read one task and its attachment metadata

  14. read_task_attachment - Read one reported task attachment

  15. get_tasks - Read inbox, flagged, forecast, tag, or custom-perspective tasks via source

  16. filter_tasks - Filter tasks by status, dates, project, tags, text, and more; use { "completedToday": true } for today's completed work

  17. get_projects - Read all projects or use view=due_for_review for projects due for review

  18. mark_projects_reviewed - Atomically mark confirmed projects reviewed

  19. set_repetition_rule - Set, update, or clear a task repeat rule

Organization and productivity

  1. manage_perspectives - list, get, or update custom perspectives and their filter rules

  2. manage_folders - list, get, add, edit, or remove folders

  3. manage_tags - list, search, add, edit, or remove tags

  4. manage_task_notifications - list, add, or remove task reminders

  5. append_to_note - Append without overwriting a task/project note

  6. count_tasks - Count tasks using the filter engine

  7. duplicate_task - Duplicate a task, optionally with subtasks

The four manage_* tools mix reads and writes, so their MCP annotations are deliberately conservative and destructive. list/get/search actions do not mutate; remove actions require the same confirmation discipline as dedicated deletion tools. manage_perspectives never creates or deletes a perspective — OmniFocus exposes no automation API for either — so its only write is an in-place edit.

💬 MCP Prompts (NEW in v1.10.0)

Guided review workflows that pull live OmniFocus data and hand the AI a structured plan of attack. In clients like Claude Desktop these appear as selectable prompts.

Prompt

Arguments

What it does

daily_review

Pulls overdue, due-soon, and flagged tasks; produces today's top 3 priorities

weekly_review

GTD weekly review: classifies active projects as on track / at risk / stalled, proposes next actions

inbox_processing

Walks inbox items one by one through GTD clarification (delete/defer/delegate/keep)

project_planning

project

Breaks a project into sequenced, estimated next actions (fuzzy-matches the project name)

project_shaping

Turns conversation text into one reviewed, confirmed, verified project tree

📡 MCP Resources (NEW in v1.10.0)

Live JSON snapshots your AI client can read without calling a tool.

Resource URI

Contents

omnifocus://inbox

Current inbox tasks

omnifocus://today

Overdue + due today + flagged, grouped

omnifocus://projects

Active projects with task counts and stalled detection

🛠️ Agent Skill (NEW in v1.11.0)

With 26 consolidated tools, loading every MCP schema still costs context. The bundled omnifocus-cli skill generates a local CLI so agents can drive OmniFocus through compact shell commands instead.

Install

npx -y omnifocus-mcp-enhanced@latest install-skill

By default, this installs only in the current project:

your-project/
├── .claude/skills/omnifocus-cli/
│   ├── SKILL.md
│   └── bin/omnifocus-enhanced.cjs
└── config/mcporter.json

Use --global only when you intentionally want the skill available in every project:

npx -y omnifocus-mcp-enhanced@latest install-skill --global

The global skill is installed in ~/.claude/skills/omnifocus-cli/, and its MCP server registration is written to the home mcporter configuration.

That single command:

  1. Registers the MCP server with mcporter, pinned to the exact package version that shipped the installer, with lifecycle: "keep-alive" so repeat calls reuse one warm server instead of cold starting one each time

  2. Generates a standalone CLI from the server's live tool schemas (~20s), pinned to the Node runtime so the CLI stays runnable from any shell

  3. Installs SKILL.md + the CLI into the current project's .claude/skills/omnifocus-cli/ (or ~/.claude/skills/omnifocus-cli/ with --global)

  4. Verifies all 26 tools are present, that keep-alive reached the generated bundle, and that OmniFocus is reachable

Install elsewhere with CLAUDE_SKILLS_DIR=/custom/path npx -y omnifocus-mcp-enhanced@latest install-skill (AGENT_SKILLS_DIR remains available as a legacy alias).

Why generate the CLI locally?

The CLI is not shipped pre-built. It is generated on your machine from the server version you actually have installed, which means it can never silently lack the newest commands — the most common failure mode for this kind of tooling.

Usage

CLI=.claude/skills/omnifocus-cli/bin/omnifocus-enhanced.cjs

$CLI get-tasks --source inbox
$CLI count-tasks --flagged true
$CLI filter-tasks --task-status Available,Next --due-this-week true
$CLI manage-folders --action add --name "Clients" --parent-folder-name "Work"

Flag conventions: booleans need explicit values (--flagged true), arrays are comma-separated (--task-status Available,Next), and --raw '<json>' bypasses flag parsing for complex nested arguments.

Keeping it current

Re-run the installer after upgrading the server — a stale CLI will silently miss new tools:

npm install -g omnifocus-mcp-enhanced@latest
npx -y omnifocus-mcp-enhanced@latest install-skill

install-skill is the only supported refresh path. Do not use mcporter generate-cli --from <bundle>, even though mcporter inspect-cli suggests it: the replay metadata drops the server's lifecycle, so regenerating that way silently disables keep-alive and roughly doubles the latency of every command.

The keep-alive daemon runs against the generated CLI's own config, so a plain mcporter daemon status reads the wrong file and always reports "not running". Inspect the real one with:

npx -y mcporter@latest --config $(ls -t ~/.mcporter/generated/*.json | head -1) daemon status

Batch move feature roadmap (future): docs/roadmap/2026-02-25-batch-move-tasks-plan.md

🚀 Quick Start Examples

Three representative calls. Every tool, every argument, and the full CLI syntax live in the Cookbook.

# Create a task with a project, due date, and planned date
add_omnifocus_task {
  "name": "Review quarterly goals",
  "projectName": "Planning",
  "dueDate": "2025-01-31",
  "plannedDate": "2025-01-28"
}

# Nest a subtask — the parent task determines the project
add_omnifocus_task {
  "name": "Design landing page",
  "parentTaskName": "Launch Product Campaign",
  "estimatedMinutes": 240,
  "flagged": true
}

# Find high-priority work you can actually finish
filter_tasks {
  "flagged": true,
  "taskStatus": ["Available"],
  "estimateMax": 120,
  "hasEstimate": true
}

The Cookbook covers the rest: task moves, custom perspectives, folder and tag management, notifications, repetition rules, batch operations, and attachment inspection.

🔧 Configuration

Claude Code

Verify the server is registered:

# Check MCP status
claude mcp list

# Test basic connection
get_tasks {"source": "inbox"}

# Test custom perspective access
manage_perspectives {"action": "list"}

Claude Desktop / Cowork

Open ~/Library/Application Support/Claude/claude_desktop_config.json and confirm the omnifocus-enhanced entry is present under mcpServers. Restart the app after any changes. Once running, you can test by asking the assistant to list your inbox tasks or custom perspectives.

Troubleshooting

  • Ensure OmniFocus 3+ is installed and running

  • Verify Node.js 18+ is installed

  • For Claude Code: run claude mcp list to confirm the server is registered

  • For Claude Desktop / Cowork: verify claude_desktop_config.json is valid JSON and restart the app

  • Enable accessibility permissions for terminal apps if needed

🎯 Use Cases

  • Project Management - Create detailed project hierarchies with subtasks

  • GTD Workflow - Leverage perspectives for Getting Things Done methodology

  • Time Blocking - Filter by estimated time for schedule planning

  • Review Process - Use custom perspectives for weekly/monthly reviews

  • Team Coordination - Batch operations for team task assignment

  • AI-Powered Planning - Let Claude analyze and organize your tasks

📈 Performance

  • Fast Filtering - Native AppleScript performance

  • Batch Efficiency - Single operation for multiple tasks

  • Memory Optimized - Minimal resource usage

  • Scalable - Handles large task databases efficiently

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests if applicable

  5. Submit a pull request

📄 License

MIT License - see LICENSE file for details.

🙏 Acknowledgments

Based on the original OmniFocus MCP server by themotionmachine. Enhanced with perspective views, advanced filtering, and complete subtask support.


⭐ Star this repo if it helps boost your productivity!

Available Tools

25 tools
add_omnifocus_taskC

Add a new task to OmniFocus

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the task
noteNoAdditional notes for the task
tagsNoTags to assign to the task
dueDateNoThe due date of the task in ISO format (YYYY-MM-DD or full ISO date)
flaggedNoWhether the task is flagged or not
deferDateNoThe defer date of the task in ISO format (YYYY-MM-DD or full ISO date)
repetitionNoRecurrence applied and verified after creation. Verification failure removes the created task.
plannedDateNoThe planned date of the task in ISO format (YYYY-MM-DD or full ISO date)
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
exclusiveTagsNoRespect mutually exclusive tag groups when applying tags (default: true). When a tag belongs to an exclusive group, sibling tags from that group are removed.
parentTaskNameNoThe name of the parent task to create this task as a subtask (alternative to parentTaskId)
estimatedMinutesNoEstimated time to complete the task, in minutes

TDQS

C2.9/5.0
Behavior2/5

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

The description does not disclose any behavioral traits beyond the action itself. Annotations indicate it is not read-only, but the description does not mention side effects (e.g., task location defaults, verification of repetition). The schema's repetition description mentions verification failure removing the task, but the main description omits this.

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 very concise, using a single sentence. It is front-loaded with the core action, but lacks structure for complex details. It earns its place as a starting point.

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?

Given the tool's complexity (13 parameters, nested objects) and no output schema, the description is insufficient. It does not explain return values, behavior when project is missing, or how failure is handled. The schema provides some details, but the description should cover high-level 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 already documents all parameters. The tool description adds no additional meaning or context beyond the schema's descriptions. Baseline 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 action (add) and resource (task to OmniFocus). However, it does not differentiate from sibling tools like add_project or batch_add_items, which are also addition operations.

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 when not to use it or which sibling tools might be more appropriate.

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

add_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
dueDateNoThe due date of the project in ISO format (YYYY-MM-DD or full ISO date)
flaggedNoWhether the project is flagged or not
deferDateNoThe defer date of the project in ISO format (YYYY-MM-DD or full ISO date)
folderNameNoThe name of the folder to add the project to (will add to root if not specified)
sequentialNoWhether tasks in the project should be sequential (default: false)
plannedDateNoThe planned date of the project in ISO format (YYYY-MM-DD or full ISO date)
exclusiveTagsNoRespect mutually exclusive tag groups when applying tags (default: true). When a tag belongs to an exclusive group, sibling tags from that group are removed.
estimatedMinutesNoEstimated time to complete the project, in minutes

TDQS

B3.1/5.0
Behavior2/5

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

The description does not disclose behavioral traits beyond the basic action. With annotations lacking destructive/readOnly hints (both false), the description should mention potential side effects, required permissions, or error conditions like duplicate names.

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 sentence that is concise and front-loaded. However, some additional context could be included without becoming verbose.

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?

Given 11 parameters, no output schema, and no annotations with behavioral hints, the description is insufficient. It does not explain return values, fail cases, or setup requirements, leaving the agent underinformed.

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 parameters are documented in the schema. The description adds no extra meaning beyond 'Add a new project', missing opportunities to clarify parameter interactions or defaults.

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 and resource: 'Add a new project to OmniFocus'. It is specific and differentiates from sibling tools like add_omnifocus_task or add_folder, which deal with tasks or folders.

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, such as when to create a task instead of a project. No exclusions or prerequisites are mentioned.

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

append_to_noteA

Append text to a task or project note without overwriting the existing note. Useful for logging progress or adding context.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe ID of the task or project
nameNoThe name of the task or project (as fallback if ID not provided)
textYesThe text to append to the existing note
itemTypeYesType of item whose note to append to ('task' or 'project')
separatorNoSeparator inserted between the existing note and the new text (default: a newline). Pass an empty string to append with no separator.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false (mutation) and destructiveHint=false (not destructive), which the description complements by explicitly stating 'without overwriting'. This adds meaningful behavioral context beyond the annotations, but does not cover error conditions or side effects.

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 consists of two clear, front-loaded sentences without unnecessary words. Every part serves a purpose: defining the action and suggesting use cases.

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 tool is relatively simple, the lack of an output schema and no mention of return values or error cases leaves a gap. The description covers the core action well but is incomplete for a fully self-contained definition.

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% coverage with descriptions for all 5 parameters. The description does not add significant parameter-level information beyond what the schema already provides, 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 'Append text to a task or project note without overwriting', which specifies the verb (append) and the resource (note of task/project). It distinguishes itself from potential alternatives like edit_item that might overwrite, thus achieving a high score.

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 context for when to use the tool ('useful for logging progress or adding context'), but does not explicitly state when not to use it or compare with sibling tools. This gives good guidance but lacks exclusions.

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

batch_add_itemsA

Add multiple tasks or projects to OmniFocus in a single operation

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesArray of items (tasks or projects) to add

TDQS

A3.6/5.0
Behavior2/5

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

Annotations already indicate the tool is not read-only. The description adds no behavioral context beyond the fact it adds items; it does not disclose atomicity, error handling, limits, or what happens on conflict. Given the presence of annotations, the description adds minimal value.

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, clear sentence with no unnecessary words, fully conveying the tool's purpose.

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 one parameter with nested objects fully described in the schema. The description is adequate for a batch add operation, though it lacks details on operational aspects like atomicity and partial failure handling.

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 all parameters described in the schema. The description adds no additional meaning beyond the schema, warranting the baseline score 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 clearly states the action ('Add multiple tasks or projects to OmniFocus in a single operation'), distinguishing it from sibling tools like add_omnifocus_task (single task) and add_project (single project).

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 bulk usage but does not explicitly state when to use this tool over alternatives (e.g., adding items individually). No when-not or alternative guidance is provided.

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

batch_complete_tasksA
Destructive

Mark tasks complete or incomplete by stable ID. Accepts up to 100 items with optional completion dates. Preflights every ID, verifies every result, and restores previous states on failure. Repeating tasks generate new instances when completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesTasks to complete or mark incomplete

TDQS

A4.4/5.0
Behavior5/5

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

The description goes beyond the annotations by detailing preflight validation, result verification, rollback on failure, and the special behavior for repeating tasks. These are not captured in the annotations (readOnlyHint, destructiveHint) and provide valuable insight into the tool's safety and side effects.

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 concise at three sentences, each earning its place: the first defines the core action and batch limit, the second covers operational guarantees (preflight/verification/rollback), and the third highlights an important edge case. No unnecessary words are used, and 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 description provides comprehensive context for a complex batch mutation tool: it addresses failure handling, result verification, and repeating task behavior. The absence of an output schema is compensated by the high level of operational detail. A minor omission is the lack of mention of the return format, but this is not critical for tool selection.

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 provides 100% coverage for the 'items' parameter, including descriptions for taskId, action, and completionDate. The description adds minimal new parameter-level semantics, mainly restating the 'stable ID' concept and optional completion dates. It does not significantly enhance what the schema already explains, 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 clearly states the tool's function: 'Mark tasks complete or incomplete by stable ID.' It uses a specific verb (mark) plus the resource (tasks) and distinguishes itself from sibling batch tools like batch_move_tasks and batch_remove_items by focusing on completion status.

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 establishes clear usage context by noting it accepts up to 100 items, implying a batch operation. However, it does not explicitly mention when not to use it or name alternatives, such as using edit_item for single-task updates. The batch scope is communicated but no exclusions are stated.

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

batch_move_tasksA
Destructive

Move a confirmed set of tasks to projects, parent tasks, or Inbox. The complete batch is validated before any change and every destination is verified afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
movesYesConfirmed task moves. The whole batch is preflighted and verified automatically.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark it as destructive; the description adds behavioral details (preflight validation, post-verification) that go beyond the annotations, providing useful context for an AI agent.

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, no redundant words. The first sentence states purpose, the second adds behavioral details. Highly 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?

Given no output schema and complex input, the description covers the key behavioral pattern (validation then execution). Could mention atomicity or partial failure handling, but overall adequate.

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 detailed descriptions for all parameters. The description reinforces the 'confirmed' and 'preflighted' aspects but does not add significant new 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?

The description clearly states the verb 'Move' and the resource 'tasks', specifying destinations (projects, parent tasks, Inbox) and emphasizing a 'confirmed set', distinguishing it from the sibling 'move_task' tool.

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 batch use with validation and verification, but does not explicitly state when to use versus single-task alternatives or 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.

batch_remove_itemsA
Destructive

Remove a user-confirmed set of tasks or projects by stable ID. The complete batch is validated before deletion and every ID is verified absent afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesConfirmed tasks or projects to remove. The complete batch is validated before deletion.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, but the description adds valuable behavioral context: the batch is validated before deletion and every ID is verified absent afterward, which is not captured 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?

Two sentences with no wasted words. The key information is front-loaded in the first sentence.

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 batch operation with validation, the description adequately covers pre- and post-conditions. No output schema exists, so it's complete enough.

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 baseline is 3. The description adds minimal extra meaning beyond the schema, such as 'stable ID' and 'user-confirmed set', but these are largely redundant.

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 it removes a batch of tasks or projects by stable ID, using specific verb 'Remove' and resource 'tasks or projects'. It distinguishes from the sibling 'remove_item' which presumably removes a single item.

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 does not mention when to use this tool vs alternatives like 'remove_item' or 'batch_move_tasks'. No explicit context or exclusions are provided.

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

count_tasksA
Read-onlyIdempotent

Count tasks matching filters without returning the full list. Fast 'how many' queries that return a total plus a breakdown by status. Uses the same filters as filter_tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
flaggedNoOnly count flagged (true) or unflagged (false) tasks
overdueNoOnly count overdue tasks
dueTodayNoOnly count tasks due today
tagFilterNoOnly count tasks with these tags
searchTextNoOnly count tasks whose name or note contains this text
taskStatusNoFilter by task status: Available, Next, Blocked, DueSoon, Overdue, Completed, Dropped
dueThisWeekNoOnly count tasks due this week
perspectiveNoScope: 'inbox', 'flagged', or 'all' (default: all)
createdAfterNoOnly count tasks created strictly after this date/time (ISO format)
plannedTodayNoOnly count tasks planned for today
createdBeforeNoOnly count tasks created strictly before this date/time (ISO format)
exactTagMatchNoRequire exact tag name match (default: false)
modifiedAfterNoOnly count tasks last modified strictly after this date/time (ISO format)
projectFilterNoOnly count tasks in projects whose name contains this text
completedTodayNoOnly count tasks completed today
modifiedBeforeNoOnly count tasks last modified strictly before this date/time (ISO format)
plannedThisWeekNoOnly count tasks planned for this week
completedThisWeekNoOnly count tasks completed this week

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations by stating it is 'fast' and describing the return shape ('total plus a breakdown by status'). No contradictions or hidden behaviors are omitted.

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 consists of two tightly packed sentences. The first sentence states the core purpose (count without full list), the second adds speed and output details. No wasted words; every phrase contributes to understanding.

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 tool with 18 parameters and no output schema, the description covers the essential context: purpose, usage distinction from filter_tasks, and high-level return shape. The annotations handle safety, and the schema handles parameter details. Minor omissions like explicit note about zero-result behavior are not critical, so it's nearly 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?

The input schema provides 100% parameter coverage with descriptions for all 18 properties, so the baseline is 3. The description adds no additional parameter-specific meaning beyond referencing that it 'uses the same filters as filter_tasks,' which is a usage hint rather than parameter semantics. Thus, it neither improves nor degrades 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 ('Count tasks matching filters') and resource ('tasks'), and distinguishes the tool from siblings like filter_tasks by explicitly noting it does not return the full list. It also mentions the output (total plus breakdown by status), making the 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 Guidelines4/5

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

The description indicates usage for 'fast how many queries' and notes that it uses the same filters as filter_tasks, implying filter_tasks is the alternative for retrieving full lists. However, it doesn't explicitly state 'when not to use' scenarios or name alternatives like get_tasks, so it falls just short of the highest guideline clarity.

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

create_project_from_outlineA

Create one user-confirmed project tree with stable folder/tag IDs. The complete outline is preflighted, created in one OmniFocus request, and read back for verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations are generic (no hints set), so the description carries the burden. It discloses key behaviors: user confirmation, preflighting, single-request creation, and read-back verification, which go beyond the minimal annotation info.

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, zero fluff: first states purpose with key qualifiers, second explains process. Every word adds value.

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 complex nested schema and no output schema, the description covers the essential creation flow (preflight, atomic creation, verification). It omits return values and error scenarios, but the stated behavioral traits are sufficient for an agent to invoke correctly.

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

Parameters2/5

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

Schema description coverage is 0%, and the tool description adds no parameter-level meaning. The nested 'project' object has inline schema descriptions for its properties, but the tool description itself does not compensate for the missing schema-level description.

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 the specific verb 'Create' and resource 'project tree', and adds clarifying context: 'user-confirmed', 'stable folder/tag IDs'. This distinguishes it from siblings like add_project (single project) and batch_add_items (flat batch).

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 explains the creation process (preflighted, one request, verification) but does not explicitly state when to use this tool versus alternatives like add_project for simple projects or batch_add_items for flat structures.

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

dump_databaseB
Read-onlyIdempotent

Gets the current state of your OmniFocus database

ParametersJSON Schema
NameRequiredDescriptionDefault
hideCompletedNoSet to false to show completed and dropped tasks (default: true)
hideRecurringDuplicatesNoSet to true to hide duplicate instances of recurring tasks (default: true)

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds no further behavioral context (e.g., performance impact, payload size). It is consistent but does not exceed what annotations provide.

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 with no extraneous words. It is concise, though it could benefit from additional context without sacrificing brevity.

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 broad dump tool, the description lacks detail on what 'current state' includes (all data? metadata?), and does not mention potential resource usage or output format. Given no output schema, more completeness is needed.

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 well-defined. The description does not add extra meaning beyond the schema, meeting the baseline expectation.

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 the verb 'Gets' and specifies 'current state of your OmniFocus database', clearly indicating a full data dump. It distinguishes from sibling tools that target specific entities like folders or 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?

No guidance on when to use this tool versus the many sibling tools for specific queries (e.g., list_folders, filter_tasks). An agent lacks context on trade-offs or scenarios where a full dump is appropriate.

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

duplicate_taskA

Duplicate an existing task, optionally with its subtasks, and optionally with a new name. Useful for template-based workflows.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoThe ID of the task to duplicate
newNameNoOptional new name for the duplicated task (keeps the original name if omitted)
taskNameNoThe name of the task to duplicate (as fallback if ID not provided)
includeSubtasksNoWhether to include the task's subtasks in the copy (default: true)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations are limited. Description adds optional subtask copying and renaming, but doesn't detail which properties are copied or side effects. 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?

Single sentence with key info. Could be slightly more structured, but efficient and front-loaded.

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 4 parameters and no output schema, description covers core purpose and options. Missing return value details and error handling. Adequate.

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 covers 100% of parameters with descriptions. Description rephrases schema info without adding new semantic depth. Baseline score.

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?

Clear verb 'duplicate' and resource 'task' with options for subtasks and new name. Distinguishes from sibling tools like move_task, edit_item.

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?

Mentions 'template-based workflows' for context but lacks explicit when-to-use vs alternatives or when-not scenarios.

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

edit_itemC
Destructive

Edit a task or project in OmniFocus

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe ID of the task or project to edit
nameNoThe name of the task or project to edit (as fallback if ID not provided)
addTagsNoTags to add to the task
newNameNoNew name for the item
newNoteNoNew note for the item
itemTypeYesType of item to edit ('task' or 'project')
newStatusNoNew status for tasks (incomplete, completed, dropped)
newDueDateNoNew due date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear
newFlaggedNoSet flagged status (set to false for no flag, true for flag)
removeTagsNoTags to remove from the task
moveToInboxNoFor tasks: move task to inbox
replaceTagsNoTags to replace all existing tags with
newDeferDateNoNew defer date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear
newProjectIdNoFor tasks: move task to this project ID
exclusiveTagsNoRespect mutually exclusive tag groups when adding/replacing tags (default: true). When a tag belongs to an exclusive group, sibling tags from that group are removed.
newFolderNameNoNew folder to move the project to
newSequentialNoWhether the project should be sequential
newPlannedDateNoNew planned date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear
newProjectNameNoFor tasks: move task to this project name (errors on duplicate names)
newParentTaskIdNoFor tasks: move task under this parent task ID
newProjectStatusNoNew status for projects
newParentTaskNameNoFor tasks: move task under this parent task name (errors on duplicate names)
newEstimatedMinutesNoNew estimated minutes

TDQS

C2.9/5.0
Behavior2/5

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

The description only says 'Edit', which matches the destructiveHint=true annotation, but provides no additional behavioral details (e.g., that it can modify multiple fields, move items, or change status). The burden falls on annotations, but the description adds almost no 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.

Conciseness4/5

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

The description is a single concise sentence, front-loading the core purpose. However, it is so brief that it may omit necessary context for a tool with 23 parameters, making it slightly underspecified.

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?

Given the tool's complexity (23 parameters, no output schema, limited annotations), the description is insufficient. It fails to summarize the scope of editable fields, the side effects of edits, or any constraints. The agent must rely entirely on the schema for operational 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 baseline is 3. The description adds no further meaning beyond the schema; it merely restates that the tool edits tasks or projects. No parameter-specific elaboration 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?

The description clearly states the verb 'Edit' and the resource 'task or project in OmniFocus', providing a specific purpose. However, it does not differentiate from sibling tools like edit_folder or edit_tag, which may cause confusion.

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 offers no guidance on when to use this tool versus alternatives such as add_omnifocus_task, add_project, or other mutation tools. No when-to-use or when-not-to-use information is provided.

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

filter_tasksB
Read-onlyIdempotent

Advanced task filtering by status, dates, projects, tags, search, and more, with optional subtask-tree expansion

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tasks to return (default: 100)
cursorNoOpaque continuation cursor returned by a previous filter_tasks page
sortByNoSort results by field
flaggedNoFilter by flagged status
hasNoteNoFilter tasks that have notes
inInboxNoFilter tasks in inbox
overdueNoShow overdue tasks only
dueAfterNoShow tasks due strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)
dueTodayNoShow tasks due today
dueBeforeNoShow tasks due strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)
sortOrderNoSort order (default: asc)
tagFilterNoFilter by tag name(s). Can be single tag or array of tags
deferAfterNoShow tasks with defer date strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)
deferTodayNoShow tasks deferred to today
outputModeNoOutput detail: detailed (default) or compact for broad planning queries
searchTextNoSearch in task names and notes
taskStatusNoFilter by task status. Can specify multiple statuses
deferBeforeNoShow tasks with defer date strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)
dueThisWeekNoShow tasks due this week
estimateMaxNoMaximum estimated minutes
estimateMinNoMinimum estimated minutes
hasEstimateNoFilter tasks that have time estimates
perspectiveNoLimit search to specific perspective: inbox, flagged, all tasks
createdAfterNoShow tasks created strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)
dueThisMonthNoShow tasks due this month
plannedAfterNoShow tasks planned strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)
plannedTodayNoShow tasks planned for today
showSubtasksNoExpand each matching task's subtask tree (default: false)
createdBeforeNoShow tasks created strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)
deferThisWeekNoShow tasks deferred to this week
exactTagMatchNoSet to true for exact tag name match, false for partial (default: false)
modifiedAfterNoShow tasks last modified strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)
plannedBeforeNoShow tasks planned strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)
projectFilterNoFilter by project name (partial match)
completedAfterNoShow tasks completed strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)
completedTodayNoShow tasks completed today
deferAvailableNoShow tasks whose defer date has passed (now available)
modifiedBeforeNoShow tasks last modified strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)
completedBeforeNoShow tasks completed strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)
maxSubtaskDepthNoMaximum subtask levels to expand; omitted means unlimited
plannedThisWeekNoShow tasks planned for this week
plannedThisMonthNoShow tasks planned for this month
completedThisWeekNoShow tasks completed this week
completedThisMonthNoShow tasks completed this month

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds the behavioral detail of optional subtask-tree expansion, which is useful. However, it doesn't mention pagination, default limits, or how multiple filters combine, which would be valuable behavioral context. No contradiction with annotations 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?

The description is a single, front-loaded sentence that conveys the core purpose without wasted words. It is appropriately concise for its role as a high-level summary, given the detailed schema provides specifics.

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?

Despite the complex schema with 44 parameters, the description gives no contextual guidance on how to combine filters, whether filters are AND/OR, or how the tool relates to sibling tools. It also doesn't explain pagination or output mode behavior, which are important for correct invocation. The description is too sparse to fully support an agent in using this complex tool effectively.

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 groups parameters into categories (status, dates, projects, tags, search) which helps orient the agent, but does not add new per-parameter meaning beyond what the schema already provides. The mention of subtask expansion aligns with showSubtasks and maxSubtaskDepth, but adds little extra.

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 performs advanced filtering on tasks by multiple criteria such as status, dates, projects, tags, and search. This distinguishes it from simpler sibling tools like get_tasks, though it doesn't explicitly name an alternative. The verb 'filtering' and resource 'tasks' are specific, and the mention of subtask-tree expansion adds clarity.

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 like get_tasks or count_tasks. It does not state exclusions or prerequisites, such as whether it is intended for complex queries while simpler tools exist for basic listing. The word 'advanced' implies a use case but is not explicit guidance.

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

get_projectsA
Read-onlyIdempotent

List OmniFocus projects or projects due for review. Use view=all (default) for status/folder filters, or view=due_for_review for overdue review work.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoProject view: all (default) or due_for_review.
statusNoProject statuses to include (all view only).
folderNameNoFolder-name filter (all view only).
includeOnHoldNoInclude on-hold projects (due_for_review view only).
includeReviewDataNoInclude review fields (default: true; all view only).

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds that view=all is the default and that view=due_for_review targets overdue reviews, but it does not disclose other behaviors like result shape or pagination. This is a modest addition 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 two sentences, front-loaded with the primary purpose, and contains no fluff. Every word earns its place, and the key distinction between the two views is stated clearly.

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 5 optional parameters and no output schema, the description covers the main usage options and default behavior. It doesn't detail return fields, but since it's a 'list projects' tool and annotations cover safety, the description is complete enough for an agent to select and 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 coverage is 100%, so the schema already documents all parameters and their descriptions. The description reinforces the view parameter's purpose but does not add substantial meaning to status, folderName, includeOnHold, or includeReviewData beyond what the schema 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 uses the specific verb 'List' with the resource 'OmniFocus projects', clearly identifying what the tool returns. It distinguishes between two view modes (all vs due_for_review), which separates it from sibling tools like get_tasks that focus on tasks.

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 states when to use each view parameter: view=all for status/folder filters, view=due_for_review for overdue review work. This gives clear context on how to choose between modes, though it doesn't explicitly compare against alternative tools. It is clear enough for most scenarios.

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

get_task_by_idA
Read-onlyIdempotent

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)
showSubtasksNoExpand the task's subtask tree (default: false)
maxSubtaskDepthNoMaximum subtask levels to expand; omitted means unlimited

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is safe. The description adds detail about alternative lookup by name and the ability to expand subtasks, which annotations do not cover. No 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?

The description is a single concise sentence that front-loads the verb and resource. No wasted words, and every part adds value.

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 rich input schema, clear annotations, and no output schema required, the description is adequate. It explains the core functionality (get by ID or name) and hints at subtree expansion via parameters. Minor missing details like return format are not critical for this simple tool.

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 each parameter is already documented. The tool description does not add new meaning beyond the schema, but it confirms the dual lookup by ID or name, which aligns with the schema. Baseline 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', the resource 'information about a specific task', and the means 'by ID or name'. It distinguishes the tool from sibling tools that list or filter tasks by criteria.

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 does not provide any guidance on when to use this tool versus alternatives like get_inbox_tasks or filter_tasks. It lacks context about when not to use it or what prerequisites exist.

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

get_tasksA
Read-onlyIdempotent

Read tasks from inbox, flagged, forecast, tag, or custom perspective. Use source to select the view; source-specific parameters are strictly validated.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoForecast lookahead days (default: 7; forecast only).
limitNoMaximum tasks in flat custom perspective mode (custom only).
sourceYesTask view to read. Each source accepts only its documented source-specific parameters.
tagNameNoRequired when source is tag.
exactMatchNoRequire an exact tag match (default: false; tag only).
displayModeNoCustom perspective display mode (custom only).
showSubtasksNoExpand each matching task subtask tree (not custom).
hideCompletedNoHide completed tasks (default: true; all sources).
projectFilterNoFilter by project name (flagged only).
showHierarchyNoLegacy custom perspective hierarchy option (custom only).
groupByProjectNoLegacy custom perspective grouping option (custom only).
maxSubtaskDepthNoMaximum subtask levels to expand (not custom).
perspectiveNameNoRequired when source is custom.
includeDeferredOnlyNoShow only deferred tasks becoming available (forecast only).

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already convey read-only, idempotent, non-destructive behavior. The description adds the note that source-specific parameters are strictly validated, which is useful, but it doesn't describe output format, pagination, or error behavior. The added value is modest and comparable to a typical read tool.

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 action and scope, and contains no filler. Every phrase earns its place.

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 14 params and no output schema, a brief description is somewhat insufficient. The schema covers parameter semantics, but the description does not explain what the return value looks like (e.g., list vs single object) or any additional behavior like default filters. The core read intent is clear, but an agent might want more context on expected response shape.

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 detailed per-parameter descriptions including conditional usage (e.g., 'forecast only', 'tag only'). The description adds no additional parameter meaning beyond restating that parameters are validated per source. 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 specifies a clear verb+resource: 'Read tasks' and enumerates five distinct sources (inbox, flagged, forecast, tag, custom). This differentiates it from siblings like filter_tasks or get_task_by_id, which handle different retrieval modes.

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 direct instruction on how to select a view ('Use source to select the view') and highlights that source-specific parameters are validated. It does not explicitly mention alternatives or when not to use this tool, but the context is clear enough for an agent to understand selection behavior.

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

manage_foldersA
Destructive

List, get, add, edit, or remove OmniFocus folders. This mixed-operation tool is conservatively marked destructive: list/get are read-only, add/edit mutate, and remove permanently deletes contained projects and tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoFolder ID (get/edit/remove only).
nameNoFolder name (required for add; fallback identifier otherwise).
actionYesFolder operation to perform.
newNameNoNew folder name (edit only).
includeDroppedNoInclude dropped folders (default: true; list only).
parentFolderNameNoParent folder name (add only).
newParentFolderNameNoNew parent folder name (edit only); use an empty string for root.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint: true), the description discloses the specific consequence of removal ('permanently deletes contained projects and tasks') and clarifies the mixed read/write nature. This adds valuable context not present in the structured 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 sentences totaling ~30 words, front-loaded with the operation list and immediately followed by the critical destructive warning. No filler or redundant restatement 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 tool's complexity (7 params, no output schema), the description covers purpose, operations, and destructive consequences well. It does not describe return values, but the absence of an output schema and the straightforward nature of folder operations make this a minor gap rather than a critical omission.

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%, and each parameter already has a description. The tool description adds value by tying actions to mutability (e.g., 'add/edit mutate'), enriching the meaning of the action parameter. However, it does not describe parameter formats beyond schema, so it stays just above 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 uses a specific verb list ('List, get, add, edit, or remove') with a clear resource ('OmniFocus folders'), immediately distinguishing this tool from siblings like manage_tags or manage_perspectives. It enumerates all supported operations, leaving 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 provides clear context on when to use the tool (any folder operation) and clarifies the safety profile of each action ('list/get are read-only, add/edit mutate, remove permanently deletes'). It does not explicitly mention alternatives or exclusions, but the operation breakdown serves as implicit guidance for selection.

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

manage_perspectivesA
Destructive

List, inspect, and edit OmniFocus custom perspectives and their filter rules. Use this to explain why a perspective shows what it shows, or to change its rules. Perspectives are saved views, not tags. list/get are read-only; update rewrites rules in place and never creates or deletes a perspective.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoPerspective identifier (get/update). Preferred over name.
nameNoPerspective name (get/update). This is a perspective, not a tag.
rulesNoComplete replacement rule document (update). Always read the perspective first and send the full tree back, including any "raw" rules, or they will be lost.
actionYeslist: every custom perspective. get: one perspective with its rules explained. update: rewrite name, rules, aggregation, or icon colour in place.
dryRunNoValidate and report the diff without writing (update).
newNameNoRename the perspective (update).
iconColorNoPerspective icon colour as a hex string such as "#3399EE".

TDQS

A4.4/5.0
Behavior5/5

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

Annotations mark destructiveHint=true. The description adds crucial context by specifying 'update rewrites rules in place and never creates or deletes a perspective' and 'list/get are read-only'. This tells the agent exactly what destructive behavior occurs and what does not, going beyond 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?

Two sentences, front-loaded with action verbs, no filler. Every clause adds value, making it both concise and structurally sound.

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 complex 7-parameter tool with nested rules, the description conveys high-level purpose, read-only vs destructive actions, and distinguishes perspectives from tags. It doesn't describe return values, but no output schema exists; the schema covers rule details. Missing explicit 'read first before update' but the schema's rules description handles it. A touch more could push to 5.

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 parameter descriptions. The description adds little beyond the schema (e.g., 'Perspectives are saved views, not tags' is already in the schema). Baseline 3 applies due to full 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 opens with a specific verb+resource: 'List, inspect, and edit OmniFocus custom perspectives and their filter rules.' It explicitly distinguishes perspectives from tags ('Perspectives are saved views, not tags.'), separating it from the sibling tool manage_tags. This makes the tool's purpose unmistakable.

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 usage context: 'Use this to explain why a perspective shows what it shows, or to change its rules.' It also clarifies read-only vs mutating actions. However, it does not name alternative tools or explicit when-not-to-use scenarios, so it stops short of a 5.

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

manage_tagsA
Destructive

List, search, add, edit, or remove OmniFocus tags. This mixed-operation tool is conservatively marked destructive: list/search are read-only, add/edit mutate, and remove deletes the selected tag plus child tags but keeps tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoTag ID (edit/remove only).
nameNoTag name (required for add; fallback identifier otherwise).
queryNoSearch text (required for search).
actionYesTag operation to perform.
newNameNoNew tag name (edit only).
newStatusNoNew tag status (edit only).
exactMatchNoRequire exact name match (search only).
parentTagNameNoParent tag name (add only).
includeInactiveNoInclude paused/inactive tags (list/search only).
newParentTagNameNoNew parent tag name (edit only); use an empty string for root.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already set destructiveHint=true, but the description adds crucial nuance: list/search are read-only, add/edit mutate, and remove deletes the tag plus child tags while preserving tasks. This goes well beyond the binary annotation and gives the agent concrete understanding of what to expect for each action. The description is consistent with annotations and enriches 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?

The description is two sentences: the first enumerates all operations, the second clarifies behavioral nuances (read-only vs. mutating vs. destructive with child tags). Every word earns its place, and the most important 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?

For a complex 10-parameter mixed-operation tool, the description covers the key operational semantics and the destructive edge case (child tags removed, tasks kept). It does not detail per-action parameter combinations, but the schema already provides that. The absence of an output schema is a minor gap, since return values are not described, but overall the description is sufficient for an agent to use the tool safely.

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 each parameter already has a detailed description (e.g., 'Tag ID (edit/remove only)', 'Search text (required for search)'). The tool description does not add parameter-level meaning beyond this, so the schema shoulders the semantic load. 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 opens with 'List, search, add, edit, or remove OmniFocus tags,' giving a specific verb for each operation and the resource (tags). This clearly distinguishes it from sibling tools like manage_folders or manage_perspectives, which target different OmniFocus entities.

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: any tag management need falls here. It does not explicitly name alternatives or exclusion conditions, but the operation list ('list, search, add, edit, remove') makes the intended use clear. The conservative destructive marking also hints that read-only operations are safe, though no alternative tool is suggested.

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

manage_task_notificationsA
Destructive

List, add, or remove task notifications. This mixed-operation tool is conservatively marked destructive: list is read-only, add mutates, and remove deletes one or all notifications.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNo0-based notification index (remove only).
actionYesNotification operation to perform.
taskIdNoTask ID (preferred identifier).
taskNameNoTask name (fallback identifier).
removeAllNoRemove every notification (remove only).
absoluteDateNoISO 8601 notification time (add only).
relativeMinutesNoMinutes relative to the due date; negative is before due (add only).

TDQS

A4.4/5.0
Behavior5/5

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

The description adds significant context beyond annotations by explaining that despite the destructiveHint, list is read-only and remove can delete one or all notifications. This clarifies the conservatively marked destructive flag and outlines side effects for each operation, which is valuable for an AI agent.

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 concise, front-loaded sentences. It states the tool's purpose first, then adds the key behavioral nuance about the destructive flag. 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?

Given the tool's complexity (7 parameters, 3 actions, mixed operations), the description adequately covers operation semantics and parameter mapping. It does not describe return values, but no output schema exists, and the absence is not critical for selecting the tool. Slightly more detail on invalid parameter combinations would push it higher.

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 reinforces which actions use which parameters (e.g., 'remove deletes one or all notifications') but does not add detail beyond what each parameter description already provides. It is sufficient but not additive.

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 tool manages task notifications ('List, add, or remove task notifications'), using a specific verb and resource. It explicitly distinguishes three operations, and no sibling tool handles notifications, removing ambiguity.

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 explains the mixed-operation nature and how each action behaves (list read-only, add mutates, remove deletes), giving clear context for using the tool. It does not name alternative tools for notification management, but none exist among siblings, so context is sufficient.

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

mark_projects_reviewedA
Destructive

Mark a user-confirmed set of active or on-hold projects reviewed. The complete batch is validated first and review dates are verified afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdsYesStable IDs of projects the user explicitly confirmed as reviewed.

TDQS

A4/5.0
Behavior4/5

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

The description adds value beyond annotations by disclosing batch validation and date verification processes. Annotations only indicate destructiveness; the description provides useful behavioral context.

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, with the first sentence front-loading the core action and scope. No extraneous information is present.

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 tool's simplicity and annotation coverage, the description provides sufficient context about batch processing and validation. However, it does not explain failure modes or idempotency, which are partially covered by annotations.

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 description adds no new meaning beyond the schema description for projectIds. It repeats the schema's information without additional clarification.

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 tool marks a set of active or on-hold projects as reviewed, using specific verbs and resources. It distinguishes itself from siblings like get_projects_due_for_review and add_project by specifying the action and scope.

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 should be used after user confirmation on a set of projects, but lacks explicit guidance on when not to use it or alternatives. It does not mention prerequisites or exclusions.

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

move_taskB
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)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate destructive and non-idempotent nature. The description adds 'move', confirming mutation, but does not detail what happens to the original location or any side effects. Some implied transparency but insufficient for complete understanding.

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 front-loads the verb and object. No superfluous words, achieves maximum brevity while conveying essential 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?

For a tool with 7 optional parameters and no output schema, the description lacks details on return values, default behavior when multiple target options are provided, and error handling (e.g., duplicate name errors only mentioned in schema). Adequate but incomplete.

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 baseline is 3. The description generalizes the destinations but adds no extra semantic detail about parameters beyond what the schema provides. Adequate but not enhanced.

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 (move) and resource (task), and lists possible destinations (project, parent task, inbox). It effectively communicates the core purpose, though it does not explicitly differentiate from batch_move_tasks sibling.

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 like batch_move_tasks. The description does not mention prerequisites, exclusions, or context for choosing this over similar tools.

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

read_task_attachmentA
Read-onlyIdempotent

Read a task attachment reported by get_task_by_id. Images are returned as MCP image content when possible.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdNoThe ID of the task that owns the attachment
taskNameNoThe name of the task that owns the attachment
attachmentIdNoThe attachment ID reported by get_task_by_id
attachmentNameNoThe attachment name reported by get_task_by_id

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral detail: images are returned as MCP image content when possible. This goes beyond annotations, though it does not cover non-image behavior or error handling.

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, no wasted words. The purpose and a key behavioral detail are front-loaded. Every word earns its place.

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?

No output schema, so the description should explain return values. It covers images but not other file types or potential failures. For a read operation with strong annotations, it is adequate but leaves 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%, so the schema already documents all 4 parameters. The description adds no extra meaning beyond referencing get_task_by_id, which is also in schema descriptions. 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 verb 'Read' and the resource 'task attachment', and references get_task_by_id as the source. It is distinct from sibling tools, none of which read attachments.

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 via 'reported by get_task_by_id' but does not explicitly state when to use this tool vs alternatives, nor when not to use it. No sibling tool serves the same purpose, so guidance is minimal.

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

remove_itemB
Destructive

Remove a task or project from OmniFocus

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoThe ID of the task or project to remove
nameNoThe name of the task or project to remove (as fallback if ID not provided)
itemTypeYesType of item to remove ('task' or 'project')

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already set destructiveHint=true. Description adds no behavioral context beyond 'remove', which matches. No extra disclosure of consequences, permissions, or irreversibility.

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?

Single sentence with no wasted words. Could be slightly more informative without harming conciseness.

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 destructive action, the description plus annotations and schema cover basic usage. However, lack of output schema or notes on success/failure leaves some 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 coverage is 100%, so parameters are fully documented. Description does not add any additional meaning beyond what the schema provides (itemType enum, id/name fallback). Baseline score 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 states 'Remove a task or project from OmniFocus' with a specific verb and resource. It clearly distinguishes from sibling tools like add_omnifocus_task or edit_item.

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 tool vs alternatives like batch_remove_items. No mention of prerequisites or context.

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

set_repetition_ruleA
Destructive

Set, update, or clear the repeat rule on a task. Supports ICS rule strings, schedule type, anchor date, catch-up, end date, and repetition count.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoSet to true to remove the repetition rule from the task.
countNoNumber of repetitions after which the rule ends. Encoded into the rule as COUNT=.
taskIdYesThe ID of the task to modify
endDateNoISO date string for when the repetition ends. Encoded into the rule as UNTIL=.
ruleStringNoICS recurrence rule string, e.g. FREQ=WEEKLY;INTERVAL=2. Defaults to FREQ=WEEKLY.
scheduleTypeNoHow the next occurrence is scheduled. Regularly repeats from assigned dates; FromCompletion repeats after completion.
anchorDateKeyNoWhich date property is advanced when the task repeats.
catchUpAutomaticallyNoWhen true, missed occurrences are skipped and the next future occurrence is created.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true. The description adds value by listing the supported aspects (ICS rule strings, schedule type, etc.) and clarifying that the operation can set, update, or clear a rule, which goes beyond the annotation's binary destructiveness.

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-load the action and then succinctly enumerate supported capabilities. Every word earns its place.

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 description covers the core function and supported fields, but lacks details on default behavior (e.g., what happens when clear is false), success/failure indicators, or the effect on existing rules. Given the 8 parameters and no output schema, more context would be beneficial.

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 merely summarizes the parameter groups already documented in the schema, without adding new meaning or context.

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?

Clearly states the action 'Set, update, or clear the repeat rule on a task', which is a specific verb-resource combination. No sibling tool handles repetition rules, so it is well-distinguished.

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 for setting repetition rules but provides no explicit guidance on when to use this tool versus alternatives, nor 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 30 tool updatesv2.1.1
    • Removedadd_folder
    • Removedadd_tag
    • Removedadd_task_notification
    • Addedbatch_complete_tasks
    • Changedcount_tasks4 fields changed
      • addedInput schema / properties / createdAfter
        Added value: +{
        +  "description": "Only count tasks created strictly after this date/time (ISO format)",
        +  "type": "string"
        +}
      • addedInput schema / properties / createdBefore
        Added value: +{
        +  "description": "Only count tasks created strictly before this date/time (ISO format)",
        +  "type": "string"
        +}
      • addedInput schema / properties / modifiedAfter
        Added value: +{
        +  "description": "Only count tasks last modified strictly after this date/time (ISO format)",
        +  "type": "string"
        +}
      • addedInput schema / properties / modifiedBefore
        Added value: +{
        +  "description": "Only count tasks last modified strictly before this date/time (ISO format)",
        +  "type": "string"
        +}
    • Removededit_folder
    • Removededit_tag
    • Changedfilter_tasks5 fields changed
      • addedInput schema / properties / createdAfter
        Added value: +{
        +  "description": "Show tasks created strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)",
        +  "type": "string"
        +}
      • addedInput schema / properties / createdBefore
        Added value: +{
        +  "description": "Show tasks created strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)",
        +  "type": "string"
        +}
      • addedInput schema / properties / modifiedAfter
        Added value: +{
        +  "description": "Show tasks last modified strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)",
        +  "type": "string"
        +}
      • addedInput schema / properties / modifiedBefore
        Added value: +{
        +  "description": "Show tasks last modified strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)",
        +  "type": "string"
        +}
      • changedInput schema / properties / sortBy / enum
        Previous value: -[
        -  "name",
        -  "dueDate",
        -  "deferDate",
        -  "plannedDate",
        -  "completedDate",
        -  "flagged",
        -  "project"
        -]New value: +[
        +  "name",
        +  "dueDate",
        +  "deferDate",
        +  "plannedDate",
        +  "completedDate",
        +  "createdDate",
        +  "modifiedDate",
        +  "flagged",
        +  "project"
        +]
    • Removedget_custom_perspective_tasks
    • Removedget_flagged_tasks
    • Removedget_folder
    • Removedget_forecast_tasks
    • Removedget_inbox_tasks
    • Changedget_projects6 fields changed
      • changedInput schema / properties / folderName / description
        Previous value: -"Filter by folder name (case-insensitive partial match)."New value: +"Folder-name filter (all view only)."
      • addedInput schema / properties / folderName / minLength
        Added value: +1
      • addedInput schema / properties / includeOnHold
        Added value: +{
        +  "description": "Include on-hold projects (due_for_review view only).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / includeReviewData / description
        Previous value: -"Include review fields (nextReviewDate, lastReviewDate, reviewInterval). Default: true."New value: +"Include review fields (default: true; all view only)."
      • changedInput schema / properties / status / description
        Previous value: -"Filter by project status. OR logic — matches any. Default: all statuses."New value: +"Project statuses to include (all view only)."
      • addedInput schema / properties / view
        Added value: +{
        +  "description": "Project view: all (default) or due_for_review.",
        +  "enum": [
        +    "all",
        +    "due_for_review"
        +  ],
        +  "type": "string"
        +}
    • Removedget_projects_due_for_review
    • Addedget_tasks
    • Removedget_tasks_by_tag
    • Removedget_today_completed_tasks
    • Removedlist_custom_perspectives
    • Removedlist_folders
    • Removedlist_tags
    • Removedlist_task_notifications
    • Addedmanage_folders
    • Addedmanage_perspectives
    • Addedmanage_tags
    • Addedmanage_task_notifications
    • Removedremove_folder
    • Removedremove_tag
    • Removedremove_task_notification
    • Removedsearch_tags
  2. 2 tool updatesv1.20.0
    • Changedadd_omnifocus_task1 field changed
      • addedInput schema / properties / repetition
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Recurrence applied and verified after creation. Verification failure removes the created task.",
        +  "properties": {
        +    "anchorDateKey": {
        +      "description": "Which date advances when the task repeats.",
        +      "enum": [
        +        "DueDate",
        +        "DeferDate",
        +        "PlannedDate"
        +      ],
        +      "type": "string"
        +    },
        +    "catchUpAutomatically": {
        +      "description": "Skip missed occurrences when the task is resolved.",
        +      "type": "boolean"
        +    },
        +    "ruleString": {
        +      "description": "ICS recurrence rule, e.g. FREQ=WEEKLY;BYDAY=FR. Encode UNTIL/COUNT here.",
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "scheduleType": {
        +      "description": "How the next occurrence is scheduled; omitted uses the OmniFocus default.",
        +      "enum": [
        +        "Regularly",
        +        "FromCompletion"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ruleString"
        +  ],
        +  "type": "object"
        +}
    • Addedcreate_project_from_outline
  3. 35 tool updatesv1.18.0
    • Addedadd_folder
    • Changedadd_omnifocus_task2 fields changed
      • addedInput schema / properties / exclusiveTags
        Added value: +{
        +  "description": "Respect mutually exclusive tag groups when applying tags (default: true). When a tag belongs to an exclusive group, sibling tags from that group are removed.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / plannedDate
        Added value: +{
        +  "description": "The planned date of the task in ISO format (YYYY-MM-DD or full ISO date)",
        +  "type": "string"
        +}
    • Changedadd_project2 fields changed
      • addedInput schema / properties / exclusiveTags
        Added value: +{
        +  "description": "Respect mutually exclusive tag groups when applying tags (default: true). When a tag belongs to an exclusive group, sibling tags from that group are removed.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / plannedDate
        Added value: +{
        +  "description": "The planned date of the project in ISO format (YYYY-MM-DD or full ISO date)",
        +  "type": "string"
        +}
    • Addedadd_tag
    • Addedadd_task_notification
    • Addedappend_to_note
    • Changedbatch_add_items4 fields changed
      • changedInput schema / properties / items / items / properties / parentTaskId / description
        Previous value: -"For tasks: The ID of the parent task to create this task as a subtask"New value: +"For tasks: The parent task ID for subtasks. When this is set, do not also provide projectName."
      • changedInput schema / properties / items / items / properties / parentTaskName / description
        Previous value: -"For tasks: The name of the parent task to create this task as a subtask"New value: +"For tasks: The parent task name for subtasks. Subtasks inherit project from their parent, so do not also provide projectName."
      • addedInput schema / properties / items / items / properties / plannedDate
        Added value: +{
        +  "description": "The planned date in ISO format (YYYY-MM-DD or full ISO date)",
        +  "type": "string"
        +}
      • changedInput schema / properties / items / items / properties / projectName / description
        Previous value: -"For tasks: The name of the project to add the task to"New value: +"For tasks: The project name for top-level tasks. Omit this when parentTaskId or parentTaskName is set."
    • Addedbatch_move_tasks
    • Changedbatch_remove_items7 fields changed
      • changedInput schema / properties / items / description
        Previous value: -"Array of items (tasks or projects) to remove"New value: +"Confirmed tasks or projects to remove. The complete batch is validated before deletion."
      • changedInput schema / properties / items / items / properties / id / description
        Previous value: -"The ID of the task or project to remove"New value: +"Stable ID of the task or project to remove"
      • addedInput schema / properties / items / items / properties / id / minLength
        Added value: +1
      • removedInput schema / properties / items / items / properties / name
        Removed value: -{
        -  "description": "The name of the task or project to remove (as fallback if ID not provided)",
        -  "type": "string"
        -}
      • changedInput schema / properties / items / items / required
        Previous value: -[
        -  "itemType"
        -]New value: +[
        +  "id",
        +  "itemType"
        +]
      • addedInput schema / properties / items / maxItems
        Added value: +100
      • addedInput schema / properties / items / minItems
        Added value: +1
    • Addedcount_tasks
    • Addedduplicate_task
    • Addededit_folder
    • Changededit_item7 fields changed
      • addedInput schema / properties / exclusiveTags
        Added value: +{
        +  "description": "Respect mutually exclusive tag groups when adding/replacing tags (default: true). When a tag belongs to an exclusive group, sibling tags from that group are removed.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / moveToInbox
        Added value: +{
        +  "description": "For tasks: move task to inbox",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / newParentTaskId
        Added value: +{
        +  "description": "For tasks: move task under this parent task ID",
        +  "type": "string"
        +}
      • addedInput schema / properties / newParentTaskName
        Added value: +{
        +  "description": "For tasks: move task under this parent task name (errors on duplicate names)",
        +  "type": "string"
        +}
      • addedInput schema / properties / newPlannedDate
        Added value: +{
        +  "description": "New planned date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear",
        +  "type": "string"
        +}
      • addedInput schema / properties / newProjectId
        Added value: +{
        +  "description": "For tasks: move task to this project ID",
        +  "type": "string"
        +}
      • addedInput schema / properties / newProjectName
        Added value: +{
        +  "description": "For tasks: move task to this project name (errors on duplicate names)",
        +  "type": "string"
        +}
    • Addededit_tag
    • Changedfilter_tasks16 fields changed
      • changedInput schema / properties / completedAfter / description
        Previous value: -"Show tasks completed after this date (ISO format: YYYY-MM-DD)"New value: +"Show tasks completed strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)"
      • changedInput schema / properties / completedBefore / description
        Previous value: -"Show tasks completed before this date (ISO format: YYYY-MM-DD)"New value: +"Show tasks completed strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)"
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Opaque continuation cursor returned by a previous filter_tasks page",
        +  "maxLength": 2048,
        +  "type": "string"
        +}
      • changedInput schema / properties / deferAfter / description
        Previous value: -"Show tasks with defer date after this date (ISO format: YYYY-MM-DD)"New value: +"Show tasks with defer date strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)"
      • changedInput schema / properties / deferBefore / description
        Previous value: -"Show tasks with defer date before this date (ISO format: YYYY-MM-DD)"New value: +"Show tasks with defer date strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)"
      • changedInput schema / properties / dueAfter / description
        Previous value: -"Show tasks due after this date (ISO format: YYYY-MM-DD)"New value: +"Show tasks due strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)"
      • changedInput schema / properties / dueBefore / description
        Previous value: -"Show tasks due before this date (ISO format: YYYY-MM-DD)"New value: +"Show tasks due strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)"
      • addedInput schema / properties / maxSubtaskDepth
        Added value: +{
        +  "description": "Maximum subtask levels to expand; omitted means unlimited",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / outputMode
        Added value: +{
        +  "description": "Output detail: detailed (default) or compact for broad planning queries",
        +  "enum": [
        +    "detailed",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / plannedAfter
        Added value: +{
        +  "description": "Show tasks planned strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)",
        +  "type": "string"
        +}
      • addedInput schema / properties / plannedBefore
        Added value: +{
        +  "description": "Show tasks planned strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)",
        +  "type": "string"
        +}
      • addedInput schema / properties / plannedThisMonth
        Added value: +{
        +  "description": "Show tasks planned for this month",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / plannedThisWeek
        Added value: +{
        +  "description": "Show tasks planned for this week",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / plannedToday
        Added value: +{
        +  "description": "Show tasks planned for today",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / showSubtasks
        Added value: +{
        +  "description": "Expand each matching task's subtask tree (default: false)",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / sortBy / enum
        Previous value: -[
        -  "name",
        -  "dueDate",
        -  "deferDate",
        -  "completedDate",
        -  "flagged",
        -  "project"
        -]New value: +[
        +  "name",
        +  "dueDate",
        +  "deferDate",
        +  "plannedDate",
        +  "completedDate",
        +  "flagged",
        +  "project"
        +]
    • Changedget_custom_perspective_tasks2 fields changed
      • addedInput schema / properties / displayMode
        Added value: +{
        +  "description": "Display mode for perspective tasks: project_tree (group by project + task hierarchy), task_tree (global task hierarchy), or flat (simple list). Default: project_tree",
        +  "enum": [
        +    "project_tree",
        +    "task_tree",
        +    "flat"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / groupByProject
        Added value: +{
        +  "description": "Legacy parameter. Group tasks by project when displayMode is not provided. Default: true",
        +  "type": "boolean"
        +}
    • Changedget_flagged_tasks2 fields changed
      • addedInput schema / properties / maxSubtaskDepth
        Added value: +{
        +  "description": "Maximum subtask levels to expand; omitted means unlimited",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / showSubtasks
        Added value: +{
        +  "description": "Expand each matching task's subtask tree (default: false)",
        +  "type": "boolean"
        +}
    • Addedget_folder
    • Changedget_forecast_tasks2 fields changed
      • addedInput schema / properties / maxSubtaskDepth
        Added value: +{
        +  "description": "Maximum subtask levels to expand; omitted means unlimited",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / showSubtasks
        Added value: +{
        +  "description": "Expand each matching task's subtask tree (default: false)",
        +  "type": "boolean"
        +}
    • Changedget_inbox_tasks2 fields changed
      • addedInput schema / properties / maxSubtaskDepth
        Added value: +{
        +  "description": "Maximum subtask levels to expand; omitted means unlimited",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / showSubtasks
        Added value: +{
        +  "description": "Expand each matching task's subtask tree (default: false)",
        +  "type": "boolean"
        +}
    • Addedget_projects
    • Addedget_projects_due_for_review
    • Changedget_task_by_id2 fields changed
      • addedInput schema / properties / maxSubtaskDepth
        Added value: +{
        +  "description": "Maximum subtask levels to expand; omitted means unlimited",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / showSubtasks
        Added value: +{
        +  "description": "Expand the task's subtask tree (default: false)",
        +  "type": "boolean"
        +}
    • Changedget_tasks_by_tag2 fields changed
      • addedInput schema / properties / maxSubtaskDepth
        Added value: +{
        +  "description": "Maximum subtask levels to expand; omitted means unlimited",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / showSubtasks
        Added value: +{
        +  "description": "Expand each matching task's subtask tree (default: false)",
        +  "type": "boolean"
        +}
    • Addedlist_folders
    • Addedlist_tags
    • Addedlist_task_notifications
    • Addedmark_projects_reviewed
    • Addedmove_task
    • Addedread_task_attachment
    • Addedremove_folder
    • Addedremove_tag
    • Addedremove_task_notification
    • Addedsearch_tags
    • Addedset_repetition_rule
  4. 16 tool updatesv1.0.0
    • First observedadd_omnifocus_task
    • First observedadd_project
    • First observedbatch_add_items
    • First observedbatch_remove_items
    • First observeddump_database
    • First observededit_item
    • First observedfilter_tasks
    • First observedget_custom_perspective_tasks
    • First observedget_flagged_tasks
    • First observedget_forecast_tasks
    • First observedget_inbox_tasks
    • First observedget_task_by_id
    • First observedget_tasks_by_tag
    • First observedget_today_completed_tasks
    • First observedlist_custom_perspectives
    • First observedremove_item

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a distinct resource and action, with clear descriptions that differentiate similar operations (e.g., filter_tasks vs get_tasks_by_tag). No significant overlap exists, making it easy for an agent to select the correct tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., list_folders, get_task_by_id, batch_add_items). Minor exceptions like append_to_note still maintain the verb-first convention, ensuring predictability.

Tool Count2/5

With 39 tools, the server is significantly over the recommended 3-15 range. While many tools are necessary for OmniFocus's complexity, the sheer number could overwhelm agents and suggests some consolidation is possible.

Completeness4/5

The tool set covers nearly all CRUD operations for folders, projects, tags, tasks, plus advanced features like notifications, perspectives, reviews, and batch operations. Missing explicit task completion and tag assignment are minor gaps.

Maintenance

ActivityMaintained
ResponsivenessSlow

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol (MCP) server that integrates with OmniFocus to enable Claude (or other MCP-compatible AI assistants) to interact with your tasks and projects.
    7
    253
    240
    MIT
  • 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
    16
    20
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jqlts1/omnifocus-mcp-enhanced'

If you have feedback or need assistance with the MCP directory API, please join our Discord server