2.1 MCP 核心架构:主机-客户端-服务器
2.1.1 MCP 架构简介
MCP 遵循互联网常见的 C / S 架构,即客户端(Client)- 服务器(Server)架构。
MCP 引入了主机(Host)的概念,组成了基本的主机-客户端-服务器架构,如图 2-1 所示。

图 2-1 MCP 核心架构
在 1.1 节中,我们已经介绍过了 MCP 主机、客户端、服务器三者的基本定义,并且通过一个例子演示了它们是如何协同工作的。接下来,我们从功能职责的角度,详细介绍 MCP 架构的各个组成部分。
- 主机
在 MCP 架构中,主机扮演着协调者的角色。它不仅负责创建和管理多个客户端实例,还掌控着这些客户端的连接权限与生命周期。同时,主机需要安全地维护客户端与服务器之间的连接,并在必要时请求用户授权。除此之外,主机还承担着大模型的集成与采样任务,并负责跨客户端的上下文聚合管理,从而确保整个系统的高效协作与安全运行。
- 客户端
MCP 里的客户端可以看作是主机内部的一个业务进程,它能够与服务器进程建立连接,实现数据的交互,从而帮助主机获取所需的外部资源。 客户端进程的核心职责包括:为每个服务器建立并维护有状态的会话,负责协议版本与能力协商,确保双方能够顺利沟通;同时还承担着协议消息的双向路由,保证信息能够及时传递;此外,客户端还需要管理订阅和通知机制。
什么是进程? 进程是具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。
一个主机可以创建和管理多个客户端进程,每个客户端进程与一个特定的服务器进程维持 1:1 的独立连接。
- 服务器
在 MCP 架构中,服务器是运行在主机之外的外部程序,专门用于向系统提供特定的资源和能力。它们通过 MCP 为主机和客户端提供资源、工具以及提示词等服务,并且以独立的方式运行,承担着各自明确的职责。服务器可以通过客户端接口发起采样请求,同时必须严格遵守安全方面的各项限制。无论是作为本地进程还是远程服务,服务器都能灵活地为系统扩展功能。
2.1.2 MCP 设计原则
MCP 的设计遵循一系列核心原则,这些原则贯穿于其架构和实现的各个方面。
首先,协议力求让服务器的构建变得简单。主机负责处理复杂的编排任务,而服务器则专注于实现自身特定且明确的功能,通过简洁的接口降低开发难度,并以清晰的分离原则提升代码的可维护性。
此外,MCP 鼓励服务器具备高度的可组合性。每个服务器都专注于独立的功能模块,多个服务器可以无缝协作,通过共享协议实现互操作,并借助模块化设计支持持续扩展。
在安全与隔离方面,协议要求服务器仅能访问必要的上下文信息,完整的对话历史由主机统一管理。每个服务器的连接都是隔离的,跨服务器的交互由主机统一协调,主机进程也负责划定安全边界,防止信息泄露和越权访问。
协议还强调功能的渐进式扩展。核心协议只提供最基础的功能,服务器和客户端可以根据实际需求协商并添加额外能力,二者能够独立演进。协议本身采用可扩展的设计,以便未来支持更多新特性,同时始终保持对旧版本的兼容性。
2.1.3 MCP 关键组成
MCP 由多个关键组成部分协同构建而成。
首先,在基础协议层面,MCP 明确规定了客户端与服务器之间通信的编码方式(JSON-RPC)、连接的完整生命周期、消息的传输机制,以及双方通过能力协商确定可用功能的流程。
在功能特性方面,服务器和客户端都可以实现丰富的扩展。例如,服务器能够向客户端提供各类资源、模板提示词和工具函数,供用户或大模型调用;而客户端则可以为服务器提供采样代理等能力,并对服务器的可操作目录进行限制。
此外,MCP 还定义了一系列额外的工具,支持如配置管理、进度追踪、通信取消、错误报告和日志记录等功能,进一步丰富了客户端与服务器之间的交互手段。
在安全与权限管理方面,MCP 提供了基于 HTTP 的授权框架,适用于 HTTP 传输场景;而对于 stdio 传输,则通过环境变量获取凭据。同时,客户端和服务器也可以根据实际需求协商自定义的身份验证和授权策略。
总体来看,MCP 采用了模块化的设计思路,通过明确分离各个关注点,不仅提升了系统的可维护性,也为客户端和服务器之间实现多样化、灵活的交互提供了坚实基础。
2.1.4 MCP 能力协商机制
MCP 采用能力协商机制,在初始化阶段,客户端和服务器会各自明确表明自己支持哪些功能。这些能力的声明决定了在整个会话期间协议能够实现哪些具体特性。
例如,服务器可以声明其支持资源订阅、工具调用和提示词等能力,而客户端则可以声明支持采样和通知处理等能力。会话过程中,双方都需要严格遵循各自已声明的能力,并且还可以通过协议扩展,协商并添加更多功能
每一项能力的声明,都会在会话期间激活协议中对应的特性。
例如,服务器如果实现了某项功能,必须在其能力字段中明确标注出来;只有声明了订阅能力的服务器,才能接收资源订阅通知;工具调用功能也要求服务器在能力列表中进行声明;
而客户端若要支持采样,则需要在自身能力中加以说明。通过这种能力协商机制,客户端和服务器能够明确了解彼此支持的功能范围,同时也为协议的灵活扩展提供了保障。
2.1.5 MCP 通信安全
MCP 赋予了系统强大的数据访问和代码执行能力,但这也带来了诸多安全与信任方面的重要挑战,因此所有实现者都必须高度重视相关风险。
核心安全原则包括:
- 用户知情与自主
用户必须对所有数据访问和操作有充分的知情权和决定权,能够自主选择哪些数据可以被共享、哪些操作可以被执行。协议的实现者应为用户提供清晰直观的界面,方便其审查和授权各项活动。
- 数据隐私保护
在主机向服务器披露用户数据前,必须获得用户的明确同意。未经授权,主机不得随意传输资源数据到其他地方,所有用户数据都应受到严格的访问控制和保护。
- 工具调用安全
由于工具调用本质上涉及任意代码执行,因此必须格外谨慎。工具的行为描述(如注释)除非来自可信服务器,否则都不应被完全信任。主机在调用任何工具前,必须获得用户的明确授权,并确保用户在授权前充分了解每个工具的具体功能。
- 大模型采样权限管理
任何涉及大模型采样的请求都需要用户明确批准。用户应能够自主决定是否允许采样、实际发送的提示内容以及服务器可见的结果。协议本身也有意限制服务器对提示内容的可见范围。
实施建议:
尽管 MCP 无法在协议层面强制执行所有安全原则,但实现者应主动:
- 在应用中构建完善的同意与授权机制;
- 提供清晰的安全风险说明文档;
- 实施严格的访问控制和数据保护措施;
- 遵循业界安全最佳实践进行集成; 在功能设计时充分考虑用户隐私的影响。