Skip to main content
Glama

OmniFocus MCP Server

npm version CI

Ein Model Context Protocol (MCP)-Server, der OmniFocus mit Claude und anderen MCP-kompatiblen KI-Assistenten verbindet.

OmniFocus MCP

Überblick

Dieser Server verbindet KI-Assistenten mit Ihrer OmniFocus-Datenbank. Durch natürliche Konversation kann ein Assistent Aufgaben und Projekte abfragen, erstellen, bearbeiten und entfernen – einschließlich Stapeloperationen. Einige Dinge, die Sie damit tun können:

  • Ein Syllabus-PDF in ein vollständig spezifiziertes Projekt mit Aufgaben, Tags, Aufschiebedaten und Fälligkeitsdaten übersetzen

  • Ein Meeting-Transkript in eine Liste von Aktionen verwandeln

  • Ihre Tags, Projekte und Ordner im Gespräch prüfen und neu organisieren

  • Visualisierungen Ihrer Aufgaben, Projekte und Tags erstellen

  • Dutzende von Elementen in einem einzigen Stapelvorgang verarbeiten

Related MCP server: MCP OmniFocus

Schnellstart

Voraussetzungen

  • macOS mit installiertem OmniFocus

  • Node.js 20 oder höher (für npx)

Beim ersten Gespräch mit OmniFocus fragt macOS, ob Sie den Automatisierungszugriff erlauben möchten. Erlauben Sie es einmal, und Sie sind bereit.

Claude Desktop

Fügen Sie den Server zu ~/Library/Application Support/Claude/claude_desktop_config.json hinzu:

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

Starten Sie dann Claude Desktop neu.

Claude Code

claude mcp add omnifocus -- npx -y omnifocus-mcp

Andere MCP-Clients funktionieren auf die gleiche Weise: Starten Sie npx -y omnifocus-mcp über stdio.

Beispielkonversationen

Gezielte Abfragen:

„Zeig mir alle meine markierten Aufgaben, die diese Woche fällig sind"

„Was sind meine nächsten Aktionen im Ordner Arbeit?"

„Zähle, wie viele Aufgaben in jedem Projekt sind"

Neu organisieren:

„Ich möchte, dass jede Aufgabe ein Energieniveau-Tag hat. Zeig mir eine Liste aller Aufgaben, die keins haben, und deine Vorschläge, welches Tag hinzugefügt werden soll. Ich nehme alle Änderungen vor, die ich für angemessen halte. Dann nimm die Änderungen in OmniFocus vor."

Von überall erfassen:

„Ok, danke für die ausführliche Erklärung, warum die Rechtsstaatlichkeit wichtig ist. Füge meinem Aktivismus-Projekt eine wiederkehrende Aufgabe hinzu, die mich wöchentlich daran erinnert, meinen Abgeordneten anzurufen. Füge eine Zusammenfassung dieses Gesprächs in das Notizfeld ein."

Mit Perspektiven arbeiten:

„Welche Perspektiven habe ich zur Verfügung?"

„Zeig mir, was in meiner Inbox-Perspektive ist"

Transkripte oder PDFs verarbeiten:

„Ich füge das Transkript des heutigen Meetings ein. Bitte analysiere es und erstelle Aufgaben in OmniFocus für alle Aktionspunkte, die mir zugewiesen sind. Lege sie in mein Projekt ‚Produktentwicklung'."

Werkzeuge

Der Server bietet 12 Werkzeuge. Optionale Parameter sind markiert.

query_omnifocus

Fragen Sie Aufgaben, Projekte oder Ordner mit gezielten Filtern ab – viel schneller und leichter als die gesamte Datenbank zu laden. Siehe QUERY_TOOL_REFERENCE.md für die vollständige Referenz und QUERY_TOOL_EXAMPLES.md für ausgearbeitete Beispiele.

Parameter

Beschreibung

entity

Was abgefragt werden soll: tasks, projects oder folders

filters (optional)

Mit UND-Logik kombinieren; Array-Filter (tags, status) verwenden ODER innerhalb des Arrays

fields (optional)

Nur die aufgeführten Felder zurückgeben – hält Antworten klein

limit, sortBy, sortOrder (optional)

Die Ergebnisliste formen

includeCompleted (optional)

Abgeschlossene/verworfene Elemente einschließen (Standard: false)

summary (optional)

Nur die Anzahl der Treffer zurückgeben

Verfügbare Filter:

  • Container: projectName (Groß-/Kleinschreibung nicht beachtende Teilübereinstimmung; "inbox" zielt auf den Posteingang), projectId, folderId (enthält Unterordner), folderName (Groß-/Kleinschreibung nicht beachtende Teilübereinstimmung, enthält Unterordner)

  • Namen: taskName (Groß-/Kleinschreibung nicht beachtende Teilübereinstimmung)

  • Tags: tags (exakte Übereinstimmung, Groß-/Kleinschreibung beachtend)

  • Status: status – Aufgaben: Next, Available, Blocked, DueSoon, Overdue, Completed, Dropped; Projekte: Active, OnHold, Done, Dropped

  • Daten, zukunftsgerichtet: dueWithin, deferredUntil, plannedWithin (Bereiche), dueOn, deferOn, plannedOn (exakter Tag). Akzeptiert eine Anzahl von Tagen, "today", "tomorrow", "this week", "next week" oder ein ISO-Datum

  • Daten, rückblickend: addedWithin, addedOn, completedWithin, completedOn, droppedWithin, droppedOn (abgeschlossene/verworfene Filter erfordern includeCompleted: true)

  • Markierungen & Sonstiges: flagged, inbox, hasNote, isRepeating, reviewDue (nur Projekte)

dump_database

Den vollständigen Zustand Ihrer Datenbank abrufen. Für umfassende Analysen verwenden; für alles Gezielte query_omnifocus bevorzugen.

  • hideCompleted (optional): abgeschlossene/verworfene Aufgaben ausblenden (Standard: true)

  • hideRecurringDuplicates (optional): doppelte Instanzen wiederkehrender Aufgaben ausblenden (Standard: true)

add_omnifocus_task

Eine neue Aufgabe erstellen.

  • name

  • projectName (optional): Projekt, dem die Aufgabe hinzugefügt werden soll (Standard: Posteingang)

  • parentTaskId / parentTaskName (optional): unter einer vorhandenen Aufgabe verschachteln

  • note, dueDate, deferDate, plannedDate, flagged, estimatedMinutes, tags (alle optional)

  • repeat (optional): wiederkehrend machen – siehe Wiederkehrende Elemente

add_project

Ein neues Projekt erstellen.

  • name

  • folderName (optional): Ordner, in dem das Projekt platziert werden soll

  • sequential (optional): ob Aufgaben in Reihenfolge abgeschlossen werden müssen

  • note, dueDate, deferDate, flagged, estimatedMinutes, tags, repeat (alle optional)

edit_item

Ein vorhandenes Element (Aufgabe oder Projekt) bearbeiten. Auch der Weg, Elemente zu verschieben – setzen Sie newProjectName, um eine Aufgabe in ein Projekt zu verschieben, oder auf ""/"inbox", um sie in den Posteingang zu senden.

  • id oder name: welches Element bearbeitet werden soll (id hat Vorrang)

  • itemType: task oder project

  • Gemeinsam: newName, newNote, newDueDate, newDeferDate, newFlagged, newEstimatedMinutes (Daten im ISO-Format; leere Zeichenfolge löscht)

  • Aufgaben: newStatus (incomplete, completed, dropped, skipped – skipped nur für wiederkehrende Aufgaben), addTags, removeTags, replaceTags, newProjectName, newPlannedDate

  • Projekte: newProjectStatus (active, completed, dropped, onHold), newFolderName, newSequential, markReviewed (setzt das nächste Überprüfungsdatum basierend auf dem Überprüfungsintervall des Projekts)

  • Wiederholung: newRepeat setzt eine neue Regel (gleiche Form wie repeat beim Erstellen); newRepeat: null löscht sie

remove_item

Eine Aufgabe oder ein Projekt entfernen.

  • id oder name: welches Element entfernt werden soll

  • itemType: task oder project

batch_add_items

Mehrere Aufgaben und Projekte in einem Vorgang erstellen. Jedes Element akzeptiert dieselben Felder wie add_omnifocus_task / add_project, plus type (task oder project) und optionale Hierarchie-Helfer:

  • tempId: eine temporäre ID, auf die andere Elemente im selben Stapel verweisen können

  • parentTempId: dieses Element unter der tempId eines anderen Stapelelements verschachteln

{
  "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

Mehrere Aufgaben oder Projekte in einem Vorgang entfernen. Jedes Element nimmt id oder name sowie itemType.

list_perspectives

Verfügbare Perspektiven auflisten, sowohl integrierte als auch benutzerdefinierte (benutzerdefinierte Perspektiven sind ein OmniFocus-Pro-Feature).

  • includeBuiltIn, includeCustom (optional, Standard: true)

get_perspective_view

Die in einer benannten Perspektive sichtbaren Elemente abrufen.

  • perspectiveName: z. B. Inbox, Flagged oder ein benutzerdefinierter Perspektivenname

  • limit (optional, Standard: 100), includeMetadata (optional), fields (optional)

list_tags

Alle Tags mit ihrer Hierarchie, ihrem aktiven Status und ihren Aufgabenzählungen auflisten.

  • includeDropped (optional, Standard: false)

create_tag

Ein Tag erstellen, optional unter einem vorhandenen übergeordneten Tag verschachtelt.

  • name

  • parentTagName / parentTagID (optional; ID hat Vorrang)

Wiederkehrende Elemente

add_omnifocus_task, add_project und jedes Element in batch_add_items akzeptieren ein repeat-Objekt; edit_item akzeptiert newRepeat. Sie beschreiben den Zeitplan, und der Server kompiliert die ICS-Wiederholungsregel, sodass Sie nie eine RRULE von Hand schreiben müssen.

Feld

Beschreibung

method

start-after-completion (zählt ab dem tatsächlichen Abschluss), fixed (zählt unabhängig vom Kalender) oder due-after-completion

unit

day, week, month oder year

steps (optional)

Alle N Einheiten wiederholen (Standard 1)

weekdays (optional)

Bestimmte Tage, z. B. ["MO","WE","FR"]. Erfordert unit: "week"

{ "name": "Weekly review", "repeat": { "method": "start-after-completion", "unit": "week" } }
{ "name": "Strength work", "repeat": { "method": "fixed", "unit": "week", "weekdays": ["TU","TH"] } }

Wählen Sie method bewusst – es ist das Feld, das am häufigsten von Hand falsch gesetzt wird. Bei fixed erscheinen Vorkommen nach Zeitplan, unabhängig davon, ob das letzte erledigt wurde, sodass eine verpasste Woche einen Rückstand hinterlässt. Bei start-after-completion wird das nächste Vorkommen ab dem tatsächlichen Abschluss geplant, sodass die Gewohnheit einfach wieder aufgenommen wird.

Lesen Sie eine Regel mit query_omnifocus über die Felder repetitionRule (ICS-String) und repetitionMethod zurück oder filtern Sie mit isRepeating.

Derzeit nicht unterstützt: positionsbasierte monatliche Regeln („dritter Dienstag"), bestimmte Monatstage und Endbedingungen (COUNT/UNTIL). Setzen Sie diese direkt in OmniFocus.

Ressourcen

Ressourcen ermöglichen es MCP-Clients, OmniFocus-Daten als Kontext an eine Konversation anzuhängen, ohne Werkzeugaufrufe. In Claude Code tippen Sie @, um sie zu durchsuchen; Claude Desktop und andere ressourcenbewusste Clients können sie direkt anhängen. Alle Ressourcen geben JSON zurück.

URI

Beschreibung

omnifocus://inbox

Aktuelle Posteingangselemente

omnifocus://today

Die heutige Agenda – heute fällig, für heute geplant und überfällig

omnifocus://flagged

Alle markierten Elemente

omnifocus://stats

Datenbankstatistiken (Aufgabenzählungen, überfällig, markiert usw.)

omnifocus://project/{name}

Aufgaben in einem bestimmten Projekt

omnifocus://perspective/{name}

In einer benannten Perspektive sichtbare Elemente

Die beiden Vorlagenressourcen unterstützen das Auflisten aller verfügbaren Werte und die automatische Vervollständigung des Parameters {name}.

Serveranweisungen & Protokollierung

Anweisungen: Während des MCP-Handshakes sendet der Server Nutzungsanleitungen an den Client – Werkzeugauswahl-Empfehlungen (bevorzugen Sie query_omnifocus gegenüber dump_database), Filtertipps und den Ressourcenkatalog. Keine Konfiguration erforderlich.

Protokollierung: Der Server sendet strukturierte Protokolle über das MCP-Protokollierungsprotokoll. Clients können die Ausführlichkeit mit logging/setLevel anpassen (debug, info, warning, error, ...). Skriptausführungszeiten und Fehler werden automatisch protokolliert.

So funktioniert es

Der Server kommuniziert mit OmniFocus über osascript und verwendet dabei JXA (JavaScript for Automation) und OmniFocus' eingebettete Omni Automation (OmniJS), wo dies angebracht ist. Er basiert auf dem offiziellen MCP TypeScript SDK und spricht mit Clients über stdio.

Gemeinsamer Daemon

Das Starten von omnifocus-mcp startet einen kleinen Shim, der sich mit einem gemeinsamen Hintergrund-Daemon verbindet und einen startet, falls noch keiner läuft. Jeder Client auf dem Rechner erhält seine eigene unabhängige MCP-Sitzung, aber alle laufen in diesem einen Prozess.

Das ist wichtig, wenn mehrere Agenten OmniFocus gleichzeitig verwenden. OmniFocus ist eine single-threaded Anwendung, die über AppleEvents gesteuert wird, und der Server begrenzt, wie viele osascript-Aufrufe er gleichzeitig ausführt. Wenn jeder Client seinen eigenen Server hatte, war diese Begrenzung pro Prozess – zehn Clients bedeuteten zehn unabhängige Budgets, die auf eine App gerichtet waren, was zu AppleEvent-Zeitüberschreitungen führte. Durch die gemeinsame Nutzung eines Prozesses wird die Begrenzung global.

Der Daemon lauscht auf einem Unix-Domain-Socket in einem 0700-Verzeichnis (standardmäßig ~/.omnifocus-mcp/daemon-<version>.sock), sodass der Zugriff durch das Dateisystem erzwungen wird – kein Netzwerkport und kein Token. Er beendet sich von selbst, sobald für das Leerlauffenster kein Client verbunden war, und protokolliert in daemon.log neben dem Socket.

Der Socket-Name trägt die Paketversion, sodass ein Upgrade nie dazu führen kann, dass Sie mit dem Daemon der vorherigen Version sprechen. Direkt nach einem Upgrade können Sie kurzzeitig zwei Daemons sehen: Der alte bedient weiterhin die bereits verbundenen Clients und beendet sich, sobald der letzte von ihnen die Verbindung trennt. Clients, die noch mit dem alten Daemon verbunden sind, werden darüber in-band informiert – während ein neuerer Daemon läuft, enthält jedes Tool-Ergebnis einen einzeiligen Upgrade-Hinweis, sodass niemand daran denken muss, sich neu zu verbinden.

An der Client-Konfiguration ändert sich nichts. Wenn der Daemon nicht gestartet werden kann – eine ungewöhnliche Sandbox, ein schreibgeschütztes Home-Verzeichnis – fällt der Shim auf einen eigenständigen Server im Prozess zurück, genau wie in früheren Versionen.

Umgebungsvariablen

Variable

Standard

Zweck

OMNIFOCUS_MCP_NO_DAEMON

nicht gesetzt

Auf 1 setzen, um den Daemon vollständig zu überspringen und einen dedizierten Server pro Client auszuführen (das Verhalten vor dem Daemon). Das Erste, was Sie versuchen sollten, wenn Sie den Daemon vermuten.

OMNIFOCUS_MCP_SOCKET

~/.omnifocus-mcp/daemon-<version>.sock

Überschreibt den Socket-Pfad, z. B. um eine isolierte Instanz auszuführen.

OMNIFOCUS_MCP_IDLE_TIMEOUT_MINUTES

30

Beenden nach dieser Zeit ohne Client-Verkehr. 0 deaktiviert das Zeitlimit.

OMNIFOCUS_MCP_MAX_CONCURRENT_OSASCRIPT

4

Maximale gleichzeitige osascript-Aufrufe. Verringern Sie den Wert, wenn Sie weiterhin AppleEvent-Zeitüberschreitungen sehen.

Fahrplan

  • MCP-prompt-Unterstützung

  • Bearbeiten von Benachrichtigungen für Projekte und Aufgaben

  • Siehe die GitHub Issues für Feature-Anfragen und bekannte Probleme

Mitwirken

Beiträge sind willkommen! Bitte zögern Sie nicht, einen Pull-Request einzureichen. CI führt bei jedem PR Typprüfung, Unit-Tests und einen Build aus.

npm install
npm test            # unit tests
npm run build       # compile to dist/
npm run test:integration  # requires OmniFocus; creates and removes TEST:-prefixed items

Lizenz

MIT

Available Tools

7 tools
add_omnifocus_taskC

Add a new task to OmniFocus

ParametersJSON Schema
NameRequiredDescriptionDefault
deferDateNoThe defer date of the task in ISO format (YYYY-MM-DD or full ISO date)
dueDateNoThe due date of the task in ISO format (YYYY-MM-DD or full ISO date)
estimatedMinutesNoEstimated time to complete the task, in minutes
flaggedNoWhether the task is flagged or not
nameYesThe name of the task
noteNoAdditional notes for the task
projectNameNoThe name of the project to add the task to (will add to inbox if not specified)
tagsNoTags to assign to the task

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 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.

Purpose4/5

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

The description clearly states the action ('Add') and resource ('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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like '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

ParametersJSON Schema
NameRequiredDescriptionDefault
deferDateNoThe defer date of the project in ISO format (YYYY-MM-DD or full ISO date)
dueDateNoThe due date of the project in ISO format (YYYY-MM-DD or full ISO date)
estimatedMinutesNoEstimated time to complete the project, in minutes
flaggedNoWhether the project is flagged or not
folderNameNoThe name of the folder to add the project to (will add to root if not specified)
nameYesThe name of the project
noteNoAdditional notes for the project
sequentialNoWhether tasks in the project should be sequential (default: false)
tagsNoTags to assign to the project

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. 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.

Purpose4/5

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

The description clearly states the action ('Add 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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It 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

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

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the action ('Add 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.

Usage Guidelines3/5

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

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

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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

Given the tool's complexity (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.

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents the '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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like '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

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

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both parameters (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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. 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

ParametersJSON Schema
NameRequiredDescriptionDefault
addTagsNoTags to add to the task
idNoThe ID of the task or project to edit
itemTypeYesType of item to edit ('task' or 'project')
nameNoThe name of the task or project to edit (as fallback if ID not provided)
newDeferDateNoNew defer date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear
newDueDateNoNew due date in ISO format (YYYY-MM-DD or full ISO date); set to empty string to clear
newEstimatedMinutesNoNew estimated minutes
newFlaggedNoSet flagged status (set to false for no flag, true for flag)
newFolderNameNoNew folder to move the project to
newNameNoNew name for the item
newNoteNoNew note for the item
newProjectStatusNoNew status for projects
newSequentialNoWhether the project should be sequential
newStatusNoNew status for tasks (incomplete, completed, dropped)
removeTagsNoTags to remove from the task
replaceTagsNoTags to replace all existing tags with

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so all parameters are documented in the schema 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.

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It 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

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

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 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.

Purpose4/5

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

The description clearly states the action ('Remove') and the resource ('a task or project from OmniFocus'), 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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like '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.

  1. 7 tool updatesv1.0.0
    • First observedadd_omnifocus_task
    • First observedadd_project
    • First observedbatch_add_items
    • First observedbatch_remove_items
    • First observeddump_database
    • First observededit_item
    • First observedremove_item

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that enables automation and management of OmniFocus tasks, projects, and tags using natural language and programmable interfaces from VS Code, command line, or any MCP-compatible client.
    12
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that enables AI assistants to interact with OmniFocus on macOS via JXA, supporting task, project, folder, tag, perspective, and search operations.
    31
    20 npm
    MIT