mcpField
M
MCP Cron

MCP Cron

本地服务
github.com/jolks生产力2621 周前更新

关于 MCP Cron

MCP Cron 是一个 MCP 服务,用于按 cron 表达式调度 shell 命令、AI 提示词和 HTTP/webhook 请求。它面向需要自动化定时任务的用户,并支持任务持久化与多实例共享数据库。

主要功能

  1. 01基于 cron 表达式的定时任务调度
  2. 02支持 shell 命令、AI 和 HTTP 任务类型
  3. 03任务与执行结果通过 SQLite 持久化
  4. 04多实例共享数据库且避免重复执行
  5. 05AI 任务可访问其他 MCP 服务
  6. 06支持 HTTP 与 stdio 两种传输方式

适用场景

  1. 01定时运行脚本并记录输出结果
  2. 02按计划调用 webhook 或 HTTP 接口
  3. 03定期让 AI 生成报告或总结数据

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cron": {
"command": "npx",
"args": [
"-y",
"mcp-cron"
]
}
}
}
启动命令npx -y mcp-cron

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-cron

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP Cron

Model Context Protocol (MCP) 服务,用于通过标准化 API 调度和管理任务。该服务提供任务调度能力,支持 shell 命令和 AI 驱动的任务,均可通过 MCP 协议访问。

功能特性

  • 使用 cron 表达式调度 shell 命令或向 AI 发送提示词任务
  • AI 可以访问 MCP 服务
  • 通过 MCP 协议管理任务
  • 任务执行并捕获命令输出
  • 任务在重启后持久化(SQLite)
  • 多实例安全 — 多个实例可共享同一数据库而不会重复执行
  • 通过不同的 --db-path 支持多个隔离实例

安装

npm(推荐)
npx -y mcp-cron
Claude Code
claude mcp add mcp-cron -- npx -y mcp-cron
Cursor / Claude Desktop
{
  "mcpServers": {
    "mcp-cron": {
      "command": "npx",
      "args": ["-y", "mcp-cron", "--transport", "stdio"]
    }
  }
}
推荐配置

更完整的设置,包含 AI 提供商、模型选择和防止休眠:

{
  "mcpServers": {
    "mcp-cron": {
      "command": "npx",
      "args": [
        "-y", "mcp-cron",
        "--transport", "stdio",
        "--prevent-sleep",
        "--ai-provider", "anthropic",
        "--ai-model", "claude-sonnet-4-5-20250929"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "your-api-key"
      }
    }
  }
}
使用 LiteLLM

通过 LiteLLM 代理路由 AI 任务:

{
  "mcpServers": {
    "mcp-cron": {
      "command": "npx",
      "args": [
        "-y", "mcp-cron",
        "--transport", "stdio",
        "--prevent-sleep",
        "--ai-base-url", "https://litellm.yourcompany.com",
        "--ai-model", "claude-sonnet-4-5-20250929"
      ],
      "env": {
        "MCP_CRON_AI_API_KEY": "sk-your-litellm-key"
      }
    }
  }
}

--ai-model 的值应与你的 LiteLLM 代理配置中的模型名称一致。LiteLLM 暴露的是与 OpenAI 兼容的 API,因此可以省略 --ai-provider(默认为 openai)。当设置了自定义 base URL 时,mcp-cron 会自动使用 Chat Completions API 而非 Responses API。Responses API 仅用于直连 OpenAI(api.openai.com)和 Azure OpenAI(*.openai.azure.com)端点。

所有可用选项请参见命令行参数和环境变量。

从源码构建
前置条件
  • Go 1.24.0 或更高版本
# Clone the repository
git clone https://github.com/jolks/mcp-cron.git
cd mcp-cron

# Build the application as mcp-cron binary
go build -o mcp-cron cmd/mcp-cron/main.go

使用方法

该服务支持两种传输模式:

  • HTTP (Streamable HTTP):面向浏览器和网络客户端的默认基于 HTTP 的传输
  • stdio:标准输入/输出传输,用于直接管道和进程间通信
客户端配置文件位置
Cursor~/.cursor/mcp.json
Claude Desktop (Mac)~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop (Windows)%APPDATA%\Claude\claude_desktop_config.json
HTTP (Streamable HTTP)
# Start the server with Streamable HTTP transport (default mode)
# Default to localhost:8080
./mcp-cron

# Start with custom address and port
./mcp-cron --address 127.0.0.1 --port 9090

配置文件示例

{
  "mcpServers": {
    "mcp-cron": {
      "url": "http://localhost:8080"
    }
  }
}
stdio

stdio 传输特别适用于:

  • 与其他进程之间直接管道传输
  • 与命令行工具集成
  • 在无 HTTP 的环境中测试
  • Docker 容器集成

启动 Cursor IDE 和 Claude Desktop 后,它将自动启动该服务

配置文件示例

{
  "mcpServers": {
    "mcp-cron": {
      "command": "<path to where mcp-cron binary is located>/mcp-cron",
      "args": ["--transport", "stdio"]
    }
  }
}
命令行参数

支持以下命令行参数:

参数描述默认值
--address服务绑定的地址localhost
--port服务绑定的端口8080
--transport传输模式:http 或 stdiohttp
--log-level日志级别:debug、info、warn、error、fatalinfo
--log-file日志文件路径stdout
--version显示版本信息并退出false
--ai-providerAI 提供商:openai 或 anthropicopenai
--ai-base-url用于 OpenAI 兼容端点的自定义 base URL(例如 Ollama、vLLM、Groq、LiteLLM)未设置
--ai-model用于 AI 任务的 AI 模型gpt-4o
--ai-max-iterations启用工具的 AI 任务的最大迭代次数20
--mcp-config-pathMCP 配置文件路径~/.cursor/mcp.json
--db-path用于结果历史的 SQLite 数据库路径~/.mcp-cron/results.db
--prevent-sleep在 mcp-cron 运行期间防止系统休眠(macOS 和 Windows)false
--poll-interval检查到期任务的频率1s
环境变量

支持以下环境变量:

环境变量描述默认值
MCP_CRON_SERVER_ADDRESS服务绑定的地址localhost
MCP_CRON_SERVER_PORT服务绑定的端口8080
MCP_CRON_SERVER_TRANSPORT传输模式:http 或 stdiohttp
MCP_CRON_SERVER_NAME已弃用 — 被忽略;服务名称固定,以确保自引用检测正常工作-
MCP_CRON_SERVER_VERSION已弃用 — 被忽略;版本在构建时通过 ldflags 设置-
MCP_CRON_SCHEDULER_DEFAULT_TIMEOUT任务执行的默认超时时间10m
MCP_CRON_LOGGING_LEVEL日志级别:debug、info、warn、error、fatalinfo
MCP_CRON_LOGGING_FILE日志文件路径stdout
MCP_CRON_AI_PROVIDERAI 提供商:openai 或 anthropicopenai
MCP_CRON_AI_BASE_URL用于 OpenAI 兼容端点的自定义 base URL(例如 Ollama、vLLM、Groq、LiteLLM)未设置
MCP_CRON_AI_API_KEY通用备用 API 密钥(在未设置提供商专属密钥时使用)未设置
OPENAI_API_KEY用于 AI 任务的 OpenAI API 密钥未设置
ANTHROPIC_API_KEY用于 AI 任务的 Anthropic API 密钥未设置
MCP_CRON_ENABLE_OPENAI_TESTS启用 OpenAI 集成测试false
MCP_CRON_AI_MODEL用于 AI 任务的大模型gpt-4o
MCP_CRON_AI_MAX_TOOL_ITERATIONS启用工具的任务的最大迭代次数20
MCP_CRON_MCP_CONFIG_FILE_PATHMCP 配置文件的路径~/.cursor/mcp.json
MCP_CRON_STORE_DB_PATH用于结果历史的 SQLite 数据库路径~/.mcp-cron/results.db
MCP_CRON_PREVENT_SLEEP在 mcp-cron 运行时阻止系统休眠(macOS 和 Windows)false
MCP_CRON_POLL_INTERVAL检查到期任务的频率(Go duration 格式)1s
阻止休眠

在笔记本电脑上,系统可能会进入休眠状态,导致计划任务无法按时运行。使用 --prevent-sleep 标志可在 mcp-cron 运行时保持系统唤醒:

mcp-cron --prevent-sleep --transport stdio

或通过环境变量:

MCP_CRON_PREVENT_SLEEP=true mcp-cron --transport stdio
平台机制备注
macOScaffeinate阻止空闲休眠;退出时自动清理
WindowsSetThreadExecutionState阻止空闲休眠;退出时自动清理
Linux不支持Linux 服务器通常不会自动休眠

注意: 这仅阻止空闲休眠。它不会阻止因合上笔记本电脑盖子或按下电源按钮而导致的休眠。

日志

使用默认 HTTP 传输运行时,日志会输出到控制台。

使用 stdio 传输运行时,日志会重定向到 mcp-cron.log 日志文件,以防止干扰 JSON-RPC 协议:

  • 日志文件位置:与 mcp-cron 二进制文件相同的位置。
  • 任务输出、执行详情和服务诊断信息会写入此文件。
  • stdout/stderr 流保持干净,仅用于协议消息。
可用的 MCP 工具

该服务通过 MCP 协议公开了多个工具:

  1. list_tasks - 列出所有任务(定时任务和按需任务)
  2. get_task - 根据 ID 获取特定任务
  3. add_task - 添加新的 shell 命令任务(提供 schedule 表示定时任务,省略则为按需任务)
  4. add_ai_task - 添加带有提示词的新 AI(大模型)任务(提供 schedule 表示定时任务,省略则为按需任务)
  5. add_http_task - 添加向 url 发起 HTTP 请求的新 HTTP(webhook)任务(提供 schedule 表示定时任务,省略则为按需任务)
  6. update_task - 更新现有任务
  7. remove_task - 根据 ID 移除任务
  8. run_task - 根据 ID 执行任务,等待完成并返回结果(适用于按需任务或对定时任务的临时运行)
  9. enable_task - 启用任务,使其按计划运行或可通过 run_task 触发
  10. disable_task - 禁用任务,使其停止运行且无法被触发
  11. get_task_result - 获取任务的执行结果(默认最新,或通过 limit 获取近期历史记录)
  12. query_task_result - 对数据库执行只读 SQL 查询(仅限 SELECT,最多 1000 行)
任务格式

任务具有以下结构:

{
  "id": "task_a3f7b2c9e1d04f68",
  "name": "Example Task",
  "schedule": "0 */5 * * * *",
  "command": "echo 'Task executed!'",
  "prompt": "Analyze yesterday's sales data and provide a summary",
  "type": "shell_command",
  "description": "An example task that runs every 5 minutes",
  "enabled": true,
  "lastRun": "2025-01-01T12:00:00Z",
  "nextRun": "2025-01-01T12:05:00Z",
  "status": "completed",
  "createdAt": "2025-01-01T00:00:00Z",
  "updatedAt": "2025-01-01T12:00:00Z"
}

type 字段可以是 shell_command(默认)、AI 或 http。适用的字段取决于类型:

  • shell_command — command:要执行的 shell 命令。
  • AI — prompt:AI 应该做什么。
  • http — url(必需)、method(默认为 POST)、headers(字符串→字符串的 JSON 对象)和 body(请求体字符串)。通过 add_http_task 创建。

对于 HTTP 任务,结果行复用现有列:

结果字段HTTP 任务的含义
exit_codeHTTP 状态码(如果未收到响应则为 0)
output响应体预览(上限 8 KiB,后缀为 ... (truncated))
error传输错误、构建请求错误,或 non-2xx status: N <reason>
duration往返延迟
url请求 URL

这使 query_task_result 查询保持统一——例如 SELECT COUNT(*) FROM results WHERE task_id='x' AND exit_code >= 200 AND exit_code < 300 统计成功的 HTTP 调用。

定时任务与按需任务:

  • 定时:提供 schedule(cron 表达式)——任务按该计划自动运行。
  • 按需:省略 schedule——任务保持空闲,直到通过 run_task 触发。

run_task 也可用于定时任务,以在其正常计划之外临时执行。执行后,定时任务恢复正常计划;按需任务返回空闲状态。

任务状态

任务可以具有以下状态值:

  • pending - 任务尚未运行
  • running - 任务当前正在运行
  • completed - 任务已成功完成
  • failed - 任务在执行期间失败
  • disabled - 任务已禁用,不会按计划运行
Cron 表达式格式

定时任务需要 cron 表达式,按需任务则省略。调度器使用 github.com/robfig/cron/v3 库进行解析。格式包含秒:

┌───────────── second (0 - 59) (Optional)
│ ┌───────────── minute (0 - 59)
│ │ ┌───────────── hour (0 - 23)
│ │ │ ┌───────────── day of the month (1 - 31)
│ │ │ │ ┌───────────── month (1 - 12)
│ │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday)
│ │ │ │ │ │
│ │ │ │ │ │
* * * * * *

示例:

  • 0 */5 * * * * - 每 5 分钟(在第 0 秒)
  • 0 0 * * * * - 每小时
  • 0 0 0 * * * - 每天午夜
  • 0 0 12 * * MON-FRI - 每个工作日的正午

开发

构建
go build -o mcp-cron cmd/mcp-cron/main.go
测试

参见 docs/testing.md 获取完整测试指南,包括集成测试和 AI 任务测试。

致谢

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。