@xihe-lab/tapd-mcp-server 1.4.4 → 2.0.0-rc.3
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 +55 -28
- package/dist/{index.d.ts → bin/tapd-mcp-server.d.ts} +1 -1
- package/dist/bin/tapd-mcp-server.d.ts.map +1 -0
- package/dist/{index.js → bin/tapd-mcp-server.js} +3 -3
- package/dist/bin/tapd-mcp-server.js.map +1 -0
- package/dist/integration-test.js +1 -1
- package/dist/integration-test.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -61
- package/dist/server.js.map +1 -1
- package/package.json +11 -19
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/tapd-client.d.ts +0 -86
- package/dist/tapd-client.d.ts.map +0 -1
- package/dist/tapd-client.js +0 -190
- package/dist/tapd-client.js.map +0 -1
- package/dist/tools/attachment.d.ts +0 -3
- package/dist/tools/attachment.d.ts.map +0 -1
- package/dist/tools/attachment.js +0 -104
- package/dist/tools/attachment.js.map +0 -1
- package/dist/tools/board.d.ts +0 -3
- package/dist/tools/board.d.ts.map +0 -1
- package/dist/tools/board.js +0 -98
- package/dist/tools/board.js.map +0 -1
- package/dist/tools/bug.d.ts +0 -3
- package/dist/tools/bug.d.ts.map +0 -1
- package/dist/tools/bug.js +0 -619
- package/dist/tools/bug.js.map +0 -1
- package/dist/tools/changes.d.ts +0 -3
- package/dist/tools/changes.d.ts.map +0 -1
- package/dist/tools/changes.js +0 -73
- package/dist/tools/changes.js.map +0 -1
- package/dist/tools/comment.d.ts +0 -3
- package/dist/tools/comment.d.ts.map +0 -1
- package/dist/tools/comment.js +0 -93
- package/dist/tools/comment.js.map +0 -1
- package/dist/tools/custom-fields.d.ts +0 -3
- package/dist/tools/custom-fields.d.ts.map +0 -1
- package/dist/tools/custom-fields.js +0 -105
- package/dist/tools/custom-fields.js.map +0 -1
- package/dist/tools/image.d.ts +0 -3
- package/dist/tools/image.d.ts.map +0 -1
- package/dist/tools/image.js +0 -23
- package/dist/tools/image.js.map +0 -1
- package/dist/tools/index.d.ts +0 -3
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -55
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/iteration.d.ts +0 -3
- package/dist/tools/iteration.d.ts.map +0 -1
- package/dist/tools/iteration.js +0 -190
- package/dist/tools/iteration.js.map +0 -1
- package/dist/tools/mini-comment.d.ts +0 -3
- package/dist/tools/mini-comment.d.ts.map +0 -1
- package/dist/tools/mini-comment.js +0 -74
- package/dist/tools/mini-comment.js.map +0 -1
- package/dist/tools/mini-item.d.ts +0 -3
- package/dist/tools/mini-item.d.ts.map +0 -1
- package/dist/tools/mini-item.js +0 -166
- package/dist/tools/mini-item.js.map +0 -1
- package/dist/tools/mini-workspace.d.ts +0 -3
- package/dist/tools/mini-workspace.d.ts.map +0 -1
- package/dist/tools/mini-workspace.js +0 -43
- package/dist/tools/mini-workspace.js.map +0 -1
- package/dist/tools/program.d.ts +0 -3
- package/dist/tools/program.d.ts.map +0 -1
- package/dist/tools/program.js +0 -27
- package/dist/tools/program.js.map +0 -1
- package/dist/tools/relations.d.ts +0 -3
- package/dist/tools/relations.d.ts.map +0 -1
- package/dist/tools/relations.js +0 -68
- package/dist/tools/relations.js.map +0 -1
- package/dist/tools/release.d.ts +0 -3
- package/dist/tools/release.d.ts.map +0 -1
- package/dist/tools/release.js +0 -250
- package/dist/tools/release.js.map +0 -1
- package/dist/tools/report.d.ts +0 -3
- package/dist/tools/report.d.ts.map +0 -1
- package/dist/tools/report.js +0 -38
- package/dist/tools/report.js.map +0 -1
- package/dist/tools/settings.d.ts +0 -3
- package/dist/tools/settings.d.ts.map +0 -1
- package/dist/tools/settings.js +0 -409
- package/dist/tools/settings.js.map +0 -1
- package/dist/tools/source.d.ts +0 -3
- package/dist/tools/source.d.ts.map +0 -1
- package/dist/tools/source.js +0 -69
- package/dist/tools/source.js.map +0 -1
- package/dist/tools/story.d.ts +0 -3
- package/dist/tools/story.d.ts.map +0 -1
- package/dist/tools/story.js +0 -680
- package/dist/tools/story.js.map +0 -1
- package/dist/tools/task.d.ts +0 -3
- package/dist/tools/task.d.ts.map +0 -1
- package/dist/tools/task.js +0 -267
- package/dist/tools/task.js.map +0 -1
- package/dist/tools/test.d.ts +0 -3
- package/dist/tools/test.d.ts.map +0 -1
- package/dist/tools/test.js +0 -564
- package/dist/tools/test.js.map +0 -1
- package/dist/tools/timesheet.d.ts +0 -3
- package/dist/tools/timesheet.d.ts.map +0 -1
- package/dist/tools/timesheet.js +0 -118
- package/dist/tools/timesheet.js.map +0 -1
- package/dist/tools/user.d.ts +0 -3
- package/dist/tools/user.d.ts.map +0 -1
- package/dist/tools/user.js +0 -57
- package/dist/tools/user.js.map +0 -1
- package/dist/tools/utility.d.ts +0 -3
- package/dist/tools/utility.d.ts.map +0 -1
- package/dist/tools/utility.js +0 -133
- package/dist/tools/utility.js.map +0 -1
- package/dist/tools/wiki.d.ts +0 -3
- package/dist/tools/wiki.d.ts.map +0 -1
- package/dist/tools/wiki.js +0 -227
- package/dist/tools/wiki.js.map +0 -1
- package/dist/tools/workflow.d.ts +0 -3
- package/dist/tools/workflow.d.ts.map +0 -1
- package/dist/tools/workflow.js +0 -116
- package/dist/tools/workflow.js.map +0 -1
- package/dist/tools/workspace.d.ts +0 -3
- package/dist/tools/workspace.d.ts.map +0 -1
- package/dist/tools/workspace.js +0 -137
- package/dist/tools/workspace.js.map +0 -1
- package/dist/types.d.ts +0 -17
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# TAPD MCP Server
|
|
2
2
|
|
|
3
|
-
[](https://github.com/xihe-lab/tapd-mcp-server/actions/workflows/ci.yml)
|
|
4
3
|
[](https://www.npmjs.com/package/@xihe-lab/tapd-mcp-server)
|
|
5
4
|
[](https://github.com/xihe-lab/tapd-mcp-server/blob/main/LICENSE)
|
|
6
5
|
[](https://www.npmjs.com/package/@xihe-lab/tapd-mcp-server)
|
|
@@ -84,21 +83,6 @@ claude mcp remove tapd
|
|
|
84
83
|
|
|
85
84
|
配置格式与上方相同。
|
|
86
85
|
|
|
87
|
-
#### WorkBuddy(腾讯 CodeBuddy 办公客户端)
|
|
88
|
-
|
|
89
|
-
WorkBuddy 采用标准 `mcpServers` 配置,支持两级配置文件:
|
|
90
|
-
|
|
91
|
-
| 级别 | 配置文件路径 | 适用场景 |
|
|
92
|
-
|------|-------------|---------|
|
|
93
|
-
| 用户级 | `~/.workbuddy/mcp.json` | 配置一次,所有项目复用(推荐) |
|
|
94
|
-
| 项目级 | `<项目目录>/.workbuddy/mcp.json` | 仅当前项目生效 |
|
|
95
|
-
|
|
96
|
-
操作入口:侧边栏 **插件** → 右上角 **MCP 服务器** → **配置 MCP**,在可视化编辑器中粘贴与上方相同的 `mcpServers` 配置并保存(也可直接编辑上述路径的 JSON 文件)。
|
|
97
|
-
|
|
98
|
-
保存后检查 MCP Server 状态灯:🟢 连接成功;🔴 配置异常(依次检查 JSON 格式、`npx` 环境、凭证有效性)。
|
|
99
|
-
|
|
100
|
-
> 安全提示:`TAPD_ACCESS_TOKEN` 是调用凭证。使用项目级配置时,请将 `.workbuddy/` 加入 `.gitignore`,避免提交到仓库。
|
|
101
|
-
|
|
102
86
|
### 3. 开始使用
|
|
103
87
|
|
|
104
88
|
配置完成后重启客户端,直接用自然语言与 AI 助手对话:
|
|
@@ -158,6 +142,42 @@ WorkBuddy 采用标准 `mcpServers` 配置,支持两级配置文件:
|
|
|
158
142
|
|
|
159
143
|
共 **210 个工具**,覆盖 **26 个模块**。AI 助手会根据你的自然语言描述自动选择合适的工具。
|
|
160
144
|
|
|
145
|
+
## 富媒体协作
|
|
146
|
+
|
|
147
|
+
在评论、需求/缺陷/任务描述和 Wiki 里 @ 人、贴图、挂附件,四类用法如下(rc.2 新增)。
|
|
148
|
+
|
|
149
|
+
### @ 提及
|
|
150
|
+
|
|
151
|
+
在 md 正文里直接写 `@昵称`(如 `请 @徐昭 今天内确认`),写管道会自动转成 TAPD at-who 提及标记(角标 + 通知)。`@@` 表示字面 `@`(不触发提及);代码段、链接 URL、邮箱里的 `@` 不会被误伤。`tapd_md_to_html` 可传 `workspace_id` 校验昵称是否项目成员(成员接口不可用时自动跳过校验,服务端仍会智能识别);关键通知场景建议同时填 `cc` 兜底。
|
|
152
|
+
|
|
153
|
+
### 图片
|
|
154
|
+
|
|
155
|
+
```text
|
|
156
|
+
1. tapd_upload_image(image_path="./截图.png")
|
|
157
|
+
→ { image_src: "/tfl/pictures/202609/截图.png", markdown: "" }
|
|
158
|
+
2. 把返回的 markdown 拼进 description / comment 正文
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
或者一步到位:`tapd_md_to_html(content="......", upload_images=true)`——扫描 md 里本地存在的图片路径,逐个上传图床并替换为 `/tfl/` 远端路径(默认关闭的显式副作用,返回 `uploaded_images` 清单)。读侧用 `tapd_get_image_url` 可把 `/tfl/` 路径换回临时访问 URL。
|
|
162
|
+
|
|
163
|
+
### 附件
|
|
164
|
+
|
|
165
|
+
```text
|
|
166
|
+
1. tapd_upload_attachment(file_path="./设计稿.pdf", entity_type="story", entity_id="1139...")
|
|
167
|
+
→ 返回 embed_html(富文本锚点)与 embed_md([📎 设计稿.pdf](attach:<ws>/<id>))
|
|
168
|
+
2. 把 embed_md / embed_html 拼进评论或描述正文
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
`tapd_md_to_html` / 写管道会把 `[📎 名称](attach:<ws>/<id>)` 引用自动渲染成 TAPD 附件锚点卡片;读方向 `tapd_html_to_md` 把锚点还原为同名 md 引用。下载走 `tapd_download_attachment`(`/attachments/down`,无需额外授权)。第三方系统文件不传本体、只登记链接:`tapd_attach_external_file`。
|
|
172
|
+
|
|
173
|
+
### 内部链接(零成本)
|
|
174
|
+
|
|
175
|
+
正文里直接写 TAPD 工作项 URL 的 md 链接即可,如 `[需求详情](https://www.tapd.cn/39814312/prong/stories/view/1139814312001001548)`——前端自动卡片化,无需任何转换。
|
|
176
|
+
|
|
177
|
+
### raw_html 直发通道
|
|
178
|
+
|
|
179
|
+
`comment/story/task/bug/wiki` 的 create/update 工具支持 `raw_html: true`:`description` 原样透传(绕过 md→html 自动转换),适合已含 TAPD 原生富文本标记或需要确定性透传的场景。默认 `false` 走 md 管道(@昵称 / 附件引用自动转换)。
|
|
180
|
+
|
|
161
181
|
## 常见问题
|
|
162
182
|
|
|
163
183
|
### AI 助手没有识别到 TAPD 工具
|
|
@@ -180,7 +200,7 @@ WorkBuddy 采用标准 `mcpServers` 配置,支持两级配置文件:
|
|
|
180
200
|
|
|
181
201
|
TAPD 的需求/缺陷/任务等实体长 ID 为 19-20 位数字(如 `1139814312001001378`),超出 JS 安全整数上限(`Number.MAX_SAFE_INTEGER`,16 位),以 JSON 数值形式传递会丢精度导致查询为空。所有长 ID 参数必须以字符串(带引号)传递。
|
|
182
202
|
|
|
183
|
-
|
|
203
|
+
所有工具的长 ID 参数描述均已包含引导提示;若传入安全整数范围内的数值(≤16 位,如短 ID)会自动转为字符串;超出安全范围的数值会返回明确错误提示,请按提示以字符串重传。
|
|
184
204
|
|
|
185
205
|
### 支持 Basic Auth 吗
|
|
186
206
|
|
|
@@ -205,9 +225,24 @@ claude mcp add -s user tapd \
|
|
|
205
225
|
-- npx -y "@xihe-lab/tapd-mcp-server@latest"
|
|
206
226
|
```
|
|
207
227
|
|
|
208
|
-
### Claude Desktop / Cursor
|
|
228
|
+
### Claude Desktop / Cursor
|
|
209
229
|
|
|
210
|
-
修改配置文件中的版本号为 `@latest` 或删除版本锁定(WorkBuddy
|
|
230
|
+
修改配置文件中的版本号为 `@latest` 或删除版本锁定(WorkBuddy 的配置文件路径见下文「WorkBuddy」小节):
|
|
231
|
+
|
|
232
|
+
#### WorkBuddy(腾讯 CodeBuddy 办公客户端)
|
|
233
|
+
|
|
234
|
+
WorkBuddy 采用标准 `mcpServers` 配置,支持两级配置文件:
|
|
235
|
+
|
|
236
|
+
| 级别 | 配置文件路径 | 适用场景 |
|
|
237
|
+
|------|-------------|---------|
|
|
238
|
+
| 用户级 | `~/.workbuddy/mcp.json` | 配置一次,所有项目复用(推荐) |
|
|
239
|
+
| 项目级 | `<项目目录>/.workbuddy/mcp.json` | 仅当前项目生效 |
|
|
240
|
+
|
|
241
|
+
操作入口:侧边栏 **插件** → 右上角 **MCP 服务器** → **配置 MCP**,在可视化编辑器中粘贴与上方相同的 `mcpServers` 配置并保存(也可直接编辑上述路径的 JSON 文件)。
|
|
242
|
+
|
|
243
|
+
保存后检查 MCP Server 状态灯:🟢 连接成功;🔴 配置异常(依次检查 JSON 格式、`npx` 环境、凭证有效性)。
|
|
244
|
+
|
|
245
|
+
> 安全提示:`TAPD_ACCESS_TOKEN` 是调用凭证。使用项目级配置时,请将 `.workbuddy/` 加入 `.gitignore`,避免提交到仓库。
|
|
211
246
|
|
|
212
247
|
```json
|
|
213
248
|
{
|
|
@@ -266,15 +301,7 @@ npm view @xihe-lab/tapd-mcp-server versions
|
|
|
266
301
|
|
|
267
302
|
## 本地开发
|
|
268
303
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
git clone git@github.com:xihe-lab/tapd-mcp-server.git && cd tapd-mcp-server
|
|
273
|
-
npm install && npm run build
|
|
274
|
-
npm run dev
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
添加新工具:在 `src/tools/` 下创建模块文件,导出 `ToolDef[]` 数组,然后在 `src/tools/index.ts` 中导入即可。
|
|
304
|
+
`@xihe-lab/tapd-mcp-server` 以 npm 包分发,通过 `npx -y @xihe-lab/tapd-mcp-server` 运行(配置见上文)。本仓为 MCP 入口层(stdio server 接线),工具内核在同组织包 `@xihe-lab/tapd-core` 中演进——新增工具遵循其 `ToolDef[]` 模式(zod schema + handler,按 TAPD 领域模块组织)。
|
|
278
305
|
|
|
279
306
|
## 许可证
|
|
280
307
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tapd-mcp-server.d.ts","sourceRoot":"","sources":["../../src/bin/tapd-mcp-server.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* It initializes the server, registers all tools, and starts
|
|
7
7
|
* the stdio transport for communication with MCP clients.
|
|
8
8
|
*/
|
|
9
|
-
import { start } from '
|
|
10
|
-
import { allTools } from '
|
|
9
|
+
import { start } from '../server.js';
|
|
10
|
+
import { allTools } from '@xihe-lab/tapd-core';
|
|
11
11
|
/**
|
|
12
12
|
* Start the MCP server
|
|
13
13
|
*/
|
|
@@ -26,4 +26,4 @@ main().catch((error) => {
|
|
|
26
26
|
console.error('Failed to start TAPD MCP server:', error);
|
|
27
27
|
process.exit(1);
|
|
28
28
|
});
|
|
29
|
-
//# sourceMappingURL=
|
|
29
|
+
//# sourceMappingURL=tapd-mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tapd-mcp-server.js","sourceRoot":"","sources":["../../src/bin/tapd-mcp-server.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtB,6DAA6D;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,mBAAmB;AACnB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/integration-test.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - Task 212: tapd_get_current_user
|
|
7
7
|
* - Task 213: batch fetch functionality
|
|
8
8
|
*/
|
|
9
|
-
import { TapdClient } from '
|
|
9
|
+
import { TapdClient } from '@xihe-lab/tapd-core';
|
|
10
10
|
async function runTests() {
|
|
11
11
|
console.log('Starting integration tests...\n');
|
|
12
12
|
const client = TapdClient.fromEnv();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-test.js","sourceRoot":"","sources":["../src/integration-test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"integration-test.js","sourceRoot":"","sources":["../src/integration-test.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import type { ToolDef } from '
|
|
2
|
+
import type { ToolDef } from '@xihe-lab/tapd-core';
|
|
3
3
|
export declare function createServer(): McpServer;
|
|
4
4
|
export declare function registerTools(server: McpServer, tools: ToolDef[]): void;
|
|
5
5
|
export declare function start(tools: ToolDef[]): Promise<void>;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAUnD,wBAAgB,YAAY,IAAI,SAAS,CAOxC;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAmCvE;AAED,wBAAsB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3D"}
|
package/dist/server.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
-
import {
|
|
4
|
-
import { TapdClient } from './tapd-client.js';
|
|
3
|
+
import { ToolRegistry, TapdClient } from '@xihe-lab/tapd-core';
|
|
5
4
|
let client = null;
|
|
6
5
|
function getTapdClient() {
|
|
7
6
|
client ??= TapdClient.fromEnv();
|
|
@@ -14,75 +13,33 @@ export function createServer() {
|
|
|
14
13
|
});
|
|
15
14
|
return server;
|
|
16
15
|
}
|
|
17
|
-
const LONG_ID_PARAM = /^(id|ids)$|^([a-z_]+_ids?)$/;
|
|
18
|
-
function wrapLongIdField(field, key) {
|
|
19
|
-
const wrap = (inner) => z.preprocess(v => {
|
|
20
|
-
if (typeof v !== 'number')
|
|
21
|
-
return v;
|
|
22
|
-
if (Number.isSafeInteger(v))
|
|
23
|
-
return String(v);
|
|
24
|
-
throw new Error(`参数 ${key} 的值超出 JS 安全整数范围(精度丢失),请以字符串(带引号)重传`);
|
|
25
|
-
}, inner);
|
|
26
|
-
if (field instanceof z.ZodString)
|
|
27
|
-
return wrap(field);
|
|
28
|
-
if (field instanceof z.ZodOptional || field instanceof z.ZodNullable) {
|
|
29
|
-
const inner = field._def.innerType;
|
|
30
|
-
if (!(inner instanceof z.ZodString))
|
|
31
|
-
return null;
|
|
32
|
-
const core = wrap(inner);
|
|
33
|
-
const rebuilt = field instanceof z.ZodOptional ? core.optional() : core.nullable();
|
|
34
|
-
return field.description ? rebuilt.describe(field.description) : rebuilt;
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
-
function wrapLongIdParams(schema) {
|
|
40
|
-
const shape = schema instanceof z.ZodObject ? schema.shape : schema;
|
|
41
|
-
if (typeof shape !== 'object' || shape === null)
|
|
42
|
-
return schema;
|
|
43
|
-
const next = {};
|
|
44
|
-
let touched = false;
|
|
45
|
-
const entries = Object.entries(shape);
|
|
46
|
-
for (const [key, field] of entries) {
|
|
47
|
-
const wrapped = LONG_ID_PARAM.test(key) ? wrapLongIdField(field, key) : null;
|
|
48
|
-
if (wrapped) {
|
|
49
|
-
touched = true;
|
|
50
|
-
next[key] = wrapped;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
next[key] = field;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return touched ? next : shape;
|
|
57
|
-
}
|
|
58
16
|
export function registerTools(server, tools) {
|
|
59
|
-
|
|
60
|
-
|
|
17
|
+
const registry = new ToolRegistry();
|
|
18
|
+
registry.register(tools);
|
|
19
|
+
for (const tool of registry.list()) {
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
const schema = tool.inputSchema.shape ?? tool.inputSchema;
|
|
61
22
|
server.tool(tool.name, tool.description, schema, async (args) => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const result = await tool.handler(tapdClient, args);
|
|
65
|
-
return {
|
|
66
|
-
content: [
|
|
67
|
-
{
|
|
68
|
-
type: 'text',
|
|
69
|
-
text: JSON.stringify(result, null, 2),
|
|
70
|
-
},
|
|
71
|
-
],
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
23
|
+
const result = await registry.exec(tool.name, args, { entry: 'mcp' }, getTapdClient);
|
|
24
|
+
if (result.ok) {
|
|
76
25
|
return {
|
|
77
26
|
content: [
|
|
78
27
|
{
|
|
79
28
|
type: 'text',
|
|
80
|
-
text: JSON.stringify(
|
|
29
|
+
text: JSON.stringify(result.data, null, 2),
|
|
81
30
|
},
|
|
82
31
|
],
|
|
83
|
-
isError: true,
|
|
84
32
|
};
|
|
85
33
|
}
|
|
34
|
+
return {
|
|
35
|
+
content: [
|
|
36
|
+
{
|
|
37
|
+
type: 'text',
|
|
38
|
+
text: JSON.stringify({ error: result.error?.message }, null, 2),
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
isError: true,
|
|
42
|
+
};
|
|
86
43
|
});
|
|
87
44
|
}
|
|
88
45
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE/D,IAAI,MAAM,GAAsB,IAAI,CAAC;AAErC,SAAS,aAAa;IACpB,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,KAAgB;IAC/D,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEzB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QACnC,8DAA8D;QAC9D,MAAM,MAAM,GAAI,IAAI,CAAC,WAAmB,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC;QACnE,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,EAChB,MAAM,EACN,KAAK,EAAE,IAAa,EAAE,EAAE;YACtB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,aAAa,CAAC,CAAC;YACrF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC3C;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;qBAChE;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,KAAgB;IAC1C,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE7B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xihe-lab/tapd-mcp-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-rc.3",
|
|
4
4
|
"description": "MCP server for TAPD project management API, enabling AI assistants to manage stories, bugs, tasks, iterations and more via natural language",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "dist/
|
|
6
|
+
"main": "dist/bin/tapd-mcp-server.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"tapd-mcp-server": "./dist/
|
|
8
|
+
"tapd-mcp-server": "./dist/bin/tapd-mcp-server.js"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc",
|
|
12
|
-
"start": "node dist/
|
|
13
|
-
"dev": "tsx src/
|
|
14
|
-
"test": "tsx src/integration-test.ts",
|
|
15
|
-
"type-check": "tsc --noEmit"
|
|
16
|
-
"lint": "eslint src/",
|
|
17
|
-
"prepublishOnly": "npm run build"
|
|
12
|
+
"start": "node dist/bin/tapd-mcp-server.js",
|
|
13
|
+
"dev": "tsx src/bin/tapd-mcp-server.ts",
|
|
14
|
+
"test:integration": "tsx src/integration-test.ts",
|
|
15
|
+
"type-check": "tsc --noEmit"
|
|
18
16
|
},
|
|
19
17
|
"keywords": [
|
|
20
18
|
"mcp",
|
|
@@ -34,7 +32,7 @@
|
|
|
34
32
|
"bugs": {
|
|
35
33
|
"url": "https://github.com/xihe-lab/tapd-mcp-server/issues"
|
|
36
34
|
},
|
|
37
|
-
"homepage": "https://
|
|
35
|
+
"homepage": "https://xihe-lab.com",
|
|
38
36
|
"engines": {
|
|
39
37
|
"node": ">=20.0.0"
|
|
40
38
|
},
|
|
@@ -49,14 +47,8 @@
|
|
|
49
47
|
],
|
|
50
48
|
"dependencies": {
|
|
51
49
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
52
|
-
"
|
|
50
|
+
"@xihe-lab/tapd-core": "^2.0.0-rc.3",
|
|
51
|
+
"zod": "^3.25.76"
|
|
53
52
|
},
|
|
54
|
-
"
|
|
55
|
-
"@eslint/js": "^10.0.1",
|
|
56
|
-
"@types/node": "^22.13.10",
|
|
57
|
-
"eslint": "^10.2.1",
|
|
58
|
-
"tsx": "^4.19.2",
|
|
59
|
-
"typescript": "^5.8.3",
|
|
60
|
-
"typescript-eslint": "^8.59.0"
|
|
61
|
-
}
|
|
53
|
+
"packageManager": "pnpm@12.3.4"
|
|
62
54
|
}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtB,6DAA6D;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,mBAAmB;AACnB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/tapd-client.d.ts
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TAPD API Client
|
|
3
|
-
*
|
|
4
|
-
* Supports dual authentication modes:
|
|
5
|
-
* - Basic Auth: using api_user + api_password
|
|
6
|
-
* - OAuth/Bearer Token: using access_token
|
|
7
|
-
*
|
|
8
|
-
* Uses custom HTTP client for all API calls.
|
|
9
|
-
*/
|
|
10
|
-
export declare class TapdClient {
|
|
11
|
-
private authHeader;
|
|
12
|
-
private baseUrl;
|
|
13
|
-
private authType;
|
|
14
|
-
private apiUser?;
|
|
15
|
-
private apiPassword?;
|
|
16
|
-
private constructor();
|
|
17
|
-
/**
|
|
18
|
-
* Create client from OAuth access token
|
|
19
|
-
*/
|
|
20
|
-
static fromAccessToken(accessToken: string, baseUrl?: string): TapdClient;
|
|
21
|
-
/**
|
|
22
|
-
* Create client from Basic Auth credentials
|
|
23
|
-
*/
|
|
24
|
-
static fromBasicAuth(apiUser: string, apiPassword: string, baseUrl?: string): TapdClient;
|
|
25
|
-
/**
|
|
26
|
-
* Create client from environment variables
|
|
27
|
-
* Priority: TAPD_ACCESS_TOKEN > (TAPD_API_USER + TAPD_API_PASSWORD)
|
|
28
|
-
*/
|
|
29
|
-
static fromEnv(): TapdClient;
|
|
30
|
-
/**
|
|
31
|
-
* Get user nickname from environment variable TAPD_NICK_NAME
|
|
32
|
-
*/
|
|
33
|
-
static getNickName(): string | undefined;
|
|
34
|
-
/**
|
|
35
|
-
* Get default workspace ID from environment variable TAPD_DEFAULT_WORKSPACE_ID
|
|
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
|
-
*/
|
|
68
|
-
request<T>(method: 'GET' | 'POST', path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T>;
|
|
69
|
-
/**
|
|
70
|
-
* GET request to TAPD API
|
|
71
|
-
*/
|
|
72
|
-
get<T>(path: string, params?: Record<string, string | number | boolean>): Promise<T>;
|
|
73
|
-
/**
|
|
74
|
-
* POST request to TAPD API
|
|
75
|
-
*/
|
|
76
|
-
post<T>(path: string, params?: Record<string, string | number | boolean | undefined>): Promise<T>;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* TAPD API response structure
|
|
80
|
-
*/
|
|
81
|
-
export interface TapdResponse<T> {
|
|
82
|
-
status: number;
|
|
83
|
-
data: T;
|
|
84
|
-
info: string;
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=tapd-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,UAAO,GAAG,MAAM;IAc1F;;;;;;;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"}
|