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.
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.
One normalization layer in front of the upstreams, and one cache in front of both.
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.
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.
The data tool. One point, one value per source per timestamp, with the spread across sources exposed rather than collapsed.
waveHeight,wavePeriod,windSpeed. An unknown id is refused, never ignored.metric (default) or imperial.Read missing_requested. If it names waveHeight, that station has no wave sensor — a coverage gap, not a gap in the data.
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.
The caller's own quota readout. Quota is per account, not per key.
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.
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.
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.
Everything the MCP server does, an agent without MCP can do directly.
Liveness, schema_version, the wired sources_enabled, and the per-source cycle a consumer keys its cache on. No key, no quota.
The single-point slice. Full reference on the API reference.
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.
Catalog, as list_sources.
The current attribution + disclaimer pair.
The caller's quota, as get_usage.
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.
stringstringBoth 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:
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.
Every moving part, with its true state. If it is not Live here, do not build on it yet.
| Part | Status | Note |
|---|---|---|
| REST API (keyed, metered) | Live | Deployed, auth fail-closed, per-account quota. |
/v2/marine/point | Live | Single point, one value per source per timestamp. |
/v2/marine/points | Live | Batched ladder, max 24, inline per-point failure. |
/health (cycle + schema) | Live | Public, quota-free. |
/v2/sources, /v2/disclaimer | Live | Public. |
/v2/usage | Live | Per-account meter. |
| MCP server — stdio | Live | Six tools over JSON-RPC on stdio. Run it from the repo with your key. |
| MCP server — HTTP/SSE (hosted) | Live | Deployed 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 data | Partial | Single source (NDBC observations). Real, but no cross-source spread, and a ladder is one buoy across several coordinates. See meta.notices. |
| Wind & atmospheric data | Live | NDBC + NWS where both cover, so a real spread exists. |
| Gridded wave models (ECMWF, DWD, Météo-France, Copernicus) | Planned | Catalogued, not wired. Requires scheduled ingest; none of them serves a response today. |
| Tides & astronomy | Planned | No endpoint, no source, no schema parameter. |
| Accounts: login, dashboard, keys, logout | Planned | Signup and key issuance work over the API; the self-service UI is in build. |
| Paid plans / billing | Planned | Pricing is published; no plan is purchasable yet. |