Koskamo

EPW.tools MCP

An MCP server that exposes EPW.tools' weather file generation engine to AI agents. It allows assistants to generate AMY, TMY, future climate, and forecast EPW files, retrieve design conditions, and find nearest weather stations for any location, enabling automated building energy simulation workflows.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

EPW.tools MCP logo, by EPW.toolsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by EPW.tools
You need:Set your EPW.tools API key in the MCP configuration
MCP endpoint (Streamable HTTP)
https://epw.tools/api/mcp
Vendor documentation

What its tools do

9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

9 of 9 have a description · 9 of 9 declare behavior hints · 0 of 8 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Generate AMY EPW files for any location and year
  • Retrieve heating and cooling design conditions
  • Find nearest NOAA weather stations by coordinate
  • Generate future climate scenarios using CMIP6 data

Source and maintenance

Community listingRegistry 0.5.3
Maintenance checked

Protocol and capabilities

Server
EPW.tools 1.30.0
MCP protocol negotiated in check
2025-11-25
Tools
9 advertised
Resources
4 advertised
Resource templates
0 advertised
Prompts
4 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  },
  "experimental": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

EPW.tools makes weather files for building simulation: actual years (AMY) for any point on Earth from 1990, typical years (TMY), forecasts, CMIP6 future climate, design conditions in two modes (ASHRAE method or EPW.tools Enhanced), street-level urban temperature for 53 US cities. Read tools are free and need no key. generate_* tools need the user's EPW.tools API key (free account, 2 credits; 4 with an academic email) passed as api_key; they return a job_id at once: poll with get_job_result, then give the user the download URL. Costs: 1 credit per file, 3 for a future-climate file, +2 for street-level urban, forecast up to 7 days free. Read epwtools://catalog/* before guessing parameter values.

Tools

9 advertised

get_nearest_stations
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Nearest weather stations to a point (name, WMO id, distance, years of record). Free, no key.

get_nearest_stations input schema
{
  "type": "object",
  "title": "get_nearest_stationsArguments",
  "required": [
    "lat",
    "lon"
  ],
  "properties": {
    "n": {
      "type": "integer",
      "title": "N",
      "default": 5
    },
    "lat": {
      "type": "number",
      "title": "Lat"
    },
    "lon": {
      "type": "number",
      "title": "Lon"
    }
  }
}
get_nearest_stations output schema
{
  "type": "object",
  "title": "get_nearest_stationsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
get_nearest_stations annotations
{
  "title": "Nearest weather stations",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_design_conditions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Heating and cooling design conditions for any site, free, in one of two modes that are never mixed. mode="ashrae_method": the ASHRAE Handbook Ch. 14 method replicated at the nearest ASHRAE station for the chosen edition (2025, 2021, 2017, 2013, 2009, 2005); validated about 0.25 degC from the published tables. mode="enhanced": EPW.tools Enhanced, not the ASHRAE method: values at the site itself for today's climate with a tested 90 % range. The DDY file for Enhanced costs 1 credit through the web or the API.

get_design_conditions input schema
{
  "type": "object",
  "title": "get_design_conditionsArguments",
  "required": [
    "lat",
    "lon"
  ],
  "properties": {
    "lat": {
      "type": "number",
      "title": "Lat"
    },
    "lon": {
      "type": "number",
      "title": "Lon"
    },
    "mode": {
      "type": "string",
      "title": "Mode",
      "default": "ashrae_method"
    },
    "edition": {
      "type": "string",
      "title": "Edition",
      "default": "2025"
    },
    "location_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Location Name",
      "default": null
    },
    "current_climate": {
      "type": "boolean",
      "title": "Current Climate",
      "default": true
    }
  }
}
get_design_conditions output schema
{
  "type": "object",
  "title": "get_design_conditionsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
get_design_conditions annotations
{
  "title": "Design conditions (ASHRAE method or EPW.tools Enhanced)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_cmip6_models
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

The models available for future-climate morphing: `models` are global CMIP6 models (NASA NEX-GDDP, 25 km); `regional` are EURO-CORDEX pairs (12.5 km, Europe only, 27-72 N / 25 W-45 E) usable as `model` ids. Free.

list_cmip6_models input schema
{
  "type": "object",
  "title": "list_cmip6_modelsArguments",
  "properties": {}
}
list_cmip6_models output schema
{
  "type": "object",
  "title": "list_cmip6_modelsOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
list_cmip6_models annotations
{
  "title": "CMIP6 models for future climate",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
analyze_epw
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Summary statistics of any public EPW by URL (OneBuilding, EnergyPlus, a shared file): location header, dry-bulb mean/min/max, annual global horizontal irradiation, data range warnings. Free, no key. 10 MB max.

analyze_epw input schema
{
  "type": "object",
  "title": "analyze_epwArguments",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "title": "Url"
    }
  }
}
analyze_epw output schema
{
  "type": "object",
  "title": "analyze_epwOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
analyze_epw annotations
{
  "title": "Analyze an EPW by URL",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_epw
Advertised by the server during the last successful anonymous check.
Open-world

Start an actual-year (AMY) EPW + DDY + STAT for any point, 1990 to last year. 1 credit; +2 with urban_street_level (53 US cities: hourly street-level air temperature from citizen stations). Returns a job_id; poll with get_job_result.

generate_epw input schema
{
  "type": "object",
  "title": "generate_epwArguments",
  "required": [
    "lat",
    "lon",
    "year",
    "api_key"
  ],
  "properties": {
    "lat": {
      "type": "number",
      "title": "Lat"
    },
    "lon": {
      "type": "number",
      "title": "Lon"
    },
    "year": {
      "type": "integer",
      "title": "Year"
    },
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "dc_edition": {
      "type": "string",
      "title": "Dc Edition",
      "default": "2025"
    },
    "data_source": {
      "type": "string",
      "title": "Data Source",
      "default": "merra2"
    },
    "location_name": {
      "type": "string",
      "title": "Location Name",
      "default": "Site"
    },
    "urban_street_level": {
      "type": "boolean",
      "title": "Urban Street Level",
      "default": false
    }
  }
}
generate_epw output schema
{
  "type": "object",
  "title": "generate_epwOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
generate_epw annotations
{
  "title": "Generate actual-year EPW (AMY)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_tmy
Advertised by the server during the last successful anonymous check.
Open-world

Start a typical meteorological year from a chosen period (at least 5 years; 10-20 is usual). 1 credit.

generate_tmy input schema
{
  "type": "object",
  "title": "generate_tmyArguments",
  "required": [
    "lat",
    "lon",
    "start_year",
    "end_year",
    "api_key"
  ],
  "properties": {
    "lat": {
      "type": "number",
      "title": "Lat"
    },
    "lon": {
      "type": "number",
      "title": "Lon"
    },
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "end_year": {
      "type": "integer",
      "title": "End Year"
    },
    "dc_edition": {
      "type": "string",
      "title": "Dc Edition",
      "default": "2025"
    },
    "start_year": {
      "type": "integer",
      "title": "Start Year"
    },
    "location_name": {
      "type": "string",
      "title": "Location Name",
      "default": "Site"
    }
  }
}
generate_tmy output schema
{
  "type": "object",
  "title": "generate_tmyOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
generate_tmy annotations
{
  "title": "Generate typical year (TMY)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_future_climate
Advertised by the server during the last successful anonymous check.
Open-world

Start a CMIP6-morphed future EPW (Belcher 2005). scenario: ssp126, ssp245, ssp370, ssp585; horizon: any decade 2030-2100; model from list_cmip6_models. 3 credits.

generate_future_climate input schema
{
  "type": "object",
  "title": "generate_future_climateArguments",
  "required": [
    "lat",
    "lon",
    "api_key"
  ],
  "properties": {
    "lat": {
      "type": "number",
      "title": "Lat"
    },
    "lon": {
      "type": "number",
      "title": "Lon"
    },
    "model": {
      "type": "string",
      "title": "Model",
      "default": "MRI-ESM2-0"
    },
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "horizon": {
      "type": "integer",
      "title": "Horizon",
      "default": 2050
    },
    "scenario": {
      "type": "string",
      "title": "Scenario",
      "default": "ssp245"
    },
    "base_year": {
      "type": "integer",
      "title": "Base Year",
      "default": 2010
    },
    "location_name": {
      "type": "string",
      "title": "Location Name",
      "default": "Site"
    }
  }
}
generate_future_climate output schema
{
  "type": "object",
  "title": "generate_future_climateOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
generate_future_climate annotations
{
  "title": "Generate future-climate EPW (CMIP6)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_forecast
Advertised by the server during the last successful anonymous check.
Open-world

Start a forecast EPW for the next 1-15 days (operational sims, MPC, demand response). Up to 7 days free.

generate_forecast input schema
{
  "type": "object",
  "title": "generate_forecastArguments",
  "required": [
    "lat",
    "lon",
    "api_key"
  ],
  "properties": {
    "lat": {
      "type": "number",
      "title": "Lat"
    },
    "lon": {
      "type": "number",
      "title": "Lon"
    },
    "days": {
      "type": "integer",
      "title": "Days",
      "default": 7
    },
    "api_key": {
      "type": "string",
      "title": "Api Key"
    },
    "location_name": {
      "type": "string",
      "title": "Location Name",
      "default": "Site"
    }
  }
}
generate_forecast output schema
{
  "type": "object",
  "title": "generate_forecastOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
generate_forecast annotations
{
  "title": "Generate forecast EPW",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_job_result
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Status of a job started by a generate_* tool; when complete, the download URLs (they carry the key).

get_job_result input schema
{
  "type": "object",
  "title": "get_job_resultArguments",
  "required": [
    "job_id",
    "api_key"
  ],
  "properties": {
    "job_id": {
      "type": "string",
      "title": "Job Id"
    },
    "api_key": {
      "type": "string",
      "title": "Api Key"
    }
  }
}
get_job_result output schema
{
  "type": "object",
  "title": "get_job_resultOutput",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string",
      "title": "Result"
    }
  }
}
get_job_result annotations
{
  "title": "Job status and download links",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

4 advertised

climate_stress_test

Advertised by the server during the last successful anonymous check.

Baseline design conditions, then a 2050 SSP2-4.5 and a 2080 SSP3-7.0 future file for the same site.

lat
No description (required)
lon
No description (required)
location_name
No description
future_cooling_load

Advertised by the server during the last successful anonymous check.

How much the cooling design temperature shifts between today and a future horizon.

lat
No description (required)
lon
No description (required)
horizon
No description
scenario
No description
compare_sites

Advertised by the server during the last successful anonymous check.

Rank candidate sites (name:lat,lon; ...) by design conditions and heating/cooling degree days.

sites
No description (required)
site_weather_overview

Advertised by the server during the last successful anonymous check.

Quick numeric overview of a location from free tools only.

lat
No description (required)
lon
No description (required)

Resources

4 advertised

catalog_scenarios

Advertised by the server during the last successful anonymous check.

Valid CMIP6 scenarios, horizons and the ensemble percentile choice.

catalog_scenarios URI
epwtools://catalog/scenarios

MIME type: text/plain

catalog_credits

Advertised by the server during the last successful anonymous check.

What each product costs in credits.

catalog_credits URI
epwtools://catalog/credit-costs

MIME type: text/plain

catalog_sources

Advertised by the server during the last successful anonymous check.

Where the hourly data comes from and which product uses what.

catalog_sources URI
epwtools://catalog/data-sources

MIME type: text/plain

methodology

Advertised by the server during the last successful anonymous check.

One-page method summary with the limits an agent should state to the user.

methodology URI
epwtools://methodology/overview

MIME type: text/plain

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (5 of 5 answered).

  1. 2026-11-07: 1 of 1 checks answered
  2. 2026-11-09: 2 of 2 checks answered
  3. 2026-11-10: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1053 ms
95th percentile latency
1053 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1053 ms · metadata changed · 9 tool(s), 4 resource(s), 0 resource template(s), 4 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http epw-mcp https://epw.tools/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add epw-mcp --url https://epw.tools/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable epw-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "epw-mcp": {
      "url": "https://epw.tools/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "epw-mcp": {
      "type": "streamableHttp",
      "url": "https://epw.tools/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start epw-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "epw-mcp": {
      "type": "http",
      "url": "https://epw.tools/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http epw-mcp https://epw.tools/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://epw.tools/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "epw-mcp": {
      "serverUrl": "https://epw.tools/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like EPW.tools MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.