Skip to main content
Glama
bsim0927
by bsim0927
server.js3.94 kB
/** * MCP Server Setup */ import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js'; import { z } from 'zod'; import { RunSolverTool, createRunSolverTool } from './tools/run-solver.js'; import { LoadRangeTool, createLoadRangeTool } from './tools/load-range.js'; import { ListRangesTool, createListRangesTool } from './tools/list-ranges.js'; import { ConfigureTreeTool, createConfigureTreeTool } from './tools/configure-tree.js'; import { ListOutputsTool, createListOutputsTool } from './tools/list-outputs.js'; export class TexasSolverMCPServer { constructor(solverPath, storageManager) { this.solverPath = solverPath; this.storageManager = storageManager; // Initialize tools this.runSolverTool = new RunSolverTool(solverPath, storageManager); this.loadRangeTool = new LoadRangeTool(solverPath); this.listRangesTool = new ListRangesTool(solverPath); this.configureTreeTool = new ConfigureTreeTool(solverPath, storageManager); this.listOutputsTool = new ListOutputsTool(storageManager); // Create MCP server this.server = new Server( { name: 'texassolver-mcp', version: '1.0.0' }, { capabilities: { tools: {} } } ); this._setupHandlers(); } /** * Set up request handlers * @private */ _setupHandlers() { // Handle tool listing this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ createRunSolverTool(), createLoadRangeTool(), createListRangesTool(), createConfigureTreeTool(), createListOutputsTool() ] }; }); // Handle tool calls this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request; try { let result; switch (name) { case 'run_solver': result = await this.runSolverTool.execute(args); break; case 'load_range': result = await this.loadRangeTool.execute(args); break; case 'list_ranges': result = await this.listRangesTool.execute(args); break; case 'build_game_tree_config': result = await this.configureTreeTool.execute(args); break; case 'list_outputs': result = await this.listOutputsTool.execute(args); break; default: return { isError: true, content: [ { type: 'text', text: `Unknown tool: ${name}` } ] }; } // Format result for MCP if (result.success === false) { return { isError: true, content: [ { type: 'text', text: `Error: ${result.error}` } ] }; } return { content: [ { type: 'text', text: JSON.stringify(result, null, 2) } ] }; } catch (error) { return { isError: true, content: [ { type: 'text', text: `Server error: ${error.message}` } ] }; } }); } /** * Connect to transport and start server * @param {ServerTransport} transport * @returns {Promise<void>} */ async connect(transport) { await this.server.connect(transport); } /** * Get server instance * @returns {Server} */ getServer() { return this.server; } } export default TexasSolverMCPServer;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bsim0927/texas-solver-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server