MCP Google 任务
一个模型上下文协议(MCP)服务器,提供与Google Tasks API的集成,使AI助手能够通过OAuth 2.0认证访问来管理任务和任务列表。
特点/功能
- OAuth 2.0 认证安全验证Google帐户
- 任务管理创建、读取、更新和删除任务
- 任务列表管理管理多个任务列表
- MCP协议用于AI助手集成的标准MCP服务器实现
先决条件
- Node.js 18 或更高版本
- 一个已启用Tasks API的Google Cloud项目
- OAuth 2.0 凭证(客户端ID和客户端密钥)
设置
1. Google Cloud Console 设置
- 首选 Google Cloud 控制台
- 创建一个新项目或选择一个现有项目
- 启用Google任务API:
- 导航至“APIs和服务”>“库” - 搜索“Google Tasks API” - 点击“启用”
- 创建OAuth 2.0凭据:
- 进入“APIs和服务”>“凭据” - 点击“创建凭据”>“OAuth 客户端 ID” - 选择“桌面应用”作为应用程序类型 - 下载凭据JSON文件或记下客户端ID和客户端密钥
2. 项目安装
# Clone the repository
git clone https://github.com/KasperskyZiv/MCPGoogleTasks.git
cd MCPGoogleTasks
# Install dependencies
npm install
# Build the project
npm run build3. 配置
创建一个 .env 项目根目录中的文件:
cp .env.example .env编辑 .env 并添加您的Google OAuth凭据:
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REDIRECT_URI=http://localhost:3000/oauth2callback
TOKEN_PATH=./token.json4. 认证
在使用MCP服务器之前,您需要进行身份验证:
- 服务器提供了一个
get_auth_url返回OAuth URL的工具 - 在浏览器中访问该URL并授权该应用程序
- 授权后,您将收到一个代码
- 使用代码完成身份验证(这将保存一个token.json文件)
注:您首次使用服务器时,需要完成此OAuth流程。
可用的MCP工具
服务器提供以下工具:
认证
get_auth_url- 获取OAuth 2.0授权URL
任务列表
list_task_lists- 列出所有任务列表create_task_list- 创建一个新的任务列表
- 参数: title
任务
list_tasks- 在任务列表中列出任务
- 参数: taskListId, showCompleted (可选)
create_task- 创建一个新任务
- 参数: taskListId, title, notes (可选), due (可选)
update_task- 更新现有任务
- 参数: taskListId, taskId, title (可选), notes (可选), status (可选), due (可选)
delete_task- 删除任务
- 参数: taskListId, taskId
发展
# Build TypeScript
npm run build
# Watch mode (rebuild on changes)
npm run watch
# Run in development mode
npm run dev测试
该项目包括使用Jest进行的全面单元测试,其中使用了模拟数据(无需真实凭据):
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage report
npm run test:coverage测试覆盖率:
- ✅ \
utils.ts\翻译成中文是:“工具文件(TypeScript版)” - RTL(从右到左)文本格式化工具 - ✅ auth.ts 翻译为中文是:“认证文件(或模块).ts” 或 “身份验证文件(或模块).ts”,其中“.ts”表示这是一个TypeScript文件 - OAuth 认证管理器(模拟)
- ✅ tasks-client.ts 翻译为中文是:“任务客户端文件(或:任务客户端脚本)” 根据上述信息,以下是翻译结果:Google Tasks API 客户端(模拟)
所有测试均使用模拟数据,无需真实的Google凭据或令牌。
使用选项
选项1:标准I/O传输(本地MCP客户端)
对于本地MCP客户端,如Claude Desktop:
{
"mcpServers": {
"google-tasks": {
"command": "node",
"args": ["/path/to/MCPGoogleTasks/dist/index.js"],
"env": {
"GOOGLE_CLIENT_ID": "your-client-id",
"GOOGLE_CLIENT_SECRET": "your-client-secret"
}
}
}
}选项2:HTTP/SSE传输(通过ngrok集成OpenAI)
对于OpenAI的ChatGPT或自定义GPT:
- 启动HTTP服务器:
npm run dev:http- 通过ngrok暴露(服务/端口):
ngrok http 3000 --domain=your-domain.ngrok-free.app- 配置OpenAI:
- 终端(或终点): https://your-domain.ngrok-free.app/mcp/sse - 认证方式:Bearer Token(携带令牌) - 代币:您的 MCP_TOKEN 来自 .env
见 NGROK_SETUP.md(文件名,可译为“NGROK设置指南.md”或保持原文件名不变,具体取决于上下文是否需要翻译文件名) 请参阅完整的安全设置指南。
安全功能(HTTP模式)
- ✅ 携带令牌认证 - 基于令牌的安全访问
- ✅ 默认仅读模式 - 仅限列出/获取操作(更安全)
- ✅ 速率限制 - 每15分钟100个请求
- ✅ CORS限制 - 仅限于您的ngrok域名
- ✅ 安全头部(或安全响应头) - Helmet.js 保护
- ✅ 通过ngrok使用HTTPS - 加密流量
- ✅ 本地绑定 - 未连接到局域网
建筑学
- src/index.ts 翻译为中文是:源代码目录下的索引 TypeScript 文件 - 本地客户端使用的MCP服务器(stdio传输)
- \
src/http-server.ts\翻译成中文是:“源代码目录下的 HTTP 服务器 TypeScript 文件”。不过,通常在技术文档或代码环境中,我们可能会直接保留文件名的原样,因为文件名本身已经具有一定的语义信息,直接翻译可能并不增加太多理解价值。但在这里,为了符合您的要求,给出了翻译。在实际应用中,文件名往往保持不变 - 用于OpenAI的MCP服务器(HTTP/SSE传输) - src/auth.ts 翻译为中文是:“源文件/auth.ts” 或者更简洁地表述为 “auth.ts 源文件”。不过,在技术文档或代码上下文中,通常直接使用文件名“auth.ts”来指代该文件,无需额外翻译文件扩展名。所以,如果仅从文件名的角度来看,可以简单地说是“auth.ts 文件” - OAuth 2.0 认证管理
- src/tasks-client.ts 翻译为中文是:“源代码/tasks客户端.ts” 或者更简洁地表述为 “src/任务客户端代码.ts”(但通常我们保留文件扩展名的原样,所以更常见的翻译或表述方式是直接保留原文件名,仅说明其含义为“任务客户端的源代码文件”)。不过,在实际应用中,我们通常不会直接翻译文件名,而是根据上下文来解释其用途。所以,这里的翻译重点在于解释文件名的含义,即这是一个用于客户端任务处理的TypeScript源代码文件 - Google Tasks API 客户端封装
- \
src/utils.ts\翻译成中文是:“源文件/utils.ts”。不过,通常在中文技术文档或讨论中,我们可能会直接保留文件名的原样,即“src/utils.ts”,因为文件名本身具有技术含义,直接翻译可能失去其特定意义。但在这里,为了符合翻译要求,可以给出这样的翻译 - RTL(从右到左)文本格式化工具 - src/scripts/ 翻译为中文是:“源代码/脚本/” 或者更简洁地表达为 “脚本源目录/” - 用于身份验证和查看任务的辅助脚本
安全注意事项
- 永远不要让你的
.env文件或token.json进行版本控制 - 确保您的OAuth凭证安全
- 该
token.json文件中包含您的访问令牌和刷新令牌 - 请妥善保护 - 令牌存储在本地,并在需要时自动刷新
许可证
AGPL-3.0 许可证
