aliyun-bailian-mcp-server
Version:
80 lines (67 loc) • 2.21 kB
JavaScript
/**
* 阿里云百炼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);
});
});