ScavioScavio
产品定价文档
登录开始使用
  1. 首页
  2. 教程
  3. 如何根据 Swagger 规范构建 MCP 服务器
教程

如何根据 Swagger 规范构建 MCP 服务器

根据任何 Swagger 或 OpenAPI 规范自动生成 MCP 工具服务器。几分钟内即可让 Claude Code 对任何 REST API 进行本机访问。

获取免费API密钥API文档

模型上下文协议 (MCP) 允许 AI 代理本地调用外部工具。您可以根据任何 Swagger 或 OpenAPI 规范自动生成 MCP 服务器,而不是手动编码每个工具。本教程采用 Scavio API OpenAPI 规范并生成 Claude Code 可以直接使用的工作 MCP 服务器。同样的方法适用于任何具有 Swagger 规范的 API——Stripe、Twilio、GitHub 或您的内部服务。

前置条件

  • Node.js 18+ 或 Python 3.9+
  • Swagger/OpenAPI JSON 或 YAML 规范
  • MCP的基本了解
  • 安装了克劳德代码(用于测试)

操作指南

步骤 1: 解析 OpenAPI 规范并提取端点

加载 Swagger 规范并提取将成为 MCP 工具的端点定义。每个端点都成为一个具有类型化参数的工具。

Python
import json, yaml
from pathlib import Path

def parse_openapi(spec_path: str) -> list:
    """Parse OpenAPI spec into MCP tool definitions."""
    raw = Path(spec_path).read_text()
    spec = yaml.safe_load(raw) if spec_path.endswith('.yaml') else json.loads(raw)
    tools = []
    base_url = spec.get('servers', [{}])[0].get('url', '')
    for path, methods in spec.get('paths', {}).items():
        for method, details in methods.items():
            if method not in ('get', 'post', 'put', 'delete'):
                continue
            params = []
            for p in details.get('parameters', []):
                params.append({
                    'name': p['name'],
                    'type': p.get('schema', {}).get('type', 'string'),
                    'required': p.get('required', False),
                    'description': p.get('description', '')
                })
            # Extract request body schema
            body = details.get('requestBody', {}).get('content', {}).get('application/json', {})
            body_schema = body.get('schema', {}).get('properties', {})
            for name, prop in body_schema.items():
                params.append({
                    'name': name, 'type': prop.get('type', 'string'),
                    'required': name in body.get('schema', {}).get('required', []),
                    'description': prop.get('description', '')
                })
            tool_name = details.get('operationId', f'{method}_{path}'.replace('/', '_'))
            tools.append({
                'name': tool_name, 'description': details.get('summary', ''),
                'method': method.upper(), 'path': path,
                'base_url': base_url, 'parameters': params
            })
    print(f'Parsed {len(tools)} tools from spec')
    for t in tools[:5]:
        print(f'  {t["name"]}: {t["method"]} {t["path"]}')
    return tools

步骤 2: 生成 MCP 服务器代码

将解析的端点转换为工作 MCP 服务器。每个端点都成为具有输入验证的可调用工具。

Python
def generate_mcp_server(tools: list, output_path: str = 'mcp_server.py'):
    """Generate a Python MCP server from parsed tool definitions."""
    lines = [
        'import json, os, sys, requests',
        'from typing import Any',
        '',
        'def handle_tool_call(name: str, arguments: dict) -> dict:',
        '    """Route tool calls to the correct API endpoint."""',
        '    tools_map = {',
    ]
    for tool in tools:
        lines.append(f'        "{tool["name"]}": {{"method": "{tool["method"]}", "path": "{tool["path"]}", "base_url": "{tool["base_url"]}"}},')  
    lines.extend([
        '    }',
        '    if name not in tools_map:',
        '        return {"error": f"Unknown tool: {name}"}',  
        '    spec = tools_map[name]',
        '    url = spec["base_url"] + spec["path"]',
        '    headers = {"Content-Type": "application/json",',
        '               "x-api-key": os.environ.get("API_KEY", "")}',
        '    if spec["method"] == "GET":',
        '        resp = requests.get(url, headers=headers, params=arguments)',
        '    else:',
        '        resp = requests.post(url, headers=headers, json=arguments)',
        '    return resp.json()',
        '',
    ])
    # Write MCP stdio loop
    lines.extend([
        'def main():',
        '    for line in sys.stdin:',
        '        msg = json.loads(line.strip())',
        '        if msg.get("method") == "tools/call":',
        '            result = handle_tool_call(msg["params"]["name"], msg["params"].get("arguments", {}))',
        '            print(json.dumps({"jsonrpc": "2.0", "id": msg["id"], "result": {"content": [{"type": "text", "text": json.dumps(result)}]}}))',
        '            sys.stdout.flush()',
        '',
        'if __name__ == "__main__":',
        '    main()',
    ])
    with open(output_path, 'w') as f:
        f.write('\n'.join(lines))
    print(f'Generated MCP server: {output_path}')
    print(f'Tools: {len(tools)}')

步骤 3: 在Claude代码中注册MCP服务器

将生成的 MCP 服务器添加到 .mcp.json,以便 Claude Code 在启动时自动发现它。

Python
import json
from pathlib import Path

def register_mcp(server_name: str, server_path: str):
    mcp_config_path = Path('.mcp.json')
    config = json.loads(mcp_config_path.read_text()) if mcp_config_path.exists() else {'mcpServers': {}}
    config['mcpServers'][server_name] = {
        'command': 'python3',
        'args': [server_path],
        'env': {
            'API_KEY': 'your-api-key-here'
        }
    }
    mcp_config_path.write_text(json.dumps(config, indent=2))
    print(f'Registered MCP server: {server_name}')
    print(f'Config: {mcp_config_path}')
    print(f'Restart Claude Code to load the new tools.')

# Register the generated server
register_mcp('my-api', 'mcp_server.py')

Python 示例

Python
import json, yaml, requests, os, sys

def parse_spec(spec_url):
    resp = requests.get(spec_url)
    spec = resp.json()
    tools = []
    base = spec.get('servers', [{}])[0].get('url', '')
    for path, methods in spec.get('paths', {}).items():
        for method, details in methods.items():
            if method in ('get', 'post'):
                tools.append({'name': details.get('operationId', path),
                    'method': method.upper(), 'path': path, 'base_url': base})
    return tools

def call_tool(tool, args):
    url = tool['base_url'] + tool['path']
    headers = {'x-api-key': os.environ.get('API_KEY', ''), 'Content-Type': 'application/json'}
    if tool['method'] == 'GET':
        return requests.get(url, headers=headers, params=args).json()
    return requests.post(url, headers=headers, json=args).json()

tools = parse_spec('https://api.scavio.dev/api/v1/openapi.json')
print(f'Parsed {len(tools)} tools')

JavaScript 示例

JavaScript
async function parseSpec(specUrl) {
  const resp = await fetch(specUrl);
  const spec = await resp.json();
  const tools = [];
  const base = spec.servers?.[0]?.url || '';
  for (const [path, methods] of Object.entries(spec.paths || {})) {
    for (const [method, details] of Object.entries(methods)) {
      if (['get', 'post'].includes(method)) {
        tools.push({ name: details.operationId || path, method: method.toUpperCase(), path, base });
      }
    }
  }
  return tools;
}

async function callTool(tool, args) {
  const url = tool.base + tool.path;
  const opts = { headers: { 'x-api-key': process.env.API_KEY, 'Content-Type': 'application/json' } };
  if (tool.method === 'GET') {
    return (await fetch(`${url}?${new URLSearchParams(args)}`, opts)).json();
  }
  return (await fetch(url, { ...opts, method: 'POST', body: JSON.stringify(args) })).json();
}

parseSpec('https://api.scavio.dev/api/v1/openapi.json').then(t => console.log(`${t.length} tools`));

预期输出

JSON
Parsed 6 tools from spec
  search: POST /api/v1/search
  tiktok_search_videos: POST /api/v1/tiktok/search/videos
  tiktok_user_info: POST /api/v1/tiktok/user/info

Generated MCP server: mcp_server.py
Registered MCP server: my-api
Restart Claude Code to load the new tools.

相关教程

  • 如何添加 Supabase MCP 进行 AI 驱动的数据分析
  • 如何构建安全文件系统和 Git MCP 代理
  • 如何设置您的第一个 AI 代理搜索工具

常见问题

大多数开发者在15到30分钟内完成本教程。您需要一个Scavio API密钥(免费套餐即可)和可用的Python或JavaScript环境。

Node.js 18+ 或 Python 3.9+. Swagger/OpenAPI JSON 或 YAML 规范. MCP的基本了解. 安装了克劳德代码(用于测试). Scavio API密钥注册即送50个免费积分。

可以。免费套餐注册即送50个积分,完全足够完成本教程并构建一个可运行的原型解决方案。

Scavio提供原生LangChain包(langchain-scavio)、MCP服务器以及适用于任何HTTP客户端的REST API。本教程使用 the raw REST API, 但您可以根据需要适配您选择的框架。

相关资源

Best Of

2026 年最佳 OpenAPI 到 MCP 生成器工具

Read more
Solution

从OpenAPI规范生成搜索验证的MCP服务器

Read more
Glossary

MCP Swagger 自动服务器生成

Read more
Comparison

MCP Search Integration vs Direct API Integration

Read more
Best Of

Google I/O 2026 AI模式变化后最佳搜索API

Read more
Use Case

用于业务运营的 MCP 自定义 API 集成

Read more

开始构建

根据任何 Swagger 或 OpenAPI 规范自动生成 MCP 工具服务器。几分钟内即可让 Claude Code 对任何 REST API 进行本机访问。

获取免费API密钥阅读文档
ScavioScavio

面向AI智能体的实时搜索API。搜索所有平台,不仅仅是Google。

产品

  • 功能
  • 定价
  • 控制台
  • 联盟计划

开发者

  • 文档
  • API参考
  • 快速开始
  • MCP集成
  • Python SDK

替代方案

  • Tavily替代方案
  • SerpAPI替代方案
  • Firecrawl替代方案
  • Exa替代方案

工具

  • JSON格式化
  • cURL转代码
  • Token计数器
  • 全部工具

© 2026 Scavio. 保留所有权利。

Featured on TAAFT
服务条款隐私政策