Skip to main content

guru

Windguru CLI + MCP + Python library. Same idea as fli: reverse-engineered JSON, zero HTML scraping, agent-first.

Free only — named spots + WINDGURU DEFAULT Tune top-3. No PRO lat/lon click-forecast.

Install

# CLI (recommended)
pipx install windguru

# CLI + MCP server
pipx install 'windguru[mcp]'

guru --help
guru instruct --json

Until the PyPI release is live, install from GitHub:

pipx install 'windguru @ git+https://github.com/berendgort/guru.git'
pipx install 'windguru[mcp] @ git+https://github.com/berendgort/guru.git'

PyPI name windguru, command guru, MCP guru-mcp.

Or with pip:

pip install windguru
pip install 'windguru[mcp]'

MCP Server

pipx install 'windguru[mcp]'

# STDIO (Cursor / Claude Desktop)
guru-mcp

# HTTP (streamable)
guru-mcp-http  # http://127.0.0.1:8000/mcp/

Connecting to Claude Desktop / Cursor

{
  "mcpServers": {
    "guru": {
      "command": "guru-mcp"
    }
  }
}

Tip: if the binary is not on PATH, use the full path from which guru-mcp (often ~/.local/bin/guru-mcp).

MCP tools

Tool Description
instruct Agent recipe (WINDGURU_DEFAULT → top 3)
search_spots Named spot search
near_spots Free map markers near lat/lon
resolve_spot Name/id → spot (ambiguous + candidates)
best_forecast Tune weights → top models → forecasts
get_forecast Single-model escape hatch
list_models Known aliases

Agent recipe

guru instruct --json
guru spots "castelldefels" --json
guru best 201 --json
guru near --lat 51.9 --lon 4.1 --json
guru best 48309 -H 24 --json   # De Slufter

guru best always uses WINDGURU_DEFAULT Tune weights and returns the top 3 models + forecasts. Prefer that over raw GFS.

JSON envelope: {"ok": true|false, "api_version": 1, "data"|error fields}. Shared error_type / retryable with MCP.

CLI

Command Role
guru instruct Teach agents the workflow
guru spots <q> Name search
guru near --lat --lon Free map markers near a point
guru best <spot> WINDGURU_DEFAULT → top 3 → forecasts
guru forecast <spot> -m gfs Single model
guru models / schema / doctor Discoverability

Ambiguous names fail with error_type: ambiguous + candidates (pass numeric id or --pick).

Library

from guru import search_spots, get_best_forecast, spots_near

spots = search_spots("castelldefels")
best = get_best_forecast(201, top=3, hours=24)
print(best.models[0].name, best.models[0].weight_pct)
print(best.forecasts[0].hours[0].wind_kn)

Architecture

Layer Path Role
Core guru/core/ Shared envelope, errors, instruct recipe
CLI guru/cli/ Typer + Rich + --json (thin over core)
MCP guru/mcp/ FastMCP over core (no CLI imports)
Search guru/search/ HTTP (curl_cffi), blend_math, near, forecast
Models guru/models/ Pydantic + aliases only
Wire docs/WIRE.md Captured iapi.php
MCP docs/mcp.md guru-mcp setup + tools

Read AGENTS.md before extending. Capture Network → fixtures → tests.

Engineering standards (kept in-repo):

Disclaimer

Unofficial. Not affiliated with Windguru. Personal / research use; respect ToS and rate limits.

License

MIT

Metadata

Release files for windguru 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for windguru 0.2.0
File Size Uploaded Provenance Actions
windguru-0.2.0.tar.gz 57.4 kB Without provenance Details for windguru-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for windguru 0.2.0
File Interpreter ABI Platform Actions
windguru-0.2.0-py3-none-any.whl Python 3 none any Details for windguru-0.2.0-py3-none-any.whl

Total release size: 82.1 kB

Release files / windguru-0.2.0.tar.gz

Download URL windguru-0.2.0.tar.gz
Size 57.4 kB
Tags Source
SHA-256 checksum
How to use checksums
d72ff7b5e777524c2a55d68c1a76f5b38622c6d74529b37f317eac11bb2032cf
BLAKE2b-256 checksum
How to use checksums
b29ceeb1b5b9ecbeebe4390190815ab9627b1ca2ffbec17868bf86f6638fbd5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / windguru-0.2.0-py3-none-any.whl

Download URL windguru-0.2.0-py3-none-any.whl
Size 24.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ddd3ad341fae7b1b3768582c6df04c62a0858c5f55a24fe8c38b022d510e14c5
BLAKE2b-256 checksum
How to use checksums
48f9f656409798b04b569fc3bf706d8c8c311a0d353d667dfb1902f7b5c64534
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for windguru 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page