@lionad/kimi-search 0.0.1

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/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.0.1] - 2026-03-10
11
+
12
+ ### Added
13
+ - 初始版本发布
14
+ - 实现 `kimi-search` MCP 工具,支持将 kimi 作为智能代理执行复杂搜索和分析任务
15
+ - 支持通过 npx 直接运行:`npx -y @lionad/kimi-search`
16
+
package/README.md ADDED
@@ -0,0 +1,20 @@
1
+ # Kimi Search MCP Server
2
+
3
+ MCP 服务器,借助 kimi-cli 的力量实现网络搜索功能。
4
+
5
+ ## config
6
+
7
+ ```json
8
+ {
9
+ "mcpServers": {
10
+ "kimi-search": {
11
+ "command": "npx",
12
+ "args": ["-y", "@lionad/kimi-search"]
13
+ }
14
+ }
15
+ }
16
+ ```
17
+
18
+ ## tools
19
+
20
+ * **kimi-search**: 将 kimi 作为智能代理执行复杂的搜索和分析任务(是 `kimi -p "搜索网络: xxx"` 的一层包装)
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kimi-search MCP Server
4
+ *
5
+ * 此服务器将 kimi 作为智能代理(agent)暴露给 MCP 客户端,
6
+ * 支持执行复杂的搜索、分析和信息整合任务。
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
package/dist/index.js ADDED
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kimi-search MCP Server
4
+ *
5
+ * 此服务器将 kimi 作为智能代理(agent)暴露给 MCP 客户端,
6
+ * 支持执行复杂的搜索、分析和信息整合任务。
7
+ */
8
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
+ import { z } from "zod";
11
+ import { execFile } from "child_process";
12
+ import { promisify } from "util";
13
+ const execFileAsync = promisify(execFile);
14
+ // Zod 模式用于输入验证
15
+ const AgentInstructionSchema = z.object({
16
+ instruction: z.string()
17
+ .min(1, "指令不能为空")
18
+ .max(5000, "指令不能超过 5000 个字符")
19
+ .describe(`完整的任务指令,描述需要 kimi-search 执行的搜索或分析任务。
20
+
21
+ 指令应包含:
22
+ 1. 搜索关键词或搜索主题
23
+ 2. 具体目标(要获取什么信息)
24
+ 3. 执行步骤(如何获取和处理信息)
25
+ 4. 输出格式要求
26
+
27
+ 示例指令:
28
+ ---
29
+ 搜索:"bun package manager vs pnpm benchmark 2025"
30
+
31
+ 目标:了解 Bun 作为新兴 JavaScript 包管理器与 pnpm 的对比,包括性能基准测试和功能差异
32
+
33
+ 使用 WebSearch 工具执行网络搜索。
34
+ 对于每个相关结果:
35
+ 1. 使用 WebFetch 或浏览器工具获取页面内容
36
+ 2. 提取与搜索目标相关的关键发现
37
+ 3. 记录:URL、标题、要点、相关度评分(1-5)
38
+
39
+ 以以下格式返回结构化结果:
40
+ \`\`\`
41
+ ## {query}
42
+
43
+ ### 结果 1:{title}
44
+ - URL: {url}
45
+ - 相关度:{1-5}/5
46
+ - 关键发现:
47
+ - {要点}
48
+ - 引用:
49
+ - "{相关摘录}"
50
+ \`\`\`
51
+
52
+ 关注事实信息和有数据支持的论断。
53
+ ---`)
54
+ }).strict();
55
+ // 执行 kimi-search 任务
56
+ async function executeKimiAgent(_instruction) {
57
+ const instruction = `## Context\n* use 90 seconds timeout for tools\n\n以下是具体的网络搜索或分析任务\n\n---\n\n${_instruction}`;
58
+ try {
59
+ const { stdout } = await execFileAsync("kimi", [
60
+ "-p",
61
+ instruction,
62
+ "--print",
63
+ "--output-format",
64
+ "stream-json",
65
+ "--final-message-only"
66
+ ], {
67
+ timeout: 180000, // 3 分钟超时,给 agent 足够时间完成复杂任务
68
+ maxBuffer: 10 * 1024 * 1024 // 10MB 缓冲区
69
+ });
70
+ return stdout.trim();
71
+ }
72
+ catch (error) {
73
+ if (error instanceof Error) {
74
+ if (error.message.includes("ENOENT")) {
75
+ throw new Error("未找到 kimi 命令。请确保 kimi CLI 已安装并添加到 PATH 中。");
76
+ }
77
+ if (error.message.includes("ETIMEDOUT")) {
78
+ throw new Error("任务执行超时。kimi-search 可能需要更长时间处理复杂任务,请稍后重试或简化任务。");
79
+ }
80
+ throw new Error(`任务执行失败: ${error.message}`);
81
+ }
82
+ throw error;
83
+ }
84
+ }
85
+ // 创建 MCP 服务器实例
86
+ const server = new McpServer({
87
+ name: "kimi-search-mcp-server",
88
+ version: "0.0.1"
89
+ });
90
+ // 注册 kimi-search 工具
91
+ server.registerTool("kimi-search", {
92
+ title: "kimi-search",
93
+ description: `将 kimi 作为智能代理(agent)执行复杂的搜索和分析任务。
94
+
95
+ 与简单的搜索工具不同,kimi-search 可以:
96
+ - 进行多步骤的网络搜索
97
+ - 分析和比较多个信息源
98
+ - 生成结构化的报告和总结
99
+ - 执行需要推理的复杂查询
100
+
101
+ 参数:
102
+ - instruction (string): 完整的任务指令,包含搜索关键词、目标、执行步骤和输出格式要求
103
+
104
+ 返回值:
105
+ kimi-search 完成任务的完整输出,通常包含搜索结果、分析或总结。
106
+
107
+ 使用场景对比:
108
+ ❌ 不适合:简单的关键词查询(如 "React")
109
+ ✅ 适合:结构化的任务指令(包含目标、步骤、格式要求)
110
+
111
+ 示例指令结构:
112
+ ---
113
+ 搜索:"bun package manager vs pnpm benchmark 2025"
114
+
115
+ 目标:了解 Bun 作为新兴 JavaScript 包管理器与 pnpm 的对比
116
+
117
+ 执行步骤:
118
+ 1. 使用 WebSearch 工具执行网络搜索
119
+ 2. 对于每个相关结果,获取页面内容
120
+ 3. 提取关键发现,记录 URL、标题、要点、相关度评分
121
+
122
+ 输出格式:
123
+ ## {query}
124
+ ### 结果 1:{title}
125
+ - URL: {url}
126
+ - 相关度:{1-5}/5
127
+ - 关键发现:...
128
+ ---
129
+
130
+ 注意事项:
131
+ - 需要安装 kimi CLI 工具
132
+ - 复杂任务可能需要较长时间(最长 5 分钟)
133
+ - 指令越详细,结果质量越高`,
134
+ inputSchema: AgentInstructionSchema,
135
+ annotations: {
136
+ readOnlyHint: true,
137
+ destructiveHint: false,
138
+ idempotentHint: false,
139
+ openWorldHint: true
140
+ }
141
+ }, async (params) => {
142
+ try {
143
+ const result = await executeKimiAgent(params.instruction);
144
+ return {
145
+ content: [{ type: "text", text: result }]
146
+ };
147
+ }
148
+ catch (error) {
149
+ const errorMessage = error instanceof Error ? error.message : String(error);
150
+ return {
151
+ content: [{
152
+ type: "text",
153
+ text: `任务执行出错: ${errorMessage}`
154
+ }]
155
+ };
156
+ }
157
+ });
158
+ // 主函数
159
+ async function main() {
160
+ const transport = new StdioServerTransport();
161
+ await server.connect(transport);
162
+ console.error("kimi-search MCP Server 正在通过 stdio 运行");
163
+ }
164
+ main().catch(error => {
165
+ console.error("服务器错误:", error);
166
+ process.exit(1);
167
+ });
168
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@lionad/kimi-search",
3
+ "version": "0.0.1",
4
+ "description": "MCP server for kimi search integration",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "main": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "start": "node dist/index.js",
12
+ "dev": "tsx watch src/index.ts",
13
+ "build": "tsc",
14
+ "clean": "rm -rf dist"
15
+ },
16
+ "engines": {
17
+ "node": ">=18"
18
+ },
19
+ "dependencies": {
20
+ "@modelcontextprotocol/sdk": "^1.6.1",
21
+ "zod": "^3.23.8"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^22.10.0",
25
+ "tsx": "^4.19.2",
26
+ "typescript": "^5.7.2"
27
+ }
28
+ }
package/src/index.ts ADDED
@@ -0,0 +1,181 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kimi-search MCP Server
4
+ *
5
+ * 此服务器将 kimi 作为智能代理(agent)暴露给 MCP 客户端,
6
+ * 支持执行复杂的搜索、分析和信息整合任务。
7
+ */
8
+
9
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
10
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
11
+ import { z } from "zod";
12
+ import { execFile } from "child_process";
13
+ import { promisify } from "util";
14
+
15
+ const execFileAsync = promisify(execFile);
16
+
17
+ // Zod 模式用于输入验证
18
+ const AgentInstructionSchema = z.object({
19
+ instruction: z.string()
20
+ .min(1, "指令不能为空")
21
+ .max(5000, "指令不能超过 5000 个字符")
22
+ .describe(`完整的任务指令,描述需要 kimi-search 执行的搜索或分析任务。
23
+
24
+ 指令应包含:
25
+ 1. 搜索关键词或搜索主题
26
+ 2. 具体目标(要获取什么信息)
27
+ 3. 执行步骤(如何获取和处理信息)
28
+ 4. 输出格式要求
29
+
30
+ 示例指令:
31
+ ---
32
+ 搜索:"bun package manager vs pnpm benchmark 2025"
33
+
34
+ 目标:了解 Bun 作为新兴 JavaScript 包管理器与 pnpm 的对比,包括性能基准测试和功能差异
35
+
36
+ 使用 WebSearch 工具执行网络搜索。
37
+ 对于每个相关结果:
38
+ 1. 使用 WebFetch 或浏览器工具获取页面内容
39
+ 2. 提取与搜索目标相关的关键发现
40
+ 3. 记录:URL、标题、要点、相关度评分(1-5)
41
+
42
+ 以以下格式返回结构化结果:
43
+ \`\`\`
44
+ ## {query}
45
+
46
+ ### 结果 1:{title}
47
+ - URL: {url}
48
+ - 相关度:{1-5}/5
49
+ - 关键发现:
50
+ - {要点}
51
+ - 引用:
52
+ - "{相关摘录}"
53
+ \`\`\`
54
+
55
+ 关注事实信息和有数据支持的论断。
56
+ ---`)
57
+ }).strict();
58
+
59
+ type AgentInstruction = z.infer<typeof AgentInstructionSchema>;
60
+
61
+ // 执行 kimi-search 任务
62
+ async function executeKimiAgent(_instruction: string): Promise<string> {
63
+ const instruction = `## Context\n* use 90 seconds timeout for tools\n\n以下是具体的网络搜索或分析任务\n\n---\n\n${_instruction}`
64
+ try {
65
+ const { stdout } = await execFileAsync("kimi", [
66
+ "-p",
67
+ instruction,
68
+ "--print",
69
+ "--output-format",
70
+ "stream-json",
71
+ "--final-message-only"
72
+ ], {
73
+ timeout: 180000, // 3 分钟超时,给 agent 足够时间完成复杂任务
74
+ maxBuffer: 10 * 1024 * 1024 // 10MB 缓冲区
75
+ });
76
+
77
+ return stdout.trim();
78
+ } catch (error) {
79
+ if (error instanceof Error) {
80
+ if (error.message.includes("ENOENT")) {
81
+ throw new Error("未找到 kimi 命令。请确保 kimi CLI 已安装并添加到 PATH 中。");
82
+ }
83
+ if (error.message.includes("ETIMEDOUT")) {
84
+ throw new Error("任务执行超时。kimi-search 可能需要更长时间处理复杂任务,请稍后重试或简化任务。");
85
+ }
86
+ throw new Error(`任务执行失败: ${error.message}`);
87
+ }
88
+ throw error;
89
+ }
90
+ }
91
+
92
+ // 创建 MCP 服务器实例
93
+ const server = new McpServer({
94
+ name: "kimi-search-mcp-server",
95
+ version: "0.0.1"
96
+ });
97
+
98
+ // 注册 kimi-search 工具
99
+ server.registerTool(
100
+ "kimi-search",
101
+ {
102
+ title: "kimi-search",
103
+ description: `将 kimi 作为智能代理(agent)执行复杂的搜索和分析任务。
104
+
105
+ 与简单的搜索工具不同,kimi-search 可以:
106
+ - 进行多步骤的网络搜索
107
+ - 分析和比较多个信息源
108
+ - 生成结构化的报告和总结
109
+ - 执行需要推理的复杂查询
110
+
111
+ 参数:
112
+ - instruction (string): 完整的任务指令,包含搜索关键词、目标、执行步骤和输出格式要求
113
+
114
+ 返回值:
115
+ kimi-search 完成任务的完整输出,通常包含搜索结果、分析或总结。
116
+
117
+ 使用场景对比:
118
+ ❌ 不适合:简单的关键词查询(如 "React")
119
+ ✅ 适合:结构化的任务指令(包含目标、步骤、格式要求)
120
+
121
+ 示例指令结构:
122
+ ---
123
+ 搜索:"bun package manager vs pnpm benchmark 2025"
124
+
125
+ 目标:了解 Bun 作为新兴 JavaScript 包管理器与 pnpm 的对比
126
+
127
+ 执行步骤:
128
+ 1. 使用 WebSearch 工具执行网络搜索
129
+ 2. 对于每个相关结果,获取页面内容
130
+ 3. 提取关键发现,记录 URL、标题、要点、相关度评分
131
+
132
+ 输出格式:
133
+ ## {query}
134
+ ### 结果 1:{title}
135
+ - URL: {url}
136
+ - 相关度:{1-5}/5
137
+ - 关键发现:...
138
+ ---
139
+
140
+ 注意事项:
141
+ - 需要安装 kimi CLI 工具
142
+ - 复杂任务可能需要较长时间(最长 5 分钟)
143
+ - 指令越详细,结果质量越高`,
144
+ inputSchema: AgentInstructionSchema,
145
+ annotations: {
146
+ readOnlyHint: true,
147
+ destructiveHint: false,
148
+ idempotentHint: false,
149
+ openWorldHint: true
150
+ }
151
+ },
152
+ async (params: AgentInstruction) => {
153
+ try {
154
+ const result = await executeKimiAgent(params.instruction);
155
+
156
+ return {
157
+ content: [{ type: "text", text: result }]
158
+ };
159
+ } catch (error) {
160
+ const errorMessage = error instanceof Error ? error.message : String(error);
161
+ return {
162
+ content: [{
163
+ type: "text",
164
+ text: `任务执行出错: ${errorMessage}`
165
+ }]
166
+ };
167
+ }
168
+ }
169
+ );
170
+
171
+ // 主函数
172
+ async function main() {
173
+ const transport = new StdioServerTransport();
174
+ await server.connect(transport);
175
+ console.error("kimi-search MCP Server 正在通过 stdio 运行");
176
+ }
177
+
178
+ main().catch(error => {
179
+ console.error("服务器错误:", error);
180
+ process.exit(1);
181
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "Node16",
5
+ "moduleResolution": "Node16",
6
+ "lib": ["ES2022"],
7
+ "outDir": "./dist",
8
+ "rootDir": "./src",
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "declaration": true,
14
+ "declarationMap": true,
15
+ "sourceMap": true,
16
+ "allowSyntheticDefaultImports": true
17
+ },
18
+ "include": ["src/**/*"],
19
+ "exclude": ["node_modules", "dist"]
20
+ }