For agents

AI & MCP

Everything an agent can call right now — and an explicit list of what is still a promise. Every claim below carries a status marker, and the marker is the honest part.

Read this first. The REST API and the MCP server are live and keyed. Two upstream sources are wired: NOAA NDBC buoy observations and NOAA/NWS forecast grids — both US Government work, public domain. Wave data comes from NDBC alone, so it is single-source everywhere: a multi-leg ladder is one buoy's reading sampled against several coordinates, not a spatial gradient, and each response says so in meta.notices. Tides, astronomy, currents and every gridded wave model are not built — they are marked Planned below and no endpoint returns them. We would rather you see that here than discover it in a payload.

How it works

One normalization layer in front of the upstreams, and one cache in front of both.

AI client (MCP) ──stdio / HTTP──┐ ├──▶ weatheragent-api ──▶ NDBC (buoy observations) browser / curl (REST) ───────────────────────────┘ │ NWS (gridpoint forecasts) │ cycle-keyed cache (KV)

The cache is the reason this is cheap. A response is keyed on the upstream model cycle — not a wall-clock timer — plus the snapped grid cell, the parameters, the horizon and the units. Every request inside the same cycle is a cache hit: zero upstream work, zero quota. Read the current cycle for each source from GET /health (public, no key, no quota) and key your own artifacts on it.

MCP tools

Six tools are registered. Five work today; one refuses by design. Tool results carry the same meta as the REST payload, plus the mandatory disclosure pair. The hosted endpoint is https://mcp.theweatheragent.com/mcp (Streamable HTTP) — send your API key on each request; the server stores no key of its own.

Liveget_point_forecast1 call

The data tool. One point, one value per source per timestamp, with the spread across sources exposed rather than collapsed.

lat, lng required
Decimal degrees. Validated and rejected out of range.
params
Comma-separated canonical ids. Default waveHeight,wavePeriod,windSpeed. An unknown id is refused, never ignored.
hours
1–240. Default 48.
units
metric (default) or imperial.
// live result, trimmed to two fields and one hour { "sources_ok": ["ndbc","nws"], "hours": [ { "time": "2026-09-13T11:00:00.000Z", "waveHeight": { "ndbc": 0.4 }, "windSpeed": { "nws": 2.057777777777778 } } ], "meta": { "cache_cycle": "2026-09-13T13:30:00.000Z", "nearest_station": { "id":"42098", "name":"Egmont Channel Entrance, FL (214)", "distance_km":60, "params":["waveHeight","wavePeriod","waveDirection","airTemperature","waterTemperature"], "missing_requested":["windSpeed"] }, "notices": ["waveHeight, wavePeriod came from a single source — there is no cross-source spread to read for these parameters."], "attribution": "…", "disclaimer": "…" } }

Read missing_requested. If it names waveHeight, that station has no wave sensor — a coverage gap, not a gap in the data.

Livelist_sources0 calls

The source catalog: licences, transport (observation / relay / grid), resolution and cadence. Metadata only — it costs no quota. Use it before assuming a parameter is available.

Liveget_usage0 calls

The caller's own quota readout. Quota is per account, not per key.

// live "quota": { "used": 167, "limit": 9007199254740991, "resets_at": "2026-09-14T00:00:00.000Z", "plan": "internal" }
Liveget_disclaimer0 calls

The current attribution and disclaimer strings. Fetch these and attach them if you re-serve our data — they change when the wired source set changes.

Livegenerate_fishing_reportMetered

Builds a multi-leg report. Metered per ladder leg. When a plan does not allow a leg, or a leg cannot be read, the tool refuses and names the reason — it never substitutes a default or an estimate.

Plannedget_tide_extremes—

No tide source is wired, so this tool does not return data. It is registered so a client discovers it early, and it refuses with a structured reason rather than inventing a tide. Tide and astronomy are separate workstreams with no source contracted yet.

REST endpoints

Everything the MCP server does, an agent without MCP can do directly.

GET/healthPublic

Liveness, schema_version, the wired sources_enabled, and the per-source cycle a consumer keys its cache on. No key, no quota.

curl https://api.theweatheragent.com/health
GET/v2/marine/pointAuth

The single-point slice. Full reference on the API reference.

GET/v2/marine/pointsAuth

The batched ladder — up to 24 coordinates in one call, sharing params/hours/units. One request for a whole ladder instead of one per leg. A point that fails is reported inline and does not fail the batch.

GET/v2/sources Public

Catalog, as list_sources.

GET/v2/disclaimerPublic

The current attribution + disclaimer pair.

GET/v2/usageAuth

The caller's quota, as get_usage.

Auth & quota

API key in a header

Live

Send X-API-Key: <key>; Authorization: Bearer <key> also works. Keys are stored as a hash only — the raw value is shown once, at issuance, and cannot be recovered. Quota is per account, not per key.

When you exceed the allowance you get 429 with a Retry-After header and a machine-readable body naming used, limit, resets_at and plan.

A refused call costs nothing — and since today, it also costs no upstream work. The quota check runs before any source is contacted, so an over-quota request cannot burn capacity. A cache hit costs 0. An unauthenticated request is 401 and is refused before it reaches anything.

Attribution & disclosure — on every result

attributionstring
disclaimerstring

Both keys are required on every data-bearing tool result and every API response, and every data-bearing MCP tool advertises them as required in its output schema — so a client can see the obligation before it calls anything.

The attribution is generated from the sources that actually served a response. If only NOAA is wired, the attribution says NOAA — it cannot name a provider that did not contribute. Today, verbatim from /v2/disclaimer:

Contains data from NOAA (National Data Buoy Center buoy observations; National Weather Service gridpoint forecasts) — US Government work — public domain. Provided by The Weather Agent.

The disclaimer is provider-agnostic on purpose: it states the warranties and your duty to verify, and does not enumerate providers, so it cannot go stale when a source is added or removed. Fetch both rather than hardcoding them.

Live vs planned

Every moving part, with its true state. If it is not Live here, do not build on it yet.

PartStatusNote
REST API (keyed, metered)LiveDeployed, auth fail-closed, per-account quota.
/v2/marine/pointLiveSingle point, one value per source per timestamp.
/v2/marine/pointsLiveBatched ladder, max 24, inline per-point failure.
/health (cycle + schema)LivePublic, quota-free.
/v2/sources, /v2/disclaimerLivePublic.
/v2/usageLivePer-account meter.
MCP server — stdioLiveSix tools over JSON-RPC on stdio. Run it from the repo with your key.
MCP server — HTTP/SSE (hosted)LiveDeployed at https://mcp.theweatheragent.com/mcp — Streamable HTTP, stateless, and it holds no key of its own: you send yours per request. GET /health is public liveness; an unauthenticated tools/call is refused before any tool runs.
Wave dataPartialSingle source (NDBC observations). Real, but no cross-source spread, and a ladder is one buoy across several coordinates. See meta.notices.
Wind & atmospheric dataLiveNDBC + NWS where both cover, so a real spread exists.
Gridded wave models (ECMWF, DWD, Météo-France, Copernicus)PlannedCatalogued, not wired. Requires scheduled ingest; none of them serves a response today.
Tides & astronomyPlannedNo endpoint, no source, no schema parameter.
Accounts: login, dashboard, keys, logoutPlannedSignup and key issuance work over the API; the self-service UI is in build.
Paid plans / billingPlannedPricing is published; no plan is purchasable yet.
Attribution. Generated from the sources this deployment actually serves, so it can never name a provider that did not contribute. Today all wired sources are NOAA.

Disclaimer. The Weather Agent relays and normalizes data from third-party upstream providers. Data is provided "as is", without warranty of any kind, and may be delayed, incomplete or inaccurate. It is not a substitute for official marine forecasts, notices to mariners, or your own judgment. Independently verify all data against official sources before acting on it — especially any decision affecting personal safety or navigation.

© 2026 The Weather Agent