行政支持助理(AI VA)-MCP服务器
这是一个由人工智能驱动的虚拟助手,通过 模型上下文协议(MCP) 部署在Cloudflare Workers上的服务器。它与Gmail、谷歌日历、谷歌云端硬盘、Notion和Slack集成,处理日常管理工作,让您专注于构建和销售。
它做什么
- 管理收件箱和日历,保持文档的有序性,并处理日常管理工作,使您专注于构建和销售。
- 典型的工作流程:分类电子邮件、起草回复、安排会议、创建和维护SOP、更新任务跟踪器、总结会议并保持文件整洁。
关键集成(推荐堆栈)
- 电子邮件:Gmail
- 日历:谷歌日历
- 文档和存储:谷歌云端硬盘
- 知识库/笔记:Notion,谷歌云端硬盘
- 团队沟通:松弛
- 任务和项目:概念(任务)
您可以将其部署到自己的Cloudflare帐户,在创建OAuth客户端应用程序后,您将拥有一个功能齐全的远程MCP服务器,可以访问Gmail、Google Calendar、Google Drive、Notion和Slack。用户使用其Google帐户进行身份验证,并可以逐步添加其他服务集成。
您可以将此作为参考示例,了解如何使用以下方法将多个OAuth提供程序与部署到Cloudflare的MCP服务器集成 workers-oauth-provider 图书馆.
MCP服务器(由 Cloudflare Workers):
- 充当OAuth _服务器_ 您的MCP客户
- 充当OAuth _客户_ 多个OAuth提供商(谷歌、Notion、Slack)
- 使用Cloudflare D1进行持久用户数据和集成管理
- 支持增量OAuth流,用于按需添加服务
\[!警告\] 这是一个演示模板,旨在帮助您快速入门。虽然我们已经实施了几种安全控制, 在部署到生产环境之前,您必须实施所有预防性和深度防御安全措施。请查看我们的综合安全指南: 保护MCP服务器
特性
- 🔐 Google OAuth身份验证 -使用Google帐户进行主身份验证
- 📧 Gmail集成 -发送、阅读、搜索和管理电子邮件
- 📅 Google 日历 -创建、更新和管理日历事件
- 📁 Google 云端硬盘 -访问和管理Google Drive中的文件
- 📝 概念整合 -访问和管理Notion页面和数据库
- 💬 Slack集成 -发送消息和管理Slack工作区
- 🗄️ D1数据库 -用户数据和集成的持久存储
- 🔄 增量授权 -根据需要添加集成,而不是一次全部添加
- 💳 计费就绪 -数据库架构支持订阅和使用情况跟踪
入门指南
克隆仓库并安装依赖项:
git clone
cd
npm install安装说明
1.创建OAuth应用程序
谷歌OAuth应用程序
- 首选 谷歌云控制台
- 创建新项目或选择现有项目
- 启用以下API:
- Google+API(用于用户配置文件) - Gmail API - 谷歌日历API - Google Drive API
- 创建OAuth 2.0凭据:
- 应用程序类型:Web应用程序 - 授权重定向URI: - 发展: http://localhost:8787/callback/google, http://localhost:8787/callback/gmail, http://localhost:8787/callback/calendar, http://localhost:8787/callback/drive - 生产: https://.workers.dev/callback/google, https://.workers.dev/callback/gmail等等。
- 注意你的 客户端ID 和 客户端密钥
Notion OAuth应用程序
- 首选 概念开发者
- 创建新的集成
- 设置 重定向URI 致:
- 发展: http://localhost:8787/callback/notion - 生产: https://.workers.dev/callback/notion
- 注意你的 OAuth客户端ID 和 OAuth客户端密码
Slack OAuth应用程序
- 首选 松弛API
- 创建新应用程序
- 在...之下 OAuth和权限,添加重定向URL:
- 发展: http://localhost:8787/callback/slack - 生产: https://.workers.dev/callback/slack
- 添加以下内容 Bot令牌范围:
- channels:read, channels:write, channels:history - chat:write, files:write - groups:read, groups:write, groups:history - im:read, im:write, im:history - mpim:read, mpim:write, mpim:history - reactions:write, search:read, users:read
- 注意你的 客户端ID 和 客户端密钥
2.设置Cloudflare资源
创建KV命名空间
# OAuth state storage
wrangler kv namespace create "OAUTH_KV"
# Provider token storage (optional - can use D1 instead)
wrangler kv namespace create "PROVIDERS_KV"更新 wrangler.toml 使用返回的ID。
创建D1数据库
# Create the database
wrangler d1 create my-mcp-database这将输出:
[[d1_databases]]
binding = "DB"
database_name = "my-mcp-database"
database_id = "xxxx-xxxx-xxxx-xxxx"将此添加到您的 wrangler.toml.
运行数据库迁移
# Generate migration files
npx drizzle-kit generate
# Apply migrations locally
wrangler d1 migrations apply my-mcp-database --local
# Apply migrations to production (when ready)
wrangler d1 migrations apply my-mcp-database --remote验证表是否已创建:
wrangler d1 execute my-mcp-database --local --command "SELECT name FROM sqlite_master WHERE type='table'"您应该看到: user, session, account, verification, integration, subscription, usage
3.配置环境变量
促进地方发展
创建一个 .dev.vars 文件:
# Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# Notion OAuth
NOTION_CLIENT_ID=your_notion_client_id
NOTION_CLIENT_SECRET=your_notion_client_secret
# Slack OAuth
SLACK_CLIENT_ID=your_slack_client_id
SLACK_CLIENT_SECRET=your_slack_client_secret
# Auth & Encryption
AUTH_SECRET=your_random_secret_minimum_32_chars
COOKIE_ENCRYPTION_KEY=your_cookie_encryption_key
# Server URL
SERVER_URL=http://localhost:8787生成安全机密:
# Generate AUTH_SECRET
openssl rand -hex 32
# Generate COOKIE_ENCRYPTION_KEY
openssl rand -hex 32用于生产
通过牧马人设置秘密:
wrangler secret put GOOGLE_CLIENT_ID
wrangler secret put GOOGLE_CLIENT_SECRET
wrangler secret put NOTION_CLIENT_ID
wrangler secret put NOTION_CLIENT_SECRET
wrangler secret put SLACK_CLIENT_ID
wrangler secret put SLACK_CLIENT_SECRET
wrangler secret put AUTH_SECRET
wrangler secret put COOKIE_ENCRYPTION_KEY更新 SERVER_URL 在 wrangler.toml:
[vars]
SERVER_URL = "https://.workers.dev"4.更新wrangler.toml
您的完整 wrangler.toml 应该看起来像:
name = "my-mcp-server"
main = "src/index.ts"
compatibility_date = "2024-01-01"
# D1 Database
[[d1_databases]]
binding = "DB"
database_name = "my-mcp-database"
database_id = "xxxx-xxxx-xxxx-xxxx"
# KV Namespaces
[[kv_namespaces]]
binding = "OAUTH_KV"
id = "your-oauth-kv-id"
[[kv_namespaces]]
binding = "PROVIDERS_KV"
id = "your-providers-kv-id"
# Environment Variables
[vars]
SERVER_URL = "http://localhost:8787"发展
在本地运行
wrangler dev --local服务器将在以下时间可用 http://localhost:8787
使用MCP检查员进行测试
npx @modelcontextprotocol/inspector@latest进入 http://localhost:8787/sse 然后点击连接。您将被重定向到Google进行身份验证。
测试数据库连接
访问 http://localhost:8787/test-db 以验证数据库连接。
部署
部署到生产
# Apply database migrations to production
wrangler d1 migrations apply my-mcp-database --remote
# Deploy the worker
wrangler deploy您的MCP服务器将在 https://.workers.dev
更新OAuth重定向URI
部署后,更新所有OAuth应用重定向URI以使用您的生产URL:
- 谷歌
https://.workers.dev/callback/google等等。 - 概念:
https://.workers.dev/callback/notion - 松弛:
https://.workers.dev/callback/slack
使用MCP服务器
使用克劳德桌面
打开克劳德桌面设置:设置→ 开发者→ 编辑配置
添加您的MCP服务器:
{
"mcpServers": {
"admin-assistant": {
"command": "npx",
"args": ["mcp-remote", "https://.workers.dev/sse"]
}
}
}重新启动克劳德桌面。系统将提示您使用Google进行身份验证。
带光标
在光标设置中:
- 类型:命令
- 命令:
npx mcp-remote https://.workers.dev/sse
注意:Cursor不支持身份验证流,因此您需要使用 mcp-remote.
可用工具
身份验证后,以下工具可用:
谷歌集成
userInfoGoogle-获取经过身份验证的用户信息
Gmail工具
send_email-发送电子邮件read_email-阅读电子邮件内容search_emails-使用Gmail查询语法搜索电子邮件modify_email-移动到文件夹、存档、应用标签delete_email-永久删除电子邮件list_email_labels-列出所有Gmail标签create_label,update_label,delete_label-标签管理batch_modify_emails,batch_delete_emails-批量操作
谷歌日历工具
create_event-创建日历事件list_events-列出即将举行的活动update_event-更新现有事件delete_event-删除事件list_calendars-列出所有日历
谷歌云端硬盘工具
search_files-搜索文件get_file-获取文件元数据download_file-下载文件内容upload_file-上传新文件create_folder-创建文件夹delete_file-删除文件
概念工具
search_notion-搜索页面和数据库get_page-获取页面内容create_page-创建新页面update_page-更新现有页面
Slack工具
send_slack_message-向频道发送消息list_channels-列出工作区频道search_messages-搜索邮件历史记录
增量集成流程
- 初始设置:用户通过Google进行身份验证
- 查看集成:使用
listIntegrations查看可用服务的工具 - 添加服务:单击“连接”链接以授权其他服务
- 使用工具:一旦连接,特定于服务的工具就可用
与克劳德的对话示例:
You: "List my available integrations"
Claude: [Shows integration dashboard]
You: "I need to send an email"
Claude: "You'll need to connect Gmail first. Please visit [auth link]"
[After connecting Gmail]
You: "Send an email to john@example.com"
Claude: [Uses send_email tool successfully]数据库模式
服务器使用Cloudflare D1和下表:
- 用户 -来自Google OAuth的用户配置文件
- 会话 -活跃用户会话
- 账户 -OAuth帐户连接
- 整合 -服务集成(Gmail、日历等)
- 订阅 -用户订阅计划(已准备好计费)
- 用法 -每个用户/月的使用情况跟踪
安全特性
- ✅ 一次性令牌的CSRF保护
- ✅ 状态约束以防止会话固定
- ✅ 使用HttpOnly和Secure标志进行安全cookie处理
- ✅ OAuth状态验证
- ✅ 数据库中的令牌加密
- ✅ 通过Google OAuth进行电子邮件验证
故障排除
“未找到D1数据库绑定‘DB’”
- 验证
wrangler.toml有[[d1_databases]]部分 - 重启
wrangler dev变更后wrangler.toml - 检查绑定名称是否准确
"DB"(区分大小写)
“无法读取undefined的属性(读取'prepare')”
- 运行迁移:
wrangler d1 migrations apply my-mcp-database --local - 验证表是否存在:
wrangler d1 execute my-mcp-database --local --command "SELECT name FROM sqlite_master WHERE type='table'"
“找不到用户”
- 在添加其他集成之前,请先与Google进行身份验证
- 检查用户的数据库:
wrangler d1 execute my-mcp-database --local --command "SELECT * FROM user"
“数据库已锁定”
pkill wrangler
rm -rf .wrangler/state/v3/d1
wrangler dev --local项目结构
.
├── src/
│ ├── index.ts # MCP server and tool registration
│ ├── oauth-handler.ts # OAuth flow handling
│ ├── workers-oauth-utils.ts # OAuth utilities
│ ├── db/
│ │ ├── schema.ts # Database schema
│ │ └── client.ts # D1 client wrapper
│ ├── services/
│ │ ├── integrations.ts # Integration management
│ │ └── billing.ts # Subscription & usage tracking
│ └── tools/
│ ├── gmail/ # Gmail tools
│ ├── google-calendar/ # Calendar tools
│ ├── google-drive/ # Drive tools
│ ├── notion/ # Notion tools
│ └── slack/ # Slack tools
├── drizzle/
│ └── migrations/ # Database migrations
├── wrangler.toml # Cloudflare configuration
├── drizzle.config.ts # Drizzle ORM configuration
└── package.json它是如何工作的?
OAuth提供者
OAuth Provider库是Cloudflare Workers的完整OAuth 2.1服务器实现。它处理:
- 对MCP客户端进行身份验证
- 管理与多个OAuth提供商(Google、Notion、Slack)的连接
- 代币发行、验证和刷新
- D1数据库中的安全令牌存储
数据库存储
用户数据和OAuth令牌保存在Cloudflare D1中:
- 用户记录 基于Google身份验证创建
- 集成令牌 按用户和服务存储
- 订阅 用于计费管理
- 使用指标 用于速率限制和分析
增量OAuth
用户从谷歌身份验证开始,然后按需添加服务:
- 初始Google身份验证创建用户记录
- 通过“连接”链接添加的其他服务
- 每个集成都单独保存在数据库中
- 随着集成的添加,工具变得可用
耐用MCP
使用Cloudflare的持久对象扩展MCP:
- 持续状态管理
- 通过以下方式验证用户上下文
this.props - 基于集成的有条件工具可用性
- 客户端和服务器之间的安全通信
贡献
欢迎投稿!请在提交PR之前阅读我们的投稿指南。
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
支持
对于问题和疑问:
- 在GitHub上打开一个问题
- 检查现有问题的解决方案
- 查看上面的故障排除部分
路线图
- \[\]添加Polar集成以进行计费
- \[\]根据订阅级别实施速率限制
- \[\]添加前端
- \[\]实现令牌刷新自动化
