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
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):
docs/code_quality.md— Korotkevich / Tourist bardocs/data_engineering_standards.md— Gray / Stonebraker bar
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.