# MCPTest
**Repository Path**: NanGePlus/MCPTest
## Basic Information
- **Project Name**: MCPTest
- **Description**: MCP功能测试,编写LLM(支持OpenAI接口风格的大模型)应用程序调用MCP。MCP(模型上下文协议)是Claude开源的一种开放协议,可实现LLM应用程序与外部数据源和工具之间的无缝集成。
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 3
- **Created**: 2024-12-09
- **Last Updated**: 2025-04-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 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提供python虚拟环境,pycharm提供集成开发环境
**具体参考如下视频:**
【大模型应用开发-入门系列】03 集成开发环境搭建-开发前准备工作
https://youtu.be/KyfGduq5d7w
https://www.bilibili.com/video/BV1nvdpYCE33/
## 2.2 大模型LLM服务接口调用方案
(1)gpt大模型等国外大模型使用方案
国内无法直接访问,可以使用代理的方式,具体代理方案自己选择
这里推荐大家使用:https://nangeai.top/register?aff=Vxlp
(2)非gpt大模型方案 OneAPI方式或大模型厂商原生接口
(3)本地开源大模型方案(Ollama方式)
**具体参考如下视频:**
【大模型应用开发-入门系列】04 大模型LLM服务接口调用方案
https://youtu.be/mTrgVllUl7Y
https://www.bilibili.com/video/BV1BvduYKE75/
# 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文件
获取第一条链接中的内容并进行总结