微信扫码
添加专属顾问
我要投稿
探索MCP在AI模型中的革命性应用,从小白到专家的快速入门指南。 核心内容: 1. MCP定义与起源,理解其在AI领域的核心价值 2. MCP如何简化AI应用程序的开发与集成 3. 实例演示MCP的开发过程与实际应用
READ⏰: 20min (read) + 30min (practice)
最近 MCP 这个关键词逐渐活跃在我所浏览的一些文章及评论区中。突然发现我对它仅有粗糙的理解,我决定深入学习并记录一下。
在阅读这篇文章前,我也简单地浏览了现有介绍 MCP 的文章。我发现大部分文章停留在“翻译” https://modelcontextprotocol.io/ 网站中的内容,或者花时间在绝大部分用户不关心的技术细节上(还有一些纯 AI 文)。
因此,我将从使用者的角度出发,分享实用内容,并以一个示例展示 MCP 的开发过程与实际应用作为结尾。本篇旨在回答以下三个问题:
当然,一篇文章远远不足以讲透 MCP 的所有概念,只能尽力萃取最重要的内容供大家阅读,欢迎讨论。
MCP 起源于 2024 年 11 月 25 日 Anthropic 发布的文章:Introducing the Model Context Protocol[1]。
MCP (Model Context Protocol,模型上下文协议)定义了应用程序和 AI 模型之间交换上下文信息的方式。这使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型(一个中间协议层),就像 USB-C 让不同设备能够通过相同的接口连接一样。MCP 的目标是创建一个通用标准,使 AI 应用程序的开发和集成变得更加简单和统一。
所谓一图胜千言,我这里引用一些制作的非常精良的图片来帮助理解:
可以看出,MCP 就是以更标准的方式让 LLM Chat 使用不同工具,更简单的可视化如下图所示,这样你应该更容易理解“中间协议层”的概念了。Anthropic 旨在实现 LLM Tool Call 的标准。
? 为保证阅读的流畅性,本文将 MCP Host / Client / Server 的定义后置。初学者/用户可暂不关注这些概念,不影响对 MCP 的使用。
我认为 MCP 的出现是 prompt engineering 发展的产物。更结构化的上下文信息对模型的 performance 提升是显著的。我们在构造 prompt 时,希望能提供一些更 specific 的信息(比如本地文件,数据库,一些网络实时信息等)给模型,这样模型更容易理解真实场景中的问题。
想象一下没有 MCP 之前我们会怎么做?我们可能会人工从数据库中筛选或者使用工具检索可能需要的信息,手动的粘贴到 prompt 中。随着我们要解决的问题越来越复杂,手工把信息引入到 prompt 中会变得越来越困难。
为了克服手工 prompt 的局限性,许多 LLM 平台(如 OpenAI、Google)引入了 function call
功能。这一机制允许模型在需要时调用预定义的函数来获取数据或执行操作,显著提升了自动化水平。
但是 function call 也有其局限性(我对于 function call vs MCP 的理解不一定成熟,欢迎大家补充),我认为重点在于 function call 平台依赖性强,不同 LLM 平台的 function call API 实现差异较大。例如,OpenAI 的函数调用方式与 Google 的不兼容,开发者在切换模型时需要重写代码,增加了适配成本。除此之外,还有安全性,交互性等问题。
数据与工具本身是客观存在的,只不过我们希望将数据连接到模型的这个环节可以更智能更统一。Anthropic 基于这样的痛点设计了 MCP,充当 AI 模型的"万能转接头",让 LLM 能轻松得获取数据或者调用工具。更具体的说 MCP 的优势在于:
对于用户来说,我们并不关心 MCP 是如何实现的,通常我们只考虑如何更简单地用上这一特性。
具体的使用方式参考官方文档:For Claude Desktop Users[2]。这里不再赘述,配置成功后可以在 Claude 中测试:Can you write a poem and save it to my desktop?
Claude 会请求你的权限后在本地新建一个文件。
并且官方也提供了非常多现成的 MCP Servers,你只需要选择你希望接入的工具,然后接入即可。
比如官方介绍的 filesystem
工具,它允许 Claude 读取和写入文件,就像在本地文件系统中一样。
这里首先引用官方给出的架构图。
MCP 由三个核心组件构成:Host、Client 和 Server。让我们通过一个实际场景来理解这些组件如何协同工作:
假设你正在使用 Claude Desktop (Host) 询问:"我桌面上有哪些文档?"
整个流程是这样的:你的问题 → Claude Desktop(Host) → Claude 模型 → 需要文件信息 → MCP Client 连接 → 文件系统 MCP Server → 执行操作 → 返回结果 → Claude 生成回答 → 显示在 Claude Desktop 上。
这种架构设计使得 Claude 可以在不同场景下灵活调用各种工具和数据源,而开发者只需专注于开发对应的 MCP Server,无需关心 Host 和 Client 的实现细节。
在学习的过程中,我一直好奇一个问题:Claude(模型)是在什么时候确定使用哪些工具的呢?好在 Anthropic 为我们提供了详细的解释[6]:
当用户提出一个问题时:
MCP Server 是由 Claude 主动选择并调用的。有意思的是 Claude 具体是如何确定该使用哪些工具呢?以及是否会使用一些不存在的工具呢(幻觉)?
MCP (Model Context Protocol) 代表了 AI 与外部工具和数据交互的标准建立。通过本文,我们可以了解到:
MCP 还处于发展初期,但其潜力巨大。更重要的是生态吧,基于统一标准下构筑的生态也会正向的促进整个领域的发展。
以上内容已经覆盖了 MCP 的基本概念、价值和使用方法。对于技术实现感兴趣的读者,以下附录提供了一个简单的 MCP Server 开发实践,帮助你更深入地理解 MCP 的工作原理。
READ⏰: 30min
在了解 MCP 组件之后,很容易发现对绝大部分 AI 开发者来说,我们只需要关心 Server 的实现。因此,我这里准备通过一个最简单的示例来介绍如何实现一个 MCP Server。
MCP servers 可以提供三种主要类型的功能:
本教程将主要关注工具(Tools)。
在开始之前,Anthropic 为我们提供了一个基于 LLM 的 MCP Server 的最佳开发实践[7],总结如下:
给出一个 example prompt:
... (这里是已经引入的 domain knowledge)
打造一个 MCP 服务器,它能够:
- 连接到我公司的 PostgreSQL 数据库
- 将表格结构作为资源开放出来
- 提供运行只读 SQL 查询的工具
- 包含常见数据分析任务的引导
剩下的部分也很重要,但是偏重于方法论,实践性较弱,我这里就不展开了,推荐大家直接看官方文档[10]。
本节内容主要参考了官方文档:Quick Start: For Server Developers[11]。你可以选择直接跳过这部分内容或者进行一个速读。
这里我准备了一个简单的示例,使用 Python 实现一个 MCP Server,用来统计当前桌面上的 txt 文件数量和获取对应文件的名字(你可以理解为一点用都没有,但是它足够简单,主要是为了难以配置环境的读者提供一个足够短的实践记录)。以下实践均运行在我的 MacOS 系统上。
Step1. 前置工作
Step2. 环境配置
由于我使用的是官方推荐的配置:
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建项目目录
uv init txt_counter
cd txt_counter
# 设置 Python 3.10+ 环境
echo "3.11" > .python-version
# 创建虚拟环境并激活
uv venv
source .venv/bin/activate
# Install dependencies
uv add "mcp[cli]" httpx
# Create our server file
touch txt_counter.py
Question: 什么是
uv
呢和conda
比有什么区别?Answer: 一个用 Rust 编写的超快速 (100x) Python 包管理器和环境管理工具,由 Astral 开发。定位为 pip 和 venv 的替代品,专注于速度、简单性和现代 Python 工作流。
Step3. 构造一个 prompt
"""
... (这里是已经引入的 domain knowledge)
"""
打造一个 MCP 服务器,它能够:
- 功能:
- 统计当前桌面上的 txt 文件数量
- 获取对应文件的名字
要求:
- 不需要给出 prompt 和 resource 相关代码。
- 你可以假设我的桌面路径为 /Users/{username}/Desktop
Step4. 实现 MCP Server
以下代码由 Claude 3.7 直接生成。当然,这主要是因为我的需求足够简单,当你需要实现一个复杂的 MCP Server 时,你可能需要多步的引导和 Debug 才能得到最终的代码。
import os
from pathlib import Path
from mcp.server.fastmcp import FastMCP
# 创建 MCP Server
mcp = FastMCP("桌面 TXT 文件统计器")
@mcp.tool()
defcount_desktop_txt_files() -> int:
"""Count the number of .txt files on the desktop."""
# Get the desktop path
username = os.getenv("USER") or os.getenv("USERNAME")
desktop_path = Path(f"/Users/{username}/Desktop")
# Count .txt files
txt_files = list(desktop_path.glob("*.txt"))
returnlen(txt_files)
@mcp.tool()
deflist_desktop_txt_files() -> str:
"""Get a list of all .txt filenames on the desktop."""
# Get the desktop path
username = os.getenv("USER") or os.getenv("USERNAME")
desktop_path = Path(f"/Users/{username}/Desktop")
# Get all .txt files
txt_files = list(desktop_path.glob("*.txt"))
# Return the filenames
ifnot txt_files:
return"No .txt files found on desktop."
# Format the list of filenames
file_list = "\n".join([f"- {file.name}"for file in txt_files])
returnf"Found {len(txt_files)} .txt files on desktransform: translateY(\n{file_list}"
if __name__ == "__main__":
# Initialize and run the server
mcp.run()
任务非常简单,只需要调用非常基本的 os
就可以完成。
Step5. 测试 MCP Server
(官方没有这一步,但是我非常推荐大家这么做)
$ mcp dev txt_counter.py
Starting MCP inspector...
Proxy server listening on port 3000
? MCP Inspector is up and running at http://localhost:5173 ?
之后进入到给出的链接中,你大概能按下图进行操作:
如果成功,你应该能像我一样看到对应的输出(Tool Result
)~
Step6. 接入 Claude
最后一步就是把我们写好的 MCP 接入到 Claude Desktop 中。流程如下:
# 打开 claude_desktop_config.json (MacOS / Linux)
# 如果你用的是 cursor 或者 vim 请更换对应的命令
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
在配置文件中添加以下内容,记得替换 /Users/{username}
为你的实际用户名,以及其他路径为你的实际路径。
{
"mcpServers":{
"txt_counter":{
"command":"/Users/{username}/.local/bin/uv",
"args":[
"--directory",
"/Users/{username}/work/mcp-learn/code-example-txt",// 你的项目路径(这里是我的)
"run",
"txt_counter.py"// 你的 MCP Server 文件名
]
}
}
}
uv
最好是绝对路径,推荐使用 which uv
获取。配置好后重启 Claude Desktop,如果没问题就能看到对应的 MCP Server 了。
Step7. 实际使用
接下来,我们通过一个简单的 prompt 进行实际测试:
能推测我当前桌面上 txt 文件名的含义吗?
它可能会请求你的使用权限,如图一所示,你可以点击 Allow for This Chat
看起来我们 MCP Server 已经正常工作了
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-03-10
1次搭建完胜1亿次编码,MCP硅谷疯传!Anthropic协议解锁智能体「万能手」
2025-03-10
AI代理技术发展趋势与挑战
2025-03-10
有关智能体/Agent,和上下文协议/MCP的一些概念,以及为什么它重要
2025-03-10
通俗讲解DeepSeek中的GRPO:强化学习里的神奇算法
2025-03-10
AI智能体新秀 Manus失手泄底牌:Claude Sonnet沙盒代码大曝光!
2025-03-10
告别Agentic工作流?推理模型+行动链学习=Agent模型
2025-03-10
大模型时代,为什么模型都是多少B?
2025-03-10
什么是模型上下文协议(MCP)?它如何比传统API更简单地集成AI?
2024-08-13
2024-06-13
2024-09-23
2024-08-21
2024-05-28
2024-07-31
2024-08-04
2024-04-26
2024-07-09
2024-09-17
2025-03-10
2025-03-10
2025-03-08
2025-03-08
2025-03-07
2025-03-07
2025-03-05
2025-03-05