你用 LLM 构建过应用程序。你玩过代理。也许你还使用过 LangChain、AutoGen 或 OpenAI 的 Assistants API。这些模型的推理、理解和生成能力令人印象深刻,难道不是吗?但是,当你的代理需要做一些实际的事情时,比如检查数据库、从 CRM 读取数据或获取 Google 文档,事情就开始变得一团糟了。突然之间,你需要
- 为每个 API 编写自定义封装程序、
- 手动决定在提示中输入哪些数据,以及
- 与令牌限制和陈旧上下文作斗争。
这就是模型上下文协议(MCP)的用武之地。MCP 不是一个新的“框架”,而是一个开放标准,可以帮助人工智能助理和代理以简单、可重用的方式连接到现实世界的数据和工具。在本教学中,我们将了解什么是 MCP、如何使用它以及它为何如此流行,同时探索它的应用。
什么是MCP?
模型上下文协议(MCP)是 Claude 的母公司 Anthropic 于 2024 年 11 月推出的一项强大的开放标准。它允许 Claude 或 GPT 等大型语言模型 (LLM) 以结构化、安全和可扩展的方式无缝访问外部内容,如文档、数据库、工具、本地文件或 API。
MCP 的核心由三个主要部分组成:
- 模型:它指的是对输入做出响应的 LLM(如 Claude 或 GPT-4)。
- 上下文:它是模型做出有意义响应所需的附加信息。这些信息的来源可以是文档、PDF、提示或数据库条目。
- 协议(Protocol):它代表一套规则,可让模型从结构化来源访问和使用上下文。
MCP如何工作?
就其本质而言,MCP 规范了客户端和服务器之间的通信,无需定制代码或手动上传数据。对于不同的技术,客户端和服务器可能有不同的含义,但对于 MCP 来说,它们是指
- 客户端:这是 LLM 响应您的界面。它可以是 Claude 的桌面应用程序、您的集成开发环境或聊天机器人。
- 服务器:这是保存上下文的系统或数据源(本地或远程),例如 Google Drive、GitHub、Gmail、本地文件、PDF 等。
当你提出问题或下达命令时,客户端会向服务器发送请求,以获取相关信息。然后,服务器提供必要的上下文(如文件、电子邮件或数据库),客户端利用这些上下文给你回复或完成任务。通过这一过程,人工智能可以高效地处理实时动态数据。
因此,有了 MCP,客户端(LLM 接口)可以自动发现可用的服务器(数据源),并根据您的查询请求特定信息。
为什么需要MCP?
MCP 就像 LLM 的通用连接器,可以让 LLM
- 查找可用的工具(如文件、日历或文档)。
- 了解每个工具的功能(如“读取 PDF”、“统计文件”、“保存聊天记录”)。
- 直接使用这些工具,无需为每个工具编写任何特殊代码。
- 获得简洁、结构化的结果,以便更好地回答你的问题。
因此,无需你上传文件或复制数据到提示符,LLM 只需自动访问所需的内容。无论是读取 Notion 文档、查询数据库还是检索 GitHub 问题,MCP 都能将其转化为无缝、可重复使用的工作流程。
如何使用MCP?
在本教程中,我们将使用 MCP 通过 Python 将 Claude 桌面应用程序(客户端)连接到本地文件和数据。然后,我们将使用外部数据作为上下文来执行以下 4 项任务:
- 创建自定义问候语工具
- 计算桌面上的文件数量
- 将与 Claude 的聊天保存到本地系统中
- 使用本地 PDF 文档向 Claude 提问
要求
要执行以上 4 项任务,请确保您具备以下条件
- 安装了 Python 3.11+ 的系统
- Claude 桌面应用程序(免费版或专业版)
- 基本熟悉 Python
- VS Code 或任何集成开发环境
- 一些本地文档(如休假政策之类的 PDF 文件)
一次性设置
在开始执行任务之前,您需要执行以下几项一次性任务,以确保顺利完成所有 4 项任务。
创建 Python 环境
强烈建议创建一个独立的 Python 环境来执行这些任务。如果使用的是 conda 环境,可以通过执行以下命令来实现:
conda create ~n mcp python==3.11
安装 MCP 库
由于我们使用的是 Python,因此必须加入 Python 代码文件。为此,请编写并执行以下命令:
pip install mcp
除了 Python 之外,代码文件还可以使用 Typescript、Java 或 Kotlin。您可以在 MCP 文档中了解更多相关信息。
下载 Claude 桌面应用程序
要下载应用程序,请访问 https://claude.ai/download 并下载适用于各自系统的应用程序。安装后,可能需要几秒钟才能启动。这完全正常。虽然您可以使用 Claude 的免费计划来构建 Claude MCP,但该计划在实验时有使用限制,而且往往不方便使用。因此,最好使用付费订阅计划。
设置配置文件
每个客户端的配置文件都是独一无二的。由于我们使用的是 Claude 的桌面应用程序,因此需要下载 Claude 的配置文件。为此,请:
- 进入“Claude Settings”。
- 然后转到“Developer”部分。
- 点击“Claude Settings”。
- 查找 “laude_desktop_config.json”。如果该文件不存在,请创建同名文件。
该文件将您的工具(Python 脚本)映射到 Claude,每次完成任务后您都要更新该文件。现在我们已经完成了所有的安装和下载工作,让我们开始执行任务。
任务 1:创建自定义问候语工具
在这项任务中,我们将创建一个工具,每当提示 “嗨”或 “你好”时,它就会为您创建个性化的问候语。
Step 1:创建一个新的Python文件
在这里,我创建了一个名为“greeter.py”的新文件。
from mcp.server.fastmcp import FastMCP// FAST MCP is just an easier way to build a server # Create an MCP server named "Greeter" mcp = FastMCP("Greeter") @mcp.tool() def greet() -> str: """Return this welcome message, when greeted with "Hi", "Hey" or "Hello".""" return "Hey <add your own name>, Welcome to the world of MCPs!" if __name__ == "__main__": mcp.run()
代码说明:
该代码创建了一个 MCP 服务器,用于读取问候语请求并以个性化信息作出响应。
- 该函数使用一个装饰器来告诉服务器在提示“Hi”、“Hey”或 “Hello”时如何回应。
- 我们向 MCP 服务器发出的命令会与 LLM 共享,而 LLM 可能会生成与我们向服务器发出的相同或类似的响应。
- 您得到的响应可能与您预期的完全不同;这是因为最终输出是由 LLM 生成的。
Step 2:更新配置文件
确保配置文件中绝对没有语法错误。在配置文件中,我们需要三样东西:
- 服务器名称
- Python 程序的位置
- 必须执行的 Python 文件的位置
Step 3:重启Claude桌面应用程序
重启应用程序至关重要,因为
- 它会告诉你代码中的任何错误。错误会被高亮显示,你可以进入“Logs”部分,了解如何纠正这些错误。
- 如果没有检测到错误,该工具就会注册到 Claude 桌面应用程序,你就可以在应用程序中访问它。
- 重启应用程序后,就可以访问最新的集成。因此,每次更新或更改代码时都需要这样做。
Step 4:在应用程序中向Claude说Hi
只需通过应用程序向 Claude 说一声“Hi”,它就会用你的工具向你打招呼!
向 Claude 桌面应用程序说 “嗨”后,会弹出一个窗口,要求您允许应用程序使用您刚刚创建的工具。点击 “Allow tool for this chat”。目前,每次在指定聊天中调用工具时,您都必须允许该工具在聊天中使用。
一旦获得许可,您就可以从桌面应用中获得响应。
任务 2:计算桌面上的文件数
该工具将计算桌面上的文件数量,并在你询问 Claude 时返回总数。
Step 1:创建一个新的Python文件
在这里,我要创建一个名为 file_counter.py 的文件
from mcp.server.fastmcp import FastMCP import os # Create an MCP server named "FileCounter" mcp = FastMCP("FileCounter") @mcp.tool() def count_desktop_files() -> str: """Count the number of files on the desktop""" desktop_path = os.path.expanduser("~/Desktop") # Gets desktop path (e.g., /Users/apoorv/Desktop) try: # List all items in desktop directory, filter to files only files = [f for f in os.listdir(desktop_path) if os.path.isfile(os.path.join(desktop_path, f))] file_count = len(files) return f"There are {file_count} files on your desktop." except Exception as e: return f"Error counting files: {str(e)}" if __name__ == "__main__": mcp.run()
代码说明:
这段代码设置了一个 MCP 服务器,用于扫描桌面目录、计算文件数量并返回计数。该函数使用 Python 的 os 库过滤目录,只计算文件数(不计算文件夹数)。
Step 2:更新配置文件
按照上述步骤操作,确保没有任何多余文件。
Step 3:重启Claude桌面应用程序
按照上述步骤操作。
Step 4:询问Claude
向 Claude Desktop 应用程序发出以下提示:How many files are there on my desktop?
然后会弹出允许使用该聊天工具的窗口。批准后,你将根据系统中的文件数量获得输出结果。
任务 3:将对话保存为文本文件
通过该工具,Claude 可以将正在进行的对话保存到桌面上的 .txt 文件中。
Step 1:创建一个新的Python文件
为此,我要创建一个名为 conversation_saver.py 的新文件。
from mcp.server.fastmcp import FastMCP import os from datetime import datetime mcp = FastMCP("ConversationSaver") @mcp.tool() def save_conversation(conversation: str) -> str: """Save the current conversation to a text file on the desktop""" desktop_path = os.path.expanduser("~/Desktop") timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") file_path = os.path.join(desktop_path, f"claude_chat_{timestamp}.txt") try: with open(file_path, "w") as f: f.write(conversation) return f"Conversation saved at: {file_path}" except Exception as e: return f"Error saving conversation: {str(e)}" if __name__ == "__main__": mcp.run()
代码说明:
该代码创建了一个 MCP 服务器,可将正在进行的对话保存到桌面上的文本文件中,并用时间戳命名。它使用 Python 的 datetime 生成唯一的文件名,并使用 os 库将内容保存到文本文件中。
Step 2:更新配置文件
确保配置文件中绝对没有语法错误,列表中也没有任何多余的文件。
Step 3:重启Claude桌面应用程序
要检查代码中是否有任何错误,请在编写代码后重启应用程序。任何错误都会在此步骤后高亮显示,您可以进行更正。如果没有错误,您的工具就会注册到 Claude 应用程序中,之后您就可以直接从那里访问它了。
Step 4:保存聊天
我给 Claude 应用程序一个提示:What is a RAG system
这一次,它不会访问任何工具;因为到目前为止,我们还没有为这类查询创建任何工具。因此,该应用程序不会向您请求任何权限,而是像人工智能聊天机器人通常做的那样继续。它会根据训练信息生成输出结果。
现在,我给该程序第二次提示:Save this chat
Claude 会提示您允许使用该工具,然后将完整的对话保存到您的桌面上,并标注时间戳。
您可以在桌面上打开 .txt 文件,查看整个交流过程。
在这里查看收到的输出结果。
任务 4:询问有关本地PDF的问题
该工具可让 Claude 访问本地系统中的文档(可以是 word doc、pdf 或 ppt),并回答其中的问题,而无需手动上传。在这项任务中,我将提示一些有关公司休假政策的问题;我的桌面上就有该政策的 pdf 文档。
Step 1:创建一个新的Python文件
在这项任务中,我要创建一个名为 leave_policy_reader.py 的新文件。
from mcp.server.fastmcp import FastMCP import os import PyPDF2 # For PDF text extraction mcp = FastMCP("SmartContext") # Hardcoded path to your leave policy PDF (edit this to your file’s location) LEAVE_POLICY_PDF = "/Users/apoorv/Desktop/AV/Code/MCP/leave_policy.pdf" @mcp.tool() def fetch_context(query: str) -> str: """Fetch content from a leave policy PDF for leave-related queries""" query_lower = query.lower() # Only process if "leave" is in the query if "leave" not in query_lower: return "This tool only answers leave-related questions. Ask about leaves!" if not os.path.exists(LEAVE_POLICY_PDF): return f"Error: Leave policy PDF not found at {LEAVE_POLICY_PDF}!" try: # Read the PDF with open(LEAVE_POLICY_PDF, "rb") as f: pdf_reader = PyPDF2.PdfReader(f) content = "" for page in pdf_reader.pages: extracted_text = page.extract_text() if extracted_text: content += extracted_text + "\n" if not content: return "Error: No text could be extracted from the leave policy PDF!" # Return the content with the query for Claude return (f"Using context from {LEAVE_POLICY_PDF}:\n\n" f"Content:\n{content}\n\n" f"Query: {query}\n\n" f"Please answer based on the content above.") except Exception as e: return f"Error reading leave policy PDF: {str(e)}" if __name__ == "__main__": mcp.run()
代码说明:
该代码构建了一个 MCP 服务器,用于读取 PDF 文档(休假政策)并回答与休假相关的询问。它使用 PyPDF2 从 PDF 中提取文本,并根据文档内容做出响应。只有当查询与“休假”有关时,它才会被激活。
Step 2:更新配置文件
与前一项任务相同。
Step 3:重启Claude桌面应用程序
与上一任务相同。
Step 4:询问Claude
为了测试这个工具,我在 Claude 应用程序中添加了以下提示:Can I take half day leave?
Claude 会处理该提示,意识到它需要访问我们创建的工具,并提示我们授予它访问该工具的权限。
一旦调用该工具,它就会从休假政策文件和原始查询中汇编信息。然后,它将把这些信息反馈给 claude LLM,并要求它根据这些信息作出回答。为此,该工具将实时读取您的 PDF 文件,并将信息共享给 LLM。
最后,您将得到基于休假政策的回复。
这样,您就可以创建自定义工具来访问系统中的不同文件,而无需反复上传文件!
有关如何使用 MCP 框架增强 Claude Desktop 的全部代码和更多详情,请点击此处。
使用MCP的优势
经过上述亲身实践,我们就更容易回答这个问题了。使用模型上下文协议:
- 无需手动上传数据或定制集成。
- 允许 LLM 与本地系统和云系统协同工作。
- 只要使用相同的协议,任何客户端与服务器的工作方式都是标准化的。
- 支持 Python、TypeScript、Kotlin 和 Java SDK。
MCP有哪些可能性?
MCP 本身带来了大量的机会和可能性。以下是它增强现有工作流程的几种方法:
- 多步骤项目:有了 MCP,人工智能系统可以无缝协调多个平台上的任务,如规划活动或管理项目,而无需复杂的集成。
- 真实世界感知:它允许人工智能与智能环境、物联网设备和操作系统功能互动,使人工智能更加主动和直观。
- 协作代理:使用 MCP,多个专门的人工智能代理可以协同工作,交换信息并动态协作,而无需直接集成。
- 个人人工智能助理:利用 MCP,可以创建深度个性化的助手,安全地访问个人数据和设备,而不会将敏感信息暴露给第三方。
- 增强客户支持:结合 MCP,人工智能系统可通过访问实时数据提供情境感知型客户服务,从而提高响应质量和效率。
- 文档处理:它允许人工智能模型根据本地或云端存储的文档(如合同或法律政策)进行读取、处理和响应。
这些只是 MCP 在软件开发、医疗保健、金融等各个领域无限可能性中的一小部分!
我们为什么突然谈论MCP?
到目前为止,我们已经介绍了有关 MCP 的一切–从它是什么到如何使用它、为什么要使用它以及它的应用。但还有一个问题需要回答: 为什么在 MCP 推出近 5 个月后,我们和全世界都在谈论它?
这主要有三个原因:
- 需要人工智能代理:自去年以来,市场上出现了人工智能代理的浪潮。虽然这些代理已经变得更加智能,但它们仍然难以很好地与现实世界的数据和工具(如日历、电子邮件或数据库)协同工作。MCP 通过标准化人工智能与这些工具的连接方式来解决这个问题,使它们更容易协同工作。
- 社区动力:Cursor、Continue、Source Graph 等热门公司都是 MCP 客户端,而 Github、One Drive、Google Drive 等公司也在其服务器列表中。随着越来越多的公司加入 MCP 世界,这两个列表都在与日俱增。
- 模式识别和开源:MCP 是开源的,可与任何人工智能模型配合使用。无论您使用的是 Claude、GPT-4 还是其他任何人工智能系统,MCP 都能将它们与现实世界的数据和工具连接起来。与封闭系统不同,您不会被锁定在一个特定的模型或服务中。
以上就是为什么全世界都在谈论 MCP 以及为什么它将在未来几个月内掀起波澜的众多原因中的几个。
小结
模型上下文协议(MCP)通过提供与工具、数据库和本地文件的无缝集成,正在彻底改变人工智能系统与现实世界的交互方式。有了 MCP,人工智能代理现在可以毫不费力地访问相关数据并执行复杂任务,而无需定制代码或手动集成。无论是改善客户服务、实现工作流程自动化,还是增强个人人工智能助手,MCP 都能为人工智能模型释放出强大的新可能性,使其更加高效、直观和适应性更强。随着企业和开发人员不断采用 MCP,它在增强人工智能驱动系统方面的潜力只会越来越大,从而为各行各业带来新的机遇。
常见问题
Q1. 什么是模型上下文协议(MCP)?
A. MCP 是一种开放标准,可让人工智能模型无缝、高效地访问本地文件、文档和数据库等现实世界的数据。
Q2. MCP 如何工作?
A. MCP 将人工智能客户端(如 Claude 或集成开发环境)与服务器(本地或远程数据源)连接起来,允许人工智能请求和使用上下文,而无需手动输入或自定义编码。
Q3. 我需要付费订阅 Claude 才能使用 MCP 吗?
A. 虽然免费版 Claude 可以使用,但经常会遇到速率限制,因此不太方便。付费版本可以消除这些限制。
Q4. 使用 MCP 有哪些基本要求?
A. 您需要 Python 3.11 以上、Claude 桌面应用程序、VS Code 等集成开发环境和一些本地任务文档。
Q5. MCP 可以使用任何人工智能模型吗?
A. 是的,MCP 与模型无关,可用于任何人工智能模型,包括 Claude、GPT-4 和开源 LLM。
Q6. 使用 MCP 可以连接哪些工具?
A. MCP 允许人工智能访问各种工具,如 Google Drive、GitHub、Notion、电子邮件和本地文件。
Q7. 如何为 Claude 设置配置文件?
A. 您需要进入开发人员部分下的 Claude 设置,然后创建一个 claude_desktop_config.json 文件,将您的工具映射到 Claude 的界面。
评论留言