OmniFocus任务管理服务器

通过AppleScript自动化将OmniFocus任务管理暴露给Claude Code、OpenCode和其他MCP兼容的AI助手的MCP服务器。

  • by bruvik
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 bruvik/omnifocus-mcp

使用说明

OmniFocus MCP服务器

MCP(模型上下文协议)服务器,通过AppleScript自动化将OmniFocus任务管理暴露给Claude Code、OpenCode和其他MCP兼容的AI助手。

先决条件

  • 安装了OmniFocus的macOS
  • Python 3.11+
  • OmniFocus必须运行才能使任务工作

设置

# Create virtual environment
python -m venv .venv
source .venv/bin/activate

# Install dependencies
pip install -r requirements.txt

使用Claude Desktop

在以下位置编辑Claude Desktop的配置文件 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "omnifocus": {
      "command": "/path/to/omnifocus-mcp/.venv/bin/python",
      "args": ["/path/to/omnifocus-mcp/mcp_server.py"]
    }
  }
}

替换 /path/to/omnifocus-mcp 以及此存储库的实际路径。

编辑配置后重新启动Claude Desktop。

使用OpenCode

查看详情 OpenCode设置指南 获取完整说明。

快速设置:

在以下位置编辑OpenCode的配置文件 ~/.config/opencode/opencode.json:

{
  "mcp": {
    "omnifocus": {
      "type": "local",
      "command": [
        "/path/to/omnifocus-mcp/.venv/bin/python",
        "/path/to/omnifocus-mcp/mcp_server.py"
      ]
    }
  }
}

替换 /path/to/omnifocus-mcp 以及此存储库的绝对路径。使用 opencode mcp list 以验证安装。

使用Claude代码

选项1:通过CLI添加(推荐)

# Use the venv's Python to ensure dependencies are available
claude mcp add omnifocus -- /path/to/omnifocus-mcp/.venv/bin/python /path/to/omnifocus-mcp/mcp_server.py

替换 /path/to/omnifocus-mcp 以及此存储库的实际路径。

选项2:添加到项目配置

创建或编辑 .mcp.json 在项目根目录中:

{
  "mcpServers": {
    "omnifocus": {
      "command": "/path/to/omnifocus-mcp/.venv/bin/python",
      "args": ["/path/to/omnifocus-mcp/mcp_server.py"]
    }
  }
}

选项3:添加到用户配置

编辑 ~/.claude.json:

{
  "mcpServers": {
    "omnifocus": {
      "command": "/path/to/omnifocus-mcp/.venv/bin/python",
      "args": ["/path/to/omnifocus-mcp/mcp_server.py"]
    }
  }
}

验证安装(克劳德代码)

# List configured MCP servers
claude mcp list

# Test the OmniFocus server
claude mcp get omnifocus

可用的MCP工具

连接后,Claude Code可以使用这些工具:

工具 说明
list_tasks 列出带有可选过滤器的任务(due_soon、标记、收件箱、全部、已完成、推迟)
summarize_tasks 获取按项目分组的任务计数
add_task 创建一个具有完整选项(项目、到期、推迟、标记、注释、规则)的新任务
get_projects 列出所有OmniFocus项目的状态(活动、已完成、待定、已删除)
complete_task 按ID将任务标记为已完成
rename_task 重命名任务
move_task 将任务移动到其他项目或收件箱
delete_task 按ID永久删除任务
flag_task 标记或取消标记任务
defer_task 设置或清除任务的延迟日期
set_due_date 设置或清除任务的截止日期
set_repetition 设置或清除任务的重复规则(RRULE格式)
drop_project 放弃(放弃)一个项目
pause_project 搁置一个项目
resume_project 重新激活已暂停的项目
list_tags 列出所有具有层次结构信息的标签
get_task_tags 获取分配给任务的标签
add_task_tags 向任务添加标签(保持现有)
remove_task_tags 从任务中删除标记
set_task_tags 替换任务上的所有标签
get_task_note 获取任务的注释/描述
set_task_note 设置任务注释(替换现有注释)
append_task_note 在任务注释中添加文本
clear_task_note 清除/删除任务注释
list_folders 列出所有具有层次结构信息的文件夹
create_folder 创建新文件夹(可选嵌套在父文件夹中)
create_project 创建新项目(可选地在文件夹中)

Claude代码提示示例

  • “在OmniFocus中显示我标记的任务”
  • “将任务‘审阅PR#123’添加到我的工作项目中”
  • “OmniFocus中有什么过期了?”
  • “使用ID xyz123完成任务”
  • “按项目给我一个任务摘要”
  • “在OmniFocus中列出我的所有文件夹”
  • “在Work文件夹中创建一个名为'Q1 Planning'的新项目”
  • 创建一个名为“个人项目”的文件夹

HTTP服务器(备选)

如果您需要REST API而不是MCP,请使用FastAPI服务器:

# Development mode with auto-reload
uvicorn server:app --reload

# Production mode
uvicorn server:app --host 0.0.0.0 --port 8000

HTTP端点

  • GET /health -健康检查
  • POST /mcp/list_tasks -主体: {"filter": "due_soon"|"flagged"|"inbox"}
  • POST /mcp/summarize_tasks -按项目获取任务摘要
  • POST /mcp/add_task -主体: {"title": "...", "project": "..."}
  • POST /mcp/get_projects -列出所有项目
  • POST /mcp/complete_task -主体: {"task_id": "..."}

直接测试AppleScripts

# List available tasks (default)
osascript scripts/list_tasks_omni.applescript

# List with filter
osascript scripts/list_tasks_omni.applescript flagged
osascript scripts/list_tasks_omni.applescript due_soon
osascript scripts/list_tasks_omni.applescript all

# Add task (JSON format)
osascript scripts/add_task_omni.applescript '{"title": "Task name", "project": "Project name"}'
osascript scripts/add_task_omni.applescript '{"title": "Weekly review", "rrule": "FREQ=WEEKLY", "flagged": true}'

# Set repetition
osascript scripts/set_repetition.applescript "task-id" "FREQ=DAILY" "due"
osascript scripts/set_repetition.applescript "task-id" "none"  # Clear repetition

# Update task
osascript scripts/update_task.applescript "task-id" flag
osascript scripts/update_task.applescript "task-id" defer "2025-01-15T09:00:00"

# Get projects
osascript scripts/get_projects.applescript

# Complete task
osascript scripts/complete_task.applescript "task-id-here"

建筑

┌──────────────┐     stdio/JSON-RPC     ┌─────────────────┐
│ Claude Code  │ ◄────────────────────► │  mcp_server.py  │
└──────────────┘                        └────────┬────────┘
                                                 │ osascript
                                                 ▼
                                        ┌─────────────────┐
                                        │   OmniFocus     │
                                        │   (AppleScript) │
                                        └─────────────────┘
  • MCP服务器 (mcp_server.py):使用stdio传输的基于FastMCP的服务器
  • HTTP服务器 (server.py):通过FastAPI的替代REST API
  • AppleScripts (scripts/):直接OmniFocus自动化
  • 公用事业 (utils/):用于AppleScript执行的Python包装器

许可证

GPL v3-请参阅 许可证 文件以获取详细信息。

待办事项

  • [x] 处理重复事件(RRULE格式,带有set_repetition和add_task RRULE参数)
  • [x] 重命名任务(Rename_task工具)
  • [x] 处理笔记(add_task支持笔记参数)
  • [x] 创建任务应该能够在特定项目中创建任务(已生效)
  • [x] 在项目层次结构中移动任务(Move_task工具)
  • [x] 操作任务上的标签(list_tags、get/add/remove/set_task_tags)
  • [x] 读取、写入和操作现有任务注释的逻辑(get/set/append/clear_task_note)
  • [x] 文件夹和项目层次结构(list_folders、create_Folder、create_project)
  • []手柄位置