UNPKG

@weilei_kyle/public-apis-mcp

Version:
86 lines 3.05 kB
import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js'; import { ApiService } from '../services/api-service.js'; import { FormatterService } from '../services/formatter-service.js'; import { SearchService } from '../services/search-service.js'; import { RecommendationService } from '../services/recommendation-service.js'; import { CodeGenerationService } from '../services/code-generation-service.js'; import { ToolService } from '../services/tool-service.js'; /** * 公共API服务器类 * 负责初始化服务器和处理请求 */ export class PublicAPIsServer { server; apiService; formatterService; searchService; recommendationService; codeGenerationService; toolService; constructor() { // 初始化服务 this.apiService = new ApiService(); this.formatterService = new FormatterService(); this.searchService = new SearchService(this.apiService, this.formatterService); this.recommendationService = new RecommendationService(this.apiService, this.formatterService); this.codeGenerationService = new CodeGenerationService(this.apiService, this.formatterService); this.toolService = new ToolService(this.apiService, this.searchService, this.recommendationService, this.codeGenerationService); // 初始化服务器 this.server = new Server({ name: 'public-apis-server', version: '1.0.0' }, { capabilities: { tools: {} } }); this.setupRequestHandlers(); this.setupErrorHandling(); } /** * 设置请求处理器 */ setupRequestHandlers() { // 列出所有可用工具 this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: this.toolService.getToolDefinitions() }; }); // 处理工具调用 this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args = {} } = request.params; const response = await this.toolService.handleToolCall(name, args); // 直接返回工具调用结果,符合CallToolResultSchema格式 return response; }); } /** * 设置错误处理 */ setupErrorHandling() { this.server.onerror = (error) => { console.error('[MCP Error]', error); }; process.on('SIGINT', async () => { await this.server.close(); process.exit(0); }); } /** * 启动服务器 */ async start(transport) { await this.server.connect(transport); console.log('公共API服务器已启动'); } /** * 关闭服务器 */ async close() { await this.server.close(); console.log('公共API服务器已关闭'); } } //# sourceMappingURL=server.js.map