@yyaylt/zhipu-web-search-mcp-server 1.0.4 → 1.0.6

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.
Files changed (43) hide show
  1. package/CONTRIBUTING.md +5 -1
  2. package/README.md +37 -7
  3. package/dist/constants.d.ts +1 -1
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +3 -5
  6. package/dist/constants.js.map +1 -1
  7. package/dist/formatResultsMarkdown.d.ts +6 -0
  8. package/dist/formatResultsMarkdown.d.ts.map +1 -0
  9. package/dist/formatResultsMarkdown.js +44 -0
  10. package/dist/formatResultsMarkdown.js.map +1 -0
  11. package/dist/index.d.ts +3 -14
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +22 -166
  14. package/dist/index.js.map +1 -1
  15. package/dist/schemas/webSearch.d.ts +81 -3
  16. package/dist/schemas/webSearch.d.ts.map +1 -1
  17. package/dist/schemas/webSearch.js +24 -3
  18. package/dist/schemas/webSearch.js.map +1 -1
  19. package/dist/schemas/webSearchResponse.d.ts +273 -0
  20. package/dist/schemas/webSearchResponse.d.ts.map +1 -0
  21. package/dist/schemas/webSearchResponse.js +24 -0
  22. package/dist/schemas/webSearchResponse.js.map +1 -0
  23. package/dist/server.d.ts +12 -0
  24. package/dist/server.d.ts.map +1 -0
  25. package/dist/server.js +126 -0
  26. package/dist/server.js.map +1 -0
  27. package/dist/services/webSearchApi.d.ts +2 -3
  28. package/dist/services/webSearchApi.d.ts.map +1 -1
  29. package/dist/services/webSearchApi.js +38 -19
  30. package/dist/services/webSearchApi.js.map +1 -1
  31. package/dist/types.d.ts +10 -35
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/types.js +0 -2
  34. package/dist/types.js.map +1 -1
  35. package/package.json +10 -2
  36. package/src/constants.ts +3 -5
  37. package/src/formatResultsMarkdown.ts +47 -0
  38. package/src/index.ts +21 -185
  39. package/src/schemas/webSearch.ts +26 -3
  40. package/src/schemas/webSearchResponse.ts +26 -0
  41. package/src/server.ts +138 -0
  42. package/src/services/webSearchApi.ts +37 -21
  43. package/src/types.ts +12 -49
package/CONTRIBUTING.md CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  ## 开发环境
14
14
 
15
- - Node.js >= 18
15
+ - 开发和测试使用 Node.js 22 或 24(开发依赖要求高于已发布包的 Node.js >= 18 运行要求)
16
16
  - 安装依赖:`npm install`
17
17
  - 构建:`npm run build`
18
18
  - 开发:`npm run dev`(tsx watch 模式)
@@ -28,10 +28,14 @@
28
28
 
29
29
  ```bash
30
30
  npm test
31
+ npm run typecheck
32
+ npm run test:package
31
33
  ```
32
34
 
33
35
  提交前请确保测试通过。
34
36
 
37
+ `test:package` 会打包并在独立临时目录安装运行依赖,验证实际 bin 入口,结束后清理。GitHub Actions 配置覆盖 Windows、Linux、macOS 的 Node.js 22/24 全量检查,以及 Node.js 18/20 运行兼容检查;Gitee 等其他托管平台可执行相同命令。
38
+
35
39
  ## 提交信息
36
40
 
37
41
  请使用清晰、简洁的提交信息,建议遵循 Conventional Commits 风格:
package/README.md CHANGED
@@ -14,7 +14,20 @@
14
14
  - Node.js >= 18
15
15
  - 智谱 API Key:从 [https://bigmodel.cn/usercenter/proj-mgmt/apikeys](https://bigmodel.cn/usercenter/proj-mgmt/apikeys) 获取
16
16
 
17
- ## 安装与构建
17
+ ## 使用 npx 启动
18
+
19
+ 发布包含此功能的 npm 版本后,无需克隆仓库或手动构建即可启动:
20
+
21
+ ```powershell
22
+ $env:ZHIPU_API_KEY = "your_api_key_here"
23
+ npx -y @yyaylt/zhipu-web-search-mcp-server
24
+ ```
25
+
26
+ 服务器通过 stdio 与 MCP 客户端通信,启动后等待客户端请求。首次运行需要联网下载 npm 包。
27
+
28
+ ## 从源码安装与构建
29
+
30
+ 开发和测试使用 Node.js 22 或 24;已发布包的运行要求仍为 Node.js >= 18。
18
31
 
19
32
  ```bash
20
33
  npm install
@@ -39,7 +52,7 @@ $env:ZHIPU_API_KEY = "your_api_key_here"
39
52
  "mcp": {
40
53
  "zhipu-web-search": {
41
54
  "type": "local",
42
- "command": ["node", "D:\\path\\to\\zhipu-web-search-mcp-server\\dist\\index.js"],
55
+ "command": ["npx", "-y", "@yyaylt/zhipu-web-search-mcp-server"],
43
56
  "environment": {
44
57
  "ZHIPU_API_KEY": "your_api_key_here"
45
58
  }
@@ -51,11 +64,14 @@ $env:ZHIPU_API_KEY = "your_api_key_here"
51
64
  或使用 `opencode mcp add` 命令添加:
52
65
 
53
66
  ```bash
54
- opencode mcp add zhipu-web-search -- node D:\path\to\zhipu-web-search-mcp-server\dist\index.js
67
+ opencode mcp add zhipu-web-search -- npx -y @yyaylt/zhipu-web-search-mcp-server
55
68
  ```
56
69
 
57
70
  然后设置环境变量后重启 opencode 即可。
58
71
 
72
+ 若 Windows 客户端无法直接执行 `npx`,可将 `command` 改为 `["cmd", "/c", "npx", "-y", "@yyaylt/zhipu-web-search-mcp-server"]`。
73
+ 使用本地源码时,仍可将 `command` 设置为 `["node", "D:\\path\\to\\zhipu-web-search-mcp-server\\dist\\index.js"]`。
74
+
59
75
  ## 可用工具
60
76
 
61
77
  ### zhipu_web_search
@@ -67,18 +83,28 @@ opencode mcp add zhipu-web-search -- node D:\path\to\zhipu-web-search-mcp-server
67
83
  | search_query | string | 必填 | 搜索内容,不超过 70 字符 |
68
84
  | search_engine | string | search_std | 搜索引擎:search_std / search_pro / search_pro_sogou / search_pro_quark |
69
85
  | search_intent | boolean | false | 是否执行搜索意图识别 |
70
- | count | number | 10 | 返回结果条数,1-50 |
86
+ | count | number | 支持的引擎默认 10 | search_std / search_pro:1-50 的整数;search_pro_sogou:仅 10/20/30/40/50;search_pro_quark:不支持,不能指定 |
71
87
  | search_domain_filter | string | - | 白名单域名过滤(search_std / search_pro / search_pro_sogou 支持) |
72
88
  | search_recency_filter | string | noLimit | 时间过滤:oneDay / oneWeek / oneMonth / oneYear / noLimit |
73
89
  | content_size | string | medium | 内容长短:medium / high |
74
90
  | user_id | string | - | 终端用户 ID,6-128 字符 |
75
91
 
92
+ 条数行为依据 [Web Search API 官方参数文档](https://docs.bigmodel.cn/api-reference/工具-api/网络搜索):
93
+
94
+ - `count` 是请求条数,输出 JSON 的 `count` 是实际收到的 `results.length`,不能将两者视为必然相等。
95
+ - 官网在搜狗枚举说明后注明同时指定 `search_domain_filter` 和 `search_recency_filter` 时 `count` 不生效,未明确此备注对其他引擎的适用范围。项目保留用户的具体过滤条件并提示此限制。
96
+ - `search_recency_filter` 为 `noLimit` 时省略该请求字段,避免默认值导致同时携带域名和时间过滤;官网未明确服务端是否将显式 `noLimit` 计入上述限制。
97
+ - 夸克不发送 `count`;显式指定会返回参数错误。搜狗的非法条数也会在发送请求前拒绝。
98
+ - 夸克不支持 `search_domain_filter`,显式指定会返回参数错误;纯空白搜索词也会被拒绝。
99
+ - 最终 Markdown(含意图、标题和提示)最多 100,000 字符,按完整条目截断;超长意图最多使用四分之一文本预算。截断标题显示“展示 X 条,共 Y 条”,结构化结果保留完整列表。
100
+ - HTTP 响应体限制为 8 MiB,超过时返回错误;无效响应不会被当作空结果。客户端取消请求会中止 HTTP 请求,不自动重试。
101
+
76
102
  ## 隐私与安全提示
77
103
 
78
104
  - `ZHIPU_API_KEY` 仅通过环境变量注入,请勿将其写入代码、配置仓库或提交到 Git 历史。
79
105
  - `user_id` 参数会原样透传给智谱开放平台,请仅传入**匿名化/不可逆**的终端用户标识,切勿传入邮箱、手机号、身份证号等真实个人身份信息。
80
106
  - 搜索内容(`search_query`)会发送至智谱开放平台进行检索,请避免在搜索词中包含个人敏感信息。
81
- - 服务器不会记录或存储搜索历史,所有请求均即时转发,不在本地落盘。
107
+ - 服务器不主动存储搜索历史;错误日志仅记录固定分类,不记录 API Key、请求体或原始异常。MCP 客户端可能自行保存通信内容或 stderr,请根据客户端配置管理日志。
82
108
 
83
109
  ## 错误码说明
84
110
 
@@ -93,6 +119,10 @@ opencode mcp add zhipu-web-search -- node D:\path\to\zhipu-web-search-mcp-server
93
119
  ```bash
94
120
  npm run dev # tsx watch 模式开发
95
121
  npm run build # 编译到 dist/
122
+ npm pack # 自动构建并生成包含可执行入口的 npm 包
123
+ npm run typecheck # 检查源码和测试的 TypeScript 类型
124
+ npm test # 自动构建并执行回归测试
125
+ npm run test:package # 临时安装真实 npm 包,验证 bin 启动和 MCP 握手(需要联网)
96
126
  ```
97
127
 
98
128
  ## 验证
@@ -110,7 +140,7 @@ This project is licensed under the MIT License. See [LICENSE](./LICENSE) for det
110
140
 
111
141
  Contributions are welcome — please read [CONTRIBUTING.md](./CONTRIBUTING.md) before submitting code.
112
142
 
113
- It includes third-party packages with the following licenses (updated at build time via `npx license-checker --summary`; counts may vary with dependency versions):
143
+ It includes third-party packages with the following licenses (historical snapshot; manually refresh via `npx license-checker --summary`; counts may vary with dependency versions):
114
144
  - MIT (95 packages)
115
145
  - BlueOak-1.0.0 (7 packages)
116
146
  - ISC (7 packages)
@@ -118,4 +148,4 @@ It includes third-party packages with the following licenses (updated at build t
118
148
  - BSD-3-Clause (2 packages)
119
149
  - BSD-2-Clause (1 package)
120
150
 
121
- > 提示:以上数量为生成本文档时的快照。依赖升级后可用 `npx license-checker --summary` 重新生成核对。
151
+ > 提示:以上数量为生成本文档时的快照。依赖升级后可用 `npx license-checker --summary` 重新生成核对。
@@ -1,5 +1,5 @@
1
1
  export declare const API_BASE_URL = "https://open.bigmodel.cn/api/paas/v4/web_search";
2
- export declare const CHARACTER_LIMIT = 25000;
2
+ export declare const CHARACTER_LIMIT = 100000;
3
3
  export declare const SEARCH_ENGINES: {
4
4
  readonly STORE: "search_std";
5
5
  readonly PRO: "search_pro";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,oDAAoD,CAAC;AAG9E,eAAO,MAAM,eAAe,QAAQ,CAAC;AAGrC,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAGX,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAGX,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAGX,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAIpD,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAAQ,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,oDAAoD,CAAC;AAG9E,eAAO,MAAM,eAAe,SAAS,CAAC;AAGtC,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAGX,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAGX,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAGX,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAEpD,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAAQ,CAAC"}
package/dist/constants.js CHANGED
@@ -2,8 +2,8 @@
2
2
  // 智谱 Web Search API 相关常量定义
3
3
  // API 基础地址(智谱开放平台)
4
4
  export const API_BASE_URL = "https://open.bigmodel.cn/api/paas/v4/web_search";
5
- // 响应内容的最大字符数,防止单次返回内容过大
6
- export const CHARACTER_LIMIT = 25000;
5
+ // 最终 Markdown 文本预算;完整结构化结果另受 HTTP 响应体上限约束。
6
+ export const CHARACTER_LIMIT = 100000;
7
7
  // 支持的搜索引擎编码
8
8
  export const SEARCH_ENGINES = {
9
9
  STORE: "search_std",
@@ -24,10 +24,8 @@ export const CONTENT_SIZES = {
24
24
  MEDIUM: "medium",
25
25
  HIGH: "high"
26
26
  };
27
- // 各搜索引擎支持的 count 枚举约束
27
+ // 仅搜狗限制为枚举;基础版和高阶版支持 1-50 的整数。
28
28
  export const COUNT_BY_ENGINE = {
29
- [SEARCH_ENGINES.STORE]: [10, 20, 30, 40, 50],
30
- [SEARCH_ENGINES.PRO]: [10, 20, 30, 40, 50],
31
29
  [SEARCH_ENGINES.PRO_SOGOU]: [10, 20, 30, 40, 50]
32
30
  };
33
31
  // 请求超时时间(毫秒)
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,2BAA2B;AAE3B,mBAAmB;AACnB,MAAM,CAAC,MAAM,YAAY,GAAG,iDAAiD,CAAC;AAE9E,wBAAwB;AACxB,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAErC,YAAY;AACZ,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,YAAY;IACnB,GAAG,EAAE,YAAY;IACjB,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,kBAAkB;CACrB,CAAC;AAEX,YAAY;AACZ,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;CACX,CAAC;AAEX,SAAS;AACT,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,sBAAsB;AACtB,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC5C,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;CACjD,CAAC;AAEF,aAAa;AACb,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,2BAA2B;AAE3B,mBAAmB;AACnB,MAAM,CAAC,MAAM,YAAY,GAAG,iDAAiD,CAAC;AAE9E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAEtC,YAAY;AACZ,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,YAAY;IACnB,GAAG,EAAE,YAAY;IACjB,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,kBAAkB;CACrB,CAAC;AAEX,YAAY;AACZ,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,SAAS;CACX,CAAC;AAEX,SAAS;AACT,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,+BAA+B;AAC/B,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;CACjD,CAAC;AAEF,aAAa;AACb,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { WebSearchToolOutput } from "./types.js";
2
+ export declare function formatResultsMarkdown(output: WebSearchToolOutput, charLimit?: number): {
3
+ text: string;
4
+ truncated: boolean;
5
+ };
6
+ //# sourceMappingURL=formatResultsMarkdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatResultsMarkdown.d.ts","sourceRoot":"","sources":["../src/formatResultsMarkdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,mBAAmB,EAC3B,SAAS,SAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAuCtC"}
@@ -0,0 +1,44 @@
1
+ // 按完整条目截断,标题与意图也计入预算;超长意图最多使用四分之一预算。
2
+ export function formatResultsMarkdown(output, charLimit = Infinity) {
3
+ const limit = Math.max(0, Math.floor(charLimit));
4
+ const intent = output.search_intent[0];
5
+ const intentText = intent
6
+ ? `## 搜索意图识别\n- 原始查询:${intent.query}\n- 识别意图:${intent.intent}${intent.keywords ? `\n- 改写关键词:${intent.keywords}` : ""}\n\n`
7
+ : "";
8
+ const intentLimit = Math.floor(limit / 4);
9
+ // 截断后保留段落分隔,避免后续结果标题粘连到意图文本。
10
+ const prefix = intentText.length <= intentLimit ? intentText
11
+ : intentLimit >= 3 ? intentText.slice(0, intentLimit - 3) + "…\n\n" : "";
12
+ let truncated = prefix.length < intentText.length;
13
+ const total = output.results.length;
14
+ if (total === 0) {
15
+ const text = prefix + "未找到相关搜索结果。";
16
+ return { text: text.slice(0, limit), truncated: truncated || text.length > limit };
17
+ }
18
+ const entries = [];
19
+ let used = prefix.length;
20
+ const maxHeading = `# 搜索结果(展示 ${total} 条,共 ${total} 条)\n\n`.length;
21
+ for (const item of output.results) {
22
+ const lines = [`## ${entries.length + 1}. ${item.title}`];
23
+ if (item.publish_date)
24
+ lines.push(`**发布时间:** ${item.publish_date}`);
25
+ if (item.media)
26
+ lines.push(`**来源:** ${item.media}`);
27
+ if (item.link)
28
+ lines.push(`**链接:** ${item.link}`);
29
+ lines.push("", item.content || "(无摘要)", "");
30
+ const entry = lines.join("\n") + "\n";
31
+ if (used + maxHeading + entry.length > limit) {
32
+ truncated = true;
33
+ break;
34
+ }
35
+ entries.push(entry);
36
+ used += entry.length;
37
+ }
38
+ const heading = entries.length < total
39
+ ? `# 搜索结果(展示 ${entries.length} 条,共 ${total} 条)\n\n`
40
+ : `# 搜索结果 (${total})\n\n`;
41
+ const text = prefix + heading + entries.join("");
42
+ return { text: text.slice(0, limit), truncated: truncated || text.length > limit };
43
+ }
44
+ //# sourceMappingURL=formatResultsMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatResultsMarkdown.js","sourceRoot":"","sources":["../src/formatResultsMarkdown.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,16 +1,5 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * 智谱 Web Search MCP Server
4
- *
5
- * 基于智谱开放平台 Web Search API(/paas/v4/web_search)实现的 MCP 服务器。
6
- * 通过标准输入输出(stdio)与客户端通信,提供网络搜索能力。
7
- *
8
- * 环境变量:
9
- * ZHIPU_API_KEY - 智谱 API Key(必填),从 https://bigmodel.cn/usercenter/proj-mgmt/apikeys 获取
10
- */
11
- import type { WebSearchToolOutput } from "./types.js";
12
- export declare function formatResultsMarkdown(output: WebSearchToolOutput, charLimit?: number): {
13
- text: string;
14
- truncated: boolean;
15
- };
2
+ export { createServer } from "./server.js";
3
+ export { formatResultsMarkdown } from "./formatResultsMarkdown.js";
4
+ export declare const server: import("@modelcontextprotocol/sdk/server/mcp").McpServer;
16
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAatD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,mBAAmB,EAC3B,SAAS,CAAC,EAAE,MAAM,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAkDtC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,eAAO,MAAM,MAAM,0DAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,168 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  // SPDX-License-Identifier: MIT
3
- /**
4
- * 智谱 Web Search MCP Server
5
- *
6
- * 基于智谱开放平台 Web Search API(/paas/v4/web_search)实现的 MCP 服务器。
7
- * 通过标准输入输出(stdio)与客户端通信,提供网络搜索能力。
8
- *
9
- * 环境变量:
10
- * ZHIPU_API_KEY - 智谱 API Key(必填),从 https://bigmodel.cn/usercenter/proj-mgmt/apikeys 获取
11
- */
12
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
14
- import { callWebSearch, handleApiError } from "./services/webSearchApi.js";
15
- import { WebSearchInputSchema } from "./schemas/webSearch.js";
16
- import { CHARACTER_LIMIT } from "./constants.js";
17
- import { pathToFileURL } from "node:url";
18
- // 创建 MCP 服务器实例
19
- const server = new McpServer({
20
- name: "zhipu-web-search-mcp-server",
21
- version: "1.0.0"
22
- });
23
- // 将搜索结果格式化为 Markdown 文本。
24
- // 支持传入 charLimit:构建时逐条累计字符数,一旦加入下一条会超限则立即停止,
25
- // 避免先构建完整大字符串再截断所造成的一次性峰值内存占用。
26
- // 返回 { text, truncated }:text 为最终文本,truncated 标记是否因超限被截断。
27
- export function formatResultsMarkdown(output, charLimit) {
28
- const lines = [];
29
- let charCount = 0;
30
- if (output.search_intent && output.search_intent.length > 0) {
31
- const intent = output.search_intent[0];
32
- lines.push(`## 搜索意图识别`);
33
- lines.push(`- 原始查询:${intent.query}`);
34
- lines.push(`- 识别意图:${intent.intent}`);
35
- if (intent.keywords) {
36
- lines.push(`- 改写关键词:${intent.keywords}`);
37
- }
38
- lines.push("");
39
- }
40
- if (output.results.length === 0) {
41
- return { text: "未找到相关搜索结果。", truncated: false };
42
- }
43
- lines.push(`# 搜索结果 (${output.count})`);
44
- lines.push("");
45
- let truncated = false;
46
- for (let index = 0; index < output.results.length; index++) {
47
- const item = output.results[index];
48
- const itemLines = [`## ${index + 1}. ${item.title}`];
49
- if (item.publish_date) {
50
- itemLines.push(`**发布时间:** ${item.publish_date}`);
51
- }
52
- if (item.media) {
53
- itemLines.push(`**来源:** ${item.media}`);
54
- }
55
- if (item.link) {
56
- itemLines.push(`**链接:** ${item.link}`);
57
- }
58
- itemLines.push("");
59
- itemLines.push(item.content || "(无摘要)");
60
- itemLines.push("");
61
- const itemText = itemLines.join("\n");
62
- // 若加入本条将超出字符上限,则停止构建并标记截断(+1 计入条目间的换行分隔符)
63
- if (charLimit !== undefined && charCount + itemText.length + 1 > charLimit) {
64
- truncated = true;
65
- break;
66
- }
67
- lines.push(itemText);
68
- charCount += itemText.length + 1;
69
- }
70
- return { text: lines.join("\n"), truncated };
71
- }
72
- // 注册网络搜索工具
73
- server.registerTool("zhipu_web_search", {
74
- title: "智谱网络搜索",
75
- description: `通过智谱开放平台 Web Search API 执行网络搜索,返回网页标题、摘要、链接、网站名称等信息。
76
-
77
- 支持四种搜索引擎:search_std(智谱基础版)、search_pro(智谱高阶版)、search_pro_sogou(搜狗)、search_pro_quark(夸克搜索)。
78
-
79
- Args:
80
- - search_query (string): 需要搜索的内容,建议不超过 70 个字符
81
- - search_engine (string): 搜索引擎编码(默认 search_std)
82
- - search_intent (boolean): 是否执行搜索意图识别(默认 false)
83
- - count (number): 返回结果条数,1-50(默认 10)
84
- - search_domain_filter (string): 白名单域名过滤,仅返回指定域名内容(可选)
85
- - search_recency_filter (string): 时间范围过滤:oneDay/oneWeek/oneMonth/oneYear/noLimit(默认 noLimit)
86
- - content_size (string): 返回内容长短:medium/high(默认 medium)
87
- - user_id (string): 终端用户唯一 ID,长度 6-128 字符(可选)
88
-
89
- Returns:
90
- Markdown 文本:搜索意图识别结果 + 搜索结果列表(标题、发布时间、来源、链接、摘要)
91
- 同时返回结构化 JSON 数据。
92
-
93
- Examples:
94
- - "帮我搜索今天的天气" -> search_query="今天北京天气"
95
- - "搜索 GPT-5 相关新闻" -> search_query="GPT-5 新闻", search_recency_filter="oneWeek"
96
- - "在夸克上搜索 Python 教程" -> search_query="Python 教程", search_engine="search_pro_quark"
97
-
98
- Error Handling:
99
- - 1701:网络搜索并发已达上限,稍后重试
100
- - 1702:系统未找到可用的搜索引擎服务
101
- - 1703:搜索引擎未返回有效数据,请调整查询条件`,
102
- inputSchema: WebSearchInputSchema,
103
- annotations: {
104
- readOnlyHint: true,
105
- destructiveHint: false,
106
- idempotentHint: true,
107
- openWorldHint: true
108
- }
109
- }, async (params) => {
110
- const apiKey = process.env.ZHIPU_API_KEY;
111
- if (!apiKey) {
112
- return {
113
- isError: true,
114
- content: [
115
- {
116
- type: "text",
117
- text: "缺少 ZHIPU_API_KEY 环境变量。请在运行前通过环境变量设置智谱 API Key,获取地址:https://bigmodel.cn/usercenter/proj-mgmt/apikeys"
118
- }
119
- ]
120
- };
121
- }
122
- try {
123
- const data = await callWebSearch(apiKey, {
124
- search_query: params.search_query,
125
- search_engine: params.search_engine,
126
- search_intent: params.search_intent,
127
- count: params.count,
128
- ...(params.search_domain_filter
129
- ? { search_domain_filter: params.search_domain_filter }
130
- : {}),
131
- search_recency_filter: params.search_recency_filter,
132
- content_size: params.content_size,
133
- ...(params.user_id ? { user_id: params.user_id } : {})
134
- });
135
- const results = data.search_result ?? [];
136
- const output = {
137
- id: data.id,
138
- created: data.created,
139
- request_id: data.request_id,
140
- search_intent: data.search_intent ?? [],
141
- count: results.length,
142
- results
143
- };
144
- // 一次性限长构建 Markdown,超限即截断,避免先构建完整文本再二次格式化的内存峰值
145
- const { text, truncated } = formatResultsMarkdown(output, CHARACTER_LIMIT);
146
- const finalText = truncated
147
- ? `${text}\n\n> 响应因过长被截断(原 ${results.length} 条),可减少 count 或增加关键词精度以查看更多结果。`
148
- : text;
149
- return {
150
- content: [{ type: "text", text: finalText }],
151
- structuredContent: output
152
- };
153
- }
154
- catch (error) {
155
- return {
156
- isError: true,
157
- content: [
158
- {
159
- type: "text",
160
- text: handleApiError(error)
161
- }
162
- ]
163
- };
164
- }
165
- });
4
+ import { fileURLToPath } from "node:url";
5
+ import { realpathSync } from "node:fs";
6
+ import { createServer } from "./server.js";
7
+ export { createServer } from "./server.js";
8
+ export { formatResultsMarkdown } from "./formatResultsMarkdown.js";
9
+ // 保留旧版模块导出的兼容性;新调用方可用工厂创建独立实例。
10
+ export const server = createServer();
166
11
  // 主函数:通过 stdio 启动服务器
167
12
  async function main() {
168
13
  if (!process.env.ZHIPU_API_KEY) {
@@ -173,10 +18,21 @@ async function main() {
173
18
  await server.connect(transport);
174
19
  console.error("智谱 Web Search MCP server 正在运行 (stdio)");
175
20
  }
176
- // 仅当作为主入口被直接执行时才启动服务器;被测试 import 时不启动
177
- if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
178
- main().catch((error) => {
179
- console.error("服务器启动失败:", error);
21
+ function isMainModule() {
22
+ if (!process.argv[1] || process.argv[1] === "-")
23
+ return false;
24
+ try {
25
+ // 两侧均解析真实路径,兼容 npm 链接和 --preserve-symlinks-main。
26
+ return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1]);
27
+ }
28
+ catch {
29
+ // 导入方的入口可能已删除或并非磁盘文件,不能因此阻止模块被导入。
30
+ return false;
31
+ }
32
+ }
33
+ if (isMainModule()) {
34
+ main().catch(() => {
35
+ console.error("服务器启动失败,请检查运行环境。");
180
36
  process.exit(1);
181
37
  });
182
38
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,+BAA+B;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,+BAA+B;AAC/B,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AAErC,qBAAqB;AACrB,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,CAAC;QACH,iDAAiD;QACjD,OAAO,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,IAAI,YAAY,EAAE,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  export declare const WebSearchInputSchema: z.ZodObject<{
3
- search_query: z.ZodString;
3
+ search_query: z.ZodEffects<z.ZodString, string, string>;
4
4
  search_engine: z.ZodDefault<z.ZodNativeEnum<{
5
5
  readonly STORE: "search_std";
6
6
  readonly PRO: "search_pro";
@@ -8,7 +8,7 @@ export declare const WebSearchInputSchema: z.ZodObject<{
8
8
  readonly PRO_QUARK: "search_pro_quark";
9
9
  }>>;
10
10
  search_intent: z.ZodDefault<z.ZodBoolean>;
11
- count: z.ZodDefault<z.ZodNumber>;
11
+ count: z.ZodOptional<z.ZodNumber>;
12
12
  search_domain_filter: z.ZodOptional<z.ZodString>;
13
13
  search_recency_filter: z.ZodDefault<z.ZodNativeEnum<{
14
14
  readonly ONE_DAY: "oneDay";
@@ -26,9 +26,9 @@ export declare const WebSearchInputSchema: z.ZodObject<{
26
26
  search_query: string;
27
27
  search_engine: "search_std" | "search_pro" | "search_pro_sogou" | "search_pro_quark";
28
28
  search_intent: boolean;
29
- count: number;
30
29
  search_recency_filter: "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit";
31
30
  content_size: "medium" | "high";
31
+ count?: number | undefined;
32
32
  search_domain_filter?: string | undefined;
33
33
  user_id?: string | undefined;
34
34
  }, {
@@ -42,4 +42,82 @@ export declare const WebSearchInputSchema: z.ZodObject<{
42
42
  user_id?: string | undefined;
43
43
  }>;
44
44
  export type WebSearchInput = z.infer<typeof WebSearchInputSchema>;
45
+ export declare const WebSearchRequestSchema: z.ZodEffects<z.ZodEffects<z.ZodObject<{
46
+ search_query: z.ZodEffects<z.ZodString, string, string>;
47
+ search_engine: z.ZodDefault<z.ZodNativeEnum<{
48
+ readonly STORE: "search_std";
49
+ readonly PRO: "search_pro";
50
+ readonly PRO_SOGOU: "search_pro_sogou";
51
+ readonly PRO_QUARK: "search_pro_quark";
52
+ }>>;
53
+ search_intent: z.ZodDefault<z.ZodBoolean>;
54
+ count: z.ZodOptional<z.ZodNumber>;
55
+ search_domain_filter: z.ZodOptional<z.ZodString>;
56
+ search_recency_filter: z.ZodDefault<z.ZodNativeEnum<{
57
+ readonly ONE_DAY: "oneDay";
58
+ readonly ONE_WEEK: "oneWeek";
59
+ readonly ONE_MONTH: "oneMonth";
60
+ readonly ONE_YEAR: "oneYear";
61
+ readonly NO_LIMIT: "noLimit";
62
+ }>>;
63
+ content_size: z.ZodDefault<z.ZodNativeEnum<{
64
+ readonly MEDIUM: "medium";
65
+ readonly HIGH: "high";
66
+ }>>;
67
+ user_id: z.ZodOptional<z.ZodString>;
68
+ }, "strict", z.ZodTypeAny, {
69
+ search_query: string;
70
+ search_engine: "search_std" | "search_pro" | "search_pro_sogou" | "search_pro_quark";
71
+ search_intent: boolean;
72
+ search_recency_filter: "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit";
73
+ content_size: "medium" | "high";
74
+ count?: number | undefined;
75
+ search_domain_filter?: string | undefined;
76
+ user_id?: string | undefined;
77
+ }, {
78
+ search_query: string;
79
+ search_engine?: "search_std" | "search_pro" | "search_pro_sogou" | "search_pro_quark" | undefined;
80
+ search_intent?: boolean | undefined;
81
+ count?: number | undefined;
82
+ search_domain_filter?: string | undefined;
83
+ search_recency_filter?: "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit" | undefined;
84
+ content_size?: "medium" | "high" | undefined;
85
+ user_id?: string | undefined;
86
+ }>, {
87
+ search_query: string;
88
+ search_engine: "search_std" | "search_pro" | "search_pro_sogou" | "search_pro_quark";
89
+ search_intent: boolean;
90
+ search_recency_filter: "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit";
91
+ content_size: "medium" | "high";
92
+ count?: number | undefined;
93
+ search_domain_filter?: string | undefined;
94
+ user_id?: string | undefined;
95
+ }, {
96
+ search_query: string;
97
+ search_engine?: "search_std" | "search_pro" | "search_pro_sogou" | "search_pro_quark" | undefined;
98
+ search_intent?: boolean | undefined;
99
+ count?: number | undefined;
100
+ search_domain_filter?: string | undefined;
101
+ search_recency_filter?: "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit" | undefined;
102
+ content_size?: "medium" | "high" | undefined;
103
+ user_id?: string | undefined;
104
+ }>, {
105
+ search_recency_filter?: "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | undefined;
106
+ search_domain_filter?: string | undefined;
107
+ count?: number | undefined;
108
+ search_query: string;
109
+ search_engine: "search_std" | "search_pro" | "search_pro_sogou" | "search_pro_quark";
110
+ search_intent: boolean;
111
+ content_size: "medium" | "high";
112
+ user_id?: string | undefined;
113
+ }, {
114
+ search_query: string;
115
+ search_engine?: "search_std" | "search_pro" | "search_pro_sogou" | "search_pro_quark" | undefined;
116
+ search_intent?: boolean | undefined;
117
+ count?: number | undefined;
118
+ search_domain_filter?: string | undefined;
119
+ search_recency_filter?: "oneDay" | "oneWeek" | "oneMonth" | "oneYear" | "noLimit" | undefined;
120
+ content_size?: "medium" | "high" | undefined;
121
+ user_id?: string | undefined;
122
+ }>;
45
123
  //# sourceMappingURL=webSearch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webSearch.d.ts","sourceRoot":"","sources":["../../src/schemas/webSearch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4DtB,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"webSearch.d.ts","sourceRoot":"","sources":["../../src/schemas/webSearch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DtB,CAAC;AAEZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBhC,CAAC"}