🔌 AI Agent 终极形态:彻底搞懂 MCP 协议(Model Context Protocol)与面试指南

如果说 2023 年是“百模大战”,那么接下来的 AI 竞争焦点就是“生态连接”。

在过去的 AI 开发中,给大模型接入外部工具是一件极其痛苦的事:每个大模型都有自己的接口,每个数据源(GitHub、Notion、本地数据库)都有自己的 API。为了把它们连起来,开发者不得不写无数的“胶水代码”。

为了终结这种混乱,Anthropic(开发 Claude 的公司)强势推出了 MCP(Model Context Protocol,模型上下文协议)。如果你在面试中能对 MCP 侃侃而谈,绝对能让面试官刮目相看!这篇文章将用大白话带你彻底搞懂 MCP 协议。


在这里插入图片描述

💡 一、 什么是 MCP 协议?(大白话秒懂)

通俗概念
MCP 就像是 AI 界的 “USB-C 接口标准”
以前,你要把 AI 连接到本地文件、公司数据库、Slack,需要针对不同的 AI 写不同的专属插件(N 个 AI 乘以 M 个数据源,工作量是 N×MN \times MN×M)。
现在有了 MCP,大家统一遵守这套“USB-C 接口”规范。你只要为公司数据库写一个 MCP Server,任何支持 MCP 的 AI(比如 Claude Desktop、Cursor 等)都可以直接“插上”使用。工作量瞬间降为 N+MN + MN+M

核心定位
它是一个开源的、标准的客户端-服务器(Client-Server)架构协议,专门用于在 AI 应用(客户端)和外部数据源/工具(服务端)之间建立安全的双向连接。


🏗️ 二、 MCP 的核心架构与三大能力

MCP 的架构非常简洁,主要分为两边:

  • MCP Host(宿主/客户端):发起请求的 AI 应用程序(比如你正在使用的 Claude 客户端,或者 IDE 编辑器)。
  • MCP Server(服务端):你本地或云端运行的轻量级程序,负责实际连接 GitHub、本地数据库或执行特定代码。

面试必考:MCP Server 能向 AI 提供什么?(三大核心能力)

核心能力 💡 大白话解释 🎯 典型应用场景
Resources (资源) 把外部数据暴露给大模型,就像给大模型挂载了一个“只读网盘”。 让大模型直接读取你本地的 .log 日志文件、API 响应结果或内部 Wiki 文档。
Tools (工具) 允许大模型触发外部操作,并获取执行结果(类似于 Function Calling)。 让大模型调用 API 发送邮件、执行一段 SQL 查询,或者操作 GitHub 提交代码。
Prompts (提示模板) 服务端预先定义好的标准 Prompt 模板,客户端可以一键调用。 提供统一的“代码审查 Prompt”或“周报生成 Prompt”,规范大模型的输出格式。

🎯 三、 高频面试 Q&A 实战演练

Q1:MCP 协议和传统的 Function Calling(函数调用)有什么区别?

标准答案
Function Calling 是大模型底层的一种能力(输出结构化 JSON 参数);而 MCP 是一种系统级的通信协议和架构标准
MCP 的 Tools 能力底层确实依赖 Function Calling,但 MCP 更进一步,它标准化了发现工具、获取资源列表、执行工具的完整生命周期,并且天生支持客户端与服务端的物理隔离。

Q2:企业为什么需要接入 MCP,而不是直接把 API 给大模型?

标准答案
核心是为了解耦与安全

  1. 解耦:写一次 MCP Server,就能在所有支持 MCP 的 AI 平台复用,拒绝重复造轮子。
  2. 安全隔离:企业的核心数据和执行逻辑封装在本地运行的 MCP Server 中,AI 应用(Host)只通过标准协议与其交互,企业可以随时切断连接或进行严格的权限审计,避免核心数据直接暴露给公网大模型。

Q3:MCP 目前支持哪些通信方式?

标准答案
目前主要支持两种标准传输层(Transports):

  1. Stdio(标准输入输出):适用于本地运行。AI 客户端直接在本地拉起 MCP Server 进程,通过控制台的标准输入/输出进行极速通信(最常用)。
  2. SSE (Server-Sent Events) over HTTP:适用于远程调用。MCP Server 部署在云端,通过 HTTP 协议与远端的 AI 客户端进行通信。

💻 四、 面试加分代码:手写一个极简的 MCP Server

在面试中,如果能展示你用 Python 的 mcp 官方库(如 FastMCP 框架)手写过服务端,证明你一直紧跟行业最前沿技术。以下是保姆级注释的代码:

# 运行前需安装官方库: pip install mcp
from mcp.server.fastmcp import FastMCP
import os

# ==========================================
# 1. 初始化 MCP Server
# 就像用 FastAPI 写后端一样简单,起个名字
# ==========================================
mcp = FastMCP("Interview_Demo_Server")

# ==========================================
# 2. 核心能力一:暴露 Tool (工具)
# 使用 @mcp.tool() 装饰器,直接将 Python 函数变成大模型可调用的工具
# ==========================================
@mcp.tool()
def fetch_system_info(info_type: str) -> str:
    """
    获取服务器底层的系统信息。
    这是给大模型看的描述,大模型会根据这个描述决定是否调用此工具。
    """
    print(f"🔧 [工具被调用] 大模型正在请求系统信息: {info_type}")
    
    if info_type == "cpu":
        return "CPU 使用率: 15%"
    elif info_type == "memory":
        return "内存使用率: 4.2GB / 16GB"
    else:
        return "未知的信息类型,请请求 cpu 或 memory。"

# ==========================================
# 3. 核心能力二:暴露 Resource (资源)
# 使用 @mcp.resource() 装饰器,将本地文件或数据作为只读资源暴露给大模型
# uri 格式类似于文件路径
# ==========================================
@mcp.resource("file://project_config")
def read_config() -> str:
    """读取项目的本地核心配置文件"""
    print("📄 [资源被读取] 大模型正在访问项目配置...")
    return """
    {
        "project_name": "AI_Agent_V2",
        "status": "in_development",
        "secret_key": "hidden"
    }
    """

# ==========================================
# 4. 启动服务器
# ==========================================
if __name__ == "__main__":
    print("🚀 MCP Server 准备就绪,正在通过 Stdio 模式监听客户端请求...")
    # 默认以 stdio (标准输入输出) 模式启动
    # 任何支持 MCP 的宿主(如 Claude Desktop)都可以作为子进程拉起这个脚本
    mcp.run()

# 💡 面试讲解要点:
# 向面试官解释:“通过 FastMCP 框架,开发者根本不需要关心底层的 JSON-RPC 通信细节。
# 只需要用 @tool 装饰器包装业务函数,用 @resource 挂载本地数据。
# 配置到 Claude Desktop 的配置文件后,Claude 就能瞬间拥有读取这台电脑配置和 CPU 状态的超能力!”
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐