返回市场
调度器-mcp

调度器-mcp

作者:PhialsBasement46 星标更新:2025-07-24

项目介绍

MCP 调度器

一个基于模型上下文协议(MCP)构建的强大任务调度服务器,用于调度和管理各种类型的自动化任务。

License

概述

MCP 调度器是一个多功能的任务自动化系统,允许您安排并运行不同类型的任务:

  • Shell 命令:按计划执行系统命令
  • API 调用:对外部服务进行 HTTP 请求
  • AI 任务:通过 OpenAI 模型生成内容
  • 提醒:显示带有声音的桌面通知

调度器使用 cron 表达式进行灵活的时间控制,并提供完整的任务执行历史记录。它基于模型上下文协议(MCP)构建,使其易于与 AI 助手和其他兼容 MCP 的客户端集成。

特性

  • 多种任务类型:支持 Shell 命令、API 调用、AI 内容生成以及桌面通知
  • Cron 调度:熟悉的 cron 语法以实现精确的调度控制
  • 一次性或重复运行:可以选择仅运行一次或按计划重复运行任务
  • 执行历史:跟踪成功和失败的任务执行情况
  • 跨平台:适用于 Windows、macOS 和 Linux
  • 交互式通知:对于提醒任务,提供带有声音的桌面警报
  • MCP 集成:与 AI 助手和工具无缝连接
  • 强大的错误处理:全面的日志记录和错误恢复机制

安装

先决条件

  • Python 3.10 或更高版本
  • uv(推荐的包管理器)

安装 uv(推荐)

# 对于 Mac/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# 对于 Windows(PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

安装 uv 后,请重启终端以确保命令可用。

项目设置

# 克隆仓库
git clone https://github.com/phialsbasement/mcp-scheduler.git
cd mcp-scheduler

# 使用 uv 创建并激活虚拟环境
uv venv
source .venv/bin/activate  # 在 Unix/macOS 上
# 或者
.venv\Scripts\activate     # 在 Windows 上

# 使用 uv 安装依赖项
uv pip install -r requirements.txt

标准 pip 安装(替代方案)

如果您更喜欢使用标准 pip:

# 克隆仓库
git clone https://github.com/phialsbasement/mcp-scheduler.git
cd mcp-scheduler

# 创建并激活虚拟环境
python -m venv .venv
source .venv/bin/activate  # 在 Unix/macOS 上
# 或者
.venv\Scripts\activate     # 在 Windows 上

# 安装依赖项
pip install -r requirements.txt

使用方法

运行服务器

# 使用默认设置运行(stdio 传输模式)
python main.py

# 在特定端口上使用服务器传输模式运行
python main.py --transport sse --port 8080

# 使用调试模式运行以获取详细的日志记录
python main.py --debug

与 Claude Desktop 或其他 MCP 客户端集成

要将您的 MCP 调度器与 Claude Desktop 结合使用:

  1. 确保已安装 Claude Desktop
  2. 打开您的 Claude Desktop 应用程序配置文件:
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  3. 如果文件不存在,请创建该文件,并添加您的服务器:
{
  "mcpServers": [
    {
      "type": "stdio",
      "name": "MCP 调度器",
      "command": "python",
      "args": ["/path/to/your/mcp-scheduler/main.py"]
    }
  ]
}

或者,如果您使用的是 FastMCP 库,可以使用 fastmcp 工具:

# 将您的服务器安装到 Claude Desktop
fastmcp install main.py --name "任务调度器"

命令行选项

--address        服务器地址(默认:localhost)
--port           服务器端口(默认:8080)
--transport      传输模式(sse 或 stdio)(默认:stdio)
--log-level      日志级别(默认:INFO)
--log-file       日志文件路径(默认:mcp_scheduler.log)
--db-path        SQLite 数据库路径(默认:scheduler.db)
--config         JSON 配置文件路径
--ai-model       用于 AI 任务的 AI 模型(默认:gpt-4o)
--version        显示版本信息并退出
--debug          启用调试模式,带完整回溯
--fix-json       启用畸形消息的 JSON 修复

配置文件

您可以使用 JSON 配置文件代替命令行参数:

{
  "server": {
    "name": "mcp-scheduler",
    "version": "0.1.0",
    "address": "localhost",
    "port": 8080,
    "transport": "sse"
  },
  "database": {
    "path": "scheduler.db"
  },
  "logging": {
    "level": "INFO",
    "file": "mcp_scheduler.log"
  },
  "scheduler": {
    "check_interval": 5,
    "execution_timeout": 300
  },
  "ai": {
    "model": "gpt-4o",
    "openai_api_key": "your-api-key"
  }
}

MCP 工具函数

MCP 调度器提供了以下工具:

任务管理

  • list_tasks:获取所有已安排的任务
  • get_task:获取特定任务的详细信息
  • add_command_task:添加一个新的 Shell 命令任务
  • add_api_task:添加一个新的 API 调用任务
  • add_ai_task:添加一个新的 AI 任务
  • add_reminder_task:添加一个新的带有桌面通知的提醒任务
  • update_task:更新现有任务
  • remove_task:删除任务
  • enable_task:启用已禁用的任务
  • disable_task:禁用活动任务
  • run_task_now:立即运行任务

执行和监控

  • get_task_executions:获取任务的执行历史
  • get_server_info:获取服务器信息

Cron 表达式指南

MCP 调度器使用标准的 cron 表达式进行调度。这里有一些例子:

  • 0 0 * * * - 每天午夜
  • 0 */2 * * * - 每 2 小时
  • 0 9-17 * * 1-5 - 每周一至周五从上午 9 点到下午 5 点每小时
  • 0 0 1 * * - 每月第一天午夜
  • 0 0 * * 0 - 每周日午夜

环境变量

调度器可以通过环境变量进行配置:

  • MCP_SCHEDULER_NAME:服务器名称(默认:mcp-scheduler)
  • MCP_SCHEDULER_VERSION:服务器版本(默认:0.1.0)
  • MCP_SCHEDULER_ADDRESS:服务器地址(默认:localhost)
  • MCP_SCHEDULER_PORT:服务器端口(默认:8080)
  • MCP_SCHEDULER_TRANSPORT:传输模式(默认:stdio)
  • MCP_SCHEDULER_LOG_LEVEL:日志级别(默认:INFO)
  • MCP_SCHEDULER_LOG_FILE:日志文件路径
  • MCP_SCHEDULER_DB_PATH:数据库路径(默认:scheduler.db)
  • MCP_SCHEDULER_CHECK_INTERVAL:检查任务的频率(默认:5 秒)
  • MCP_SCHEDULER_EXECUTION_TIMEOUT:任务执行超时时间(默认:300 秒)
  • MCP_SCHEDULER_AI_MODEL:用于 AI 任务的 OpenAI 模型(默认:gpt-4o)
  • OPENAI_API_KEY:用于 OpenAI 任务的 API 密钥

示例

添加 Shell 命令任务

await scheduler.add_command_task(
    name="备份数据库",
    schedule="0 0 * * *",  # 每天午夜
    command="pg_dump -U postgres mydb > /backups/mydb_$(date +%Y%m%d).sql",
    description="每日数据库备份",
    do_only_once=False  # 循环任务
)

添加 API 任务

await scheduler.add_api_task(
    name="获取天气数据",
    schedule="0 */6 * * *",  # 每 6 小时
    api_url="https://api.weather.gov/stations/KJFK/observations/latest",
    api_method="GET",
    description="获取最新的天气观测数据",
    do_only_once=False
)

添加 AI 任务

await scheduler.add_ai_task(
    name="生成每周报告",
    schedule="0 9 * * 1",  # 每周一上午 9 点
    prompt="生成上周销售数据的总结。",
    description="每周销售报告生成",
    do_only_once=False
)

添加提醒任务

await scheduler.add_reminder_task(
    name="团队会议",
    schedule="30 9 * * 2,4",  # 每周二和周四上午 9:30
    message="别忘了团队站会!",
    title="会议提醒",
    do_only_once=False
)

MCP 自动发现端点

当在 SSE(HTTP)模式下运行时,MCP 调度器暴露了一个众所周知的端点,用于工具/模式的自动发现:

  • 端点/.well-known/mcp-schema.json(在 HTTP 端口 + 1 上,例如,如果您的服务器运行在 8080 端口,则模式位于 8081 端口)
  • 目的:允许客户端和 AI 助手自动发现所有可用的 MCP 工具及其参数。

示例

如果您运行:

python main.py --transport sse --port 8080

您可以访问模式:

http://localhost:8081/.well-known/mcp-schema.json

示例响应

{
  "tools": [
    {
      "name": "list_tasks",
      "description": "列出所有已安排的任务。",
      "endpoint": "list_tasks",
      "method": "POST",
      "parameters": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      }
    },
    {
      "name": "add_command_task",
      "description": "添加一个新的 Shell 命令任务。",
      "endpoint": "add_command_task",
      "method": "POST",
      "parameters": {
        "type": "object",
        "properties": {
          "name": {"type": "string"},
          "schedule": {"type": "string"},
          "command": {"type": "string"},
          "description": {"type": "string"},
          "enabled": {"type": "boolean"},
          "do_only_once": {"type": "boolean"}
        },
        "required": ["name", "schedule", "command"],
        "additionalProperties": false
      }
    }
    // ... 更多工具 ...
  ]
}

此模式是根据注册的 MCP 工具自动生成的,并始终反映当前服务器的功能。

开发

如果您想贡献或进一步开发 MCP 调度器,这里有一些额外的命令:

# 安装 MCP SDK 用于开发
uv pip install "mcp[cli]>=1.4.0"

# 或者对于 FastMCP(另一种实现)
uv pip install fastmcp

# 测试您的 MCP 服务器
# 使用 MCP Inspector 工具
mcp inspect --stdio -- python main.py

# 或使用简单的 MCP 客户端
python -m mcp.client.stdio python main.py

贡献

欢迎贡献!请随意提交拉取请求。

  1. 分叉仓库
  2. 创建您的功能分支(git checkout -b feature/amazing-feature
  3. 提交更改(git commit -m '添加一些精彩功能'
  4. 推送到分支(git push origin feature/amazing-feature
  5. 打开拉取请求

许可证

本项目采用 MIT 许可证 - 详情见 LICENSE 文件。

致谢