让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理
MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。
本文以本人开发的fetch_news MPC Server为例 ,该项目基于MCP(Model Control Protocol)框架开发的新闻获取和分析服务器,专门用于获取最新新闻、搜索特定主题的新闻,并对新闻内容进行情感分析和摘要生成。提供了一套完整的工具和资源,可用于快速检索和处理新闻数据。
核心功能(实际上就是提供的几个工具函数)
- 最新新闻获取:获取指定类别的最新新闻,支持科技、财经、体育、娱乐、社会等类别 get_latest_news, 对于新闻的获取我使用的是https://newsapi.org/提供的API
- 新闻搜索:根据关键词搜索最近一段时间内的新闻search_news
- 情感分析:分析新闻文本的情感倾向 analyze_sentiment
- 新闻摘要:为新闻内容生成简短摘要summarize_news
提出问题
我在Claude
中输入"给我看看今天的十条关于人工智能的新闻,给出链接和相关内容摘要和情感分析",大家可以看到它给出的结果"我很抱歉,我的知识截止到2024年10月,所以我无法提供今天(2025年3月19日)的最新人工智能新闻。此外,我没有直接的网络搜索功能来访问和提供当前新闻链接。"大模型的知识受限于训练数据。
其实同样,在CherryStudio
中调用qwen-max
时也不能给出最新的数据。
以下为Claude Desktop中安装了fetch_news的MPC server后,变得可以进行实时搜索。
MCP是什么?
简单来说,MCP是一个标准化的通信协议,旨在让大型语言模型与外部资源和工具实现顺畅的集成。它就像一座桥梁,连接了五个关键部分:主机(Host)、客户端(Client)、服务器(Server)、本地资源(Local Resources)和远程资源(Remote Resources)。这五个部分各司其职,但又必须遵守MCP的"游戏规则",才能协同工作。
以下为官方文档的架构图:
https://modelcontextprotocol.io/introduction
以下为官方对架构中各部分的描述
MCP Hosts: Programs like Claude Desktop, IDEs, or AI tools that want to access data through MCP
MCP Clients: Protocol clients that maintain 1:1 connections with servers
MCP Servers: Lightweight programs that each expose specific capabilities through the standardized Model Context Protocol
Local Data Sources: Your computer's files, databases, and services that MCP servers can securely access
Remote Services: External systems available over the internet (e.g., through APIs) that MCP servers can connect to
对这五个部分逐一解析:
MCP Hosts: Programs like Claude Desktop, IDEs, or AI tools
- 理解:“Hosts”,因为不同的程序(如Claude Desktop、VS Code、某个AI写作工具)都可以充当MCP的主机。每个主机是一个独立的应用程序,它们通过MCP协议访问外部数据或功能。
- 场景:
- 用户可能同时运行Claude Desktop和一个IDE,这两个程序都作为Host,通过MCP获取文件或API数据。
- 在企业环境中,多个AI工具可能并行工作,每个工具都是一个Host。
MCP Clients: Protocol clients that maintain 1:1 connections with servers
- 理解: “Clients”,因为每个Host内部可以嵌入一个或多个MCP客户端,每个客户端与一个特定的服务器建立一对一连接。系统中可能有多个Client实例,分别处理不同的任务。
- 场景:
- 一个IDE(Host)可能同时需要访问本地文件和远程API,它会创建两个Client:一个连接本地文件服务器,另一个连接API服务器。
- 在多用户场景中,每个用户的Host可能都有自己的Client实例。
MCP Servers: Lightweight programs that each expose specific capabilities
- 理解: “Servers”,因为MCP设计允许多个轻量级服务器程序运行,每个服务器负责暴露特定的功能(如文件读写、数据库查询、API调用)。这些服务器彼此独立,通过MCP协议服务于不同的Client。
- 场景:
- 用户电脑上可能同时运行一个文件服务器(暴露本地文件)和一个网络服务器(连接远程API),两者都是MCP Servers。
- 在分布式系统中,可以有多个Server分布在不同设备上,共同支持一个Host。
Local Data Sources: Your computer’s files, databases, and services
- 理解: “Sources”,因为本地数据源种类繁多(文件、数据库、服务等),而且同一类型的数据源可能有多个实例。MCP服务器可以连接多个本地数据源以满足不同需求。
- 场景:
- 一个Server可能同时访问你的文档文件夹(文件)和SQLite数据库,这两个都是Local Data Sources。
- 在复杂应用中,可能有多个文件目录或服务(如本地Web服务)需要被访问。
Remote Services: External systems available over the internet
- 理解:
“Services”,因为远程服务指的是互联网上的各种外部系统(如天气API、股票API、云存储)。MCP服务器可以连接多个远程服务,提供多样化的功能。 - 场景:
- 一个MCP Server可能同时调用天气API和GitHub API,这两个都是Remote Services。
- 在AI任务中,模型可能需要从多个云端服务获取数据,这些服务并存于系统中。
为什么需要MCP?
你可能会问:为什么不直接让模型自己去抓数据,或者干脆用现有的协议呢?答案在于AI应用的特殊需求和现实中的挑战。MCP的出现,正是为了解决这些问题:
-
打破孤岛,提升能力
大型语言模型很聪明,但它们天生是"孤岛"——只能依靠训练数据或用户输入。如果想让模型读你的文件、查实时天气,甚至调用代码工具,就需要一个标准化的接口。MCP填补了这个空白,让模型从"闭门造车"变成"开门迎客"。 -
安全第一
直接让模型访问本地文件或网络API,听起来很酷,但也很危险。万一模型误删文件,或者被恶意指令利用怎么办?MCP通过服务器的中介作用,加入了权限控制和数据隔离,确保交互既强大又安全。 -
标准化带来可扩展性
想象一下,如果每个AI工具都用自己的方式连接外部资源,开发者得多累啊?MCP提供了一个统一的框架,无论是本地文件还是云端服务,无论是Mac还是Windows,只要遵守MCP,就能轻松集成。这不仅减轻了开发负担,还让生态系统更具扩展性。 -
效率与灵活性并存
MCP基于JSON-RPC 2.0,轻量高效。它支持异步通知,意味着服务器可以在不打断客户端的情况下主动推送更新。这种灵活性特别适合实时性要求高的场景,比如实时协作工具或动态数据分析。
MCP 的工作流程
当用户说"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"时,整个系统是如何协同工作的?让我们通过一个流程图来详细了解:
步骤分解:
我来结合刚才的流程图,详细解释当用户请求"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"时,整个系统如何协同工作的。按照流程图中的步骤进行详细描述。
用户层
步骤1: 用户输入请求
- 用户在界面上输入"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"
- 请求被发送到Host系统
主机层
步骤2: Host传递请求给LLM
- Host接收到用户的自然语言请求
- Host将这个请求转发给LLM(如Claude)进行处理
步骤3: LLM生成函数调用
- LLM分析用户请求,理解用户需要:
- 获取关于人工智能的最新新闻
- 生成内容摘要
- 进行情感分析
- LLM确定需要调用多个工具函数来完成这个任务
步骤4: LLM生成函数调用请求并传递给Host
- LLM创建一个结构化的函数调用请求,类似于:
{"function": "search_news","parameters": {"query": "人工智能","limit": 10,"days": 1}
}
工具层
步骤5: Host解析和执行函数
- Host接收到LLM生成的函数调用请求
- Host找到对应的
search_news
函数 - Host准备调用该函数,传入参数"人工智能"、限制10条、时间范围为1天
数据层
步骤6: 工具函数调用外部API
search_news
函数连接到新闻API服务- 函数发送请求获取最新的人工智能相关新闻
步骤7: 外部服务返回数据
- 新闻API返回10条与人工智能相关的最新新闻
- 返回的数据包含新闻标题、链接、发布日期等信息
响应层 (第一轮)
步骤8: 工具函数返回结果给Host
search_news
函数将获取到的新闻数据返回给Host
步骤9: Host将结果提供给LLM
- Host将新闻数据传递回LLM
- LLM接收到数据,分析后发现还需要进行摘要和情感分析
第二轮函数调用 (重复步骤3-9)
- LLM为每条新闻生成进一步的函数调用
- 对每条新闻内容进行摘要生成:
{"function": "summarize_news","parameters": {"news_text": "新闻全文内容","max_length": 100}
}
- 对每条新闻进行情感分析:
{"function": "analyze_sentiment","parameters": {"news_text": "新闻全文内容"}
}
- Host执行这些函数
- 外部服务进行摘要生成和情感分析
- 结果返回给Host,再传递给LLM
最终响应
步骤10: LLM生成最终回答
- LLM整合所有获取到的信息:
- 原始新闻数据
- 每条新闻的摘要
- 每条新闻的情感分析结果
- LLM将这些信息组织成结构化的回答
步骤11: Host展示结果给用户
- Host将LLM生成的最终回答呈现给用户
- 用户看到10条人工智能相关新闻,每条包含链接、摘要和情感分析
系统各组件如何协同工作(举例)
-
用户请求:用户要求获取人工智能相关新闻、摘要和情感分析
-
LLM解析请求:我(作为LLM)理解了需求,并开始生成函数调用
-
首次函数调用:调用
fetch_news_search
函数搜索人工智能相关新闻- 参数:查询词"人工智能"、最近5天、限制2条
- 结果:系统返回了2条相关新闻
-
后续函数调用:
- 对第一条新闻进行摘要(
summarize_news
) - 返回:简洁的新闻摘要
- 对第一条新闻进行情感分析(
analyze_sentiment
) - 返回:情感得分1.5(积极)
- 对第一条新闻进行摘要(
-
整合信息:我将所有获取到的信息(新闻、摘要、情感分析)整合成一个完整的回答
通过这个过程,我们可以看到MCP(Model Context Protocol)如何使LLM能够通过结构化函数调用与外部工具和数据源交互,从而提供更丰富、更实时的信息给用户。
新闻查询服务时序图
这个时序图详细展示了新闻查询服务的完整流程,从用户发起请求到最终获得结果的整个过程。以下是对时序图的关键环节解释:
- 初始请求阶段:
- 用户向主机系统发送请求,要求获取人工智能新闻、摘要和情感分析
- 主机将请求转发给大语言模型(LLM)进行处理
- 新闻搜索阶段:
- LLM分析用户意图后,生成
search_news
函数调用 - 主机执行该函数,通过工具层向外部新闻API发送请求
- API返回新闻数据,经过工具层处理后回传给主机
- 主机将新闻数据提供给LLM
- LLM分析用户意图后,生成
- 内容处理阶段(循环处理每条新闻):
- LLM生成
summarize_news
函数调用,请求生成摘要 - 摘要结果返回给LLM
- LLM生成
analyze_sentiment
函数调用,请求情感分析 - 情感分析结果返回给LLM
- LLM生成
- 最终响应阶段:
- LLM整合所有信息,生成结构化的最终回答
- 主机将完整结果展示给用户
这个时序图清晰地表现了系统各组件间的交互顺序和信息流动路径,特别是通过循环结构展示了对多条新闻的批量处理过程。图中的信息流向遵循了单向性原则,使整个流程更加清晰易懂。
读懂这两张图后应该就清楚了:当你输入 “给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析”,就能得知调用 MPC Server 的秘密。
小结:
MCP核心概念: 让LLM能够与外部工具和服务交互。
MCP (Model Context Protocol) 是一种标准化通信协议,它的核心目的是让大型语言模型能够安全、高效地与外部资源和工具进行交互。它就像AI世界中的"HTTP协议",定义了不同组件之间如何交换信息的规则,让语言模型摆脱"知识孤岛"的限制。
MCP Server 是实现MCP协议的服务器程序,它在整个生态系统中扮演着"翻译官"和"守门人"的角色。就像我们例子中的fetch_news服务器,它负责接收来自AI的请求,转化为对外部资源(如新闻API)的调用,然后将获取的数据安全地返回给模型。每个MCP Server通常专注于提供一种特定能力(如文件访问、API调用、数据分析等)。
简而言之,MCP是标准,MCP Server是实现。MCP定义了"游戏规则",而MCP Server则是遵循这些规则的"玩家"。这种分离设计带来了极大的灵活性和安全性,使AI应用生态系统能够像积木一样组合不同功能。
随着AI技术的普及,MCP有望成为连接AI与数字世界的重要桥梁,让语言模型不再局限于训练数据,而能实时获取和处理各类信息。未来,我们可能会看到更多专业化的MCP Server出现,形成一个丰富多彩的工具生态系统,大大扩展AI应用的边界。如果你对开发自己的MCP Server感兴趣,可以参考官方文档和开源项目,加入这个正在蓬勃发展的生态系统。