mcp-nodejs-filesystem
Version:
MCP Nodejs filesystem - 支持文件处理
74 lines (73 loc) • 2.37 kB
JavaScript
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
import { copyFile } from "./tools/copy_file.js";
/**
* MCP 服务器设置
*/
const server = new Server({
name: "universal-file-converter",
version: "1.0.0"
}, {
capabilities: {
tools: {},
},
});
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "copy_file",
description: "copy file from source path to target path",
inputSchema: zodToJsonSchema(z.object({
filePath: z.string().describe("要检查的根目录路径"),
targetPath: z.string().describe("目标路径"),
}))
}
],
};
});
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { params } = request;
const { name, arguments: args } = params;
if (name === "copy_file") {
const { filePath, targetPath } = args;
const res = await copyFile(filePath, targetPath);
return {
content: [
{
type: "text",
text: res
}
]
};
}
throw new Error(`未知的工具: ${name}`);
});
// 处理初始化后的设置
server.oninitialized = async () => {
console.log("MCP服务器初始化完成");
try {
// 获取初始根目录
const response = await server.listRoots();
if (response && 'roots' in response) {
console.log("初始根目录:", response.roots.map(r => r.uri));
}
}
catch (error) {
console.log("获取初始根目录失败:", error instanceof Error ? error.message : String(error));
}
};
// Start server
async function runServer() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.info("MCP服务器运行在 stdio: mcp-nodejs-filesystem");
}
runServer().catch((error) => {
console.error("Fatal error running server:", error);
process.exit(1);
});