Lazy loaded image
技术
🥽MCP协议
Words 2023Read Time 6 min
2025-3-12
2025-3-12
type
status
date
slug
summary
tags
category
icon
password
comment
Status
当前的AI模型通常受限于数据孤岛的困境,即模型只能访问有限的数据集,这大大限制了它们的应用范围和准确性。为了克服这一障碍,Anthropic推出了Model Context Protocol(MCP),这是一种开放标准,旨在解决大型语言模型与外部数据源和工具之间的通信难题。通过MCP,模型可以安全地访问和操作本地及远程数据,从而实现更为灵活和强大的功能。

一、MCP协议的核心特点

  1. 架构设计
    1. 基于客户端-服务器模型,包含以下组件: • MCP主机(如Claude Desktop、IDE插件):发起请求的应用程序。 • MCP客户端:连接主机与服务器。 • MCP服务端:暴露特定功能的轻量级服务(如访问文件系统、API)。 • 数据源:本地文件、数据库或远程服务。
      客户端与主机有时候是一起的都存在于用户的本地,甚至主机、客户端、服务端都在用户本地( Claude 桌面版)。
  1. 技术实现
    1. • 采用JSON-RPC 2.0作为通信协议,支持请求、响应、错误和通知四类消息类型。 • 内置权限管理、数据缓存和异步处理机制,优化数据传输效率和安全性。
  1. 应用场景
    1. • 让AI直接操作本地文件(如整理会议记录)、调用API(如查询天气)、整合多源数据(如跨平台分析)。

二、MCP 工作流程

 
notion image

三、如何创建MCP工具以及如何提供服务

服务端

对于MCP 服务器主要提供三种能力
  1. 资源(Resources
  1. 工具(Tools
  1. 提示词(Prompts
这里主要看一下如何创建工具:

1. 初始化服务器实例

FastMCP 类使用 Python 类型提示和文档字符串自动生成工具定义,简化创建和维护 MCP 工具的难度。

2. 定义辅助函数

添加查询和格式化国家气象服务 API 数据的辅助函数:

3. 工具执行

工具执行处理器负责实际执行每个工具的逻辑

4. 启动服务

创建客户端

1. 初始化客户端类

2. 连接服务器

3. 大模型选择调用工具

其实就是 function call 返回调用工具列表,并调用服务端的工具,拿到工具调用结果后再交给大模型输出。

4. 交互式聊天

5. 客户端启动


四、与 Function Calling 对比

MCP 大模型与外部世界交互的通用协议,而 Function Calling 是大模型与外部交互的约束机制(API 接口)。
  1. MCP 对 Function Calling 的整合与标准化。MCP 协议通过定义标准化的工具调用流程,将 Function Calling 作为其核心交互机制之一。当 LLM 需要调用外部功能时,MCP Client 会从 Server 获取工具列表,将工具描述与用户查询一起发送给模型,模型通过 Function Calling 机制决定是否调用工具,最终通过 MCP Server 执行具体操作
  1. 技术架构层面的差异
      • 定位层级不同:Function Calling 是 LLM 平台提供的 API 接口(如 OpenAI 的 function calling),而 MCP 是覆盖整个工具调用生命周期的通信协议
      • 服务发现机制:MCP Server 通过 @mcp.tool() 等装饰器实现工具注册和服务发现,自动生成工具描述的 JSON Schema,相比原生 Function Calling 减少了开发者手动编写工具描述的工作量
      • 执行环境隔离:工具实际运行在 MCP Server 端,与 LLM 客户端分离,这种架构既保证了敏感数据安全(如 API 密钥不暴露给 LLM 提供商),也支持跨语言、跨平台的工具调用
  1. 功能扩展性对比
    1. MCP 不仅包含 Function Calling,还定义了资源访问(如文件读取)、提示模板等扩展能力。其工具调用支持更复杂的场景,例如:
      • 工具调用结果可被持久化存储为上下文资源
      • 支持工具组合调用和异步执行
      • 通过微服务架构实现工具的热插拔
值得注意的是,MCP 的 Function Calling 实现仍依赖底层 LLM 的 function calling 能力,但通过协议层抽象,使得不同模型的调用接口得以统一。例如在 Claude Desktop 和 Cursor 中,虽然底层可能使用不同模型的 function calling 实现,但通过 MCP 协议都能以相同方式调用工具。这种设计既保留了灵活性,又提高了开发效率。

参考

上一篇
构建一个基于图数据库的问答应用 | 🦜️🔗 LangChain
下一篇
从零开始理解LLM