OmniFocus任务管理服务

通过OmniFocus自动化API实现AI助手读取和管理OmniFocus项目和任务的MCP服务器。

  • by conallob
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 conallob/mcp-omnifocus

使用说明

mcp全聚焦

用于与OmniFocus Pro交互的MCP(模型上下文协议)服务器,使人工智能助手能够通过OmniFocus自动化API读取和管理您的OmniFocus项目和任务。

特性

  • 读取操作

    • 列出所有项目及其状态和元数据
    • 列出任务(所有任务或按项目筛选)
    • 列出所有标签
  • 写入操作

    • 创建新任务(收件箱或特定项目中)
    • 创建新项目
    • 更新现有任务(名称、注释、状态、截止日期等)
    • 完成任务
    • 为任务和项目添加标签
  • 演出

    • 内置缓存层,加速重复查询
    • 可配置缓存TTL(默认值:30秒)
    • 写入操作时自动缓存失效

需求

  • macOS(OmniFocus仅适用于macOS/iOS)
  • OmniFocus Pro已安装并可访问
  • 转到1.21或更高版本
  • 自动化的系统权限(macOS将在首次使用时提示)

安装

选项1:下载预构建二进制文件(推荐)

  1. 从以下网址下载适用于您平台的最新版本 发布页面
  2. 提取存档:
    tar -xzf mcp-omnifocus_*_darwin_*.tar.gz
    
  3. 将二进制文件移动到所需位置:
    mkdir -p ~/mcp-servers/omnifocus
    mv mcp-omnifocus ~/mcp-servers/omnifocus/
    mv scripts ~/mcp-servers/omnifocus/
    

选项2:从源代码构建

  1. 克隆此存储库:

    git clone https://github.com/conall/mcp-omnifocus.git
    cd mcp-omnifocus
    
  2. 安装依赖项:

    make deps
    
  3. 构建服务器:

    make build
    

    这将在以下位置创建二进制文件 bin/mcp-omnifocus

配置

要将此MCP服务器与Claude Desktop或其他MCP客户端一起使用,请将其添加到配置文件中:

Claude 桌面版

编辑您的Claude Desktop配置文件(通常在 ~/Library/Application Support/Claude/claude_desktop_config.json):

如果您下载了预构建的二进制文件:

{
  "mcpServers": {
    "omnifocus": {
      "command": "/Users/YOUR_USERNAME/mcp-servers/omnifocus/mcp-omnifocus",
      "args": ["-scripts", "/Users/YOUR_USERNAME/mcp-servers/omnifocus/scripts"]
    }
  }
}

如果你从源代码构建:

{
  "mcpServers": {
    "omnifocus": {
      "command": "/absolute/path/to/mcp-omnifocus/bin/mcp-omnifocus",
      "args": ["-scripts", "/absolute/path/to/mcp-omnifocus/scripts"]
    }
  }
}

将路径替换为您安装或构建二进制文件和脚本的实际位置。

注: 这 -scripts 参数是可选的。如果没有提供,服务器将尝试自动检测脚本目录。但是,为了可靠性,建议明确指定路径。

配置选项

服务器支持以下命令行标志:

  • -scripts <path>:JXA脚本目录的路径(可选,如果未指定,则自动检测)
  • -cache-ttl <seconds>:缓存TTL(秒)(默认值:30,设置为0以禁用缓存)

自定义缓存TTL示例:

{
  "mcpServers": {
    "omnifocus": {
      "command": "/path/to/mcp-omnifocus",
      "args": ["-scripts", "/path/to/scripts", "-cache-ttl", "60"]
    }
  }
}

您还可以通过环境变量设置缓存TTL:

{
  "mcpServers": {
    "omnifocus": {
      "command": "/path/to/mcp-omnifocus",
      "args": ["-scripts", "/path/to/scripts"],
      "env": {
        "MCP_OMNIFOCUS_CACHE_TTL": "60"
      }
    }
  }
}

可用工具

阅读工具

  • list_项目:列出OmniFocus中的所有项目

    • 可选的 filter 项目状态参数(活动、搁置、已完成、已删除)
  • list_tasks:在OmniFocus中列出任务

    • 可选的 project_id 按项目筛选任务的参数
  • list_tags:列出OmniFocus中的所有标签

写入工具

  • 创建任务:创建新任务

    • 必修的: name
    • 可选: note, project_id, due_date, flagged, estimated_minutes, tags
  • 创建项目:创建新项目

    • 必修的: name
    • 可选: note, status, tags
  • update_task:更新现有任务

    • 必修的: id
    • 可选: name, note, completed, flagged, due_date, estimated_minutes
  • 完成任务:将任务标记为已完成

    • 必修的: id

建筑学

该服务器内置于Go中,并使用:

  • JXA(JavaScript自动化) 与OmniFocus的自动化API交互
  • mcp走 用于实现MCP协议的SDK
  • stdio传输 用于与MCP客户端通信
  • 内存缓存 使用TTL来提高性能并减少OmniFocus API调用

缓存行为

缓存层通过存储读取操作的结果来提高性能:

  • 缓存操作: list_projects, list_tasks, list_tags
  • 缓存密钥:不同查询类型的单独键(例如,所有任务与特定于项目的任务)
  • 默认TTL:30秒(可配置)
  • 自动失效:写入操作会自动使受影响的缓存无效
    • 创建任务会使任务缓存(以及添加到项目中的项目缓存)无效
    • 创建项目会使项目缓存无效
    • 更新/完成任务会使任务和项目缓存无效
  • 内存管理:过期的条目每分钟自动清理一次
  • 禁用缓存:将缓存TTL设置为0以完全禁用缓存

项目结构

.
├── cmd/mcp-omnifocus/     # Main server executable
├── internal/omnifocus/     # OmniFocus client library
│   ├── client.go          # Go wrapper for JXA scripts
│   └── types.go           # Data structures
├── scripts/               # JXA scripts for OmniFocus automation
│   ├── list_projects.jxa
│   ├── list_tasks.jxa
│   ├── create_task.jxa
│   └── ...
└── Makefile              # Build configuration

发展

建筑物

make build

运行测试

make run

清理构建工件

make clean

macOS权限

首次使用时,macOS会提示您授予以下自动化权限:

  • osascript (运行JXA脚本)
  • 访问OmniFocus

这些权限是服务器运行所必需的。

许可证

有关详细信息,请参阅LICENSE文件。