🚀 MCP Scheduler
MCP Scheduler 是一個基於模型上下文協議(MCP)構建的強大任務調度服務器,用於調度和管理各種類型的自動化任務。它支持多種任務類型,可靈活定時,並能與 AI 助手等 MCP 兼容客戶端無縫集成。
此項目從 https://github.com/PhialsBasement/scheduler-mcp 分叉而來。

🚀 快速開始
MCP Scheduler 是一個多功能的任務自動化系統,可調度和運行不同類型的任務,包括執行系統命令、發起 API 調用、生成 AI 內容以及顯示桌面提醒等。它使用 cron 表達式實現靈活的定時功能,並提供完整的任務執行歷史記錄。
✨ 主要特性
- 多任務類型:支持 shell 命令、API 調用、AI 內容生成和桌面通知。
- Cron 調度:使用熟悉的 cron 語法進行精確的調度控制。
- 單次或重複運行:可選擇任務僅運行一次或按計劃重複運行。
- 執行歷史:跟蹤任務的成功和失敗執行情況。
- 跨平臺:可在 Windows、macOS 和 Linux 上運行。
- 交互式通知:提醒任務的桌面警報並帶有聲音。
- MCP 集成:與 AI 助手和工具無縫連接。
- 強大的錯誤處理:全面的日誌記錄和錯誤恢復功能。
📦 安裝指南
前提條件
- Python 3.10 或更高版本
- uv(推薦的包管理器)
安裝 uv(推薦)
curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
安裝 uv 後,重啟終端以確保命令可用。
使用 uv 進行項目設置(推薦)
git clone https://github.com/yourusername/mcp-scheduler.git
cd mcp-scheduler
uv venv
source .venv/bin/activate
.venv\Scripts\activate
uv pip install -r requirements.txt
標準 pip 安裝(可選)
如果您更喜歡使用標準的 pip:
git clone https://github.com/yourusername/mcp-scheduler.git
cd mcp-scheduler
python -m venv .venv
source .venv/bin/activate
.venv\Scripts\activate
pip install -r requirements.txt
💻 使用示例
運行服務器
source .venv/bin/activate
.venv\Scripts\activate
uv run main.py
uv run start_with_aws_q.py
uv run main.py --debug
uv run main.py --config /path/to/config.json
服務器默認使用 stdio 傳輸,這非常適合與 Amazon Q 和其他 MCP 客戶端集成。服務器會根據環境自動處理通信協議。
與 Amazon Q、Claude Desktop 或其他 MCP 客戶端集成
Amazon Q 集成
要將 MCP Scheduler 與 Amazon Q 一起使用:
- 確保您已安裝 Amazon Q CLI。
- 使用 AWS Q 模型補丁運行調度器:
uv run start_with_aws_q.py
這將自動將調度器註冊到 Amazon Q,允許您通過自然語言命令創建和管理任務。
示例命令:
- "Create a scheduled task to backup my config file every night at 10:30 PM"
- "Show me all my scheduled tasks"
- "Run the backup task now"
更多與 Amazon Q 的使用示例,請參閱 examples
目錄。
Claude Desktop 集成
要將您的 MCP Scheduler 與 Claude Desktop 一起使用:
- 確保您已安裝 Claude Desktop。
- 打開您的 Claude Desktop 應用配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- 如果文件不存在,則創建該文件,並添加您的服務器:
{
"mcpServers": [
{
"type": "stdio",
"name": "MCP Scheduler",
"command": "python",
"args": ["/path/to/your/mcp-scheduler/main.py"]
}
]
}
或者,如果您使用的是 FastMCP 庫,可以使用 fastmcp
實用工具:
fastmcp install main.py --name "Task Scheduler"
命令行選項
--address 服務器地址 (默認: localhost)
--port 服務器端口 (默認: 8080)
--transport 傳輸模式 (stdio 或 sse) (默認: 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 修復
與 Amazon Q 一起使用時,大多數這些選項由 start_with_aws_q.py
腳本自動配置。
配置文件
您可以使用 JSON 配置文件代替命令行參數:
{
"server": {
"name": "mcp-scheduler",
"version": "0.1.0",
"address": "localhost",
"port": 8080,
"transport": "stdio"
},
"database": {
"path": "scheduler.db"
},
"logging": {
"level": "INFO",
"file": "mcp_scheduler.log"
},
"scheduler": {
"check_interval": 5,
"execution_timeout": 300
},
"ai": {
"model": "gpt-4o",
"use_aws_q_model": true,
"openai_api_key": "your-api-key"
}
}
與 Amazon Q 一起使用時,use_aws_q_model
應設置為 true
,並且不需要 API 密鑰。
📚 詳細文檔
重要說明
任務類型和限制
MCP Scheduler 是一個應用級任務調度服務,而不是系統級定時任務管理器:
- 應用級任務:MCP Scheduler 創建的任務存儲在其自己的數據庫中,只有在 MCP Scheduler 服務運行時才會執行。
- 非系統級:這些任務不是系統 crontab 或 systemd 定時器,不會在系統啟動時自動運行。
- 服務依賴:如果 MCP Scheduler 服務停止,任務將不會執行。
- 用戶權限:任務以運行 MCP Scheduler 的用戶權限執行,而不是 root 權限。
如果您需要系統級定時任務(在系統啟動時自動運行或需要 root 權限),請考慮:
- 使用操作系統的
crontab -e
或 systemctl
直接創建系統級定時任務。
- 創建一個 MCP Scheduler 任務,該任務執行腳本來管理系統級定時任務。
持久化和服務管理
為確保 MCP Scheduler 在系統重啟後繼續運行,您可以:
- 將其設置為系統服務(使用 systemd)。
- 在用戶登錄時自動啟動。
- 在雲環境中作為容器或服務運行。
MCP 工具功能
MCP Scheduler 提供以下工具:
任務管理
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 Scheduler 使用標準的 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)。
MCP_SCHEDULER_USE_AWS_Q_MODEL
:是否使用 AWS Q 模型進行 AI 任務(默認:false)。
OPENAI_API_KEY
:OpenAI 任務的 API 密鑰(使用 AWS Q 模型時不需要)。
通過 Amazon Q 使用(推薦)
使用 Amazon Q 創建和管理任務非常簡單,只需使用自然語言描述您想要的任務:
- 創建命令任務:
創建一個定時任務,每天晚上10:30備份我的數據庫到/backups目錄
- 創建 API 調用任務:
設置一個每6小時獲取一次天氣數據的任務
- 創建 AI 任務:
每週一早上9點生成一份上週銷售數據的摘要報告
- 創建提醒任務:
每週二和週四上午9:30提醒我參加團隊會議
- 查看所有任務:
顯示所有定時任務
- 立即運行任務:
立即運行備份任務
通過編程 API 使用
如果您正在開發應用程序或腳本,可以通過編程方式與 MCP Scheduler 交互。以下是建立調用關係的簡要指南:
1. 安裝必要的依賴
uv pip install "mcp[client]>=1.4.0"
2. 建立連接並調用 API
import asyncio
from mcp.client import StdioClient
async def main():
process_args = ["uv", "run", "/path/to/scheduler-mcp/main.py"]
async with StdioClient.create_subprocess(process_args) as client:
server_info = await client.call("get_server_info")
print(f"連接到 {server_info['name']} 版本 {server_info['version']}")
tasks = await client.call("list_tasks")
print(f"當前有 {len(tasks)} 個任務")
cmd_task = await client.call(
"add_command_task",
{
"name": "系統狀態檢查",
"schedule": "*/30 * * * *",
"command": "vmstat > /tmp/vmstat_$(date +%Y%m%d_%H%M).log",
"description": "記錄系統狀態",
"do_only_once": False
}
)
print(f"創建命令任務: {cmd_task['id']}")
run_result = await client.call(
"run_task_now",
{"task_id": cmd_task['id']}
)
print(f"任務執行結果: {run_result['execution']['status']}")
if __name__ == "__main__":
asyncio.run(main())
3. 連接到已運行的 MCP Scheduler
如果 MCP Scheduler 已經在 HTTP 模式下運行,可以使用 SSE 客戶端連接:
import asyncio
from mcp.client import SseClient
async def connect_to_running_scheduler():
async with SseClient("http://localhost:8080") as client:
tasks = await client.call("list_tasks")
print(f"當前有 {len(tasks)} 個任務")
asyncio.run(connect_to_running_scheduler())
4. 錯誤處理
import asyncio
from mcp.client import StdioClient
from mcp.errors import McpError
async def robust_scheduler_client():
try:
process_args = ["uv", "run", "/path/to/scheduler-mcp/main.py"]
async with StdioClient.create_subprocess(process_args) as client:
try:
result = await client.call("list_tasks")
return result
except McpError as e:
print(f"MCP API錯誤: {e}")
return []
except Exception as e:
print(f"連接錯誤: {e}")
return []
asyncio.run(robust_scheduler_client())
完整示例
查看 examples/api_client_example.py
獲取完整的 API 使用示例,包括:
- 連接到 MCP Scheduler 服務。
- 創建、運行、更新和刪除任務。
- 獲取任務執行歷史。
- 錯誤處理和異常管理。
cd examples
./api_client_example.py
示例腳本
examples
目錄包含了可直接使用的腳本和配置,適用於常見用例:
backup_mcp_config.sh
:一個用於備份 Amazon Q MCP 配置文件的腳本,包含基於日期的命名和保留策略。
MCP 工具發現
MCP Scheduler 支持通過模型上下文協議進行自動工具發現:
Stdio 模式(默認)
當以 stdio 模式運行(默認)時,工具發現會通過 MCP 協議自動進行。這是與 Amazon Q 和其他支持 stdio 通信的 MCP 客戶端一起使用的推薦模式。
uv run main.py
HTTP 模式(可選)
如果您需要以 HTTP 模式運行服務器,可以使用 SSE 傳輸並通過知名端點訪問模式:
uv run main.py --transport sse --port 8080
在 HTTP 模式下,服務器公開一個知名端點用於工具/模式自動發現:
- 端點:
/.well-known/mcp-schema.json
(在 HTTP 端口 + 1 上,例如,如果您的服務器在 8080 上運行,模式在 8081 上)。
- 目的:允許客戶端和 AI 助手自動發現所有可用的 MCP 工具及其參數。
您可以在以下地址訪問模式:
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
}
}
]
}
此模式是從註冊的 MCP 工具自動生成的,始終反映當前服務器的功能。
開發
如果您想對 MCP Scheduler 進行貢獻或進一步開發,以下是一些額外的命令:
uv pip install "mcp[cli]>=1.4.0"
uv pip install fastmcp
mcp inspect --stdio -- uv run main.py
python -m mcp.client.stdio uv run main.py
uv run -m pytest
uv pip install flake8
flake8 mcp_scheduler/
📄 許可證
本項目遵循 MIT 許可證 - 詳情請參閱 LICENSE 文件。