OmniFocus MCP Enhanced
This server provides comprehensive AI-powered task management for OmniFocus through Claude AI, featuring native custom perspective access with hierarchical display and advanced filtering capabilities beyond native OmniFocus limits.
Core Task Management:
Full CRUD operations for tasks and projects with complete metadata (due dates, defer dates, tags, notes, time estimates, flags)
Complex task hierarchies with parent-child relationships and subtask creation
Batch operations for efficient bulk add/remove/edit of multiple items
Query specific tasks by ID, name, or complex criteria
Perspective Views:
Custom Perspectives: Native access via
Perspective.CustomAPI with hierarchical tree display showing parent-child relationshipsBuilt-in Perspectives: Inbox, Flagged, and Forecast (1-30 days)
Tag-based Views: Filter tasks by tags with exact or partial matching
List all available custom perspectives in your OmniFocus setup
Advanced Filtering:
Ultimate task filter supporting unlimited combinations of criteria including status (Available, Next, Blocked, DueSoon, Overdue, Completed, Dropped), dates, projects, tags, search text, time estimates, and flags
Date-based filtering with relative (today, this week, this month) or absolute ranges for due/defer/completion dates
Flexible sorting options (name, dates, project, flagged status)
Analytics & Tracking:
View today's completed tasks with configurable limits
Database dump with options to hide/show completed tasks and recurring duplicates
Key Features: Hierarchical tree-style visualization (├─, └─ symbols), AI-optimized tool descriptions, seamless Claude AI integration for intelligent workflows
Required for running OmniFocus, which is a macOS-only application.
Required runtime environment (v18+) for the MCP server.
Used for package distribution and installation of the OmniFocus MCP server.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OmniFocus MCP Enhancedshow me tasks from my Today Review perspective with hierarchy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🚀 OmniFocus MCP Enhanced
🌟 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: |
v2.3.0 | 2026-08-04 | Structured output: 11 tools now return MCP |
v2.2.0 | 2026-08-04 |
|
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 |
|
v2.0.0 | 2026-07-31 | Breaking: 41 tools consolidated into 25 ( |
v1.21.0 | 2026-07-29 |
|
v1.20.0 | 2026-07-29 | Repetition readable and verified everywhere; |
v1.19.0 | 2026-07-28 |
|
v1.18.0 | 2026-07-28 | Reliability: MCP SDK 1.30.0, bounded Resource snapshots, rebuilt |
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 |
|
v1.16.0 | 2026-07-27 |
|
v1.15.0 | 2026-07-27 |
|
v1.14.0 | 2026-07-27 |
|
Version | Date | Highlights |
v1.13.1 | 2026-07-26 | Server version read from |
v1.13.0 | 2026-07-26 | Task-tree-aware reads: subtask counts plus |
v1.12.0 | 2026-07-26 |
|
v1.11.1 | 2026-07-26 |
|
v1.11.0 | 2026-07-26 | Bundled |
v1.10.0 | 2026-07-25 | Tag management, task notifications, plus MCP Prompts and Resources |
v1.9.0 | 2026-07-25 |
|
v1.8.0 | 2026-07-25 | Folder management: create, rename, move, and inspect nested folders (consolidated into |
v1.7.0 | 2026-07-24 |
|
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 |
v1.6.8 | 2026-02-25 |
|
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.CustomAPI🌳 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
Quick Install (recommended)
# One-line installation
claude mcp add omnifocus-enhanced -- npx -y omnifocus-mcp-enhancedAlternative 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-enhancedAfter 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:
Connect the MCP server to your AI client.
Talk to the AI naturally.
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 quicklyClearing 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 |
|
🔍 Perspective views | Inbox, Flagged, Forecast, and Tags as first-class reads |
|
🌟 Custom perspectives | Read your own perspectives — and edit the filter rules behind them |
|
🚀 Task filtering | Dates, estimates, notes, tags, and status in one OmniJS predicate, with cursor pagination |
|
🎯 Batch operations | Up to 100 items per transaction — preflighted, verified, and rolled back on failure |
|
📐 Project shaping | One confirmed outline becomes a complete project tree |
|
🔁 Repeating tasks | ICS repeat rules readable and writable, verified field by field |
|
🗂️ Folders & tags | Nested hierarchies with cycle protection and exclusive tag groups |
|
📋 Review workflow | Native OmniFocus review metadata, marked in verified batches |
|
🖼️ Attachments | Inspect metadata first, open images only when needed |
|
📤 Structured output | 11 tools return |
|
Runnable examples for every row are in the Cookbook.
🛠️ Complete Tool Reference — 26 Tools
Task and project operations
dump_database - Export the OmniFocus database
add_omnifocus_task - Create one task, including subtasks and repetition
add_project - Create one project
remove_item - Delete a task or project
edit_item - Edit or reposition a task or project
move_task - Move one task
batch_move_tasks - Atomically move a confirmed task set
batch_complete_tasks - Atomically complete or reopen up to 100 tasks
batch_edit_items - Atomically edit fields, tags, and project review cadence on up to 100 tasks or projects, with relative date shifts
batch_add_items - Add multiple tasks or projects
batch_remove_items - Atomically delete a confirmed item set
create_project_from_outline - Create and verify one complete project tree
get_task_by_id - Read one task and its attachment metadata
read_task_attachment - Read one reported task attachment
get_tasks - Read inbox, flagged, forecast, tag, or custom-perspective tasks via
sourcefilter_tasks - Filter tasks by status, dates, project, tags, text, and more; use
{ "completedToday": true }for today's completed workget_projects - Read all projects or use
view=due_for_reviewfor projects due for reviewmark_projects_reviewed - Atomically mark confirmed projects reviewed
set_repetition_rule - Set, update, or clear a task repeat rule
Organization and productivity
manage_perspectives -
list,get, orupdatecustom perspectives and their filter rulesmanage_folders -
list,get,add,edit, orremovefoldersmanage_tags -
list,search,add,edit, orremovetagsmanage_task_notifications -
list,add, orremovetask remindersappend_to_note - Append without overwriting a task/project note
count_tasks - Count tasks using the filter engine
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 |
| 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 |
| Current inbox tasks |
| Overdue + due today + flagged, grouped |
| 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-skillBy default, this installs only in the current project:
your-project/
├── .claude/skills/omnifocus-cli/
│ ├── SKILL.md
│ └── bin/omnifocus-enhanced.cjs
└── config/mcporter.jsonUse --global only when you intentionally want the skill available in every
project:
npx -y omnifocus-mcp-enhanced@latest install-skill --globalThe global skill is installed in ~/.claude/skills/omnifocus-cli/, and its MCP
server registration is written to the home mcporter configuration.
That single command:
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 timeGenerates a standalone CLI from the server's live tool schemas (~20s), pinned to the Node runtime so the CLI stays runnable from any shell
Installs
SKILL.md+ the CLI into the current project's.claude/skills/omnifocus-cli/(or~/.claude/skills/omnifocus-cli/with--global)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-skillinstall-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 statusBatch 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 listto confirm the server is registeredFor Claude Desktop / Cowork: verify
claude_desktop_config.jsonis valid JSON and restart the appEnable 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.
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
📄 License
MIT License - see LICENSE file for details.
🔗 Links
NPM Package: https://www.npmjs.com/package/omnifocus-mcp-enhanced
Cookbook (all CLI/JSON examples): docs/cookbook.md
GitHub Repository: https://github.com/jqlts1/omnifocus-mcp-enhanced
OmniFocus: https://www.omnigroup.com/omnifocus/
Model Context Protocol: https://modelcontextprotocol.io/
Claude Code: https://docs.anthropic.com/en/docs/claude-code
🙏 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 toolsadd_omnifocus_taskC
Add a new task to OmniFocus
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the task | |
| note | No | Additional notes for the task | |
| tags | No | Tags to assign to the task | |
| dueDate | No | The due date of the task in ISO format (YYYY-MM-DD or full ISO date) | |
| flagged | No | Whether the task is flagged or not | |
| deferDate | No | The defer date of the task in ISO format (YYYY-MM-DD or full ISO date) | |
| repetition | No | Recurrence applied and verified after creation. Verification failure removes the created task. | |
| plannedDate | No | The planned date of the task in ISO format (YYYY-MM-DD or full ISO date) | |
| projectName | No | The name of the project to add the task to (will add to inbox if not specified) | |
| parentTaskId | No | The ID of the parent task to create this task as a subtask | |
| exclusiveTags | No | 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. | |
| parentTaskName | No | The name of the parent task to create this task as a subtask (alternative to parentTaskId) | |
| estimatedMinutes | No | Estimated time to complete the task, in minutes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the project | |
| note | No | Additional notes for the project | |
| tags | No | Tags to assign to the project | |
| dueDate | No | The due date of the project in ISO format (YYYY-MM-DD or full ISO date) | |
| flagged | No | Whether the project is flagged or not | |
| deferDate | No | The defer date of the project in ISO format (YYYY-MM-DD or full ISO date) | |
| folderName | No | The name of the folder to add the project to (will add to root if not specified) | |
| sequential | No | Whether tasks in the project should be sequential (default: false) | |
| plannedDate | No | The planned date of the project in ISO format (YYYY-MM-DD or full ISO date) | |
| exclusiveTags | No | 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. | |
| estimatedMinutes | No | Estimated time to complete the project, in minutes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The ID of the task or project | |
| name | No | The name of the task or project (as fallback if ID not provided) | |
| text | Yes | The text to append to the existing note | |
| itemType | Yes | Type of item whose note to append to ('task' or 'project') | |
| separator | No | Separator inserted between the existing note and the new text (default: a newline). Pass an empty string to append with no separator. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of items (tasks or projects) to add |
TDQS
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.
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.
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.
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.
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.
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_tasksADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Tasks to complete or mark incomplete |
TDQS
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.
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.
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.
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.
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.
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_tasksADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| moves | Yes | Confirmed task moves. The whole batch is preflighted and verified automatically. |
TDQS
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.
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.
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.
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.
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.
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_itemsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Confirmed tasks or projects to remove. The complete batch is validated before deletion. |
TDQS
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.
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.
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.
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.
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.
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_tasksARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| flagged | No | Only count flagged (true) or unflagged (false) tasks | |
| overdue | No | Only count overdue tasks | |
| dueToday | No | Only count tasks due today | |
| tagFilter | No | Only count tasks with these tags | |
| searchText | No | Only count tasks whose name or note contains this text | |
| taskStatus | No | Filter by task status: Available, Next, Blocked, DueSoon, Overdue, Completed, Dropped | |
| dueThisWeek | No | Only count tasks due this week | |
| perspective | No | Scope: 'inbox', 'flagged', or 'all' (default: all) | |
| createdAfter | No | Only count tasks created strictly after this date/time (ISO format) | |
| plannedToday | No | Only count tasks planned for today | |
| createdBefore | No | Only count tasks created strictly before this date/time (ISO format) | |
| exactTagMatch | No | Require exact tag name match (default: false) | |
| modifiedAfter | No | Only count tasks last modified strictly after this date/time (ISO format) | |
| projectFilter | No | Only count tasks in projects whose name contains this text | |
| completedToday | No | Only count tasks completed today | |
| modifiedBefore | No | Only count tasks last modified strictly before this date/time (ISO format) | |
| plannedThisWeek | No | Only count tasks planned for this week | |
| completedThisWeek | No | Only count tasks completed this week |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes |
TDQS
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.
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.
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.
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.
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.
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_databaseBRead-onlyIdempotent
Gets the current state of your OmniFocus database
| Name | Required | Description | Default |
|---|---|---|---|
| hideCompleted | No | Set to false to show completed and dropped tasks (default: true) | |
| hideRecurringDuplicates | No | Set to true to hide duplicate instances of recurring tasks (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | The ID of the task to duplicate | |
| newName | No | Optional new name for the duplicated task (keeps the original name if omitted) | |
| taskName | No | The name of the task to duplicate (as fallback if ID not provided) | |
| includeSubtasks | No | Whether to include the task's subtasks in the copy (default: true) |
TDQS
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.
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.
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.
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.
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.
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_itemCDestructive
Edit a task or project in OmniFocus
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The ID of the task or project to edit | |
| name | No | The name of the task or project to edit (as fallback if ID not provided) | |
| addTags | No | Tags to add to the task | |
| newName | No | New name for the item | |
| newNote | No | New note for the item | |
| itemType | Yes | Type of item to edit ('task' or 'project') | |
| newStatus | No | New status for tasks (incomplete, completed, dropped) | |
| newDueDate | No | New due date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear | |
| newFlagged | No | Set flagged status (set to false for no flag, true for flag) | |
| removeTags | No | Tags to remove from the task | |
| moveToInbox | No | For tasks: move task to inbox | |
| replaceTags | No | Tags to replace all existing tags with | |
| newDeferDate | No | New defer date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear | |
| newProjectId | No | For tasks: move task to this project ID | |
| exclusiveTags | No | 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. | |
| newFolderName | No | New folder to move the project to | |
| newSequential | No | Whether the project should be sequential | |
| newPlannedDate | No | New planned date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear | |
| newProjectName | No | For tasks: move task to this project name (errors on duplicate names) | |
| newParentTaskId | No | For tasks: move task under this parent task ID | |
| newProjectStatus | No | New status for projects | |
| newParentTaskName | No | For tasks: move task under this parent task name (errors on duplicate names) | |
| newEstimatedMinutes | No | New estimated minutes |
TDQS
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.
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.
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.
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.
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.
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_tasksBRead-onlyIdempotent
Advanced task filtering by status, dates, projects, tags, search, and more, with optional subtask-tree expansion
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of tasks to return (default: 100) | |
| cursor | No | Opaque continuation cursor returned by a previous filter_tasks page | |
| sortBy | No | Sort results by field | |
| flagged | No | Filter by flagged status | |
| hasNote | No | Filter tasks that have notes | |
| inInbox | No | Filter tasks in inbox | |
| overdue | No | Show overdue tasks only | |
| dueAfter | No | Show tasks due strictly after this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| dueToday | No | Show tasks due today | |
| dueBefore | No | Show tasks due strictly before this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| sortOrder | No | Sort order (default: asc) | |
| tagFilter | No | Filter by tag name(s). Can be single tag or array of tags | |
| deferAfter | No | Show tasks with defer date strictly after this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| deferToday | No | Show tasks deferred to today | |
| outputMode | No | Output detail: detailed (default) or compact for broad planning queries | |
| searchText | No | Search in task names and notes | |
| taskStatus | No | Filter by task status. Can specify multiple statuses | |
| deferBefore | No | Show tasks with defer date strictly before this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| dueThisWeek | No | Show tasks due this week | |
| estimateMax | No | Maximum estimated minutes | |
| estimateMin | No | Minimum estimated minutes | |
| hasEstimate | No | Filter tasks that have time estimates | |
| perspective | No | Limit search to specific perspective: inbox, flagged, all tasks | |
| createdAfter | No | Show tasks created strictly after this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| dueThisMonth | No | Show tasks due this month | |
| plannedAfter | No | Show tasks planned strictly after this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| plannedToday | No | Show tasks planned for today | |
| showSubtasks | No | Expand each matching task's subtask tree (default: false) | |
| createdBefore | No | Show tasks created strictly before this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| deferThisWeek | No | Show tasks deferred to this week | |
| exactTagMatch | No | Set to true for exact tag name match, false for partial (default: false) | |
| modifiedAfter | No | Show tasks last modified strictly after this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| plannedBefore | No | Show tasks planned strictly before this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| projectFilter | No | Filter by project name (partial match) | |
| completedAfter | No | Show tasks completed strictly after this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| completedToday | No | Show tasks completed today | |
| deferAvailable | No | Show tasks whose defer date has passed (now available) | |
| modifiedBefore | No | Show tasks last modified strictly before this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| completedBefore | No | Show tasks completed strictly before this date/time (ISO format: YYYY-MM-DD or full ISO) | |
| maxSubtaskDepth | No | Maximum subtask levels to expand; omitted means unlimited | |
| plannedThisWeek | No | Show tasks planned for this week | |
| plannedThisMonth | No | Show tasks planned for this month | |
| completedThisWeek | No | Show tasks completed this week | |
| completedThisMonth | No | Show tasks completed this month |
TDQS
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.
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.
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.
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.
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.
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_projectsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Project view: all (default) or due_for_review. | |
| status | No | Project statuses to include (all view only). | |
| folderName | No | Folder-name filter (all view only). | |
| includeOnHold | No | Include on-hold projects (due_for_review view only). | |
| includeReviewData | No | Include review fields (default: true; all view only). |
TDQS
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.
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.
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.
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.
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.
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_idARead-onlyIdempotent
Get information about a specific task by ID or name
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | The ID of the task to retrieve | |
| taskName | No | The name of the task to retrieve (alternative to taskId) | |
| showSubtasks | No | Expand the task's subtask tree (default: false) | |
| maxSubtaskDepth | No | Maximum subtask levels to expand; omitted means unlimited |
TDQS
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.
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.
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.
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.
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.
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_tasksARead-onlyIdempotent
Read tasks from inbox, flagged, forecast, tag, or custom perspective. Use source to select the view; source-specific parameters are strictly validated.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Forecast lookahead days (default: 7; forecast only). | |
| limit | No | Maximum tasks in flat custom perspective mode (custom only). | |
| source | Yes | Task view to read. Each source accepts only its documented source-specific parameters. | |
| tagName | No | Required when source is tag. | |
| exactMatch | No | Require an exact tag match (default: false; tag only). | |
| displayMode | No | Custom perspective display mode (custom only). | |
| showSubtasks | No | Expand each matching task subtask tree (not custom). | |
| hideCompleted | No | Hide completed tasks (default: true; all sources). | |
| projectFilter | No | Filter by project name (flagged only). | |
| showHierarchy | No | Legacy custom perspective hierarchy option (custom only). | |
| groupByProject | No | Legacy custom perspective grouping option (custom only). | |
| maxSubtaskDepth | No | Maximum subtask levels to expand (not custom). | |
| perspectiveName | No | Required when source is custom. | |
| includeDeferredOnly | No | Show only deferred tasks becoming available (forecast only). |
TDQS
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.
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.
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.
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.
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.
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_foldersADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Folder ID (get/edit/remove only). | |
| name | No | Folder name (required for add; fallback identifier otherwise). | |
| action | Yes | Folder operation to perform. | |
| newName | No | New folder name (edit only). | |
| includeDropped | No | Include dropped folders (default: true; list only). | |
| parentFolderName | No | Parent folder name (add only). | |
| newParentFolderName | No | New parent folder name (edit only); use an empty string for root. |
TDQS
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.
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.
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.
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.
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.
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_perspectivesADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Perspective identifier (get/update). Preferred over name. | |
| name | No | Perspective name (get/update). This is a perspective, not a tag. | |
| rules | No | Complete replacement rule document (update). Always read the perspective first and send the full tree back, including any "raw" rules, or they will be lost. | |
| action | Yes | list: every custom perspective. get: one perspective with its rules explained. update: rewrite name, rules, aggregation, or icon colour in place. | |
| dryRun | No | Validate and report the diff without writing (update). | |
| newName | No | Rename the perspective (update). | |
| iconColor | No | Perspective icon colour as a hex string such as "#3399EE". |
TDQS
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.
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.
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.
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.
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.
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_tagsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Tag ID (edit/remove only). | |
| name | No | Tag name (required for add; fallback identifier otherwise). | |
| query | No | Search text (required for search). | |
| action | Yes | Tag operation to perform. | |
| newName | No | New tag name (edit only). | |
| newStatus | No | New tag status (edit only). | |
| exactMatch | No | Require exact name match (search only). | |
| parentTagName | No | Parent tag name (add only). | |
| includeInactive | No | Include paused/inactive tags (list/search only). | |
| newParentTagName | No | New parent tag name (edit only); use an empty string for root. |
TDQS
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.
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.
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.
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.
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.
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_notificationsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | 0-based notification index (remove only). | |
| action | Yes | Notification operation to perform. | |
| taskId | No | Task ID (preferred identifier). | |
| taskName | No | Task name (fallback identifier). | |
| removeAll | No | Remove every notification (remove only). | |
| absoluteDate | No | ISO 8601 notification time (add only). | |
| relativeMinutes | No | Minutes relative to the due date; negative is before due (add only). |
TDQS
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.
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.
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.
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.
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.
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_reviewedADestructive
Mark a user-confirmed set of active or on-hold projects reviewed. The complete batch is validated first and review dates are verified afterward.
| Name | Required | Description | Default |
|---|---|---|---|
| projectIds | Yes | Stable IDs of projects the user explicitly confirmed as reviewed. |
TDQS
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.
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.
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.
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.
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.
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_taskBDestructive
Move an existing task to a project, parent task, or inbox
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The ID of the task to move | |
| name | No | The name of the task to move (fallback if ID not provided) | |
| targetInbox | No | Move task to inbox | |
| targetProjectId | No | Destination project ID | |
| targetProjectName | No | Destination project name (errors on duplicate names) | |
| targetParentTaskId | No | Destination parent task ID | |
| targetParentTaskName | No | Destination parent task name (errors on duplicate names) |
TDQS
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.
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.
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.
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.
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.
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_attachmentARead-onlyIdempotent
Read a task attachment reported by get_task_by_id. Images are returned as MCP image content when possible.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | The ID of the task that owns the attachment | |
| taskName | No | The name of the task that owns the attachment | |
| attachmentId | No | The attachment ID reported by get_task_by_id | |
| attachmentName | No | The attachment name reported by get_task_by_id |
TDQS
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.
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.
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.
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.
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.
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_itemBDestructive
Remove a task or project from OmniFocus
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The ID of the task or project to remove | |
| name | No | The name of the task or project to remove (as fallback if ID not provided) | |
| itemType | Yes | Type of item to remove ('task' or 'project') |
TDQS
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.
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.
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.
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.
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.
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_ruleADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | Set to true to remove the repetition rule from the task. | |
| count | No | Number of repetitions after which the rule ends. Encoded into the rule as COUNT=. | |
| taskId | Yes | The ID of the task to modify | |
| endDate | No | ISO date string for when the repetition ends. Encoded into the rule as UNTIL=. | |
| ruleString | No | ICS recurrence rule string, e.g. FREQ=WEEKLY;INTERVAL=2. Defaults to FREQ=WEEKLY. | |
| scheduleType | No | How the next occurrence is scheduled. Regularly repeats from assigned dates; FromCompletion repeats after completion. | |
| anchorDateKey | No | Which date property is advanced when the task repeats. | |
| catchUpAutomatically | No | When true, missed occurrences are skipped and the next future occurrence is created. |
TDQS
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.
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.
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.
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.
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.
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.
30 tool updates
v2.1.1- Removed
add_folder - Removed
add_tag - Removed
add_task_notification - Added
batch_complete_tasks - Changed
count_tasks4 fields changed- added
Input schema / properties / createdAfterAdded value: +{ + "description": "Only count tasks created strictly after this date/time (ISO format)", + "type": "string" +} - added
Input schema / properties / createdBeforeAdded value: +{ + "description": "Only count tasks created strictly before this date/time (ISO format)", + "type": "string" +} - added
Input schema / properties / modifiedAfterAdded value: +{ + "description": "Only count tasks last modified strictly after this date/time (ISO format)", + "type": "string" +} - added
Input schema / properties / modifiedBeforeAdded value: +{ + "description": "Only count tasks last modified strictly before this date/time (ISO format)", + "type": "string" +}
- Removed
edit_folder - Removed
edit_tag - Changed
filter_tasks5 fields changed- added
Input schema / properties / createdAfterAdded value: +{ + "description": "Show tasks created strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)", + "type": "string" +} - added
Input schema / properties / createdBeforeAdded value: +{ + "description": "Show tasks created strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)", + "type": "string" +} - added
Input schema / properties / modifiedAfterAdded value: +{ + "description": "Show tasks last modified strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)", + "type": "string" +} - added
Input schema / properties / modifiedBeforeAdded value: +{ + "description": "Show tasks last modified strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)", + "type": "string" +} - changed
Input schema / properties / sortBy / enumPrevious value: -[ - "name", - "dueDate", - "deferDate", - "plannedDate", - "completedDate", - "flagged", - "project" -]New value: +[ + "name", + "dueDate", + "deferDate", + "plannedDate", + "completedDate", + "createdDate", + "modifiedDate", + "flagged", + "project" +]
- Removed
get_custom_perspective_tasks - Removed
get_flagged_tasks - Removed
get_folder - Removed
get_forecast_tasks - Removed
get_inbox_tasks - Changed
get_projects6 fields changed- changed
Input schema / properties / folderName / descriptionPrevious value: -"Filter by folder name (case-insensitive partial match)."New value: +"Folder-name filter (all view only)." - added
Input schema / properties / folderName / minLengthAdded value: +1 - added
Input schema / properties / includeOnHoldAdded value: +{ + "description": "Include on-hold projects (due_for_review view only).", + "type": "boolean" +} - changed
Input schema / properties / includeReviewData / descriptionPrevious value: -"Include review fields (nextReviewDate, lastReviewDate, reviewInterval). Default: true."New value: +"Include review fields (default: true; all view only)." - changed
Input schema / properties / status / descriptionPrevious value: -"Filter by project status. OR logic — matches any. Default: all statuses."New value: +"Project statuses to include (all view only)." - added
Input schema / properties / viewAdded value: +{ + "description": "Project view: all (default) or due_for_review.", + "enum": [ + "all", + "due_for_review" + ], + "type": "string" +}
- Removed
get_projects_due_for_review - Added
get_tasks - Removed
get_tasks_by_tag - Removed
get_today_completed_tasks - Removed
list_custom_perspectives - Removed
list_folders - Removed
list_tags - Removed
list_task_notifications - Added
manage_folders - Added
manage_perspectives - Added
manage_tags - Added
manage_task_notifications - Removed
remove_folder - Removed
remove_tag - Removed
remove_task_notification - Removed
search_tags
2 tool updates
v1.20.0- Changed
add_omnifocus_task1 field changed- added
Input schema / properties / repetitionAdded 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" +}
- Added
create_project_from_outline
35 tool updates
v1.18.0- Added
add_folder - Changed
add_omnifocus_task2 fields changed- added
Input schema / properties / exclusiveTagsAdded 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" +} - added
Input schema / properties / plannedDateAdded value: +{ + "description": "The planned date of the task in ISO format (YYYY-MM-DD or full ISO date)", + "type": "string" +}
- Changed
add_project2 fields changed- added
Input schema / properties / exclusiveTagsAdded 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" +} - added
Input schema / properties / plannedDateAdded value: +{ + "description": "The planned date of the project in ISO format (YYYY-MM-DD or full ISO date)", + "type": "string" +}
- Added
add_tag - Added
add_task_notification - Added
append_to_note - Changed
batch_add_items4 fields changed- changed
Input schema / properties / items / items / properties / parentTaskId / descriptionPrevious 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." - changed
Input schema / properties / items / items / properties / parentTaskName / descriptionPrevious 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." - added
Input schema / properties / items / items / properties / plannedDateAdded value: +{ + "description": "The planned date in ISO format (YYYY-MM-DD or full ISO date)", + "type": "string" +} - changed
Input schema / properties / items / items / properties / projectName / descriptionPrevious 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."
- Added
batch_move_tasks - Changed
batch_remove_items7 fields changed- changed
Input schema / properties / items / descriptionPrevious value: -"Array of items (tasks or projects) to remove"New value: +"Confirmed tasks or projects to remove. The complete batch is validated before deletion." - changed
Input schema / properties / items / items / properties / id / descriptionPrevious value: -"The ID of the task or project to remove"New value: +"Stable ID of the task or project to remove" - added
Input schema / properties / items / items / properties / id / minLengthAdded value: +1 - removed
Input schema / properties / items / items / properties / nameRemoved value: -{ - "description": "The name of the task or project to remove (as fallback if ID not provided)", - "type": "string" -} - changed
Input schema / properties / items / items / requiredPrevious value: -[ - "itemType" -]New value: +[ + "id", + "itemType" +] - added
Input schema / properties / items / maxItemsAdded value: +100 - added
Input schema / properties / items / minItemsAdded value: +1
- Added
count_tasks - Added
duplicate_task - Added
edit_folder - Changed
edit_item7 fields changed- added
Input schema / properties / exclusiveTagsAdded 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" +} - added
Input schema / properties / moveToInboxAdded value: +{ + "description": "For tasks: move task to inbox", + "type": "boolean" +} - added
Input schema / properties / newParentTaskIdAdded value: +{ + "description": "For tasks: move task under this parent task ID", + "type": "string" +} - added
Input schema / properties / newParentTaskNameAdded value: +{ + "description": "For tasks: move task under this parent task name (errors on duplicate names)", + "type": "string" +} - added
Input schema / properties / newPlannedDateAdded value: +{ + "description": "New planned date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear", + "type": "string" +} - added
Input schema / properties / newProjectIdAdded value: +{ + "description": "For tasks: move task to this project ID", + "type": "string" +} - added
Input schema / properties / newProjectNameAdded value: +{ + "description": "For tasks: move task to this project name (errors on duplicate names)", + "type": "string" +}
- Added
edit_tag - Changed
filter_tasks16 fields changed- changed
Input schema / properties / completedAfter / descriptionPrevious 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)" - changed
Input schema / properties / completedBefore / descriptionPrevious 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)" - added
Input schema / properties / cursorAdded value: +{ + "description": "Opaque continuation cursor returned by a previous filter_tasks page", + "maxLength": 2048, + "type": "string" +} - changed
Input schema / properties / deferAfter / descriptionPrevious 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)" - changed
Input schema / properties / deferBefore / descriptionPrevious 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)" - changed
Input schema / properties / dueAfter / descriptionPrevious 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)" - changed
Input schema / properties / dueBefore / descriptionPrevious 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)" - added
Input schema / properties / maxSubtaskDepthAdded value: +{ + "description": "Maximum subtask levels to expand; omitted means unlimited", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / outputModeAdded value: +{ + "description": "Output detail: detailed (default) or compact for broad planning queries", + "enum": [ + "detailed", + "compact" + ], + "type": "string" +} - added
Input schema / properties / plannedAfterAdded value: +{ + "description": "Show tasks planned strictly after this date/time (ISO format: YYYY-MM-DD or full ISO)", + "type": "string" +} - added
Input schema / properties / plannedBeforeAdded value: +{ + "description": "Show tasks planned strictly before this date/time (ISO format: YYYY-MM-DD or full ISO)", + "type": "string" +} - added
Input schema / properties / plannedThisMonthAdded value: +{ + "description": "Show tasks planned for this month", + "type": "boolean" +} - added
Input schema / properties / plannedThisWeekAdded value: +{ + "description": "Show tasks planned for this week", + "type": "boolean" +} - added
Input schema / properties / plannedTodayAdded value: +{ + "description": "Show tasks planned for today", + "type": "boolean" +} - added
Input schema / properties / showSubtasksAdded value: +{ + "description": "Expand each matching task's subtask tree (default: false)", + "type": "boolean" +} - changed
Input schema / properties / sortBy / enumPrevious value: -[ - "name", - "dueDate", - "deferDate", - "completedDate", - "flagged", - "project" -]New value: +[ + "name", + "dueDate", + "deferDate", + "plannedDate", + "completedDate", + "flagged", + "project" +]
- Changed
get_custom_perspective_tasks2 fields changed- added
Input schema / properties / displayModeAdded 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" +} - added
Input schema / properties / groupByProjectAdded value: +{ + "description": "Legacy parameter. Group tasks by project when displayMode is not provided. Default: true", + "type": "boolean" +}
- Changed
get_flagged_tasks2 fields changed- added
Input schema / properties / maxSubtaskDepthAdded value: +{ + "description": "Maximum subtask levels to expand; omitted means unlimited", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / showSubtasksAdded value: +{ + "description": "Expand each matching task's subtask tree (default: false)", + "type": "boolean" +}
- Added
get_folder - Changed
get_forecast_tasks2 fields changed- added
Input schema / properties / maxSubtaskDepthAdded value: +{ + "description": "Maximum subtask levels to expand; omitted means unlimited", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / showSubtasksAdded value: +{ + "description": "Expand each matching task's subtask tree (default: false)", + "type": "boolean" +}
- Changed
get_inbox_tasks2 fields changed- added
Input schema / properties / maxSubtaskDepthAdded value: +{ + "description": "Maximum subtask levels to expand; omitted means unlimited", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / showSubtasksAdded value: +{ + "description": "Expand each matching task's subtask tree (default: false)", + "type": "boolean" +}
- Added
get_projects - Added
get_projects_due_for_review - Changed
get_task_by_id2 fields changed- added
Input schema / properties / maxSubtaskDepthAdded value: +{ + "description": "Maximum subtask levels to expand; omitted means unlimited", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / showSubtasksAdded value: +{ + "description": "Expand the task's subtask tree (default: false)", + "type": "boolean" +}
- Changed
get_tasks_by_tag2 fields changed- added
Input schema / properties / maxSubtaskDepthAdded value: +{ + "description": "Maximum subtask levels to expand; omitted means unlimited", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / showSubtasksAdded value: +{ + "description": "Expand each matching task's subtask tree (default: false)", + "type": "boolean" +}
- Added
list_folders - Added
list_tags - Added
list_task_notifications - Added
mark_projects_reviewed - Added
move_task - Added
read_task_attachment - Added
remove_folder - Added
remove_tag - Added
remove_task_notification - Added
search_tags - Added
set_repetition_rule
16 tool updates
v1.0.0- First observed
add_omnifocus_task - First observed
add_project - First observed
batch_add_items - First observed
batch_remove_items - First observed
dump_database - First observed
edit_item - First observed
filter_tasks - First observed
get_custom_perspective_tasks - First observed
get_flagged_tasks - First observed
get_forecast_tasks - First observed
get_inbox_tasks - First observed
get_task_by_id - First observed
get_tasks_by_tag - First observed
get_today_completed_tasks - First observed
list_custom_perspectives - First observed
remove_item
TDQS
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.
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.
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.
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
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
- mcpOAuthnet.todoist
Official Todoist MCP server for AI assistants to manage tasks, projects, and workflows.
Model Context Protocol server for todo.vu task management and time tracking.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityAmaintenanceA 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.7253240MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that integrates OmniFocus with Claude Desktop, providing AI-powered access to tasks and projects for enhanced task management and weekly reviews.42538MIT
- AlicenseBqualityDmaintenanceA 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.12MIT
- AlicenseAqualityFmaintenanceAn 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.511620MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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