OmniFocus-MCP
OmniFocus MCP Server
Сервер Model Context Protocol (MCP), который подключает OmniFocus к Claude и другим MCP-совместимым ИИ-ассистентам.

Обзор
Этот сервер связывает ИИ-ассистентов с вашей базой данных OmniFocus. В ходе естественного разговора ассистент может запрашивать, создавать, редактировать и удалять задачи и проекты — включая массовые операции. Вот что можно с ним делать:
Преобразовать PDF-файл с учебным планом в полностью специфицированный проект с задачами, тегами, датами откладывания и сроками
Превратить стенограмму встречи в список действий
Аудитировать и реорганизовывать теги, проекты и папки в разговоре
Создавать визуализации ваших задач, проектов и тегов
Обрабатывать десятки элементов за одну пакетную операцию
Related MCP server: MCP OmniFocus
Быстрый старт
Предварительные требования
macOS с установленным OmniFocus
Node.js 20 или новее (для
npx)
При первом обращении сервера к OmniFocus macOS попросит разрешить доступ к автоматизации. Предоставьте его один раз — и всё готово.
Claude Desktop
Добавьте сервер в ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"omnifocus": {
"command": "npx",
"args": ["-y", "omnifocus-mcp"]
}
}
}Затем перезапустите Claude Desktop.
Claude Code
claude mcp add omnifocus -- npx -y omnifocus-mcpДругие MCP-клиенты работают аналогично: запустите npx -y omnifocus-mcp через stdio.
Примеры диалогов
Точечные запросы:
«Покажи все мои отмеченные флагом задачи, срок которых наступает на этой неделе»
«Какие у меня следующие действия в папке „Работа“?»
«Подсчитай, сколько задач в каждом проекте»
Реорганизация:
«Я хочу, чтобы у каждой задачи был тег уровня энергии. Покажи мне список всех задач, у которых его нет, и свои предложения, какой тег добавить. Я внесу любые изменения, которые сочту нужными. Затем внеси изменения в OmniFocus.»
Захват из любого места:
«Спасибо за подробное объяснение, почему верховенство закона важно. Добавь повторяющуюся задачу в мой проект по активизму, которая напоминает мне звонить моему представителю еженедельно. Включи краткое содержание этого разговора в поле заметок.»
Работа с перспективами:
«Какие перспективы у меня доступны?»
«Покажи, что находится в моей перспективе „Входящие“»
Обработка стенограмм или PDF:
«Я вставляю стенограмму сегодняшней встречи. Проанализируй её и создай задачи в OmniFocus для всех пунктов действий, назначенных мне. Помести их в мой проект „Разработка продукта“.»
Инструменты
Сервер предоставляет 12 инструментов. Необязательные параметры отмечены.
query_omnifocus
Запрос задач, проектов или папок с точечными фильтрами — гораздо быстрее и легче, чем выгрузка всей базы данных. Полную справку см. в QUERY_TOOL_REFERENCE.md, а примеры — в QUERY_TOOL_EXAMPLES.md.
Параметр | Описание |
| Что запрашивать: |
| Комбинируются по логике И; фильтры-массивы ( |
| Возвращать только перечисленные поля — ответы остаются компактными |
| Формируют список результатов |
| Включать завершённые/отброшенные элементы (по умолчанию: false) |
| Возвращать только количество совпадений |
Доступные фильтры:
Контейнеры:
projectName(частичное совпадение без учёта регистра;"inbox"нацеливается на входящие),projectId,folderId(включая подпапки),folderName(частичное совпадение без учёта регистра, включая подпапки)Имена:
taskName(частичное совпадение без учёта регистра)Теги:
tags(точное совпадение, с учётом регистра)Статус:
status— задачи:Next,Available,Blocked,DueSoon,Overdue,Completed,Dropped; проекты:Active,OnHold,Done,DroppedДаты, ориентированные в будущее:
dueWithin,deferredUntil,plannedWithin(диапазоны),dueOn,deferOn,plannedOn(точный день). Принимают число дней,"today","tomorrow","this week","next week"или дату в формате ISOДаты, ориентированные в прошлое:
addedWithin,addedOn,completedWithin,completedOn,droppedWithin,droppedOn(фильтры завершённых/отброшенных требуютincludeCompleted: true)Флаги и прочее:
flagged,inbox,hasNote,isRepeating,reviewDue(только для проектов)
dump_database
Получить полное состояние вашей базы данных. Используйте для всестороннего анализа; для точечных запросов предпочитайте query_omnifocus.
hideCompleted(необязательно): скрыть завершённые/отброшенные задачи (по умолчанию: true)hideRecurringDuplicates(необязательно): скрыть дубликаты повторяющихся задач (по умолчанию: true)
add_omnifocus_task
Создать новую задачу.
nameprojectName(необязательно): проект, в который добавить задачу (по умолчанию — входящие)parentTaskId/parentTaskName(необязательно): вложить под существующую задачуnote,dueDate,deferDate,plannedDate,flagged,estimatedMinutes,tags(все необязательные)repeat(необязательно): сделать повторяющейся — см. Повторяющиеся элементы
add_project
Создать новый проект.
namefolderName(необязательно): папка, в которую поместить проектsequential(необязательно): должны ли задачи выполняться по порядкуnote,dueDate,deferDate,flagged,estimatedMinutes,tags,repeat(все необязательные)
edit_item
Редактировать существующую задачу или проект. Также способ перемещения элементов — задайте newProjectName, чтобы переместить задачу в проект, или ""/"inbox", чтобы отправить её во входящие.
idилиname: какой элемент редактировать (id имеет приоритет)itemType:taskилиprojectОбщие:
newName,newNote,newDueDate,newDeferDate,newFlagged,newEstimatedMinutes(даты в формате ISO; пустая строка очищает)Задачи:
newStatus(incomplete,completed,dropped,skipped—skippedтолько для повторяющихся задач),addTags,removeTags,replaceTags,newProjectName,newPlannedDateПроекты:
newProjectStatus(active,completed,dropped,onHold),newFolderName,newSequential,markReviewed(устанавливает следующую дату проверки на основе интервала проверки проекта)Повторение:
newRepeatзадаёт новое правило (та же форма, что иrepeatпри создании);newRepeat: nullочищает его
remove_item
Удалить задачу или проект.
idилиname: какой элемент удалитьitemType:taskилиproject
batch_add_items
Создать несколько задач и проектов одной операцией. Каждый элемент принимает те же поля, что и add_omnifocus_task / add_project, плюс type (task или project) и необязательные помощники иерархии:
tempId: временный идентификатор, на который могут ссылаться другие элементы того же пакетаparentTempId: вложить этот элемент подtempIdдругого элемента пакета
{
"items": [
{ "type": "project", "name": "My Project", "tempId": "proj1" },
{ "type": "task", "name": "First task", "parentTempId": "proj1" },
{ "type": "task", "name": "Parent task", "parentTempId": "proj1", "tempId": "t1" },
{ "type": "task", "name": "Subtask", "parentTempId": "t1" }
]
}batch_remove_items
Удалить несколько задач или проектов одной операцией. Каждый элемент принимает id или name, плюс itemType.
list_perspectives
Список доступных перспектив, как встроенных, так и пользовательских (пользовательские перспективы — функция OmniFocus Pro).
includeBuiltIn,includeCustom(необязательно, по умолчанию: true)
get_perspective_view
Получить элементы, видимые в указанной перспективе.
perspectiveName: например,Inbox,Flaggedили имя пользовательской перспективыlimit(необязательно, по умолчанию: 100),includeMetadata(необязательно),fields(необязательно)
list_tags
Список всех тегов с их иерархией, статусом активности и количеством задач.
includeDropped(необязательно, по умолчанию: false)
create_tag
Создать тег, при необходимости вложенный под существующий родительский.
nameparentTagName/parentTagID(необязательно; ID имеет приоритет)
Повторяющиеся элементы
add_omnifocus_task, add_project и каждый элемент в batch_add_items принимают объект repeat; edit_item принимает newRepeat. Вы описываете расписание, а сервер компилирует правило повторения ICS, так что вам никогда не придётся писать RRULE вручную.
Поле | Описание |
|
|
|
|
| Повторять каждые N единиц (по умолчанию 1) |
| Конкретные дни, например |
{ "name": "Weekly review", "repeat": { "method": "start-after-completion", "unit": "week" } }
{ "name": "Strength work", "repeat": { "method": "fixed", "unit": "week", "weekdays": ["TU","TH"] } }Выбирайте method осознанно — это поле чаще всего задают неправильно вручную. При fixed повторения появляются по расписанию независимо от того, было ли выполнено предыдущее, так что пропущенная неделя оставляет накопленный долг. При start-after-completion следующее повторение планируется от момента фактического выполнения, так что привычка просто возобновляется.
Прочитайте правило обратно с помощью query_omnifocus, используя поля repetitionRule (строка ICS) и repetitionMethod, или отфильтруйте по isRepeating.
В настоящее время не поддерживаются: позиционные месячные правила («третий вторник»), конкретные дни месяца и условия окончания (COUNT/UNTIL). Задавайте их непосредственно в OmniFocus.
Ресурсы
Ресурсы позволяют MCP-клиентам прикреплять данные OmniFocus к разговору в качестве контекста, без вызовов инструментов. В Claude Code введите @, чтобы просмотреть их; Claude Desktop и другие клиенты, поддерживающие ресурсы, могут прикреплять их напрямую. Все ресурсы возвращают JSON.
URI | Описание |
| Текущие элементы входящих |
| Повестка дня — срок сегодня, запланировано на сегодня и просрочено |
| Все отмеченные флагом элементы |
| Статистика базы данных (количество задач, просроченные, отмеченные флагом и т. д.) |
| Задачи в конкретном проекте |
| Элементы, видимые в указанной перспективе |
Два шаблонных ресурса поддерживают перечисление всех доступных значений и автодополнение параметра {name}.
Инструкции сервера и журналирование
Инструкции: во время рукопожатия MCP сервер отправляет клиенту руководство по использованию — советы по выбору инструментов (предпочитайте query_omnifocus вместо dump_database), подсказки по фильтрам и каталог ресурсов. Настройка не требуется.
Журналирование: сервер отправляет структурированные журналы через протокол журналирования MCP. Клиенты могут регулировать подробность с помощью logging/setLevel (debug, info, warning, error, ...). Время выполнения скриптов и ошибки регистрируются автоматически.
Как это работает
Сервер общается с OmniFocus через osascript, используя JXA (JavaScript for Automation) и встроенную автоматизацию OmniFocus (OmniJS), где это уместно. Он построен на официальном MCP TypeScript SDK и общается с клиентами через stdio.
Общий фоновый процесс
Запуск omnifocus-mcp запускает небольшой shim, который подключается к общему фоновому процессу, запуская его, если он ещё не работает. Каждый клиент на машине получает собственную независимую MCP-сессию, но все они работают внутри этого единственного процесса.
Это важно, когда несколько агентов одновременно используют OmniFocus. OmniFocus — это однопоточное приложение, управляемое через AppleEvents, и сервер ограничивает количество одновременных вызовов osascript. Когда каждый клиент запускал собственный сервер, этот лимит был на процесс — десять клиентов означали десять независимых бюджетов, направленных на одно приложение, что приводило к тайм-аутам AppleEvent. Общий процесс делает лимит глобальным.
Фоновый процесс прослушивает Unix-сокет в каталоге с правами 0700 (по умолчанию ~/.omnifocus-mcp/daemon-<version>.sock), поэтому доступ контролируется файловой системой — ни сетевого порта, ни токена. Он завершается сам, когда в течение idle-окна не остаётся подключённых клиентов, и ведёт журнал в daemon.log рядом с сокетом.
Имя сокета содержит версию пакета, так что обновление никогда не оставит вас на связи с фоновым процессом предыдущей версии. Сразу после обновления вы можете ненадолго увидеть два фоновых процесса: старый продолжает обслуживать уже подключённых клиентов и завершается, когда последний из них отключается. Клиенты, всё ещё подключённые к старому процессу, узнают об этом встроенным способом — пока работает более новый процесс, каждый результат инструмента содержит однострочное уведомление об обновлении, так что никому не нужно помнить о переподключении.
Конфигурация клиентов не меняется. Если фоновый процесс не может быть запущен — необычная песочница, домашний каталог только для чтения — shim переключается на запуск автономного сервера в процессе, как в более ранних версиях.
Переменные окружения
Переменная | По умолчанию | Назначение |
| не задана | Установите |
|
| Переопределяет путь к сокету, например, для запуска изолированного экземпляра. |
|
| Завершение после такого периода без трафика от клиентов. |
|
| Максимальное количество одновременных вызовов |
Дорожная карта
Поддержка MCP
promptУправление уведомлениями для проектов и задач
См. GitHub issues для запросов функций и известных проблем
Вклад
Вклад приветствуется! Пожалуйста, не стесняйтесь отправлять pull request. CI запускает проверку типов, модульные тесты и сборку для каждого PR.
npm install
npm test # unit tests
npm run build # compile to dist/
npm run test:integration # requires OmniFocus; creates and removes TEST:-prefixed itemsЛицензия
MIT
Available Tools
7 toolsadd_omnifocus_taskC
Add a new task to OmniFocus
| Name | Required | Description | Default |
|---|---|---|---|
| deferDate | No | The defer date of the task in ISO format (YYYY-MM-DD or full ISO date) | |
| dueDate | No | The due date of the task in ISO format (YYYY-MM-DD or full ISO date) | |
| estimatedMinutes | No | Estimated time to complete the task, in minutes | |
| flagged | No | Whether the task is flagged or not | |
| name | Yes | The name of the task | |
| note | No | Additional notes for the task | |
| projectName | No | The name of the project to add the task to (will add to inbox if not specified) | |
| tags | No | Tags to assign to the task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Add a new task' implies a write operation, it doesn't specify whether this requires authentication, what happens on success/failure, if there are rate limits, or how errors are handled. For a mutation tool with zero annotation coverage, this is insufficient.
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, efficient sentence that states the core purpose without any wasted words. It's appropriately sized and front-loaded, making it easy for an agent to quickly understand what the tool does.
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 mutation tool with 8 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens after task creation, what the return value might be, or provide any behavioral context. The description should do more to compensate for the lack of structured metadata.
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 fully documents all 8 parameters. The description adds no additional parameter information beyond what's already in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the 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 clearly states the action ('Add') and resource ('new task to OmniFocus'), making the purpose immediately understandable. It doesn't differentiate from sibling tools like 'add_project' or 'edit_item', which would require mentioning this is specifically for tasks rather than projects or editing existing items.
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 'add_project', 'edit_item', or 'batch_add_items'. The description doesn't mention prerequisites, context, or any exclusions that would help an agent choose between these sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_projectC
Add a new project to OmniFocus
| Name | Required | Description | Default |
|---|---|---|---|
| deferDate | No | The defer date of the project in ISO format (YYYY-MM-DD or full ISO date) | |
| dueDate | No | The due date of the project in ISO format (YYYY-MM-DD or full ISO date) | |
| estimatedMinutes | No | Estimated time to complete the project, in minutes | |
| flagged | No | Whether the project is flagged or not | |
| folderName | No | The name of the folder to add the project to (will add to root if not specified) | |
| name | Yes | The name of the project | |
| note | No | Additional notes for the project | |
| sequential | No | Whether tasks in the project should be sequential (default: false) | |
| tags | No | Tags to assign to the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool adds a project but doesn't explain what happens upon success (e.g., returns a project ID), error conditions, permissions needed, or side effects. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy for an AI agent to parse quickly.
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 mutation tool ('add') with no annotations and no output schema, the description is insufficient. It doesn't cover behavioral aspects like return values, error handling, or system impacts, leaving significant gaps for an AI agent to understand how to use it 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 schema already documents all 9 parameters thoroughly. The description adds no additional parameter information beyond what's in the schema. According to the rules, with high schema coverage, the baseline is 3 even with no param info in the 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 clearly states the action ('Add a new project') and target resource ('to OmniFocus'), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'add_omnifocus_task' or 'batch_add_items' that might also create items in OmniFocus, so it doesn't reach the highest 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 no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'add_project' over 'add_omnifocus_task' (for tasks vs. projects) or 'batch_add_items' (for bulk operations), nor does it specify prerequisites or exclusions for project creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_add_itemsB
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?
With no annotations provided, the description carries full burden but only states it's a batch addition operation. It doesn't disclose behavioral traits such as whether it's idempotent, requires specific permissions, handles errors, or returns any output. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
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, efficient sentence that front-loads key information ('Add multiple tasks or projects') without unnecessary words. It earns its place by clarifying the batch nature and target system, making it appropriately sized and well-structured.
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 annotations and no output schema, the description is incomplete for a mutation tool. It lacks details on behavioral context, error handling, or return values, which are crucial for an agent to use it correctly. The high schema coverage doesn't compensate for these gaps in operational transparency.
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 schema description coverage is 100%, so the schema fully documents the 'items' parameter and its nested properties. The description adds no parameter semantics beyond implying batch processing, which is already covered by the tool name and schema. Baseline 3 is appropriate as the schema does the heavy lifting.
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') and target ('to OmniFocus in a single operation'), making the purpose evident. It distinguishes from single-item tools like 'add_omnifocus_task' and 'add_project' by emphasizing batch capability, though it doesn't explicitly name these siblings.
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 adding multiple items at once, suggesting it's an alternative to single-item tools. However, it doesn't explicitly state when to use this over siblings like 'add_omnifocus_task' or 'add_project', nor does it mention prerequisites or exclusions, leaving guidance incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_remove_itemsC
Remove multiple tasks or projects from OmniFocus in a single operation
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of items (tasks or projects) to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'Remove' which implies a destructive mutation, but lacks details on permissions, reversibility, confirmation prompts, or error handling for partial failures. For a batch deletion tool with no annotation coverage, this is a significant gap in behavioral disclosure.
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, efficient sentence that front-loads the core action and resource. Every word earns its place with no redundancy or fluff, making it highly concise and well-structured for quick comprehension.
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 (batch destructive operation) and lack of annotations and output schema, the description is insufficient. It doesn't cover critical aspects like return values, error conditions, or side effects. For a mutation tool with no structured safety hints, more completeness is needed to guide safe agent usage.
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 fully documents the 'items' parameter and its nested properties (id, itemType, name). The description adds no additional parameter semantics beyond implying batch processing. With high schema coverage, the baseline is 3, as the description doesn't compensate but doesn't need to heavily.
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 ('Remove multiple tasks or projects') and resource ('from OmniFocus') with the scope of 'in a single operation'. It distinguishes from the sibling 'remove_item' by emphasizing batch capability, though it doesn't explicitly name that sibling. The purpose is specific but could be more precise about differentiation.
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 'remove_item' or other deletion methods. It mentions batch removal but doesn't specify scenarios (e.g., efficiency for bulk cleanup) or prerequisites. Without explicit when/when-not instructions, usage context is implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dump_databaseC
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?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Gets' implies a read operation, it doesn't specify what 'current state' includes (tasks, projects, tags, etc.), the format of the output, whether this is a heavy operation, or any performance considerations. For a database dump tool with zero annotation coverage, this is insufficient.
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, efficient sentence that states the core purpose upfront. However, given the complexity of a database dump operation and the many sibling alternatives, this extreme conciseness comes at the cost of helpful context that would aid tool selection.
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 database dump tool with no annotations, no output schema, and 15 sibling retrieval tools, the description is incomplete. It doesn't explain what data is included in the dump, the output format, how this differs from more targeted retrieval tools, or any performance implications. The agent lacks sufficient context to use this 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 schema already fully documents both parameters (hideCompleted and hideRecurringDuplicates). The description adds no parameter information beyond what's in the schema, meeting the baseline 3 for high 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 clearly states the action ('Gets') and resource ('current state of your OmniFocus database'), providing a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from its many sibling tools that also retrieve task/project data (like get_flagged_tasks, get_inbox_tasks, etc.), which would require a 5.
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. With 15 sibling tools that retrieve various subsets of OmniFocus data, the agent receives no help in choosing between a full database dump and more targeted retrieval tools like get_flagged_tasks or filter_tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_itemC
Edit a task or project in OmniFocus
| Name | Required | Description | Default |
|---|---|---|---|
| addTags | No | Tags to add to the task | |
| id | No | The ID of the task or project to edit | |
| itemType | Yes | Type of item to edit ('task' or 'project') | |
| name | No | The name of the task or project to edit (as fallback if ID not provided) | |
| newDeferDate | No | New defer date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear | |
| newDueDate | No | New due date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear | |
| newEstimatedMinutes | No | New estimated minutes | |
| newFlagged | No | Set flagged status (set to false for no flag, true for flag) | |
| newFolderName | No | New folder to move the project to | |
| newName | No | New name for the item | |
| newNote | No | New note for the item | |
| newProjectStatus | No | New status for projects | |
| newSequential | No | Whether the project should be sequential | |
| newStatus | No | New status for tasks (incomplete, completed, dropped) | |
| removeTags | No | Tags to remove from the task | |
| replaceTags | No | Tags to replace all existing tags with |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but only states the basic purpose. It doesn't mention that this is a mutation operation (implied by 'Edit'), what permissions are needed, whether changes are reversible, error conditions, or what happens when multiple parameters are provided simultaneously (e.g., addTags vs replaceTags).
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, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a tool with comprehensive schema documentation, though it could benefit from additional context about usage and behavior.
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 mutation tool with 16 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what the tool returns, error handling, or behavioral nuances. The agent must rely entirely on the input schema for understanding, which lacks context about how the edit operation actually works in practice.
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 itself. The description adds no additional parameter information beyond what's in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in 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 clearly states the action ('Edit') and target ('a task or project in OmniFocus'), providing specific verb+resource. However, it doesn't distinguish this from sibling tools like 'remove_item' or 'add_omnifocus_task' beyond the basic edit vs add/remove distinction, missing opportunities to clarify scope boundaries.
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. It doesn't mention prerequisites (like needing an existing item ID), when to choose edit over remove+add, or how it differs from batch operations available in sibling tools like 'batch_add_items' or 'batch_remove_items'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_itemC
Remove a task or project from OmniFocus
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The ID of the task or project to remove | |
| itemType | Yes | Type of item to remove ('task' or 'project') | |
| name | No | The name of the task or project to remove (as fallback if ID not provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose if removal is permanent, requires specific permissions, has side effects, or what happens to dependent items, which is critical for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and resource without any wasted words. It's appropriately sized for a simple tool, making it easy to parse quickly.
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 destructive tool with no annotations and no output schema, the description is incomplete. It lacks critical context such as the permanence of removal, error handling, or return values, leaving significant gaps for safe agent invocation.
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 fully documents all parameters. The description adds no extra meaning beyond implying removal targets tasks or projects, matching the schema. Baseline 3 is appropriate as the schema handles parameter semantics adequately.
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 ('Remove') and the resource ('a task or project from OmniFocus'), making the purpose immediately understandable. It doesn't distinguish from sibling tools like 'batch_remove_items' or 'edit_item', which prevents a perfect 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 no guidance on when to use this tool versus alternatives like 'batch_remove_items' for multiple items or 'edit_item' for modifications. It also doesn't mention prerequisites or context for removal, leaving usage unclear.
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.
7 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
remove_item
TDQS
Scored across 7 tools
Most tools have distinct purposes, but there is some overlap between 'remove_item' and 'batch_remove_items', and 'edit_item' could be confused with individual add/edit operations. The descriptions help clarify, but the boundaries between single and batch operations are not perfectly clear.
All tool names follow a consistent snake_case pattern with clear verb_noun structure (e.g., add_omnifocus_task, edit_item, dump_database). There are no deviations in naming conventions, making the set predictable and readable.
With 7 tools, the count is well-scoped for managing tasks and projects in OmniFocus. Each tool serves a clear purpose, from basic CRUD operations to batch processing and database inspection, without feeling excessive or insufficient.
The tool set provides complete coverage for the OmniFocus domain, including create (add_task, add_project), read (dump_database), update (edit_item), and delete (remove_item, batch_remove_items) operations, plus batch additions. There are no obvious gaps that would hinder agent workflows.
Maintenance
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.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Share one project context across ChatGPT, Claude, Telegram and any MCP client.
Related MCP Servers
- 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.4323 npm8MIT
- 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
- AlicenseNot gradedqualityDmaintenanceMCP server that gives AI assistants full control over OmniFocus on macOS, including tasks, projects, tags, folders, perspectives, forecast, notifications, and review workflows.43MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables AI assistants to interact with OmniFocus on macOS via JXA, supporting task, project, folder, tag, perspective, and search operations.3120 npmMIT