MCP终极指南 带你深入掌握MCP(进阶篇)
By 马克的技术工作坊
Summary
Topics Covered
- 协议仅定义函数注册与调用
- MCP协议与语言无关
- 装饰器自动生成工具描述
- MCP名字具有误导性
Full Transcript
我 几天
前 发布
了
MCP
中级
指南 的
基础 片
给 大家
讲解 了
MCP
的 原理
并 进行
了 一些
实战
今天
我们
继续
来讲
这个
系列 的
进阶 片
进阶 片
大致
分为
三个
部分
第一 ,
我会 带
大家
动手
自己 写
一个
MCP
Server
第二 ,
我会
截获
MCP
Server
的 输入
和 输出
并 逐行
分析 让
大家
彻底
明白
MCP
协议 是
如何
运作 的
在 第二
部分 的
结尾 我
甚至 会
给 大家
演示
如何 在
不 借助
MCP
Host
和
任何
编程语言
的
情况
下
根据
mcp
协议 的
规范
直接 与
mcp
server
沟通
第三
我们 会
在 掌握
了 协议
细节 的
基础 上
回头 再
想想
mcp
也 就是
模型
上下文
协议
到底 是
个 什么
意思 它
在 大
模型
相关 的
应用 中
到底
扮演 了
什么
角色
因为 是
进阶 片
所以
这个
视频
内容 有
一些
难度 你
最好 有
一定 的
编程
基础
不用 很
厉害 但
一定 要
有 否则
你 可能
很 难看
懂 另外
提 一点
这个
视频 会
用到
很多
基础 片
已经
提过 的
知识
内容
如果 你
还 没有
看过
基础 片
的话
建议
还是 看
完 基础
片 之后
再 来看
这个
进阶 片
除此之外
我 把
本 视频
涉及 到
的 代码
都 放到
了 这个
getup
仓库 中
方便
大家
自行
尝试 好
废话少说
那 我们
就 开始
吧 下面
我们 来
讲讲
如何
创建
自己 的
mcp
server
你 可以
使用
python
、
node
、
java
、
csharp
等 语言
或者 是
框架 来
实现
考虑 到
使用
人数 和
编程
难度
我们
这里
选择
python
来
给
大家
讲解
在 正式
开始 前
我 先
给 大家
打个
预防针
这个 是
讲
MCP
的 教学
视频
不是 讲
Python
的 所以
我 不会
特别
解释
各种
Python
内置
函数 的
使用
方法
另外
还有
一些
无关紧要
的 内容
比如说
HTTP
接口
输入输出
格式 的
转换 我
也 会
一带而过
如果 你
熟悉
Python
开发 那
很 好
这个
视频 很
适合 你
如果 你
不 熟悉
的话 你
可能 会
在 这个
过程 中
有些
焦虑
因为
有些
细节
不是
特别
明白
如果
出现 了
这个
情况 我
建议 你
分 清楚
次 你
要
搞清楚
你 不
懂 的
是
Python
还是
MCP
如果 是
前者 那
不 清楚
也
没关系
你 不是
来学
Python
的 你
是 来
学习
MCP
协议 的
你 只要
明白 了
MCP
协议 的
精髓 你
就 可以
使用
任何
辩程
语言 来
开发
MCP
server
而 这个
也 正是
我 想
通过
代码
传达 给
你 的
内容
实际上
你 后面
就 可以
看到
了解 了
MCP
的 本质
之后 你
甚至
可以 用
Bash
教 本来
写
MCP
serv
erMCP
协议 与
语言
无关 好
这里 说
的 有点
多 了
我们
现在 就
进入
正题
首先
我们 来
安装
Python
如果 你
是
macOS
用户
那么
恭喜 你
macOS
自带
Python
你 只
需要
保障
Python
的 版本
是 在
3.10
或者 是
以上 就
可以 了
如果 你
是
Wind
ows
用户 你
需要 到
Python
的
官方网站
进行
下载安装
安装 的
过程 很
简单 跟
安装
普通
软件 并
没有
什么
太大 的
区别
所以
大家
自己
处理
一下 我
这里 就
不 细说
了
除此之外
我们 还
需要
三样
东西
UV
这个 是
Python
的 包
管理器
VSCode
这个 是
写 代码
用 的
软件
Cline
这个 是
VSCode
的 一个
插件 这
三样
东西 在
我们
这个
系列 的
基础 片
里面 也
都 提到
过 这里
就 不再
重复 说
了 请
大家
自行
安装 好
下面
我们 就
来 正式
讲解 下
如何
编写 你
的
第一个
MCP
Server
为了
方便
大家
复制粘贴
代码 我
这里 就
使用
官方 的
例子
对应 的
页面
就是
这个 我
写 的
代码 与
官方
基本上
是 相同
的 只是
会 有
一些 小
改动
这些
改动 我
都 会
专门
说明
所以
不必
担心
首先
我们
打开
终端
使用
UVIn
itWe
ather
新建
一个
名为
Weat
her
的 项目
进入 到
项目
目录 里
再 执行
UVVenV
新建
一个
虚拟环境
新建
虚拟环境
是 为了
防止
我们
安装 的
各种
依赖
影响 到
系统
环境
然后
我们 再
执行
source
.
venv
bina
ctiv
ate
进入
到
虚拟环境
中
看到
前面 的
括号
weat
her
了 吗
这 就
表示
我们
已经
进入 到
weat
her
的
虚拟环境
里 了
然后
我们 再
执行
UVAd
dMCP
CLI
HTTPX
安装
开发
MCP
必备 的
依赖
其中
MCP
CLI
就
不用说
了
看上去
就是
开发
MCP
要用 的
核心
依赖
后面 的
HTDPX
是 给
我们
调用
HTDP
用 的
要 查询
天气
调用
HTDP
来
查询
是
一件
很
正常
的
事情
两个 E
-
Line
安装
完成 后
我们 用
VSCode
打开
Weat
her
这个
项目 录
新建
一个
叫做
Weat
her
. py
. py
的 文件
我们 的
主要
工作 就
在 这个
文件 中
完成
首先
我们
导入
必要 的
包 和
变量
这个 就
不用 多
说 了
导入
进来 的
对象
后面 都
是 要
用 的
然后
我们
要用
Fast
MCP
函数
这是
一个
能够
帮助
我们
快速
构建
MCP
服务器
的
函数
我们
传入
我们
正在
创建 的
这个
mcp
server
的 名称
它会 给
我们
返回
一个
对象
我们 把
这个
对象 启
名叫 做
mcp
后面
无论是
注册
to
还是
启动
这个
mcp
server
我们 都
会 用到
mcp
这个
对象
注意 我
这里 的
代码 与
官方
不同
官方 写
的 代码
中 没有
logl
evel
等于
error
这
一部分
这个 是
我 加上
去 的
我试 了
一下
如果 不
加
这部分
的话 你
做 的
mcp
server
很
有
可能
是
运行
不
起来
的 因为
默认
情况 下
程序 会
输出
各种
乱七八糟
的 日志
干扰
MCP
server
的 运行
然后
我们
导入
两个
常量
一个 是
美国
气象局
的 地址
我们 就
请求
这个
URL
来 拿
美国 的
天气
信息
第二个
是 我们
请求
数据 时
所用 的
标识
说白了
就是
告诉
美国
气象局
接口
我们
到底 是
谁
比如说
如果
我们 是
浏览器
请求
的话 那
这里 很
有 可能
就是
Chrome
相关
的
一些
信息
因为
我们 是
在
Weat
her
这个
MCP
server
里 调用
美国
气象局
这个
接口 的
所以
我们
写明
我们 是
Weat
her
App
版本号
1.0
然后
我们
引入
两个
后续 会
用到 的
函数
一个 是
Make
NWS
Requ
est
用于
请求
天气
数据 它
接受
一个
参数
就是
请求
天气
数据 时
所用 的
URL
然后 它
内部 就
使用
HTTP
库 调用
了 这个
指定 的
URL
返回 了
它 从
HTTP
那里
拿到
的
结果
除了
这个
函数
之外
我们 还
需要
导入
另外
一个
工具 类
函数
叫做
Format
Alerts
这个
函数
用于 对
告警
数据
做个
实话
之后
我们
引入
这个
MCP
server
中 的
第一个
Tool
叫做
Get
Alerts
它 用于
接收
美国
某个 州
的 天气
预警 它
的 参数
是 美国
的 州
代码
这个
函数 会
返回
预警
相关 的
一些
信息
这个
Tool
的 实现
很 简单
其实
就是
直接
调用 了
美国
气象局
的 接口
用 的
就是
我们
刚才
加入
进来 的
make
NWSR
equest
函数调用
完 之后
这个
函数 对
结果
简单 做
了 一下
检测
这里 是
确保
调用
没有
失败
这里 是
检查 下
我们
调用 的
地区
是否 不
存在
预警
信息
如果 不
存在 就
立即
返回
结果
最后 这
一部分
是 对
预警
信息 做
格式化
只 拿
借口
返回 中
我们
需要 的
那
一部分
写 完
了
第一个
图 我们
引入
第二个
第二个
图 叫做
getF
orec
ast
这个
图子
参数 是
Lent
itude
和
Long
itude
分别 是
纬度 和
精度
同样
你别 看
他 写
了 那么
一大堆
其实 也
就 干
了 跟
Get
Alerts
类似 的
事情 他
也 调用
了 美国
气象局
的 借口
不过 他
调用 了
两次
第一次
是 为了
获取 到
对应 的
天气
预告
办公室
的 信息
因为
美国
很大
所以
不同
地区 的
天气
预告 由
不同 的
天气
预告
办公室
负责
所以
我们 要
先 获取
到 对应
的 天气
预告
办公室
这个
信息 就
放在
Point
Data
里面
拿到 了
这个
信息 后
我们
从中
提取 出
对应
天气
预告 的
URL
放到
fore
cast
URL
这个
变量
里面
然后 再
拿 着
这个
fore
cast
URL
再次
请求
美国
气象局
这 之后
呢 才
算是
真正
拿到 了
天气
预告
这个
天气
预告 就
放在
fore
cast
Data
里面 在
后面 这
一对 啊
就是 对
天气
预告
信息 做
格式化
并且
返回 写
好 了
这 两个
函数
之后
我们 再
回头
看看
它们 不
知道
大家
有没有
注意 到
这 两个
函数 的
头上 都
有 一个
装饰 器
这个
装饰 器
的 用途
是 把
函数
注册 为
to
它会 从
函数 的
注释
里面
提取
这个
函数 的
用途
以及
每个
参数 的
含义
以便
模型
决定
定用
这个
函数 的
最佳时机
比如
getA
lerts
这个
函数 它
提取 的
内容 就
包括
如下
几点
第一
函数
名是
getA
lerts
第二
参数 是
state
类型
是
字符串
第三
这个
函数
的
功能
第四 ,
每个
参数 的
功能 。
这些
提取 的
内容
最终 都
会 转换
为
Tool
的 信息
并
在 实际
电用 的
时候
传给
模型 ,
以便
帮助
模型 做
决策 。
最后 ,
我们
加上
这些
代码 ,
以便
程序
启动 的
时候
能够
运行
这个
MCP
Server
。 对于
。 对于
最后
加入 的
这 几行
代码 ,
我们
需要
注意 的
只有 这
里面 的
Tran
sport
。 这里
。 这里
的
Tran
sport
值 是
stdio
。
表示
mcp
server
与
client
的 沟通
方式 是
mcp
server
的 输入
和 输出
据 我
观察
目前
市面上
大部分
的
mcp
server
用 的
都 是
这种
方式
如果 你
不 知道
使用
输入 和
输出
沟通
具体 是
个 什么
意思 我
建议 你
暂时 先
不要
纠结
我们
后面 会
截获
mcp
server
的
输入输出
并 对
mcp
协议 做
一个
分析
那个
时候
我会
详细
解释
到时候
你 应该
就 明白
了 到
这里
我们 的
mcp
server
就算
是
写
完
了
剩下 的
工作
就是 把
它 注册
到
client
里面 这
一步
我们 在
基础 片
里面
已经
做过
一次 了
我 再
给 大家
演示
一下
首先
点击
侧边 栏
里面 的
client
再 点击
这个
图标
打开
mcp
server
page
再 点击
inst
alled
然后 再
点击
conf
igure
mcp
serv
ers
然后
输入
我们
mcp
server
的 启动
方式
这个
page
很 好
理解
其实
就是 用
uv 来
启动
weat
her
. py
. py
也
就是
我们
刚才
写
的
文件 这
里面 有
一个 -
dire
ctory
就是
告诉
UV
我们 的
项目
目录 在
这里
如果 要
用到
什么
外部
依赖
或者 是
虚拟环境
配置
的话 就
在 这个
项目 录
里面 找
大家
注意
这个
目录 要
改成 你
自己 的
用 我
的 大
概率 是
行不通
的 然后
我们
保存
文件
注意
左边 在
保存
完成 的
时候
Client
就 会
帮助
我们
注册 好
这个
MCP
server
我们
现在 就
可以
使用 它
了 我们
新建
一个
对话
输入
我们 的
问题
纽约
明天 的
天气
怎么样
可以
发现
模型
找到 了
我们 的
MCP
server
并且
发现
其中 的
Gap
Fore
cast
Tool
是 可以
解决
这个
问题 的
我们
点击
Appr
ove
同意 它
调用
模型
应该 是
拿到 了
Gap
Fore
cast
的 调用
结果
并且 把
它 整理
成 了
答案
返回 给
了 我们
这 说明
我们 写
的
MCP
server
是
没有
问题
的
我们
自己
动手
创建 了
一个
MCP
server
不过 我
相信
还是 有
很多 人
不 理解
MCP
这个
协议
到底 是
如何
运作 的
因为
虽然
这个
MCP
server
是 我们
自己 写
的 但是
我们
其实 是
使用 了
MCP
的 酷来
完成 它
的 这个
酷 帮助
我们 做
了 很多
事情
我们 并
不 太
清楚 它
到底 做
了 什么
那 怎么
才能
知道 呢
首先
大家
需要
理解 的
是
大部分
的
MCP
server
都 是
通过
输入 和
输出 与
Client
沟通
的
如果
这个
mcp
server
是 在
我们
终端
里面
启动 的
那 我们
就 可以
直接
看到 它
的 输入
和 输出
不过
现在
麻烦 的
是 这个
mcp
server
是
client
启动 的
它 的
输入 和
输出
只有
client
才能
看到
我们 是
看不到
的 这
怎么办
呢 我
的 想法
是 我们
来 写
一个
脚本
我们
暂且 把
这个
脚本 的
名称
叫做
mcpl
ogger
. py
. py
这个
脚本 的
参数
就是
用于
启动
我们
这个
mcp
server
的 命令
比如 用
我们
刚才 的
weat
her
举例
它 原来
是 用
这个
命令 来
启动 的
前面
加上
pyth
onmc
plog
. py
. py
就是
我们 新
的 启动
命令
mcplog
. py
. py
的 功能
是 截取
后面 这
一部分
程序 的
输入 和
输出 也
就是
mcps
erver
的 输入
和 输出
我们 再
来 看看
这个
mcps
erver
与
client
的 交互
图 并
把
mcplog
. py
. py
加入 到
这个
流程
里面
我们 让
client
与
mcplog
. py
. py
沟通 再
让
mcplog
. py
. py
与 真正
的
mcps
erver
沟通
mcpl
ogger
. py
. py
在 其中
只 充当
中间人
的 角色
它 在
中间 插
了 一层
作用
就是
获取 到
client
与
mcps
erver
的 输入
和 输出
并且 把
它们
写入 到
一个
外部 的
文件
里面
这样
我们
查阅
文件
内容 就
可以
知道
client
具体 是
怎么 跟
mcps
erver
沟通 的
了 好
方案 有
了 我们
去
哪里找
mcpl
ogger
. py
. py
现在
大
模型
写
代码
这么
强 所以
我 直接
让
Gemini
2.5
Pro
给 我
写 了
一个
就是
这个
文件 了
我
试了试
啊 跑
的 还
算 不错
我 也
来 给
你 演示
一下 它
的 用法
我们 再
回到
Client
这里 跟
之前
一样
找到
MCP
Server
的 配置
然后 呢
我们 把
启动
参数 来
改 一下
把 这
里面 的
UV
挪到
下面 去
Comm
and
改成
Python
然后
参数 中
再 加上
我们 的
mcplog
. py
. py
的 路径
保存
这个
时候
Client
就 已经
跟 我们
的
mcps
erver
有 一些
交互 了
那
输入输出
呢
输入输出
是 写
到 了
mcpio
.
log
文件 里
这个
文件 与
mcplog
. py
. py
同处
一个
目录 中
大家
可以
发现 它
的 每
一行
输入输出
都 很长
我们 来
给 它
做 个
自动
换行
关于
这个
日志
内容 有
一点 要
注意
每行 最
前面 的
输入 和
输出
以及
后面 的
冒号 是
mcplog
. py
. py
这个
脚本 加
的 不
属于
client
与
mcps
erver
的 交互
内容
他们 的
交互
内容
就是
后面 的
JSON
这里
标示出
输入 和
输出 是
为了
方便
大家
查看
数据流
向 输入
的 是
client
到
mcps
erver
发送 的
数据 而
输出 的
是
mcps
erver
向
client
发送 的
数据
首先
我们 看
一下
第一行
的 输入
这个 是
client
发给
我们 的
mcps
erver
的
相当于
Kline
向 我们
的
MCP
server
打了个
招呼
告诉 他
你好 呀
我 是
Kline
我 的
软件
版本 是
3.12
. 3
. 3
我用 的
MCP
协议
版本 是
2024
年 11
月 5
号 出品
的 人家
都
打招呼
了 我们
的
MCP
server
也 不能
干 做
着 呀
所以 呢
他 就
回复 了
你好 呀
我 用
的 协议
版本 跟
你 一样
呢 也
是
2024
年 11
月 5
号 的
协议
另外 我
有 这些
能力 不
支持 你
要 记好
对 了
我 叫
Weat
her
版本号
是
1.6
. 0
. 0
很 高兴
认识 你
第三号
是
Client
发给
我们
MCP
server
的 大意
就是
收到
随后
Client
就 又
发 了
一个
消息
过来 他
想要
知道
我们 的
MCP
server
里面
包含 了
哪些
tool
我们 的
MCP
server
的 回复
是 这样
的 这段
很长
为了
方便
大家
观看
我来
格式化
一下
格式化
之后 是
这个
样子
可以
看出
里面 有
两个
tool
一个 是
叫做
geta
lerts
另外
一个 是
叫做
get
fore
cast
这 两个
tool
的 定义
遵循 的
是 同
一套
格式
因为
我们
最终 是
用
get
fore
cast
来 预测
纽约
明天 的
天气 的
所以
我们 以
它 为例
着重 看
一下
get
fore
cast
的 功能
是 获取
某个
地区 的
天气
预告
并且 把
每个
参数 的
含义 也
都 给
了 出来
有没有
觉得
这段 很
熟悉 呢
对 这
就是
我们
函数
里面 的
注释
实际上
在
python
领域
里面 这
叫做
dogs
tream
它
是
一种
特殊
的
注释
不过
考虑 到
教程 的
通用性
我们
还是
沿用
注释
这个 词
还 记得
我们 在
函数
上面 加
了
smcp
. to
. to
这个
装饰 器
了 吗
对 它
就 会
提取 出
函数 的
注释
并且 把
它 放在
这 里面
的
desc
ript
ion
字段 里
作为
to 的
描述
这样
模型 就
可以 从
desc
ript
ion
中 了解
到 to
的 用途
方便
到时候
选择 与
用户
问题 最
匹配 的
to 再
看看
下面 的
input
schema
我们
要
不先来
猜猜
它
是
什么
意思 它
看起来
好像 是
定义 了
两个
参数
一个 是
叫做
Lati
tude
也 就是
纬度
类型 是
Number
另外
一个 是
叫做
Long
itude
也 就是
精度
类型 也
是
Number
这 里面
还有
一个
Requ
ired
好像 是
在 说
这 两个
属性 都
必须 要
存在
没错 猜
的
八九不离十
了
Input
schema
遵循 的
是 一个
叫做
JSON
schema
的 规范
不过
JSON
schema
是 什么
东西 跟
JSON
是 什么
关系
实际上
JSON
schema
本身
就是
一段
JSON
只不过
JSON
有个
特殊
的
功能
它 可以
用来
描述
另外
一个
JSON
的 结构
比如
我们
现在
正在
讨论 的
这个
Inpu
tSch
ema
它 描述
的
JSON
是 这
样子 的
它 有
两个
属性
一个 是
Lati
tude
一个 是
Long
itude
它们 的
类型 都
是
Number
而且 这
两个
属性 都
得 存在
缺一不可
符合
这个
格式
要求 的
JSON
有 很多
比如
这个
JSON
就是
符合
定义 的
另外
这个
JSON
也 符合
定义
因此 这
里面 的
Inpu
tSch
ema
就是
用来
给出
To
的
入餐
规范
的
大家
知道
模型
不仅 要
选择 与
用户
问题 最
匹配 的
tool
还要 从
用户 的
问题
里面 把
tool
的 参数
提取
出来
而且
这个
参数
必须 要
符合
这个
input
schema
的 规定
这样
后面 才
能够
成功
调用
tool
背后 的
函数
另外
值得 提
的 一点
是 这个
input
schema
也 是
addmcp
.
tool
这个
装饰 器
从 我们
的 参数
里面
提取
出来 的
它 是
根据
我们 的
参数
定义 来
生成
这个
input
schema
的
好 我们
回来
继续 看
我们
mcp
server
的 输入
和 输出
前面
我们 聊
了 这
一部分
的 内容
我们 来
继续 看
一下
后面 的
部分 这
一部分
是
client
在 询问
mcp
server
有没有
资源 和
资源
模板
可以 用
可以
看到 这
里面 的
reso
urces
和
reso
urce
temp
lates
的 结果
都 是
空 列表
也就是说
mcp
server
的 回答
是 都
没有
reso
urce
的 中文
就是
资源
reso
urce
temp
lates
你
可以
理解
为
是
一个
动态
的
资源
资源
就是
一个
文件
一个
报告
之类 的
东西
我们 的
MCP
server
不 设计
就 不细
讲 了
感兴趣
的 同学
可以
自己
去查
一下
Client
到 此时
Modi
就 结束
了 他
就 闭嘴
了 这
一切 都
发生 在
我们
注册
工具 的
一瞬间
后面
就是 要
等待
合适 的
时机 再
使用
这个
MCP
server
了 然后
我们
打开
一个 新
的 对话
再 问
一下
之前 的
问题
纽约
明天 的
天气
怎么样
好 可以
看出
Client
找到 了
对应 的
2 我们
允许 它
执行
这个 是
执行
结果 它
从 执行
结果
里面
抽取 了
纽约
明天 的
天气
最后
展示 了
出来
这个
对话 就
到此结束
了 我们
再 回到
日志
这里
看看
发生 了
什么 我
把
滚动条
往下 拖
一拖 只
看 新增
的 部分
首先
然后
我们 举
了 这
两个
符合要求
的 例子
请 大家
记住 这
两个
参数 的
样子
我们 再
回头 看
一下
实际 的
参数
结构 这
里面
实际
拿到 的
to
参数 也
是 符合
之前 说
的 这个
规范 的
看来
input
schema
不是 白
定义 的
模型
提取
参数 的
时候 呢
就 会
遵守
这个
input
schema
的 规范
拿到
请求
之后
我们 的
mcp
server
就 会
去 执行
对应 的
函数
然后
输出
结果
对应 的
也 就是
第二段
的 输出
内容 这
一段 的
核心
就是
里面 的
text
字段
的
值
不过
我们
很难
一眼
看清楚
它 里面
写 了
些 什么
因为 它
里面 的
换行
服都 被
换成 了
- n
不太好
看 我
来 给
你
格式化
一下
格式化
之后 是
这个
样子 的
可以
看出 它
是 返回
了 未来
几天 的
天气
包括
今晚 的
星期五
的
星期五
晚上 的
星期六
和
星期六
晚上 的
这些 都
是 我们
之前 写
的 那个
get
fore
cast
函数
返回 的
结果
Client
拿到 了
2 的
执行
结果
之后 它
与
mcp
server
的 交互
就算 是
结束 了
所以
我们 的
日志
文件 到
这里 也
算是
结束 了
之后
Client
就 会
把 结果
发给
模型 让
模型 去
总结
我们
最后
看到 的
就是
模型
总结 的
结果
我们 再
回头
看看
Client
这边
其实
每次
To 的
请求
参数 和
请求
结果 都
可以 在
这 里面
找到 跟
我们 在
日志
里面
看到 的
是 一样
的 刚才
我们
深挖 了
MCP
协议 的
底层
细节
明派 了
细节
之后 你
甚至 都
不 需要
一个
MCPh
ost
就 可以
直接 与
MCP
Server
沟通
你 只
需要
保证 你
发给
mcp
server
的 数据
符合
这个
格式 就
行为 了
让 大家
更 透彻
的 理解
mcp
协议
我来 给
大家
演示
一下
如何
直接 与
mcp
server
沟通 不
经过
我们 的
client
首先
我们 在
终端
里面
运行
mcp
server
我们 用
的 命令
就是
mcp
server
里面
的
配置
的
这些
内容 跟
它 是
一模一样
的 就
是从
UV
开始 到
weat
her
. py
. py
结束
前面 的
mcpl
ogger
. py
. py
是 我们
用来
记录 它
的
输入输出
日志 的
我们
现在 不
需要
记录
所以 就
不 需要
加它 了
现在
我们 先
跟 它
来
打个招呼
我们
可以
直接
使用 这
里面
第一行
的 输入
我们
可以 把
我们
自己 的
名字 改
一下
比如说
我们 不
叫
clime
我们
叫做
马克
的
技术
工作坊
版本号
是
1.0
.
0 然后
我们
复制 这
一行 到
这 里面
粘贴 你
看
mcp
server
是不是
回复 了
呢 他
也 给
我们
打了个
招呼 跟
日志
里面 的
格式 是
一样 的
接着
我们 来
给 他
发送 个
消息
告诉 他
我 已经
收到 了
他 的
消息
可以
开始
工作 了
他 是
不会
回复
这个
消息 的
这 跟
日志
里面 的
表现 也
是 一样
的 然后
我们
请求
一下
工具
列表
复制 的
是 这
一行 的
内容 到
这里
粘贴 你
看 他
是不是
也 把
工具
列表 给
我们 了
那 调用
一下
工具 呢
我们 来
复制 这
一行 这
一行
原来
就是
用来
调用
工具 的
你 看
他 把
工具 的
调用
结果 呢
也 给
到 我们
了 所以
呢 调用
工具 也
是 没有
问题 的
因此 你
看 啊
我们
可以
直接 跟
他 交互
不 需要
mcph
ost
也 是
可以 的
或者说
在 这种
情况 下
我们
自己
就是
mcph
ost
到 这里
啊 我
相信 你
已经
完全
了解
mcp
协议
了
你 甚至
不 需要
调用
MCP
库 也
可以
开发
一个
MCP
server
了 你
只 需要
保证 你
的
MCP
server
符合
MCP
的 这个
规范 就
可以 了
当然
自己
写会
麻烦
一些
不如
调用
MCP
的 库
简单
相信
大家
现在 对
MCP
的 细节
都 有
一个
非常
清楚 的
认识 了
我们 再
拿出 我
在 基础
片 里面
画 的
交互
流程 再
仔细
看看
是不是
很 熟悉
呢
Client
先 跟
MCP
server
打招呼
MCP
server
做
了
自我介绍
Client
询问
MCP
server
它 有
哪些
toMCP
server
说 它
有
getf
orec
ast
和
geta
lert
后来
经过 了
一系列
流程
之后
Client
向
MCP
server
请求
调用
工具
MCP
server
调用
完后 就
把 结果
发给 了
Client
这些 都
是 我们
之前 在
日志
里面
看到 的
内容 这
一部分
的 每
一个
交互 都
可以 在
我们
日志
里面
找到 那
有人
可能 会
问
为什么
我 没有
在
MCP
日志
里面
看到
模型 的
影子
模型 是
怎么
使用
MCP
协议
的
这
是
个
非常
好
的
问题
如果 你
去 翻
别的
教学
视频
他们
基本上
不会 去
谈论 这
一点
但是
为了
能够 让
你 彻底
明白
MCP
协议 的
本质 我
这里 会
着重
说明
MCP
协议
规定 的
内容 仅
先于
这个
环节 的
交互 你
可以
看出 这
一部分
与 模型
并 没有
什么
关系
如果 你
仔细分析
一下
的话 你
就 会
发现
MCP
协议
主要 是
规定 了
两 部分
的 内容
一 每
一个
MCP
server
有
哪些
函数
可以
用
二
如何
调用
这些
函数
当然
有些
MCP
server
内部
还有
资源
可以
使用
这个
我们
暂时
忽略 掉
这两点
可以
总结 为
函数 的
注册 与
使用 对
你 可以
看出 这
里面
确实 是
没有
模型
什么 事
MCP
协议
规定 的
是 如何
发现 和
调用函数
的 这套
协议
脱离 大
模型 也
是 能够
用 的
只不过
没有 人
这么 用
而已
MCP
协议
本身 并
没有
规定 与
模型 的
交互方式
回到
我们
这个 图
里面 这
也就是说
MCP
协议 并
没有
规定 这
一部分
要 如何
处理
实际上
不同 的
MCP
host
与 模型
的 交互
确实 是
会 有
很大 的
差异
比如说
Client
是 用
XML
与 模型
沟通 的
而
Cherry
Studio
是 用
Func
tion
Call
ing
的 格式
与 模型
沟通 的
Func
tion
Call
ing
是
OpenAI
提出 的
一套
协议
用来
规定
模型 是
如何
调用函数
的 总之
MCP
协议 并
没有
规定
如何 与
模型
进行
交互 我
再 重复
一遍
MCP
协议 并
没有
规定
如何 与
模型
进行
交互 这
一点 很
重要
明白 了
这 一点
你 就
明白 了
MCP
协议 的
本质
我们 再
回头
看看
MCP
这个
名字
模型
上下文
协议
什么 是
模型
上下文
上下文
就是
环境 那
什么 是
环境
环境
就是
周围 有
哪些
函数
可以
用来
调用
从而
获取 到
外界 的
信息
比如
获取
天气
信息网络
信息
文件
信息
等等
MCP
就是 让
模型
感知
外部环境
的 一个
协议
所以 它
叫做
模型
上下文
协议
这个
名字
合适 吗
说实话
我 个人
觉得
这个
名字
起得
不太好
首先 它
有 一定
的
误导性
很 容易
就让 人
以为
这个
协议
规定 的
是 模型
交互 的
内容 但
实际上
我们 最
多 只能
说 这个
协议 是
给 模型
服务 的
再者
这个
名字 太
过于
玄妙
乍一看
都 不
知道 是
什么
意思 我
不 知道
是不是
创造
MCP
的 人
故意 想
把 这个
名字
起得
这么
高大 上
好 让
别人
以为
这个
东西
确实 是
很 高端
大家 也
都 看到
了
MCP
领域 的
各个
专业名词
都 蒙着
一层 雾
不 打开
了 揉碎
了 你
都 不
知道 是
怎么回事
我 做
教学
视频 的
时候 也
很 小心
每次 都
是 一个
概念
一个
概念 的
解释
一下子全部
都
扔出来
谁 都
会发 懵
当然 我
相信 你
到 这里
就 彻底
明白 了
到 这里
为止
我们 的
MCP
进阶
教程
就
告一段落
了
相信
大家 对
MCP
都 有
了 非常
清晰 而
具体 的
理解
不过
有些
小伙伴
可能 还
想 知道
模型 是
如何 与
我们 的
MCPh
ost
交互 的
也 就是
这
一部分
的 内容
我们
之前 说
过 这
一部分
与
MCP
协议
无关 那
他们
到底 是
如何
通信 的
呢 如果
你 对
这个
话题
感兴趣
欢迎 在
评论 区
留言
我会
根据
大家 的
兴趣 和
反馈 来
决定
是否
制作 这
一部分
的 内容
今天 的
视频 就
到此结束
了
别忘了
点赞
关注
我们
下次
再见
拜拜
Loading video analysis...