Skip to content

Commit 2a710ab

Browse files
author
CodeBuddy Attribution Bot
committed
fix(attribution): MCP工具cloudPath参数格式约定不明确导致路径不一致 (issue_mnri8zp3_vsojwy)
1 parent 362c61a commit 2a710ab

5 files changed

Lines changed: 17 additions & 16 deletions

File tree

doc/mcp-tools.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -426,10 +426,10 @@ classDiagram
426426
<thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>说明</th></tr></thead>
427427
<tbody>
428428
<tr><td><code>localPath</code></td><td>string</td><td></td><td>本地文件或文件夹路径,需要是绝对路径,例如 /tmp/files/data.txt。</td></tr>
429-
<tr><td><code>cloudPath</code></td><td>string</td><td></td><td>静态托管云端文件或文件夹路径,例如 files/data.txt。若部署到子路径,请同时检查构建配置中的 publicPath、base、assetPrefix 等是否为相对路径。云存储对象路径请改用 manageStorage。</td></tr>
429+
<tr><td><code>cloudPath</code></td><td>string</td><td></td><td>静态托管云端文件或文件夹路径,例如 /、/vite-test/ 或 /vite-test/index.html。可带或不带前导 /,服务端会自动规范化;/ 表示托管根目录。若部署到子路径,请同时检查构建配置中的 publicPath、base、assetPrefix 等是否为相对路径。云存储对象路径请改用 manageStorage。</td></tr>
430430
<tr><td><code>files</code></td><td>array of object</td><td></td><td>多文件上传配置 默认值: []</td></tr>
431431
<tr><td><code>files[].localPath</code></td><td>string</td><td>是</td><td></td></tr>
432-
<tr><td><code>files[].cloudPath</code></td><td>string</td><td>是</td><td></td></tr>
432+
<tr><td><code>files[].cloudPath</code></td><td>string</td><td>是</td><td>静态托管路径,可带或不带前导 /;服务端会自动规范化</td></tr>
433433
<tr><td><code>ignore</code></td><td>string \| array of string</td><td></td><td>忽略文件模式</td></tr>
434434
</tbody>
435435
</table>
@@ -444,7 +444,7 @@ classDiagram
444444
<table>
445445
<thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>说明</th></tr></thead>
446446
<tbody>
447-
<tr><td><code>cloudPath</code></td><td>string</td><td>是</td><td>云端文件或文件夹路径</td></tr>
447+
<tr><td><code>cloudPath</code></td><td>string</td><td>是</td><td>云端文件或文件夹路径,可带或不带前导 /;服务端会自动规范化,/ 表示根目录</td></tr>
448448
<tr><td><code>isDir</code></td><td>boolean</td><td></td><td>是否为文件夹 默认值: false</td></tr>
449449
</tbody>
450450
</table>
@@ -459,7 +459,7 @@ classDiagram
459459
<table>
460460
<thead><tr><th>参数名</th><th>类型</th><th>必填</th><th>说明</th></tr></thead>
461461
<tbody>
462-
<tr><td><code>prefix</code></td><td>string</td><td>是</td><td>匹配前缀</td></tr>
462+
<tr><td><code>prefix</code></td><td>string</td><td>是</td><td>匹配前缀,可带或不带前导 /;服务端会自动规范化,/ 表示根目录前缀</td></tr>
463463
<tr><td><code>marker</code></td><td>string</td><td></td><td>起始对象键标记</td></tr>
464464
<tr><td><code>maxKeys</code></td><td>number</td><td></td><td>单次返回最大条目数</td></tr>
465465
</tbody>

mcp/DOC.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@
105105

106106
| 工具标识 | 功能描述 | 核心参数 |
107107
|---------------------------|-----------------------------------------|---------------------------------------------------------------------------------------------|
108-
| `uploadFiles` | 上传文件到静态网站托管 | `localPath`(选填,本地文件或文件夹路径),`cloudPath`(选填,静态托管相对路径,不带前导 `/`),`files`(选填,多文件上传配置,`files[].cloudPath` 同样使用不带前导 `/` 的托管相对路径),`ignore`(选填,忽略文件模式) |
108+
| `uploadFiles` | 上传文件到静态网站托管 | `localPath`(选填,本地文件或文件夹路径),`cloudPath`(选填,静态托管云端路径,可带或不带前导 `/``/` 表示托管根目录),`files`(选填,多文件上传配置,`files[].cloudPath` 同样可带或不带前导 `/`,服务端会自动规范化),`ignore`(选填,忽略文件模式) |
109109
| `listFiles` | 获取静态网站托管的文件列表 ||
110-
| `deleteFiles` | 删除静态网站托管的文件或文件夹 | `cloudPath`(必填,托管相对路径,不带前导 `/`),`isDir`(选填,是否为文件夹,默认为 `false`|
111-
| `findFiles` | 搜索静态网站托管的文件 | `prefix`(必填,托管相对路径前缀,不带前导 `/`),`marker`(选填,起始对象键标记),`maxKeys`(选填,单次返回最大条目数) |
110+
| `deleteFiles` | 删除静态网站托管的文件或文件夹 | `cloudPath`(必填,托管云端路径,可带或不带前导 `/``/` 表示根目录),`isDir`(选填,是否为文件夹,默认为 `false`|
111+
| `findFiles` | 搜索静态网站托管的文件 | `prefix`(必填,托管路径前缀,可带或不带前导 `/``/` 表示根目录前缀),`marker`(选填,起始对象键标记),`maxKeys`(选填,单次返回最大条目数) |
112112
| `createHostingDomain` | 绑定自定义域名 | `domain`(必填,自定义域名),`certId`(必填,证书 ID) |
113113
| `deleteHostingDomain` | 解绑自定义域名 | `domain`(必填,自定义域名) |
114114
| `getWebsiteConfig` | 获取静态网站配置 ||

mcp/Intro.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@
105105

106106
| 工具标识 | 功能描述 | 核心参数 |
107107
|---------------------------|-----------------------------------------|---------------------------------------------------------------------------------------------|
108-
| `uploadFiles` | 上传文件到静态网站托管 | `localPath`(选填,本地文件或文件夹路径),`cloudPath`(选填,静态托管相对路径,不带前导 `/`),`files`(选填,多文件上传配置,`files[].cloudPath` 同样使用不带前导 `/` 的托管相对路径),`ignore`(选填,忽略文件模式) |
108+
| `uploadFiles` | 上传文件到静态网站托管 | `localPath`(选填,本地文件或文件夹路径),`cloudPath`(选填,静态托管云端路径,可带或不带前导 `/``/` 表示托管根目录),`files`(选填,多文件上传配置,`files[].cloudPath` 同样可带或不带前导 `/`,服务端会自动规范化),`ignore`(选填,忽略文件模式) |
109109
| `listFiles` | 获取静态网站托管的文件列表 ||
110-
| `deleteFiles` | 删除静态网站托管的文件或文件夹 | `cloudPath`(必填,托管相对路径,不带前导 `/`),`isDir`(选填,是否为文件夹,默认为 `false`|
111-
| `findFiles` | 搜索静态网站托管的文件 | `prefix`(必填,托管相对路径前缀,不带前导 `/`),`marker`(选填,起始对象键标记),`maxKeys`(选填,单次返回最大条目数) |
110+
| `deleteFiles` | 删除静态网站托管的文件或文件夹 | `cloudPath`(必填,托管云端路径,可带或不带前导 `/``/` 表示根目录),`isDir`(选填,是否为文件夹,默认为 `false`|
111+
| `findFiles` | 搜索静态网站托管的文件 | `prefix`(必填,托管路径前缀,可带或不带前导 `/``/` 表示根目录前缀),`marker`(选填,起始对象键标记),`maxKeys`(选填,单次返回最大条目数) |
112112
| `createHostingDomain` | 绑定自定义域名 | `domain`(必填,自定义域名),`certId`(必填,证书 ID) |
113113
| `deleteHostingDomain` | 解绑自定义域名 | `domain`(必填,自定义域名) |
114114
| `getWebsiteConfig` | 获取静态网站配置 ||

mcp/src/tools/hosting.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -280,11 +280,11 @@ export function registerHostingTools(server: ExtendedMcpServer) {
280280
description: "上传文件到静态网站托管,仅用于 Web 站点部署,不用于云存储对象上传。部署前请先完成构建;如果站点会部署到子路径,请检查构建配置中的 publicPath、base、assetPrefix 等是否使用相对路径,避免静态资源加载失败。若需要上传 COS 云存储文件,请使用 manageStorage。对于本地评测、现有脚手架补全或仅需本地开发服务器验证的任务,通常不需要调用此工具,除非用户明确要求部署站点。",
281281
inputSchema: {
282282
localPath: z.string().optional().describe("本地文件或文件夹路径,需要是绝对路径,例如 /tmp/files/data.txt。"),
283-
cloudPath: z.string().optional().describe("静态托管云端文件或文件夹路径,例如 vite-test 或 vite-test/index.html;应使用不带前导 / 的托管相对路径。若部署到子路径,请同时检查构建配置中的 publicPath、base、assetPrefix 等是否为相对路径。云存储对象路径请改用 manageStorage。"),
283+
cloudPath: z.string().optional().describe("静态托管云端文件或文件夹路径,例如 /、/vite-test//vite-test/index.html。可带或不带前导 /,服务端会自动规范化;/ 表示托管根目录。若部署到子路径,请同时检查构建配置中的 publicPath、base、assetPrefix 等是否为相对路径。云存储对象路径请改用 manageStorage。"),
284284
files: z.array(z.object({
285285
localPath: z.string(),
286-
cloudPath: z.string().describe("静态托管相对路径,不带前导 /")
287-
})).default([]).describe("多文件上传配置,其中每个 cloudPath 都应使用不带前导 / 的托管相对路径"),
286+
cloudPath: z.string().describe("静态托管路径,可带或不带前导 /;服务端会自动规范化")
287+
})).default([]).describe("多文件上传配置,其中每个 cloudPath 都可带或不带前导 /;服务端会自动规范化"),
288288
ignore: z.union([z.string(), z.array(z.string())]).optional().describe("忽略文件模式")
289289
},
290290
annotations: {
@@ -386,7 +386,7 @@ export function registerHostingTools(server: ExtendedMcpServer) {
386386
title: "删除静态文件",
387387
description: "删除静态网站托管的文件或文件夹",
388388
inputSchema: {
389-
cloudPath: z.string().describe("云端文件或文件夹路径,使用不带前导 / 的托管相对路径"),
389+
cloudPath: z.string().describe("云端文件或文件夹路径,可带或不带前导 /;服务端会自动规范化,/ 表示根目录"),
390390
isDir: z.boolean().default(false).describe("是否为文件夹")
391391
},
392392
annotations: {
@@ -423,7 +423,7 @@ export function registerHostingTools(server: ExtendedMcpServer) {
423423
title: "搜索静态文件",
424424
description: "搜索静态网站托管的文件",
425425
inputSchema: {
426-
prefix: z.string().describe("匹配前缀,使用不带前导 / 的托管相对路径前缀"),
426+
prefix: z.string().describe("匹配前缀,可带或不带前导 /;服务端会自动规范化,/ 表示根目录前缀"),
427427
marker: z.string().optional().describe("起始对象键标记"),
428428
maxKeys: z.number().optional().describe("单次返回最大条目数")
429429
},

mcp/src/tools/storage-hosting-guidance.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ describe("storage and hosting tool guidance", () => {
3737
expect(tools.uploadFiles.meta.description).toContain("manageStorage");
3838
expect(tools.uploadFiles.meta.description).toContain("通常不需要调用此工具");
3939
expect(tools.uploadFiles.meta.inputSchema.cloudPath.description).toContain("云存储对象路径请改用 manageStorage");
40-
expect(tools.uploadFiles.meta.inputSchema.cloudPath.description).toContain("不带前导 /");
40+
expect(tools.uploadFiles.meta.inputSchema.cloudPath.description).toContain("可带或不带前导 /");
41+
expect(tools.uploadFiles.meta.inputSchema.cloudPath.description).toContain("/ 表示托管根目录");
4142
expect(tools.manageStorage.meta.description).toContain("仅用于 COS/Storage 对象");
4243
expect(tools.manageStorage.meta.description).toContain("不用于静态网站托管");
4344
});

0 commit comments

Comments
 (0)