@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.
- package/README.md +56 -7
- package/dist/integration-test.d.ts +10 -0
- package/dist/integration-test.d.ts.map +1 -0
- package/dist/integration-test.js +117 -0
- package/dist/integration-test.js.map +1 -0
- package/dist/tapd-client.d.ts +32 -1
- package/dist/tapd-client.d.ts.map +1 -1
- package/dist/tapd-client.js +96 -19
- package/dist/tapd-client.js.map +1 -1
- package/dist/tools/attachment.d.ts.map +1 -1
- package/dist/tools/attachment.js +35 -10
- package/dist/tools/attachment.js.map +1 -1
- package/dist/tools/board.d.ts +3 -0
- package/dist/tools/board.d.ts.map +1 -0
- package/dist/tools/board.js +98 -0
- package/dist/tools/board.js.map +1 -0
- package/dist/tools/bug.d.ts.map +1 -1
- package/dist/tools/bug.js +382 -7
- package/dist/tools/bug.js.map +1 -1
- package/dist/tools/changes.d.ts.map +1 -1
- package/dist/tools/changes.js +25 -34
- package/dist/tools/changes.js.map +1 -1
- package/dist/tools/comment.d.ts.map +1 -1
- package/dist/tools/comment.js +53 -3
- package/dist/tools/comment.js.map +1 -1
- package/dist/tools/custom-fields.d.ts.map +1 -1
- package/dist/tools/custom-fields.js +43 -36
- package/dist/tools/custom-fields.js.map +1 -1
- package/dist/tools/image.d.ts +3 -0
- package/dist/tools/image.d.ts.map +1 -0
- package/dist/tools/image.js +23 -0
- package/dist/tools/image.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +12 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/iteration.d.ts.map +1 -1
- package/dist/tools/iteration.js +95 -6
- package/dist/tools/iteration.js.map +1 -1
- package/dist/tools/mini-comment.d.ts.map +1 -1
- package/dist/tools/mini-comment.js +18 -5
- package/dist/tools/mini-comment.js.map +1 -1
- package/dist/tools/mini-item.d.ts.map +1 -1
- package/dist/tools/mini-item.js +36 -11
- package/dist/tools/mini-item.js.map +1 -1
- package/dist/tools/mini-workspace.d.ts.map +1 -1
- package/dist/tools/mini-workspace.js +13 -4
- package/dist/tools/mini-workspace.js.map +1 -1
- package/dist/tools/program.d.ts +3 -0
- package/dist/tools/program.d.ts.map +1 -0
- package/dist/tools/program.js +27 -0
- package/dist/tools/program.js.map +1 -0
- package/dist/tools/relations.d.ts.map +1 -1
- package/dist/tools/relations.js +25 -30
- package/dist/tools/relations.js.map +1 -1
- package/dist/tools/release.d.ts.map +1 -1
- package/dist/tools/release.js +228 -2
- package/dist/tools/release.js.map +1 -1
- package/dist/tools/report.d.ts +3 -0
- package/dist/tools/report.d.ts.map +1 -0
- package/dist/tools/report.js +38 -0
- package/dist/tools/report.js.map +1 -0
- package/dist/tools/settings.d.ts.map +1 -1
- package/dist/tools/settings.js +379 -31
- package/dist/tools/settings.js.map +1 -1
- package/dist/tools/source.d.ts +3 -0
- package/dist/tools/source.d.ts.map +1 -0
- package/dist/tools/source.js +69 -0
- package/dist/tools/source.js.map +1 -0
- package/dist/tools/story.d.ts.map +1 -1
- package/dist/tools/story.js +650 -160
- package/dist/tools/story.js.map +1 -1
- package/dist/tools/task.d.ts.map +1 -1
- package/dist/tools/task.js +104 -11
- package/dist/tools/task.js.map +1 -1
- package/dist/tools/test.d.ts.map +1 -1
- package/dist/tools/test.js +505 -75
- package/dist/tools/test.js.map +1 -1
- package/dist/tools/timesheet.d.ts.map +1 -1
- package/dist/tools/timesheet.js +72 -11
- package/dist/tools/timesheet.js.map +1 -1
- package/dist/tools/user.d.ts.map +1 -1
- package/dist/tools/user.js +36 -4
- package/dist/tools/user.js.map +1 -1
- package/dist/tools/utility.d.ts +3 -0
- package/dist/tools/utility.d.ts.map +1 -0
- package/dist/tools/utility.js +132 -0
- package/dist/tools/utility.js.map +1 -0
- package/dist/tools/wiki.d.ts.map +1 -1
- package/dist/tools/wiki.js +75 -20
- package/dist/tools/wiki.js.map +1 -1
- package/dist/tools/workflow.d.ts.map +1 -1
- package/dist/tools/workflow.js +78 -6
- package/dist/tools/workflow.js.map +1 -1
- package/dist/tools/workspace.d.ts.map +1 -1
- package/dist/tools/workspace.js +93 -4
- package/dist/tools/workspace.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { TapdClient } from '../tapd-client.js';
|
|
3
|
+
export const boardTools = [
|
|
4
|
+
{
|
|
5
|
+
name: "tapd_add_board_card",
|
|
6
|
+
description: "新建看板工作项",
|
|
7
|
+
inputSchema: z.object({
|
|
8
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
9
|
+
board_id: z.number().describe("看板ID (必填)"),
|
|
10
|
+
column_id: z.number().describe("看板列ID (必填)"),
|
|
11
|
+
name: z.string().describe("工作项标题 (必填)"),
|
|
12
|
+
description: z.string().optional().describe("详细描述"),
|
|
13
|
+
owner: z.string().optional().describe("负责人,默认当前用户"),
|
|
14
|
+
creator: z.string().optional().describe("创建人,默认当前用户"),
|
|
15
|
+
priority: z.string().optional().describe("优先级"),
|
|
16
|
+
category_id: z.number().optional().describe("分类ID"),
|
|
17
|
+
due: z.string().optional().describe("预计完成日期,格式: YYYY-MM-DD"),
|
|
18
|
+
}),
|
|
19
|
+
handler: async (client, params) => {
|
|
20
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
21
|
+
if (!workspaceId) {
|
|
22
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
23
|
+
}
|
|
24
|
+
return client.post("/board_cards/add", { ...params, workspace_id: workspaceId });
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "tapd_get_board_cards",
|
|
29
|
+
description: "获取看板工作项列表",
|
|
30
|
+
inputSchema: z.object({
|
|
31
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
32
|
+
board_id: z.number().optional().describe("看板ID"),
|
|
33
|
+
column_id: z.number().optional().describe("看板列ID"),
|
|
34
|
+
id: z.string().optional().describe("工作项ID,支持多ID查询"),
|
|
35
|
+
name: z.string().optional().describe("工作项标题,支持模糊匹配"),
|
|
36
|
+
owner: z.string().optional().describe("负责人"),
|
|
37
|
+
creator: z.string().optional().describe("创建人"),
|
|
38
|
+
status: z.string().optional().describe("状态"),
|
|
39
|
+
priority: z.string().optional().describe("优先级"),
|
|
40
|
+
category_id: z.number().optional().describe("分类ID"),
|
|
41
|
+
created: z.string().optional().describe("创建时间,支持时间查询"),
|
|
42
|
+
modified: z.string().optional().describe("修改时间,支持时间查询"),
|
|
43
|
+
due: z.string().optional().describe("预计完成日期,支持时间查询"),
|
|
44
|
+
limit: z.number().optional().describe("返回数量限制,默认30,最大200"),
|
|
45
|
+
page: z.number().optional().describe("页码,默认1"),
|
|
46
|
+
order: z.string().optional().describe("排序规则,如 created desc"),
|
|
47
|
+
fields: z.string().optional().describe("指定返回字段,多个字段以逗号分隔"),
|
|
48
|
+
}),
|
|
49
|
+
handler: async (client, params) => {
|
|
50
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
51
|
+
if (!workspaceId) {
|
|
52
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
53
|
+
}
|
|
54
|
+
return client.get("/board_cards", { ...params, workspace_id: workspaceId });
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "tapd_update_board_card",
|
|
59
|
+
description: "更新看板工作项",
|
|
60
|
+
inputSchema: z.object({
|
|
61
|
+
id: z.string().describe("工作项ID (必填)"),
|
|
62
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
63
|
+
board_id: z.number().optional().describe("看板ID"),
|
|
64
|
+
column_id: z.number().optional().describe("看板列ID(用于移动卡片)"),
|
|
65
|
+
name: z.string().optional().describe("工作项标题"),
|
|
66
|
+
description: z.string().optional().describe("详细描述"),
|
|
67
|
+
owner: z.string().optional().describe("负责人"),
|
|
68
|
+
status: z.string().optional().describe("状态"),
|
|
69
|
+
priority: z.string().optional().describe("优先级"),
|
|
70
|
+
due: z.string().optional().describe("预计完成日期,格式: YYYY-MM-DD"),
|
|
71
|
+
}),
|
|
72
|
+
handler: async (client, params) => {
|
|
73
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
74
|
+
if (!workspaceId) {
|
|
75
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
76
|
+
}
|
|
77
|
+
return client.post("/board_cards/update", { ...params, workspace_id: workspaceId });
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: "tapd_get_board_columns",
|
|
82
|
+
description: "获取看板板块",
|
|
83
|
+
inputSchema: z.object({
|
|
84
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
85
|
+
board_id: z.number().describe("看板ID (必填)"),
|
|
86
|
+
id: z.number().optional().describe("看板列ID"),
|
|
87
|
+
fields: z.string().optional().describe("指定返回字段"),
|
|
88
|
+
}),
|
|
89
|
+
handler: async (client, params) => {
|
|
90
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
91
|
+
if (!workspaceId) {
|
|
92
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
93
|
+
}
|
|
94
|
+
return client.get("/board_columns", { ...params, workspace_id: workspaceId });
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
//# sourceMappingURL=board.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/tools/board.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/bug.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bug.d.ts","sourceRoot":"","sources":["../../src/tools/bug.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,QAAQ,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"bug.d.ts","sourceRoot":"","sources":["../../src/tools/bug.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,QAAQ,EAAE,OAAO,EAumB7B,CAAC"}
|
package/dist/tools/bug.js
CHANGED
|
@@ -5,7 +5,7 @@ export const bugTools = [
|
|
|
5
5
|
name: 'tapd_get_bugs',
|
|
6
6
|
description: 'Query TAPD bugs with filters',
|
|
7
7
|
inputSchema: z.object({
|
|
8
|
-
workspace_id: z.number().describe('
|
|
8
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
9
9
|
id: z.string().optional().describe('Supports multiple IDs'),
|
|
10
10
|
title: z.string().optional().describe('Bug title, supports fuzzy matching'),
|
|
11
11
|
priority: z.string().optional().describe('Priority, recommend using priority_label'),
|
|
@@ -63,14 +63,23 @@ export const bugTools = [
|
|
|
63
63
|
fields: z.string().optional().describe('Specify return fields'),
|
|
64
64
|
}),
|
|
65
65
|
handler: async (client, params) => {
|
|
66
|
-
|
|
66
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
67
|
+
if (!workspaceId) {
|
|
68
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
69
|
+
}
|
|
70
|
+
const convertedParams = {
|
|
71
|
+
...params,
|
|
72
|
+
id: params.id ? TapdClient.toLongId(params.id, workspaceId) : undefined,
|
|
73
|
+
workspace_id: workspaceId,
|
|
74
|
+
};
|
|
75
|
+
return client.get('/bugs', convertedParams);
|
|
67
76
|
},
|
|
68
77
|
},
|
|
69
78
|
{
|
|
70
79
|
name: 'tapd_create_bug',
|
|
71
80
|
description: 'Create a new bug in TAPD',
|
|
72
81
|
inputSchema: z.object({
|
|
73
|
-
workspace_id: z.number().describe('
|
|
82
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
74
83
|
title: z.string().describe('Bug title (required)'),
|
|
75
84
|
priority: z.string().optional().describe('Priority'),
|
|
76
85
|
priority_label: z.string().optional().describe('Priority label (recommended)'),
|
|
@@ -87,6 +96,10 @@ export const bugTools = [
|
|
|
87
96
|
de: z.string().optional().describe('Developer'),
|
|
88
97
|
reporter: z.string().optional().describe('Reporter'),
|
|
89
98
|
participator: z.string().optional().describe('Participant'),
|
|
99
|
+
auditer: z.string().optional().describe('Auditor'),
|
|
100
|
+
confirmer: z.string().optional().describe('Confirmer'),
|
|
101
|
+
fixer: z.string().optional().describe('Fixer'),
|
|
102
|
+
closer: z.string().optional().describe('Closer'),
|
|
90
103
|
begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
|
|
91
104
|
due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
|
|
92
105
|
deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
|
|
@@ -116,9 +129,14 @@ export const bugTools = [
|
|
|
116
129
|
custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
|
|
117
130
|
}),
|
|
118
131
|
handler: async (client, params) => {
|
|
132
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
133
|
+
if (!workspaceId) {
|
|
134
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
135
|
+
}
|
|
119
136
|
const nickName = TapdClient.getNickName();
|
|
120
137
|
const finalParams = {
|
|
121
138
|
...params,
|
|
139
|
+
workspace_id: workspaceId,
|
|
122
140
|
current_owner: params.current_owner ?? nickName,
|
|
123
141
|
reporter: params.reporter ?? nickName,
|
|
124
142
|
};
|
|
@@ -130,7 +148,7 @@ export const bugTools = [
|
|
|
130
148
|
description: 'Update an existing bug in TAPD',
|
|
131
149
|
inputSchema: z.object({
|
|
132
150
|
id: z.string().describe('Bug ID (required)'),
|
|
133
|
-
workspace_id: z.number().describe('
|
|
151
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
134
152
|
title: z.string().optional().describe('Bug title'),
|
|
135
153
|
priority: z.string().optional().describe('Priority'),
|
|
136
154
|
priority_label: z.string().optional().describe('Priority label (recommended)'),
|
|
@@ -176,14 +194,23 @@ export const bugTools = [
|
|
|
176
194
|
custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
|
|
177
195
|
}),
|
|
178
196
|
handler: async (client, params) => {
|
|
179
|
-
|
|
197
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
198
|
+
if (!workspaceId) {
|
|
199
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
200
|
+
}
|
|
201
|
+
const convertedParams = {
|
|
202
|
+
...params,
|
|
203
|
+
id: TapdClient.toLongId(params.id, workspaceId),
|
|
204
|
+
workspace_id: workspaceId,
|
|
205
|
+
};
|
|
206
|
+
return client.post('/bugs', convertedParams);
|
|
180
207
|
},
|
|
181
208
|
},
|
|
182
209
|
{
|
|
183
210
|
name: 'tapd_get_bug_count',
|
|
184
211
|
description: 'Get the count of bugs matching filters',
|
|
185
212
|
inputSchema: z.object({
|
|
186
|
-
workspace_id: z.number().describe('
|
|
213
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
187
214
|
id: z.string().optional().describe('Supports multiple IDs'),
|
|
188
215
|
title: z.string().optional().describe('Bug title, supports fuzzy matching'),
|
|
189
216
|
priority: z.string().optional().describe('Priority, recommend using priority_label'),
|
|
@@ -237,7 +264,355 @@ export const bugTools = [
|
|
|
237
264
|
custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
|
|
238
265
|
}),
|
|
239
266
|
handler: async (client, params) => {
|
|
240
|
-
|
|
267
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
268
|
+
if (!workspaceId) {
|
|
269
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
270
|
+
}
|
|
271
|
+
const convertedParams = {
|
|
272
|
+
...params,
|
|
273
|
+
id: params.id ? TapdClient.toLongId(params.id, workspaceId) : undefined,
|
|
274
|
+
workspace_id: workspaceId,
|
|
275
|
+
};
|
|
276
|
+
return client.get('/bugs/count', convertedParams);
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
// 缺陷变更历史
|
|
280
|
+
{
|
|
281
|
+
name: 'tapd_get_bug_changes',
|
|
282
|
+
description: '获取缺陷变更历史',
|
|
283
|
+
inputSchema: z.object({
|
|
284
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
285
|
+
id: z.string().optional().describe('变更记录ID,支持多ID查询'),
|
|
286
|
+
bug_id: z.string().optional().describe('缺陷ID'),
|
|
287
|
+
field: z.string().optional().describe('变更字段'),
|
|
288
|
+
value_before: z.string().optional().describe('变更前值'),
|
|
289
|
+
value_after: z.string().optional().describe('变更后值'),
|
|
290
|
+
user: z.string().optional().describe('变更人'),
|
|
291
|
+
created: z.string().optional().describe('创建时间,支持时间查询'),
|
|
292
|
+
limit: z.number().optional().describe('返回数量,默认30,最大200'),
|
|
293
|
+
page: z.number().optional().describe('页码,默认1'),
|
|
294
|
+
order: z.string().optional().describe('排序'),
|
|
295
|
+
fields: z.string().optional().describe('返回字段'),
|
|
296
|
+
}),
|
|
297
|
+
handler: async (client, params) => {
|
|
298
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
299
|
+
if (!workspaceId) {
|
|
300
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
301
|
+
}
|
|
302
|
+
const convertedParams = {
|
|
303
|
+
...params,
|
|
304
|
+
bug_id: params.bug_id ? TapdClient.toLongId(params.bug_id, workspaceId) : undefined,
|
|
305
|
+
workspace_id: workspaceId,
|
|
306
|
+
};
|
|
307
|
+
return client.get('/bug_changes', convertedParams);
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
name: 'tapd_get_bug_changes_count',
|
|
312
|
+
description: '获取缺陷变更次数',
|
|
313
|
+
inputSchema: z.object({
|
|
314
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
315
|
+
bug_id: z.string().optional().describe('缺陷ID'),
|
|
316
|
+
field: z.string().optional().describe('变更字段'),
|
|
317
|
+
user: z.string().optional().describe('变更人'),
|
|
318
|
+
created: z.string().optional().describe('创建时间'),
|
|
319
|
+
}),
|
|
320
|
+
handler: async (client, params) => {
|
|
321
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
322
|
+
if (!workspaceId) {
|
|
323
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
324
|
+
}
|
|
325
|
+
const convertedParams = {
|
|
326
|
+
...params,
|
|
327
|
+
bug_id: params.bug_id ? TapdClient.toLongId(params.bug_id, workspaceId) : undefined,
|
|
328
|
+
workspace_id: workspaceId,
|
|
329
|
+
};
|
|
330
|
+
return client.get('/bug_changes/count', convertedParams);
|
|
331
|
+
},
|
|
332
|
+
},
|
|
333
|
+
// 缺陷字段配置
|
|
334
|
+
{
|
|
335
|
+
name: 'tapd_get_bug_custom_fields_settings',
|
|
336
|
+
description: '获取缺陷自定义字段配置',
|
|
337
|
+
inputSchema: z.object({
|
|
338
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
339
|
+
}),
|
|
340
|
+
handler: async (client, params) => {
|
|
341
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
342
|
+
if (!workspaceId) {
|
|
343
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
344
|
+
}
|
|
345
|
+
return client.get('/bugs/custom_fields_settings', { ...params, workspace_id: workspaceId });
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
name: 'tapd_get_bug_fields_info',
|
|
350
|
+
description: '获取缺陷字段信息',
|
|
351
|
+
inputSchema: z.object({
|
|
352
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
353
|
+
}),
|
|
354
|
+
handler: async (client, params) => {
|
|
355
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
356
|
+
if (!workspaceId) {
|
|
357
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
358
|
+
}
|
|
359
|
+
return client.get('/bugs/get_fields_info', { ...params, workspace_id: workspaceId });
|
|
360
|
+
},
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
name: 'tapd_get_bug_fields_lable',
|
|
364
|
+
description: '获取缺陷字段中英文对照',
|
|
365
|
+
inputSchema: z.object({
|
|
366
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
367
|
+
}),
|
|
368
|
+
handler: async (client, params) => {
|
|
369
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
370
|
+
if (!workspaceId) {
|
|
371
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
372
|
+
}
|
|
373
|
+
return client.get('/bugs/fields_lable', { ...params, workspace_id: workspaceId });
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
// 缺陷模板
|
|
377
|
+
{
|
|
378
|
+
name: 'tapd_get_bug_template_list',
|
|
379
|
+
description: '获取缺陷模板列表',
|
|
380
|
+
inputSchema: z.object({
|
|
381
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
382
|
+
limit: z.number().optional().describe('返回数量'),
|
|
383
|
+
page: z.number().optional().describe('页码'),
|
|
384
|
+
fields: z.string().optional().describe('返回字段'),
|
|
385
|
+
}),
|
|
386
|
+
handler: async (client, params) => {
|
|
387
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
388
|
+
if (!workspaceId) {
|
|
389
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
390
|
+
}
|
|
391
|
+
return client.get('/bugs/templates', { ...params, workspace_id: workspaceId });
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
name: 'tapd_get_default_bug_template',
|
|
396
|
+
description: '获取缺陷默认模板',
|
|
397
|
+
inputSchema: z.object({
|
|
398
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
399
|
+
}),
|
|
400
|
+
handler: async (client, params) => {
|
|
401
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
402
|
+
if (!workspaceId) {
|
|
403
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
404
|
+
}
|
|
405
|
+
return client.get('/bugs/default_template', { ...params, workspace_id: workspaceId });
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
// 批量操作
|
|
409
|
+
{
|
|
410
|
+
name: 'tapd_batch_update_bugs',
|
|
411
|
+
description: '批量更新缺陷',
|
|
412
|
+
inputSchema: z.object({
|
|
413
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
414
|
+
bugs: z.string().describe('缺陷更新数组JSON,最多50条 (必填)'),
|
|
415
|
+
}),
|
|
416
|
+
handler: async (client, params) => {
|
|
417
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
418
|
+
if (!workspaceId) {
|
|
419
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
420
|
+
}
|
|
421
|
+
// TAPD API expects bugs as a JSON string
|
|
422
|
+
// Parse and convert bug IDs
|
|
423
|
+
const bugsJson = params.bugs;
|
|
424
|
+
const bugs = JSON.parse(bugsJson);
|
|
425
|
+
const convertedBugs = bugs.map((bug) => {
|
|
426
|
+
const { id, ...rest } = bug;
|
|
427
|
+
return {
|
|
428
|
+
id: TapdClient.toLongId(id, workspaceId),
|
|
429
|
+
...rest,
|
|
430
|
+
};
|
|
431
|
+
});
|
|
432
|
+
const convertedBugsJson = JSON.stringify(convertedBugs);
|
|
433
|
+
return client.post('/bugs/batch_update', {
|
|
434
|
+
workspace_id: workspaceId,
|
|
435
|
+
bugs: convertedBugsJson,
|
|
436
|
+
});
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
name: 'tapd_copy_bug',
|
|
441
|
+
description: '复制缺陷',
|
|
442
|
+
inputSchema: z.object({
|
|
443
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
444
|
+
id: z.string().describe('要复制的缺陷ID (必填)'),
|
|
445
|
+
title: z.string().optional().describe('新缺陷标题(默认为原标题)'),
|
|
446
|
+
current_owner: z.string().optional().describe('处理人'),
|
|
447
|
+
iteration_id: z.string().optional().describe('迭代ID'),
|
|
448
|
+
copy_attachments: z.number().optional().describe('是否复制附件,值=1复制'),
|
|
449
|
+
copy_comments: z.number().optional().describe('是否复制评论,值=1复制'),
|
|
450
|
+
}),
|
|
451
|
+
handler: async (client, params) => {
|
|
452
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
453
|
+
if (!workspaceId) {
|
|
454
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
455
|
+
}
|
|
456
|
+
const convertedParams = {
|
|
457
|
+
...params,
|
|
458
|
+
id: TapdClient.toLongId(params.id, workspaceId),
|
|
459
|
+
workspace_id: workspaceId,
|
|
460
|
+
};
|
|
461
|
+
return client.post('/bugs/copy', convertedParams);
|
|
462
|
+
},
|
|
463
|
+
},
|
|
464
|
+
// 缺陷关联
|
|
465
|
+
{
|
|
466
|
+
name: 'tapd_get_link_bugs',
|
|
467
|
+
description: '获取缺陷关联关系',
|
|
468
|
+
inputSchema: z.object({
|
|
469
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
470
|
+
bug_id: z.string().describe('缺陷ID (必填)'),
|
|
471
|
+
}),
|
|
472
|
+
handler: async (client, params) => {
|
|
473
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
474
|
+
if (!workspaceId) {
|
|
475
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
476
|
+
}
|
|
477
|
+
const convertedParams = {
|
|
478
|
+
...params,
|
|
479
|
+
bug_id: TapdClient.toLongId(params.bug_id, workspaceId),
|
|
480
|
+
workspace_id: workspaceId,
|
|
481
|
+
};
|
|
482
|
+
return client.get('/bugs/get_link_bugs', convertedParams);
|
|
483
|
+
},
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
name: 'tapd_link_bugs',
|
|
487
|
+
description: '关联缺陷',
|
|
488
|
+
inputSchema: z.object({
|
|
489
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
490
|
+
bug_id: z.string().describe('主缺陷ID (必填)'),
|
|
491
|
+
link_bug_id: z.string().describe('关联缺陷ID (必填)'),
|
|
492
|
+
link_type: z.string().optional().describe('关联类型(前置/后置等)'),
|
|
493
|
+
}),
|
|
494
|
+
handler: async (client, params) => {
|
|
495
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
496
|
+
if (!workspaceId) {
|
|
497
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
498
|
+
}
|
|
499
|
+
const convertedParams = {
|
|
500
|
+
...params,
|
|
501
|
+
bug_id: TapdClient.toLongId(params.bug_id, workspaceId),
|
|
502
|
+
link_bug_id: TapdClient.toLongId(params.link_bug_id, workspaceId),
|
|
503
|
+
workspace_id: workspaceId,
|
|
504
|
+
};
|
|
505
|
+
return client.post('/bugs/link_bugs', convertedParams);
|
|
506
|
+
},
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
name: 'tapd_delete_link_bugs',
|
|
510
|
+
description: '取消关联缺陷',
|
|
511
|
+
inputSchema: z.object({
|
|
512
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
513
|
+
bug_id: z.string().describe('主缺陷ID (必填)'),
|
|
514
|
+
link_bug_id: z.string().describe('要取消关联的缺陷ID (必填)'),
|
|
515
|
+
}),
|
|
516
|
+
handler: async (client, params) => {
|
|
517
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
518
|
+
if (!workspaceId) {
|
|
519
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
520
|
+
}
|
|
521
|
+
const convertedParams = {
|
|
522
|
+
...params,
|
|
523
|
+
bug_id: TapdClient.toLongId(params.bug_id, workspaceId),
|
|
524
|
+
link_bug_id: TapdClient.toLongId(params.link_bug_id, workspaceId),
|
|
525
|
+
workspace_id: workspaceId,
|
|
526
|
+
};
|
|
527
|
+
return client.post('/bugs/delete_link_bugs', convertedParams);
|
|
528
|
+
},
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
name: 'tapd_get_related_stories',
|
|
532
|
+
description: '获取缺陷关联需求',
|
|
533
|
+
inputSchema: z.object({
|
|
534
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
535
|
+
bug_id: z.string().describe('缺陷ID (必填)'),
|
|
536
|
+
}),
|
|
537
|
+
handler: async (client, params) => {
|
|
538
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
539
|
+
if (!workspaceId) {
|
|
540
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
541
|
+
}
|
|
542
|
+
const convertedParams = {
|
|
543
|
+
...params,
|
|
544
|
+
bug_id: TapdClient.toLongId(params.bug_id, workspaceId),
|
|
545
|
+
workspace_id: workspaceId,
|
|
546
|
+
};
|
|
547
|
+
return client.get('/bugs/get_related_stories', convertedParams);
|
|
548
|
+
},
|
|
549
|
+
},
|
|
550
|
+
// 其他
|
|
551
|
+
{
|
|
552
|
+
name: 'tapd_get_bugs_by_view_conf_id',
|
|
553
|
+
description: '获取视图缺陷列表',
|
|
554
|
+
inputSchema: z.object({
|
|
555
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
556
|
+
view_conf_id: z.string().describe('视图配置ID (必填)'),
|
|
557
|
+
limit: z.number().optional().describe('返回数量,默认30,最大200'),
|
|
558
|
+
page: z.number().optional().describe('页码,默认1'),
|
|
559
|
+
fields: z.string().optional().describe('返回字段'),
|
|
560
|
+
}),
|
|
561
|
+
handler: async (client, params) => {
|
|
562
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
563
|
+
if (!workspaceId) {
|
|
564
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
565
|
+
}
|
|
566
|
+
return client.get('/bugs/by_view_conf_id', { ...params, workspace_id: workspaceId });
|
|
567
|
+
},
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
name: 'tapd_get_removed_bugs',
|
|
571
|
+
description: '获取回收站缺陷',
|
|
572
|
+
inputSchema: z.object({
|
|
573
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
574
|
+
id: z.string().optional().describe('缺陷ID'),
|
|
575
|
+
title: z.string().optional().describe('标题'),
|
|
576
|
+
current_owner: z.string().optional().describe('处理人'),
|
|
577
|
+
reporter: z.string().optional().describe('创建人'),
|
|
578
|
+
created: z.string().optional().describe('创建时间'),
|
|
579
|
+
deleted: z.string().optional().describe('删除时间'),
|
|
580
|
+
limit: z.number().optional().describe('返回数量,默认30,最大200'),
|
|
581
|
+
page: z.number().optional().describe('页码'),
|
|
582
|
+
order: z.string().optional().describe('排序'),
|
|
583
|
+
fields: z.string().optional().describe('返回字段'),
|
|
584
|
+
}),
|
|
585
|
+
handler: async (client, params) => {
|
|
586
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
587
|
+
if (!workspaceId) {
|
|
588
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
589
|
+
}
|
|
590
|
+
const convertedParams = {
|
|
591
|
+
...params,
|
|
592
|
+
id: params.id ? TapdClient.toLongId(params.id, workspaceId) : undefined,
|
|
593
|
+
workspace_id: workspaceId,
|
|
594
|
+
};
|
|
595
|
+
return client.get('/bugs/removed', convertedParams);
|
|
596
|
+
},
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
name: 'tapd_bug_ids_to_query_token',
|
|
600
|
+
description: '转换缺陷ID为queryToken',
|
|
601
|
+
inputSchema: z.object({
|
|
602
|
+
workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
|
|
603
|
+
ids: z.string().describe('缺陷ID列表,逗号分隔 (必填)'),
|
|
604
|
+
}),
|
|
605
|
+
handler: async (client, params) => {
|
|
606
|
+
const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
|
|
607
|
+
if (!workspaceId) {
|
|
608
|
+
throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
|
|
609
|
+
}
|
|
610
|
+
// Convert comma-separated IDs: split → convert each → join
|
|
611
|
+
const convertedIds = params.ids.split(',').map((id) => TapdClient.toLongId(id.trim(), workspaceId)).join(',');
|
|
612
|
+
return client.get('/bugs/ids_to_query_token', {
|
|
613
|
+
workspace_id: workspaceId,
|
|
614
|
+
ids: convertedIds,
|
|
615
|
+
});
|
|
241
616
|
},
|
|
242
617
|
},
|
|
243
618
|
];
|