详细教程:使用MCP与Python轻松完成小型项目实战
解锁 MCP:AI 与外部世界的高效连接之道。
微信搜索关注《AI科技论谈》
人工智能的世界在持续发展,几乎每天我们醒来都会看到新的消息。今天我们带大家了解的是MCP(模型上下文协议,Model Context Protocol)。
一、什么是协议?
在计算机领域,协议是一组规则,它决定了两个系统如何相互通信。协议规范着计算机网络中的数据传输、互联网通信,以及软件系统之间的交互。
例如:
HTTP(超文本传输协议,Hypertext Transfer Protocol):用于实现网站与浏览器之间的通信。
TCP/IP(传输控制协议/网际协议,Transmission Control Protocol/Internet Protocol):定义了互联网上数据包的路由方式。
JSON – RPC(远程过程调用,Remote Procedure Call):一种允许以JSON格式进行数据交换的协议。
二、什么是模型上下文协议(MCP)?
模型上下文协议(MCP)是一种开放协议,它能让大语言模型(LLMs)以标准化的方式与外部数据源和工具集成。该协议由Anthropic开发,使AI模型能够轻松地与各种工具和数据源协同工作。
MCP可以类比为USB – C接口,USB – C已成为设备连接的全球标准。正如USB – C为不同设备提供了通用连接点一样,MCP让人工智能系统能够以标准方式与数据和工具进行通信。
三、为什么要使用MCP?
MCP的功能与API(应用程序编程接口)类似,但它的应用潜力更为广泛。传统的API在每次集成时都需要单独进行实现,而通过一次MCP集成就能访问多种不同的数据源和工具。
MCP还支持双向通信。也就是说,人工智能模型不仅能够接收数据,还可以触发特定的操作。
四、MCP的架构
MCP基于简单的客户端 – 服务器架构。一个应用程序可以同时连接多个MCP服务器。该架构由以下组件构成:
MCP主机:作为MCP主机的应用程序用于访问数据或工具。
MCP客户端:主机内的客户端与MCP服务器建立一对一的连接。
MCP服务器:轻量级的服务器,通过MCP提供特定功能,并且可以连接本地或远程数据源。
本地数据源:MCP服务器能够访问的数据,例如文件和数据库。
远程服务:MCP服务器可以访问的基于外部互联网的API。
五、连接生命周期
-
初始化
客户端向服务器发送初始化请求,请求中包含自身的协议版本和功能信息。
服务器响应,返回自身的协议版本和功能信息。
客户端发送初始化完成通知。
连接建立,开始消息交换。
-
消息交换:连接建立后,客户端和服务器之间可以相互发送请求和响应消息,也可以传输单向消息。
-
终止:客户端或服务器都可以终止连接。
六、MCP的核心特性
MCP使用JSON – RPC 2.0消息格式在客户端和服务器之间进行通信。该协议的一些主要特性包括:
资源:提供给用户或人工智能模型的数据和内容。
提示:为用户预先定义的消息和工作流程。
工具:人工智能模型可以运行的功能。
七、实践项目
在这个项目中,我们将构建一个从网站获取最新新闻的架构。
文档中建议使用uv包管理器,而非pip。因此,你可以打开终端,在MacOs和Linux系统中使用下面的第一条命令进行下载,在Windows系统中使用第二条命令下载。
curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
完成下载后,别忘了重启终端。
接着,为项目创建一个目录。为此,在你希望创建项目的目录中打开终端,并运行以下命令:
第一条命令在当前目录下创建一个项目文件。
第二条命令让你进入该文件目录。
uv init mcp-server-project
cd mcp-server-project
然后,创建虚拟环境并安装所需的包。这里我们使用uv包管理器。
# 创建虚拟环境
uv venv
# 在MacOs/Linux系统中激活虚拟环境
source.venv/bin/activate
# 在Windows系统中激活虚拟环境
.venv\Scripts\activate
# 安装库
uv add "mcp[cli]" httpx bs4 dotenv
现在,我们需要在VS Code中打开创建的文件夹。打开后,我们会看到左侧的文件结构已准备就绪。
接下来,我们要更新main.py
文件。
from mcp.server.fastmcp import FastMCP
from dotenv import load_dotenv
import httpx
import os
from bs4 import BeautifulSoup
import json
load_dotenv()
# 初始化服务器
mcp = FastMCP("tech_news")
USER_AGENT = "news-app/1.0"
NEWS_SITES = {
"arstechnica": "https://arstechnica.com"
}
async def fetch_news(url: str):
"""从指定的新闻网站抓取并总结最新新闻。"""
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, timeout=30.0)
soup = BeautifulSoup(response.text, "html.parser")
paragraphs = soup.find_all("p")
text = " ".join([p.get_text() for p in paragraphs[:5]])
return text
except httpx.TimeoutException:
return "Timeout error"
@mcp.tool()
async def get_tech_news(source: str):
"""
从特定的科技新闻源获取最新新闻。
参数:
source:新闻源名称(例如,"arstechnica"或"techcrunch")。
返回:
最新新闻的简要摘要。
"""
if source not in NEWS_SITES:
raise ValueError(f"Source {source} is not supported.")
news_text = await fetch_news(NEWS_SITES[source])
return news_text
if __name__ == "__main__":
mcp.run(transport="stdio")
上述代码能够从指定的网站获取最新新闻,其工作步骤如下:
-
首先,进行必要的导入。
-
此代码未使用API,但如果你使用API,可以通过
load_dotenv()
获取密钥。 -
使用
FastMCP
初始化服务器。 -
"news – app/1.0"是我们指定的应用名称。
-
NEWS_SITES
包含了要从中获取新闻的网站。如果你愿意,可以在此处添加更多网站。 -
fetch_news()
函数从指定网站获取新闻。 -
get_tech_news()
函数是我们的工具。通过在函数上添加@mcp.tool()
装饰器,我们将其指定为一个工具。函数中的文档字符串对于模型理解该工具的工作方式非常重要。 -
我们的MCP服务器通过
mcp.run(transport="stdio")
运行。不过,我们不会通过VS Code运行服务器。
Claude桌面应用程序可以直接运行我们准备好的MCP服务器,因此我们将使用Claude桌面应用程序。你可以从这里下载:https://claude.ai/download 。
然后,我们打开设置并进入开发者设置。在此处点击“编辑配置”。
点击“编辑配置”后,会为我们打开一个文件夹。在这个文件夹中,我们使用文本编辑器打开claude_desktop_config.json
文件,在其中输入服务器信息。
这个文件包含了Claude运行我们服务器的相关设置。有几点需要注意:
-
mcp - server - project
是我们创建的项目文件名称。如果你用了不同的名称,可以在此处更改。 -
你需要在“命令”部分添加uv包管理器的路径。文档中此部分只写了“uv”,但对我来说这样不行,所以我添加了路径。你可以在终端中运行“which uv”命令来查找路径。
-
你还可以将“args”中的路径更改为你自己的项目路径。为此,你可以在项目目录的终端中运行“pwd”命令获取完整路径。
-
完成修改后保存并关闭文件。
{
"mcpServers": {
"mcp-server-project": {
"command": "/Users/busekoseoglu/.local/bin/uv",
"args": [
"--directory",
"/Users/busekoseoglu/Desktop/PROJELER/LLM Portfolio/mcp-server-project",
"run",
"main.py"
]
}
}
}
我们已经完成了服务器配置,现在可以在Claude桌面应用程序上进行测试。打开Claude桌面应用程序后,如果出现问题,你可以在右上角看到错误弹窗。你需要点击并查看日志文件,以解决错误。如果没有收到错误提示,你应该会看到红色方块中的锤子图标。
点击锤子图标后,它会显示可用的MCP工具,如下所示。
现在进入测试环节,我询问了“Ars Technica上有什么最新新闻?”。屏幕上提示我授权使用该工具。在这里,Claude识别出需要使用工具来获取答案。
授权后,它使用我创建的工具获取答案,并将最新新闻返回给我。
恭喜,你已经使用Python搭建了一个简单的MCP服务器。我通过一个简单的场景来学习其工作原理并展示给你,当然这些应用场景还可以进一步拓展。
推荐书单
《深入浅出机器学习:从数据到AI算法》
《深入浅出机器学习:从数据到大模型》是一本旨在帮助读者系统学习机器学习的著作。本书通过深入浅出的方式,将复杂的机器学习理论和技术讲解得深入浅出。
本书从机器学习的基础开始,为读者提供了对数据处理、特征工程和模型评估等核心概念的全面介绍。读者将学习如何准备和清洗数据,如何选择和构建合适的特征,并学会使用各种评估指标来评估模型性能。
然后,本书深入探讨了常见的机器学习算法和技术。详细解释了线性回归、逻辑回归和神经网络等算法的原理和应用,通过丰富的示例和实践项目,掌握这些算法的实现和调优技巧。
本书聚焦于大规模模型和深度学习,介绍了深度学习的基本原理和常用的深度学习框架,如TensorFlow和PyTorch。读者将学习如何构建深度神经网络,如何进行模型训练和调优,并了解大规模机器学习系统的实现和部署。
5折购买链接:https://item.jd.com/14387333.html
精彩回顾
Python专业级智能体框架Pydantic AI,高效创建生产级智能体
长按访问【IT今日热榜】,发现每日技术热点
作者:AI科技论谈