一文深入理解MCP,以及cursor+mcp实战
MCP(Model Context Protocol)模型上下文协议,提供一种标准化的方式将AI模型连接到不同的数据源和工具。简单说,MCP是一个开放的规则,让AI应用和外部世界“握手”,变得更聪明、更实用!MCP使用 JSON-RPC 2.0 作为其消息传递格式,为客户端和服务器之间的通信提供了一种标准化的方式。以下是我编写的mcp服务脚本sql_server.py,mcp名叫bsp_sql。请
一、什么是MCP协议
MCP(Model Context Protocol)模型上下文协议,提供一种标准化的方式将AI模型连接到不同的数据源和工具。简单说,MCP是一个开放的规则,让AI应用和外部世界“握手”,变得更聪明、更实用!
(一)、MCP核心架构
MCP提供了一套通用规则,允许任何客户端与任何服务器通信,而无需考虑组件的构建者,遵循客户端-服务器架构,其中:
主机是发起连接的 LLM 应用程序(如 Claude Desktop 或 IDE(cursor))
客户端在主机应用程序内部与服务器保持 1:1 连接,维护对服务器的订阅。
服务器是轻量级程序,每个程序通过mcp协议向客户提供上下文、工具和提示
本地数据源:您的计算机文件、数据库以及 MCP 服务器可以安全访问的服务
远程服务:mcp服务器可通过互联网(例如,通过 API)访问的外部系统
(二)核心组件
1、协议层
协议层处理消息框架、请求/响应链接和高级通信模式
协议的关键部分:
MCP使用 JSON-RPC 2.0 作为其消息传递格式,为客户端和服务器之间的通信提供了一种标准化的方式。基础协议定义了三种基本的消息类型:
请求 (Requests) :用于启动从客户端到服务器或反之亦然的操作的消息。
响应 (Responses) :为响应请求而发送的消息。
通知 (Notifications) :不需要响应的单向消息。
MCP官方的协议规范:Specification - Model Context Protocol
2、传输层
传输层负责处理客户端和服务器之间的实际通信。MCP 支持多种传输机制:
1Stdio 传输
○使用标准输入/输出进行通信
○非常适合本地流程
2可流式传输的 HTTP 传输
○使用 HTTP 和可选的服务器发送事件进行流式传输
○客户端到服务器消息的 HTTP POST
(三)连接生命周期
1、初始化
MCP的初始化类似于传输层TCP协议的三次握手机制:
(1)客户端发送initialize带有协议版本和功能的请求
(2)服务器以其协议版本和功能进行响应
(3)客户端发送initialize通知作为确认
(4)开始正常消息交换
2. 消息交换
初始化后,支持以下模式:
●请求-响应:客户端或服务器发送请求,对方响应
●通知:任何一方发送单向消息
3. 终止
任何一方都可以终止连接:
●通过以下方式干净关机close()
●传输断开
●错误条件
MCP官方定义了标准的错误代码:
enum ErrorCode {
// Standard JSON-RPC error codes
ParseError = -32700,
InvalidRequest = -32600,
MethodNotFound = -32601,
InvalidParams = -32602,
InternalError = -32603,
}
SDK 和应用程序则可以定义自己的高于 -32000 的错误代码。
二、如何使用MCP
(一)写一个MCP-Server
本地所需环境:python,mcp。建议部署虚拟环境下载pip install 所需要的包
以下是我编写的mcp服务脚本sql_server.py,mcp名叫bsp_sql
import pymysql
from mcp.server import FastMCP
app = FastMCP("bsp_sql")
conn = pymysql.connect(
host="",
user="",
password="",
database="",
port=
)
@app.tool() # 定义一个工具
async def query_asset_db(sql: str) -> str:
sql_trimmed = sql.strip().lower()
if not sql_trimmed.startswith("select"):
return "⚠️ 仅允许执行 SELECT 查询语句。"
try:
cursor = conn.cursor()
cursor.execute(sql)
results = cursor.fetchall()
return str(results)
except Exception as e:
return f" 执行出错: {str(e)}"
if __name__ == "__main__":
app.run()
启动mcp服务:
mcp dev sql_server.py 启动成功则如下所示:
以cursor作为客户端为例,配置mcp
点击设置->点击mcp_tools->New Mcp server
配置命令如下:
{
"mcpServers": {
"bsp_sql": {
"command": "/Users/a58/Projects/demo/.venv/bin/python", // 编译环境
"args": ["/Users/a58/Projects/demo/sql_server.py"] // 本地服务路径
}
}
}
配置连接成功后显示:
则可以根据此mcp对大模型进行问答:
(二)连接开放MCP-server
参考:
MCP Servers
MCP - Model Context Protocol Server收录平台 | MCP协议实践指南
按照server的文档配置cursor即可使用 比如高德地图MCP配置如下:
{
"mcpServers": {
"amap-amap-sse": {
"url": "https://mcp.amap.com/sse?key=你在高德开放平台申请的key"
}
}
}
配置后则可进行提问:
本文参考:
Introduction - Model Context Protocol
一文详解模型上下文协议MCP-腾讯云开发者社区-腾讯云
Cursor中配置并使用MCP Server服务_cursor mcp server-CSDN博客
若有收获,就点个赞吧
更多推荐
所有评论(0)