Skip to main content

guru

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

PyPI Python

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

Install

pipx install windguru
guru --help

Need MCP (Cursor / Claude Desktop)?

pipx install 'windguru[mcp]'
guru-mcp

Or with pip: pip install windguru / pip install 'windguru[mcp]'.

PyPI: windguru · commands: guru, guru-mcp, guru-mcp-http

Quick start (Cursor / agents)

First pass — agent shows one prompt; user pastes one line:

sport=kitefoil weight=78 level=intermediate kites=7,9,12 wetsuits=3/2,4/3 session=3 home=41.39,2.17 drive_km=200 range=Trabucador → Leucate
guru setup --intake '<paste>' --json
guru weekend --json
guru best 201 --advise --json

guru instruct --json / guru profile --json expose intake.prompt_to_user when the profile is incomplete — agents must ask once, not field-by-field.

MCP (Cursor / Claude Desktop)

pipx install 'windguru[mcp]'
guru-mcp          # STDIO
guru-mcp-http     # http://127.0.0.1:8000/mcp/
{
  "mcpServers": {
    "guru": {
      "command": "guru-mcp"
    }
  }
}

If needed, use the full path from which guru-mcp (often ~/.local/bin/guru-mcp).

Tool Description
instruct Agent recipe (setup → best --advise)
setup_profile / get_profile Rider + home range onboarding
weekend_spots Rank rideable spots in drive range
search_spots Named spot search
near_spots Free map markers near lat/lon
resolve_spot Name/id → spot (ambiguous + candidates)
best_forecast Tune top models + rider advice (advise=true)
get_forecast Single-model escape hatch
list_models Known aliases

More: docs/mcp.md.

CLI

Command Role
guru setup Rider + home range (sport / weight / quiver / drive_km)
guru profile Show profile + missing fields
guru weekend Where can I kite? Rank spots in drive range
guru instruct Teach agents the workflow
guru spots <q> Name search
guru near --lat --lon Free map markers near a point
guru best <spot> --advise WINDGURU_DEFAULT → top 3 → gear advice
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)

Develop

git clone https://github.com/berendgort/guru.git
cd guru
pipx install -e ".[dev,mcp]"
# or: python -m venv .venv && source .venv/bin/activate && pip install -e ".[dev,mcp]"
pytest -q
ruff check .
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)
Rider guru/rider/ Profile store + kite/wetsuit advice
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.3.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.3.0
File Size Uploaded Provenance Actions
windguru-0.3.0.tar.gz 74.1 kB Without provenance Details for windguru-0.3.0.tar.gz

Built distribution (wheel)

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

Total release size: 116.5 kB

Release files / windguru-0.3.0.tar.gz

Download URL windguru-0.3.0.tar.gz
Size 74.1 kB
Tags Source
SHA-256 checksum
How to use checksums
658dd8c71d509e8f789aa91ddca7c5de25fd0ee89fd4feb891b7839053ea3cf8
BLAKE2b-256 checksum
How to use checksums
7ab6472cf66207812ecb795567e5eb5fcfc22cc1c5b8510fb58e2d42dad8cf3b
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.3.0-py3-none-any.whl

Download URL windguru-0.3.0-py3-none-any.whl
Size 42.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1f8ba16af9465ac017f1e8a23bfb4a5c2614ae7dd8bd0fff0f80ff3cb1f6c699
BLAKE2b-256 checksum
How to use checksums
42808f9f3c7abec9402e39abe39f1af0bebfe1bdfdf6aabd3cb8ec49896514f7
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.3.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