大家好,我是大志。
在 AI Agent 开发中,MCP 已经成为调用外部系统的事实标准。因此,MCP 也成为 Agent 开发中的核心问题之一。在面试中,MCP 相关内容也成为高频考点。
面试官一般不仅会考察 MCP 是什么,还会继续追问 MCP 解决了哪些问题、与 LLM 的工具调用有什么区别等。我对这些与 MCP 相关的核心高频面试题进行了整理,将 MCP 的核心知识点串联起来。
另外,完整的 AI Agent 面试题文档也已经同步到了 aiflowline.cn,大家可以结合文章一起阅读。
1、什么是 MCP?
MCP(Model Context Protocol,模型上下文协议) 是由 Anthropic 提出的、面向 Agent 应用的开放协议。它的作用是标准化 Agent 应用与外部系统之间的调用方式。这里的外部系统可以是文件系统、数据库、业务服务等。
MCP 最主要的作用是让 Agent 应用以统一的方式调用外部系统,而无需每接入一个外部系统就编写一套适配逻辑。在 MCP 出现之前,一般通过 SDK 或 API 直接调用外部系统。
MCP 出现后,调用链路变为 Agent 通过 MCP Client 调用 MCP Server,再由 MCP Server 调用外部系统。MCP Server 将外部系统的调用包装成标准接口,MCP Client 负责发现和调用 MCP Server 提供的能力。这样,我们在 Agent 应用中就无需关心每个外部系统的调用细节,直接调用即可。
2、MCP 解决了什么问题?
MCP 主要解决的是 LLM 与外部工具之间缺少统一调用标准的问题。此外,MCP 还解决了以下问题:
工具可复用
在没有 MCP 时,我们在一个 Agent 项目中开发的工具,无法直接在其他 Agent 项目中使用。即使是自己开发的其他 Agent,也需要重写这个工具,导致同一个工具被重复开发。有了 MCP,所有 Agent 应用都可以复用同一个 MCP Server,做到一次开发,到处使用。
模型与工具解耦
在以往的 Agent 开发中,为 GPT 模型开发的工具,换成 Claude 模型后可能需要重新适配。有了 MCP,就可以实现模型与工具的解耦。
工具自动发现
之前,LLM 在绑定工具时必须手动指定:
tools = [ weather, sql, github, email]而有了 MCP 之后,MCP Client 可以自动发现这些工具,无需手动维护工具列表。
跨平台性
不同项目的编程语言和运行环境往往不完全相同。例如,一些业务系统使用 Java,而 Agent 应用使用 Python 构建。如果我们想在 Agent 中使用业务系统的能力,就可以让业务系统对外提供一个 MCP Server,供 Agent 应用调用。这样,其他 Agent 也可以直接接入该 MCP Server,无需重复开发。
3、MCP 和 Function Calling 有什么区别?
MCP 和 Function Calling 都与工具调用有关,但两者解决问题的层级不同。Function Calling 解决的是 LLM 如何调用工具函数,而 MCP 解决的是如何发现和调用外部工具。
Function Calling 是一种工具调用机制,而 MCP 则是一套开放协议。
Function Calling 本质上是大模型提供的一种能力,它的作用是让 LLM 决定是否调用工具函数,以及调用哪个工具、传入哪些参数。例如,用户提问“今天杭州天气如何?”,模型返回需要调用的工具函数和调用参数:
{"tool": "get_weather","arguments": {"city": "杭州" }}Agent 应用根据 LLM 返回的工具名称和参数调用指定工具,再将工具调用结果返回给 LLM,最终得出答案。
4、MCP 协议核心组件有哪些?
MCP 核心组件示意图如下:

MCP 的核心组件可分为通信方和对外暴露的能力两部分。通信方包括以下几个部分:
Host
即 AI Agent 应用,例如 Claude Code、Cursor 和自研 Agent 应用。它的作用是管理 MCP Client。
MCP Client
MCP 协议客户端,用于与 MCP Server 建立连接、获取其提供的能力,并将这些能力转换成工具,供 LLM 调用。
MCP Server
MCP 服务端,是真正提供外部资源调用能力的一方,例如文件系统 MCP Server、GitHub MCP Server 等。
对外暴露的能力包括以下几个部分:
Tools
提供给 AI Agent 调用的函数能力,例如查询天气、发送邮件等。MCP 会描述工具的名称、功能、输入参数 Schema 和返回结果格式等信息,类似于 LangChain 中的 Tool。经过 MCP 协议标准化后,这些工具可以被不同的 Agent 共享。
Resources
提供 LLM 可以读取的上下文信息,例如本地文件、知识库、API 文档、配置文件等。
Prompts
提供给 LLM 的、标准且可复用的 Prompt 模板,例如代码审查提示词模板、周报总结提示词模板等。Agent 应用可以动态获取这些模板,多个 Agent 也可以方便地共享同一套模板。
除此之外,MCP 使用 JSON-RPC 进行通信,标准传输方式主要包括 stdio 和 Streamable HTTP。stdio 适用于本地 MCP Server,Streamable HTTP 适用于远程服务。
5、MCP 如何发现工具?
MCP 使用工具无需像 LangChain 中那样将所有工具写死在工具列表中,MCP 是通过 tools/list 接口实现工具发现的。MCP Client 会向 MCP Server 请求,查询所有可用工具,获取每个工具的名称、描述、参数 Schema。
MCP 完成工具发现分为以下几个步骤:
MCP Server 注册工具
首先将工具注册到 MCP Server:
@mcp.tooldefquery_sql(sql: str): ...MCP Client 请求工具列表
当 MCP Client 与 MCP Server 建立连接之后,MCP Client 通过 tools/list 接口请求 MCP Server 工具的元数据信息。
将 MCP 的工具列表转换成 LLM 能识别的工具列表
MCP Server 返回的工具列表可能是:
{"name":"query_sql","description":"执行查询SQL"}将工具列表转换成所使用的模型支持的工具列表结构,比如:
{"type":"function","function":{"name":"query_sql","description":"执行查询SQL","parameters":{ ... } }}将工具信息传递给 LLM
LLM 收到这些 MCP 的工具,根据提问决定是否调用工具,如需调用则根据工具描述返回工具调用信息。
以上就是 MCP 的工具发现流程,工具发现的主要作用体现在:
MCP Server 新增工具后,Client 无需修改代码就可以动态发现。 工具的描述信息、参数 Schema 都由 MCP Server 统一维护。 不同的 Agent 可以复用同一个 MCP Server。 Agent 应用的代码不需要随着工具的变化而变化。
6、MCP 如何调用工具?
在上一个问题已经分析了 MCP 完成了工具发现,并且通过 LLM 的函数调用来决定调用哪个工具。接下来,Agent 应用收到了 LLM 返回的工具调用信息,将它交给 MCP Client。
{"name":"query_sql","arguments":{ ... }}MCP Client 会将信息格式转换成 JSON-RPC 格式调用 tools/call 接口:
{"jsonrpc": "2.0","id": 2,"method": "tools/call","params": {"name": "query_order","arguments": {"id": "1001" } }}MCP Server 执行工具,并将执行结果返回,最终 MCP Client 将调用结果交给 LLM,生成最终结果。
7、为什么 MCP 叫 Model Context Protocol,而不是 Tool Protocol?
因为 MCP 不仅仅提供 Tool 工具,还提供了 Resources、Prompts,Tool 只是其中一种能力。
Prompts
MCP Server 可以暴露一些 Prompt 提示词模板,可以通过 prompts/list 接口获取相关提示词。
比如:
你是一名专业客服。回答要求:1. 语气友好2. 不承诺无法实现的事情3. 涉及退款时必须参考退款政策我们在 Agent 应用获取到提示词之后,可以将提示词放到系统提示词中。
Resources
MCP Server 可以提供一些 Resources 资源,比如产品使用手册、退货文档等等。MCP Client 发现 Resource 通过 resources/list 接口,再选择具体的资源通过 resources/read 进行读取,最终将读取到的文档放入上下文。
8、如何开发一个 MCP Server?
开发 MCP Server,本质上就是将已经存在的系统能力包装成一种支持 MCP 协议的通用能力。
在 LangChain 中,开发一个 MCP Server 的基本流程如下:
安装 MCP SDK 和 LangChain 的 MCP 适配器
uv add mcp langchain-mcp-adapters创建 MCP Server
首先定义 MCP Server,并创建一个天气查询工具。
from mcp.server.fastmcp import FastMCPmcp = FastMCP("weather-server")@mcp.tool()defget_weather(city: str) -> str:"""查询指定城市的天气。 Args: city: 城市名称。 """returnf"{city}今天晴,气温 22°C 到 29°C。"if __name__ == "__main__": mcp.run(transport="stdio")创建 MCP Client
构建 MCP Client,因为 MCP Client 和 MCP Server 之间使用 stdio 通信模式,所以不需要提前启动 MCP Server。使用 MultiServerMCPClient 会自动根据指定的 SERVER_FILE 去启动 MCP Server,并且 MultiServerMCPClient 会自动将 MCP Tool 转换成 LangChain Tool。并且在 MCP Client 调用完成之后,MCP Server 也会随之关闭。
import asyncioimport sysfrom pathlib import Pathimport dotenvfrom langchain.agents import create_agentfrom langchain_mcp_adapters.client import MultiServerMCPClientSERVER_FILE = Path(__file__).with_name("13.1 MCP Server.py")asyncdefmain() -> None: dotenv.load_dotenv()# `MultiServerMCPClient` 会按配置启动 MCP Server,并把 MCP 工具转换为 LangChain 工具。 client = MultiServerMCPClient( {"weather": {"transport": "stdio","command": sys.executable,"args": [str(SERVER_FILE)], } } ) tools = await client.get_tools() agent = create_agent( model="deepseek-v4-flash", tools=tools, system_prompt="你是一个天气助手,只能使用天气工具回答天气问题。", ) result = await agent.ainvoke( {"messages": [{"role": "user", "content": "请查询杭州今天的天气"}]} ) print(result["messages"][-1].content)if __name__ == "__main__": asyncio.run(main())执行结果如下:

9、MCP 相比传统 API 有什么优势?
MCP 相比于传统的 API 接口更适合 AI Agent。传统的 API 主要通过应用程序调用,这些 API 如果想被 Agent 调用,需要将 API 包装成工具,定义相关的参数 Schema、描述信息、权限控制等信息,而 MCP 将这些内容进行标准化,接入即可使用。
MCP 相对于传统 API 有如下优势:
自动发现:MCP Client 可以自动发现 MCP Server 而无需手写工具。 工具可复用:同一个 MCP Server 可以被不同的 Agent 使用,无需重复接入。 更适合模型使用:MCP 工具内置名称、描述、参数,让 LLM 可以很方便地使用 MCP 提供的工具。 提供统一的上下文:除了工具外 MCP 还支持统一的提示词、资源。 集中权限控制:MCP Server 暴露工具后,可以在 MCP Server 集中做权限控制、限流等操作。
MCP 降低了 Agent 接入外部系统的成本,让 LLM 能够更灵活地发现、了解、使用外部工具。
本期 MCP 相关面试题 就到这里。后面我会 每周至少更新 1 期面试题系列,想看后续 AI Agent 进阶面试题 的朋友,欢迎关注「大志说编程」!
觉得有用的话,转发给正在面试的小伙伴,咱们下期见~
往期回顾
夜雨聆风