任务管理服务器

一个基于Cloudflare Workers的生产级任务管理服务器,支持多用户、多时区、邮件提醒和自动过期检测。

  • by chenjiahui-offical
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 chenjiahui-offical/mcp-todo-server

使用说明

MCP全服务器

一个生产就绪的MCP(模型上下文协议)服务器,用于通过电子邮件提醒进行任务管理,托管在Cloudflare Workers上。

✨ 特性

  • 📝 完整的CRUD操作 -创建、读取、更新和删除任务
  • ⏰ 智能提醒 -截止日期前可定制的电子邮件提醒
  • 🌍 多时区支持 -服务器使用UTC,用户看到他们的本地时间
  • 👥 多用户 -每个用户的独立数据(通过电子邮件标识)
  • 📧 电子邮件通知 -漂亮的HTML电子邮件模板
  • 🔄 自动过期 -自动任务过期检测
  • 🚀 边缘计算 -部署在Cloudflare Workers(全球CDN)上
  • 💾 SQLite数据库 -Cloudflare D1实现可靠存储
  • 🔐 安全 -基于环境的秘密管理

🏗️ 建筑

AI Client (Claude/Kiro/etc)
    ↓ SSE (Server-Sent Events)
MCP Server (Cloudflare Workers)
    ↓
Database (Cloudflare D1 - SQLite)
    ↓
Cron Jobs (Every 5 minutes)
    ↓
Email Service (Resend/SendGrid)

🚀 快速开始

先决条件

  • Node.js 18+
  • Cloudflare帐户(免费版有效)
  • 电子邮件服务帐户(建议重新发送或SendGrid)

1.克隆和安装

git clone https://github.com/chenjiahui-offical/mcp-todo-server.git
cd mcp-todo-server
npm install

2.部署

# Install Wrangler CLI
npm install -g wrangler

# Login to Cloudflare
wrangler login

# Create D1 database
wrangler d1 create mcp-todo-db

# Update wrangler.toml with the database_id from above

# Initialize database
wrangler d1 execute mcp-todo-db --remote --file=./schema.sql

# Set secrets
echo "your_resend_api_key" | wrangler secret put SMTP_PASS
echo "noreply@yourdomain.com" | wrangler secret put SMTP_FROM_EMAIL

# Deploy
npm run deploy

3.配置您的AI客户端

看 MCP_CLIENT_CONFIG.md 有关以下内容的详细配置说明:

  • 克劳德桌面
  • 开发 IDE
  • Cline(VS代码)
  • 继续(VS代码)
  • 定制客户

快速示例(VS代码):

{
  "mcpServers": {
    "todo": {
      "url": "https://your-worker.workers.dev/sse",
      "transport": "sse",
      "env": {
        "USER_EMAIL": "your-email@example.com",
        "USER_TIMEZONE": "Asia/Shanghai"
      }
    }
  }
}

📖 文档

🛠️ MCP工具

工具 说明
get_server_time 获取用户时区中的当前服务器时间
add_todo 创建带有提醒的新任务
list_todos 列出所有任务(带过滤器)
get_todo 获取特定任务的详细信息
update_todo 更新任务信息
delete_todo 删除任务
mark_complete 将任务标记为已完成/未完成

💬 用法示例

添加任务

Add a task:
- Title: Complete project report
- Description: Include data analysis and conclusions
- Deadline: tomorrow at 3 PM
- Remind me 1 hour before
- Priority: high
- Tags: work, important

列出任务

Show all my pending tasks

更新任务

Change the deadline of "Complete project report" to next Friday at 5 PM

标记完成

Mark "Complete project report" as completed

🗄️ 数据库模式

用户表

CREATE TABLE users (
    email TEXT PRIMARY KEY,
    timezone TEXT NOT NULL DEFAULT 'UTC',
    created_at INTEGER NOT NULL
);

全部 表格

CREATE TABLE todos (
    id TEXT PRIMARY KEY,
    user_email TEXT NOT NULL,
    title TEXT NOT NULL,
    description TEXT,
    deadline_utc INTEGER NOT NULL,
    remind_before_minutes INTEGER NOT NULL DEFAULT 60,
    priority TEXT DEFAULT 'medium',
    tags TEXT,
    is_completed INTEGER DEFAULT 0,
    is_expired INTEGER DEFAULT 0,
    reminder_sent INTEGER DEFAULT 0,
    created_at INTEGER NOT NULL,
    updated_at INTEGER NOT NULL,
    FOREIGN KEY (user_email) REFERENCES users(email)
);

⚙️ 配置

环境变量

通过设置 wrangler secret put:

  • SMTP_PASS -电子邮件服务API密钥(重新发送/发送网格)
  • SMTP_FROM_EMAIL -发件人电子邮件地址

牧马人.汤姆

name = "mcp-todo-server"
main = "src/index.ts"
compatibility_date = "2024-01-01"

[[d1_databases]]
binding = "DB"
database_name = "mcp-todo-db"
database_id = "your-database-id"

[triggers]
crons = ["*/5 * * * *"]  # Every 5 minutes

[vars]
SMTP_HOST = "api.resend.com"
SMTP_PORT = "443"
SMTP_FROM_NAME = "MCP Todo Reminder"

🔧 发展

地方发展

npm run dev

运行测试

./scripts/test-api.sh http://localhost:8787

查看日志

wrangler tail

查询数据库

wrangler d1 execute mcp-todo-db --remote --command "SELECT * FROM todos"

📊 项目结构

mcp-todo-server/
├── src/
│   ├── index.ts          # MCP server entry point
│   ├── db.ts             # Database operations
│   ├── email.ts          # Email sending
│   ├── cron.ts           # Scheduled tasks
│   ├── timezone.ts       # Timezone utilities
│   └── types.ts          # TypeScript types
├── scripts/
│   ├── setup.sh          # Setup automation
│   └── test-api.sh       # API testing
├── schema.sql            # Database schema
├── wrangler.toml         # Cloudflare config
├── package.json          # Dependencies
└── README.md             # This file

🔐 安全

  • 基于电子邮件的用户标识
  • 每个用户的数据隔离
  • HTTPS加密(Cloudflare默认)
  • 基于环境的秘密
  • 无需身份验证(电子邮件作为标识符)

生产建议:

  • 添加API令牌身份验证
  • 实施速率限制
  • 添加审核日志记录
  • 使用CORS白名单

🌍 时区处理

  • 服务器:所有时间均以UTC存储
  • 用户:以用户配置的时区显示的时间
  • 转换:自动双向转换
  • 格式:IANA时区数据库(例如“亚洲/上海”)

📧 电子邮件服务设置

使用重新发送(推荐)

  1. 注册地址:https://resend.com
  2. 验证您的域名
  3. 获取API密钥
  4. 更新 src/email.ts (已配置为重新发送)

使用SendGrid

  1. 注册地址:https://sendgrid.com
  2. 获取API密钥
  3. 更新 src/email.ts 使用SendGrid API

看 部署.md 详细说明。

🐛 故障排除

数据库连接失败

# Check database ID in wrangler.toml
wrangler d1 list

# Verify tables exist
wrangler d1 execute mcp-todo-db --remote --command "SELECT name FROM sqlite_master WHERE type='table'"

电子邮件未发送

# Check logs
wrangler tail

# Verify email service configuration
# Check src/email.ts implementation

时区问题

  • 使用IANA格式:“亚洲/上海”✅
  • 请勿使用:“GMT+8”❌
  • 完整列表:https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

📈 演出

  • Cloudflare员工:全球边缘网络
  • D1数据库:使用索引优化SQLite
  • 工作排程:高效的5分钟间隔
  • 电子邮件:带有重试逻辑的异步发送

🤝 贡献

欢迎投稿!拜托:

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

📄 许可证

MIT许可证-请参阅 许可证 详细信息文件

🙏 致谢

📞 支持

  • 问题: GitHub问题
  • 文档:参见 文档 文件夹
  • 健康检查: https://your-worker.workers.dev/health

🗺️ 路线图

  • []API令牌身份验证
  • []任务类别和筛选器
  • []重复任务
  • []任务附件
  • []任务共享
  • []统计和报告
  • []移动应用程序集成
  • []Webhook支持

由...制作❤️ 对于MCP社区

如果你觉得这个项目有用,请⭐ 把它放在GitHub上!