list_tasksLABSCO SUMMARY
Official scripting API only — no database reading, and it says where that limits it.
Sticking to OmniAutomation means it will not break when OmniFocus changes its storage, at the cost of some rough edges the README names outright: a created task returns a temporary id, tag assignment is limited to tags that already exist, and moving a project between folders has constraints. Project ids are alphanumeric, so look them up with list_projects rather than typing a number.
What it is
An OmniFocus server built on OmniAutomation, the official scripting interface, rather than by reading the database. It filters tasks and projects, creates and updates them, and caches read results so a follow-up question does not re-query the app.
What you get
- list_tasks — filter by completion, flag, project, tags, dates and search terms, including inbox and availability, with pagination metadata
- get_task_count — the same filters returning only a count, when you do not need the tasks themselves
- create_task — a task in the inbox with note, flag and due or defer dates; tags must already exist
- update_task — change name, note, flag and dates, or move a task to another project or back to the inbox
- complete_task and delete_task — close a task out or remove it
- list_projects — filter by status (active, on hold, dropped, completed), flag and folder
- create_project — a project with note, dates, flags and a parent folder, creating the folder if it does not exist
- update_project — change name, note, status, dates and flags
- complete_project and delete_project — mark a project done or remove it
- Task reads are cached briefly and project reads for longer, so repeated queries return quickly
Requirements
macOS with OmniFocus 3 or later, and Node.js 18+. Clone the repository, install and build, then point the client at the built entry file. On first use macOS asks for permission to control OmniFocus. LOG_LEVEL controls logging verbosity.
Setup effort
Build from source — git clone https://github.com/duquesnay/omnifocus-mcp.git
USE CASES
Finding out what is actually due
Filter incomplete tasks by due date and flag, and read them back with pagination.
Capturing something mid-conversation
Create the task in the inbox with a note and a due date, then file it into a project.
Starting a new project properly
Create it under the right folder, with dates and flags set from the outset.
Doing a weekly review
List active and on-hold projects, then count the open tasks under each.
Clearing out what is done
Mark the finished tasks complete and close out the project they belonged to.
11 tools
Listed in project docs. Your client may show a different list.
get_task_countcreate_taskupdate_taskcomplete_taskdelete_tasklist_projectscreate_projectupdate_projectcomplete_projectdelete_projectBEFORE YOU INSTALL
What to know first
Tools you get
11 tools named in the project's documentation.
Requires
Node.js 18+
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
# Clone the repository
git clone https://github.com/duquesnay/omnifocus-mcp.git
cd omnifocus-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Run the server
npm startMCP Clients
Claude Desktop
{
"mcpServers": {
"omnifocus": {
"command": "node",
"args": [
"<YOUR_PATH_TO_OMNIFOCUS_MCP>/dist/index.js"
],
"env": {
"LOG_LEVEL": "info"
}
}
}
}