模型上下文协议(MCP)正在迅速成为连接大型语言模型(LLM)与外部数据和工具的标准。这篇文章将带你深入了解MCP的核心概念、优势,并结合实际案例展示如何利用它来扩展LLM的能力,就像给LLM装上了一个强大的外置大脑。

什么是模型上下文协议(MCP)?

简单来说,模型上下文协议(MCP)是一个协议,一套通用的规则,就像不同国家之间的外交协议一样,保证了LLM能够以一种结构化的方式访问它们原本无法触及的数据和工具。Anthropic率先提出了这个概念,目前已经被广泛采用。不要被复杂的术语吓倒,实际上,你可以把MCP理解为一种发送和接收JSON文件的标准化方式。它建立了一个清晰的通信渠道:

AI Agent (LLM) → MCP → 数据/工具/函数

这个架构使得AI Agent可以通过MCP与各种外部资源进行交互。这有点像USB-C接口,任何设备都可以通过它连接各种外设,极大地提高了兼容性和易用性。通过标准化数据交换格式,MCP解决了LLM与外部世界交互的复杂性问题,降低了开发门槛。

MCP的核心组件

MCP主要由三个核心组件构成,它们协同工作,使得LLM可以无缝地与外部资源进行交互:

  • MCP客户端: 通常是LLM本身,比如Claude Desktop,它们负责发起请求并解析服务器返回的结果。客户端是主动方,它们根据用户的指令或自身的逻辑,向服务器请求特定的数据或服务。
  • MCP服务器: 这是数据、API和工具的所在地,比如数据库、GitHub、Blender甚至文件系统。服务器是被动方,它们接收来自客户端的请求,执行相应的操作,并将结果返回给客户端。MCP服务器种类繁多,可以根据实际需求进行定制。
  • MCP协议: 基于JSON-RPC 2.0协议,用于在客户端和服务器之间交换消息。JSON-RPC 2.0 是一种轻量级的远程过程调用协议,它使用JSON作为数据格式,具有简单、易于解析和跨平台等优点。MCP协议定义了请求和响应的格式,以及错误处理机制,确保通信的可靠性和一致性。

例如,你可以创建一个MCP服务器来访问你的文件系统,这样LLM就可以读取、添加或删除文件。

实战演练:连接文件系统MCP

让我们通过一个简单的演示来感受一下MCP的强大之处。我们将连接一个文件系统MCP,让Claude Desktop能够读取、添加或删除你目录中的文件。

步骤 1:安装 Claude Desktop

首先,确保你已经安装了 Claude Desktop。这是使用MCP的前提。

步骤 2:配置 MCP 服务器

打开 Claude Desktop 的设置,找到“Developer”选项,点击“Edit config”。然后,将以下代码粘贴到配置文件中,并根据你的实际路径进行修改:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/Desktop",
        "/Users/username/Downloads"
      ]
    }
  }
}

请务必将 "/Users/username/Desktop""/Users/username/Downloads" 替换为你自己的桌面和下载目录的实际路径。这段配置告诉 Claude Desktop 如何启动文件系统MCP服务器,以及允许访问的目录。npx 是一个 Node.js 包执行器,它可以方便地运行 @modelcontextprotocol/server-filesystem 这个包,而无需全局安装。

步骤 3:重启 Claude Desktop

保存配置文件后,重启 Claude Desktop。

步骤 4:验证连接

重启后,你应该能看到类似这样的提示信息,表明文件系统MCP服务器已经成功连接。现在,你可以直接向 Claude Desktop 提问,比如:“我的下载文件夹里有多少个文件?”或者“创建一个名为 test.txt 的文本文件”。

通过这个简单的例子,你可以看到MCP是如何让LLM直接与你的文件系统交互的。这种能力极大地扩展了LLM的应用场景,让它们可以执行更复杂的任务。

MCP的优势:标准化与可扩展性

MCP最大的优势在于它的标准化。它提供了一种通用的接口,使得不同的LLM和工具可以互相连接,而无需进行大量的定制开发。这种标准化降低了开发成本,提高了系统的可维护性。

此外,MCP还具有很强的可扩展性。你可以根据自己的需求,创建各种各样的MCP服务器,连接不同的数据源和工具。例如,你可以创建一个MCP服务器来访问你的数据库,让LLM能够进行数据分析和挖掘。或者,你可以创建一个MCP服务器来控制你的智能家居设备,让LLM成为你的智能管家。

假设一个电商公司使用LLM来进行客户服务。如果没有MCP,他们可能需要为每个不同的系统(例如,订单管理系统、库存管理系统、客户关系管理系统)编写定制的接口,这不仅耗时耗力,而且容易出错。但是,如果他们使用MCP,他们只需要为每个系统创建一个MCP服务器,然后就可以让LLM通过MCP与这些系统进行交互。这大大简化了开发流程,提高了系统的灵活性。

从CLI-agent到MCP:一场范式转变

几个月前,我曾经写过一个简单的终端代理(CLI-agent),它可以通过命令行与LLM进行交互。虽然它的功能与MCP有些相似,但实现方式却大相径庭。

为了让CLI-agent能够执行shell命令并返回结果,我需要进行大量的配置:

  • Prompt工程: 我需要精心设计提示词,指导LLM以JSON格式返回输出。
  • 库依赖: 我需要安装和配置各种库,才能执行shell命令。
  • 客户端限制: 这个CLI-agent只能由我自己使用,无法与其他客户端共享。

相比之下,MCP提供了一种更加优雅和可扩展的解决方案。你只需要创建一个MCP服务器,就可以让任何支持MCP的客户端(例如,Claude Desktop)访问你的工具。这是一种范式转变,它将LLM的应用从个人工具扩展到通用平台。

构建自定义MCP服务器:进阶之路

如果你对MCP感兴趣,下一步可以尝试构建一个自定义的MCP服务器。这可以让你深入了解MCP的工作原理,并根据自己的需求定制功能。

构建MCP服务器的步骤通常包括:

  1. 选择编程语言和框架: 你可以选择任何你熟悉的编程语言和框架,例如 Python 和 Flask,或者 Node.js 和 Express。
  2. 实现 JSON-RPC 2.0 协议: 你可以使用现有的库来简化开发,例如 jsonrpcserver (Python) 或 json-rpc-2.0 (Node.js)。
  3. 定义 API 接口: 根据你的需求,定义服务器提供的 API 接口。例如,如果你要创建一个数据库MCP服务器,你可以定义 queryinsertupdatedelete 等接口。
  4. 实现业务逻辑: 在 API 接口中实现具体的业务逻辑,例如连接数据库、执行查询等。
  5. 测试和部署: 编写单元测试和集成测试,确保服务器的稳定性和可靠性。然后,将服务器部署到云平台或本地服务器。

例如,假设你要创建一个简单的MCP服务器,用于获取当前时间。你可以使用 Python 和 Flask 实现如下:

from flask import Flask, request, jsonify
from jsonrpcserver import method, dispatch
import datetime

app = Flask(__name__)

@method
def get_current_time():
    """
    Returns the current time.
    """
    now = datetime.datetime.now()
    return now.strftime("%Y-%m-%d %H:%M:%S")

@app.route("/", methods=['POST'])
def index():
    req = request.get_data(cache=False, as_text=True)
    response = dispatch(req)
    return jsonify(response.json()), response.http_status

if __name__ == '__main__':
    app.run(debug=True)

然后,你可以使用以下 JSON-RPC 请求来调用 get_current_time 方法:

{
  "jsonrpc": "2.0",
  "method": "get_current_time",
  "params": [],
  "id": 1
}

服务器会返回以下 JSON 响应:

{
  "jsonrpc": "2.0",
  "result": "2023-10-27 10:30:00",
  "id": 1
}

通过这个简单的例子,你可以了解如何构建一个基本的MCP服务器。当然,实际的MCP服务器可能会更加复杂,涉及到更多的功能和安全性考虑。

总结与展望

模型上下文协议(MCP)是一种很有前景的技术,它为LLM与外部世界之间的交互提供了一种标准化的解决方案。通过MCP,我们可以将LLM与各种数据源和工具连接起来,从而扩展它们的能力,并创造出更多有价值的应用。无论你是一名开发者、研究者还是爱好者,都值得关注MCP的发展,并尝试将其应用到你的项目中。未来,MCP有望成为LLM生态系统的重要组成部分,推动人工智能技术的进一步发展。让我们拭目以待!