vue-layout-mcp
Version:
A MCP server for generating Vue dashboard layout components
79 lines (70 loc) • 1.95 kB
JavaScript
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);