Skip to main content
Glama
create-server.ts3.2 kB
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import type { Services } from './services.js'; import { planSchema, planToolDescription, requirementSchema, requirementToolDescription, solutionSchema, solutionToolDescription, decisionSchema, decisionToolDescription, phaseSchema, phaseToolDescription, artifactSchema, artifactToolDescription, linkSchema, linkToolDescription, querySchema, queryToolDescription, batchSchema, batchToolDescription, } from './schemas/index.js'; import { handlePlan, handleRequirement, handleSolution, handleDecision, handlePhase, handleArtifact, handleLink, handleQuery, handleBatch, } from './handlers/index.js'; export interface McpServerResult { server: McpServer; services: Services; } export function createMcpServer(services: Services): McpServerResult { const server = new McpServer({ name: 'mcp-planning-server', version: '1.0.0', }); // Register all 9 tools with Zod schemas // BUG FIX: Remove try-catch blocks to allow errors to propagate naturally to MCP SDK server.registerTool('plan', { description: planToolDescription, inputSchema: planSchema }, async (args) => { return await handlePlan(args as unknown as { action: string; [key: string]: unknown }, services); }); server.registerTool('requirement', { description: requirementToolDescription, inputSchema: requirementSchema }, async (args) => { return await handleRequirement(args as unknown as { action: string; [key: string]: unknown }, services); }); server.registerTool('solution', { description: solutionToolDescription, inputSchema: solutionSchema }, async (args) => { return await handleSolution(args as unknown as { action: string; [key: string]: unknown }, services); }); server.registerTool('decision', { description: decisionToolDescription, inputSchema: decisionSchema }, async (args) => { return await handleDecision(args as unknown as { action: string; [key: string]: unknown }, services); }); server.registerTool('phase', { description: phaseToolDescription, inputSchema: phaseSchema }, async (args) => { return await handlePhase(args as unknown as { action: string; [key: string]: unknown }, services); }); server.registerTool('artifact', { description: artifactToolDescription, inputSchema: artifactSchema }, async (args) => { return await handleArtifact(args as unknown as { action: string; [key: string]: unknown }, services); }); server.registerTool('link', { description: linkToolDescription, inputSchema: linkSchema }, async (args) => { return await handleLink(args as unknown as { action: string; [key: string]: unknown }, services); }); server.registerTool('query', { description: queryToolDescription, inputSchema: querySchema }, async (args) => { return await handleQuery(args as unknown as { action: string; [key: string]: unknown }, services); }); server.registerTool('batch', { description: batchToolDescription, inputSchema: batchSchema }, async (args) => { return await handleBatch(args as unknown as { planId: string; operations: unknown[] }, services); }); return { server, services }; }

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/cppmyjob/cpp-mcp-planner'

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