mcp-multi-bridge 2.1.1 → 2.1.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 +6 -6
- package/lib/higress.js +38 -7
- package/lib/settings.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ npm i -g mcp-multi-bridge mcp-multi-login
|
|
|
18
18
|
|
|
19
19
|
两个包配合使用:
|
|
20
20
|
|
|
21
|
-
- `mcp-multi-login` 负责登录,把 token
|
|
21
|
+
- `mcp-multi-login` 负责登录,把 token 写入本地文件(旧包 `mes-login-cli` 已废弃,命令名改为 `mcp-multi-login`)
|
|
22
22
|
- `mcp-multi-bridge` 负责读取 token 并转发请求
|
|
23
23
|
|
|
24
24
|
> **从 `mes-mcp-bridge` 升级是破坏性的,按下面三步走**
|
|
@@ -296,15 +296,15 @@ mcp-multi-login --home "C:/Users/你/.mes-mcp-login" --org tc
|
|
|
296
296
|
`--home` 指向本实例实际读取的目录,不能省——省了就会写到默认目录去,
|
|
297
297
|
表现是「登录成功了但这边还是未登录」,非常难查。
|
|
298
298
|
|
|
299
|
-
|
|
299
|
+
默认用 `mcp-multi-login`。若你换成了别的登录程序(比如自研的 `erp-login`),
|
|
300
300
|
用 `loginCommand` 改:
|
|
301
301
|
|
|
302
302
|
```json
|
|
303
|
-
{ "loginCommand": "
|
|
303
|
+
{ "loginCommand": "erp-login" }
|
|
304
304
|
```
|
|
305
305
|
|
|
306
|
-
>
|
|
307
|
-
>
|
|
306
|
+
> 登录包只提供 `mcp-multi-login` 一个命令,**没有 `mes-login` 别名**。
|
|
307
|
+
> 从旧包升级的,务必确认 `loginCommand` 没被配成旧名。
|
|
308
308
|
|
|
309
309
|
## 文件依赖
|
|
310
310
|
|
|
@@ -312,7 +312,7 @@ mcp-multi-login --home "C:/Users/你/.mes-mcp-login" --org tc
|
|
|
312
312
|
|
|
313
313
|
| 文件 | 由谁创建 |
|
|
314
314
|
|---|---|
|
|
315
|
-
| `config.json` | 登录侧 CLI(`mcp-multi-login
|
|
315
|
+
| `config.json` | 登录侧 CLI(`mcp-multi-login`),也可手写 |
|
|
316
316
|
| `token.json` | 登录侧 CLI(登录时写入) |
|
|
317
317
|
|
|
318
318
|
本包**只读不写**,不会创建、修改或删除这两个文件。
|
package/lib/higress.js
CHANGED
|
@@ -31,19 +31,50 @@ export async function rpc(cfg, org, method, params) {
|
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* 从 MCP 工具返回里取出业务 JSON
|
|
34
|
-
*
|
|
34
|
+
*
|
|
35
|
+
* 网关会在正文前拼一段说明文字(responseTemplate.prependBody),业务 JSON 在最后。
|
|
36
|
+
* 不能简单取第一个 `{`:说明文字里可能带花括号,比如描述字段结构时写的
|
|
37
|
+
* 「data 为 [{value, label}] 数组」,那样会把提示文字当成 JSON 解析,失败后
|
|
38
|
+
* 返回 code=-1,把一个正常的业务响应报成异常。
|
|
39
|
+
*
|
|
40
|
+
* 所以从后往前找:JSON 一定在末尾,而提示文字在前。优先试整段,
|
|
41
|
+
* 再按 `{` 位置倒序尝试,命中即止。最多试 MAX_TRIES 次,避免长文本下反复解析。
|
|
35
42
|
*/
|
|
43
|
+
const MAX_TRIES = 12;
|
|
44
|
+
|
|
36
45
|
export function extractPayload(rpcResult) {
|
|
37
46
|
const content = rpcResult?.result?.content;
|
|
38
47
|
if (!Array.isArray(content) || !content.length) {
|
|
39
48
|
return rpcResult?.result?.isError ? { code: -1, message: '调用失败' } : null;
|
|
40
49
|
}
|
|
41
50
|
const text = content[0].text || '';
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
|
|
52
|
+
// 常见情况:整段就是 JSON
|
|
53
|
+
const whole = text.trim();
|
|
54
|
+
if (whole.startsWith('{')) {
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(whole);
|
|
57
|
+
} catch (e) {
|
|
58
|
+
/* 继续往下找 */
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 从后往前,逐个 `{` 尝试
|
|
63
|
+
let idx = text.length;
|
|
64
|
+
for (let n = 0; n < MAX_TRIES; n++) {
|
|
65
|
+
const start = text.lastIndexOf('{', idx - 1);
|
|
66
|
+
if (start === -1) break;
|
|
67
|
+
try {
|
|
68
|
+
const parsed = JSON.parse(text.slice(start));
|
|
69
|
+
if (parsed && typeof parsed === 'object') return parsed;
|
|
70
|
+
} catch (e) {
|
|
71
|
+
/* 这个位置不是 JSON 起点,继续往前 */
|
|
72
|
+
}
|
|
73
|
+
idx = start;
|
|
48
74
|
}
|
|
75
|
+
|
|
76
|
+
// 兜底:仍然取第一个 `{`,保持与旧行为一致的错误信息
|
|
77
|
+
const first = text.indexOf('{');
|
|
78
|
+
if (first === -1) return { code: -1, message: text.trim() || '响应无 JSON 内容' };
|
|
79
|
+
return { code: -1, message: text.slice(first, first + 200) };
|
|
49
80
|
}
|
package/lib/settings.js
CHANGED
|
@@ -30,8 +30,8 @@ export const DEFAULT_INVALID_CODES = [613, 614, 615, 616];
|
|
|
30
30
|
/**
|
|
31
31
|
* 默认登录命令
|
|
32
32
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
33
|
+
* 与新登录包的命令名一致。登录包只提供 mcp-multi-login 一个命令,没有旧名别名,
|
|
34
|
+
* 所以这里必须写对,否则引导会让模型执行一个不存在的命令。
|
|
35
35
|
*/
|
|
36
36
|
export const DEFAULT_LOGIN_COMMAND = 'mcp-multi-login';
|
|
37
37
|
|