使用MCP服务扩展模型功能
第 1 节 概述
MCP(模型上下文协议,Model Context Protocol)是一套用于 AI 模型的接口协议,使得模型不仅能处理文本,还能连接数据库、本地文件、API等。

MCP 服务器 :是一个轻量级程序,提供特定 MCP 服务。它能够安全访问本地数据源和远程服务,进行一定的程序处理,并通过标准化的模型上下文协议公开,供 MCP 客户端进行访问。
官方和社区开发了许多 MCP Server,如下网址列举出了一些 MCP Server:
关于 MCP 的介绍,可以查看下面的这些视频进行学习:
视频中有这样一副图:

当 MCP 服务器启动以后,会和客户端进行一次握手,然后 MCP 服务器会告诉客户端自己能够提供哪些工具(Tools)以及这些工具的作用,如下:

因为 MCP 服务器告诉了客户端自己可以执行的函数、函数的作用以及需要传入的参数,并且现在的大模型一般都有函数调用(Function Calling)能力,所以大模型结合这些信息可以自行决定调用函数的时机和顺序。
MCP 服务其实就是一段普通的程序,不仅是大模型可以调用,其他的符合其调用方式的函数也可以对其进行调用,它与其他函数最大的不同在于提供了list_tools这一方法,使得大模型也可以理解如何调用它。
MCP 服务器有两种主要的通信协议:
- 本地通信:通过 stdio 传输数据,适用于在同一台机器上运行的客户端和服务器之间的通信。
- 远程通信:利用 SSE(服务器发送事件,Server-Sent Events)与 HTTP 结合,实现跨网络的实时数据传输,适用于需要访问远程资源或分布式部署的场景。
第 2 节 安装部署
2.1 n8n 上安装 MCP 插件
从上一节中可以知道,MCP 服务器使用前是需要启动,并且和客户端进行握手的,可以本地通信也可以远程通信。
在n8n上默认的 MCP 工具只能接在 AI 上来使用,为了获得更多的灵活性,需要安装一个插件n8n-nodes-mcp,在社区节点里面安装一下即可。

安装完成后就可以使用 stdio 协议的服务器了,比如我们使用@modelcontextprotocol/server-filesystem这款服务器来读取本地文件信息,可以通过Github获取,安装方式如下:
将信息填入凭证:


不知道是不是为了解决资源占用问题,n8n 的这个插件以stdio方式运行时,每次执行前会创建 MCP 服务器并进行握手,执行结束后会释放这个服务器资源,所以会导致每次执行前都会有较长时间的加载。
为了解决这个问题,我们需要部署下一个软件。
2.2 聚合器 MetaMCP
聚合器是一类 MCP 服务器,这类服务器对其他的 MCP 服务进行代理,于是可以通过单个 MCP服务器访问多个应用程序和工具,方便对多个 MCP 服务器进行集中管理。
|
|
因为这个 MCP 服务器是单独部署的,里面包含的子 MCP 服务器也是一直启动的,每次调用前无需启动,因而速度更快。
通过 Docker 容器进行部署,可以访问Github,参考其docker-compose.yml进行部署:
|
|
这里的APP_URL和NEXT_PUBLIC_APP_URL因为要提供 URL 给容器外的应用调用,所以填容器外的访问地址。
这里使用root身份访问容器是因为默认容器不是以root身份运行的,而我希望在里面部署@modelcontextprotocol/server-filesystem进行文件的访问,文件在容器外也会使用到,无法随意修改读写权限和所有者信息,不使用root身份的话会有权限问题。
部署完成之后进入管理页面,依次设置MCP Server、Namespace和Endpoints,并且生成一条API Key,如下:

返回n8n进行如下修改:

可以看到访问速度比之前会快上许多。