1661 字
8 分钟
什么是MCP?

什么是MCP?#

MCP 的全称是 Model Context Protocol(模型上下文协议),这是一个由 Anthropic 公司推出的开放标准协议,专门用来解决大型语言模型(LLM)与外部工具、数据源之间的连接问题。你可以把它理解为 AI 界的“USB-C 接口”——无论你的数据在本地文件、数据库,还是在云端 API 里,只要按照 MCP 规范提供一个服务,模型就能通过统一的方式去读取和调用。

注:MCP 在其他领域也可能指微通道板(Microchannel Plate)、多芯片封装(Multi-Chip Package)等,但根据当下 AI 技术语境,提问所指几乎可以确定是 Model Context Protocol。以下讲解都基于此。


一、MCP 的核心原理#

MCP 的本质是一套客户端-服务器架构的通信协议,它规定了 AI 应用如何发现、请求和使用外部提供的“上下文能力”。

1. 三大核心角色#

  • MCP Host(宿主程序) 你直接使用的 AI 应用,例如 Claude Desktop、VS Code 插件,或其他支持 MCP 的助手。
  • MCP Client(客户端) 嵌入在 Host 内部的协议客户端,与一个 MCP 服务器维持 1:1 的长连接,负责转发模型的需求和返回数据。
  • MCP Server(服务器) 由开发者编写的轻量级程序,专门暴露某些具体的功能或数据。比如 filesystem 服务器可以读取本地文件,github 服务器可以管理 Issues,postgres 服务器可以查询数据库。

2. 通信方式:JSON-RPC 2.0#

所有消息都使用 JSON-RPC 2.0 编码,这意味着模型与服务器之间的请求、响应和通知都是结构化的 JSON 对象,易于解析和调试。

传输层支持两种:

  • stdio(标准输入输出):客户端直接启动一个本地子进程作为服务器,通过 stdin/stdout 通信。适合本地工具。
  • HTTP + SSE(Server-Sent Events):用于连接远程服务器,支持流式推送。

3. 服务器暴露的三种“原语”#

每个 MCP Server 可以向模型声明它拥有的能力,分为三类:

  • 资源(Resources) 可以读取的只读数据,比如文件内容、数据库记录、用户文档。模型会像翻阅参考资料一样去获取。
  • 工具(Tools) 可由模型主动调用来执行操作的可执行函数。例如“发送邮件”、“创建 GitHub Issue”、“执行 SQL 查询”。调用后会返回结果给模型。
  • 提示模板(Prompts) 预定义的交互模板,帮助用户或模型快速构建特定结构的提示词(较少直接用于自主调用,主要是向用户提供快捷操作)。

4. 能力协商与安全模型#

连接建立时,Client 和 Server 会互相告知自己支持哪些功能(capabilities)。这样模型就能动态发现“这个服务器能做什么”。 安全性方面:

  • 用户可以在 Host 中显式配置允许连接哪些 MCP 服务器。
  • 对于敏感操作(如写入文件、调用外部 API),服务器可以要求用户批准才执行。
  • 所有上下文访问都受到服务器实现的权限约束,不会暴露未被授权的数据。

5. 一次典型的工作流程#

举个例子:你在 Claude Desktop 里问“我昨天的会议纪要写了什么?”

  1. Claude 理解意图,判断需要访问本地文件系统中的 会议纪要.txt
  2. Claude Desktop(Host)内的 MCP Client 向已连接的 filesystem Server 发起 JSON-RPC 请求:resources/read,参数是文件路径。
  3. Server 读取文件内容并返回给 Client。
  4. Client 将内容注入到模型的上下文窗口。
  5. 模型结合文件内容生成最终回答。

整个过程对用户来说是无感的,看起来就像模型本身拥有了读取文件的能力。


二、MCP 的主要作用#

1. 终结“碎片化集成”#

在 MCP 出现前,想让 AI 对接一个新工具,开发者必须为每个模型单独编写适配插件,并维护复杂的 Function Calling 定义和提示词工程。MCP 提供了一个与模型无关的标准,只要 AI 应用支持 MCP,所有符合规范的服务器就可以即插即用,极大降低了生态建设的成本。

2. 让模型从“孤岛”变成“连接器”#

模型不再只靠训练时固定的知识来回答问题,它可以:

  • 实时拉取最新文档、数据库记录、API 数据。
  • 调用工具执行现实世界的操作(发消息、创建工单、控制设备)。 这使 LLM 朝着真正的**智能体(Agent)**迈进,而不仅仅是一个聊天引擎。

3. 保护安全与用户掌控#

MCP 把“模型能做什么”的控制权交还给用户——你可以清晰地在设置里看到并管理每个服务器的权限边界,而不是让模型自由调用任何它被赋予的令牌。这为在企业环境中安全部署 AI 提供了基础。

4. 培育开放生态#

任何开发者都可以用 Python、TypeScript 等语言编写 MCP Server,并把它分享给他人。目前已经涌现出大量预置服务器:Google Drive、Slack、GitHub、SQLite、Puppeteer(网页自动化)等,形成了类似“App Store”的效应。模型通过 MCP 立刻就能使用这些功能,无需定制开发。


三、一句话总结#

MCP = 为 AI 模型提供“标准化的 USB-C 接口”,让任何模型都能安全、统一地连接无限的上下文和工具。它把过去需要反复造轮子的集成工作,变成了一个简单、开放、安全的协议,使 AI 应用的能力瞬间扩展到一个庞大的生态。

但也要注意⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡,用别人的⁠⁠⁠⁠⁠⁠⁠服⁠务⁠可⁠能⁠是⁠⁠⁠⁠⁠⁠⁠需要⁠ A⁠PI⁠ K⁠ey 的⁡⁡⁡⁡⁡⁡⁡,一般⁡是按⁡量付费。 需要先去 平台官方获取 API Key,等会儿会用到.

接下来引入依赖:

<!-- https://mvnrepository.com/artifact/dev.langchain4j/langchain4j-mcp -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-mcp</artifactId>
<version>1.1.0-beta7</version>
</dependency>

然后新增API Key的配置

bigmodel:
api-key: <Your Api Key>

新建 mcp.McpConfig,按照官方的开发方式,初始化和 MCP 服务的通讯,并创建 McpToolProvider 的 Bean:

@Configuration
public class McpConfig {
@Value("${bigmodel.api-key}")
private String apiKey;
@Bean
public McpToolProvider mcpToolProvider() {
// 和 MCP 服务通讯
McpTransport transport = new HttpMcpTransport.Builder()
.sseUrl("https://open.bigmodel.cn/api/mcp/web_search/sse?Authorization=" + apiKey)
.logRequests(true) // 开启日志,查看更多信息
.logResponses(true)
.build();
// 创建 MCP 客户端
McpClient mcpClient = new DefaultMcpClient.Builder()
.key("yupiMcpClient")
.transport(transport)
.build();
// 从 MCP 客户端获取工具
McpToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(mcpClient)
.build();
return toolProvider;
}
}
什么是MCP?
http://www.shineacz.top/posts/什么是mcp/
作者
shineAcZ
发布于
2026-05-05
许可协议
CC BY 4.0