Box MCP Server

by hmk
  • src
import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { CallToolRequestSchema, ListToolsRequestSchema, ErrorCode, McpError, } from "@modelcontextprotocol/sdk/types.js"; import { GitService } from './services/gitService.js'; import { ToolHandlers } from './handlers/toolHandlers.js'; /** * MCPサーバーのインスタンスを作成 */ const server = new Server( { name: "aira-mcp-server", version: "0.1.0", }, { capabilities: { tools: {}, }, } ); // サービスとハンドラーの初期化 const gitService = new GitService(process.cwd()); const toolHandlers = new ToolHandlers(gitService); /** * 利用可能なツールの一覧を返すハンドラー */ server.setRequestHandler(ListToolsRequestSchema, async () => { return toolHandlers.getToolsList(); }); /** * ツールの実行を処理するハンドラー */ server.setRequestHandler(CallToolRequestSchema, async (request, extra) => { try { let response; switch (request.params.name) { case "get_status": response = await toolHandlers.handleGetStatus(request.params.arguments); break; case "create_commit": response = await toolHandlers.handleCreateCommit(request.params.arguments); break; default: throw new McpError( ErrorCode.MethodNotFound, `Unknown tool: ${request.params.name}` ); } return { tools: toolHandlers.getToolsList().tools, ...response }; } catch (error) { if (error instanceof McpError) throw error; throw new McpError(ErrorCode.InternalError, String(error)); } }); /** * サーバーの起動 */ async function main() { const transport = new StdioServerTransport(); await server.connect(transport); console.error('Aira MCP server running on stdio'); } main().catch((error) => { console.error("Server error:", error); process.exit(1); });