Skip to main content
Glama
README.md
# 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 实现,具有严格的类型检查