Skip to main content
Glama
README.md12.9 kB
# ClickUp MCP 服务器 **由 eBrook Group 开发** **版权所有 © 2026 eBrook Group (https://www.ebrook.com.tw)** --- ## 概述 **ClickUp MCP 服务器**是一个模型上下文协议(MCP)服务器,提供与 ClickUp 任务管理 API 的无缝集成。它使 AI 助手和自动化工具能够通过标准化接口与 ClickUp 任务交互、分析工作流并管理项目数据。 ### 核心功能 - **任务管理**:检索详细的任务信息、更新状态和添加评论 - **工作流分析**:分析任务进度、依赖关系、时间跟踪和风险因素 - **自定义字段**:更新自定义字段,如 GitHub 分支名称 - **速率限制**:内置速率限制以遵守 ClickUp API 约束(100 次请求/分钟) - **类型安全**:完整的 TypeScript 实现,具有严格的类型检查 - **错误处理**:全面的错误处理和日志记录 - **自定义任务 ID**:支持数字和自定义任务 ID(例如 ST2IN1-123) --- ## 目录 - [安装](#安装) - [配置](#配置) - [使用](#使用) - [可用工具](#可用工具) - [开发](#开发) - [API 参考](#api-参考) - [故障排除](#故障排除) - [许可证](#许可证) --- ## 安装 ### 系统要求 - **Node.js**:18.0.0 或更高版本 - **TypeScript**:5.6.0 或更高版本 - **ClickUp API 令牌**:个人 API 令牌(以 `pk_` 开头) ### 安装依赖 ```bash npm install ``` ### 构建项目 ```bash npm run build ``` --- ## 配置 ### 环境变量 创建 `.env` 文件或设置以下环境变量: | 变量 | 必需 | 描述 | 示例 | |------|------|------|------| | `CLICKUP_TOKEN` | **是** | ClickUp 个人 API 令牌(格式:`pk_xxxxx`) | `pk_12345678_ABCDEFGHIJKLMNOPQRSTUVWXYZ` | | `CLICKUP_TEAM_ID` | 推荐 | 团队/工作空间 ID(自定义任务 ID 必需) | `123456789` | ### 获取 ClickUp API 令牌 1. 登录 ClickUp 2. 进入**设置** → **应用** 3. 在 **API 令牌**下点击**生成** 4. 复制令牌(以 `pk_` 开头) ### 获取团队 ID 1. 进入你的 ClickUp 工作空间 2. 点击**设置** → **工作空间** 3. 你的团队 ID 在工作空间设置 URL 或 API 响应中可见 ### MCP 客户端配置 #### Claude Desktop 配置 添加到 Claude Desktop 配置文件: **macOS**:`~/Library/Application Support/Claude/claude_desktop_config.json` **Windows**:`%APPDATA%\Claude\claude_desktop_config.json` ```json { "mcpServers": { "clickup": { "command": "node", "args": ["/path/to/clickup-mcp/dist/index.js"], "env": { "CLICKUP_TOKEN": "pk_your_token_here", "CLICKUP_TEAM_ID": "your_team_id_here" } } } } ``` #### Cursor 配置 添加到 Cursor MCP 配置: ```json { "mcpServers": { "clickup": { "command": "node", "args": ["/path/to/clickup-mcp/dist/index.js"], "env": { "CLICKUP_TOKEN": "pk_your_token_here", "CLICKUP_TEAM_ID": "your_team_id_here" } } } } ``` --- ## 使用 ### 启动服务器 #### 生产模式 ```bash npm run build npm start ``` #### 开发模式 ```bash npm run dev ``` ### 基本示例 配置好 MCP 客户端后,你可以使用自然语言与 ClickUp 交互: - "获取任务 ST2IN1-123 的详细信息" - "分析任务 8675309 的工作流" - "将任务 ST2IN1-456 的状态更新为'进行中'" - "将任务 123 的 GitHub 分支设置为 'feature/new-feature'" - "向任务 ST2IN1-789 添加评论'审核完成'" --- ## 可用工具 ### 1. `get_task_details`(获取任务详情) 获取 ClickUp 任务的全面信息。 **参数:** - `task_id`(字符串,必需):ClickUp 任务 ID(数字或自定义格式,如 `ST2IN1-123`) **返回:** - 任务 ID、名称、状态 - 描述和 URL - 创建者和指派人 - 标签和优先级 - 截止日期 - 预估时间和已用时间 - 自定义字段 - 依赖项数量 - 列表、文件夹和空间信息 **示例:** ```typescript { "task_id": "ST2IN1-123" } ``` --- ### 2. `analyze_workflow`(分析工作流) 分析任务的工作流,提供见解和建议。 **参数:** - `task_id`(字符串,必需):ClickUp 任务 ID **返回:** - **进度分析**:当前状态和预估进度百分比 - **时间分析**: - 创建后天数和最后更新天数 - 预估时间与已用时间 - 剩余小时数 - **团队分析**:创建者、指派人、关注者 - **依赖项分析**:被阻塞、阻塞中、依赖于 - **风险因素**:逾期、过时、未分配、超预算 - **建议**:可操作的改进建议 **示例:** ```typescript { "task_id": "8675309" } ``` --- ### 3. `update_status`(更新状态) 更新任务的状态。 **参数:** - `task_id`(字符串,必需):ClickUp 任务 ID - `status`(字符串,必需):新状态值(例如,"进行中"、"完成"、"已阻塞") **验证:** - 状态必须是字母数字字符,包含下划线和空格 - 最多 100 个字符 **示例:** ```typescript { "task_id": "ST2IN1-123", "status": "in progress" } ``` --- ### 4. `update_github_branch`(更新 GitHub 分支) 更新任务的 GitHub 分支自定义字段。 **参数:** - `task_id`(字符串,必需):ClickUp 任务 ID - `branch_name`(字符串,必需):GitHub 分支名称 **验证:** - 分支名称只能包含字母数字字符、斜杠、连字符和下划线 - 最多 255 个字符 **示例:** ```typescript { "task_id": "ST2IN1-123", "branch_name": "feature/add-login-page" } ``` **注意:**此工具需要在 ClickUp 工作空间中存在名为"GitHub Branch"的自定义字段。 --- ### 5. `add_comment`(添加评论) 向 ClickUp 任务添加评论。 **参数:** - `task_id`(字符串,必需):ClickUp 任务 ID - `comment_text`(字符串,必需):评论内容 **验证:** - 评论文本不能为空 - 最多 10,000 个字符 **示例:** ```typescript { "task_id": "ST2IN1-123", "comment_text": "已审核并批准。准备部署。" } ``` --- ## 开发 ### 项目结构 ``` clickup-mcp/ ├── src/ │ ├── config/ │ │ └── env.ts # 环境配置 │ ├── services/ │ │ └── clickup.ts # ClickUp API 服务 │ ├── tools/ │ │ ├── get-task-details.ts # 获取任务详情工具 │ │ ├── analyze-workflow.ts # 工作流分析工具 │ │ ├── update-status.ts # 更新状态工具 │ │ ├── update-github-branch.ts # 更新分支字段工具 │ │ └── add-comment.ts # 添加评论工具 │ ├── types/ │ │ └── index.ts # TypeScript 类型定义 │ ├── utils/ │ │ ├── logger.ts # 日志工具 │ │ ├── rate-limiter.ts # 速率限制 │ │ ├── error-sanitizer.ts # 错误清理 │ │ └── slugify.ts # 字符串工具 │ ├── server.ts # MCP 服务器设置 │ └── index.ts # 入口点 ├── dist/ # 编译后的 JavaScript(自动生成) ├── package.json ├── tsconfig.json └── README.md ``` ### 可用脚本 | 脚本 | 描述 | |------|------| | `npm run build` | 编译 TypeScript 到 JavaScript | | `npm start` | 启动服务器(生产模式) | | `npm run dev` | 启动服务器并热重载(开发模式) | | `npm run type-check` | 运行 TypeScript 类型检查,不生成文件 | | `npm run lint` | 运行 TypeScript 编译器检查 | | `npm run clean` | 删除编译文件 | ### 代码风格和约定 - **TypeScript**:启用严格模式,进行全面的类型检查 - **模块系统**:ES 模块(NodeNext) - **编译目标**:ES2022 - **格式化**:遵循 TypeScript 最佳实践 - **错误处理**:所有错误都被捕获并正确清理 - **日志记录**:使用提供的日志工具(`debug`、`info`、`error`) ### 添加新工具 1. 在 `src/tools/` 中创建新文件(例如 `my-tool.ts`) 2. 实现工具处理函数 3. 在 `src/server.ts` 中使用 `server.tool()` 注册工具 4. 使用 Zod 定义参数模式 5. 如需要,在 `src/types/index.ts` 中更新 TypeScript 类型 **示例:** ```typescript // src/tools/my-tool.ts import type { ClickUpService } from "../services/clickup.js"; import type { AppConfig } from "../config/env.js"; export async function handleMyTool( taskId: string, config: AppConfig, clickUpService: ClickUpService ) { // 实现逻辑 } ``` ```typescript // src/server.ts import { handleMyTool } from "./tools/my-tool.js"; server.tool( "my_tool", "我的工具描述", { task_id: z.string().min(1).max(100).describe("任务 ID"), }, async (args) => { return await handleMyTool(args.task_id, config, clickUpService); } ); ``` --- ## API 参考 ### ClickUpService 类 与 ClickUp API 交互的主要服务类。 #### 方法 ##### `getTask(taskId: string): Promise<ClickUpApiResponse>` 通过 ID 获取任务。 ##### `updateStatus(taskId: string, status: string): Promise<ClickUpApiResponse>` 更新任务的状态。 ##### `updateCustomField(taskId: string, fieldId: string, value: string): Promise<ClickUpApiResponse>` 更新自定义字段值。 ##### `addComment(taskId: string, commentText: string): Promise<ClickUpApiResponse>` 向任务添加评论。 ##### `findCustomFieldId(taskBody: unknown, fieldName: string): string | null` 通过名称查找自定义字段 ID。 ##### `formatTaskDetails(task: ClickUpTaskResponse): TaskDetailsSummary` 将任务数据格式化为可读摘要。 ##### `analyzeTaskWorkflow(task: ClickUpTaskResponse): TaskWorkflowAnalysis` 分析任务工作流并提供见解。 ### 速率限制 该服务实现速率限制以遵守 ClickUp 的 API 约束: - **限制**:每分钟 100 次请求 - **实现**:令牌桶算法 - **错误代码**:超出限制时返回 `RATE_LIMIT_001` --- ## 故障排除 ### 常见问题 #### 1. "CLICKUP_TOKEN 未配置" **解决方案**:确保在环境配置中正确设置了 ClickUp API 令牌。 ```bash # 检查令牌格式(应以 pk_ 开头) echo $CLICKUP_TOKEN ``` #### 2. "自定义任务 ID 需要团队 ID" **解决方案**:使用自定义任务 ID(例如 ST2IN1-123)时,设置 `CLICKUP_TEAM_ID` 环境变量。 #### 3. 找不到任务(404 错误) **可能原因**: - 任务 ID 不正确 - 任务已归档或删除 - 自定义任务 ID 缺少团队 ID - 权限不足 **解决方案**: - 验证任务 ID 是否正确 - 检查 API 令牌是否有权访问该任务 - 确保为自定义 ID 设置了 `CLICKUP_TEAM_ID` #### 4. 超出速率限制(429 错误) **解决方案**:服务器实现了自动速率限制。稍等片刻再试。限制每分钟重置一次。 #### 5. 找不到"GitHub Branch"字段 **解决方案**:在 ClickUp 工作空间中创建名为"GitHub Branch"的自定义字段: 1. 进入列表/文件夹/空间设置 2. 点击**自定义字段** → **添加字段** 3. 创建一个名为"GitHub Branch"的文本字段 ### 调试日志 调试消息记录到 stderr。查看详细日志: ```bash # 在开发模式下查看日志 npm run dev 2>&1 | tee debug.log # 过滤特定的调试消息 npm run dev 2>&1 | grep "\[DEBUG\]" ``` --- ## 技术细节 ### 依赖项 - **@modelcontextprotocol/sdk**:MCP 协议实现 - **zod**:模式验证和类型安全 - **TypeScript**:类型安全开发 - **Node.js Fetch API**:HTTP 请求(内置) ### TypeScript 配置 - **目标**:ES2022 - **模块**:NodeNext(ES 模块) - **严格模式**:启用所有严格检查 - **源映射**:启用调试 - **声明文件**:为库使用生成 ### 安全考虑 - API 令牌永远不会记录或在错误消息中暴露 - 所有用户输入都使用 Zod 模式验证 - 错误消息经过清理以防止信息泄漏 - 速率限制防止 API 滥用 --- ## 贡献 ### 开发工作流 1. Fork 仓库 2. 创建功能分支(`git checkout -b feature/my-feature`) 3. 进行更改 4. 运行类型检查:`npm run type-check` 5. 构建项目:`npm run build` 6. 测试更改 7. 使用描述性消息提交 8. 推送到你的 fork 9. 打开 Pull Request ### 提交信息格式 遵循格式:`ST2IN1-[票号] 简短描述` 示例:`ST2IN1-12345 添加任务模板支持` --- ## 许可证 MIT License 版权所有 © 2026 eBrook Group (https://www.ebrook.com.tw) --- ## 支持 如有问题、疑问或功能请求,请联系: **eBrook Group** 网站:https://www.ebrook.com.tw --- ## 更新日志 ### 版本 3.1.0 - 首次公开发布 - 5 个核心工具:get_task_details、analyze_workflow、update_status、update_github_branch、add_comment - 速率限制实现 - 自定义任务 ID 支持 - 全面的错误处理和日志记录 - 完整的 TypeScript 实现,具有严格的类型检查

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tangbodie/clickup-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server