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 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 写入本地文件(旧名 `mes-login-cli`,命令 `mes-login` 仍可用)
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
- 若登录命令不叫 `mcp-multi-login`(例如你用的还是旧包,只有 `mes-login`),
299
+ 默认用 `mcp-multi-login`。若你换成了别的登录程序(比如自研的 `erp-login`),
300
300
  用 `loginCommand` 改:
301
301
 
302
302
  ```json
303
- { "loginCommand": "mes-login" }
303
+ { "loginCommand": "erp-login" }
304
304
  ```
305
305
 
306
- > 新版登录包同时提供 `mcp-multi-login` 与 `mes-login` 两个命令,指向同一程序,
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` / 旧 `mes-login-cli`),也可手写 |
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
- const start = text.indexOf('{');
43
- if (start === -1) return { code: -1, message: text.trim() || '响应无 JSON 内容' };
44
- try {
45
- return JSON.parse(text.slice(start));
46
- } catch (e) {
47
- return { code: -1, message: text.slice(0, 200) };
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
- * 用新包名对应的命令。登录包里 `mcp-multi-login` 与 `mes-login` 两个 bin
34
- * 指向同一程序,所以写新名对老用户也是安全的。
33
+ * 与新登录包的命令名一致。登录包只提供 mcp-multi-login 一个命令,没有旧名别名,
34
+ * 所以这里必须写对,否则引导会让模型执行一个不存在的命令。
35
35
  */
36
36
  export const DEFAULT_LOGIN_COMMAND = 'mcp-multi-login';
37
37
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-multi-bridge",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "多后端 MCP 桥接:把网关后多个后端、多个租户的工具集合并成一个 MCP 服务,凭据由登录 CLI 提供",
5
5
  "type": "module",
6
6
  "bin": {