Token导航 LogoToken导航

MCP Server · 地图位置

datacenter weather agent

一个基于LangGraph的代理系统,通过Model Context Protocol (MCP)确定数据中心位置的天气预报。

stdio官方级别未说明来源级核验工具 3
位置天气Python搜索

快速开始

作者 / 组织
devrodrigoreis
提供方
devrodrigoreis

工具数量

3

来源目录标注

资源数量

0

来源目录标注

提示词数量

0

来源目录标注

GitHub Star

0

仓库热度

收录来源

1 个

MCP World

选型结论

datacenter weather agent 属于地图位置类 MCP Server,公开资料标注 3 个工具,通过stdio 本地进程接入,客户端适配情况以官方文档为准,有可以直接复制的安装命令;接入前要先准备 API Key。

分类

地图位置

传输方式

stdio

认证方式

API Key

部署方式

公开资料未说明

安装与配置

安装命令

pip install -r requirements.txt

公开命令不是通用的启动方式,拼不出可靠配置示例;请在客户端 MCP 配置里按官方文档填写 command 和 args。

上手步骤

  1. 1

    准备运行环境

    stdio 服务在本地起进程,需要先装好 对应的运行时,再按安装命令拉取依赖。

  2. 2

    安装服务

    复制下面的安装命令执行;命令里带占位符的位置换成自己的密钥或路径。

  3. 3

    写入客户端配置

    在客户端的 MCP 配置里填启动命令和参数,保存后完全退出客户端再打开,让新配置生效。

  4. 4

    验证是否可用

    连接成功后客户端会列出 3 个工具,随便调一个只读工具确认能返回结果。

接入前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

详细介绍

数据中心气象代理

一种LangGraph代理系统,使用模型上下文协议(MCP)确定数据中心位置的天气预报。

建筑:自定义状态图,具有显式状态管理、模块化节点和符合LangGraph 2026最佳实践的条件路由。

概述

该系统回答了以下问题: *“数据中心的天气预报是什么?”*

它自主地: 0.检查意图分类,避免回答不应该回答的问题,或对任何问题给出相同的答案

  1. 发现数据中心的公共IP地址
  2. 将IP解析为地理坐标
  3. 获取该位置的当前天气预报
  4. 合成自然语言响应

为什么是这种架构?

此实现使用LangGraph的 自定义状态图 方法而不是预构建的代理,因为:

  • 完全透明:每个决策点都是明确的,可调试的
  • 生产就绪:模块化设计支持测试、监控和扩展
  • 最佳实践:遵循LangGraph 2026对LangGraph文档中获取的有状态代理的建议:https://docs.langchain.com/oss/python/langgraph/workflows-agents
  • 可维护性:与类型化状态模式明确分离关注点

系统架构

┌─────────────────────────────────────────────────────────────────┐
│                    Data Center Weather Agent                    │
│                                                                 │
│  ┌─────────────┐         ┌───────────────────────────────────┐  │
│  │   Agent     │  HTTP   │         MCP Server                │  │
│  │ (LangGraph) │◄───────►│  ┌────────┐ ┌─────────┐ ┌───────┐ │  │
│  │             │   SSE   │  │ ipify  │ │ip_to_geo│ │weather│ │  |
│  │  5 Nodes    │         │  └───┬────┘ └────┬────┘ └──┬────┘ │  │
│  │  3 Edges    │         │      │           │         │      │  │
│  │  9 State    │         │      ▼           ▼         ▼      │  │
│  │  Fields     │         │    ipify.org  ip-api.com  meteo   │  │
│  └─────────────┘         └───────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘

组件

1.MCP服务器(server/)
  • 技术:Python、FastMCP、uvicorn
  • 端口:8000(苏格兰和南方能源公司运输)
  • 工具:

- ipify:获取公共IP地址 - ip_to_geo:将IP转换为lat/lon(IP-api.com) - weather_forecast:获取天气数据(Open Meteo)

  • 特性:输入验证、错误处理、结构化日志记录
2.LangGraph代理(agent/)
  • 技术:Python、LangGraph、LangChain、谷歌Gemini
  • 建筑:自定义状态图
  • 状态:跟踪工作流进度的9个键入字段
  • 节点:5个模块化计算单元
  • 边缘:3个条件路由函数
  • 特性:LLM回退、详细跟踪、错误恢复

状态管理

所有数据都通过强类型 AgentState:

class AgentState(TypedDict):
    question: str              # User's input query
    public_ip: str | None      # From ipify tool
    latitude: float | None     # From ip_to_geo tool  
    longitude: float | None    # From ip_to_geo tool
    weather_data: str | None   # From weather_forecast tool
    answer: str | None         # Final LLM response
    messages: list             # Conversation history
    error: str | None          # Error tracking
    current_step: str          # Progress indicator

图形结构

START
  ↓
┌───────────────────────┐
│  intent classification│ → [custom logic]
└──────┬────────────────┘
       ↓
┌─────────────┐
│  get_ip     │ → [ipify tool]
└──────┬──────┘
       │ [conditional: success/error]
       ↓
┌──────────────────┐
│ resolve_location │ → [ip_to_geo tool]
└──────┬───────────┘
       │ [conditional: success/error]
       ↓
┌──────────────┐
│fetch_weather │ → [weather_forecast tool]
└──────┬───────┘
       │ [conditional: success/error]
       ↓
┌────────────────┐
│generate_answer │ → [LLM synthesis]
└───────┬────────┘
        ↓
       END

     [error] ← Any failure routes here

节点职责

  1. get_ip_node:调用ipify工具,使用public_ip更新状态
  2. resolve_location_node:调用ip_to_geo,提取lat/lon
  3. fetch_weather_node:使用坐标调用weather_forecast
  4. generate_answer_node:LLM创建自然语言响应
  5. 错误节点:集中错误处理和用户消息传递

条件路由

在继续之前,每条边都会验证之前的操作:

def route_after_ip(state: AgentState) -> Literal["resolve_location", "error"]:
    """Route to next node or error based on IP fetch result"""
    if state.get("error") or not state.get("public_ip"):
        return "error"
    return "resolve_location"

设置

先决条件

  • Python 3.10或更高版本
  • 在3.14.2版本上进行了全面测试
  • Google Gemini API密钥(提供免费层)
  • 可选:LongCat API密钥(回退)

安装

  1. 克隆或下载 这个项目
  1. 安装依赖项:
   pip install -r requirements.txt
  1. 配置API密钥:

复制示例环境文件:

   cp .env.example .env

编辑 .env 并添加您的API密钥:

   GOOGLE_API_KEY=your_gemini_api_key_here
   LONGCAT_API_KEY=your_longcat_api_key_here  # Optional

获取API密钥:

- 双子座:https://ai.google.dev/ - 长猫:https://longcat.chat/(可选回退)

用法

启动系统

您需要两个终端窗口:

终端1-启动MCP服务器:

python3 -m server.main

预期产量:

INFO:     Started server process
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000

终端2-运行代理:

python3 -m agent.main

示例会话

============================================================
Data Center Weather Agent (Custom StateGraph)
============================================================

Connected to MCP Server
LLM configured with fallback: Gemini -> LongCat

Graph structure built successfully

Agent Ready! (Type 'quit' to exit)
------------------------------------------------------------

Enter your question: What is the weather forecast of the data center?

============================================================
EXECUTION TRACE
============================================================

[Step 1: IP Discovery]
  Tool: ipify
  Result: 174.162.142.78

[Step 2: Location Resolution]
  Tool: ip_to_geo
  Input: 174.162.142.78
  Result: 40.3495, -111.8998

[Step 3: Weather Retrieval]
  Tool: weather_forecast
  Input: lat=40.3495, lon=-111.8998
  Result: Temperature: 0.2 C, Windspeed: 2.2 km/h

[Step 4: Answer Generation]
  Generated answer successfully

============================================================
FINAL ANSWER
============================================================

The data center, located at 40.3495°N, 111.8998°W, currently has a 
temperature of 0.2°C and a wind speed of 2.2 km/h.

Enter your question: Where is the data center located?

[... processes IP and location lookup ...]

FINAL ANSWER

The data center is located at coordinates 40.3495°N, 111.8998°W 
(approximately in Utah, United States).

Enter your question: quit

文件结构

datacenter_weather_agent/
├── server/
│   ├── main.py              # MCP server with FastMCP
│   ├── tools.py             # Tool implementations
│   └── __init__.py
├── agent/
│   ├── main.py              # Custom StateGraph agent (~570 lines)
│   ├── client.py            # MCP client wrapper
│   └── __init__.py
├── README.md                # This file
├── ARCHITECTURE.md          # Deep technical documentation
├── .env.example             # API key template
├── .env                     # Your API keys (create this)
└── requirements.txt         # Python dependencies

主要特点

1.稳健的输入验证

服务器端:

  • IP地址格式验证(IPv4/IPv6)
  • IPv4八位字节范围检查(0-255)
  • 坐标范围验证(纬度:-90至90,经度:-180至180)
  • 对所有参数进行类型检查

客户端:

  • 响应结构验证
  • 非空内容验证
  • 运行时错误检测

2.全面的错误处理

每个节点错误处理:

async def get_ip_node(state, tools):
    try:
        # ... tool execution ...
        return success_state
    except Exception as e:
        logger.error(f"Error in get_ip_node: {e}")
        return error_state

条件路由到错误节点:

  • 任何节点故障都会路由到集中式错误处理程序
  • 用户友好的错误消息
  • 代理保持响应(不崩溃)

3.LLM回退策略###->额外功能\ str:

# Implementation return timezone_data


1. **注册于 `server/main.py`**:

@mcp.tool() async def timezone(latitude: float, longitude: float) -> str: return await get_timezone(latitude, longitude)


1. **添加节点 `agent/main.py`**:

async def get_timezone_node(state, tools): tool = next(t for t in tools if t.name == "timezone") result = await tool.ainvoke({ "latitude": state["latitude"], "longitude": state["longitude"] }) return {**state, "timezone": result}

workflow.add_node("get_timezone", get_timezone_node) workflow.add_edge("fetch_weather", "get_timezone") workflow.add_edge("get_timezone", "generate_answer")


### 修改路由逻辑

更改条件边以支持替代流:

def route_after_ip(state: AgentState): if state.get("error"): return "error"

# New: Check if IP is internal/private ip = state.get("public_ip", "") if ip.startswith("192.168.") or ip.startswith("10."): return "handle_private_ip" # New node

return "resolve_location"


## 测试

### 单元测试

测试单个节点:

import pytest from agent.main import get_ip_node

@pytest.mark.asyncio async def test_get_ip_node(): mock_tools = [MockIPifyTool()] state = {"question": "test", "messages": []}

result = await get_ip_node(state, mock_tools)

assert result["public_ip"] is not None assert result["error"] is None


### 集成测试

测试完整图形执行:

@pytest.mark.asyncio async def test_full_workflow(mcp_server_running): graph = await build_graph(client, llm) initial_state = {...}

final_state = await graph.ainvoke(initial_state)

assert final_state["answer"] is not None assert "temperature" in final_state["answer"].lower()


### LangSmith监控(来源于文档,最后访问时间为2026年1月30日)

启用生产调试跟踪:

export LANGCHAIN_TRACING_V2=true export LANGCHAIN_API_KEY=your_key export LANGCHAIN_PROJECT="datacenter-weather"


每次执行都会在LangSmith仪表板上进行跟踪。

## 安全考虑

1. **API密钥**:从不承诺 `.env` 到版本控制
1. **服务器暴露**:MCP服务器没有身份验证(仅限本地使用)
1. **速率限制**:外部API可能会禁止滥用
1. **输入验证**:服务器验证所有工具输入
1. **错误消息**:避免日志中的敏感数据泄露

## 依赖项

- **httpx**:异步HTTP客户端
- **主控程序**:模型上下文协议SDK
- **兰格拉夫**:基于图的代理框架
- **语言链**:LLM抽象层
- **郎链谷歌genai**:Gemini集成
- **兰开夏**:OpenAI兼容API(LongCat)
- **python dotenv**:环境变量管理
- **优维康**:ASGI服务器

看 `requirements.txt` 对于特定版本。

## 了解更多

- [LangGraph文档](https://langchain.com/docs/langgraph)
- [MCP规范](https://modelcontextprotocol.io/)
- [状态图教程](https://langchain.com/docs/langgraph/tutorials/state_graph)
- [Google Gemini API](https://ai.google.dev/gemini-api/docs)

## 许可证

这是一个用于个人目的的示范项目。不提供保修。

______________________________________________________________________

**建于**:LangGraph自定义状态图(生产最佳实践,2026年1月)

工具与能力

工具数量

3

资源数量

0

提示词数量

0

能力标签

天气查询Python本地部署数据中心管理自动化代理地理位置服务自然语言处理

数量来自来源目录的标注,具体工具清单以官方文档为准。

典型使用场景

地址与坐标转换

把地址转成经纬度,或按坐标反查位置。

路线与距离

算行程时间、规划多点路线。

天气与出行

查天气和预警,按条件安排行程。

选择建议

值得选的地方

  • 只提供 3 个工具,职责集中,接入后不容易误操作。
  • 有现成的安装命令,不用自己找入口,照着跑就能起服务。
  • 公开说明写得比较完整,接入前能看清能力边界。

先想清楚的地方

  • stdio 方式要求本地装好 运行环境,换机器要重新装一遍。
  • 需要自备API Key,没有凭据没法直接试。
  • 第三方目录整理,版本更新和行为细节以官方仓库为准。

更适合

  • 需要在地图位置场景里让模型直接调用外部能力的人。
  • 想先快速试一下、能接受在本地跑服务的人。

不太适合

  • 完全不想在本地装环境的人。
  • 暂时拿不到API Key的人。
  • 需要厂商级 SLA 和技术支持的生产环境。

同类对比

5 个同类
MCP Server工具数传输方式安装命令收录来源最后核验
datacenter weather agent

MCP World · 本页

3stdio有1 个2026-05-17
Baidu Maps

MCP World

10stdio有1 个2026-05-17
MCP Server C2f246e3

MCP World

20stdio有1 个2026-05-17
OpenStreetMap MCP Server

MCP.so

12stdio有3 个2026-05-17
Google Maps (google-maps-aa2563d3)

MCP World

7未说明未标注1 个2026-05-17

按同分类和工具数量挑出最接近的几条,字段以各自详情页为准。

常见问题

5 条

datacenter weather agent 怎么安装?

公开资料给出的安装命令是 pip install -r requirements.txt,运行环境为 未标注。装完后按客户端要求写进 MCP 配置,重启客户端生效。

datacenter weather agent 怎么在 Claude Desktop、Cursor 里配置?

它是stdio 本地进程,客户端配置里要写启动命令和参数,运行环境是 未标注;保存后完全退出客户端再打开,配置才会生效。

datacenter weather agent 收费吗?

本站只整理公开资料,不代收费用,也没有标注具体价格。是否收费取决于服务本身和背后的接口额度,正式使用前按官方说明确认。

datacenter weather agent 需要 API Key 吗?

公开资料标注的认证方式是API Key,也就是要先拿到凭据才能连上;凭据只填在自己本地的配置里,不要写进公开仓库。

datacenter weather agent 支持哪些客户端?

公开资料没有标注具体客户端;能配置本地 MCP 命令的客户端都能接,配置方式参照官方文档。

来源信息

继续浏览同类 MCP