使用说明
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任务 文学硕士 代理:
{
"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": "<path to where mcp-cron binary is located>/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用于重复,或按需省略)add_http_task-添加一个新的HTTP(webhook)任务,向url(提供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"
}
这 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_code |
HTTP状态代码(如果没有收到响应,则为0) |
output |
响应体预览(上限为8KiB,后缀 ... (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/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任务测试。
致谢
- modelcontextprotocol/go-sdk -模型上下文协议的官方Go SDK
- robfig/cron -Go的Cron表达式解析