@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.
- package/CONTRIBUTING.md +5 -1
- package/README.md +37 -7
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -5
- package/dist/constants.js.map +1 -1
- package/dist/formatResultsMarkdown.d.ts +6 -0
- package/dist/formatResultsMarkdown.d.ts.map +1 -0
- package/dist/formatResultsMarkdown.js +44 -0
- package/dist/formatResultsMarkdown.js.map +1 -0
- package/dist/index.d.ts +3 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -166
- package/dist/index.js.map +1 -1
- package/dist/schemas/webSearch.d.ts +81 -3
- package/dist/schemas/webSearch.d.ts.map +1 -1
- package/dist/schemas/webSearch.js +24 -3
- package/dist/schemas/webSearch.js.map +1 -1
- package/dist/schemas/webSearchResponse.d.ts +273 -0
- package/dist/schemas/webSearchResponse.d.ts.map +1 -0
- package/dist/schemas/webSearchResponse.js +24 -0
- package/dist/schemas/webSearchResponse.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +126 -0
- package/dist/server.js.map +1 -0
- package/dist/services/webSearchApi.d.ts +2 -3
- package/dist/services/webSearchApi.d.ts.map +1 -1
- package/dist/services/webSearchApi.js +38 -19
- package/dist/services/webSearchApi.js.map +1 -1
- package/dist/types.d.ts +10 -35
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/package.json +10 -2
- package/src/constants.ts +3 -5
- package/src/formatResultsMarkdown.ts +47 -0
- package/src/index.ts +21 -185
- package/src/schemas/webSearch.ts +26 -3
- package/src/schemas/webSearchResponse.ts +26 -0
- package/src/server.ts +138 -0
- package/src/services/webSearchApi.ts +37 -21
- 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": ["
|
|
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 --
|
|
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 |
|
|
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 (
|
|
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` 重新生成核对。
|
package/dist/constants.d.ts
CHANGED
|
@@ -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 =
|
|
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";
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -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,
|
|
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 =
|
|
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
|
-
//
|
|
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
|
// 请求超时时间(毫秒)
|
package/dist/constants.js.map
CHANGED
|
@@ -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,
|
|
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 @@
|
|
|
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
|
-
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
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 {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
177
|
-
if (process.argv[1]
|
|
178
|
-
|
|
179
|
-
|
|
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":";AACA,+BAA+B;AAC/B
|
|
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.
|
|
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;
|
|
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"}
|