LongCut logo

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...

Loading video analysis...