任务调度服务器

基于模型上下文协议(MCP)构建的健壮任务调度服务器,用于调度和管理各种类型的自动化任务,包括执行系统命令、API调用、AI内容生成和桌面提醒。

  • by PhialsBasement
  • Python
  • 本地部署
  • 59 星标
  • 更新于
在 GitHub 查看 PhialsBasement/scheduler-mcp

使用说明

MCP调度器

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

概述

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

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

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

特性

  • 多种任务类型:支持shell命令、API调用、AI内容生成和桌面通知
  • Cron调度:用于精确调度控制的熟悉cron语法
  • 运行一次或重复运行:按计划只运行一次或重复运行任务的选项
  • 执行历史:跟踪成功和失败的任务执行
  • 交叉平台的:适用于Windows、macOS和Linux
  • 交互式通知:用于提醒任务的带声音的桌面警报
  • MCP集成:与人工智能助手和工具无缝连接
  • 稳健的错误处理:全面的日志记录和错误恢复

安装

先决条件

  • Python 3.10或更高版本
  • 紫外线 (推荐包管理器)

安装uv(推荐)

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

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

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

项目设置

# Clone the repository
git clone https://github.com/phialsbasement/mcp-scheduler.git
cd mcp-scheduler

# Create and activate a virtual environment with uv
uv venv
source .venv/bin/activate  # On Unix/MacOS
# or
.venv\Scripts\activate     # On Windows

# Install dependencies with uv
uv pip install -r requirements.txt

标准管道安装(备选)

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

# Clone the repository
git clone https://github.com/phialsbasement/mcp-scheduler.git
cd mcp-scheduler

# Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate  # On Unix/MacOS
# or
.venv\Scripts\activate     # On Windows

# Install dependencies
pip install -r requirements.txt

用法

运行服务器

# Run with default settings (stdio transport)
python main.py

# Run with server transport on specific port
python main.py --transport sse --port 8080

# Run with debug mode for detailed logging
python main.py --debug

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

要在Claude Desktop中使用MCP调度程序,请执行以下操作:

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

或者,使用 fastmcp 实用程序(如果您使用的是FastMCP库):

# Install your server in Claude Desktop
fastmcp install main.py --name "Task Scheduler"

命令行选项

--address        Server address (default: localhost)
--port           Server port (default: 8080)
--transport      Transport mode (sse or stdio) (default: stdio)
--log-level      Logging level (default: INFO)
--log-file       Log file path (default: mcp_scheduler.log)
--db-path        SQLite database path (default: scheduler.db)
--config         Path to JSON configuration file
--ai-model       AI model to use for AI tasks (default: gpt-4o)
--version        Show version and exit
--debug          Enable debug mode with full traceback
--fix-json       Enable JSON fixing for malformed messages

配置文件

您可以使用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调度程序)
  • 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="Backup Database",
    schedule="0 0 * * *",  # Midnight every day
    command="pg_dump -U postgres mydb > /backups/mydb_$(date +%Y%m%d).sql",
    description="Daily database backup",
    do_only_once=False  # Recurring task
)

添加API任务

await scheduler.add_api_task(
    name="Fetch Weather Data",
    schedule="0 */6 * * *",  # Every 6 hours
    api_url="https://api.weather.gov/stations/KJFK/observations/latest",
    api_method="GET",
    description="Get latest weather observations",
    do_only_once=False
)

添加AI任务

await scheduler.add_ai_task(
    name="Generate Weekly Report",
    schedule="0 9 * * 1",  # 9 AM every Monday
    prompt="Generate a summary of the previous week's sales data.",
    description="Weekly sales report generation",
    do_only_once=False
)

添加提醒任务

await scheduler.add_reminder_task(
    name="Team Meeting",
    schedule="30 9 * * 2,4",  # 9:30 AM every Tuesday and Thursday
    message="Don't forget the team standup meeting!",
    title="Meeting Reminder",
    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": "List all scheduled tasks.",
      "endpoint": "list_tasks",
      "method": "POST",
      "parameters": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      }
    },
    {
      "name": "add_command_task",
      "description": "Add a new shell command task.",
      "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
      }
    }
    // ... more tools ...
  ]
}

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

发展

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

# Install the MCP SDK for development
uv pip install "mcp[cli]>=1.4.0"

# Or for FastMCP (alternative implementation)
uv pip install fastmcp

# Testing your MCP server
# With the MCP Inspector tool
mcp inspect --stdio -- python main.py

# Or with a simple MCP client
python -m mcp.client.stdio python main.py

贡献

欢迎投稿!请随时提交拉取请求。

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

致谢