目录

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.pswp.cn/news/918372.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918372.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918372.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL(187)如何使用pt-query-digest进行查询分析?

使用 pt-query-digest 工具可以帮助分析 MySQL 查询的性能,找出慢查询、频繁查询以及消耗资源较多的查询,从而为优化提供依据。以下是详细深入的使用 pt-query-digest 进行查询分析的步骤和相关示例。 一、安装 pt-query-digest pt-query-digest 是 Perc…

分享一个基于Python和Hadoop的的电信客户特征可视化分析平台 基于Spark平台的电信客服数据存储与处理系统源码

💕💕作者:计算机源码社 💕💕个人简介:本人八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题…

初识STL

一 、STL的诞生在C发展早期,程序员在不同的项目中需要反复编写相似的数据结构和算法。重复开发带来以下问题:代码冗余:每个项目都要重新实现基本数据结构和算法维护困难:不同人编写的代码风格不一致,难以维护效率低下&…

DDoS 防护的未来趋势:AI 如何重塑安全行业?

随着网络攻击规模和复杂性的不断升级,分布式拒绝服务(DDoS)攻击已成为企业数字化转型中的一大威胁。传统防御手段在应对智能化、动态化的攻击时逐渐显露出局限性。而人工智能(AI)技术的崛起,正为 DDoS 防护…

【每天一个知识点】深度领域对抗神经网络

Deep Domain Adversarial Neural Network(深度领域对抗神经网络,DDANN) 是一类结合 深度学习 与 领域自适应(domain adaptation) 思想的神经网络结构,主要用于不同数据域之间的知识迁移,尤其是在…

【C语言】深入理解预处理

文章目录一、预定义符号二、#define定义常量:便捷的符号替换常见用法示例:注意事项:三、#define定义宏:带参数的文本替换关键注意点:四、带有副作用的宏参数五、宏替换的规则:预处理的执行步骤重要注意&…

展锐平台(Android15)WLAN热点名称修改不生效问题分析

前言 在展锐Android V项目开发中,需要修改softAp/P2P热点名称时,发现集成GMS后直接修改framework层代码无效。具体表现为: 修改packages/modules/Wifi/WifiApConfigStore中的getDefaultApConfiguration方法编译烧录后修改不生效 问题根源在…

wsl ubuntu访问(挂载)vmware vmdk磁盘教程

之前使用VMware Workstation 虚拟机跑了个ubuntu,现在改用wsl了, 想把vmware的磁盘挂载到wsl ubuntu。一、磁盘合并我原先的vmware跑的ubuntu存在多个vmdk文件(磁盘文件),需要先将磁盘合并成一个才方便挂载。首先你电脑…

UGUI源码剖析(3):布局的“原子”——RectTransform的核心数据模型与几何学

UGUI源码剖析(第三章):布局的“原子”——RectTransform的核心数据模型与几何学 在前几章中,我们了解了UGUI的组件规范和更新调度机制。现在,我们将深入到这个系统的“几何学”核心,去剖析那个我们每天都在…

c++注意点(15)----设计模式(桥接模式与适配器模式)

一、结构型设计模式两者有点相似,都是为了做到解耦的功能。适配器模式是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作。桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&…

DuoPlus支持导入文件批量配置云手机参数,还优化了批量操作和搜索功能!

作为我常用的一款还不错的跨境工具,DuoPlus云手机帮我高效完成了很多跨境工作,它的功能也在逐步完善和优化,今天来聊聊它最近新更新的一些功能。功能更新一览新增导入文件配置参数:批量初始化代理、批量修改参数支持导入文件一键配…

PLC如何实现通过MQTT协议物联网网关接入管理云平台

在工业4.0与智能制造浪潮下,企业亟需实现设备数据的高效采集与云端协同,以支撑远程监控、预测性维护等场景。工业智能网关凭借其强大的协议解析能力、边缘计算功能及安全传输机制,成为PLC接入云平台的核心解决方案。本文将从技术架构、功能模…

通过sealos工具在ubuntu 24.02上安装k8s集群

一、系统准备(1)安装openssh服务 sudo apt install openssh-server sudo systemctl start ssh sudo systemctl enable ssh(2)放通防火墙 sudo ufw allow ssh(3)开通root直接登录 vim /etc/ssh/sshd_config#…

nginx+Lua环境集成、nginx+Lua应用

nginxluaredis实践 概述 nginx、lua访问redis的三种方式: 1。 HttpRedis模块。 指令少,功能单一 ,适合简单的缓存。只支持get 、select命令。 2。 HttpRedis2Module模块。 功能强大,比较灵活。 3。 lua-resty-redis库 OpenResty。…

机器学习 K-Means聚类 无监督学习

目录 K-Means 聚类:从原理到实践的完整指南 什么是 K-Means 聚类? 应用场景举例 K-Means 算法的核心原理 K-Means 算法的步骤详解 可视化理解 K-Means 的优缺点分析 优点 缺点 如何选择合适的 K 值? 1. 肘部法(Elbow Me…

RabbitMQ面试精讲 Day 16:生产者优化策略与实践

【RabbitMQ面试精讲 Day 16】生产者优化策略与实践 开篇 欢迎来到"RabbitMQ面试精讲"系列第16天,今天我们聚焦RabbitMQ生产者优化策略与实践。在消息队列系统中,生产者的性能表现直接影响整个系统的吞吐量和可靠性。掌握生产者优化技巧不仅能…

Android 系统的安全 和 三星安全的区别

维度Android(AOSP 通用)Samsung(Knox 强化)本质差异一句话信任根标准 Verified Boot(公钥由谷歌或 OEM 托管)额外在 自家 SoC 里烧录 Knox 密钥 熔丝位,一旦解锁即触发 Knox 0x1 熔断&#xff…

开源大模型实战:GPT-OSS本地部署与全面测评

文章目录一、引言二、安装Ollama三、Linux部署GPT-OSS-20B模型四、模型测试4.1 AI幻觉检测题题目1:虚假历史事件题目2:不存在的科学概念题目3:虚构的地理信息题目4:错误的数学常识题目5:虚假的生物学事实4.2 算法题测试…

【无标题】命名管道(Named Pipe)是一种在操作系统中用于**进程间通信(IPC)** 的机制

命名管道(Named Pipe)是一种在操作系统中用于进程间通信(IPC) 的机制,它允许不相关的进程(甚至不同用户的进程)通过一个可见的文件系统路径进行数据交换。与匿名管道(仅存在于内存&a…

Baumer相机如何通过YoloV8深度学习模型实现危险区域人员的实时检测识别(C#代码UI界面版)

《------往期经典推荐------》 AI应用软件开发实战专栏【链接】 序号 项目名称 项目名称 1 1.工业相机 + YOLOv8 实现人物检测识别:(C#代码,UI界面版) 2.工业相机 + YOLOv8 实现PCB的缺陷检测:(C#代码,UI界面版) 2 3.工业相机 + YOLOv8 实现动物分类识别:(C#代码,U…