Filesystem MCP Server
by bsmi021
- src
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import {
CallToolRequestSchema,
ListToolsRequestSchema,
ErrorCode,
McpError,
} from "@modelcontextprotocol/sdk/types.js";
import { toolRegistry, McpToolResponse, closeAllWatchers } from './tools/index.js';
/**
* Create an MCP server with tools for file system operations
*/
export const server = new Server(
{
name: "my-filesystem-server",
version: "0.1.0",
},
{
capabilities: {
tools: {},
},
}
);
/**
* Handler that lists available tools for file system operations
*/
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: toolRegistry.getToolDefinitions()
}));
/**
* Handler for file system operation tools
*/
server.setRequestHandler(CallToolRequestSchema, async (request): Promise<McpToolResponse> => {
try {
if (!toolRegistry.hasTool(request.params.name)) {
throw new McpError(
ErrorCode.MethodNotFound,
`Unknown tool: ${request.params.name}`
);
}
const handler = toolRegistry.getToolHandler(request.params.name);
const response = await handler(request.params.arguments || {});
// Convert ToolResponse to McpToolResponse
return {
content: response.content,
_meta: response._meta
};
} catch (error: any) {
if (error instanceof McpError) {
throw error;
}
throw new McpError(
ErrorCode.InternalError,
`File system error: ${error.message}`
);
}
});
// Clean up file watchers when server closes
server.onclose = async () => {
await closeAllWatchers();
};