Skip to main content
Glama
index.ts2.44 kB
#!/usr/bin/env node 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 { zodToJsonSchema } from 'zod-to-json-schema'; import { loadConfig } from './config.js'; import { loadAllData } from './parsers/index.js'; import { tools, type ToolName, type ImageResult } from './tools/index.js'; function isImageResult(result: unknown): result is ImageResult { return ( typeof result === 'object' && result !== null && '__type' in result && (result as ImageResult).__type === 'image' ); } const server = new Server( { name: 'wotblitz-mcp', version: '1.0.0', }, { capabilities: { tools: {}, }, } ); server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: Object.entries(tools).map(([name, tool]) => ({ name, description: tool.description, inputSchema: zodToJsonSchema(tool.inputSchema, { $refStrategy: 'none' }), })), }; }); server.setRequestHandler(CallToolRequestSchema, async (request) => { const toolName = request.params.name as ToolName; const tool = tools[toolName]; if (!tool) { return { content: [{ type: 'text', text: `Unknown tool: ${toolName}` }], isError: true, }; } try { const input = tool.inputSchema.parse(request.params.arguments ?? {}); const result = await tool.handler(input as never); if (isImageResult(result)) { return { content: [{ type: 'image', data: result.data, mimeType: result.mimeType, }], }; } return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], }; } catch (err) { const message = err instanceof Error ? err.message : String(err); return { content: [{ type: 'text', text: `Error: ${message}` }], isError: true, }; } }); async function main() { try { const config = loadConfig(); await loadAllData(config); const transport = new StdioServerTransport(); await server.connect(transport); } catch (err) { console.error('Failed to start server:', err); process.exit(1); } } main().catch(err => { console.error('Fatal error:', err instanceof Error ? err.message : err); process.exit(1); });

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/Revenant30102000/wotblitz-mcp'

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