@xihe-lab/tapd-mcp-server 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +56 -7
  2. package/dist/integration-test.d.ts +10 -0
  3. package/dist/integration-test.d.ts.map +1 -0
  4. package/dist/integration-test.js +117 -0
  5. package/dist/integration-test.js.map +1 -0
  6. package/dist/tapd-client.d.ts +32 -1
  7. package/dist/tapd-client.d.ts.map +1 -1
  8. package/dist/tapd-client.js +96 -19
  9. package/dist/tapd-client.js.map +1 -1
  10. package/dist/tools/attachment.d.ts.map +1 -1
  11. package/dist/tools/attachment.js +35 -10
  12. package/dist/tools/attachment.js.map +1 -1
  13. package/dist/tools/board.d.ts +3 -0
  14. package/dist/tools/board.d.ts.map +1 -0
  15. package/dist/tools/board.js +98 -0
  16. package/dist/tools/board.js.map +1 -0
  17. package/dist/tools/bug.d.ts.map +1 -1
  18. package/dist/tools/bug.js +382 -7
  19. package/dist/tools/bug.js.map +1 -1
  20. package/dist/tools/changes.d.ts.map +1 -1
  21. package/dist/tools/changes.js +25 -34
  22. package/dist/tools/changes.js.map +1 -1
  23. package/dist/tools/comment.d.ts.map +1 -1
  24. package/dist/tools/comment.js +53 -3
  25. package/dist/tools/comment.js.map +1 -1
  26. package/dist/tools/custom-fields.d.ts.map +1 -1
  27. package/dist/tools/custom-fields.js +43 -36
  28. package/dist/tools/custom-fields.js.map +1 -1
  29. package/dist/tools/image.d.ts +3 -0
  30. package/dist/tools/image.d.ts.map +1 -0
  31. package/dist/tools/image.js +23 -0
  32. package/dist/tools/image.js.map +1 -0
  33. package/dist/tools/index.d.ts.map +1 -1
  34. package/dist/tools/index.js +12 -0
  35. package/dist/tools/index.js.map +1 -1
  36. package/dist/tools/iteration.d.ts.map +1 -1
  37. package/dist/tools/iteration.js +95 -6
  38. package/dist/tools/iteration.js.map +1 -1
  39. package/dist/tools/mini-comment.d.ts.map +1 -1
  40. package/dist/tools/mini-comment.js +18 -5
  41. package/dist/tools/mini-comment.js.map +1 -1
  42. package/dist/tools/mini-item.d.ts.map +1 -1
  43. package/dist/tools/mini-item.js +36 -11
  44. package/dist/tools/mini-item.js.map +1 -1
  45. package/dist/tools/mini-workspace.d.ts.map +1 -1
  46. package/dist/tools/mini-workspace.js +13 -4
  47. package/dist/tools/mini-workspace.js.map +1 -1
  48. package/dist/tools/program.d.ts +3 -0
  49. package/dist/tools/program.d.ts.map +1 -0
  50. package/dist/tools/program.js +27 -0
  51. package/dist/tools/program.js.map +1 -0
  52. package/dist/tools/relations.d.ts.map +1 -1
  53. package/dist/tools/relations.js +25 -30
  54. package/dist/tools/relations.js.map +1 -1
  55. package/dist/tools/release.d.ts.map +1 -1
  56. package/dist/tools/release.js +228 -2
  57. package/dist/tools/release.js.map +1 -1
  58. package/dist/tools/report.d.ts +3 -0
  59. package/dist/tools/report.d.ts.map +1 -0
  60. package/dist/tools/report.js +38 -0
  61. package/dist/tools/report.js.map +1 -0
  62. package/dist/tools/settings.d.ts.map +1 -1
  63. package/dist/tools/settings.js +379 -31
  64. package/dist/tools/settings.js.map +1 -1
  65. package/dist/tools/source.d.ts +3 -0
  66. package/dist/tools/source.d.ts.map +1 -0
  67. package/dist/tools/source.js +69 -0
  68. package/dist/tools/source.js.map +1 -0
  69. package/dist/tools/story.d.ts.map +1 -1
  70. package/dist/tools/story.js +650 -160
  71. package/dist/tools/story.js.map +1 -1
  72. package/dist/tools/task.d.ts.map +1 -1
  73. package/dist/tools/task.js +104 -11
  74. package/dist/tools/task.js.map +1 -1
  75. package/dist/tools/test.d.ts.map +1 -1
  76. package/dist/tools/test.js +505 -75
  77. package/dist/tools/test.js.map +1 -1
  78. package/dist/tools/timesheet.d.ts.map +1 -1
  79. package/dist/tools/timesheet.js +72 -11
  80. package/dist/tools/timesheet.js.map +1 -1
  81. package/dist/tools/user.d.ts.map +1 -1
  82. package/dist/tools/user.js +36 -4
  83. package/dist/tools/user.js.map +1 -1
  84. package/dist/tools/utility.d.ts +3 -0
  85. package/dist/tools/utility.d.ts.map +1 -0
  86. package/dist/tools/utility.js +132 -0
  87. package/dist/tools/utility.js.map +1 -0
  88. package/dist/tools/wiki.d.ts.map +1 -1
  89. package/dist/tools/wiki.js +75 -20
  90. package/dist/tools/wiki.js.map +1 -1
  91. package/dist/tools/workflow.d.ts.map +1 -1
  92. package/dist/tools/workflow.js +78 -6
  93. package/dist/tools/workflow.js.map +1 -1
  94. package/dist/tools/workspace.d.ts.map +1 -1
  95. package/dist/tools/workspace.js +93 -4
  96. package/dist/tools/workspace.js.map +1 -1
  97. package/package.json +2 -1
package/README.md CHANGED
@@ -33,13 +33,15 @@ TAPD 是腾讯敏捷研发管理平台,覆盖需求、计划、研发、测试
33
33
 
34
34
  #### 方式一:一键安装命令
35
35
 
36
- 注意替换 `your_access_token`、`your_workspace_id` `your_nick_name`:
36
+ 注意替换以下参数(必填项标记为 **必填**,其余可选)。`-s user` 为用户级配置(所有项目生效),改为 `-s project` 则仅当前项目生效:
37
37
 
38
38
  ```bash
39
39
  claude mcp add -s user tapd \
40
- --env TAPD_ACCESS_TOKEN=your_access_token \
41
- --env TAPD_DEFAULT_WORKSPACE_ID=your_workspace_id \
42
- --env TAPD_NICK_NAME=your_nick_name \
40
+ --env TAPD_ACCESS_TOKEN=your_access_token \ # 必填:个人访问令牌
41
+ --env TAPD_DEFAULT_WORKSPACE_ID=your_workspace_id \ # 必填:默认项目 ID
42
+ --env TAPD_NICK_NAME=your_nick_name \ # 推荐:用户昵称,用于 owner/creator 默认值
43
+ --env TAPD_DEFAULT_TASK_WORKITEM_TYPE_ID=your_task_type_id \ # 可选:默认 TASK 类型 ID,可通过 tapd_get_workitem_types 查询
44
+ --env TAPD_DEFAULT_STORY_WORKITEM_TYPE_ID=your_story_type_id \ # 可选:默认 STORY 类型 ID
43
45
  -- npx -y "@xihe-lab/tapd-mcp-server"
44
46
  ```
45
47
 
@@ -66,7 +68,9 @@ claude mcp remove tapd
66
68
  "TAPD_API_PASSWORD": "",
67
69
  "TAPD_API_BASE_URL": "https://api.tapd.cn",
68
70
  "TAPD_DEFAULT_WORKSPACE_ID": "",
69
- "TAPD_NICK_NAME": ""
71
+ "TAPD_NICK_NAME": "",
72
+ "TAPD_DEFAULT_STORY_WORKITEM_TYPE_ID": "",
73
+ "TAPD_DEFAULT_TASK_WORKITEM_TYPE_ID": ""
70
74
  }
71
75
  }
72
76
  }
@@ -101,6 +105,8 @@ claude mcp remove tapd
101
105
  | `TAPD_API_BASE_URL` | 否 | API 基础地址,默认 `https://api.tapd.cn` |
102
106
  | `TAPD_DEFAULT_WORKSPACE_ID` | 否 | 默认项目 ID,省去每次传 workspace_id |
103
107
  | `TAPD_NICK_NAME` | 否 | 用户昵称,作为 owner/creator 等参数的默认值 |
108
+ | `TAPD_DEFAULT_STORY_WORKITEM_TYPE_ID` | 否 | 默认 STORY 工作项类型 ID |
109
+ | `TAPD_DEFAULT_TASK_WORKITEM_TYPE_ID` | 否 | 默认 TASK 工作项类型 ID |
104
110
 
105
111
  注意:`TAPD_API_USER`/`TAPD_API_PASSWORD`(API 账号密码)与 `TAPD_ACCESS_TOKEN`(个人访问令牌)为两种调用方式,选一种即可。
106
112
 
@@ -109,7 +115,7 @@ claude mcp remove tapd
109
115
  | 模块 | 可用操作 | 示例 |
110
116
  |------|----------|------|
111
117
  | 项目 | 查询项目信息、项目列表、成员列表 | "查看我参与的项目" |
112
- | 需求 | 查询 / 创建 / 更新需求,统计数量 | "创建需求:用户登录功能" |
118
+ | 需求 | 查询 / 创建 / 更新需求,统计数量;创建需求时可指定 TASK 类型 ID 创建任务 | "创建需求:用户登录功能"、"创建任务并关联到父需求" |
113
119
  | 缺陷 | 查询 / 创建 / 更新缺陷,统计数量 | "查看我的未解决 Bug" |
114
120
  | 任务 | 查询 / 创建 / 更新任务,统计数量 | "把任务标记为已完成" |
115
121
  | 迭代 | 查询 / 创建 / 更新迭代,统计数量 | "当前迭代还有多少未完成" |
@@ -134,6 +140,14 @@ claude mcp remove tapd
134
140
 
135
141
  在 TAPD 开放平台检查应用权限,确保已勾选所需 API 的访问权限。
136
142
 
143
+ ### 创建任务时提示权限不足
144
+
145
+ 如果 OAuth Token 没有 `tasks::create` 权限,可以通过 `tapd_create_story` 工具传入 TASK 类型的 `workitem_type_id` 来创建任务(仅需 `stories::create` 权限):
146
+
147
+ > 用 tapd_create_story 创建一个任务,workitem_type_id 设为 TASK 类型
148
+
149
+ 可通过 `tapd_get_workitem_types` 查询项目中可用的 TASK 类型 ID。
150
+
137
151
  ### 支持 Basic Auth 吗
138
152
 
139
153
  支持。设置 `TAPD_API_USER` 和 `TAPD_API_PASSWORD` 即可,与 Access Token 二选一。
@@ -152,6 +166,8 @@ claude mcp add -s user tapd \
152
166
  --env TAPD_ACCESS_TOKEN=your_access_token \
153
167
  --env TAPD_DEFAULT_WORKSPACE_ID=your_workspace_id \
154
168
  --env TAPD_NICK_NAME=your_nick_name \
169
+ --env TAPD_DEFAULT_TASK_WORKITEM_TYPE_ID=your_task_type_id \
170
+ --env TAPD_DEFAULT_STORY_WORKITEM_TYPE_ID=your_story_type_id \
155
171
  -- npx -y "@xihe-lab/tapd-mcp-server"
156
172
  ```
157
173
 
@@ -171,10 +187,43 @@ claude mcp add -s user tapd \
171
187
  }
172
188
  ```
173
189
 
174
- ### 查看当前版本
190
+ ### npm 全局安装方式
191
+
192
+ 如果通过 npm 全局安装使用:
193
+
194
+ ```bash
195
+ # 查看当前安装版本
196
+ npm list -g @xihe-lab/tapd-mcp-server
197
+
198
+ # 更新到最新版本
199
+ npm update -g @xihe-lab/tapd-mcp-server
200
+
201
+ # 或指定版本安装
202
+ npm install -g @xihe-lab/tapd-mcp-server@1.5.0
203
+ ```
204
+
205
+ 更新后需重启 MCP 客户端。
206
+
207
+ ### npx 缓存清理
208
+
209
+ 如果 npx 使用了旧版本缓存,可手动清理后重新运行:
175
210
 
176
211
  ```bash
212
+ # 清理 npx 缓存
213
+ npx clear-npx-cache
214
+
215
+ # 或手动删除缓存目录
216
+ rm -rf ~/.npm/_npx
217
+ ```
218
+
219
+ ### 查看版本信息
220
+
221
+ ```bash
222
+ # 查看最新发布版本
177
223
  npm view @xihe-lab/tapd-mcp-server version
224
+
225
+ # 查看所有已发布版本
226
+ npm view @xihe-lab/tapd-mcp-server versions
178
227
  ```
179
228
 
180
229
  ### 查看更新日志
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Integration Test Script for Tasks 210-213
3
+ *
4
+ * Tests:
5
+ * - Task 210: tapd_get_image_url
6
+ * - Task 212: tapd_get_current_user
7
+ * - Task 213: batch fetch functionality
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=integration-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-test.d.ts","sourceRoot":"","sources":["../src/integration-test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Integration Test Script for Tasks 210-213
3
+ *
4
+ * Tests:
5
+ * - Task 210: tapd_get_image_url
6
+ * - Task 212: tapd_get_current_user
7
+ * - Task 213: batch fetch functionality
8
+ */
9
+ import { TapdClient } from './tapd-client.js';
10
+ async function runTests() {
11
+ console.log('Starting integration tests...\n');
12
+ const client = TapdClient.fromEnv();
13
+ const workspaceId = TapdClient.getDefaultWorkspaceId();
14
+ if (!workspaceId) {
15
+ console.error('ERROR: TAPD_DEFAULT_WORKSPACE_ID must be set');
16
+ process.exit(1);
17
+ }
18
+ const results = [];
19
+ // Test 212: tapd_get_current_user
20
+ console.log('Test 212: tapd_get_current_user');
21
+ try {
22
+ const user = await client.get('/users/info');
23
+ console.log(' Result:', JSON.stringify(user, null, 2).slice(0, 200));
24
+ results.push({ test: 'tapd_get_current_user', status: 'PASS' });
25
+ }
26
+ catch (error) {
27
+ const msg = error instanceof Error ? error.message : String(error);
28
+ console.log(' Error:', msg);
29
+ results.push({ test: 'tapd_get_current_user', status: 'FAIL', error: msg });
30
+ }
31
+ // Test 210: tapd_get_image_url
32
+ console.log('\nTest 210: tapd_get_image_url');
33
+ try {
34
+ // Test with a sample image path
35
+ const testImagePath = '/tfl/captures/2025/04/test.png';
36
+ const imageUrl = await client.get('/files/get_image', {
37
+ workspace_id: workspaceId,
38
+ image_path: testImagePath,
39
+ });
40
+ console.log(' Result:', JSON.stringify(imageUrl, null, 2).slice(0, 200));
41
+ results.push({ test: 'tapd_get_image_url', status: 'PASS' });
42
+ }
43
+ catch (error) {
44
+ const msg = error instanceof Error ? error.message : String(error);
45
+ console.log(' Error:', msg);
46
+ // Expected to fail for non-existent image, but API should respond correctly
47
+ if (msg.includes('TAPD API error')) {
48
+ results.push({ test: 'tapd_get_image_url', status: 'PASS' }); // API responded correctly
49
+ }
50
+ else {
51
+ results.push({ test: 'tapd_get_image_url', status: 'FAIL', error: msg });
52
+ }
53
+ }
54
+ // Test 213: batch fetch stories
55
+ console.log('\nTest 213: tapd_batch_fetch_stories');
56
+ try {
57
+ // Test with a single known story ID
58
+ const testIds = ['1']; // Short ID test
59
+ const promises = testIds.map(id => client.get('/stories', {
60
+ workspace_id: workspaceId,
61
+ id: TapdClient.toLongId(id, workspaceId),
62
+ }));
63
+ const stories = await Promise.all(promises);
64
+ console.log(' Fetched stories count:', stories.length);
65
+ results.push({ test: 'tapd_batch_fetch_stories', status: 'PASS' });
66
+ }
67
+ catch (error) {
68
+ const msg = error instanceof Error ? error.message : String(error);
69
+ console.log(' Error:', msg);
70
+ results.push({ test: 'tapd_batch_fetch_stories', status: 'FAIL', error: msg });
71
+ }
72
+ // Test 213: batch fetch bugs
73
+ console.log('\nTest 213: tapd_batch_fetch_bugs');
74
+ try {
75
+ const testIds = ['1'];
76
+ const promises = testIds.map(id => client.get('/bugs', {
77
+ workspace_id: workspaceId,
78
+ id: TapdClient.toLongId(id, workspaceId),
79
+ }));
80
+ const bugs = await Promise.all(promises);
81
+ console.log(' Fetched bugs count:', bugs.length);
82
+ results.push({ test: 'tapd_batch_fetch_bugs', status: 'PASS' });
83
+ }
84
+ catch (error) {
85
+ const msg = error instanceof Error ? error.message : String(error);
86
+ console.log(' Error:', msg);
87
+ results.push({ test: 'tapd_batch_fetch_bugs', status: 'FAIL', error: msg });
88
+ }
89
+ // Test 213: batch fetch tasks
90
+ console.log('\nTest 213: tapd_batch_fetch_tasks');
91
+ try {
92
+ const testIds = ['1'];
93
+ const promises = testIds.map(id => client.get('/tasks', {
94
+ workspace_id: workspaceId,
95
+ id: TapdClient.toLongId(id, workspaceId),
96
+ }));
97
+ const tasks = await Promise.all(promises);
98
+ console.log(' Fetched tasks count:', tasks.length);
99
+ results.push({ test: 'tapd_batch_fetch_tasks', status: 'PASS' });
100
+ }
101
+ catch (error) {
102
+ const msg = error instanceof Error ? error.message : String(error);
103
+ console.log(' Error:', msg);
104
+ results.push({ test: 'tapd_batch_fetch_tasks', status: 'FAIL', error: msg });
105
+ }
106
+ // Summary
107
+ console.log('\n=== Test Summary ===');
108
+ const passed = results.filter(r => r.status === 'PASS').length;
109
+ const failed = results.filter(r => r.status === 'FAIL').length;
110
+ console.log(`Total: ${results.length}, PASS: ${passed}, FAIL: ${failed}`);
111
+ for (const r of results) {
112
+ console.log(` ${r.status}: ${r.test}${r.error ? ` - ${r.error.slice(0, 100)}` : ''}`);
113
+ }
114
+ process.exit(failed > 0 ? 1 : 0);
115
+ }
116
+ runTests();
117
+ //# sourceMappingURL=integration-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-test.js","sourceRoot":"","sources":["../src/integration-test.ts"],"names":[],"mappings":"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"}
@@ -32,8 +32,39 @@ export declare class TapdClient {
32
32
  */
33
33
  static getNickName(): string | undefined;
34
34
  /**
35
- * Make HTTP request to TAPD API
35
+ * Get default workspace ID from environment variable TAPD_DEFAULT_WORKSPACE_ID
36
36
  */
37
+ static getDefaultWorkspaceId(): number | undefined;
38
+ /**
39
+ * Get default STORY workitem type ID from environment variable
40
+ */
41
+ static getDefaultStoryWorkitemTypeId(): string | undefined;
42
+ /**
43
+ * Get default TASK workitem type ID from environment variable
44
+ */
45
+ static getDefaultTaskWorkitemTypeId(): string | undefined;
46
+ /**
47
+ * Convert short ID to long ID
48
+ *
49
+ * Rules:
50
+ * - Pure numeric ID with ≤9 digits is treated as short ID
51
+ * - For cloud environment (is_cloud=true), prefix is '11'
52
+ * - Pad short ID to 9 digits and concatenate with workspace_id
53
+ * - Non-short IDs are returned unchanged
54
+ *
55
+ * @param id - Story/bug/task ID (short or long format)
56
+ * @param workspaceId - Workspace ID for constructing long ID
57
+ * @param isCloud - Whether it's cloud environment (default: true)
58
+ */
59
+ static toLongId(id: string | number, workspaceId: string | number, isCloud?: boolean): string;
60
+ /**
61
+ * Make HTTP request to TAPD API with retry support
62
+ *
63
+ * Retry policy:
64
+ * - Retry on 429/500/502/503 status codes
65
+ * - Max 3 retries with exponential backoff (1s, 2s, 4s)
66
+ * - POST requests do NOT retry (avoid duplicate creation)
67
+ */
37
68
  request<T>(method: 'GET' | 'POST', path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T>;
38
69
  /**
39
70
  * GET request to TAPD API
@@ -1 +1 @@
1
- {"version":3,"file":"tapd-client.d.ts","sourceRoot":"","sources":["../src/tapd-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B,OAAO;IAcP;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAIzE;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAWxF;;;OAGG;IACH,MAAM,CAAC,OAAO,IAAI,UAAU;IAmB5B;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM,GAAG,SAAS;IAIxC;;OAEG;IACG,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC7D,OAAO,CAAC,CAAC,CAAC;IAiDb;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1F;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAGxG;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"tapd-client.d.ts","sourceRoot":"","sources":["../src/tapd-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAS;IAE7B,OAAO;IAcP;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAIzE;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAWxF;;;OAGG;IACH,MAAM,CAAC,OAAO,IAAI,UAAU;IAmB5B;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM,GAAG,SAAS;IAIxC;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,MAAM,GAAG,SAAS;IAKlD;;OAEG;IACH,MAAM,CAAC,6BAA6B,IAAI,MAAM,GAAG,SAAS;IAI1D;;OAEG;IACH,MAAM,CAAC,4BAA4B,IAAI,MAAM,GAAG,SAAS;IAIzD;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,GAAE,OAAc,GAAG,MAAM;IAcnG;;;;;;;KAOC;IACK,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAC7D,OAAO,CAAC,CAAC,CAAC;IAkFb;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1F;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAGxG;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -57,8 +57,56 @@ export class TapdClient {
57
57
  return process.env.TAPD_NICK_NAME;
58
58
  }
59
59
  /**
60
- * Make HTTP request to TAPD API
60
+ * Get default workspace ID from environment variable TAPD_DEFAULT_WORKSPACE_ID
61
61
  */
62
+ static getDefaultWorkspaceId() {
63
+ const id = process.env.TAPD_DEFAULT_WORKSPACE_ID;
64
+ return id ? parseInt(id, 10) : undefined;
65
+ }
66
+ /**
67
+ * Get default STORY workitem type ID from environment variable
68
+ */
69
+ static getDefaultStoryWorkitemTypeId() {
70
+ return process.env.TAPD_DEFAULT_STORY_WORKITEM_TYPE_ID;
71
+ }
72
+ /**
73
+ * Get default TASK workitem type ID from environment variable
74
+ */
75
+ static getDefaultTaskWorkitemTypeId() {
76
+ return process.env.TAPD_DEFAULT_TASK_WORKITEM_TYPE_ID;
77
+ }
78
+ /**
79
+ * Convert short ID to long ID
80
+ *
81
+ * Rules:
82
+ * - Pure numeric ID with ≤9 digits is treated as short ID
83
+ * - For cloud environment (is_cloud=true), prefix is '11'
84
+ * - Pad short ID to 9 digits and concatenate with workspace_id
85
+ * - Non-short IDs are returned unchanged
86
+ *
87
+ * @param id - Story/bug/task ID (short or long format)
88
+ * @param workspaceId - Workspace ID for constructing long ID
89
+ * @param isCloud - Whether it's cloud environment (default: true)
90
+ */
91
+ static toLongId(id, workspaceId, isCloud = true) {
92
+ const idStr = String(id).trim();
93
+ const workspaceIdStr = String(workspaceId);
94
+ // Check if it's a pure numeric short ID (≤9 digits)
95
+ if (/^\d+$/.test(idStr) && idStr.length <= 9) {
96
+ const prefix = isCloud ? '11' : '10';
97
+ const paddedId = idStr.padStart(9, '0');
98
+ return `${prefix}${workspaceIdStr}${paddedId}`;
99
+ }
100
+ return idStr;
101
+ }
102
+ /**
103
+ * Make HTTP request to TAPD API with retry support
104
+ *
105
+ * Retry policy:
106
+ * - Retry on 429/500/502/503 status codes
107
+ * - Max 3 retries with exponential backoff (1s, 2s, 4s)
108
+ * - POST requests do NOT retry (avoid duplicate creation)
109
+ */
62
110
  async request(method, path, params) {
63
111
  const url = new URL(path, this.baseUrl);
64
112
  const headers = {
@@ -77,25 +125,54 @@ export class TapdClient {
77
125
  .filter(([, value]) => value !== undefined)
78
126
  .map(([key, value]) => [key, String(value).replace(/\\n/g, '\n')])).toString();
79
127
  }
80
- const response = await fetch(url.toString(), {
81
- method,
82
- headers,
83
- body,
84
- });
85
- if (!response.ok) {
86
- const errorText = await response.text();
87
- throw new Error(`TAPD API error: ${response.status} ${response.statusText} - ${errorText.slice(0, 200)}`);
88
- }
89
- const contentType = response.headers.get('content-type');
90
- if (!contentType?.includes('application/json')) {
91
- const text = await response.text();
92
- throw new Error(`TAPD API returned non-JSON response: ${text.slice(0, 100)}`);
93
- }
94
- const result = await response.json();
95
- if (result.status !== 1) {
96
- throw new Error(`TAPD API error: ${result.info ?? 'Unknown error'}`);
128
+ // Retry configuration
129
+ const maxRetries = 3;
130
+ const retryableStatusCodes = [429, 500, 502, 503];
131
+ const shouldRetry = method === 'GET'; // Only retry GET requests
132
+ let lastError;
133
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
134
+ try {
135
+ const response = await fetch(url.toString(), {
136
+ method,
137
+ headers,
138
+ body,
139
+ });
140
+ if (!response.ok) {
141
+ const errorText = await response.text();
142
+ const error = new Error(`TAPD API error: ${response.status} ${response.statusText} - ${errorText.slice(0, 200)}`);
143
+ // Check if we should retry
144
+ if (shouldRetry && retryableStatusCodes.includes(response.status) && attempt < maxRetries) {
145
+ lastError = error;
146
+ const delayMs = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s
147
+ await new Promise(resolve => setTimeout(resolve, delayMs));
148
+ continue;
149
+ }
150
+ throw error;
151
+ }
152
+ const contentType = response.headers.get('content-type');
153
+ if (!contentType?.includes('application/json')) {
154
+ const text = await response.text();
155
+ throw new Error(`TAPD API returned non-JSON response: ${text.slice(0, 100)}`);
156
+ }
157
+ const result = await response.json();
158
+ if (result.status !== 1) {
159
+ throw new Error(`TAPD API error: ${result.info ?? 'Unknown error'}`);
160
+ }
161
+ return result.data;
162
+ }
163
+ catch (error) {
164
+ // For non-retryable errors or final attempt, throw immediately
165
+ if (!shouldRetry || attempt >= maxRetries) {
166
+ throw error;
167
+ }
168
+ // For network errors, retry
169
+ lastError = error instanceof Error ? error : new Error(String(error));
170
+ const delayMs = Math.pow(2, attempt) * 1000;
171
+ await new Promise(resolve => setTimeout(resolve, delayMs));
172
+ }
97
173
  }
98
- return result.data;
174
+ // All retries exhausted
175
+ throw lastError ?? new Error('Request failed after all retries');
99
176
  }
100
177
  /**
101
178
  * GET request to TAPD API
@@ -1 +1 @@
1
- {"version":3,"file":"tapd-client.js","sourceRoot":"","sources":["../src/tapd-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tapd-client.js","sourceRoot":"","sources":["../src/tapd-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/tools/attachment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAO,MAAM,eAAe,EAAE,OAAO,EAuEpC,CAAC"}
1
+ {"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/tools/attachment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,eAAe,EAAE,OAAO,EA+FpC,CAAC"}
@@ -1,45 +1,62 @@
1
1
  import { z } from 'zod';
2
+ import { TapdClient } from '../tapd-client.js';
2
3
  export const attachmentTools = [
3
4
  // Standard TAPD API attachment tools
4
5
  {
5
6
  name: 'tapd_get_attachments',
6
7
  description: 'Get attachment list from TAPD',
7
8
  inputSchema: z.object({
8
- workspace_id: z.number().describe('Project ID (required)'),
9
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
9
10
  id: z.string().optional().describe('Attachment ID, supports multiple IDs'),
10
11
  entity_id: z.string().optional().describe('Related entity ID (story/task/bug/wiki ID)'),
11
12
  entity_type: z.string().optional().describe('Entity type (story, task, bug, wiki)'),
13
+ filename: z.string().optional().describe('Filename'),
14
+ owner: z.string().optional().describe('Uploader'),
15
+ created: z.string().optional().describe('Creation time, supports time query'),
16
+ modified: z.string().optional().describe('Last modification time, supports time query'),
12
17
  fields: z.string().optional().describe('Comma-separated list of fields to return'),
13
18
  limit: z.number().optional().describe('Number of results to return, max 200'),
14
19
  page: z.number().optional().describe('Page number, default 1'),
15
20
  order: z.string().optional().describe('Sort order, e.g., "created desc"'),
16
21
  }),
17
22
  handler: async (client, params) => {
18
- return client.get('/attachments', params);
23
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
24
+ if (!workspaceId) {
25
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
26
+ }
27
+ return client.get('/attachments', { ...params, workspace_id: workspaceId });
19
28
  },
20
29
  },
21
30
  {
22
31
  name: 'tapd_get_attachment',
23
32
  description: 'Get a single attachment from TAPD',
24
33
  inputSchema: z.object({
25
- workspace_id: z.number().describe('Project ID (required)'),
34
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
26
35
  id: z.string().describe('Attachment ID (required)'),
27
36
  fields: z.string().optional().describe('Comma-separated list of fields to return'),
28
37
  }),
29
38
  handler: async (client, params) => {
30
- return client.get('/attachments/get_one', params);
39
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
40
+ if (!workspaceId) {
41
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
42
+ }
43
+ return client.get('/attachments/get_one', { ...params, workspace_id: workspaceId });
31
44
  },
32
45
  },
33
46
  {
34
47
  name: 'tapd_get_attachment_download_url',
35
48
  description: 'Get download URL for a single attachment (valid for 300s)',
36
49
  inputSchema: z.object({
37
- workspace_id: z.number().describe('Project ID (required)'),
50
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
38
51
  id: z.string().describe('Attachment ID (required)'),
39
52
  filename: z.string().optional().describe('Filename for download'),
40
53
  }),
41
54
  handler: async (client, params) => {
42
- return client.get('/attachments/documents_down', params);
55
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
56
+ if (!workspaceId) {
57
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
58
+ }
59
+ return client.get('/attachments/documents_down', { ...params, workspace_id: workspaceId });
43
60
  },
44
61
  },
45
62
  // Mini (轻协作) API attachment tools
@@ -47,7 +64,7 @@ export const attachmentTools = [
47
64
  name: 'tapd_mini_get_attachments',
48
65
  description: 'Get attachments from mini workspace',
49
66
  inputSchema: z.object({
50
- workspace_id: z.number().describe('Mini workspace ID (required)'),
67
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
51
68
  id: z.string().optional().describe('Attachment ID'),
52
69
  entry_id: z.string().optional().describe('Item ID'),
53
70
  filename: z.string().optional().describe('Filename'),
@@ -56,18 +73,26 @@ export const attachmentTools = [
56
73
  page: z.number().optional().describe('Page number, default 1'),
57
74
  }),
58
75
  handler: async (client, params) => {
59
- return client.get('/attachments', params);
76
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
77
+ if (!workspaceId) {
78
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
79
+ }
80
+ return client.get('/attachments', { ...params, workspace_id: workspaceId });
60
81
  },
61
82
  },
62
83
  {
63
84
  name: 'tapd_mini_get_attachment_download_url',
64
85
  description: 'Get download URL for a single mini workspace attachment (valid for 300s)',
65
86
  inputSchema: z.object({
66
- workspace_id: z.number().describe('Mini workspace ID (required)'),
87
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
67
88
  id: z.string().describe('Attachment ID (required)'),
68
89
  }),
69
90
  handler: async (client, params) => {
70
- return client.get('/attachments/down', params);
91
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
92
+ if (!workspaceId) {
93
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
94
+ }
95
+ return client.get('/attachments/down', { ...params, workspace_id: workspaceId });
71
96
  },
72
97
  },
73
98
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/tools/attachment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/tools/attachment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from '../types.js';
2
+ export declare const boardTools: ToolDef[];
3
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/tools/board.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,UAAU,EAAE,OAAO,EA8F/B,CAAC"}