AI导航

如何让现有应用支持MCP协议?

AI百科
5 min read
27 次阅读

如何让现有应用支持 MCP 协议:迁移路线、适配模式与实践要点

一、为什么要给旧系统加上 MCP?

  • 让 LLM 直接调用既有功能,而无需开发专用插件
  • 统一上下文管理,避免多套 API 集成逻辑
  • 通过流式传输(SSE / Streamable HTTP)提升响应时效与用户体验

二、三种主流适配模式

  1. 轻量包装(Wrapper):在原接口外层写一个「Remote MCP Server」,把每个业务端点暴露为 MCP 工具;适合已有 REST/GraphQL 服务
  2. 边车代理(Sidecar / Proxy):把现有服务编译或容器化后,旁挂 mcp-proxymcp-access-point,自动转换 HTTP↔MCP
  3. 代码内嵌(In-Process SDK):在应用代码中直接引入 mcp-sdk(Python/Go/TS),以 Stdio 或 Streamable HTTP 模式启动 MCP 服务器;适合微服务或脚本型工具

三、迁移流程(无代码版)

  • Step 1 梳理接口:列出现有服务中可对外暴露的功能与参数
  • Step 2 生成工具元数据:每个接口需要 namedescriptionparameters(JSON Schema)
  • Step 3 选择传输层
    • 浏览器场景:SSE
    • 高并发 & 双向流:Streamable HTTP
    • 本地脚本:Stdio
  • Step 4 实现 OAuth 2.1:为每个工具配置最小 scope,保护敏感资源
  • Step 5 部署 & 灰度:使用 mcp-proxy 蓝绿发布,兼容旧 SSE 客户端
  • Step 6 监控 & 优化:关注帧速率、上下文字节数、RTT;必要时压缩或拆分大响应

四、常见坑与最佳实践

  • 连接缓冲:Nginx 需 proxy_buffering off;,否则流式分块被积压
  • 安全:对 metadata.signature 做 RSA 验签,防止伪造工具
  • 大文件:调用方将二进制上传对象存储,返回预签名 URL,而非 Base64
  • 版本碎片:2024 版默认 SSE,2025-03-26 版默认 Streamable HTTP,注意客户端升级

#### 示例代码(可直接复制运行)

> **Python — 现有 Flask API 包装成 Streamable HTTP MCP 服务器**

```python
# server.py
from flask import Flask, request, jsonify
from mcp import MCPServer, Tool

# ① 原有 Flask 业务
app = Flask(__name__)
@app.route("/sum")
def sum_api():
    a, b = int(request.args["a"]), int(request.args["b"])
    return jsonify({"result": a + b})

# ② 用 SDK 包装成 MCP Server
srv = MCPServer("LegacyTools", transport="streamable_http", listen="0.0.0.0:8080")

@Tool(name="sum", description="两数求和", parameters={"a": "int", "b": "int"})
def sum_tool(a: int, b: int) -> int:
    # 复用现有逻辑
    return a + b

if __name__ == "__main__":
    srv.run()        # Streamable HTTP server on /message

Node/TypeScript — mcp-proxy 将现有 REST 服务转换为 MCP

// proxy.ts
import { RESTAdapter } from "mcp-proxy";

const adapter = new RESTAdapter({
  baseUrl: "https://legacy.example.com",
  routes: [
    {
      mcpName: "getUser",
      description: "根据 ID 获取用户信息",
      path: "/user/{id}",
      method: "GET",
      params: { id: "string" }
    }
  ]
});

adapter.listen(8080);   // 开启 /message (Streamable HTTP) 端口

Go — 在单体应用内嵌 Stdio MCP 服务器

// main.go
package main
import (
	"github.com/mark3labs/mcp-go"
	"log"
)

func add(a, b int) int { return a + b }

func main() {
	server := mcpgo.NewStdioServer("CLI-Tools")
	server.Tool("add", "两数求和", mcpgo.Args{"a": "int", "b": "int"}, add)
	if err := server.Run(); err != nil {
		log.Fatal(err)
	}
}

推荐工具

NVIDIA Chat with RTX AI聊天 Chat with RTX 是 NVIDIA 面向 RTX 电脑的本地 AI 聊天工具,可围绕本地文档和视频资料做问答,适合重视隐私、离线检索并具备硬件条件的用户更适合资料不便上传云 文心一言 AI聊天 文心一言 是百度文心大模型 AI 助手,支持百度 AI 聊天、文案创作和图像理解,适合中文用户和内容创作者完成 AI 对话、资料问答和任务协作,适合上线前核对权限、成本和资料质量。 HuggingChat AI聊天 HuggingChat 是 Hugging Face 的开源模型聊天应用,支持 Omni 自动选模型,也可手动选社区开放模型对话。它适合体验开源模型、技术探索和问答,结果可能不稳定,重要内容需复核。 纳米AI搜索 AI搜索 纳米AI 是 360 旗下 AI 搜索和智能体入口,支持文字、语音、拍照提问、多模型协作与内容创作,适合中文用户做日常搜索、学习问答、移动查询、热点追踪、生活决策、知识整理和轻量创作。 Meta AI AI聊天 Meta AI 是 Meta 的个人 AI 助手,可在网页、应用、AI 眼镜及 WhatsApp、Instagram 中使用,支持问答、图像理解和语音交流,适合社交与生活场景,部分功能受地区限制。 Pi AI AI聊天 Pi AI 是 Inflection AI 推出的个人 AI 助手,强调情绪理解、陪伴式交流、生产力建议和安全对话,可在 pi.ai 与移动端使用。它适合日常思考、学习陪练和规划,不替代专业心理支持。