← Back to search

io.github.guzz-labs/epwforge-mcp

guzz-labs streamable_http Scanned 8h ago

EPW/DDY weather files - TMY/AMY/CMIP6 morphing, UHI, events, smoke. 3 of 4 tools anon-free.

C
62 / 100

Versions

0.3.1latest
first seen May 19, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 4

find_station
annotations: none low

Search the GuzzStations catalog (17,000+ weather stations worldwide). Optional enrichments (route through hosted MCP for the extra queries): - include_amy_extremes: hottest/coldest/most-humid years on record - include_climate_deltas: monthly CMIP6 delta-T for the picked scenario No authentication required for any mode. Examples: find_station(query="Denver") find_station(lat=40.7, lon=-74.0, max_results=5) find_station(country="JPN", query="Tokyo") find_station(lat=40.7, lon=-74.0, include_amy_extremes=True) find_station(lat=40.7, lon=-74.0, include_climate_deltas=True, ssp="ssp245", year=2050)

lat string lon string ssp string year string query string compact string country string percentile string max_results string include_amy_extremes string include_climate_deltas string
analyze_weather
annotations: none low

Compute design conditions, HDD/CDD, monthly stats, and peak days for one or more EPW files. No EPW content returned — stats only. Three modes: 1. Single URL: analyze_weather(url="https://...") 2. Multi-URL comparison: analyze_weather(urls=["...", "...", "..."]) 3. Synthesized config: analyze_weather(config={"lat": 40.7, "lon": -74, "ssp": "ssp370", "year": 2050, "uhi": "urban"}) ⚠ CRITICAL ROUTING RULE — read before calling: If the user is comparing N sites (data-center siting, climate-zone spread, portfolio resilience, etc.) you MUST: 1. Call `find_station` once per city to get its EPW URL 2. Call `analyze_weather` EXACTLY ONCE with `urls=[all N urls]` Do NOT call analyze_weather N times in a loop with single configs. That breaks the comparison card UI (each call renders a separate blank widget), produces no future-projection deltas, and is slow. `include_future_projection=true` (the default for url-mode) embeds SSP 3-7.0 P75 2050 design conditions per site in one shot, which is what the inline card UI needs. Use `config` mode ONLY for: (a) a single site morphed to a specific future scenario, or (b) stress-testing event compounds for one site. Never use config mode in a loop to fake a comparison. Modes 1 + 2 download the URLs and parse locally (purely client-side). Mode 3 routes through the hosted EPWForge MCP so the morph/UHI/event/smoke pipeline runs on EPWForge infrastructure — the synthesized EPW never leaves the server. Use mode 3 to preview a future-climate scenario or a UHI / extreme-event sensitivity without spending credits. No authentication required for any mode.

url string urls string units string config string compact string include_idf string include_full_ashrae string allow_custom_location string include_improbability string include_future_projection string
chart_weather
annotations: none low

Render an SVG chart from EPW data. chart_type='diurnal' — monthly Max / Avg / Min hourly temperature profile in °F (January and July highlighted, annual mean overlaid). Pass `url` or `config`. chart_type='comparison' — horizontal-bar chart of cooling/heating deltas across multiple EPWs. Pass `urls` (first = baseline). No authentication required for any mode.

url string urls string config string pv_tilt string save_to string econ_mode string chart_type string pv_azimuth string resolution string econ_high_limit_f string econ_supply_air_f string allow_custom_location string
generate_weather_file
annotations: none low

Generate and deliver an EPW or DDY file. Requires an EPWFORGE_API_KEY. Charges credits per call: 1 for single, 1×N for scenarios batch, 10 for ensemble. Free signup at https://epwforge.com includes 5 welcome credits. Three modes: 1. Single file (default): generate_weather_file(lat=40.7, lon=-74, ssp="ssp245", year=2050) 2. Batch (1×N): generate_weather_file(scenarios=[{lat, lon, ssp:...}, ...]) 3. Ensemble (10 credits): generate_weather_file(lat=, lon=, ssp=, year=, ensemble=True) — returns ~20 per-model EPWs For analysis / charts without paying credits, use analyze_weather or chart_weather with a `config` argument — same morph/UHI/event pipeline, stats/SVG returned, no EPW delivered.

lat string lon string ssp string uhi string year string basis string smoke string events string format string save_to string amy_year string ensemble string intensity string scenarios string percentile string tmy_period string include_ddy string save_to_dir string stress_test string event_duration string intensity_auto string smoke_duration string smoke_intensity string

Permissions 4

network medium
Server uses network capabilities via: http, httpx
filesystem low
Server uses filesystem capabilities via: os, pathlib, tempfile
shell high
Server uses shell capabilities via: subprocess
env_vars low
Server uses env_vars capabilities via: os.environ

Scan Findings 30

low
Tool 'find_station' has no annotations annotation_checker · 100%
low
Tool 'analyze_weather' has no annotations annotation_checker · 100%
low
Tool 'chart_weather' has no annotations annotation_checker · 100%
low
Tool 'generate_weather_file' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
high
Tool shadowing in 'analyze_weather': Suppression: 'never use config' cross_tool_detector · 88%
medium
Vulnerable dependency: mcp@1.26.0 (GHSA-hvrp-rf83-w775) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.26.0 (GHSA-jpw9-pfvf-9f58) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.26.0 (GHSA-vj7q-gjh5-988w) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.26.0 (PYSEC-2026-3481) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.26.0 (PYSEC-2026-3482) dependency_analyzer · 95%
medium
Vulnerable dependency: mcp@1.26.0 (PYSEC-2026-3483) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0 (GHSA-mr82-8j83-vxmv) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0 (PYSEC-2026-1812) dependency_analyzer · 95%
info
package.json metadata manifest_parser · 100%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: find_station manifest_parser · 90%
info
Tool: analyze_weather manifest_parser · 90%
info
Tool: chart_weather manifest_parser · 90%
info
Tool: generate_weather_file manifest_parser · 90%
info
Required env vars (3) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 90%
low
Permission: filesystem access detected permission_analyzer · 70%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'analyze_weather': Directive language: 'you must' poisoning · 85%
critical
Tool poisoning in 'analyze_weather': Directive language: 'never' poisoning · 85%
info
No dependency files found for SBOM generation sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%