






















@@ -8,16 +8,12 @@
88 */
99import { pathToFileURL } from "node:url";
1010import { Server } from "@modelcontextprotocol/sdk/server/index.js";
11-import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
12-import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
1311import type { AnyAgentTool } from "../agents/tools/common.js";
1412import { loadConfig } from "../config/config.js";
1513import type { OpenClawConfig } from "../config/types.openclaw.js";
1614import { formatErrorMessage } from "../infra/errors.js";
17-import { routeLogsToStderr } from "../logging/console.js";
1815import { resolvePluginTools } from "../plugins/tools.js";
19-import { VERSION } from "../version.js";
20-import { createPluginToolsMcpHandlers } from "./plugin-tools-handlers.js";
16+import { connectToolsMcpServerToStdio, createToolsMcpServer } from "./tools-stdio-server.js";
21172218function resolveTools(config: OpenClawConfig): AnyAgentTool[] {
2319return resolvePluginTools({
@@ -34,54 +30,18 @@ export function createPluginToolsMcpServer(
3430): Server {
3531const cfg = params.config ?? loadConfig();
3632const tools = params.tools ?? resolveTools(cfg);
37-const handlers = createPluginToolsMcpHandlers(tools);
38-39-const server = new Server(
40-{ name: "openclaw-plugin-tools", version: VERSION },
41-{ capabilities: { tools: {} } },
42-);
43-44-server.setRequestHandler(ListToolsRequestSchema, handlers.listTools);
45-46-server.setRequestHandler(CallToolRequestSchema, async (request) => {
47-return await handlers.callTool(request.params);
48-});
49-50-return server;
33+return createToolsMcpServer({ name: "openclaw-plugin-tools", tools });
5134}
52355336export async function servePluginToolsMcp(): Promise<void> {
54-// MCP stdio requires stdout to stay protocol-only.
55-routeLogsToStderr();
56-5737const config = loadConfig();
5838const tools = resolveTools(config);
5939const server = createPluginToolsMcpServer({ config, tools });
6040if (tools.length === 0) {
6141process.stderr.write("plugin-tools-serve: no plugin tools found\n");
6242}
634364-const transport = new StdioServerTransport();
65-66-let shuttingDown = false;
67-const shutdown = () => {
68-if (shuttingDown) {
69-return;
70-}
71-shuttingDown = true;
72-process.stdin.off("end", shutdown);
73-process.stdin.off("close", shutdown);
74-process.off("SIGINT", shutdown);
75-process.off("SIGTERM", shutdown);
76-void server.close();
77-};
78-79-process.stdin.once("end", shutdown);
80-process.stdin.once("close", shutdown);
81-process.once("SIGINT", shutdown);
82-process.once("SIGTERM", shutdown);
83-84-await server.connect(transport);
44+await connectToolsMcpServerToStdio(server);
8545}
86468747if (import.meta.url === pathToFileURL(process.argv[1] ?? "").href) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。