type
status
date
slug
summary
tags
category
icon
password
comment
Status
当前的AI模型通常受限于数据孤岛的困境,即模型只能访问有限的数据集,这大大限制了它们的应用范围和准确性。为了克服这一障碍,Anthropic推出了Model Context Protocol(MCP),这是一种开放标准,旨在解决大型语言模型与外部数据源和工具之间的通信难题。通过MCP,模型可以安全地访问和操作本地及远程数据,从而实现更为灵活和强大的功能。
一、MCP协议的核心特点
- 架构设计
基于客户端-服务器模型,包含以下组件:
• MCP主机(如Claude Desktop、IDE插件):发起请求的应用程序。
• MCP客户端:连接主机与服务器。
• MCP服务端:暴露特定功能的轻量级服务(如访问文件系统、API)。
• 数据源:本地文件、数据库或远程服务。
客户端与主机有时候是一起的都存在于用户的本地,甚至主机、客户端、服务端都在用户本地( Claude 桌面版)。
- 技术实现
• 采用JSON-RPC 2.0作为通信协议,支持请求、响应、错误和通知四类消息类型。
• 内置权限管理、数据缓存和异步处理机制,优化数据传输效率和安全性。
- 应用场景
• 让AI直接操作本地文件(如整理会议记录)、调用API(如查询天气)、整合多源数据(如跨平台分析)。
二、MCP 工作流程

三、如何创建MCP工具以及如何提供服务
服务端
对于MCP 服务器主要提供三种能力
- 资源(Resources)
- 工具(Tools)
- 提示词(Prompts)
这里主要看一下如何创建工具:
1. 初始化服务器实例
FastMCP 类使用 Python 类型提示和文档字符串自动生成工具定义,简化创建和维护 MCP 工具的难度。
2. 定义辅助函数
添加查询和格式化国家气象服务 API 数据的辅助函数:
3. 工具执行
工具执行处理器负责实际执行每个工具的逻辑
4. 启动服务
创建客户端
1. 初始化客户端类
2. 连接服务器
3. 大模型选择调用工具
其实就是 function call 返回调用工具列表,并调用服务端的工具,拿到工具调用结果后再交给大模型输出。
4. 交互式聊天
5. 客户端启动
四、与 Function Calling 对比
MCP 大模型与外部世界交互的通用协议,而 Function Calling 是大模型与外部交互的约束机制(API 接口)。
- MCP 对 Function Calling 的整合与标准化。MCP 协议通过定义标准化的工具调用流程,将 Function Calling 作为其核心交互机制之一。当 LLM 需要调用外部功能时,MCP Client 会从 Server 获取工具列表,将工具描述与用户查询一起发送给模型,模型通过 Function Calling 机制决定是否调用工具,最终通过 MCP Server 执行具体操作
- 技术架构层面的差异
- 定位层级不同:Function Calling 是 LLM 平台提供的 API 接口(如 OpenAI 的 function calling),而 MCP 是覆盖整个工具调用生命周期的通信协议
- 服务发现机制:MCP Server 通过
@mcp.tool()
等装饰器实现工具注册和服务发现,自动生成工具描述的 JSON Schema,相比原生 Function Calling 减少了开发者手动编写工具描述的工作量 - 执行环境隔离:工具实际运行在 MCP Server 端,与 LLM 客户端分离,这种架构既保证了敏感数据安全(如 API 密钥不暴露给 LLM 提供商),也支持跨语言、跨平台的工具调用
- 功能扩展性对比
- 工具调用结果可被持久化存储为上下文资源
- 支持工具组合调用和异步执行
- 通过微服务架构实现工具的热插拔
MCP 不仅包含 Function Calling,还定义了资源访问(如文件读取)、提示模板等扩展能力。其工具调用支持更复杂的场景,例如:
值得注意的是,MCP 的 Function Calling 实现仍依赖底层 LLM 的 function calling 能力,但通过协议层抽象,使得不同模型的调用接口得以统一。例如在 Claude Desktop 和 Cursor 中,虽然底层可能使用不同模型的 function calling 实现,但通过 MCP 协议都能以相同方式调用工具。这种设计既保留了灵活性,又提高了开发效率。
参考
- Author:小灰
- URL:https://blog.opencontent.cn//article/llm-mcp
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!