使用说明
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)
- []手柄位置
