Weather-Prediction MCP Server + Agent Bricks Agent

A custom MCP server (FastMCP, streamable HTTP) exposing weather tools backedby Open-Meteo, plus a Databricks Agent Bricks agent that uses those toolsto answer natural-language weather questions and make simple predictions.

Built on the Day-3 pattern (Alpaca paper-trading MCP server): thin @mcp.toolfunctions delegating all HTTP/parsing to an adapter module, deployed as aDatabricks App and registered as an external MCP for an agent.

Architecture

Agent Bricks agent  --(MCP tool calls, streamable HTTP)-->  weather_mcp_server.py
                                                                   |
                                                                   v
                                                             weather_broker.py  --(HTTPS)-->  Open-Meteo API
  • weather_mcp_server.py — FastMCP server; thin tools, served over streamableHTTP at /mcp.
  • weather_broker.py — adapter: all HTTP calls + JSON parsing live here (samerole as alpaca_broker.py). No MCP knowledge.
  • The agent calls tools; the server calls Open-Meteo; results flow back as JSON.

Weather API + auth

Open-Meteo (https://open-meteo.com) — no signup, no API key, ~10,000calls/day for non-commercial use. Chosen because it needs zero credentials, sothere are no Databricks secrets to manage for this project, and it bundlesgeocoding + current conditions + multi-day forecast in one keyless API. Worksglobally (not US-only). Endpoints used:

  • Geocoding: https://geocoding-api.open-meteo.com/v1/search
  • Forecast/current: https://api.open-meteo.com/v1/forecast

Because there is no key, there is nothing secret in this repo.

Tools

tool type what it does
get_current_weather(location) required current temp, feels-like, humidity, wind, precipitation, conditions
get_forecast(location, days=3) required daily high/low, precip chance + amount, wind, conditions (1–16 days)
predict_umbrella_needed(location, when="today") required (derived) decides umbrella yes/no from a threshold rule, with an explained reason
get_travel_recommendation(location, when="today") stretch (derived) combines temp/precip/wind into a travel judgment + packing list
compare_cities(locations) stretch compares current conditions across cities; picks warmest + driest

location accepts a city name ("Chicago", "Austin, TX", "London") or a raw"lat,lon" pair. when accepts "today", "tomorrow", or an ISO date.

The prediction tool does real reasoning (not a passthrough)

predict_umbrella_needed applies an explicit rule to the target day's forecast:

umbrella_needed = True if precipitation_probability >= 40% ORprecipitation_sum >= 1.0 mm.

The probability catches "might rain" days; the millimetre floor catches dayswhere the chance looks modest but meaningful rain is still expected. The toolreturns the boolean and a reason string naming which threshold fired, sothe agent (and the user) can see why. get_travel_recommendation layers ontemperature and wind thresholds (hot ≥ 35 °C, freezing ≤ 0 °C, windy ≥ 40 km/h,wet ≥ 60% or 10 mm) to produce a headline plus a bring list.

Error handling

A bad location or an API outage returns a clean {"error": "..."} dict, never astack trace, so the agent can react (ask the user to clarify, or report theoutage) instead of failing. Example: get_current_weather("notaplace"){"error": "Could not find a location named 'notaplace'."}.

Files

  • weather_mcp_server.py — FastMCP server (5 tools; 3 required + 2 stretch)
  • weather_broker.py — Open-Meteo adapter (all HTTP/parsing)
  • test_weather.py — local sanity test (no MCP/Databricks needed)
  • requirements.txt / app.yaml — Databricks App config
  • AGENT_SYSTEM_PROMPT.md — the agent's system prompt + tool guidance

Setup

1. Test locally (optional, no credentials)

pip install -r requirements.txt
python test_weather.py           # hits Open-Meteo directly, prints results
python weather_mcp_server.py     # serves MCP at http://localhost:8000/mcp

2. Deploy the MCP server as a Databricks App

Push this folder to a Git repo, add it as a Git folder in Databricks, then:Compute → Apps → Create app → Custom, name it starting with mcp-(e.g. mcp-weather), and point it at this folder (which contains app.yaml).Databricks apps listen on port 8000 by default and expose the MCP endpoint athttps://<app-url>/mcp. No secret configuration is needed (Open-Meteo iskeyless).

3. Register it as an external MCP

AI Gateway → MCPs → Add MCP, paste the app's /mcp URL (streamable HTTP),name it weather-tools, and save. Databricks introspects and lists the 5 tools.

4. Build the Agent Bricks agent

Agents → Agent Bricks → Create agent (Custom LLM). Under Tools, add theweather-tools MCP server. Paste the system prompt fromAGENT_SYSTEM_PROMPT.md. Evaluate, then deploy and chat.

Demo — 3 natural-language questions

These are the questions to ask the deployed agent (screenshot the tool-calling +final answers). Sample tool outputs below are from a real run.

1. "Will it rain in Seattle today — should I bring an umbrella?"→ agent calls predict_umbrella_needed("Seattle", "today"){"umbrella_needed": false, "precipitation_probability": 0, "precipitation_mm": 0.0, "reason": "No umbrella needed: only 0% chance and 0.0 mm expected, both below the thresholds (40% / 1.0 mm)..."} → agent answers: "No umbrella needed in Seattletoday — 0% chance of rain, overcast but dry."

2. "What's the 3-day forecast for Austin, and is it a good idea to travel there tomorrow?"get_forecast("Austin, TX", 3) then get_travel_recommendation("Austin, TX", "tomorrow")→ recommendation "Very hot — hydrate and avoid prolonged midday sun" withbring: ["water"] (highs near 37 °C) → agent summarizes the three days and theheat advice.

3. "Which is warmer right now, Chicago, Miami, or Denver?"compare_cities(["Chicago","Miami","Denver"])warmest: "Denver" (33.6 °C vs Miami 28.0 °C, Chicago 22.2 °C) → agent answerswith the ranking and current conditions.

Notes / limitations

  • Open-Meteo forecasts are model output; the prediction tools apply simple,transparent thresholds rather than a trained model — the point is explainablereasoning, easily tuned in weather_mcp_server.py.
  • Temperatures are °C and wind km/h (Open-Meteo defaults); add temperature_unit/ wind_speed_unit params in the adapter for Fahrenheit/mph if desired.
  • Stretch ideas: severe-weather alerts (layer in the NWS /alerts API for USlocations), historical lookup (Open-Meteo archive API), or a small dashboardapp that logs agent queries.

MCP Server · Populars

MCP Server · New

    getArbor-dev

    Arbor

    Graph-native code intelligence that replaces embedding-based RAG with deterministic program understanding.

    Community getArbor-dev
    Q00

    ouroboros

    Agent OS: Stop prompting. Start specifying.

    Community Q00
    velane-sh

    velane

    Velane is agentic cloud for deploying your basic workflows, agents and sub-agents. 800+ OAuth integrations, sandboxed Bun and Python execution, and a full deployment pipeline managed via MCP

    Community velane-sh
    MCPBlender

    BlenderMCP

    🎨 Control Blender 3D with Claude AI — prompt-driven 3D modeling, materials & scene generation via MCP

    Community MCPBlender
    MCPBlender

    AbletonMCP

    🎵 Control Ableton Live with Claude AI — create tracks, arrange clips & compose music via MCP

    Community MCPBlender