一文讲清楚 MCP 三层架构:Host、Client、Server 到底是什么?LLM 和 MCP Host 又是什么关系?

摘要

MCP,全称是 Model Context Protocol,可以理解为一种让 AI 应用标准化连接外部工具和数据源的协议。

在学习 MCP 的时候,最容易混淆的就是几个概念:

  • MCP Host 是不是 LLM?
  • MCP Client 到底有什么作用?
  • MCP Server 已经能暴露工具了,为什么还需要 Client?
  • 用户让 AI 查看项目文件时,完整调用流程到底是什么样的?
  • LLM、Host、Client、Server 之间到底是什么关系?

本文会围绕 MCP 的三层结构:Host、Client、Server 进行详细讲解,并结合“用户让 AI 查看本地项目文件并总结文档”的例子,把完整调用链路讲清楚。


一、MCP 是什么?

MCP 全称是:

Model Context Protocol

可以理解为:

MCP 是一种让 AI 应用安全、标准化地连接外部工具和数据源的协议。

大模型本身只负责理解和生成文本,它并不能天然访问:

本地文件
GitHub 仓库
数据库
日志系统
监控系统
工单系统
天气 API
公司内部接口

比如用户问:

帮我查看一下我的项目文件,并总结文档。

如果没有工具能力,大模型其实不知道你的项目文件里有什么内容。

它不能凭空读取你的本地文件,也不能直接访问你的电脑目录。

这时候就需要 MCP。

MCP 的作用就是让 AI 应用通过统一协议连接外部工具,比如:

读取文件工具
查询 GitHub 工具
查询数据库工具
查询日志工具
查询监控工具
查询工单工具

二、MCP 为什么要出现?

在没有 MCP 之前,如果一个 AI 应用想接入外部工具,通常需要自己写很多适配逻辑。

比如一个 AI 应用想接入这些能力:

本地文件读取
GitHub 查询
数据库查询
日志查询
监控查询
工单查询

那么它可能要分别写:

文件系统适配代码
GitHub API 适配代码
数据库连接代码
Elasticsearch 查询代码
Prometheus 查询代码
工单系统 API 适配代码

如果多个 AI 应用都要接这些工具,那么每个应用都要重复开发。

比如:

Cursor 要接 GitHub,写一套适配
Claude Desktop 要接 GitHub,也写一套适配
VS Code 插件要接 GitHub,还要写一套适配
公司内部智能助手要接 GitHub,又要写一套适配

这会变成:

N 个 AI 应用 × M 个工具 = N * M 次适配

成本非常高。

MCP 的思想是:

工具提供方只需要实现一个 MCP Server,任何支持 MCP 的 AI 应用都可以通过 MCP Client 连接它。

也就是说:

GitHub MCP Server 实现一次
Cursor 可以用
Claude Desktop 可以用
VS Code 插件可以用
公司内部 AI 助手也可以用

这样工具接入就被标准化了。


三、MCP 的三层架构

MCP 主要可以分成三层:

MCP Host
MCP Client
MCP Server

如果再往下看,MCP Server 后面还会连接真实的数据源,比如文件系统、数据库、GitHub API、日志系统等。

整体结构可以画成这样:

用户
 ↓
MCP Host
 ↓
MCP Client
 ↓
MCP Server
 ↓
真实数据源

如果只讲 MCP 的三层,重点就是:

Host:AI 应用层
Client:连接工具层
Server:工具服务层

可以用一句话先记住:

Host 负责调度,Client 负责连接,Server 负责执行。


四、MCP Host 是什么?

MCP Host 是用户真正使用的 AI 应用。

比如:

Cursor
Claude Desktop
VS Code AI 插件
公司内部智能助手
智能 OnCall Agent 平台

很多人一开始会误以为:

MCP Host 是不是 LLM?

答案是:

MCP Host 不是 LLM。

更准确地说:

MCP Host 是承载 LLM 的 AI 应用,LLM 是 Host 调用的大模型能力。

也就是说:

MCP Host = AI 应用本身
LLM = Host 调用的大模型

比如你在 Cursor 里和 AI 对话:

帮我分析这个 Java 项目的登录流程。

这里:

Cursor 是 MCP Host
GPT / Claude / DeepSeek 这类模型是 LLM

Host 负责组织整个流程,LLM 负责理解用户问题和生成回答。


五、MCP Host 负责什么?

MCP Host 负责整个 AI 应用的调度流程。

它主要负责:

接收用户输入
维护对话上下文
调用 LLM
管理 MCP Client
获取可用工具列表
把工具描述提供给 LLM
接收 LLM 返回的 tool call
通过 Client 调用 Server
把工具结果交给 LLM
展示最终答案

也就是说,Host 不是只负责把用户问题转发给大模型。

它还要负责:

工具管理
上下文管理
权限控制
调用调度
结果展示

所以 Host 更像是:

AI 应用的外壳 + 调度中心。


六、LLM 和 MCP Host 的关系

LLM 和 MCP Host 不是同一个东西。

可以这样理解:

LLM = 大脑
MCP Host = 身体 + 调度系统
MCP Client = 手上的连接器
MCP Server = 外部工具
真实数据源 = 工具背后的数据

LLM 负责:

理解用户问题
判断是否需要调用工具
生成工具调用请求
根据工具返回结果继续分析
生成最终回答

但是 LLM 本身通常不直接做这些事情:

不直接读取本地文件
不直接连接数据库
不直接调用 GitHub API
不直接查询日志系统
不直接访问 MCP Server

这些事情是由 Host 调度 MCP Client 和 MCP Server 完成的。

所以更准确地说:

LLM 负责“想清楚要做什么”,Host 负责“把这件事真正调度起来”。


七、MCP Client 是什么?

MCP Client 是 Host 内部的一个组件。

它不是用户客户端,也不是浏览器前端。

它的作用是:

帮 MCP Host 连接 MCP Server,并负责工具发现、工具调用转发和结果接收。

可以理解成:

MCP Client = Host 内部的工具连接器

比如 Cursor 想读取本地项目文件,它自己不会直接读文件,而是通过内部的 MCP Client 连接 Filesystem MCP Server。

结构如下:

Cursor Host
   ↓
Filesystem MCP Client
   ↓
Filesystem MCP Server
   ↓
本地项目文件

MCP Client 主要负责:

1. 连接 MCP Server
2. 获取 Server 暴露的工具列表
3. 获取每个工具的参数格式
4. 把工具描述交给 Host
5. 转发 LLM 产生的工具调用请求
6. 接收 Server 返回的工具执行结果
7. 处理超时、失败、取消、连接断开等问题

Client 自己不真正执行工具逻辑。

比如文件读取场景中:

Client 不负责真正读取文件
Server 才负责真正访问文件系统

Client 只是连接和转发。


八、MCP Server 是什么?

MCP Server 是工具能力的提供方。

它负责把某种外部系统包装成 MCP 标准工具。

比如:

Filesystem MCP Server:封装本地文件读写能力
GitHub MCP Server:封装 GitHub API 能力
Database MCP Server:封装数据库查询能力
Log MCP Server:封装日志查询能力
Metric MCP Server:封装监控查询能力
Ticket MCP Server:封装工单系统能力

MCP Server 主要负责:

1. 声明自己有哪些工具
2. 声明工具需要什么参数
3. 接收 MCP Client 的调用请求
4. 校验参数是否合法
5. 做权限控制
6. 访问真实数据源
7. 返回工具执行结果

比如一个 Filesystem MCP Server 可以暴露这些工具:

list_directory(path):列出目录
read_file(path):读取文件
search_files(path, keyword):搜索文件
write_file(path, content):写入文件

一个 Log MCP Server 可以暴露:

search_logs(serviceName, keyword, timeRange):查询日志
get_trace(traceId):查询链路
aggregate_errors(serviceName, timeRange):聚合异常

Server 的核心作用是:

把真实外部能力封装成 AI 可以调用的标准工具。


九、MCP 三层职责总结

层级 作用 类比
MCP Host AI 应用本身,负责用户交互、调用 LLM、管理工具 Cursor、Claude Desktop、智能助手
MCP Client Host 内部连接 Server 的组件,负责工具发现和调用转发 连接器、驱动、HTTP Client
MCP Server 工具服务,负责暴露工具、执行工具、访问真实数据源 工具适配器、后端服务

一句话总结:

Host 负责组织整个 AI 应用流程;
Client 负责连接和调用工具 Server;
Server 负责提供和执行工具能力。

十、为什么有了 Server,还需要 Client?

这是 MCP 最容易被问到的问题。

很多人会想:

Server 已经能暴露工具了,为什么还需要 Client?

答案是:

Server 只是工具能力的提供方,但 Host 要真正使用这些能力,还需要 Client 来连接、发现、调用和接收结果。

Server 解决的是:

外部系统如何被包装成标准工具?

Client 解决的是:

AI 应用如何连接并使用这些标准工具?

举个例子,一个 GitHub MCP Server 暴露了这些工具:

list_issues
search_code
get_pull_request
create_issue

这只能说明:

GitHub MCP Server 有这些能力。

但是 Cursor 或 Claude Desktop 要使用它,还需要:

1. 连接这个 MCP Server
2. 获取它有哪些工具
3. 获取工具参数格式
4. 把工具描述提供给 LLM
5. 当 LLM 要调用工具时,把请求发给 Server
6. 接收 Server 返回结果
7. 把结果交给 LLM 继续分析

这些事情就是 MCP Client 做的。

所以:

Server 负责“我能做什么”
Client 负责“我怎么调用你”

十一、用 HTTP 类比 MCP Client 和 Server

可以用普通后端开发来理解。

假设有一个用户服务:

User Server

它提供接口:

GET /user/1
POST /user

那是不是有 Server 就够了?

不是。

调用方还需要 HTTP Client,比如:

OkHttp
HttpClient
RestTemplate
FeignClient

服务端负责:

我提供接口。

客户端负责:

我发请求、接收响应、处理异常。

MCP 也是一样:

MCP Server:提供 MCP 工具接口
MCP Client:调用 MCP 工具接口

如果没有 MCP Client,Host 也可以自己写一段连接 MCP Server 的代码。

但这段代码本质上就是 Client。

所以 Client 不是多余的一层,而是把“工具连接和协议通信逻辑”单独抽象出来。


十二、完整调用流程:用户让 AI 查看项目文件并总结

下面用一个具体场景讲清楚。

用户在 Cursor 或某个 AI 应用里输入:

帮我查看一下我的项目文件,并总结文档。

假设系统配置了 Filesystem MCP Server。

对应关系如下:

Cursor / AI 应用 = MCP Host
Host 内部的连接组件 = MCP Client
Filesystem MCP Server = MCP Server
本地项目文件夹 = 真实数据源
GPT / Claude / DeepSeek = LLM

完整流程如下。


1. Host 启动并连接 MCP Server

很多情况下,Host 启动时就会读取 MCP 配置。

比如配置了一个文件系统 Server:

{
  "mcpServers": {
    "filesystem": {
      "command": "filesystem-server",
      "args": ["/Users/xxx/project"]
    }
  }
}

Host 启动后:

1. 读取 MCP 配置
2. 创建 MCP Client
3. MCP Client 连接 Filesystem MCP Server
4. Client 向 Server 获取工具列表

Filesystem MCP Server 可能返回:

list_directory(path)
read_file(path)
search_files(path, keyword)

此时 Host 就知道:

当前可以使用文件读取工具。

2. 用户请求进入 Host

用户输入:

帮我查看一下我的项目文件,并总结文档。

这个请求首先进入 MCP Host。

也就是:

Cursor
Claude Desktop
VS Code 插件
公司内部 AI 助手

不是直接进入 LLM,也不是直接进入 MCP Server。

Host 会组织一次 LLM 调用。


3. Host 把问题和工具列表发给 LLM

Host 会把下面信息发送给 LLM:

1. 用户当前问题
2. 最近对话上下文
3. 系统提示词
4. 当前可用工具列表

工具列表大概是:

你可以使用以下工具:
- list_directory(path):列出目录
- read_file(path):读取文件
- search_files(path, keyword):搜索文件

LLM 看到用户问题后,会判断:

用户要我查看项目文件并总结,我需要先读取项目目录。

4. LLM 返回 tool call

LLM 不会直接读取文件。

它会返回一个工具调用请求,比如:

{
  "tool": "list_directory",
  "arguments": {
    "path": "/project"
  }
}

这一步的本质是:

LLM 告诉 Host:我想调用 list_directory 工具。

注意:

LLM 不直接调用 Server
LLM 不直接访问文件系统
LLM 只是生成 tool call

5. Host 通过 Client 调用 Server

Host 收到 tool call 后,会找到对应的 MCP Client。

调用链路是:

MCP Host
 ↓
MCP Client
 ↓
Filesystem MCP Server

Client 把请求转发给 Server:

list_directory("/project")

6. Server 访问真实项目文件

Filesystem MCP Server 收到请求后,真正访问本地项目目录。

比如项目目录是:

/project
  ├── README.md
  ├── pom.xml
  ├── src/
  ├── docs/
  └── deployment.md

Server 返回:

README.md
pom.xml
src/
docs/
deployment.md

结果返回链路是:

本地项目文件夹
 ↓
Filesystem MCP Server
 ↓
MCP Client
 ↓
MCP Host

7. Host 把工具结果交给 LLM

Host 拿到目录列表后,会把结果继续交给 LLM。

LLM 看到结果后,可能会继续判断:

我要总结文档,应该读取 README.md、docs 目录和 deployment.md。

然后 LLM 继续返回 tool call:

{
  "tool": "read_file",
  "arguments": {
    "path": "/project/README.md"
  }
}

Host 再次通过 Client 调用 Server。

这个过程可能循环多次。


8. 多轮工具调用

LLM 可能继续调用:

read_file("/project/README.md")
list_directory("/project/docs")
read_file("/project/docs/architecture.md")
read_file("/project/docs/api.md")
read_file("/project/deployment.md")

每次调用都是:

LLM 产生 tool call
 ↓
Host 接收 tool call
 ↓
Client 转发请求
 ↓
Server 执行工具
 ↓
Server 返回结果
 ↓
Host 把结果交给 LLM

直到信息足够。


9. LLM 生成最终总结

当 LLM 读取了足够的项目文件后,会生成最终回答。

比如:

这个项目是一个 Spring Boot 后端项目,主要包含用户模块、订单模块和鉴权模块。
项目使用 Maven 管理依赖,入口类位于 src/main/java 下。
README 中描述了项目启动方式,docs 目录包含接口文档和部署说明。
整体项目结构清晰,适合按照 controller、service、mapper 三层架构进行理解。

最后 Host 把最终总结展示给用户。


十三、完整流程图

可以画成这样:

用户
 ↓
MCP Host
 ↓
Host 调用 LLM,并提供用户问题 + 工具列表
 ↓
LLM 判断需要调用工具
 ↓
LLM 返回 tool call
 ↓
MCP Host
 ↓
MCP Client
 ↓
MCP Server
 ↓
真实数据源
 ↓
MCP Server
 ↓
MCP Client
 ↓
MCP Host
 ↓
Host 把工具结果交给 LLM
 ↓
LLM 继续分析或继续调用工具
 ↓
LLM 生成最终答案
 ↓
MCP Host 展示给用户

更简化的一句话是:

用户请求进入 Host,Host 调用 LLM,LLM 决定调用工具,Host 通过 Client 调用 Server,Server 访问真实数据源并返回结果,Host 再把结果交给 LLM,最后 LLM 生成答案,由 Host 返回给用户。

十四、智能运维 Agent 中的 MCP 三层例子

如果是智能 OnCall 运维系统,也可以这样理解。

用户问:

订单服务最近 10 分钟接口超时率升高,帮我分析原因。

对应关系:

智能 OnCall 平台 = MCP Host
Log MCP Client / Metric MCP Client / Ticket MCP Client = MCP Client
Log MCP Server / Metric MCP Server / Ticket MCP Server = MCP Server
Elasticsearch / Prometheus / 工单系统 = 真实数据源
LLM = 负责分析和生成结论的大模型

结构如下:

智能 OnCall Host
   ├── Metric MCP Client -> Metric MCP Server -> Prometheus
   ├── Log MCP Client -> Log MCP Server -> Elasticsearch
   ├── Ticket MCP Client -> Ticket MCP Server -> 工单系统
   └── CMDB MCP Client -> CMDB MCP Server -> 服务依赖数据库

完整过程:

用户问订单服务超时
 ↓
Host 调用 LLM
 ↓
LLM 判断需要查监控
 ↓
Host 通过 Metric Client 调用 Metric Server
 ↓
Metric Server 查询 Prometheus
 ↓
返回 P99、错误率、QPS
 ↓
Host 把结果交给 LLM
 ↓
LLM 判断还需要查日志
 ↓
Host 通过 Log Client 调用 Log Server
 ↓
Log Server 查询 Elasticsearch
 ↓
返回 inventory-service timeout 日志
 ↓
LLM 综合分析
 ↓
生成排障结论

最终回答可能是:

订单服务 P99 延迟升高,同时日志中大量出现 inventory-service timeout。
结合服务依赖关系,初步判断订单服务超时可能由库存服务响应慢导致。
建议继续排查 inventory-service 的监控、慢 SQL 和最近发布记录。

十五、MCP 三层面试回答

如果面试官问:

MCP Host、Client、Server 分别是什么?

可以这样回答:

MCP Host 是 AI 应用本身,比如 Cursor、Claude Desktop 或公司内部智能助手,负责接收用户请求、调用 LLM、维护上下文、管理工具调用流程。

MCP Client 是 Host 内部的连接组件,负责连接 MCP Server、发现工具、获取工具参数 schema、转发 LLM 的 tool call,并接收 Server 返回结果。

MCP Server 是工具服务层,负责把外部系统封装成 MCP 标准工具,比如文件系统、GitHub、数据库、日志系统、监控系统等。Server 接收 Client 的调用请求,访问真实数据源并返回结果。

十六、MCP Host 和 LLM 的关系面试回答

如果面试官问:

Host 是不是 LLM?

可以这样回答:

不是。MCP Host 不是 LLM。MCP Host 是 AI 应用本身,LLM 是 Host 调用的大模型能力。

Host 负责接收用户问题、维护上下文、管理 MCP Client、获取工具列表、调用 LLM、处理 LLM 返回的 tool call,并最终展示结果。

LLM 负责理解用户意图、判断是否需要调用工具,以及基于工具返回结果生成最终回答。

所以可以理解为:LLM 是大脑,Host 是承载大脑并调度工具的应用。

十七、为什么需要 Client 的面试回答

如果面试官问:

既然 Server 已经能暴露工具,为什么还需要 Client?

可以这样回答:

MCP Server 只是工具能力的提供方,它解决的是“外部系统如何被包装成标准工具”的问题。

但是 AI 应用要真正使用这些工具,还需要一个协议组件来连接 Server、发现工具、获取工具描述、转发工具调用请求并接收结果,这就是 MCP Client。

Client 位于 Host 内部,负责工具消费和协议通信。如果没有 Client,Server 虽然暴露了工具,但 Host 没有标准通道去发现和调用它。如果把这些逻辑都写在 Host 里面,那么 Host 里面这部分逻辑本质上也就是 Client。

十八、MCP 三层一句话总结

最终可以这样记:

Host 是 AI 应用;
Client 是 Host 内部的工具连接器;
Server 是外部工具的标准化封装层。

再完整一点:

用户请求进入 Host,Host 调用 LLM,LLM 判断是否需要工具;
如果需要,Host 通过 MCP Client 调用 MCP Server;
Server 访问真实数据源并返回结果;
Host 再把结果交给 LLM;
最后由 LLM 生成答案并通过 Host 返回给用户。

十九、记忆口诀

Host:谁在用 AI?
Client:Host 怎么连接工具?
Server:工具怎么暴露给 AI?

或者:

Host 负责调度;
Client 负责连接;
Server 负责执行。

再简单一点:

LLM 是大脑;
Host 是调度中心;
Client 是连接器;
Server 是工具服务。

二十、总结

MCP 的核心不是让大模型直接访问外部系统,而是通过分层架构实现安全、标准化、可复用的工具接入。

三层职责非常清晰:

MCP Host:AI 应用,负责用户交互、LLM 调用和整体调度。
MCP Client:Host 内部连接组件,负责连接 Server、发现工具、转发调用和接收结果。
MCP Server:工具服务,负责暴露工具、执行工具、访问真实数据源。

LLM 和 MCP Host 也不是同一个东西。

LLM 负责理解和生成;
Host 负责调用 LLM 并调度整个工具执行流程。

所以当用户说:

帮我查看项目文件并总结文档。

完整链路是:

用户 -> MCP Host -> LLM -> tool call -> MCP Host -> MCP Client -> MCP Server -> 项目文件 -> MCP Server -> MCP Client -> MCP Host -> LLM -> 最终总结 -> 用户

这就是 MCP 三层架构在真实场景中的完整调用过程。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐