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

MCP学习与实践

目录

1.MCP简介

1.1 MCP是什么

1.2 MCP与Agent关系:

1.3 MCP的架构

2. MCP原理

2.1 MCP 工作过程

2.2 MCP 通讯方式

2. MCP使用

2.1 cursor中增加MCP-SSE(高德地图MCP)

2.2 cursor中增加MCP-STDIO(12306-MCP)


本文详细讲解了什么是MCP,并在Cursor中实践了两个MCP的配置,其中也遇到了很多问题,并一一解决了。

1.MCP简介

1.1 MCP是什么

MCP的全称是Model Context Protocol,即「模型上下文协议」,目的是为LLM提供标准化的上下文信息传递方式,从而实现AI智能体与外部数据及工具的结合。是Anthropic推出的AI万能插座。

标准化AI模型接入协议,通过自然语言描述工具调用逻辑,实现模型与外部数据/工具的交互。

1.2 MCP与Agent关系:

MCP提供了标准化的接口,使得Agent能够方便地调用各种外部工具和数据源。MCP就像一个“万能插座”,将不同的工具和数据源连接到Agent上。

Agent:是应用层的实体,基于大模型(LLM)的智能体,通过MCP协议调用工具或服务完成任务(如文档搜索、工单处理等)。Agent利用MCP提供的接口,自主决策并执行任务。Agent可以根据上下文和模型的推理,判断是否需要调用某个服务,然后使用function calling执行函数。

1.3 MCP的架构

MCP分为:MCP Host(主机)、MCP Client(客户端)、 MCP Server(服务端)

MCP Host:Host=内置了MCP Client的应用程序,可以是APP、Agent、IDE、插件、桌面应用等等形态;

是承载 AI 模型的各类应用程序(例如 Claude Desktop、Cursor、CatPaw等)的核心载体。

MCP Host的作用:一方面负责接收用户输入的信息,并将 AI 给出的响应清晰、直观地展示给用户;另一方面,它深度集成了 MCP Client 组件,为整个 MCP 生态系统搭建起基础框架。 以用户使用 CatPaw提问的场景为例:当用户在界面上输入问题时,MCP Host 作为中转枢纽,会将这个请求准确无误地传递给内部嵌入的 AI 模型(如 Claude)。而一旦处理过程中涉及到外部资源的调用,MCP Host 会迅速激活 MCP Client,开启与外部资源的交互流程,确保整个交互过程流畅且高效。

MCP Client:是大模型与MCP Server之间的桥梁。

MCP Client 紧密内嵌于 Host 环境之中,是实现 Host 与 MCP Server 之间高效通信的核心组件。它在整个 MCP 架构里扮演着桥梁的关键角色,主要致力于建立与 MCP Server 的一对一专属连接,并妥善处理协议通信、用户授权以及权限控制等关键事务。

MCP Server:负责处理来自MCP Client的请求,并调用各种资源,返回相应的结果或数据。

MCP Server 属于轻量级的服务程序,肩负着为 AI 系统提供对各类数据源、工具或 API 进行访问的重要使命。在实际应用过程中,它能够执行各种具体的操作任务,包括但不限于读取数据库中的数据、调用 Git 命令进行版本控制等,是 MCP 架构中实现实际功能操作的关键环节。

2. MCP原理

2.1 MCP 工作过程

问题1.MCP如何与大模型进行协作:

主要是基于System Prompt的方式进行通信。System Prompt的方式,是通过将所有工具以及工具Schema信息注入到System Prompt中给到大模型,由大模型结合当前对话上下文信息、工具信息、工具使用说明等,选择具体的工具响应,并由Agent识别来完成最终工具调用,最终将调用工具结果给到大模型,由大模型继续判断下一步动作,从而进入任务循环,直到达到Agent规定的最大的交互轮次或者大模型认为任务已结束,终止任务循环,并最终响应用户。

问题2.MCP Client-Server如何通信:

MCP Client和Server的通讯是基于HTTP+JSON-RPC2.0协议规范进行通讯的,在通讯配置上目前MCP client支持HTTP with SSE和stdio两种通讯配置方式

简单来说:MCP 的主要工作是描述 Server 提供了哪些能力(给 LLM 提供),需要哪些参数(参数具体的功能是什么),最后返回的结果是什么。

AI Agent 在用户输入 帮我查询2024年5月01日的北京天气指令后,自行判断需要调用哪些 MCP Server,并决定调用顺序,最终根据不同 MCP Server 的返回结果来决定是否需要调用下一个 Server,以此来完成整个任务。

2.2 MCP 通讯方式

MCP 协议支持两种主要的通信机制:基于标准输入输出的本地通信基于SSE(Server-Sent Events)的远程通信

  • 本地通信通过 stdio 传输数据,适用于在同一台机器上运行的客户端和服务器之间的通信。

  • 远程通信利用 SSE 与 HTTP 结合,实现跨网络的实时数据传输,适用于需要访问远程资源或分布式部署的场景。

stdio传输方式:stdio 传输适用于要操作的数据资源位于本地计算机,且不希望暴露外部访问的场景。(客户端 将 MCP 服务器作为子进程启动)

根据MCP server服务类型用不同的commond命令,如果是node,commod则为npx,python服务则用uv

{"mcpServers": {"mdp-ai-mcp-localserver-example": {"command": "java","args": ["-jar","配置你的 MCP local server fatjar 绝对路径"]}}
}

接入MCP server方式:(客户端 通过 HTTP 请求连接到服务器的 SSE 端点,基于长连接)

{"mcpServers": {"mdp-ai-mcp-remoteserver-example": {"url": "http://{your mcp server domain}/sse"}}
}

2. MCP使用

常见的MCP Host有cursor,美团CatPaw IDE或者CatPaw插件

2.1 cursor中增加MCP-SSE(高德地图MCP)

其它MCP Host是类似的操作

SSE的方式:这种方式的MCP是部署在远程服务器上,cursor中增加MCP的http链接

例如:cursor中增加高德地图MCP,此MCP是部署在高德公司的服务器上,如果想用client进行连接的话,需要申请服务的授权,即申请一个key。

第一步:登入:高德开放平台控制台,申请个开发者账号

第二步:进入【应用管理】,点击页面右上角【创建新应用】,填写表单即可创建新的应用

第三步:添加Key,创建成功后,可获取 Key 

第四步:在cursor中增加MCP server

{"mcpServers": {"amap-amap-sse": {"url": "https://mcp.amap.com/sse?key=${申请的key}"}}
}

mcp列表中展示该mcp下的所有tools

当询问大模型天气的时候,会识别到加载的MCP中的工具,可以看到调用工具的入参和返参,达模型会从用户输入的自然语言中进行意图识别,并提取出参数,并将tool返回的参数进行加工返回给用户。

2.2 cursor中增加MCP-STDIO(12306-MCP)

stdio方式接入MCP,是需要在本地运行MCP server服务,用MCP client运行Commond命令,启动MCP server。

以12306-mcp为例子:mcp社区:12306车票查询 - MCP Store

第一步:下载12306-MCP的代码:

git clone https://github.com/Joooook/12306-mcp.git

第二步:安装依赖包:npm install(在12306-mcp目录下)

第三步:cursor中增加MCP,并配置

{"mcpServers": {"12306-mcp": {"command": "npx","args": ["-y","/Users/用户名/github_code/12306-mcp"]}}
}

出现如下日志,或者mcp变成小绿点,表示成功启动本地MCP server并连接上

测试一下:分别调用了MCP下的三个tools

遇到的问题记录:

问题描述原因解决
cursor中agent出现Model not available是因为模型提供方对中国地区实施了访问限制,主要影响 Claude 系列模型调用在模型选择处,勾选 “auto”,让 Cursor 自动选择一个可用模型,或手动选择非 ChatGPT、Claude 系列的模型,如 DeepSeek-R1、DeepSeek-V3 等
npx -y 命令报错 “您必须提供一个命令”本地node版本是12,node版本不兼容升级为node 18
sh: tsc: command not found系统中没有找到 TypeScript 编译器(tsc),通常是因为未安装 TypeScript 或未正确配置环境变量导致的安装:
npm install -g typescript
tsc.js文件中SyntaxError: Unexpected token ?本地node版本是12,node版本不兼容升级为node 18
升级node报错 unknown or unsupported macOS version: :dunno通常是由于使用的 Node 版本管理工具(如 nvm 或 brew)与当前 macOS 版本不兼容导致的brew update-reset # 重置并更新 brew 到最新版本
cursor中连接mcp,env: node: No such file or directory是因为 Cursor 无法找到系统中的 Node.js 环境(MCP 功能依赖 Node.js 运行)

配置环境变量:

export PATH="/Users/用户名/.nvm/versions

/node/v18.20.8/bin:$PATH"

cursor中配置mcp报错No server info foundMCP server未起来需要将

"args": [

"-y",

"/12306-mcp"

]

改为:

"args": [

"-y",

"/Users/用户名/

github_code/12306-mcp"

]

MCP社区市场:MCP Store - Find and Connect to 20,000+ MCP Servers

干货分享!MCP 实现原理,小白也能看懂 - 磊哥|www.javacn.site - 博客园

http://www.xdnf.cn/news/17680.html

相关文章:

  • [激光原理与应用-222]:机械 - 3D设计与2D设计的异同比较
  • Linux 虚拟机磁盘空间占满-全面清理方案
  • Cesium1.95中如何高效管理 1500 个高频实体
  • 赋值运算符指南
  • 代码可读性与维护性的实践与原则
  • word中,添加新的参考文献后,其他参考文献的交叉引用不能及时更新的解决办法
  • 《Webpack与Vite热模块替换机制深度剖析与策略抉择》
  • 二维前缀和问题
  • 如何在 Ubuntu 24.04 LTS Linux 上安装 MySQL 服务器
  • 电脑本地摄像头做成rtsp流调用测试windows系统中
  • 【大智慧数据】心智开花的时候
  • AI测试助手如何让Bug无处可藏
  • Dify 从入门到精通(第 26/100 篇):Dify 的知识图谱集成
  • 2025最新免费的大模型和免费的大模型API有哪些?(202508更新)
  • 2025年6月电子学会全国青少年软件编程等级考试(Python二级)真题及答案
  • 【Linux指南】Vim的全面解析与深度应用
  • C语言第八章指针四
  • 【接口自动化】初识pytest,一文讲解pytest的安装,识别规则以及配置文件的使用
  • Jotai:React轻量级状态管理新选择
  • Code Exercising Day 10 of “Code Ideas Record“:StackQueue part02
  • SQL三剑客:DELETE、TRUNCATE、DROP全解析
  • CentOS7.9 离线安装mysql数据库
  • CPP继承
  • Windows执行kubectl提示拒绝访问【Windows安装k8s】
  • `sk_buff` 结构体详解(包含全生命周期解析)
  • 数学建模:控制预测类问题
  • 全面了解机器语言之kmeans
  • 010601抓包工具及证书安装-基础入门-网络安全
  • 【Matplotlib】中文显示问题
  • 企业级WEB应用服务器TOMCAT — WEB技术详细部署