当前位置: 首页 > web >正文

使用Claude Desktop快速体验MCP servers!

MCP简介

MCP(Model Context Protocol),模型上下文协议,是由美国科技公司Anthropic(Claude就是是由Anthropic公司打造的一系列高性能且智能的AI大语言模型)在2024年11月份开源的一项用于解决LLM与外部数据源和工具之间集成问题的标准化协议。更直白一些的说法就是,MCP为LLM应用标准化了手脚,让LLM可以根据需要获取一切可以连接的数据、直接执行一切可以连接的工具。

引入MCP后的变化[1]:

引入MCP后,核心变化在于如何连接数据和调用工具的方式。MCP定义了一套协议和规范,其中包括MCP的客户端(clients),这些客户端被包裹在AI应用中。而MCP服务器(Server)则与应用分离,如果需要在本地计算机上操作,则需在本地计算机上启动MCP服务器。这样,AI应用便可与服务器通过MCP协议(如JSON RPC)进行通信,以完成数据读取、文件操作等各种动作。

本篇文章是一篇基础且快速的MCP实践博文,因此暂不对MCP的概念、核心架构及其的提出对生成式AI应用发展的影响等做更多深入的介绍,感兴趣的朋友可以阅读以下好文自行学习了解:

[1] 因为Manus爆火的 Claude MCP,90%人的认知可能都是错的

MCP 快速上手(Quick Hands-On)

首先,去官网下载 Claude Desktop,然后我们按照 官方文档 提供给 MCP servers Developers的命令进行基于Python开发&运行 MCP servers环境的安装部署。

实践环境介绍:

机型 Apple M1 Pro
操作系统 macOS Sequoia version 15.5
  1. 打开终端,执行以下命令安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
  1. 重启终端后,查看 uv 版本,验证 uv 已成功安装;
uv --version
uv 0.7.12 (dc3fd4647 2025-06-06)
  1. 初始化一个名为weather的MCP server项目,该项目包含两个服务:获取美国某州的气象预警 & 获取指定经纬度的天气预报;
# 第一次初始化uv项目环境的话,需要使用--no-workspace(否则会报错),用于忽略父目录的 pyproject.toml,直接在 weather 目录下初始化环境
uv init --no-workspace weather
# 进入到执行上一步命令生成的项目目录
cd weather
# 创建 Python 虚拟环境(会在当前目录下生成 .venv 文件夹)
# 需要注意一点,如果你和我一样是使用miniconda进行多python环境的管理,请确保在Python3.10或更高版本的环境下执行以下命令
uv venv
# 激活虚拟环境
source .venv/bin/activate
# 安装 mcp(带 cli 工具)和 httpx 依赖包到当前虚拟环境
uv add "mcp[cli]" httpx
# 创建一个空的 weather.py 文件(用于编写你的 FastMCP 服务器代码)
touch weather.py
  1. 编辑 weather.py 文件,写入拷贝自 MCP 官方 github repo 的如下完整代码(为了方便大家更快熟悉代码,我请github copilot GPT-4.1给关键代码行加上了中文注释);
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP# 初始化 FastMCP 服务器,服务名为 weather
mcp = FastMCP("weather")# 常量:NWS API 基础地址和 User-Agent
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"# 异步请求 NWS API,带异常处理,返回字典或 None
async def make_nws_request(url: str) -> dict[str, Any] | None:"""向 NWS API 发起请求,异常时返回 None。"""headers = {"User-Agent": USER_AGENT,"Accept": "application/geo+json"}async with httpx.AsyncClient() as client:try:response = await client.get(url, headers=headers, timeout=30.0)response.raise_for_status()return response.json()except Exception:return None# 格式化单条气象预警信息为可读字符串
def format_alert(feature: dict) -> str:"""将单条预警 feature 格式化为可读字符串。"""props = feature["properties"]return f"""
Event: {props.get('event', 'Unknown')}
Area: {props.get('areaDesc', 'Unknown')}
Severity: {props.get('severity', 'Unknown')}
Description: {props.get('description', 'No description available')}
Instructions: {props.get('instruction', 'No specific instructions provided')}
"""# 工具函数:获取指定州的气象预警
@mcp.tool()
async def get_alerts(state: str) -> str:"""获取美国某州的气象预警。参数:state - 两位州代码(如 CA, NY)"""url = f"{NWS_API_BASE}/alerts/active/area/{state}"data = await make_nws_request(url)if not data or "features" not in data:return "无法获取预警或无预警信息。"if not data["features"]:return "该州暂无有效预警。"alerts = [format_alert(feature) for feature in data["features"]]return "\n---\n".join(alerts)# 工具函数:获取指定经纬度的天气预报
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:"""获取指定位置的天气预报。参数:latitude - 纬度,longitude - 经度"""# 先获取该点的 forecast 网格接口points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"points_data = await make_nws_request(points_url)if not points_data:return "无法获取该位置的预报数据。"# 从 points 响应中获取 forecast 详细预报 URLforecast_url = points_data["properties"]["forecast"]forecast_data = await make_nws_request(forecast_url)if not forecast_data:return "无法获取详细预报信息。"# 格式化前 5 个时段的预报信息periods = forecast_data["properties"]["periods"]forecasts = []for period in periods[:5]:  # 只显示最近 5 个时段forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""forecasts.append(forecast)return "\n---\n".join(forecasts)if __name__ == "__main__":# 启动 FastMCP 服务器,使用 stdio 作为通信方式mcp.run(transport='stdio')
  1. 在第3步创建的虚拟Python环境下运行 weather.py 代码,若无异常输出,则可进行到下一步;
  2. 打开下载的 Claude Desktop 应用,点击 settings -> Developer -> 点击左下方的 “Edit Config” 按钮;

在这里插入图片描述

  1. 编辑选中的 claude_desktop_config.json 文件,写入以下内容(注意,“command” 字段的值是 uv 的路径,可通过 which uv 获取;);
{"mcpServers": {"weather": {"command": "/Users/xxx/.local/bin/uv","args": ["--directory","/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather","run","weather.py"]}}
}
  1. 写入保存后,重启 Claude Desktop 应用,在对话栏的左下角点击 “Search and tools” 图标,就可以看到识别成功的名为weather的MCP服务;
    在这里插入图片描述
    再点入进去就可以看到服务里包含的两个具体工具,get_alerts() 用于获取美国某州的气象预警 & get_forecast()获取指定经纬度的天气预报;
    在这里插入图片描述

  2. 我们来提问看看实际效果。
    10.1 询问天气:How is the weather in Sacramento?
    在这里插入图片描述
    10.2 获取加利福尼亚州的天气预警:What are the current weather warnings for the state of California?
    在这里插入图片描述

总体效果还是很不错的!
MCP servers对于实力强劲的LLM底座简直是如虎添翼,从此LLM有了标准化的手脚,可以做更多实际又落地、对各行各业有意义和价值的事!

话不多说,一起来探索吧~

MCP相关资源:

  1. 官方文档教程:https://modelcontextprotocol.io/introduction
  2. MCP 官方 servers repo: https://github.com/modelcontextprotocol/servers
  3. MCP官方文档之支持MCP集成的应用列表(MCP Clients):https://modelcontextprotocol.io/clients
  4. MCP Hub: https://github.com/ravitemer/mcp-hub
  5. Awesome MCP Clients
http://www.xdnf.cn/news/14112.html

相关文章:

  • 短剧热浪,席卷海内外。
  • Rust编写Shop管理系统
  • 长春光博会 | 麒麟信安:构建工业数字化安全基座,赋能智能制造转型升级
  • 深入剖析Redis高性能的原因,IO多路复用模型,Redis数据迁移,分布式锁实现
  • Python数据可视化:Seaborn入门与实践
  • LeetCode 744.寻找比目标字母大的最小字母
  • 【动手学深度学习】3.5. 图像分类数据集
  • 3D模型格式转换HOOPS Exchange与工程设计软件自带转换器对比分析
  • 力扣-322.零钱兑换
  • 最新四六级写作好词好句锦囊(持续更新中)
  • 【VS2022 配置 ACADOS环境】
  • Java集合 - ArrayList底层源码解析
  • 精益数据分析(102/126):SaaS用户流失率优化与OfficeDrop的转型启示
  • Trae国内版Builder模式VS Chat模式
  • 1.3、SDH光接口类型
  • powerShell调用cmd
  • Epigenetics ATAC-seq助力解析炎症性细胞因子IL-1刺激引起的动态染色质可及性变化
  • Marketing Agent实施成本全解析:价格构成、影响因素与技术选型建议
  • vector的用法
  • Web网页端即时通讯源码/IM聊天源码RainbowChat-Web
  • 一阶拟线性偏微分方程光滑解的存在性与最大初始振幅分析
  • Rocky Linux 9 系统安装配置图解教程并做简单配置
  • Node.js下载安装及环境配置教程
  • IEEE-745标准4字节16进制转浮点
  • 【VUE3】基于Vue3和Element Plus的递归组件实现多级导航栏
  • 社会应用融智学的人力资源模式:潜能开发评估;认知基建资产
  • 【为什么InnoDB用B+树?从存储结构到索引设计深度解析】
  • 车载以太网-switch
  • 无人机噪音处理模块技术分析
  • 前端面试八之map