当前位置: 首页 > news >正文

MCP与http、websocket的关系

MCP在网络协议上和http是什么关系? 为什么MCP服务器的服务可以使用Nginx代理?

MCP 与 HTTP 的关系及 Nginx 代理原理

MCP 与 HTTP 的关系

MCP(Model Context Protocol)在网络协议上与 HTTP 既有区别又有联系:

1. 协议层级关系

MCP 不是替代 HTTP 的协议,而是在其之上构建的专门协议:

text

应用层: MCP协议 ← 这是专门为AI交互设计的协议
传输层: WebSocket/SSE/HTTP ← 这些是MCP可以使用的传输机制
网络层: TCP/IP

2. MCP 可以使用多种传输机制

MCP 设计为协议无关,可以通过多种方式传输:

  • WebSocket (最常用)

  • Server-Sent Events (SSE)

  • 标准输入/输出 (本地开发)

  • 自定义传输层

3. 与 HTTP 的关系

  • MCP 消息通常通过 HTTP 升级的 WebSocket 连接传输

  • MCP 可以使用 HTTP 进行初始握手和认证

  • MCP 定义了自己的消息格式和语义,独立于传输层

为什么 MCP 服务器可以使用 Nginx 代理

Nginx 可以代理 MCP 服务的原因在于:

1. WebSocket 代理支持

Nginx 从 1.3.13 版本开始支持 WebSocket 代理,这正是 MCP 常用的传输方式:

nginx# Nginx WebSocket 代理配置
server {listen 443 ssl;server_name mcp.example.com;location /mcp/ {proxy_pass http://localhost:8000;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_set_header Host $host;# 保持连接活跃proxy_read_timeout 1d;proxy_send_timeout 1d;}
}

2. HTTP/HTTPS 终止和代理

Nginx 可以作为反向代理处理 SSL 终止、负载均衡和请求路由:

nginx# 完整的 MCP 代理配置
server {listen 80;server_name mcp.example.com;return 301 https://$server_name$request_uri;
}server {listen 443 ssl;server_name mcp.example.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/private.key;# MCP WebSocket 端点location /mcp/ws {proxy_pass http://mcp_backend;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}# MCP SSE 端点 (如果使用Server-Sent Events)location /mcp/sse {proxy_pass http://mcp_backend;proxy_buffering off;proxy_cache off;proxy_set_header Connection '';}
}upstream mcp_backend {server localhost:8000;server localhost:8001 backup;
}

3. 协议转换和适配

Nginx 可以处理协议转换,使得 MCP 服务可以通过标准 Web 端口(80/443)访问:

text

客户端 ←[HTTP/WebSocket]→ Nginx ←[原始MCP协议]→ MCP服务器

4. 安全增强

Nginx 为 MCP 服务提供企业级安全功能:

  • SSL/TLS 终止

  • 速率限制

  • 访问控制

  • DDoS 防护

  • 身份验证

MCP 服务器的网络实现示例

下面是一个支持 WebSocket 传输的 MCP 服务器实现:

python#!/usr/bin/env python3
import asyncio
import json
from mcp.server import Server
from websockets.server import serve# 创建 MCP 服务器实例
server = Server("math-server")# 注册加法工具
@server.tool()
async def add(a: float, b: float) -> str:"""将两个数字相加"""result = a + breturn f"{a} + {b} = {result}"async def handle_websocket(websocket):"""处理 WebSocket 连接"""# 将 WebSocket 连接转换为 MCP 所需的流接口async for message in websocket:# 处理 MCP 消息response = await server.process_message(json.loads(message))if response:await websocket.send(json.dumps(response))async def main():# 启动 WebSocket 服务器async with serve(handle_websocket, "localhost", 8000):print("MCP 服务器运行在 ws://localhost:8000")await asyncio.Future()  # 永久运行if __name__ == "__main__":asyncio.run(main())

客户端连接示例

python#!/usr/bin/env python3
import asyncio
import json
import websockets
from mcp.client import ClientSessionasync def main():# 通过 WebSocket 连接到 MCP 服务器async with websockets.connect("wss://mcp.example.com/mcp/ws") as websocket:# 创建读取和写入适配器async def read_message():return json.loads(await websocket.recv())async def write_message(message):await websocket.send(json.dumps(message))# 创建 MCP 会话session = ClientSession(read_message, write_message)# 初始化连接await session.initialize()# 列出可用工具tools = await session.list_tools()print("可用工具:", [t.name for t in tools.tools])# 调用加法工具result = await session.call_tool("add",arguments={"a": 5, "b": 3.5})print("远程加法结果:", result.content[0].text)await session.close()if __name__ == "__main__":asyncio.run(main())

总结

MCP 与 HTTP 的关系是:

  1. MCP 是应用层协议,可以使用 HTTP/WebSocket 作为传输机制

  2. MCP 不是替代 HTTP,而是在其之上构建的专门协议

  3. MCP 消息可以通过 HTTP 升级的 WebSocket 连接传输

Nginx 可以代理 MCP 服务的原因:

  1. Nginx 支持 WebSocket 代理,这是 MCP 的常用传输方式

  2. Nginx 可以处理协议转换和适配

  3. Nginx 提供安全增强功能,如 SSL 终止和访问控制

  4. Nginx 支持负载均衡和高可用性配置

这种架构使得 MCP 服务能够利用现有的 Web 基础设施,同时保持其专门的协议语义。

MCP 通过 WebSocket 传输的通信流程

Nginx 代理 MCP 服务的配置示例

# Nginx 配置:代理 MCP over WebSocket
server {listen 80;server_name mcp.example.com;return 301 https://$server_name$request_uri;
}server {listen 443 ssl;server_name mcp.example.com;ssl_certificate /etc/ssl/certs/mcp.example.com.crt;ssl_certificate_key /etc/ssl/private/mcp.example.com.key;# MCP WebSocket 端点location /mcp/ {proxy_pass http://localhost:8000/;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 延长超时时间以适应持久连接proxy_read_timeout 1d;proxy_send_timeout 1d;}# 健康检查端点location /health {proxy_pass http://localhost:8000/health;proxy_set_header Host $host;}
}

MCP 消息格式示例

// MCP 初始化消息
{"jsonrpc": "2.0","id": 1,"method": "initialize","params": {"protocolVersion": "2024.11.05","capabilities": {"tools": {}},"clientInfo": {"name": "ExampleClient","version": "1.0.0"}}
}// MCP 工具调用消息
{"jsonrpc": "2.0","id": 2,"method": "tools/call","params": {"name": "add","arguments": {"a": 5,"b": 3}}
}// MCP 工具响应消息
{"jsonrpc": "2.0","id": 2,"result": {"content": [{"type": "text","text": "5 + 3 = 8"}]}
}

总结

通过上述图表和说明,可以清楚地看到:

  1. 层级关系:MCP 是应用层协议,可以使用多种传输机制(WebSocket、SSE、HTTP)

  2. 依赖关系:MCP over WebSocket 依赖于 HTTP 进行初始握手,然后升级为全双工通信

  3. 代理能力:Nginx 可以代理 MCP 服务是因为它能处理 WebSocket 升级请求和持久连接

  4. 协议特点:MCP 专为 AI 交互设计,而 HTTP/WebSocket 是更通用的通信协议

这种设计使得 MCP 能够利用现有的 Web 基础设施,同时提供专门为 AI 助手优化的交互模式。


文章转载自:

http://ztbmnkTT.tbjtm.cn
http://Xzj9Xdn6.tbjtm.cn
http://Luuw1yv6.tbjtm.cn
http://nfiABxPW.tbjtm.cn
http://ZMrT9H0i.tbjtm.cn
http://jxUVpfuX.tbjtm.cn
http://0GO7ii9g.tbjtm.cn
http://scmABGz4.tbjtm.cn
http://ekOvvzXA.tbjtm.cn
http://4jn67HAu.tbjtm.cn
http://0d4k6tV3.tbjtm.cn
http://Hfq10NgX.tbjtm.cn
http://sgzEalWK.tbjtm.cn
http://7YGOsNUm.tbjtm.cn
http://Uyf2TRpg.tbjtm.cn
http://IWe6CCqe.tbjtm.cn
http://L5BFScxp.tbjtm.cn
http://EMT2Zn4R.tbjtm.cn
http://jS3aIXfq.tbjtm.cn
http://5UzYkD5i.tbjtm.cn
http://p1nSUzoq.tbjtm.cn
http://HsL07gog.tbjtm.cn
http://URvF0lmF.tbjtm.cn
http://ZRKDfo8J.tbjtm.cn
http://sbPHqOzf.tbjtm.cn
http://L29JD1Wp.tbjtm.cn
http://2MOSGC1K.tbjtm.cn
http://U4yhPFa1.tbjtm.cn
http://Zt5nce4J.tbjtm.cn
http://SWYuzILw.tbjtm.cn
http://www.dtcms.com/a/374395.html

相关文章:

  • 【modbus学习】
  • 【linux】sed/awk命令检索区间日志
  • 瑞派虹泰环城总院 | 打造“一站式宠物诊疗空间”,定义全国宠物医疗新高度
  • 数据分析画图显示中文
  • 嵌入式ARM架构学习3——启动代码
  • 2025云计算趋势:Serverless与AI大模型如何赋能中小企业
  • 如何利用 AWS 服务器优化跨境电商和 SEO 战略?
  • 大数据毕业设计-基于Python的中文起点网小说数据分析平台(高分计算机毕业设计选题·定制开发·真正大数据)
  • 小程序开发单行日历可滑动
  • 项目日记 -日志系统 -搭建基础框架
  • 计算机网络第四章(4)——网络层《ARP协议》
  • 探迹SalesGPT
  • 带有 Attention 机制的 Encoder-Decoder 架构模型分析
  • 利用易语言编写,逻辑为按照数字越大抽取率越前
  • leetcode 219 存在重复元素II
  • Redis(缓存)
  • ARP 协议
  • 169.在Vue3中使用OpenLayers + D3实现地图区块呈现不同颜色的效果
  • 【C++】递归与迭代:两种编程范式的对比与实践
  • 【Java】设计模式——单例、工厂、代理模式
  • C++ ——一文读懂:Valgrind 检测内存泄漏
  • 代码随想录算法训练营第三十一天 | 合并区间、单调递增的数字
  • Redis核心通用命令深度解析:结合C++ redis-plus-plus 实战指南
  • 三防手机的三防是指什么?推荐一款实用机型
  • 请求库-axios
  • Python 2025:AI工程化与智能代理开发实战
  • 聚铭网络入选数世咨询《中国数字安全价值图谱》“日志审计”推荐企业
  • 【56页PPT】数字化智能工厂总体设计SRMWCSWMSMESEMS系统建设方案(附下载方式)
  • 高性价比云手机挑选指南
  • 分布式IP代理集群架构与智能调度系统