MCP Cron
模型上下文协议(MCP)服务器,用于通过标准化的API调度和管理任务。服务器提供任务调度功能,支持shell命令和AI驱动的任务,所有这些都可以通过MCP协议访问。
特性
- 使用cron表达式将shell命令或提示符安排给AI任务
- AI可以访问MCP服务器
- 管理任务 通过MCP协议
- 通过命令输出捕获执行任务
- 跨重启的任务持久性(SQLite)
- 多实例安全——多个实例可以共享同一个数据库,而不会重复执行
- 支持多个具有不同类型的隔离实例
--db-path
安装
npm(推荐)
npx -y mcp-cron克劳德代码
claude mcp add mcp-cron -- npx -y mcp-cron光标/克劳德桌面
{
"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
通过以下方式路由AI任务 轻量级LLM 代理:
{
"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).当设置自定义基本URL时,mcp-cron会自动使用Chat Completions API而不是Responses API。响应API仅用于直接OpenAI(api.openai.com)Azure OpenAI(*.openai.azure.com)端点。
看 命令行参数 和 环境变量 所有可用选项。
从源头构建
先决条件
- 达到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(流式HTTP):浏览器和网络客户端的默认基于HTTP的传输
- 标准:直接管道和过程间通信的标准输入/输出传输
| 客户端 | 配置文件位置 |
|---|---|
| 光标 | ~/.cursor/mcp.json |
| 克劳德台式机(Mac) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| 克劳德桌面(Windows) | %APPDATA%\Claude\claude_desktop_config.json |
HTTP(流式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传输对于以下情况特别有用:
- 与其他工艺直接管道连接
- 与CLI工具集成
- 在没有HTTP的环境中进行测试
- Docker容器集成
启动Cursor IDE和Claude Desktop后,它将 自动地 启动服务器
配置文件示例
{
"mcpServers": {
"mcp-cron": {
"command": "
/mcp-cron",
"args": ["--transport", "stdio"]
}
}
}命令行参数
支持以下命令行参数:
| 参数 | 描述 | 默认值 |
|---|---|---|
--address | 将服务器绑定到的地址 | localhost |
--port | 将服务器绑定到的端口 | 8080 |
--transport | 运输方式: http 或 stdio | http |
--log-level | 日志记录级别: debug, info, warn, error, fatal | info |
--log-file | 日志文件路径 | stdout |
--version | 显示版本信息并退出 | false |
--ai-provider | 人工智能提供商: openai 或 anthropic | openai |
--ai-base-url | OpenAI兼容端点的自定义基本URL(例如Ollama、vLLM、Groq、LiteLLM) | 未设置 |
--ai-model | 用于AI任务的AI模型 | gpt-4o |
--ai-max-iterations | 支持工具的AI任务的最大迭代次数 | 20 |
--mcp-config-path | MCP配置文件的路径 | ~/.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 或 stdio | http |
MCP_CRON_SERVER_NAME | 已弃用 --忽视;服务器名称是固定的,以确保自引用检测正常工作 | - |
MCP_CRON_SERVER_VERSION | 已弃用 --忽视;版本在构建时通过ldflags设置 | - |
MCP_CRON_SCHEDULER_DEFAULT_TIMEOUT | 任务执行的默认超时 | 10m |
MCP_CRON_LOGGING_LEVEL | 日志记录级别: debug, info, warn, error, fatal | info |
MCP_CRON_LOGGING_FILE | 日志文件路径 | stdout |
MCP_CRON_AI_PROVIDER | 人工智能提供商: openai 或 anthropic | openai |
MCP_CRON_AI_BASE_URL | OpenAI兼容端点的自定义基本URL(例如Ollama、vLLM、Groq、LiteLLM) | 未设置 |
MCP_CRON_AI_API_KEY | 通用回退API密钥(未设置特定于提供程序的密钥时使用) | 未设置 |
OPENAI_API_KEY | 用于AI任务的OpenAI API密钥 | 未设置 |
ANTHROPIC_API_KEY | 人工智能任务的Anthropic API键 | 未设置 |
MCP_CRON_ENABLE_OPENAI_TESTS | 启用OpenAI集成测试 | false |
MCP_CRON_AI_MODEL | 用于AI任务的LLM模型 | gpt-4o |
MCP_CRON_AI_MAX_TOOL_ITERATIONS | 启用工具的任务的最大迭代次数 | 20 |
MCP_CRON_MCP_CONFIG_FILE_PATH | MCP配置文件的路径 | ~/.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工期格式) | 1s |
睡眠预防
在笔记本电脑上,系统可能会进入睡眠状态,并阻止计划任务按时运行。使用 --prevent-sleep 用于在mcp-cron运行时保持系统唤醒的标志:
mcp-cron --prevent-sleep --transport stdio或者通过环境变量:
MCP_CRON_PREVENT_SLEEP=true mcp-cron --transport stdio| 平台 | 机制 | 注释 |
|---|---|---|
| macOS | caffeinate | 防止闲置睡眠;出口时自动清理 |
| 窗户 | SetThreadExecutionState | 防止闲置睡眠;出口时自动清理 |
| Linux | 不支持 | Linux服务器通常不会自动休眠 |
注: 这只能防止空闲睡眠。它不会阻止睡眠关闭笔记本电脑盖或按下电源按钮。
日志记录
当使用默认HTTP传输运行时,日志会输出到控制台。
当使用stdio传输运行时,日志会被重定向到 mcp-cron.log 日志文件,以防止对JSON-RPC协议的干扰:
- 日志文件位置:与相同的位置
mcp-cron二元的。 - 任务输出、执行细节和服务器诊断将写入此文件。
- stdout/stderr流仅对协议消息保持干净。
可用的MCP工具
服务器通过MCP协议公开了几个工具:
list_tasks-列出所有任务(计划任务和按需任务)get_task-按ID获取特定任务add_task-添加新的shell命令任务(提供schedule用于重复,或按需省略)add_ai_task-添加带有提示的新AI(LLM)任务(提供schedule用于重复,或按需省略)update_task-更新现有任务remove_task-按ID删除任务run_task-按ID执行任务,等待完成,并返回结果(对于按需任务或计划任务的临时运行)enable_task-启用任务,使其按计划运行或可通过以下方式触发run_taskdisable_task-禁用任务,使其停止运行且无法触发get_task_result-获取任务的执行结果(默认情况下为最新结果,或具有以下参数的最近历史记录limit)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"
}对于shell命令任务,请使用 command 字段指定要执行的命令。 对于AI任务,请使用 prompt 字段指定AI应该做什么。 这 type 字段可以是 shell_command (默认)或 AI.
计划任务与按需任务:
- 预定:提供
schedule(cron表达式)--任务按照该计划自动运行。 - 手动扫描:省略
schedule--任务处于空闲状态,直到通过触发run_task.
run_task 还处理计划任务,以便在正常时间表之外临时执行。执行后,计划任务恢复正常进度;按需任务返回空闲状态。
任务状态
任务可以具有以下状态值:
pending-任务尚未运行running-任务当前正在运行completed-任务已成功完成failed-任务在执行过程中失败disabled-任务已禁用,无法按计划运行
Cron表达式格式
Cron表达式对于计划任务是必需的,对于按需任务则省略。调度器使用 用于解析的库。格式包括秒:
┌───────────── 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任务测试。
致谢
- modelcontextprotocol/go-sdk -模型上下文协议的官方Go SDK
- robfig/cron -Go的Cron表达式解析
