Skip to content

MCP功能测试,编写LLM(支持OpenAI接口风格的大模型)应用程序调用MCP。MCP(模型上下文协议)是Claude开源的一种开放协议,可实现LLM应用程序与外部数据源和工具之间的无缝集成。

Notifications You must be signed in to change notification settings

CIP-GitHub-Dev7/MCPTest

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1、项目介绍

1.1、主要内容

本期系列相关视频如下,按照发布的先后顺序:
(第一期)[2024.12.10]Claude重大突破!发布MCP(模型上下文协议),带你在LLM应用程序脚本中感受它,无需使用Claude Desktop桌面软件,支持类OpenAI风格大模型
主要内容:MCP介绍、MCP功能测试,LLM(支持OpenAI接口风格的大模型)应用程序调用MCP
https://www.bilibili.com/video/BV1HBquYbE7t/
https://youtu.be/Jmo7rgb_OXQ
(第二期)[2024.12.12]Claude MCP应用Text2SQL用例,带你在LLM应用程序中感受它的丝滑,无需使用Claude Desktop桌面软件,支持类OpenAI风格大模型
主要内容:使用MCP实现LLM应用程序Text2SQL功能操纵MySQL数据库
https://www.bilibili.com/video/BV1ELq4YME8T/
https://youtu.be/yaLAqEMz45A
(第三期)[2024.12.12]Claude MCP应用客户端同时访问和调用多个服务器资源和工具,无需使用Claude Desktop桌面软件,支持类OpenAI风格大模型
主要内容:MCP客户端同时访问多个MCP服务器,支持文件系统操作和Text2SQL功能操纵MySQL数据库
https://www.bilibili.com/video/BV1oNqaYJEUy/
https://youtu.be/tG-ZjOgrcSA
(第四期)[2024.12.23]DuckDuckGo在线搜索、Fetch内容提取MCP服务器,访问和调用多个服务器资源和工具,支持阿里通义千问大模型、GPT大模型、Ollama本地开源大模型
主要内容:MCP客户端同时访问多个MCP服务器,支持文件系统操作、Text2SQL功能操纵MySQL数据库、在线搜索(DuckDuckGo搜索引擎)和网页内容提取
https://www.bilibili.com/video/BV1SckXY3E6S/
https://youtu.be/9pzS9saNcGA

1.2 MCP介绍

MCP(模型上下文协议)是Claude开源的一种开放协议,可实现LLM应用程序与外部数据源和工具之间的无缝集成
该架构非常简单:开发人员可以通过MCP服务器公开数据,也可以构建连接到这些服务器的AI应用程序(MCP客户端)
目前MCP还算是一个测试版,一个本地的服务,运行在你自己的电脑上的
MCP官方简介:https://www.anthropic.com/news/model-context-protocol
MCP文档手册:https://modelcontextprotocol.io/introduction
MCP官方服务器列表:https://github.com/modelcontextprotocol/servers
PythonSDK的github地址:https://github.com/modelcontextprotocol/python-sdk

(1)PythonSDK版本

截止当前(12.9),当前的稳定版本为1.1.0

(2)MCP工作原理

MCP遵循客户端-服务器架构(client-server),其中主机应用程序可以连接到多个服务器

MCP主机(MCP Host): 是发起连接的LLM应用程序(Claude Desktop、IDE或AI应用等)
MCP客户端(MCP Client): 在主机应用程序内部与服务器保持1:1连接
MCP服务器(MCP Servers): 服务器向客户端提供上下文、工具和提示词(context, tools, and prompts)

(3)核心组件

Protocol layer 协议层
协议层处理消息帧、请求/响应链接和高级通信模式。关键类:Protocol、Client、Server
Transport layer 传输层
传输层处理客户端和服务器之间的实际通信
Stdio(standard input/output):使用标准输入/输出进行通信
SSE(Server-Sent Events):使用服务器发送的事件来发送服务器到客户端的消息
所有传输都使用JSON-RPC2.0 来交换消息
Message types 消息类型
Requests:请求期望来自另一方的响应
Notifications:通知是一种不期望响应的单向消息
Results:结果是对请求的成功响应
Errors:错误表明请求失败

(4)连接生命周期

Initialization 初始化

客户端发送带有协议版本和功能的initialize请求
服务器响应其协议版本和功能
客户端发送initialized通知作为确认
正常消息交换开始
Message exchange 消息交换
初始化后,支持以下模式:
请求-响应(Request-Response):客户端或服务器发送请求,对方响应
通知(Notifications):任何一方发送单向消息
Termination 终止
定义了这些标准错误代码:
ParseError = -32700
InvalidRequest = -32600
MethodNotFound = -32601
InvalidParams = -32602
InternalError = -32603

(5)核心功能

Resources 资源
资源是模型上下文协议 (MCP) 中的核心功能,允许服务器公开可供客户端读取并用作LLM交互上下文的数据和内容
File contents 文件内容
Database records 数据库记录
API responses API 响应
Live system data 实时系统数据
Screenshots and images 屏幕截图和图像
Log files 日志文件
And more 还有更多
每个资源都由唯一的 URI 标识,并且可以包含文本或二进制数据
Prompts 提示
服务器能够定义可重用的提示模板和工作流程,客户端可以轻松地向用户和LLMs展示这些模板和工作流程。它们提供了一种强大的方法来标准化和共享常见的LLM交互
接受动态参数
包括资源中的上下文
指导具体工作流程
Tools 工具
工具是MCP中的强大功能,工具被设计为LLMs控制的,这意味着工具从服务器公开给客户端,目的是让LLMs能够自动调用它们(有人在循环中授予批准)
工具的关键方面包括:
发现(Discovery):客户端可以通过tools/list端点列出可用的工具
调用(Invocation):使用tools/call端点调用工具,服务器在其中执行请求的操作并返回结果
灵活性(Flexibility):工具范围从简单的计算到复杂的API交互
Sampling 采样
采样是一项强大的MCP功能,允许服务器通过客户端请求LLM完成,从而在保持安全和隐私的同时实现复杂的代理行为
服务器向客户端发送sampling/createMessage请求
客户端审查请求并可以修改它
LLM采样的客户端样本
客户端审核完成情况
客户端将结果返回给服务器
这种人机交互设计可确保用户保持对LLM所看到和生成的内容的控制
Transports 传输
MCP的传输为客户端和服务器之间的通信提供了基础。传输处理消息发送和接收的底层机制
MCP使用JSON-RPC 2.0作为其格式。传输层负责将MCP协议消息转换为JSON-RPC格式进行传输,并将接收到的JSON-RPC消息转换回MCP协议消息

2、前期准备工作

2.1 开发环境搭建:anaconda、pycharm

anaconda:提供python虚拟环境,官网下载对应系统版本的安装包安装即可
pycharm:提供集成开发环境,官网下载社区版本安装包安装即可
可参考如下视频:
集成开发环境搭建Anaconda+PyCharm
https://www.bilibili.com/video/BV1q9HxeEEtT/?vd_source=30acb5331e4f5739ebbad50f7cc6b949
https://youtu.be/myVgyitFzrA

2.2 大模型相关配置

(1)GPT大模型使用方案(第三方代理方式)
(2)非GPT大模型(阿里通义千问、讯飞星火、智谱等大模型)使用方案(OneAPI方式)
(3)本地开源大模型使用方案(Ollama方式)
可参考如下视频:
提供一种LLM集成解决方案,一份代码支持快速同时支持gpt大模型、国产大模型(通义千问、文心一言、百度千帆、讯飞星火等)、本地开源大模型(Ollama)
https://www.bilibili.com/video/BV12PCmYZEDt/?vd_source=30acb5331e4f5739ebbad50f7cc6b949
https://youtu.be/CgZsdK43tcY

3、项目初始化

3.1 下载源码

GitHub或Gitee中下载工程文件到本地,下载地址如下:
https://github.com/NanGePlus/MCPTest
https://gitee.com/NanGePlus/MCPTest

3.2 构建项目

使用pycharm构建一个项目,为项目配置虚拟python环境
项目名称:MCPTest
虚拟环境名称保持与项目名称一致

3.3 将相关代码拷贝到项目工程中

将下载的代码文件夹中的文件全部拷贝到新建的项目根目录下

3.4 安装项目依赖

新建命令行终端,在终端中运行 pip install -r requirements.txt 安装依赖
注意: 建议先使用要求的对应版本进行本项目测试,避免因版本升级造成的代码不兼容。测试通过后,可进行升级测试

4、功能测试

4.1 (第一期)[2024.12.10]测试步骤

核心演示示例介绍:Filesystem 使用官方提供的文件操作MCP服务器
描述: 提供文件系统操作功能,包括读写文件、目录管理和文件搜索
资源: file://system 文件系统资源URI
工具: read_file, write_file, create_directory, list_directory, move_file, search_files, get_file_info
read_file:读取文件内容,参数:path (文件路径)
read_multiple_files:读取多个文件内容,参数:paths (文件路径数组)
write_file:创建或覆写文件,参数: path (文件路径), content (文件内容)
create_directory:创建目录,参数: path (目录路径)
list_directory:列出目录内容,参数: path (目录路径)
move_file:移动/重命名文件,参数: source (源路径), destination (目标路径)
search_files:递归搜索文件,参数: path (起始路径), pattern (搜索模式)
get_file_info:获取文件元数据,参数: path (文件路径)
对应的链接:https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem
代码目录
脚本放置在nangeAGICode/basic、filesystem_basic、filesystem_chat目录内,运行对应脚本进行测试
测试内容:
我当前可以访问哪个文件夹
帮我创建一个test文件夹
帮我在test文件夹下创建一个文件test1.txt,内容为:南哥AGI研习社。
把test1.txt中的内容agi改大写AGI。

4.2 (第二期)[2024.12.12]测试步骤

核心演示示例介绍:Text2SQL 自定义操纵MySQL数据库的MCP服务器
描述: 提供Text2SQL功能操纵MySQL数据库
资源: mysql://{table[0]}/data 数据库表资源URI
工具描述: execute_sql
execute_sql: 运行SQL脚本,参数:query (SQL语句)
代码目录
脚本放置在nangeAGICode/mysql_chat目录内,运行对应脚本进行测试
提供LLM对MySQL数据库操作功能,增、删、改、查
测试内容:
(1)列举可用资源
当前可以访问哪些数据表
(2)获取某资源内容
获取nange_agi这个表的内容
(3)列举可用的工具
当前可以使用哪些工具
(4)查询
调用工具获取nange_agi这个表的内容
(5)增加
随机帮我增加一条数据
调用工具获取nange_agi这个表的内容
(6)修改
新增的那条数据把名称改为test
调用工具获取nange_agi这个表的内容
(7)删除
把刚新建的那条数据删除
调用工具获取nange_agi这个表的内容
(8)统计数据量
这张表中一共几条数据

4.3 (第三期)[2024.12.12]测试步骤

核心演示示例介绍:MCP客户端访问多个MCP服务器
描述: 结合前面两期的内容,对Filesystem和Text2SQL服务器进行融合使用
代码目录
脚本放置在nangeAGICode/mysql_filesystem_chat目录内,运行对应脚本进行测试
测试内容:
当前可以访问哪些资源
当前可以访问哪些表
当前可以使用哪些工具
创建一个test文件夹
在test文件夹下创建一个文件test1.txt,内容为:用户名:NanGe003,密码:6543217890,内容:南哥AGI研习社++。
获取nange_agi这个表的内容
增加一条数据,数据内容为刚刚创建的test1.txt中的内容
获取nange_agi这个表的内容
这张表中一共几条数据
新增的那条数据把名称改为test
获取nange_agi这个表的内容
把刚新建的那条数据删除
获取nange_agi这个表的内容

4.4 (第四期)[2024.12.23]测试步骤

核心演示示例介绍:在线搜索及获取链接内容 自定义在线搜索DuckDuckGo的MCP服务器及官方fetch MCP服务器
描述: 提供在线搜索,并提前搜索结果中有关网页链接内容的提取和总结
工具描述: duckduckgo_web_search、fetch
duckduckgo_web_search: 执行在线搜索,参数:query(搜索关键词);参数:max_results(最大返回内容数量)
fetch:从互联网获取 URL 并将其内容提取为markdown,参数:url(链接地址);参数:max_length(返回的最大字符数,默认值:5000);raw(获取原始内容而不进行Markdown转换,默认:false)
代码目录
脚本放置在nangeAGICode/search_mysql_filesystem_chat目录内,运行对应脚本进行测试
测试内容:
当前可以访问哪些资源
当前可以使用哪些工具
搜索2024年有关AI的最新进展,内容要以中文输出,列出10条,且需要带上相关的链接
将这些内容写入到test.txt文件
获取第一条链接中的内容并进行总结

About

MCP功能测试,编写LLM(支持OpenAI接口风格的大模型)应用程序调用MCP。MCP(模型上下文协议)是Claude开源的一种开放协议,可实现LLM应用程序与外部数据源和工具之间的无缝集成。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%