深度解析MCP协议

article/2025/7/6 22:06:03

图片

全面解读MCP协议:从技术原理到实践应用

©作者|Monalisa

来源|神州问学

什么是MCP协议

MCP(ModelContextProtocol)是Anthropic在2024年11月推出的开放协议,旨在标准化大型语言模型与外部数据源、工具之间的交互方式。简单来说,MCP就是AI大模型的"万能插座"或"通用语言",让不同的大模型能够以统一方式调用外部工具、获取实时数据并与各类服务交互。

类比而言,如果把大模型比作一台高性能电脑,那么MCP就是它的USB接口——正如USB允许电脑连接摄像头、打印机等外设一样,MCP允许AI模型"接入"天气预报、数据库查询、代码执行等各种外部服务。这种连接不仅是单向的数据获取,更是双向的交互通道,使得AI不仅能"读取"信息,还能"操作"现实世界中的工具和系统。

MCP协议技术架构

MCP采用客户端-服务器架构,主要由三个核心组件构成:

1.MCP主机(MCP Host):任何提供 AI 交互环境、访问外部工具和数据源并运行 MCP Client 的 AI 应用(如 Claude 桌面版、Cursor)。

2.MCP客户端(MCP Client):在 Host 内运行,实现与 MCP Servers 的通信。

3.MCP服务器(MCP Server):对外开放特定能力,并提供对数据源的访问权限,包括:

Tools:允许服务器公开可执行的函数,这些函数可由客户端调用并由 LLM 使用来执行操作。Tool 不仅人让 LLM 能从外部获取信息,还能执行写入或操作,为 LLM 提供真正的行动力。

Resources:服务器希望提供给客户端的任何类型的只读数据。这可能包括:文件内容、数据库记录、图片、日志等等。

Prompts:由服务器定义的可重用的模板,用户可以选择这些模板来引导或标准化与 LLM 的交互过程。例如,Git MCP Server 可以提供一个“生成提交信息”的提示模板,用户可以用它来创建标准化的提交消息。

图片

MCP的实战应用

初始化项目

使用 MCP Python SDK 来编写项目,使用 uv 来管理 Python 项目依赖。

1.安装 uv 可以参考 Installing uv。MacOS 用户可以使用 brew 进行安装:

图片

2.执行以下命令初始化项目:

图片

3.添加依赖:

图片

4.创建 server.py 文件,接下来将会在该文件中编写代码:

图片

在 Claude Desktop 中安装 MCP Server

1.在.evn 文件中设置好 Elasticsearch 的连接信息。

图片

2.可以执行以下命令将 MCP Server 安装到 Claude Desktop 中:

--env-file 参数指定了.evn   文件的路径,用于加载环境变量。

--with-editable 参数指定了 uv 依赖管理文件  所在的目录pyproject.toml,用于安装项目的依赖。

图片

该命令会自动帮助你在cluade_desktop_config.json文件中添加 MCP Server 的配置。

Elasticsearch 客户端配置

首先创建 Elasticsearch 客户端,用于和 Elasticsearch 服务器进行交互。

图片

初始化FastMCP Server

以下代码创建一个名为 mcp的 FastMCP 对象

图片

添加 Tool

1.Tool 定义了允许 LLM 可以调用 MCP Server 执行的操作,除了查询以外,还可以执行写入操作。接下来定义了两个 Tool:

list_indices: 列出所有可用的索引。

get_index: 获取指定索引的详细信息。

使用@mcp.tool() 装饰器将这两个函数标记为 MCP 的 Tool。

图片

2.然后重启 Claude Desktop,一切正常的话,你应该能在输入框的右下角看到一个锤子图标。点击锤子图标,可以看到 Elasticsearch MCP Server 提供的工具信息。

图片

添加Resource(资源)

1.Resource 定义了 LLM 可以访问只读的数据源,可以用于为 LLM 提供上下文内容。在这个示例中,我们定义了两个资源:

es://logs:允许 LLM 访问 Elasticsearch 容器的日志信息,通过 Docker 命令获取日志内容。

file://docker-compose.yaml:允许 LLM 访问项目的docker-compose.yaml文件内容。

使用@mcp.resource() 装饰器将这些函数标记为 MCP 的 Resource,装饰器参数指定了 Resource 的 URI。

图片

2.重启 Claude,点击插头图标,可以看到 Elasticsearch MCP Server 提供的 Resource。

图片

添加Prompt(提示)

1.我们定义一个名为es_prompt 的提示模板,引导 LLM 从多个维度(如索引设置、搜索优化、数据建模和扩展性等)对索引进行分析。

图片

2.重启 Claude Desktop,点击插头图标,选择 es_prompt,并输入待分析的索引 student。

图片

应用实例

场景描述:现在假设我们有这样一个需求,读取 movies.csv 文件,将文档写入 Elasticsearch 的 movies 索引中,如果电影票房超过 1 亿美元,则在文档中设置一个额外的字段 isPopular: true,否则设置为isPopular: false。

在过去,我们可能会考虑使用 Elasticsearch Ingest Pipeline 的 Script processor 来实现这一需求。

现在我们则可以通过 Resource 向 LLM 提供要读取的 movies.csv 文件,LLM 会对电影票房进行计算,然后设置文档的isPopular:字段值,最后调用write_documents Tool 来将文档写入 Elasticsearch 的 movies 索引中。

具体的实现代码如下:

图片

之后重启 Claude,选择 file://movies.csv/  Resource,然后向 Claude 发送以下指令:将文件中的电影写入 Elasticserach 中的 movies 索引,如果电影票房超过 1 亿美元,那么在该文档中设置一个额外的字段 isPopular: true,否则设置为 false。

图片

可以看到 Claude 顺利地完成了我们指定的任务。

图片

在 Kibana 中查询 movies 索引,可以看到我们的数据已经成功写入,并且 isPopular 字段也已经被正确设置了。

图片

通过上述这个组合示例,展示了如何让 LLM 利用这些组件完成更复杂的数据处理任务,充分体现了 MCP 在提升 LLM 应用开发效率方面的优势。

行业影响预测

MCP协议的诞生标志着AI应用进入新阶段——从封闭的对话系统,走向开放的、能真正改变工作流的智能代理。它不仅是技术协议,更是重塑人机协作范式的钥匙。如同USB标准催生了外设产业的繁荣,MCP有望孕育出全新的AI工具生态。

对于开发者,现在正是参与这一变革的良机:无论是构建垂直领域的MCP服务器,还是开发创新的客户端体验,都能在这片新蓝海中找到位置。

对于企业用户,MCP提供了将AI深度融入业务流程的标准化路径,同时保障数据安全。

可以预见,随着MCP生态的成熟,"连接"将成为AI的新能力维度——能无缝接入多少工具、多广的数据,决定了智能体的实际价值边界。

这场由MCP开启的连接革命,或许正是通向真正通用人工智能的关键一步。


http://www.hkcw.cn/article/DijnDEdPbM.shtml

相关文章

Qt5.14.2编译的MySQL5.7.25对应64位驱动文件下载:项目核心功能/场景

Qt5.14.2编译的MySQL5.7.25对应64位驱动文件下载:项目核心功能/场景 【下载地址】Qt5.14.2编译的MySQL5.7.25对应64位驱动文件下载 此项目为开发者提供了Qt5.14.2编译环境下,MySQL5.7.25版本的64位驱动文件,包含libqsqlmysql.a、qsqlmysql.dl…

一文完成 Docker 部署Canel 并配置ES与MySQL 的数据同步

Docker 部署Canel 并且配置ES与MySQL 的数据同步 前期配置 开启MySQL binlog日志 [mysqld] log-binmysql-bin # 开启 binlog binlog-formatROW # 选择 ROW 模式 server_id1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复创建 Canal 用户并授权…

mysql的锁-->一篇读懂所有锁机制

目录 mysql的锁 概述:根据mysql锁的大类型可以分为 我们先来讲一下范围最大的全局锁 使用 为什么要使用全局锁? 使用全局锁进行备份的缺点 表级锁 表锁 1.共享读表锁的语法 2.排斥写表锁 元数据锁 意向锁 什么是意向锁 怎么产生意向锁 意向…

免费送源码:Java+C+++MySQL C++学生信息管理系统的设计与实现 计算机毕业设计原创定制

目 录 1 绪论 1 1.1选题背景 1 1.2课题研究意义 1 1.3论文结构与章节安排 1 2 相关技术介绍 3 2.1 C语言 3 2.2 Mysql数据库 3 3 系统分析 3 3.1 可行性分析 3 3.1.1 技术可行性分析 3 3.1.2 经济可行性分析 3 3.1.3 法律可行性分析 3 3.2 系统功能分析 3 3.2.1…

达梦DTS数据迁移工具生产篇(MySQL->DM8)

本文章使用的DTS工具为 2024年9月18日的版本,使用的目的端DM8数据库版本为2023年12月的版本,注意数据库版本和DTS版本之间跨度不要太大,以免出现各种兼容性的报错。若发现版本差距过大时,请联系达梦技术服务工程师处理。 1. 迁移…

MySQL 数据库备份与还原

作者:IvanCodes 日期:2025年5月18日 专栏:MySQL教程 思维导图 备份 (Backup) 与 冗余 (Redundancy) 的核心区别: 🎯 备份是指创建数据的副本并将其存储在不同位置或介质,主要目的是在发生数据丢失、损坏或逻辑错误时进…

MySQL Binlog 日志查看方法及查看内容解析

一、Binlog 日志概述 Binlog(二进制日志)记录了 MySQL 数据库执行的所有更改数据的操作,包括INSERT、UPDATE、DELETE等。它对于数据恢复、主从复制以及审计等方面有着至关重要的作用。 二、查看 Binlog 日志方法 开启 Binlog 日志功能 默…

【金仓数据库征文】金仓数据库(KingbaseES)迁移与集群部署实战:从MySQL到KES的全流程解析

随着企业信息化和数字化转型的加速,企业对数据库的要求不仅仅局限于基础的数据存储功能,更涉及到性能、可扩展性、安全性、以及持续的系统升级能力。因此,数据库迁移已经成为现代企业升级IT架构时的一个重要步骤。特别是在国产化替代的浪潮中…

【MySQL】 基本查询(下)

欢迎拜访:雾里看山-CSDN博客 本篇主题:【MySQL】 基本查询(下) 发布时间:2025.2.18 隶属专栏:MySQL 目录 Update语法案例Delete删除数据语法案例截断表语法案例插入查询结果语法案例聚合函数函数介绍案例group by子句的使用语法having和where案例结语Update 语法 UPDATE …

MySQL开大招了! 三十周年庆典推出四项 OCP 认证免费

🎉 MySQL 30岁生日大礼包!OU掏家底了! 狠心决定:4.20-7.31期间 🔥全系列MySQL课程四大认证 🔥原价$2,500/人的考试资格 通!通!免!费! 💡30年只此一…

Kettle9.1链接mysql报错: Connection failed. Verify all connection parameters and confirm that the appropr

Connection failed. Verify all connection parameters and confirm that the appropriate driver is installed. The server time zone value ‘D1’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC 连接失败。验证所…

2025最新版|八股文面试题库+答案详解(附高频考点解析)

我相信大多 Java 开发的程序员或多或少经历过 BAT 一些大厂的面试,也清楚一线互联网大厂 Java 面试是有一定难度的,小编经历过多次面试,有满意的也有备受打击的。因此呢小编想把自己这么多次面试经历以及近期的面试真题来个汇总分析&#xff…

库室门禁报警系统|多功能控制器运用

库室门禁报警系统 库室门禁报警系统是一套综合性的安全防护体系,它集成了门禁控制、入侵报警、视频监控等多种功能。门禁控制功能通过对人员进出权限的精准管理,严格限制无关人员进入库室。系统可根据人员的身份、职务、工作需求等设定不同的权限&#…

【我给AI出题-1】DCMTK的storescu在发送医学图像给服务器时,能否指定客户端的端口号?

本文由Markdown语法编辑器编辑完成。 封面图像由: "即梦AI"创作,提示词: “几个AI工具,在一起激烈地讨论问题,包括: 豆包,kimi, deepseek, chatgpt, csdn的图标,作为人物形象. 可以生成吉普力的风格.” 1.…

研华工控机安装Windows10系统,适用UEFI(GPT)格式安装

主要硬件 主板:AIMB-787 、CPU:i5-6500 U盘启动工具:通过网盘分享的文件:rufus-3.20.zip 链接: https://pan.baidu.com/s/1YlFfd-_EhFHCG4sEHBQ8dQ?pwdQT12 提取码: QT12 Win10 22H2 Pro 纯净版系统:通过网盘分享…

ubuntu系统安装Pyside6报错解决

目录 1,问题: 2,解决方法: 2.1 首先查看pypi是否有你需要包的镜像: 2.2 其它方案: 2.3 如果下载很慢,可以换源: 2.4 查看系统架构 Windows Ubuntu 1,问题&#xf…

第六十一节:深度学习-使用 OpenCV DNN 模块

一、OpenCV DNN模块:传统与AI的桥梁 在深度学习席卷计算机视觉领域的今天,OpenCV作为最广泛使用的视觉库,通过其强大的DNN(Deep Neural Networks)模块架起了传统算法与深度学习之间的桥梁。该模块允许开发者在无需依赖原始深度学习框架的情况下,直接加载和运行预训练模型…

MySql(七)

目录 创建表 准备数据 1.更新表中的数据 1)不带条件修改 修改eno表中的性别为女 查看表中的数据 修改表中的性别为女 2)带条件修改 修改张三的性别为男 查看表 把地址为木星的修改为火星 一次修改多个列 删除数据 1)语法(删除表中…

算力租赁革命:弹性模式如何重构数字时代的创新门槛​

一、算力革命:第四次工业革命的核心驱动力​ 在科技飞速发展的当下,我们正悄然迎来第四次工业革命。华为创始人任正非在一场程序设计竞赛中曾深刻指出,这场革命的基础便是大算力。随着 5G、人工智能、大数据、物联网等信息技术的迅猛发展&am…

【sa-token】 sa-token非 web 上下文无法获取 HttpServletRequest。

Springboot cloud gateway集成sa-token中报错 cn.dev33.satoken.exception.NotWebContextException: 非 web 上下文无法获取 HttpServletRequestat cn.dev33.satoken.spring.SpringMVCUtil.getRequest(SpringMVCUtil.java:45) ~[sa-token-spring-boot-starter-1.38.0.jar:?]官…