准备工作
一个能用脚本表达的 MCP 工作流——脚本需要能够运行 MCP 提示、捕获输出并进行传递。你可以参考 如何将 MCP 报告发送到 Telegram、Discord 或电子邮件,了解具体操作。
一个 Cryptohopper MCP API 密钥,需要将其存储为环境变量或密钥。切记不要直接写在脚本里——请参考 API 密钥安全最佳实践。
基本模式
这三种调度系统都包裹了同一个脚本。它们的结构都是:运行 MCP 提示 → 捕获输出 → 进行传递。请确保你已经设置好了环境变量,并将输出捕获到日志文件中。
# /home/you/scripts/daily_digest.py
import os
import requests
API_KEY = os.environ["CRYPTOHOPPER_MCP_KEY"]
TELEGRAM_TOKEN = os.environ["TELEGRAM_BOT_TOKEN"]
TELEGRAM_CHAT_ID = os.environ["TELEGRAM_CHAT_ID"]
def run_mcp_workflow(prompt: str) -> str:
# 在这里调用你的 MCP 客户端库——生成报告文本。
...
def send_telegram(text: str) -> None:
requests.post(
f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage",
json={"chat_id": TELEGRAM_CHAT_ID, "text": text, "parse_mode": "Markdown"},
).raise_for_status()
if __name__ == "__main__":
prompt = open("/home/you/prompts/daily_digest.txt").read()
report = run_mcp_workflow(prompt)
send_telegram(report)
设置 — cron (macOS / Linux)
先手动测试脚本
export CRYPTOHOPPER_MCP_KEY="..."
export TELEGRAM_BOT_TOKEN="..."
export TELEGRAM_CHAT_ID="..."
python3 /home/you/scripts/daily_digest.py
2. 编辑你的 crontab
运行 crontab -e 并添加下面的条目。Cron 不会继承你 shell 的环境变量——请在 crontab 的顶部声明变量。
CRYPTOHOPPER_MCP_KEY=your_key
TELEGRAM_BOT_TOKEN=your_token
TELEGRAM_CHAT_ID=your_chat_id
PATH=/usr/local/bin:/usr/bin:/bin
# 每天 08:00 本地时间执行
0 8 * * * /usr/bin/python3 /home/you/scripts/daily_digest.py >> /home/you/logs/daily.log 2>&1
3. 验证
在计划时间之后,检查日志文件。空的日志意味着 cron 没有运行脚本。日志中的错误意味着脚本运行了但失败了。
bashtail -50 /home/you/logs/daily.log
设置 — 任务计划程序 (Windows)
从 PowerShell 测试脚本
$env:CRYPTOHOPPER_MCP_KEY = "..."
$env:TELEGRAM_BOT_TOKEN = "..."
$env:TELEGRAM_CHAT_ID = "..."
python C:\Users\you\scripts\daily_digest.py
2. 设置触发器
在“触发器”下,配置你的计划(例如,每天 08:00,每周等)。
3. 配置操作
在“操作”下:程序/脚本 → python(或 python.exe 的完整路径)。添加参数 → C:\Users\you\scripts\daily_digest.py。起始于 → C:\Users\you\scripts。
4. 处理环境变量
有两种选择:一种是通过“控制面板”→“系统”→“环境变量”将其设置为系统级变量,另一种是使用 `python-dotenv` 库从 `.env` 文件中加载。
5. 验证
在任务计划程序中查看任务的“上次运行结果”。0x0 表示成功,其他任何值都表示错误。
设置 — GitHub Actions (云托管)
为你的计划工作流创建一个 GitHub 仓库
将你的脚本添加到仓库中。不要提交敏感信息。
添加仓库秘密
转到“设置”→“Secrets and variables”→“Actions”,然后添加:
CRYPTOHOPPER_MCP_KEY、TELEGRAM_BOT_TOKEN、TELEGRAM_CHAT_ID。
创建工作流文件
# .github/workflows/daily_digest.yml
name: Daily digest
on:
schedule:
- cron: "0 7 * * *" # 每天 07:00 UTC
workflow_dispatch: # 允许手动触发
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- name: Run digest
env:
CRYPTOHOPPER_MCP_KEY: ${{ secrets.CRYPTOHOPPER_MCP_KEY }}
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
run: python scripts/daily_digest.py
GitHub Actions 的计划使用 UTC 时间——请相应地转换你的本地时间。在仓库的 Actions 标签页中监控运行情况;GitHub 会在你计划的运行失败时给你发邮件。
选择何处进行调度
选项 | 最适合 | 缺点 |
cron | 本地/个人工作流,在始终开机的机器上运行 | 笔记本电脑进入休眠时也会停止 |
任务计划程序 | Windows 上的个人工作流 | 用户界面笨拙,环境变量处理麻烦 |
GitHub Actions | 可靠、云托管,对大多数个人用户免费 | 在 GitHub 拥堵时运行可能会延迟 |
VPS + systemd/cron | 生产级的可靠性 | 你需要自己管理服务器 |
对大多数用户来说,GitHub Actions 是一个不错的默认选择:免费、可靠,并且在出现问题时易于查找日志。
故障排除
Cron 作业未执行
请检查 `grep CRON /var/log/syslog` (Linux) 或 `log show --predicate 'process == "cron"'` (macOS)。最常见的原因是缺少 PATH 或缺少环境变量——cron 在一个非常精简的环境中运行。
Cron 运行但脚本立即报错
几乎总是由于缺少环境变量。让脚本在缺少必需环境变量时打印清晰的错误信息并提前退出——不要让它在 MCP 调用中静默失败。
计划任务运行时间与预期不符
时区问题。Cron 使用机器的本地时区;GitHub Actions 使用 UTC。在设置实际的调度频率之前,先在可预测的时间测试你的计划。
即使脚本已运行,日志文件仍然为空
重定向没有捕获 stderr。使用 `>> log 2>&1`——双箭头是追加;单箭头 `>` 会覆盖每次运行,丢失之前的输出。
GitHub Actions 计划被跳过
GitHub 会在负载过高时限制计划工作流的执行,偶尔会跳过运行。对于必须可靠执行的工作流,请使用第二个调度机制作为备份,或者付费购买专用运行器。对大多数工作流来说,偶尔的跳过是可以容忍的。
计划运行比预期更快地消耗你的配额
每次运行都会产生费用。请访问如何监控你的 Cryptohopper MCP 支出,以监控使用情况。从 MCP 用量接口获取的每周汇总检查可以快速发现失控的计划。
你需要亚分钟级的调度精度
没有一个调度器能提供可靠的亚分钟级精度,而且你通常也不需要它。如果你认为你需要,请退一步想——也许该工作流用事件驱动的 Webhook 来设计会更好。
