MCP协议面试速查
本文对应 MCP详细解析 模块全部文档的面试考点提炼。MCP是本项目深入到源码级别的独有内容。
Q1:MCP协议要解决什么问题?
MCP(Model Context Protocol)是工具调用的标准化协议。之前每个模型厂商的Function Calling格式不同,工具开发者要针对每家写适配代码。MCP统一了"工具怎么暴露、怎么被发现、怎么被调用"的标准。
类比:USB统一了各种设备的连接方式,MCP统一了AI工具的对接方式。
Q2:MCP跟Function Calling是什么关系?是替代还是互补?
互补,不是替代。
Function Calling是模型侧的能力——模型决定"调哪个工具、传什么参数"。
MCP是工程侧的协议——规范了工具如何注册、如何被发现、如何通信。
最终链路:用户提问 → 模型通过Function Calling决策要调哪个工具 → 通过MCP协议跟工具服务端通信 → 执行 → 结果返回。
MCP不改变模型的决策逻辑,它改变的是工具的"连接方式"。
Q3:MCP的三个核心角色和通信模型?
MCP Server(工具提供方):暴露自己有哪些工具(Tools)、有哪些可用资源(Resources)、有哪些Prompt模板(Prompts)。
MCP Client(AI应用方):发现Server有什么能力,按需调用。
Transport(通信层):定义两端怎么通信。基于JSON-RPC协议。
通信流程:Client → initialize握手 → 获取Server能力列表 → 根据需要调用具体工具 → 收到响应。
Q4:三种传输模式(stdio/SSE/WebSocket)各适合什么场景?
stdio:Server和Client在同一台机器上,通过标准输入输出通信。最简单,本地CLI工具、IDE插件常用。
SSE(Server-Sent Events):HTTP长连接,服务端向客户端单向推送。适合Web应用调远程MCP服务。穿透防火墙容易,是最常见的生产部署方式。
WebSocket:全双工双向通信。需要Server主动推通知给Client时使用(比如实时Agent协作、语音场景中断处理)。
选择逻辑:同机 → stdio;远端Web → SSE;需要双向实时 → WebSocket。
Q5:用Spring AI怎么构建一个MCP Server?
核心步骤:
@McpServer
public class WeatherMcpServer {
@McpTool(description = "查询指定城市的实时天气")
public WeatherResult getWeather(@Param("city") String city) {
return weatherService.query(city);
}
}
Spring AI框架做的事:
- 扫描@McpServer注解的类
- 把@McpTool方法注册为MCP工具
- 启动Transport层监听(stdio或HTTP)
- 处理Client的初始化握手和工具调用请求
配置选择传输模式:
spring.ai.mcp.server.transport=stdio(本地)spring.ai.mcp.server.transport=sse(远端HTTP)
Q6:MCP调用链路从发起到响应经历了什么?
端到端链路(以SSE传输为例):
用户提问 → ChatClient处理 → 模型判断需要调工具 → 输出tool_call → MCP Client解析 → 构造JSON-RPC请求 → HTTP POST到MCP Server → Server路由到对应方法执行 → 返回JSON-RPC响应 → Client接收解析 → 结果注入消息列表 → 再次发给模型 → 生成最终回答。
关键细节:
- 握手阶段Client获取Server的能力列表(tools/resources/prompts),缓存起来
- 工具调用是同步阻塞的(Client等Server返回)
- 超时和重试逻辑在Client侧实现
Q7:企业级MCP开发要注意什么?
安全性:
- 工具执行需要权限校验(不是模型说调就能调)
- 敏感操作(写入、删除)需要二次确认机制
- 防止通过MCP工具描述做Prompt注入
性能:
- 工具执行超时控制
- 高并发下的连接池管理
- 结果缓存(相同参数短时间内不重复调用)
可观测性:
- 每次工具调用记trace(耗时、参数、结果)
- 工具成功率监控和告警
- 成本归因(哪些工具调用最频繁)
版本管理:
- 工具升级时兼容旧版Client
- 工具废弃时的平滑过渡
Q8:MCP、Function Calling、Skills三者的关系?
可以这么理解它们在不同层次解决问题:
- Function Calling:模型层面的"决策能力"——模型知道有哪些工具、决定调哪个
- MCP:通信层面的"连接标准"——工具方和调用方用统一协议对接
- Skills:上下文层面的"容量管理"——工具太多时,按需加载避免上下文膨胀
一个完整系统中三者协作:Skills控制哪些能力当前可用(L1发现层)→ 被选中的能力通过MCP协议注册/调用 → 模型通过Function Calling机制做调用决策。