@weilei_kyle/public-apis-mcp
Version:
MCP server for accessing public APIs
86 lines • 3.05 kB
JavaScript
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