@zzp123/mcp-zentao 1.17.2 → 1.17.4
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/CHANGELOG.md +26 -0
- package/README.md +9 -12
- package/dist/index-pm.js +0 -44
- package/dist/index-qa.js +0 -83
- package/dist/roleConfig.js +1 -4
- package/package.json +1 -1
- package/scripts/generate-role-versions.cjs +0 -3
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,32 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.17.4] - 2025-11-10
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **产品经理版再次优化** 📊
|
|
12
|
+
- 从产品经理版 (mcp-zentao-pm) 移除工单管理工具(5个工具)
|
|
13
|
+
- 工具数量从 47 个减少到 42 个
|
|
14
|
+
- 包大小从 44 KB 减少到约 40 KB
|
|
15
|
+
- 更专注于需求、产品和计划管理核心功能
|
|
16
|
+
|
|
17
|
+
### Technical
|
|
18
|
+
- 更新 `roleConfig.ts` 中的 pm 角色配置
|
|
19
|
+
- 重新生成产品经理版源文件 (`src/index-pm.ts`)
|
|
20
|
+
|
|
21
|
+
## [1.17.3] - 2025-11-10
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- **测试工程师版优化** 🧪
|
|
25
|
+
- 从测试工程师版 (mcp-zentao-qa) 移除构建版本管理工具(4个工具)和工单管理工具(5个工具)
|
|
26
|
+
- 工具数量从 38 个减少到 29 个
|
|
27
|
+
- 包大小从 38 KB 减少到约 27 KB
|
|
28
|
+
- 更专注于Bug跟踪和测试用例管理核心功能
|
|
29
|
+
|
|
30
|
+
### Technical
|
|
31
|
+
- 更新 `roleConfig.ts` 中的 qa 角色配置
|
|
32
|
+
- 重新生成测试工程师版源文件 (`src/index-qa.ts`)
|
|
33
|
+
|
|
8
34
|
## [1.17.2] - 2025-11-10
|
|
9
35
|
|
|
10
36
|
### Changed
|
package/README.md
CHANGED
|
@@ -18,8 +18,8 @@ npm install @zzp123/mcp-zentao -g
|
|
|
18
18
|
| 版本 | 命令 | 工具数量 | 文件大小 | 适用角色 |
|
|
19
19
|
|------|------|---------|---------|---------|
|
|
20
20
|
| **完整版** | `zentao` | 94个 | 69 KB | 需要使用全部功能 |
|
|
21
|
-
| **产品经理版** | `zentao-pm` |
|
|
22
|
-
| **测试工程师版** | `zentao-qa` |
|
|
21
|
+
| **产品经理版** | `zentao-pm` | 42个 | 40 KB (-55%) | 需求、产品、计划管理 |
|
|
22
|
+
| **测试工程师版** | `zentao-qa` | 29个 | 27 KB (-61%) | Bug、测试用例管理 |
|
|
23
23
|
| **开发工程师版** | `zentao-dev` | 41个 | 37 KB (-46%) | 任务、项目、Bug解决 |
|
|
24
24
|
|
|
25
25
|
### 如何选择版本?
|
|
@@ -50,7 +50,6 @@ npm install @zzp123/mcp-zentao -g
|
|
|
50
50
|
- ✅ Bug查看(只读)
|
|
51
51
|
- ✅ 任务查看(只读)
|
|
52
52
|
- ✅ 评论功能
|
|
53
|
-
- ✅ 工单管理
|
|
54
53
|
- ✅ 文件上传
|
|
55
54
|
</details>
|
|
56
55
|
|
|
@@ -60,11 +59,9 @@ npm install @zzp123/mcp-zentao -g
|
|
|
60
59
|
- ✅ 初始化配置
|
|
61
60
|
- ✅ Bug管理(创建、查看、修改、解决、删除)
|
|
62
61
|
- ✅ 测试用例管理
|
|
63
|
-
- ✅ 构建版本管理
|
|
64
62
|
- ✅ 需求查看(只读)
|
|
65
63
|
- ✅ 任务查看(只读)
|
|
66
64
|
- ✅ 评论功能
|
|
67
|
-
- ✅ 工单管理
|
|
68
65
|
- ✅ 文件上传
|
|
69
66
|
</details>
|
|
70
67
|
|
|
@@ -86,15 +83,15 @@ npm install @zzp123/mcp-zentao -g
|
|
|
86
83
|
|
|
87
84
|
查看完整的版本更新历史,请访问 [CHANGELOG.md](./CHANGELOG.md)
|
|
88
85
|
|
|
89
|
-
**最新版本**: v1.17.
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
- 🚀
|
|
86
|
+
**最新版本**: v1.17.4 - 2025-11-10
|
|
87
|
+
- 📊 产品经理版再次优化(移除工单管理工具)
|
|
88
|
+
- 🎯 产品经理版工具从 47 个减少到 42 个,减少上下文占用 55%
|
|
89
|
+
- 🚀 更专注于需求、产品和计划管理核心功能
|
|
93
90
|
|
|
94
91
|
**近期版本**:
|
|
95
|
-
- v1.
|
|
96
|
-
- v1.
|
|
97
|
-
- v1.
|
|
92
|
+
- v1.17.3 - 测试工程师版优化(移除构建版本和工单管理,29个工具)
|
|
93
|
+
- v1.17.2 - 产品经理版优化(移除反馈管理工具,47个工具)
|
|
94
|
+
- v1.17.1 - 开发工程师版优化(移除工单管理工具,41个工具)
|
|
98
95
|
|
|
99
96
|
## 使用方法
|
|
100
97
|
|
package/dist/index-pm.js
CHANGED
|
@@ -568,50 +568,6 @@ server.tool("deleteStory", "删除需求 - 支持软件需求(story)和用户需
|
|
|
568
568
|
throw new Error("Please initialize Zentao API first");
|
|
569
569
|
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.deleteStory(storyId), null, 2) }] };
|
|
570
570
|
});
|
|
571
|
-
server.tool("getTickets", {
|
|
572
|
-
browseType: z.string().optional(),
|
|
573
|
-
param: z.string().optional(),
|
|
574
|
-
orderBy: z.string().optional(),
|
|
575
|
-
page: z.number().optional(),
|
|
576
|
-
limit: z.number().optional()
|
|
577
|
-
}, async (params) => {
|
|
578
|
-
if (!zentaoApi)
|
|
579
|
-
throw new Error("Please initialize Zentao API first");
|
|
580
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.getTickets(params), null, 2) }] };
|
|
581
|
-
});
|
|
582
|
-
server.tool("getTicketDetail", { ticketId: z.number() }, async ({ ticketId }) => {
|
|
583
|
-
if (!zentaoApi)
|
|
584
|
-
throw new Error("Please initialize Zentao API first");
|
|
585
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.getTicketDetail(ticketId), null, 2) }] };
|
|
586
|
-
});
|
|
587
|
-
server.tool("createTicket", {
|
|
588
|
-
product: z.number(),
|
|
589
|
-
module: z.number(),
|
|
590
|
-
title: z.string(),
|
|
591
|
-
type: z.string().optional(),
|
|
592
|
-
desc: z.string().optional()
|
|
593
|
-
}, async (params) => {
|
|
594
|
-
if (!zentaoApi)
|
|
595
|
-
throw new Error("Please initialize Zentao API first");
|
|
596
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.createTicket(params), null, 2) }] };
|
|
597
|
-
});
|
|
598
|
-
server.tool("updateTicket", {
|
|
599
|
-
ticketId: z.number(),
|
|
600
|
-
product: z.number().optional(),
|
|
601
|
-
module: z.number().optional(),
|
|
602
|
-
title: z.string().optional(),
|
|
603
|
-
type: z.string().optional(),
|
|
604
|
-
desc: z.string().optional()
|
|
605
|
-
}, async ({ ticketId, ...params }) => {
|
|
606
|
-
if (!zentaoApi)
|
|
607
|
-
throw new Error("Please initialize Zentao API first");
|
|
608
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.updateTicket(ticketId, params), null, 2) }] };
|
|
609
|
-
});
|
|
610
|
-
server.tool("deleteTicket", { ticketId: z.number() }, async ({ ticketId }) => {
|
|
611
|
-
if (!zentaoApi)
|
|
612
|
-
throw new Error("Please initialize Zentao API first");
|
|
613
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.deleteTicket(ticketId), null, 2) }] };
|
|
614
|
-
});
|
|
615
571
|
server.tool("getModules", {
|
|
616
572
|
type: z.enum(['story', 'task', 'bug', 'case', 'feedback', 'product']),
|
|
617
573
|
id: z.number(),
|
package/dist/index-qa.js
CHANGED
|
@@ -384,89 +384,6 @@ server.tool("deleteTestCase", { testCaseId: z.number() }, async ({ testCaseId })
|
|
|
384
384
|
throw new Error("Please initialize Zentao API first");
|
|
385
385
|
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.deleteTestCase(testCaseId), null, 2) }] };
|
|
386
386
|
});
|
|
387
|
-
server.tool("createBuild", {
|
|
388
|
-
projectId: z.number(),
|
|
389
|
-
execution: z.number(),
|
|
390
|
-
product: z.number(),
|
|
391
|
-
branch: z.number().optional(),
|
|
392
|
-
name: z.string(),
|
|
393
|
-
builder: z.string(),
|
|
394
|
-
date: z.string().optional(),
|
|
395
|
-
scmPath: z.string().optional(),
|
|
396
|
-
filePath: z.string().optional(),
|
|
397
|
-
desc: z.string().optional()
|
|
398
|
-
}, async ({ projectId, ...params }) => {
|
|
399
|
-
if (!zentaoApi)
|
|
400
|
-
throw new Error("Please initialize Zentao API first");
|
|
401
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.createBuild(projectId, params), null, 2) }] };
|
|
402
|
-
});
|
|
403
|
-
server.tool("getBuildDetail", { buildId: z.number() }, async ({ buildId }) => {
|
|
404
|
-
if (!zentaoApi)
|
|
405
|
-
throw new Error("Please initialize Zentao API first");
|
|
406
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.getBuildDetail(buildId), null, 2) }] };
|
|
407
|
-
});
|
|
408
|
-
server.tool("updateBuild", {
|
|
409
|
-
buildId: z.number(),
|
|
410
|
-
name: z.string().optional(),
|
|
411
|
-
builder: z.string().optional(),
|
|
412
|
-
date: z.string().optional(),
|
|
413
|
-
scmPath: z.string().optional(),
|
|
414
|
-
filePath: z.string().optional(),
|
|
415
|
-
desc: z.string().optional()
|
|
416
|
-
}, async ({ buildId, ...params }) => {
|
|
417
|
-
if (!zentaoApi)
|
|
418
|
-
throw new Error("Please initialize Zentao API first");
|
|
419
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.updateBuild(buildId, params), null, 2) }] };
|
|
420
|
-
});
|
|
421
|
-
server.tool("deleteBuild", { buildId: z.number() }, async ({ buildId }) => {
|
|
422
|
-
if (!zentaoApi)
|
|
423
|
-
throw new Error("Please initialize Zentao API first");
|
|
424
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.deleteBuild(buildId), null, 2) }] };
|
|
425
|
-
});
|
|
426
|
-
server.tool("getTickets", {
|
|
427
|
-
browseType: z.string().optional(),
|
|
428
|
-
param: z.string().optional(),
|
|
429
|
-
orderBy: z.string().optional(),
|
|
430
|
-
page: z.number().optional(),
|
|
431
|
-
limit: z.number().optional()
|
|
432
|
-
}, async (params) => {
|
|
433
|
-
if (!zentaoApi)
|
|
434
|
-
throw new Error("Please initialize Zentao API first");
|
|
435
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.getTickets(params), null, 2) }] };
|
|
436
|
-
});
|
|
437
|
-
server.tool("getTicketDetail", { ticketId: z.number() }, async ({ ticketId }) => {
|
|
438
|
-
if (!zentaoApi)
|
|
439
|
-
throw new Error("Please initialize Zentao API first");
|
|
440
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.getTicketDetail(ticketId), null, 2) }] };
|
|
441
|
-
});
|
|
442
|
-
server.tool("createTicket", {
|
|
443
|
-
product: z.number(),
|
|
444
|
-
module: z.number(),
|
|
445
|
-
title: z.string(),
|
|
446
|
-
type: z.string().optional(),
|
|
447
|
-
desc: z.string().optional()
|
|
448
|
-
}, async (params) => {
|
|
449
|
-
if (!zentaoApi)
|
|
450
|
-
throw new Error("Please initialize Zentao API first");
|
|
451
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.createTicket(params), null, 2) }] };
|
|
452
|
-
});
|
|
453
|
-
server.tool("updateTicket", {
|
|
454
|
-
ticketId: z.number(),
|
|
455
|
-
product: z.number().optional(),
|
|
456
|
-
module: z.number().optional(),
|
|
457
|
-
title: z.string().optional(),
|
|
458
|
-
type: z.string().optional(),
|
|
459
|
-
desc: z.string().optional()
|
|
460
|
-
}, async ({ ticketId, ...params }) => {
|
|
461
|
-
if (!zentaoApi)
|
|
462
|
-
throw new Error("Please initialize Zentao API first");
|
|
463
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.updateTicket(ticketId, params), null, 2) }] };
|
|
464
|
-
});
|
|
465
|
-
server.tool("deleteTicket", { ticketId: z.number() }, async ({ ticketId }) => {
|
|
466
|
-
if (!zentaoApi)
|
|
467
|
-
throw new Error("Please initialize Zentao API first");
|
|
468
|
-
return { content: [{ type: "text", text: JSON.stringify(await zentaoApi.deleteTicket(ticketId), null, 2) }] };
|
|
469
|
-
});
|
|
470
387
|
server.tool("getModules", {
|
|
471
388
|
type: z.enum(['story', 'task', 'bug', 'case', 'feedback', 'product']),
|
|
472
389
|
id: z.number(),
|
package/dist/roleConfig.js
CHANGED
|
@@ -96,19 +96,16 @@ export const ROLE_PERMISSIONS = {
|
|
|
96
96
|
...TOOL_CATEGORIES.bugReadonly,
|
|
97
97
|
...TOOL_CATEGORIES.taskReadonly,
|
|
98
98
|
...TOOL_CATEGORIES.comment,
|
|
99
|
-
...TOOL_CATEGORIES.ticket,
|
|
100
99
|
...TOOL_CATEGORIES.utility
|
|
101
100
|
],
|
|
102
|
-
// 测试工程师:Bug
|
|
101
|
+
// 测试工程师:Bug、测试用例、评论
|
|
103
102
|
qa: [
|
|
104
103
|
...TOOL_CATEGORIES.init,
|
|
105
104
|
...TOOL_CATEGORIES.bug,
|
|
106
105
|
...TOOL_CATEGORIES.testcase,
|
|
107
|
-
...TOOL_CATEGORIES.build,
|
|
108
106
|
...TOOL_CATEGORIES.storyReadonly,
|
|
109
107
|
...TOOL_CATEGORIES.taskReadonly,
|
|
110
108
|
...TOOL_CATEGORIES.comment,
|
|
111
|
-
...TOOL_CATEGORIES.ticket,
|
|
112
109
|
...TOOL_CATEGORIES.utility
|
|
113
110
|
],
|
|
114
111
|
// 开发工程师:任务、Bug解决、项目、迭代、版本构建、评论
|
package/package.json
CHANGED
|
@@ -35,18 +35,15 @@ const ROLE_PERMISSIONS = {
|
|
|
35
35
|
...TOOL_CATEGORIES.bugReadonly,
|
|
36
36
|
...TOOL_CATEGORIES.taskReadonly,
|
|
37
37
|
...TOOL_CATEGORIES.comment,
|
|
38
|
-
...TOOL_CATEGORIES.ticket,
|
|
39
38
|
...TOOL_CATEGORIES.utility
|
|
40
39
|
],
|
|
41
40
|
qa: [
|
|
42
41
|
...TOOL_CATEGORIES.init,
|
|
43
42
|
...TOOL_CATEGORIES.bug,
|
|
44
43
|
...TOOL_CATEGORIES.testcase,
|
|
45
|
-
...TOOL_CATEGORIES.build,
|
|
46
44
|
...TOOL_CATEGORIES.storyReadonly,
|
|
47
45
|
...TOOL_CATEGORIES.taskReadonly,
|
|
48
46
|
...TOOL_CATEGORIES.comment,
|
|
49
|
-
...TOOL_CATEGORIES.ticket,
|
|
50
47
|
...TOOL_CATEGORIES.utility
|
|
51
48
|
],
|
|
52
49
|
dev: [
|