UNPKG

vue-layout-mcp

Version:

A MCP server for generating Vue dashboard layout components

79 lines (70 loc) 1.95 kB
#!/usr/bin/env node import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema, McpError, ErrorCode, } from '@modelcontextprotocol/sdk/types.js'; import { simpleTools } from './tools/componentGenerators.js'; class SimpleComponentServer { constructor() { this.server = new Server( { name: 'simple-component-generator', version: '1.0.0', }, { capabilities: { tools: {}, }, } ); this.tools = simpleTools; this.setupToolHandlers(); } setupToolHandlers() { this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: Object.values(this.tools).map(tool => ({ name: tool.name, description: tool.description, inputSchema: tool.inputSchema, })), }; }); this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const tool = this.tools[request.params.name]; if (!tool) { throw new McpError( ErrorCode.MethodNotFound, `Tool ${request.params.name} not found` ); } try { const result = await tool.handler(request.params.arguments || {}); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { throw new McpError( ErrorCode.InternalError, `Tool execution failed: ${error.message}` ); } }); } async run() { const transport = new StdioServerTransport(); await this.server.connect(transport); console.error('Simple Component Generator running on stdio'); } } const server = new SimpleComponentServer(); server.run().catch(console.error);