最近,MCP (Model Context Protocol) 在 AI 圈的热度不断攀升,各大开源工具、国内的高德地图以及 OpenAI 都纷纷推出了自家的 MCP Server。

那么,到底什么是 MCP?本文会从协议原理出发,介绍 MCP 的 概念以及应用。这将是一个小白也能看懂的 系列文章,欢迎关注收藏不迷路。

MCP 协议的定义

官方的定义通常是最权威的:MCP 是一个开放协议,它标准化了应用程序如何为 AI 模型提供上下文。你可以把 MCP 想象成 AI 应用程序的 USB-C 端口,就像 USB-C 提供了一个标准方式连接设备和各种外设一样,MCP 提供了一个标准方式让 AI 模型连接不同的 数据源和工具

实际上,对小白来说,官方的例子还不够直观。以下,我会用更直白的例子解释 MCP 的核心概念。

Model Context(模型上下文)

DeepSeek 凭借其出色的性价比在 AI 领域引发广泛关注,相信许多读者都已通过类似工具尝试过写作、编程或文本处理等。但最令人头疼的是,我们常常需要复制各种文件、论文或自己的源代码为 LLM 提供素材(即输入给 LLM 的内容)。

这些素材正是 MCP 协议中的 上下文。那么是否有一种方式可以简化这种素材收集的过程?换句话说就是 让模型自己去查找你要的内容。比如借助 FireCrawl MCP Server,模型可以自动爬取网页上的内容并根据用户的要求做总结;借助 高德地图 MCP Server,用户只需输入 “请为我计划一次天津美食一日游” 即可快速制定出详细的行程规划。

通过 MCP 与各家服务商的支持,一个 具备特定知识库的模型上下文 可以被 动态构建(上下文引用是在运行时通过协议调用决定的)。

Protocol(协议)

用一句话解释:协议就是一组规则。如同计算机网络中应用层的 HTTP 协议,它定义了客户端(如浏览器)与服务器之间如何通过请求-响应模型交换数据,包括请求方法(如 GET、POST)、状态码(如 200、404)和报文格式等 规则,客户端与服务器遵循该规则便可实现通信。

协议的制定能稳健地构建出一个生态,开发者可以遵循上述规则发布各类 MCP 服务,用户也仅需按照规则在 MCP 主机(Cursor、Cline 等)中配置服务即可。

MCP 协议的构成

下图可以直观的表示 MCP 协议中的各个组成部分以及相对关系:

请添加图片描述

对照上图来介绍 MCP(Model Context Protocol)协议中各组件的相关概念:

MCP Hosts(MCP 主机)

MCP 主机是面向用户的 AI 应用程序,比如 Claude Desktop、IDE 以及其他支持 MCP 的 AI 工具(如 Cline 插件)。

其功能是负责协调用户与 AI 模型的交互,并通过 MCP 客户端调用外部工具和数据源。比如,用户通过 Claude Desktop 提问时,主机决定是否需要调用 MCP 服务器获取数据。

一句话总结:MCP 主机就是可以借助 MCP 客户端与 MCP 服务器通信来获取更多上下文信息的 AI 应用程序

MCP Clients(MCP 客户端)

MCP 客户端是驻留在 MCP 主机内部的中间组件,每个客户端与一个 MCP 服务器 保持 1:1 连接。其功能是将服务器提供的工具或资源暴露给 AI 模型,并在模型决定调用时向对应的 MCP 服务器发起请求。

核心原理:通过在 MCP 主机中配置所需的 MCP 服务器(每个服务器会提供至少一个可调用工具),MCP 客户端可以聚合这些工具与用户的输入一并提交给 LLM。模型会根据用户的输入(某些特定的关键字)判断是否需要调用工具,如果模型的响应是一个 tool_use 类型,则主机会通过 MCP 客户端与对应的服务器进行连接,服务器调用该工具并返回结果,最后 MCP 主机会将上述返回的结果继续聚合后再交由 LLM,循环此过程 直到获得不再需要调用工具的最终结果。

MCP Servers(MCP 服务器)

MCP 服务器是个轻量级程序,通过 标准化协议 提供特定功能,如数据访问、工具调用或 Prompts。

  • Resources:结构化数据(如文件、API 响应)
  • Tools:可执行函数(如查询数据库、发送邮件)
  • Prompts:预定义的交互模板

通过前面对 MCP 客户端的介绍,MCP 服务器的职能变得非常容易理解:即遵循 MCP 协议来暴露其可提供的 ResourcesToolsPrompts。比如在官方示例的 MCP 服务器实现代码中,通过以下方式来注册一个提供天气预报功能的 tool

// server 为创建的 McpServer 实例
server.tool(
    "get-forecast",
    "Get weather forecast for a location",
    {
        latitude: z.number().min(-90).max(90).describe("Latitude of the location"),
        longitude: z.number().min(-180).max(180).describe("Longitude of the location"),
    },
    async ({ latitude, longitude }) => {
        // 调用第三方天气接口的逻辑
        return {
            content: [
                {
                    type: "text",
                    text: "在这里响应天气预报的内容",
                },
            ],
        };
    }
);

这里定义了 工具的名称功能描述工具所需的经纬度参数(限定了入参的类型和数值范围)以及 工具实现的回调代码。这种定义规则便是一种应用于 MCP 服务端的 协议

概念图中的 Local Data Sources(本地数据源)和 Remote Services(远程服务)本质上就是 MCP Server 所依赖的数据源的获取方式。比如,上述的天气预报工具实际上是通过调用第三方接口来获取某个地理坐标的天气情况。

如何使用 MCP Server

官网列举了一系列支持 MCP 协议的应用程序列表 MCP Clients,我们使用 VS Code 中的 Cline 插件作为示例来介绍如何使用 MCP Server(假设已安装 VS Code)。

执行步骤

  1. 在 VS Code 中安装 Cline 插件
  2. 在 MCP Servers 市场中选择 Filesystem MCP Server 进行安装:
  3. 复制以下 Filesystem MCP Server 的相关配置至 Cline 插件的 MCP Servers 配置文件中:
{
    "mcpServers": {
        "filesystem": {
            "command": "npx",
            "args": [
                "-y",
                "@modelcontextprotocol/server-filesystem",
                "/path/to/allowed/dir" // 允许访问的目录
            ]
        }
    }
}

Cline 已经内置了 MCP Servers 的应用市场,用户可以直接在插件中搜索并安装。但为了让读者理解 MCP Server 的配置原理,这里采用手动配置的方式。

以下是完整的操作演示视频:

在 Cline 中使用 Filesystem MCP Server

注意:Cline 需要配置具体 LLM 的 API 才可使用,建议提前申请好 DeepSeek 等模型的 API Key。示例视频中,配置 Filesystem MCP Server 时给定的允许访问的目录 /path/to/allowed/dir 已提前准备了数据。

总结

本文介绍了 MCP 协议的概念以及如何在 Cline 中配置一个 MCP Server,下一篇文章将 介绍如何搭建一个自己的 MCP Server。本文是《从原理到实战:掌握 Model Context Protocol(MCP)》系列的第一篇文章,如果本文对你有帮助,欢迎点赞、收藏和转发,支持我继续创作更多实用内容。如有问题欢迎在评论区留言。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐