Swagger MCP Server
by tuskermanshu
Verified
/**
* Swagger MCP工具服务器演示
* 这个脚本展示了如何使用Swagger MCP工具生成TypeScript类型和API客户端
*/
const { spawn } = require('child_process');
const readline = require('readline');
const path = require('path');
const fs = require('fs');
// 创建输出目录
const outputDir = path.join(__dirname, 'output');
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
// Petstore API地址
const petstoreUrl = 'https://petstore3.swagger.io/api/v3/openapi.json';
// 配置选项
const demoConfig = {
apiUrl: petstoreUrl,
outputDir: outputDir,
typeFilename: 'petstore-types.ts',
clientFilename: 'petstore-client.ts',
clientType: 'fetch'
};
// 启动MCP服务器进程
console.log('启动Swagger MCP工具服务器...');
const serverProc = spawn('node', ['dist/mcp-tools-server.js'], {
stdio: ['pipe', 'pipe', 'pipe']
});
// 创建readline接口
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 处理服务器输出
let serverReady = false;
serverProc.stdout.on('data', (data) => {
const output = data.toString();
console.log('[服务器]:', output);
if (output.includes('MCP工具服务器已启动')) {
serverReady = true;
startDemo();
}
});
serverProc.stderr.on('data', (data) => {
console.error('[服务器错误]:', data.toString());
});
// 启动演示流程
function startDemo() {
console.log('\n===== Swagger MCP工具演示 =====');
console.log(`将从 ${demoConfig.apiUrl} 生成API客户端和类型定义`);
console.log(`输出目录: ${demoConfig.outputDir}`);
rl.question('\n按回车键开始演示...', () => {
runClientProcess();
});
}
// 运行客户端进程与服务器通信
function runClientProcess() {
console.log('\n1. 解析Swagger文档');
// 在这里,我们模拟了客户端与服务器的通信
// 实际应用中,这将由FastMCP客户端处理
// 模拟解析Swagger
setTimeout(() => {
console.log('✅ 成功解析Swagger文档');
console.log('\n2. 生成TypeScript类型定义');
setTimeout(() => {
const typesPath = path.join(outputDir, demoConfig.typeFilename);
console.log(`✅ 成功生成类型定义: ${typesPath}`);
console.log('\n3. 生成API客户端');
setTimeout(() => {
const clientPath = path.join(outputDir, demoConfig.clientFilename);
console.log(`✅ 成功生成API客户端: ${clientPath}`);
// 完成演示
finishDemo();
}, 1000);
}, 1000);
}, 1000);
}
// 完成演示
function finishDemo() {
console.log('\n===== 演示完成 =====');
console.log('要实际测试工具,请使用以下命令:');
console.log('\n在一个终端运行服务器:');
console.log(' node dist/mcp-tools-server.js');
console.log('\n在另一个终端运行客户端:');
console.log(' node tools-client.js');
// 清理资源
serverProc.kill();
rl.close();
}
// 处理进程退出
process.on('SIGINT', () => {
console.log('\n正在关闭...');
serverProc.kill();
rl.close();
process.exit(0);
});