MCP,即 Model Context Protocol(模型上下文协议),是 Anthropic 推出的一项开放标准。其核心目标是统一大型语言模型(LLM)与外部数据源及工具之间的通信协议。在当下,AI 模型常受数据孤岛问题制约,难以充分释放潜力,MCP 的出现正是为攻克这一难题。它赋予 AI 应用安全访问和操作本地及远程数据的能力,堪称是为 AI 应用打造了连接万物的关键接口。
官方文档:https://modelcontextprotocol.io/introduction
一、MCP 架构详解
MCP 采用客户端-服务器架构(client-server),其中蕴含几个关键概念:
-
MCP 主机(MCP Hosts):作为发起请求的LLM应用程序,像Claude Desktop、IDE或者各类AI工具都属于此类。
-
MCP 客户端(MCP Clients):存在于主机程序内部,与MCP server维持着一对一的连接关系。
-
MCP 服务器(MCP Servers):负责向MCP client提供上下文、工具以及prompt信息。
-
本地资源(Local Resources):指本地计算机中可供MCP server安全访问的资源,例如文件、数据库等。
-
远程资源(Remote Resources):即MCP server能够通过API等方式连接到的远程资源 。
二、MCP Client
MCP client 在整个模型交互过程中起着至关重要的桥梁作用,连接着LLM与MCP server,其详细的工作流程如下:
-
获取工具列表:MCP client启动后,率先向MCP server发起请求,获取当前可用的工具列表。这些工具涵盖了多样化的功能,比如文件读取、数据库查询、特定格式数据处理等,为后续的任务处理提供了丰富的能力支持。
-
发送查询与工具描述:MCP client将用户输入的查询内容,与刚刚获取到的工具描述,通过function calling的方式一并发送给LLM。这种结合方式,让LLM能全面了解用户需求以及可调用的工具资源,从而为决策提供更充足的信息。
-
LLM决策:LLM接收到信息后,会对用户查询进行深入分析。它会依据自身的理解和逻辑判断,决定是否需要借助工具来更准确地回答问题。如果确定需要,还会进一步筛选出最适合解决当前问题的工具。
-
执行工具调用:一旦LLM确定了所需工具,MCP client就会按照指令,通过MCP server执行相应的工具调用操作。MCP server会根据请求,协调本地或远程资源,确保工具能够顺利运行。例如,若调用的是数据库查询工具,MCP server会与对应的数据库建立连接并执行查询语句。
-
返回工具调用结果:工具执行完毕后,其产生的结果会经由MCP server回传至MCP client,再由MCP client转发给LLM。这些结果作为重要的补充信息,将帮助LLM更精准地生成回复内容。
-
生成自然语言响应:LLM整合用户查询、工具描述以及工具调用结果等多方面信息,运用自身的语言生成能力,将处理后的信息转化为自然流畅的语言形式。这一过程确保了最终输出的内容符合人类的语言习惯,易于理解。
-
展示响应给用户:最后,MCP client将LLM生成的自然语言响应展示给用户,完成一次完整的交互流程。用户得以直观地获取问题的答案,感受到MCP协议在增强模型能力方面的显著效果。
当前支持 MCP 协议的客户端应用:https://modelcontextprotocol.io/clients
三、MCP Server
MCP server作为MCP架构的核心部分,在提升AI应用性能方面发挥着不可替代的关键作用,主要体现在其提供的三大核心功能上:
-
资源(Resources):MCP server 所提供的资源涵盖了各种类似文件的数据形式,这些数据对于 AI 应用的运行意义重大。其中,API 响应能为 AI 模型带来实时的外部数据,例如从地图 API 获取的地理位置信息,或者从新闻 API 获取的最新资讯等,让模型可以基于最新信息进行处理和分析。而文件内容则包含各类格式的文档,像文本文件、JSON 文件等,为模型提供了丰富的知识储备。客户端能够便捷地读取这些资源,从而拓宽了AI模型的数据来源渠道,增强了其处理复杂任务的能力。
-
工具(Tools):工具是 MCP server 提供的可被 LLM 调用的函数集合,但为确保安全性和用户隐私,每次调用都需要获得用户的批准。这些工具丰富多样,比如数据处理工具可以对大量的原始数据进行清洗、转换;图像识别工具能够对图像内容进行分析和标注;文本处理工具可以实现文本的分类、翻译等功能。LLM 通过调用这些工具,突破了自身能力的局限,能够更高效地完成各种特定任务,大大提升了应用的实用性。
-
提示(Prompts):提示是 MCP server 预先编写好的模板,旨在引导用户和模型完成特定类型的任务。例如,在写作辅助场景中,提示模板可以为用户提供文章的结构框架、开头结尾的示例等,帮助用户更快地组织思路、撰写内容。对于模型而言,合适的提示能够引导其生成更符合用户需求的回复,在问答系统中,通过特定的提示模板,模型可以更准确地理解用户问题的意图,进而给出更精准、更有用的答案,有效提升了LLM的灵活性。
MCP Server 社区仓库推荐:
四、实践:通过 PostgreSQL MCP Server 查询数据库信息
(一)安装 PostgreSQL 并初始化数据库
使用 Docker 启动 PostgreSQL 服务:
docker run -d --name postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres
创建数据库和表,并插入数据:
-- 登录 PostgreSQL
docker exec -it postgres psql -U postgres
-- 创建数据库
CREATE DATABASE db01;
-- 连接到新创建的数据库
\c db01;
-- 创建 user_info 表
CREATE TABLE user_info (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
phone VARCHAR(20) UNIQUE NOT NULL
);
-- 创建 message_record 表
CREATE TABLE message_record (
id SERIAL PRIMARY KEY,
from_user_id INT REFERENCES user_info(id),
to_user_id INT REFERENCES user_info(id),
create_time TIMESTAMP NOT NULL,
content VARCHAR(500) NOT NULL
);
-- 插入示例数据
INSERT INTO user_info (username, password, phone) VALUES
('junki', '12345', '18888888888'),
('suki', 'qwert', '16666666666');
INSERT INTO message_record (from_user_id, to_user_id, create_time, content) VALUES
(1, 2, '2025-03-18 17:17:17', 'hi~'),
(2, 1, '2025-03-18 19:19:19', 'hello!');
(二)安装 MCP Client 之 5ire
由于 Claude 国内难注册,这里推荐一个开源的 MCP Client:https://github.com/nanbingxyz/5ire
安装后可配置支持工具的大模型,例如 Moonshot。
(三)安装 MCP Server 之 server-postgres
在工具中推荐 server-postgres 配置参考如下:
命令:npx -y @modelcontextprotocol/server-postgres postgresql://postgres:postgres@127.0.0.1/db01