面试知识库
进阶

MCP协议原理#

一句话答案#

MCP(Model Context Protocol)是标准化的模型与外部工具/数据源通信协议,让 LLM 以统一方式调用各种工具。

核心要点

三者的本质区别:

维度Function CallMCP(Model Context Protocol)Skills
定义LLM 原生的工具调用机制Anthropic 提出的工具服务化协议标准可复用的工具能力封装单元
耦合度强耦合(工具定义写在调用代码中)解耦(工具以服务形式暴露,LLM 动态发现)中等(一套逻辑可被多个 Agent 复用)
动态发现不支持支持(Server 启动后 Client 自动发现可用工具)通常静态注册
适用范围单次调用一个工具跨语言、跨平台的工具生态复合多步骤任务的封装

Function Call(函数调用):

  • 模型输出一个 JSON 结构(工具名 + 参数),由外部代码执行对应函数
  • 优点:简单直接,几乎所有主流 LLM 都支持
  • 缺点:工具定义和 Agent 代码耦合,不易复用和扩展

MCP(Model Context Protocol):

  • Anthropic 提出的开放协议,基于 JSON-RPC 2.0 消息,承载在 stdio 或 Streamable HTTP(旧版为 HTTP+SSE)之上暴露工具
  • Agent(Client)连接 MCP Server,Server 声明三大原语:有哪些工具(Tools)、可访问哪些资源(Resources)、预置哪些提示词模板(Prompts)
  • 优点:
    • 工具服务化,独立部署,独立维护
    • 支持动态注册,LLM 不需要提前知道工具列表
    • 跨语言(Python/JS/其他语言实现的工具都能接入)
  • 缺点:协议较新,生态还在建设中;引入网络调用,延迟略高

Skills:

  • 比 Tool 更高层的抽象,封装了一个完整的业务能力(可能包含多个 Tool 调用 + 业务逻辑)
  • 例如:“预订机票” 是一个 Skill,它内部会调用”查询航班”、“验证信息”、“下单”三个 Tool
  • 优点:复用性更强,对 LLM 暴露的是意图而非操作细节,减少 LLM 决策负担
  • 缺点:抽象层次高,实现成本高

总结: Function Call 是基础机制,MCP 是工具服务化的工程标准,Skills 是业务能力的高阶封装,三者层次递进。

面试回答(2分钟版)

MCP全称Model Context Protocol,是Anthropic提出的标准化协议,用来解决LLM与外部工具和数据源之间的通信问题。要理解MCP,需要和Function Call、Skills放在一起看,它们是三个递进的层次。Function Call是最基础的机制,模型输出一个JSON指定工具名和参数,由外部代码执行,简单直接但工具定义和调用代码强耦合。MCP把工具服务化了,它基于JSON-RPC 2.0消息,承载在stdio或Streamable HTTP(旧版为HTTP+SSE)之上暴露,Agent作为Client连接MCP Server,Server声明三大原语——有哪些Tools、可访问哪些Resources、预置哪些Prompts,Client可以动态发现和调用,实现了跨语言跨平台的即插即用,就像USB标准统一了设备接口。Skills是更高层的抽象,封装一个完整的业务能力,内部可能包含多个Tool调用加业务逻辑。MCP的核心价值在于解耦——工具可以独立开发、独立部署、独立迭代,不同的Agent框架都能对接同一套工具生态。目前的局限是协议比较新,生态还在建设中,而且引入了网络调用会有额外延迟。但从趋势看,MCP正在成为AI应用工具集成的事实标准。

追问与易错

追问方向:

  • MCP 和 Function Calling 的本质区别是什么? → Function Calling 是 LLM 内置的工具调用机制(工具定义写在代码里),MCP 是工具服务化协议(工具以独立服务暴露,支持动态发现和跨语言调用)
  • MCP Server 怎么做安全防护?工具权限怎么控制? → 四层:JWT/API-Key 认证 + 资源归属校验(如 kbIds 隔离)+ userId 服务端注入 + 速率限制。高风险工具加人工审批
  • 你们项目的 MCP 工具怎么设计的?内外部调用怎么统一? → 同一个 Tool Bean 双路径:内部走 Spring AI Function Calling,外部走 MCP Server HTTP。Schema 一次定义,两个入口复用
  • MCP 的动态发现机制在生产中怎么用? → Client 连接 Server 后自动获取可用工具列表和 Schema,新增工具只需部署 Server,Client 无需改代码

易错点:

  • ❌ 混淆 MCP 和普通 HTTP API → MCP 有标准化的工具描述、动态发现和状态管理,不只是 HTTP 调用
  • ❌ 忽略 MCP 的安全层 → 外部 MCP 调用需要认证(JWT/API-Key)+ 参数隔离 + 速率限制
  • ❌ 认为 MCP 只能外部调用 → MCP 工具可以同时服务内部 Agent(Function Calling)和外部客户端

项目实践(DocMind): 设计了 5 个 MCP 工具(DocSearch/KeywordSearch/WebSearch/Memory/KbMeta)的双路径架构:内部通过 Spring AI Function Calling + AgentToolContext 调用,外部通过 MCP Server HTTP 暴露。安全模型:kbIds 隔离确保用户只能访问自己的知识库,userId 由服务端注入禁止外部指定,Web Search 设速率限制防滥用。