Skip to content

大家好,我是大志。

在 AI Agent 开发中,MCP 已经成为调用外部系统的事实标准。因此,MCP 也成为 Agent 开发中的核心问题之一。在面试中,MCP 相关内容也成为高频考点。

面试官一般不仅会考察 MCP 是什么,还会继续追问 MCP 解决了哪些问题、与 LLM 的工具调用有什么区别等。我对这些与 MCP 相关的核心高频面试题进行了整理,将 MCP 的核心知识点串联起来。

另外,完整的 AI Agent 面试题文档也已经同步到了 aiflowline.cn,大家可以结合文章一起阅读。 大家好,我是大志。

在 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 在绑定工具时必须手动指定:

python
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 决定是否调用工具函数,以及调用哪个工具、传入哪些参数。例如,用户提问“今天杭州天气如何?”,模型返回需要调用的工具函数和调用参数:

json
{
  "tool": "get_weather",
  "arguments": {
    "city": "杭州"
  }
}

Agent 应用根据 LLM 返回的工具名称和参数调用指定工具,再将工具调用结果返回给 LLM,最终得出答案。

4、MCP 协议核心组件有哪些? ​

MCP 核心组件示意图如下:

image-20260720173417070

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:

python
@mcp.tool
def query_sql(sql: str):
    ...
  • MCP Client 请求工具列表

当 MCP Client 与 MCP Server 建立连接后,MCP Client 通过 tools/list 接口请求 MCP Server 中工具的元数据信息。

  • 将 MCP 的工具列表转换成 LLM 能识别的工具列表

MCP Server 返回的工具列表可能是:

python
{
    "name": "query_sql",
    "description": "执行 SQL 查询"
}

再将工具列表转换为当前模型支持的工具列表结构,例如:

python
{
  "type": "function",
  "function": {
      "name": "query_sql",
      "description": "执行 SQL 查询",
      "parameters": {
          ...
      }
  }
}
  • 将工具信息传递给 LLM

LLM 收到这些 MCP 工具信息后,会根据用户的问题决定是否调用工具。如果需要调用,则会根据工具描述返回工具调用信息。

以上就是 MCP 的工具发现流程。工具发现的主要作用体现在以下几个方面:

  • MCP Server 新增工具后,MCP Client 无需修改代码就可以动态发现。
  • 工具的描述信息和参数 Schema 都由 MCP Server 统一维护。
  • 不同的 Agent 可以复用同一个 MCP Server。
  • Agent 应用的代码不需要随着工具的变化而变化。

6、MCP 如何调用工具? ​

上一个问题介绍了 MCP 如何完成工具发现,以及 LLM 如何通过 Function Calling 决定调用哪个工具。接下来,Agent 应用会将 LLM 返回的工具调用信息交给 MCP Client。

python
{
    "name": "query_sql",
    "arguments": {
        ...
    }
}

MCP Client 会将调用信息转换为 JSON-RPC 请求,并通过 tools/call 接口发起调用:

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "query_sql",
    "arguments": {
      "sql": "SELECT * FROM orders WHERE id = 1001"
    }
  }
}

MCP Server 执行工具并返回执行结果。最后,MCP Client 将调用结果交给 LLM,由 LLM 生成最终答案。

7、为什么 MCP 叫 Model Context Protocol,而不是 Tool Protocol? ​

因为 MCP 不仅提供 Tools,还提供 Resources 和 Prompts,Tools 只是其中一种能力。

  • Prompts

MCP Server 可以暴露一些 Prompt 模板,MCP Client 可以通过 prompts/list 接口获取这些模板。

比如:

text
你是一名专业客服。

回答要求:
1. 语气友好
2. 不承诺无法实现的事情
3. 涉及退款时必须参考退款政策

Agent 应用获取到提示词后,可以将其放入系统提示词中。

  • Resources

MCP Server 可以提供一些 Resources,例如产品使用手册、退货文档等。MCP Client 通过 resources/list 接口发现资源,再通过 resources/read 接口读取具体资源,最终将读取到的文档放入上下文中。

8、如何开发一个 MCP Server? ​

开发 MCP Server,本质上就是将已有的系统能力包装成支持 MCP 协议的通用能力。

下面以使用 MCP SDK 开发服务端、使用 LangChain 接入客户端为例,介绍基本流程:

  • 安装 MCP SDK 和 LangChain 的 MCP 适配器
shell
uv add mcp langchain-mcp-adapters
  • 创建 MCP Server

首先创建 MCP Server,并定义一个天气查询工具。

python
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather-server")


@mcp.tool()
def get_weather(city: str) -> str:
    """查询指定城市的天气。

    Args:
        city: 城市名称。
    """
    return f"{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,并将 MCP Tool 转换为 LangChain Tool。MCP Client 调用完成后,MCP Server 也会随之关闭。

python
import asyncio
import sys
from pathlib import Path

import dotenv
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient


SERVER_FILE = Path(__file__).with_name("13.1 MCP Server.py")


async def main() -> 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())

执行结果如下:

image-20260721215821957

9、MCP 相比传统 API 有什么优势? ​

MCP 相比传统 API 更适合 AI Agent。传统 API 主要供应用程序调用。如果想让 Agent 调用这些 API,需要将它们包装成工具,并补充参数 Schema、描述信息和权限控制等内容。而 MCP 将这些内容标准化,接入后即可使用。

MCP 相对于传统 API 有如下优势:

  • 自动发现:MCP Client 可以自动发现 MCP Server 提供的工具,无需手写工具列表。
  • 工具可复用:同一个 MCP Server 可以被不同的 Agent 使用,无需重复接入。
  • 更适合模型使用:MCP 工具自带名称、描述和参数等信息,让 LLM 可以方便地使用 MCP 提供的工具。
  • 提供统一的上下文:除了工具外,MCP 还支持统一的提示词和资源。
  • 集中权限控制:MCP Server 暴露工具后,可以集中进行权限控制、限流等操作。

MCP 降低了 Agent 接入外部系统的成本,让 LLM 能够更灵活地发现、了解和使用外部工具。

本期 MCP 相关面试题 就到这里。后面我会 每周至少更新 1 期面试题系列,想看后续 AI Agent 进阶面试题 的朋友,欢迎关注「大志说编程」!

觉得有用的话,转发给正在面试的小伙伴,咱们下期见~

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 在绑定工具时必须手动指定:

python
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 决定是否调用工具函数,以及调用哪个工具、传入哪些参数。例如,用户提问“今天杭州天气如何?”,模型返回需要调用的工具函数和调用参数:

json
{
  "tool": "get_weather",
  "arguments": {
    "city": "杭州"
  }
}

Agent 应用根据 LLM 返回的工具名称和参数调用指定工具,再将工具调用结果返回给 LLM,最终得出答案。

4、MCP 协议核心组件有哪些? ​

MCP 核心组件示意图如下:

image-20260720173417070

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:

python
@mcp.tool
def query_sql(sql: str):
    ...
  • MCP Client 请求工具列表

当 MCP Client 与 MCP Server 建立连接后,MCP Client 通过 tools/list 接口请求 MCP Server 中工具的元数据信息。

  • 将 MCP 的工具列表转换成 LLM 能识别的工具列表

MCP Server 返回的工具列表可能是:

python
{
    "name": "query_sql",
    "description": "执行 SQL 查询"
}

再将工具列表转换为当前模型支持的工具列表结构,例如:

python
{
  "type": "function",
  "function": {
      "name": "query_sql",
      "description": "执行 SQL 查询",
      "parameters": {
          ...
      }
  }
}
  • 将工具信息传递给 LLM

LLM 收到这些 MCP 工具信息后,会根据用户的问题决定是否调用工具。如果需要调用,则会根据工具描述返回工具调用信息。

以上就是 MCP 的工具发现流程。工具发现的主要作用体现在以下几个方面:

  • MCP Server 新增工具后,MCP Client 无需修改代码就可以动态发现。
  • 工具的描述信息和参数 Schema 都由 MCP Server 统一维护。
  • 不同的 Agent 可以复用同一个 MCP Server。
  • Agent 应用的代码不需要随着工具的变化而变化。

6、MCP 如何调用工具? ​

上一个问题介绍了 MCP 如何完成工具发现,以及 LLM 如何通过 Function Calling 决定调用哪个工具。接下来,Agent 应用会将 LLM 返回的工具调用信息交给 MCP Client。

python
{
    "name": "query_sql",
    "arguments": {
        ...
    }
}

MCP Client 会将调用信息转换为 JSON-RPC 请求,并通过 tools/call 接口发起调用:

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "query_sql",
    "arguments": {
      "sql": "SELECT * FROM orders WHERE id = 1001"
    }
  }
}

MCP Server 执行工具并返回执行结果。最后,MCP Client 将调用结果交给 LLM,由 LLM 生成最终答案。

7、为什么 MCP 叫 Model Context Protocol,而不是 Tool Protocol? ​

因为 MCP 不仅提供 Tools,还提供 Resources 和 Prompts,Tools 只是其中一种能力。

  • Prompts

MCP Server 可以暴露一些 Prompt 模板,MCP Client 可以通过 prompts/list 接口获取这些模板。

比如:

text
你是一名专业客服。

回答要求:
1. 语气友好
2. 不承诺无法实现的事情
3. 涉及退款时必须参考退款政策

Agent 应用获取到提示词后,可以将其放入系统提示词中。

  • Resources

MCP Server 可以提供一些 Resources,例如产品使用手册、退货文档等。MCP Client 通过 resources/list 接口发现资源,再通过 resources/read 接口读取具体资源,最终将读取到的文档放入上下文中。

8、如何开发一个 MCP Server? ​

开发 MCP Server,本质上就是将已有的系统能力包装成支持 MCP 协议的通用能力。

下面以使用 MCP SDK 开发服务端、使用 LangChain 接入客户端为例,介绍基本流程:

  • 安装 MCP SDK 和 LangChain 的 MCP 适配器
shell
uv add mcp langchain-mcp-adapters
  • 创建 MCP Server

首先创建 MCP Server,并定义一个天气查询工具。

python
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather-server")


@mcp.tool()
def get_weather(city: str) -> str:
    """查询指定城市的天气。

    Args:
        city: 城市名称。
    """
    return f"{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,并将 MCP Tool 转换为 LangChain Tool。MCP Client 调用完成后,MCP Server 也会随之关闭。

python
import asyncio
import sys
from pathlib import Path

import dotenv
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient


SERVER_FILE = Path(__file__).with_name("13.1 MCP Server.py")


async def main() -> 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())

执行结果如下:

image-20260721215821957

9、MCP 相比传统 API 有什么优势? ​

MCP 相比传统 API 更适合 AI Agent。传统 API 主要供应用程序调用。如果想让 Agent 调用这些 API,需要将它们包装成工具,并补充参数 Schema、描述信息和权限控制等内容。而 MCP 将这些内容标准化,接入后即可使用。

MCP 相对于传统 API 有如下优势:

  • 自动发现:MCP Client 可以自动发现 MCP Server 提供的工具,无需手写工具列表。
  • 工具可复用:同一个 MCP Server 可以被不同的 Agent 使用,无需重复接入。
  • 更适合模型使用:MCP 工具自带名称、描述和参数等信息,让 LLM 可以方便地使用 MCP 提供的工具。
  • 提供统一的上下文:除了工具外,MCP 还支持统一的提示词和资源。
  • 集中权限控制:MCP Server 暴露工具后,可以集中进行权限控制、限流等操作。

MCP 降低了 Agent 接入外部系统的成本,让 LLM 能够更灵活地发现、了解和使用外部工具。

本期 MCP 相关面试题 就到这里。后面我会 每周至少更新 1 期面试题系列,想看后续 AI Agent 进阶面试题 的朋友,欢迎关注「大志说编程」!

觉得有用的话,转发给正在面试的小伙伴,咱们下期见~

最后更新于: