UNPKG

aliyun-bailian-mcp-server

Version:
125 lines (111 loc) 3.15 kB
/** * MCP Server Express应用 * 基于阿里云百炼API的MCP服务 */ const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors'); const dotenv = require('dotenv'); const path = require('path'); const MCPServer = require('../lib/mcp-server'); // 加载环境变量 try { dotenv.config({ path: path.join(__dirname, '../.env') }); } catch (err) { console.warn('未找到.env文件,将使用环境变量'); } // 配置 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); } // 创建MCP服务器 const mcpServer = new MCPServer(API_KEY, APP_ID, BASE_URL); // 创建Express应用 const app = express(); app.use(cors()); app.use(bodyParser.json()); // 健康检查接口 app.get('/health', (req, res) => { res.status(200).json({ status: 'ok', timestamp: new Date().toISOString() }); }); // MCP Tool列表接口 app.get('/tool/list', (req, res) => { try { const tools = mcpServer.listTools(); res.status(200).json({ jsonrpc: '2.0', result: tools, id: req.query.id || null }); } catch (error) { console.error('获取工具列表失败:', error); res.status(500).json({ jsonrpc: '2.0', error: { code: -32603, message: '服务器内部错误', data: error.message }, id: req.query.id || null }); } }); // MCP Tool调用接口 app.post('/tool/call', async (req, res) => { const { id, method, params } = req.body; // 检查请求格式 if (!method || !params) { return res.status(400).json({ jsonrpc: '2.0', error: { code: -32600, message: '无效的请求', data: 'method和params是必需的' }, id }); } try { // 从方法名中提取工具名称 // 格式: <tool_name>.call const toolName = method.split('.')[0]; // 调用工具 const result = await mcpServer.callTool(toolName, params); // 返回结果 res.status(200).json({ jsonrpc: '2.0', result: result.result, id }); } catch (error) { console.error('工具调用失败:', error); res.status(500).json({ jsonrpc: '2.0', error: { code: -32603, message: error.message || '工具调用失败', data: error.response?.data || null }, id }); } }); // 启动服务器 app.listen(PORT, HOST, () => { console.log(`MCP服务已启动,监听于 http://${HOST}:${PORT}`); console.log('可用端点:'); console.log(`- 健康检查: http://${HOST}:${PORT}/health`); console.log(`- 工具列表: http://${HOST}:${PORT}/tool/list`); console.log(`- 工具调用: http://${HOST}:${PORT}/tool/call`); }); // 定时清理过期会话 setInterval(() => { mcpServer.cleanSessions(); }, 1000 * 60 * 30); // 每30分钟