Skip to main content
Glama
index.ts3.28 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 { config } from './config/index'; import { GLMService } from './services/glm-service'; import { AutoImageService } from './services/auto-image-service'; import { logger } from './utils/logger'; class MCPServer { private server: Server; private glmService: GLMService; private autoImageService: AutoImageService; constructor() { this.server = new Server( { name: config.server.name, version: config.server.version, }, { capabilities: { tools: {}, }, } ); this.glmService = new GLMService(); this.autoImageService = new AutoImageService(); this.setupHandlers(); } private setupHandlers(): void { // 列出可用工具 this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: 'auto_analyze_image', description: '自动获取并分析图片(支持文件路径、网络URL或剪贴板)', inputSchema: { type: 'object', properties: { imagePath: { type: 'string', description: '图片文件路径或网络URL(可选,不提供则使用剪贴板)', }, focusArea: { type: 'string', enum: ['code', 'architecture', 'error', 'documentation'], description: '分析重点区域', default: 'code', }, }, required: [], }, }, ], }; }); // 处理工具调用 this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { let result; const typedArgs = args as any; if (name === 'auto_analyze_image') { result = await this.autoImageService.autoGetAndAnalyzeImage( typedArgs.imagePath, typedArgs.focusArea || 'code' ); } else { throw new Error(`未知工具: ${name}`); } return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { logger.error(`工具调用失败: ${name}`, error); return { content: [ { type: 'text', text: `错误: ${error instanceof Error ? error.message : '未知错误'}`, }, ], isError: true, }; } }); } async run(): Promise<void> { const transport = new StdioServerTransport(); await this.server.connect(transport); logger.info('MCP 图片识别服务器已启动 (stdio模式)'); } } // 启动服务器 const mcpServer = new MCPServer(); mcpServer.run().catch((error) => { logger.error('服务器启动失败', error); process.exit(1); });

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/lengbone/mcp-vl'

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