UNPKG

aliyun-bailian-mcp-server

Version:
80 lines (67 loc) 2.21 kB
#!/usr/bin/env node /** * 阿里云百炼MCP服务器CLI入口 */ const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors'); const path = require('path'); const MCPServer = require('../lib/mcp-server'); // 获取环境变量 const API_KEY = process.env.API_KEY; const APP_ID = process.env.APP_ID; const BASE_URL = process.env.BAILIAN_API_BASE_URL || 'https://dashscope.aliyuncs.com/compatible-mode/v1'; const PORT = process.env.PORT || 8080; const HOST = process.env.HOST || '0.0.0.0'; // 验证环境变量 if (!API_KEY) { console.error('错误: 未设置API_KEY环境变量'); process.exit(1); } if (!APP_ID) { console.warn('警告: 未设置APP_ID环境变量,使用默认应用'); } // 创建MCP服务器 const mcpServer = new MCPServer(API_KEY, APP_ID, BASE_URL); // 创建Express应用 const app = express(); app.use(cors()); app.use(bodyParser.json({ limit: '10mb' })); // 健康检查接口 app.get('/health', (req, res) => { res.status(200).json({ status: 'ok' }); }); // MCP协议API接口 app.get('/tool/list', (req, res) => { const toolList = mcpServer.listTools(); res.status(200).json(toolList); }); app.post('/tool/call', async (req, res) => { try { const { sessionId, toolName, parameters } = req.body; if (!toolName) { return res.status(400).json({ error: '缺少工具名称参数' }); } const response = await mcpServer.callTool(sessionId, toolName, parameters); res.status(200).json(response); } catch (error) { console.error('工具调用错误:', error); res.status(500).json({ error: error.message || '服务器内部错误' }); } }); // 启动服务器 const server = app.listen(PORT, HOST, () => { console.log(`🚀 阿里云百炼MCP服务器运行在 http://${HOST}:${PORT}`); console.log('可用MCP工具:'); mcpServer.listTools().tools.forEach((tool, index) => { console.log(` ${index + 1}. ${tool.name} - ${tool.description}`); }); }); // 处理优雅退出 process.on('SIGTERM', () => { console.log('接收到SIGTERM信号,正在关闭服务器...'); server.close(() => { console.log('服务器已关闭'); process.exit(0); }); });