任务触发器mcp
   
一个独立的MCP服务器,允许AI代理注册、管理和执行 预定的 和 事件驱动的 任务。单一静态二进制文件。没有运行时依赖关系。跨平台(Linux/WSL、macOS)。
你的经纪人说 *“每天上午9点运行测试”* --该模型将其转换为cron表达式,二进制文件在内部处理调度、文件监视、CLI调用、日志轮换和其他一切。该代理从不编写bash脚本或接触crontab。
______________________________________________________________________
运作原理
graph TB
subgraph daemon["task-trigger-mcp daemon"]
MCP["MCP Server
Streamable HTTP :7755"]
SCHED["Cron Scheduler
(internal, tokio)"]
WE["Watcher Engine
(notify crate)"]
DB[(SQLite
tasks.db)]
MCP DB
SCHED DB
WE DB
SCHED -- "on schedule" --> EXEC
WE -- "on file event" --> EXEC
EXEC["Executor"]
end
Agent["MCP Client
(OpenCode, Kiro, Copilot,
Claude Desktop)"] -- "Streamable HTTP / stdio" --> MCP
EXEC --> CLI["Headless CLI
(opencode run / kiro-cli / copilot)"]
style daemon fill:#1a1a2e,stroke:#16213e,color:#eee
style Agent fill:#0f3460,stroke:#16213e,color:#eee
style CLI fill:#e94560,stroke:#16213e,color:#eee关键属性:代理可以自由连接和断开连接。守望者继续奔跑。计划任务不断触发。守护进程是真相的来源。
______________________________________________________________________
安装
快速安装(推荐)
curl -fsSL https://raw.githubusercontent.com/JheisonMB/task-trigger-mcp/main/install.sh | sh这将为您的平台下载最新的预构建二进制文件并将其安装到 ~/.local/bin不需要Rust工具链。
您可以自定义安装:
# Pin a specific version
VERSION=1.0.0 curl -fsSL https://raw.githubusercontent.com/JheisonMB/task-trigger-mcp/main/install.sh | sh
# Install to a custom directory
INSTALL_DIR=/usr/local/bin curl -fsSL https://raw.githubusercontent.com/JheisonMB/task-trigger-mcp/main/install.sh | sh通过货物
cargo install task-trigger-mcp可用的 克拉特斯.io.
来源
git clone https://github.com/JheisonMB/task-trigger-mcp.git
cd task-trigger-mcp
cargo build --release
# Binary at target/release/task-trigger-mcpGitHub 发布
检查 发布 预编译二进制文件页面(Linux x86_64、macOS x86_64/ARM64、Windows x86_63)。
______________________________________________________________________
MCP客户端配置
将此添加到您的OpenCode配置文件中(~/.opencode/config.json):
{
"mcp": {
"task-trigger": {
"type": "local",
"command": ["task-trigger-mcp"],
"args": ["stdio"],
"enabled": true
}
}
}注: 这将在stdio模式下运行任务触发器mcp。当OpenCode断开连接时,计划任务将暂停。对于持久任务执行,请单独运行守护进程:
task-trigger-mcp daemon start并重新配置以使用远程MCP:
{
"mcp": {
"task-trigger": {
"type": "remote",
"url": "http://localhost:7755/mcp",
"enabled": true
}
}
}______________________________________________________________________
快速开始
# 1. Start the daemon
task-trigger-mcp daemon start
# 2. Check it's running
task-trigger-mcp daemon status
# 3. Your agent now has access to 12 task management tools守护进程是一个长时间运行的进程,它拥有:
- MCP服务器 (端口7755上的流式HTTP)——这样代理就可以连接和调用工具
- 内部Cron调度程序 (tokio)-事件驱动,休眠到下一个任务到期并执行它
- 文件监视引擎 (notify crate)--监视文件/目录的更改并触发执行
- SQLite数据库 --保存所有任务/观察者定义、运行历史和日志
不依赖于 crontab, launchd或任何OS调度器。一切都在守护进程内部运行。
守护进程停止时会发生什么?
| 组件 | 行为 |
|---|---|
| 预定任务 | 停止执行。当守护进程重新启动时,它们会恢复。 |
| 文件监视器 | 停止监控。它们在重新启动时从SQLite重新加载。 |
| 任务定义 | 坚持使用SQLite。什么都没有丢失。 |
如何使其在重启后存活
task-trigger-mcp daemon install-service这会将守护进程安装为启动时自动启动的系统服务:
- Linux/WSL:创建systemd用户单元并启用延迟(在没有活动登录的情况下运行)
- macOS:创建登录时启动的launchd代理
要删除服务,请执行以下操作:
task-trigger-mcp daemon uninstall-service或者,添加 task-trigger-mcp daemon start 到您的shell启动文件(.bashrc, .zshrc).
______________________________________________________________________
MCP工具
服务器向代理公开了12个工具:
| 工具 | 说明 |
|---|---|
task_add | 使用5字段cron表达式注册计划任务(*/5 * * * *, 0 9 * * 1-5).支持 timeout_minutes 用于执行锁定。 |
task_watch | 监视文件/目录以创建、修改、删除或移动事件。支持 timeout_minutes 用于执行锁定。 |
task_report | 报告正在运行的任务的执行状态。由代理人致电 run_id, status (in_progress, success, error),以及 summary. |
task_update | 修改现有任务或观察者(计划、提示、事件等),而不删除和重新创建它 |
task_list | 列出所有计划任务,包括状态、上次运行和到期信息 |
task_watchers | 列出所有具有状态和触发计数的文件监视器 |
task_remove | 完全删除任务或观察者 |
task_unwatch | 暂停文件监视器而不删除它 |
task_enable | 重新启用已禁用的任务或监视器 |
task_disable | 禁用任务或监视器而不将其删除 |
task_run | 在计划之外立即执行任务 |
task_logs | 使用可选的行/时间过滤器获取任务或监视器的日志输出 |
task_status | 守护进程运行状况:正常运行时间、传输、调度程序状态、活动计数 |
计划格式(cron)
这 schedule 领域 task_add 需要一个标准的5字段cron表达式:
┌───────── minute (0-59)
│ ┌─────── hour (0-23)
│ │ ┌───── day of month (1-31)
│ │ │ ┌─── month (1-12)
│ │ │ │ ┌─ day of week (0-6, 0=Sun)
│ │ │ │ │
* * * * *常见模式:
*/5 * * * *--每5分钟0 9 * * *--每天上午9点0 9 * * 1-5--工作日上午9点0 */2 * * *--每2小时30 14 1,15 * *--1日和15日下午2:30
该模型负责将自然语言(例如“每天上午9点”)转换为cron表达式。工具描述包括指导模型的常见模式。
执行运行和锁定
每个任务执行都会生成一个具有生命周期的唯一运行(UUID):
pending → in_progress → success / error
→ timeout (if agent doesn't report back)它是如何工作的:
- 当守护进程启动任务时,它会创建一个状态为的运行
pending并锁定任务 - 发送给代理的提示包括呼叫指令
task_report随着run_id - 代理人打电话来
task_report(run_id, "in_progress")立即,然后开始工作 - 完成后,代理呼叫
task_report(run_id, "success", summary)或task_report(run_id, "error", summary) - 如果在任务锁定时有新的触发器到达,则记录为
missed并跳过
超时: 每个任务都有一个可配置的 timeout_minutes (默认值:15)。如果代理未在此窗口内报告,则运行标记为 timeout 并且任务在下一次触发时被解锁。这可以防止任务被永久锁定。
观察者的反递归: 锁定机制自然会防止递归循环——如果观察者触发修改被观察文件的CLI,则会跳过第二个触发器,因为任务仍然被锁定。
______________________________________________________________________
使用示例
安排每日试运行
客服:“每天早上9点运行测试套件”
模型调用 task_add:
{
"id": "daily-tests",
"prompt": "Run cargo test in the project and report any failures",
"schedule": "0 9 * * *",
"cli": "opencode",
"working_dir": "/home/user/my-project",
"timeout_minutes": 30
}关注源代码更改
Agent:“关注src/以获取更改并运行linter”
模型调用 task_watch:
{
"id": "lint-on-change",
"path": "/home/user/my-project/src",
"events": ["create", "modify"],
"prompt": "Run cargo clippy and fix any warnings",
"cli": "opencode",
"recursive": true,
"debounce_seconds": 5
}自动过期的临时任务
代理:“在接下来的一个小时里,每分钟检查一次部署状态”
{
"id": "monitor-deploy",
"prompt": "Check deployment status and report",
"schedule": "*/1 * * * *",
"cli": "opencode",
"duration_minutes": 60
}此任务在60分钟后自动禁用。
提示变量
提示在执行时支持变量替换:
{{TIMESTAMP}}--当前ISO 8601时间戳{{TASK_ID}}--任务的ID{{LOG_PATH}}--任务日志文件的路径{{FILE_PATH}}--监视的文件路径(仅限监视者){{EVENT_TYPE}}--发射的事件(仅限观众)
______________________________________________________________________
守护进程管理
task-trigger-mcp daemon start # start in background
task-trigger-mcp daemon stop # stop daemon
task-trigger-mcp daemon status # check if running
task-trigger-mcp daemon restart # restart
task-trigger-mcp daemon logs # tail daemon logs
task-trigger-mcp daemon install-service # install as systemd/launchd service
task-trigger-mcp daemon uninstall-service # remove the system service______________________________________________________________________
运行时目录
~/.task-trigger/
tasks.db # SQLite database
daemon.pid # PID file for daemon management
daemon.log # daemon-level logs
logs/
.log # per-task/watcher logs (5MB rotation)______________________________________________________________________
平台支持
| 功能 | Linux/WSL | macOS |
|---|---|---|
| 守护进程传输 | 可流式HTTP本地主机 | 可流化HTTP本地主机 |
| Cron调度 | 内部(tokio) | 内部(tokio) |
| 文件查看 | inotify | FSEvents |
| 服务安装 | systemd用户单元 | launchd代理 |
| 二进制格式 | ELF静态(musl) | Mach-O |
______________________________________________________________________
技术栈
| 关注 | 板条箱 |
|---|---|
| MCP-SDK | rmcp + rmcp-macros |
| 异步运行时 | tokio |
| HTTP传输 | axum |
| Cron解析 | cron |
| 文件监视 | notify |
| 国家 | rusqlite (捆绑) |
| 序列化 | serde + serde_json |
| CLI检测 | which |
| UUID生成 | uuid |
| 日志记录 | tracing |
______________________________________________________________________
许可证
麻省理工学院
