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

人工智能-基础篇-28-模型上下文协议--MCP请求示例(JSON格式,客户端代码,服务端代码等示例)

目前,MCP(Model Context Protocol)协议并不是一个广泛标准化或公开开源的协议标准。不过,在某些AI工具链和LLM开发框架中,确实出现了以“MCP”命名的内部通信机制,尤其是在与语言模型代理(LLM Agent)和工具调用接口相关的系统中。

假设场景:
MCP是用于Agent与外部工具之间交互的协议。

其核心目标是:
1、标准化请求/响应格式
2、支持多轮对话上下文
3、支持工具调用(tool call)
4、可扩展性强

1、定义MCP消息结构(JSON格式)

json示例:

{"protocol": "MCP",       // 表示使用的协议是MCP(Model Calling Protocol)"version": "1.0",        // 当前使用的MCP版本为1.0	       "request_id": "abc123",  // 请求的唯一标识符,便于后续追踪和关联请求/响应。"timestamp": 1720000000,  // 时间戳,表示请求发送的时间(单位:秒)"context": {          // 会话上下文信息"conversation_id": "conv_987654",  // 会话唯一ID,用来标识一次会话流程"history": [         // 会话历史记录{"role": "user", "content": "查询北京天气"},{"role": "assistant", "content": "正在为您查询..."}]},"tool_call": {            // 这是一个工具调用请求"name": "get_weather",  // 要调用的工具名称,这里是get_weather,表示“获取天气”"parameters": {         // 工具所需的参数"location": "北京"    // 参数为北京,即查询北京的天气}}
}

整个JSON的作用是:
在一次编号为conv_987654的对话中,模型识别到用户想要查询北京天气,于是大模型生成了一个名为get_weather的工具调用请求,并附带了参数location: 北京,以便外部系统执行该操作并返回结果。

这体现了MCP的核心思想:模型作为智能中枢,通过标准协议调用外部工具来扩展能力。

2、Python客户端(发送MCP请求)

以下脚本模拟一个客户端角色,构造并发送一个符合MCP v1.0协议的JSON请求体,并对本地运行http://localhost:8080的服务端发送一个POST请求,然后打印出接收到的响应。

python示例:

import json    // 用于构建和解析JSON数据
import requests    // 发送HTTP请求(如POST)
import time      // 获取当前时间戳# 构建 MCP 请求
mcp_request = {    // 构建一个请求的json,类似上面JSON的介绍"protocol": "MCP","version": "1.0","request_id": "req_001","timestamp": int(time.time()),"context": {"conversation_id": "conv_123","history": [{"role": "user", "content": "查询北京天气"},{"role": "assistant", "content": "正在为您查询..."}]},"tool_call": {"name": "get_weather","parameters": {"location": "北京"}}
}# 发送请求到MCP服务端
url = "http://localhost:8080"    // 请求地址
headers = {'Content-Type': 'application/json'}   // 请求参数格式
// 向http://localhost:8080服务端发送POST请求,参数mcp_request和请求头headers
response = requests.post(url, data=json.dumps(mcp_request), headers=headers)# 打印响应
print("MCP Response:")
print(json.dumps(response.json(), indent=2))   // 打印服务端的响应

注意:
在运行这个客户端脚本前,请确保你已经运行了前面那个服务端程序(监听在8080端口),否则会报错连接失败。

3、Python服务端(接收MCP请求并处理)

以下代码实现了一个简单的HTTP服务端(Server),接收并处理符合MCP(Model Calling Protocol)v1.0协议的请求。模拟了模型调用工具(如get_weather)的过程,并返回结构化的响应。

python示例:

import json      // 导入模块,用于JSON数据的解析和构造
from http.server import BaseHTTPRequestHandler, HTTPServer  // 导入模块,用于HTTP请求class MCPRequestHandler(BaseHTTPRequestHandler):def do_POST(self):     // 定义post请求处理方法content_length = int(self.headers['Content-Length'])  // 从请求头中读取数据长度post_data = self.rfile.read(content_length)  // 从输入流中读取原始数据mcp_request = json.loads(post_data)  // 将其解析为 Python 字典对象print("Received MCP Request:")    // 原样打印字符串print(json.dumps(mcp_request, indent=2))  // 打印mcp请求参数# 解析 tool_calltool_name = mcp_request.get("tool_call", {}).get("name")  // 获取调用的工具名称 tool_call.name,即上json的get_weatherparams = mcp_request.get("tool_call", {}).get("parameters", {})  // 获取调用所需的参数 tool_call.parameters ,"location": "北京"# 模拟调用get_weather工具if tool_name == "get_weather":  // 如果调用是get_weather,则模拟调用location = params.get("location")  // 获取参数,北京,模拟调用response_content = f"北京当前天气为晴朗,气温25°C。"  // 模拟得到响应else:response_content = "未知工具调用。"  // 否则返回“未知工具”提示# 构造MCP响应mcp_response = {   // 构造一个标准的MCP响应JSON"protocol": "MCP",  // 协议"version": "1.0",   // 版本"request_id": mcp_request["request_id"],  // 请求id和入参要一致"timestamp": 1720000001,    // 时间戳"response": {    // 响应"content": response_content,  // 调用得到的内容"status": "success"       // 调用状态,成功}}self.send_response(200)     // 设置HTTP状态码为200(OK)self.send_header('Content-type', 'application/json')  //设置响应头为JSON类型self.end_headers()self.wfile.write(json.dumps(mcp_response).encode())  // 发送响应内容if __name__ == "__main__":   // main方法server_address = ('', 8080)   // 创建HTTP服务器实例,监听8080端口httpd = HTTPServer(server_address, MCPRequestHandler)print("Starting MCP Server on port 8080...")httpd.serve_forever()   // 启动服务器并持续运行

解释下:
可以使用如上客户端代码示例创建json体并发送请求示例。也可以直接使用curl或Postman发送POST请求到http://localhost:8080,如下:
示例:

curl -X POST http://localhost:8080 \-H "Content-Type: application/json" \-d '{"protocol": "MCP","version": "1.0","request_id": "abc123","timestamp": 1720000000,"context": {"conversation_id": "conv_987654","history": [{"role": "user", "content": "查询北京天气"},{"role": "assistant", "content": "正在为您查询..."}]},"tool_call": {"name": "get_weather","parameters": {"location": "北京"}}}'

服务端会接收你的请求进行处理,并返回类似如下响应。
json示例:

{"protocol": "MCP","version": "1.0","request_id": "abc123","timestamp": 1720000001,"response": {"content": "北京当前天气为晴朗,气温25°C。","status": "success"}
}

4、总结

尽管目前没有统一的“官方”MCP协议,但在实际开发中,这种轻量级上下文交换协议非常实用,尤其适用于:

  • LLM Agent与插件之间的通信
  • 多模型协作时的状态同步
  • 内部服务间的标准化接口
  • 支持多轮对话与上下文保持

向阳而生,Dare To Be!!!

http://www.dtcms.com/a/272345.html

相关文章:

  • 开源入侵防御系统——CrowdSec
  • Linux 服务器综合性能测试脚本(优化版)结构化分析
  • 若依框架去掉Redis
  • CORESET 0 and SIB1 Scheduling in a Nutshell
  • 论文阅读笔记:VI-Net: Boosting Category-level 6D Object Pose Estimation
  • RocketMQ安装(Windows环境)
  • 上线节点固定,项目进度紧张,如何合理压缩工期
  • NGINX系统基于PHP部署应用
  • 实验作业1+整理笔记截图
  • 实训八——路由器与交换机与网线
  • 栈题解——有效的括号【LeetCode】两种方法
  • 硬件基础------电感
  • Matplotlib-绘制训练曲线指南
  • 力扣刷题记录(c++)06
  • HTML应用指南:利用GET请求获取全国永辉超市门店位置信息
  • Unity3D iOS闪退问题解决方案
  • PyTorch仿射变换:原理与实战全解析
  • 深入理解Java虚拟机:Java内存区域与内存溢出异常
  • 【运维架构】云计算运维架构师与基础设施,技术路线,Linux证书(标准化/定制化/CNCF,公有云/混合云/私有云)
  • 【图像处理基石】如何入门图像校正?
  • (6)机器学习小白入门 YOLOv:图片的数据预处理
  • 机器学习 YOLOv5手绘电路图识别 手绘电路图自动转换为仿真软件(如LT Spice)可用的原理图,避免人工重绘
  • Spring MVC 1
  • C++中的list的学习
  • Go语言教程-变量、常量、命名规则
  • 亚矩阵云手机破解Maio广告平台多账号风控:从“生存焦虑”到“规模化增长”的终极方案
  • 电路研究9.4——合宙Air780EP的LuatOS、CSDK跟标准AT
  • 基于开源AI大模型AI智能名片S2B2C商城小程序源码的私域流量新生态构建
  • 独立服务器选择Rocky Linux还是CentOS
  • 【数据结构】顺序表(sequential list)