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

大模型LLMs的MCP入门

写在前文:最近看到MCP相关内容很火,于是我就去简单了解了下相关内容,官方文档或者说是官方Demo目前还有一部分坑,顺便记录下。

这是一个很简单的例子,只提供了环境初始化正常运行的功能。其余的没有扩展。

首先。

什么是MCP?MCP(Model Context Protocol即模型上下文协议 ),官方给出的解释如下:

The Model Context Protocol allows applications to provide context for LLMs in a standardized way, separating the concerns of providing context from the actual LLM interaction. This Python SDK implements the full MCP specification, making it easy to:

  • Build MCP clients that can connect to any MCP server
  • Create MCP servers that expose resources, prompts and tools
  • Use standard transports like stdio and SSE
  • Handle all MCP protocol messages and lifecycle events

我个人的理解就是,MCP的核心就是,通过一系列手段,帮我们丰富传给模型LLMs的提示词内容。这个手段,包含读取本地文件、提示词、工具之类,其实就是我们在开发的时候,自己写的那些东西,只不过MCP按照统一的模板(抽离方法)进行包装了一层而已。

我们在开发的时候,接收到用户输入的,我们就需要通过代码调用本地文件/提示词,为用户输入的内容添加提示词,然后将内容包装好发给模型,模型根据实际情况判断是否返回要调用的工具链,如果需要调用工具,就返回工具链,然后在我本地调用工具...获取到工具的返回结果后,系统再将整个内容包装一次,再发给模型进行内容生成...。

我个人理解就是,MCP的就是把调用本地文件、提示词、工具,封装成了三个方法我们只需要调用这三个方法---但实际上这三个方法依然需要我们手写/配置。

比如我们要读取本地文件时,只需要传入本地文件路径,MCP就根据该路径读取文件内容并经过统一包装返回该内容。tool、提示词一样....。

注意:我们以Claude的APP为例

用户在app上面输入“1U8等于多少”时,对于大模型来说,用户输入的内容,理论上就是模型输入的内容。 而如果我们企业/研发人员,在本地部署Claude或者调用Claude的API的时候。用户是通过我们第三方app/应用向大模型输入的,此时用户输入“1U8等于多少”,我们的应用后台可能为其添加固定提示词/上下文内容,最后可能就变成了“你是一名人工助手,请根据我提供的上下文或者工具回答下面的问题...;工具:xxxx。内容:....。用户输入:1U8等于多少”。MCP的作用就在于帮助我们企业开发人员通过统一的方法/手段丰富这个上下文/提示词内。

我能想到的MCP的用途,比如我们在使用Claude的APP时,我们输入的内容应该就是直接输入模型的,而我们如果输入的内容在我们本地知识库(或者需要我自己搜索查询的内容),此时我们需要手动去本地知识库查询出相关的内容以后,把这个内容自己手动拼装到app的提示词中,发给Claude模型生成。但是现在有了MCP这个协议以后,只需要配置就可以直接由模型自己调用相关的服务/工具接口获取我们本地知识库内容。只不过这个服务是需要我们自己来开发的。当然还有一种情况就是,由赛博菩萨开发好了以后发布到自己的服务器上,并对外开放公网IP接口,然后大家在本地的Claude的APP上面配置以后,本地Claude会去调用该服务进行内容生成。

友情提示:个人认为这个暂时不便于用于我们自己的应用生产环境,原因如下,官方文档/官方SDK还有很多bug/不足;其次整个技术更新太快,还不稳定;最后就是目前太鸡肋~~~。当然,如果我们想我们的Claude客户端和我们本地知识库这里联合使用的话,还是可以的。

废话了一大篇。下面是我踩的坑。

环境准备

安装uv命令:pip install uv

初始化mcp---工程目录:uv init mcp_dir(这个mcp应该是自己MCP目标项目/工程所在所在目录名称)

执行完成以后会生成如下文件内容“quickstart_server.py”是我自己编写的server服务,不涵盖在内

进入到mcp目录:cd mcp_dir

- 将mcp[cli]添加到uv项目依赖中:uv add "mcp[cli]" --- 相当于使用pip下载,只不过这个是下载到你项目环境的“.venv”目录下 ---- 坑1,最好先使用pip下载,然后再将python环境指为pip,不然在这里很考验网速....

- 或者使用pip安装:pip install "mcp[cli]"

---- 关于mcp[cli]的坑,如果你使用的是pip安装,但是使用uv的时候,依然要使用本地的.venv包下面的依赖,比如“pydantic-core、pydantic、pygments“这三个,如果不存在那么要报错。反正如果要使用uv的话,那么它会默认使用项目本地的.venv环境依赖,必须执行 uv add mcp[cli]。

使用uv运行mcp命令:uv run mcp ---这个mcp应该是mcp服务名称固定的mcp

编写server.py文件

from mcp.server.fastmcp import FastMCP# Create an MCP server
#### 名字最好和文件名称保持一致,不然会报错...
# 网上很多博主都是搬来搬去的mcp = FastMCP("quickstart_server")  # 使用与代理匹配的端口@mcp.tool()
def add(a: int, b: int) -> int:"""Add two numbers"""return a + b@mcp.tool()
def multiply(a: int, b: int) -> int:"""两个数相乘"""return a * b
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:"""Get a personalized greeting"""return f"Hello, {name}!"

启动服务

使用Claude Desktop启动

mcp install quickstart_server.py

 自定义启动

mcp dev quickstart_server.py

启动成功后就可以访问:http://127.0.0.1:6274

完了以后点击界面的:Connect ---> Tools ---> List Tools 就可以看到我们自己定义的add、multiply这两个工具,点击工具就可以正常使用...

其余的Template、Source都是一样的。

异常处理

报错一:没有安装uv

注意,我们在使用uv的时候,需要好像默认会使用本地项目的.venv环境,而不会使用pip的????这是坑么?不清楚。反正执行了“uv add "mcp[cli]"”就好很多。

安装环境执行pip install uv .....

报错二:路径原因

不知道是哪儿配错了还是怎么,我是按照官方文档一步一步操作的,在这里默认的就是".\"开头的,但是当你真正点击“Connect”的时候,系统就会把“\”给去掉,最终的路径就变成了xxxx/.minixx.py文件,导致系统找不到,此时只需要把".\"去掉就行

相关文章:

  • MySQL-GROUP_CONCAT函数
  • WPS表格中设置折线图随数据列自动变化——存钱计划
  • 冲刺计划中的任务列表应该怎么写?
  • Linux驱动开发进阶(九)- SPI子系统BSP驱动
  • C# 程序结构||C# 基本语法
  • 类的生命周期
  • YOLOv2训练详细实践指南
  • C++开发中的DUMP文件:解决崩溃与性能问题的利器(全文字数2w+)
  • 时间序列:A TIME SERIES IS WORTH 64 WORDS: LONG-TERM FORECASTING WITH TRANSFORMERS
  • 【实战中提升自己】 防火墙篇之VPX部署–L2TP over IPSEC
  • CTF--eval
  • 控制反转(IoC)和依赖注入(DI)实现及常用注解
  • 怎样利用 macOS 自带功能快速进行批量重命名文件教程
  • 服务器内存规格详解
  • 饭店管理系统(下篇):程序打包为exe给用户使用
  • 2. kubernetes操作概览
  • Gradle相关配置文件的关系、作用及使用方式
  • 【时时三省】(C语言基础)选择结构程序设计习题1
  • Python异步编程入门:Async/Await实战详解
  • vector常用的接口和底层
  • 3月赴美外国游客数量加速下滑
  • 加快从数量增长向品质跃升转变,促进生态空间与城市功能有机共生!龚正调研公园城市建设工作
  • 疼痛管理“童”样重要,解读围术期疼痛管理
  • 大外交|习近平时隔9年访柬,专家:中柬铁杆友谊的地区意义日渐凸显
  • 江西南昌:千年银杏树倒伏,全力抢救进行时​
  • 专访|易彬谈《幻想底尽头:穆旦传》:首先是“幻想”,然后才是“尽头”