掘金 人工智能 07月15日 18:29
MCP快速入门—快速构建自己的服务器
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

MCP(Model Capability Protocol)作为一种协议标准,允许开发者通过构建自定义服务器来增强LLM的功能。本文介绍了如何使用Python和MCP SDK构建天气服务器,实现获取天气预报和恶劣天气警报的工具,从而扩展Claude的能力。教程涵盖了MCP的核心概念、环境准备、服务器构建、工具实现以及与Claude的连接测试,展示了MCP协议在LLM功能扩展中的灵活性和易用性。

🔧 MCP协议提供三种能力类型:资源、工具和提示,其中工具类型允许LLM调用经用户批准的函数,本文重点介绍了工具类型的实现。

🌥️ 通过构建get-alerts和get-forecast两个工具,开发者可以扩展Claude的功能,使其能够获取美国各州的天气警报和某地的天气预报。

🛠️ 教程详细指导了环境准备、项目初始化、FastMCP服务器初始化、辅助函数实现以及工具功能的具体代码,包括向NWS API发起请求、格式化警报信息等。

🔗 为了测试工具功能,教程还介绍了如何配置Claude客户端,并通过发送自然语言问题来触发工具执行,展示了完整的交互流程。

📈 MCP协议的灵活性和Python SDK的易用性使得开发者可以快速构建和集成自定义功能,为LLM添加各种实用功能,极大地丰富了LLM的应用场景。

引言

随着大语言模型(LLM)技术的快速发展,如何扩展其能力边界成为开发者关注的重点。MCP(Model Capability Protocol)作为一种协议标准,允许开发者构建自定义服务器来增强LLM的功能。

正文内容

1. MCP核心概念与技术背景

MCP服务器主要提供三种能力类型:

本教程将重点介绍工具类型的实现,通过构建两个实用工具(get-alerts和get-forecast)来扩展Claude的功能,使其能够获取天气预报和恶劣天气警报。

2. 环境准备与项目初始化

2.1 系统要求

2.2 安装uv并创建项目

# 安装uv包管理器curl -LsSf https://astral.sh/uv/install.sh | sh# 创建项目目录uv init weathercd weather# 创建并激活虚拟环境uv venvsource .venv/bin/activate# 安装依赖uv add "mcp[cli]" httpx# 创建服务器文件touch weather.py

3. 构建天气服务器

3.1 初始化FastMCP实例

from typing import Anyimport httpxfrom mcp.server.fastmcp import FastMCP# 初始化FastMCP服务器mcp = FastMCP("weather")# 常量定义NWS_API_BASE = "https://api.weather.gov"USER_AGENT = "weather-app/1.0"```FastMCP类利用Python类型提示和文档字符串自动生成工具定义,简化了MCP工具的创建和维护过程。

3.2 实现辅助函数

async def make_nws_request(url: str) -> dict[str, Any] | None:    """向NWS API发起请求并处理错误"""    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 Nonedef format_alert(feature: dict) -> str:    """格式化警报特征为可读字符串"""    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')}"""

3.3 实现工具功能

@mcp.tool()async def get_alerts(state: str) -> str:    """获取美国各州的天气警报        Args:        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:    """获取某地天气预报        Args:        latitude: 纬度        longitude: 经度    """    # 首先获取预测网格端点    points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"    points_data = await make_nws_request(points_url)    if not points_data:        return "无法获取该位置的预测数据"    # 从points响应中获取预测URL    forecast_url = points_data["properties"]["forecast"]    forecast_data = await make_nws_request(forecast_url)    if not forecast_data:        return "无法获取详细预测"    # 将时间段格式化为可读预测    periods = forecast_data["properties"]["periods"]    forecasts = []    for period in periods[:5]:  # 仅显示接下来5个时段        forecast = f"""{period['name']}:温度: {period['temperature']}°{period['temperatureUnit']}风速: {period['windSpeed']} {period['windDirection']}预测: {period['detailedForecast']}"""        forecasts.append(forecast)    return "\n---\n".join(forecasts)

3.4 运行服务器

if __name__ == "__main__":    # 初始化并运行服务器    mcp.run(transport='stdio')

4. 连接Claude for Desktop进行测试

4.1 配置客户端

{  "mcpServers": {    "weather": {      "command": "uv",      "args": [        "--directory",        "/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather",        "run",        "weather.py"      ]    }  }}

4.2 测试命令

5. 技术实现原理

当用户提问时,系统会经历以下流程:

    客户端将问题发送给ClaudeClaude分析可用工具并决定使用哪些客户端通过MCP服务器执行选定工具结果返回给ClaudeClaude生成自然语言响应向用户显示响应

结论

本文详细介绍了如何使用Python和MCP SDK快速构建一个功能完整的天气服务器。通过实现get-alerts和get-forecast两个工具,我们成功扩展了Claude的能力,使其能够查询实时天气信息。这种模式可以推广到其他领域,为LLM添加各种实用功能。MCP协议的灵活性和Python SDK的易用性使得开发者可以快速构建和集成自定义功能,极大地丰富了LLM的应用场景。

原文地址:https://www.cnblogs.com/powertoolsteam/p/18985414

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP协议 LLM功能扩展 天气工具 Python开发 自定义服务器
相关文章