一、什么是MCP协议

MCP(Model Context Protocol)模型上下文协议,提供一种标准化的方式将AI模型连接到不同的数据源和工具。简单说,MCP是一个开放的规则,让AI应用和外部世界“握手”,变得更聪明、更实用!

(一)、MCP核心架构

MCP提供了一套通用规则,允许任何客户端与任何服务器通信,而无需考虑组件的构建者,遵循客户端-服务器架构,其中:
主机是发起连接的 LLM 应用程序(如 Claude Desktop 或 IDE(cursor))
客户端在主机应用程序内部与服务器保持 1:1 连接,维护对服务器的订阅。
服务器是轻量级程序,每个程序通过mcp协议向客户提供上下文、工具和提示
本地数据源:您的计算机文件、数据库以及 MCP 服务器可以安全访问的服务
远程服务:mcp服务器可通过互联网(例如,通过 API)访问的外部系统

image.png


(二)核心组件

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协议的三次握手机制:

image.png


(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 启动成功则如下所示:

image.png


以cursor作为客户端为例,配置mcp
点击设置->点击mcp_tools->New Mcp server

image.png


配置命令如下:


{

"mcpServers": {

"bsp_sql": {

"command": "/Users/a58/Projects/demo/.venv/bin/python", // 编译环境

"args": ["/Users/a58/Projects/demo/sql_server.py"] // 本地服务路径

}

}

}


配置连接成功后显示:

image.png


则可以根据此mcp对大模型进行问答:

image.png


(二)连接开放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博客

若有收获,就点个赞吧

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐