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.1

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.1
File Size Uploaded Provenance Actions
windguru-0.3.1.tar.gz 74.1 kB Without provenance Details for windguru-0.3.1.tar.gz

Built distribution (wheel)

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

Total release size: 116.5 kB

Release files / windguru-0.3.1.tar.gz

Download URL windguru-0.3.1.tar.gz
Size 74.1 kB
Tags Source
SHA-256 checksum
How to use checksums
3fcaee9569232b165d9b5be8393640e8dd0de7896ff9138780e1f92af4306ecd
BLAKE2b-256 checksum
How to use checksums
93a8fbe70d732a4f45f2e3755df51d0be74aa1a1e38d10d4e0fa8e689152807e
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.1-py3-none-any.whl

Download URL windguru-0.3.1-py3-none-any.whl
Size 42.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
784c92ec3666ad0a5a1a60780d3e489f970feaca29468f6e51874865662023ba
BLAKE2b-256 checksum
How to use checksums
ac48b5cbfac2ea2914840b2fc837963fcb2558ed6e466b47706c30ea3710e986
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.1

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