mcp-registry/io.github.guzz-labs/epwforge-mcp · v0.5.1
As of 2026-10-23 05:08 UTC, the Guzz Labs Epwforge MCP server is down with a Glimind reliability score of 38/100 (grade F). Over the last 30 days it answered 99.8% of Glimind's liveness checks. It had 2 outages in 90 days, with a median recovery of 4 minutes.
EPW/DDY weather files - TMY/AMY/CMIP6 morphing, UHI, events, smoke. 3 of 4 tools anon-free.
Point your MCP client at this streamable-http endpoint: https://epwforge.com/api/mcp
The endpoint did not complete an MCP handshake.
Check the URL, TLS certificate and that the server answers a JSON-RPC "initialize" POST. How to fix →
3 tool definition(s) exceed ~1,200 tokens each (largest: generate_weather_file, ~1,644).
Move long reference material out of descriptions (link a doc or expose a resource), drop repeated examples, and collapse large enums. Trimming these to ~600 tokens saves ~2,358 tokens every session. How to fix →
6 of 6 tool(s) carry no readOnlyHint/destructiveHint annotations.
Annotate read-only tools with {"readOnlyHint": true}. Agents and gateways can then run them without a confirmation prompt, and route around destructive ones. How to fix →
1 parameter(s) across 1 tool(s) have no description.
Add a "description" to each parameter with its format and an example ("ISO 8601 date, e.g. 2026-10-17"). This is the commonest cause of wrong arguments on the first call. How to fix →
No tool declares an outputSchema.
Declare outputSchema and return structuredContent (MCP 2025-06-18+). Agents can then parse results without guessing, and chain tools reliably. How to fix →
Paste-ready definitions with the problems above fixed. Changes marked verify need a human look. 1 tool(s) still need parameter descriptions written by someone who knows the API. All of them as JSON: /v1/readiness/mcp-registry%2Fio.github.guzz-labs%2Fepwforge-mcp/fixes
{
"name": "analyze_weather",
"description": "Compute design conditions, HDD/CDD, monthly stats, and peak heating/cooling days for one or more EPW files. Accepts a `url` (existing EPW), `urls` (compare 2+), or `config` (synthesize on the fly with morphing/UHI/events/smoke). Config mode runs the full generation pipeline server-side but returns only stats — never the EPW content. **Token-saver: pass `compact: true` to get a ~10-field headline response (~100 tokens) instead of the full ~800-token payload.** Use compact for sanity-checking, das",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "EPW URL to analyze (single file)"
},
"urls": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 2,
"description": "Multiple EPW URLs for comparison (first = baseline). Max 10."
},
"units": {
"enum": [
"imperial",
"metric"
],
"type": "string",
"description": "Output units (default: imperial). When 'metric', temperatures are °C, wind m/s, precip mm, distance km/m."
},
"config": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude, decimal degrees"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude, decimal degrees"
},
"ssp": {
"enum": [
"ssp126",
"ssp245",
"ssp370",
"ssp585"
],
"type": "string",
"description": "CMIP6 emission scenario. ssp370 is the recommended high-end for design; ssp585 (SSP5-8.5) is an opt-in extreme stress-test pathway (~4.4°C, low likelihood per IPCC AR6 / CMIP7) for worst-case analysis."
},
"uhi": {
"enum": [
"none",
"suburban",
"urban",
"dense_urban"
],
"type": "string",
"description": "Urban Heat Island preset"
},
"year": {
"enum": [
2030,
2035,
2040,
2045,
2050,
2060,
2070,
2080,
2090,
2100
],
"type": "integer",
"description": "Future horizon"
},
"basis": {
"enum": [
"tmy",
"amy"
],
"type": "string",
"description": "Weather file basis (default: tmy)"
},
"smoke": {
"type": "boolean",
"description": "Enable wildfire smoke overlay"
},
"events": {
"type": "string",
"description": "Comma-separated events. Valid: heatwave, coldsnap, hothumid, coldwindy. Pairs auto-compound (heat+humid, cold+wind)."
},
"amy_year": {
"type": "integer",
"description": "Year for AMY basis"
},
"intensity": {
"type": "string",
"description": "Per-event \"type:1-7\" intensity (1-10 with stress_test=true). 5 = typical extreme, 7 = severe ~50-yr return."
},
"percentile": {
"enum": [
5,
10,
25,
50,
75,
90,
95
],
"type": "integer",
"description": "Warming percentile (default: 50)"
},
"tmy_period": {
"enum": [
"full",
"2011-2025",
"2009-2023",
"2007-2021",
"2004-2018"
],
"type": "string",
"description": "TMYx vintage. Default 2011-2025."
},
"event_duration": {
"type": "integer",
"maximum": 30,
"minimum": 3,
"description": "Event length in days (3-30, default 14). **For stress-test scenarios use 14-21 days** — shorter durations don't capture sustained operational impact (charging schedules, occupancy patterns, equipment cycling). 7 days is too short for any design or resilience analysis. Use 7-10 only for transient short-duration events."
},
"intensity_auto": {
"type": "boolean",
"description": "Auto-fill unspecified intensities from IPCC AR6 (default: true)"
},
"smoke_duration": {
"type": "integer",
"maximum": 30,
"minimum": 3,
"description": "Smoke days (3-30, default: 7)"
},
"smoke_intensity": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "Smoke severity 1-10 → peak AOD 0.1-6.0"
}
},
"description": "Synthesize an EPW server-side and analyze it. Stats only — file never returned. lat + lon required. Same morph/UHI/event params as generate_weather_file."
},
"compact": {
"type": "boolean",
"description": "Return a ~10-field headline-only response (~100 tokens) instead of the full ~800-token payload. Drops monthly arrays, peak days, n_hours, weather_basis blob. Good for sanity checks, dashboards, batched chained calls. Set to false (default) when you need the full payload."
},
"include_idf": {
"type": "boolean",
"description": "Add ready-to-paste EnergyPlus SizingPeriod:DesignDay IDF objects to the response. AEC-facing. Ignored when compact=true."
},
"include_full_ashrae": {
"type": "boolean",
"description": "Add ASHRAE 0.4%/1%/2% cooling DB + 99.6%/99% heating DB design conditions to the response. Free. Ignored when compact=true."
},
"include_improbability": {
"type": "boolean",
"description": "Add EPWForge's stress-test improbability score (config mode only). Indicates how extreme the synthesized scenario is vs historical baselines."
}
}
},
"annotations": {
"readOnlyHint": true
}
}{
"name": "find_station",
"description": "Search the GuzzStations catalog (17,000+ weather stations worldwide, self-hosted mirror of OneBuilding TMYx). Returns matching stations with EPW URLs ready to pass to analyze_weather or chart_weather. Optionally enriches with AMY extreme years (hottest / coldest / most-humid on record) and CMIP6 climate deltas. No auth required.",
"inputSchema": {
"type": "object",
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude — when set, results sorted by proximity"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"ssp": {
"enum": [
"ssp126",
"ssp245",
"ssp370",
"ssp585"
],
"type": "string",
"description": "SSP scenario (only used with include_climate_deltas). ssp370 is the recommended high-end; ssp585 (SSP5-8.5) is an opt-in extreme stress-test pathway for worst-case analysis."
},
"year": {
"enum": [
2030,
2035,
2040,
2045,
2050,
2060,
2070,
2080,
2090,
2100
],
"type": "integer",
"description": "Future horizon (only used with include_climate_deltas)"
},
"query": {
"type": "string",
"description": "Search by city / state (case-insensitive partial match)"
},
"country": {
"type": "string",
"description": "ISO 3-letter country code filter, e.g. 'USA', 'GBR'"
},
"percentile": {
"enum": [
5,
10,
25,
50,
75,
90,
95
],
"type": "integer",
"description": "Warming percentile (only used with include_climate_deltas, default 50)"
},
"max_results": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max stations (default: 10)"
},
"site_elevation_m": {
"type": "number",
"description": "Site elevation in metres. Strongly recommended when lat/lon are set: elevation difference predicts whether a station is representative about 3x better than distance does, and supplying it turns the recommendation from a distance guess into a measured call."
},
"include_amy_extremes": {
"type": "boolean",
"description": "When true and lat+lon are set, also returns the hottest / coldest / most-humid years on record (per ERA5, 1950–present). Useful for picking AMY basis years."
},
"include_climate_deltas": {
"type": "boolean",
"description": "When true with lat+lon+ssp+year, also returns the monthly CMIP6 delta-T per month and per variable. Lets agents reason about specific shifts before generating files."
}
}
},
"annotations": {
"readOnlyHint": true
}
}{
"name": "preview_forge_bundle",
"description": "Preview a fixed-price Forge bundle for a location — the no-account way to buy weather files. Returns the exact scenario breakdown, file count, price, and a purchase link the user opens for guest checkout. Bundles: Carbon (10 scenarios), Titanium (30), Damascus (64); each scenario delivered as EPW + DDY + STAT + PVsyst. Free, no auth, creates no order.",
"inputSchema": {
"type": "object",
"required": [
"bundle_id"
],
"properties": {
"lat": {
"type": "number",
"description": "Site latitude (optional — for a location-specific summary)."
},
"lon": {
"type": "number",
"description": "Site longitude."
},
"location": {
"type": "string",
"description": "Optional human label for the site, e.g. 'Boston, MA'."
},
"bundle_id": {
"enum": [
"carbon",
"titanium",
"damascus"
],
"type": "string",
"description": "Which bundle to preview."
}
}
},
"annotations": {
"readOnlyHint": true
}
}Get an email or webhook when this server's readiness drops by 10+ points, tool-poisoning text appears, or a tool breaks:
curl -X POST https://glimind.com/v1/subscriptions -H 'content-type: application/json' -d '{"tools":["mcp-registry/io.github.guzz-labs/epwforge-mcp"],"email":"[email protected]"}'Agents: watch_tool({"toolId": "mcp-registry/io.github.guzz-labs/epwforge-mcp"}) over MCP.
generate_weather_file ~1,644 tokenschart_weather ~1,306 tokensanalyze_weather ~1,208 tokensfind_station ~610 tokensexplore_design_conditions ~432 tokensStatic checks of the advertised tools/list (schema, descriptions, annotations, tool-poisoning patterns, names, size) plus observed protocol, uptime, latency and contract changes. Read-only: no tool is ever called. Weights: schema 15, docs 20, safety 15, efficiency 15, compatibility 15, protocol 5, reliability 10, stability 5. Token counts are estimates (~3.6 characters per token).
Operator? Fix these, then re-check live. Embed the readiness badge:
[](https://glimind.com/server/mcp-registry%2Fio.github.guzz-labs%2Fepwforge-mcp?ref=badge)
<a href="https://glimind.com/server/mcp-registry%2Fio.github.guzz-labs%2Fepwforge-mcp?ref=badge"><img src="https://glimind.com/v1/readiness/badge/mcp-registry%2Fio.github.guzz-labs%2Fepwforge-mcp.svg" alt="MCP agent-readiness"></a>
.. image:: https://glimind.com/v1/readiness/badge/mcp-registry%2Fio.github.guzz-labs%2Fepwforge-mcp.svg :target: https://glimind.com/server/mcp-registry%2Fio.github.guzz-labs%2Fepwforge-mcp?ref=badge :alt: MCP agent-readiness
Glimind records every version of this server's tool definitions in a signed, append-only transparency log. Current manifest sha256:a738d26460480615…, first seen 2026-10-17, included at leaf 1900 of 55,434. Version history · verify what your client received.
Compare: most reliable data servers · most reliable media servers · most reliable search servers · most reliable commerce servers
Glimind tells agents whether a server is up right now and how to call it, then fails over to a live alternative when it isn't.
Claude Code
claude mcp add --transport http glimind https://glimind.com/mcp
Claude Desktop · Windsurf · Cline (mcpServers JSON)
{
"mcpServers": {
"glimind": {
"type": "http",
"url": "https://glimind.com/mcp"
}
}
}
As of 2026-10-23 05:08 UTC, the Guzz Labs Epwforge MCP server is down with a Glimind reliability score of 38/100 (grade F). Over the last 30 days it answered 99.8% of Glimind's liveness checks. It had 2 outages in 90 days, with a median recovery of 4 minutes.
Guzz Labs Epwforge MCP server advertises 6 tools, including analyze_weather, chart_weather, explore_design_conditions, find_station, generate_weather_file.
Point your MCP client at this streamable-http endpoint: https://epwforge.com/api/mcp
Glimind scanned all 6 tool definitions for tool-poisoning patterns — hidden or invisible characters, instructions that override the model, concealment from the user, requests to read credential or MCP config files, conversation exfiltration and cross-tool shadowing — and found none. This checks what the server tells the model, not what its code does; review the source before granting access to sensitive data.
Status page: 90-day uptime, every outage and how long it lasted.
Claim this listing to get the Verified operator marker, a remediation checklist and owner analytics, or embed the live badge from any of the tool pages above. Maintainers: alerts, deploy attestation and monthly reports.
Status is an automated estimate from Glimind's liveness checks (handshake and tool listing only; no tool is ever called) and may lag or differ from your network. Glimind is not affiliated with this server or its operator. Operator? Request a correction or opt out at https://glimind.com/opt-out.