Skip to main content
Glama
deployment-guide.md9.34 kB
# MCP Swagger 完整部署指南 ## 概述 本指南介绍如何在不同场景下部署和使用 mcp-swagger-api 和 mcp-swagger-server。 ## 目录 1. [快速开始](#快速开始) 2. [mcp-swagger-api 部署](#mcp-swagger-api-部署) 3. [mcp-swagger-server 部署](#mcp-swagger-server-部署) 4. [集成使用](#集成使用) 5. [生产环境部署](#生产环境部署) 6. [监控和维护](#监控和维护) ## 快速开始 ### 环境要求 - Node.js >= 18.0.0 - pnpm >= 8.0.0 ### 安装依赖 ```bash # 根目录安装所有依赖 pnpm install # 构建所有包 pnpm run build ``` ## mcp-swagger-api 部署 ### 本地开发 ```bash cd packages/mcp-swagger-api pnpm run start:dev ``` 服务将在 `http://localhost:3000` 启动,API文档可在 `http://localhost:3000/api` 查看。 ### 环境配置 创建 `.env` 文件: ```env # 服务配置 PORT=3000 NODE_ENV=development # MCP 配置 MCP_DEFAULT_PORT=8765 MCP_API_KEY=your-secure-api-key # 数据库配置(如果需要) DATABASE_URL=postgresql://user:password@localhost:5432/mcp_swagger # 日志配置 LOG_LEVEL=info ``` ### Docker 部署 创建 `Dockerfile`: ```dockerfile FROM node:18-alpine WORKDIR /app # 复制依赖文件 COPY package*.json ./ COPY pnpm-lock.yaml ./ # 安装 pnpm RUN npm install -g pnpm # 安装依赖 RUN pnpm install --frozen-lockfile # 复制源代码 COPY . . # 构建应用 RUN pnpm run build # 暴露端口 EXPOSE 3000 # 启动应用 CMD ["pnpm", "run", "start:prod"] ``` ```bash # 构建镜像 docker build -t mcp-swagger-api . # 运行容器 docker run -p 3000:3000 -e MCP_API_KEY=your-key mcp-swagger-api ``` ### 使用示例 ```bash # 创建 MCP 服务器 curl -X POST http://localhost:3000/api/v1/mcp/create \ -H "Content-Type: application/json" \ -H "x-api-key: your-key" \ -d '{ "openApiData": "https://petstore.swagger.io/v2/swagger.json", "config": { "name": "Petstore API", "port": 8765, "transport": "http" } }' # 查看状态 curl http://localhost:3000/api/v1/mcp/status \ -H "x-api-key: your-key" # 获取监控指标 curl http://localhost:3000/api/v1/monitoring/metrics \ -H "x-api-key: your-key" ``` ## mcp-swagger-server 部署 ### CLI 使用 ```bash cd packages/mcp-swagger-server # 基本使用 pnpm run cli:help # 使用远程 OpenAPI pnpm run cli:github # 使用本地文件并监听变化 pnpm run cli:enhanced -- -t sse -p 3322 -o ./openapi.json -w -v # 使用配置文件 pnpm run cli:enhanced -- -c ./config.json ``` ### 配置文件示例 创建 `mcp-config.json`: ```json { "transport": "streamable", "port": 3322, "endpoint": "/mcp", "openapi": "https://api.github.com/openapi.json", "watch": false, "verbose": true } ``` ### Claude Desktop 集成 在 Claude Desktop 的配置文件中添加: ```json { "mcpServers": { "mcp-swagger": { "command": "node", "args": ["/path/to/mcp-swagger-server/dist/cli-enhanced.js", "-t", "stdio", "-o", "https://api.github.com/openapi.json", "-v"] } } } ``` ### 系统服务部署 创建 systemd 服务文件 `/etc/systemd/system/mcp-swagger.service`: ```ini [Unit] Description=MCP Swagger Server After=network.target [Service] Type=simple User=mcp WorkingDirectory=/opt/mcp-swagger-server ExecStart=/usr/bin/node dist/cli-enhanced.js -t streamable -p 3322 -o https://api.github.com/openapi.json -v Restart=always RestartSec=10 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target ``` 启动服务: ```bash sudo systemctl enable mcp-swagger sudo systemctl start mcp-swagger sudo systemctl status mcp-swagger ``` ## 集成使用 ### 前端集成 (mcp-swagger-ui) ```typescript // 在前端应用中集成 const createMCPServer = async (openApiUrl: string) => { const response = await fetch('/api/v1/mcp/create', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'your-api-key' }, body: JSON.stringify({ openApiData: openApiUrl, config: { name: 'Dynamic API', transport: 'websocket' } }) }); return response.json(); }; // 监控服务状态 const monitorStatus = async () => { const response = await fetch('/api/v1/mcp/status', { headers: { 'x-api-key': 'your-api-key' } }); return response.json(); }; ``` ### API 网关集成 使用 Nginx 作为反向代理: ```nginx upstream mcp_api { server localhost:3000; } upstream mcp_server { server localhost:3322; } server { listen 80; server_name api.yourdomain.com; # API 服务 location /api/ { proxy_pass http://mcp_api; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # MCP 服务器 location /mcp/ { proxy_pass http://mcp_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ``` ## 生产环境部署 ### 使用 Docker Compose 创建 `docker-compose.yml`: ```yaml version: '3.8' services: mcp-swagger-api: build: ./packages/mcp-swagger-api ports: - "3000:3000" environment: - NODE_ENV=production - MCP_API_KEY=${MCP_API_KEY} - DATABASE_URL=${DATABASE_URL} depends_on: - postgres - redis restart: always mcp-swagger-server: build: ./packages/mcp-swagger-server ports: - "3322:3322" environment: - NODE_ENV=production command: ["node", "dist/cli-enhanced.js", "-t", "streamable", "-p", "3322", "-o", "${OPENAPI_URL}", "-v"] restart: always postgres: image: postgres:15 environment: - POSTGRES_DB=mcp_swagger - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data redis: image: redis:7-alpine volumes: - redis_data:/data nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/ssl/certs depends_on: - mcp-swagger-api - mcp-swagger-server volumes: postgres_data: redis_data: ``` ### Kubernetes 部署 创建 `k8s-deployment.yaml`: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: mcp-swagger-api spec: replicas: 3 selector: matchLabels: app: mcp-swagger-api template: metadata: labels: app: mcp-swagger-api spec: containers: - name: api image: mcp-swagger-api:latest ports: - containerPort: 3000 env: - name: MCP_API_KEY valueFrom: secretKeyRef: name: mcp-secrets key: api-key resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m" --- apiVersion: v1 kind: Service metadata: name: mcp-swagger-api-service spec: selector: app: mcp-swagger-api ports: - port: 80 targetPort: 3000 type: LoadBalancer ``` ## 监控和维护 ### 健康检查 ```bash # API 服务健康检查 curl http://localhost:3000/api/v1/monitoring/health # MCP 服务器健康检查 curl http://localhost:3322/health ``` ### 日志管理 ```bash # 查看 API 服务日志 docker logs mcp-swagger-api # 查看 MCP 服务器日志 sudo journalctl -u mcp-swagger -f # 使用 ELK 栈收集日志 # Logstash 配置示例 input { file { path => "/var/log/mcp-swagger/*.log" type => "mcp-swagger" } } filter { if [type] == "mcp-swagger" { json { source => "message" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "mcp-swagger-%{+YYYY.MM.dd}" } } ``` ### 性能监控 使用 Prometheus 和 Grafana: ```yaml # prometheus.yml global: scrape_interval: 15s scrape_configs: - job_name: 'mcp-swagger-api' static_configs: - targets: ['localhost:3000'] metrics_path: '/api/v1/monitoring/metrics' - job_name: 'mcp-swagger-server' static_configs: - targets: ['localhost:3322'] metrics_path: '/metrics' ``` ### 备份策略 ```bash #!/bin/bash # backup.sh - 备份脚本 # 备份配置文件 cp /opt/mcp-swagger/config/*.json /backup/config/ # 备份数据库 pg_dump mcp_swagger | gzip > /backup/db/mcp_swagger_$(date +%Y%m%d).sql.gz # 清理旧备份 find /backup -name "*.gz" -mtime +7 -delete ``` ## 故障排除 ### 常见问题 1. **端口冲突** ```bash # 检查端口占用 lsof -i :3000 lsof -i :3322 # 更换端口 export PORT=3001 ``` 2. **OpenAPI 加载失败** ```bash # 检查 URL 可访问性 curl -I https://api.github.com/openapi.json # 检查本地文件权限 ls -la ./openapi.json ``` 3. **内存不足** ```bash # 检查内存使用 free -h # 增加 Node.js 内存限制 export NODE_OPTIONS="--max-old-space-size=4096" ``` ### 性能优化 1. **API 服务优化** - 启用 Redis 缓存 - 配置连接池 - 启用 gzip 压缩 2. **MCP 服务器优化** - 减少轮询频率 - 启用工具缓存 - 优化 OpenAPI 解析 通过以上配置,你就可以在各种环境下成功部署和使用 MCP Swagger 系统了。

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zaizaizhao/mcp-swagger-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server