For agents

AI & MCP

An MCP server ships in this repository. Point an agent at it and it can fetch a stored fishing report — the verdict, the wave ladder, the conditions and the disclosure block — without burning a data call to do it.

Read this before you wire anything up. The MCP server is built and working over stdio, and a hosted HTTP endpoint is live at mcp.fishingreportagent.com/mcp — POST a JSON-RPC body, authenticated per request with your own API key. A GET returns a JSON-RPC error by design; the endpoint is stateless. The account and key endpoints on the developer docs page are live; the rest are still shapes. This page marks every part of the surface live or planned, and nothing here is a commitment to a schema.

How it works

Reports are generated once and stored as standalone HTML artifacts. The MCP server reads those artifacts. It does not re-fetch weather, and it does not re-render anything to answer a tool call.

// one generation, then unlimited free reads generate → artifact (HTML + JSON) → store → serve ↑ MCP tool call ─────┘ // a disk read, nothing more

That single design choice is why an agent can ask for the same report a thousand times for nothing, and why an upstream outage degrades new reports without breaking the ones already generated.

Tools

TOOL get_fishing_report Live

The full report from the artifact store. Accepts a slug, or a lat/lng pair with an optional local date.

format
json (default) returns the structured report; text returns a readable summary.
Never regenerates
If no artifact matches, the tool refuses and names the command that would generate one. It does not quietly go and fetch the weather.
// tools/call { "name": "get_fishing_report", "arguments": { "lat": 27.62, "lng": -83.2, "format": "text" } }
TOOL list_locations Live

Lists the runs in the artifact store, newest first, with an optional free-text query and limit. Read-only.

TOOL get_conditions Live

Just the conditions block — wind, gusts, air temperature, pressure, cloud and the hourly series — plus the wave ladder, from a stored report.

TOOL get_usage Live

The caller's remaining daily allowance and this server's auth mode.

TOOL list_affiliate_partners Live

The ranked affiliate shortlist with rates, cookie windows and approval terms. Planning data for operators — not for end users.

TOOL generate_report Planned

Deliberately absent. Generation costs upstream calls and, on one free tier, real quota. It stays an explicit act, not something an agent falls into. If this ever ships it will be keyed, quota-checked and rate-limited from the first line.

Auth & quota

Bearer key, per account

Hooks liveHosted auth planned

The interface carries auth and quota from day one: a bearer key, and an allowance counted per account rather than per key so a second tool cannot double your limit. The free allowance is 10 calls a day per account.

Attribution & disclosure — mandatory on every result

This is a marine-safety product, so the attribution and the disclaimer are attached to every tool result — success, refusal or error. Not a header, not a docs page: the payload.

// every tool result carries these { "attribution": [ "Contains data from NOAA (public domain) …" ], "disclaimer": "Informational aid only — not a marine forecast, not a navigation or safety service…", "report": { "verdict": { "call": "go", "score": 8.62 } } }

Live vs planned

PartStatusNotes
Report generation (verdict + artifact)LiveRuns from this repository against live upstreams; publishes to /report.html and /reports/<slug>.html.
MCP server, stdioLiveFive tools, JSON-RPC 2.0 over stdio.
MCP server, HTTPLiveHosted at mcp.fishingreportagent.com/mcp. Stateless; POST a JSON-RPC body, authenticated per request with your own API key.
Hosted REST APILiveAccount, key and usage endpoints under /v1/* on the same host. See API & docs.
Accounts, keys, usage meterPartialAccounts, sessions, API keys and the usage meter are live, with server-side logout. Self-service sign-in is closed (internal_only) until the rate limiter moves to a store that can actually enforce it — until then sign-in links are issued by the operator.
Wave ladderPartialWorks where a wave-capable buoy is in range. Gulf routes often have a station reporting wind and water temperature but no wave sensor — the ladder then reports the gap rather than estimating it.
Tides & solunarLiveNOAA CO-OPS and USNO, both public domain.
Inland mode (USGS flow, reservoirs)PartialUSGS adapter built and verified against live gauges (nearest gauge, flow, gauge height, water temperature) — public domain, no key. Not yet wired into the report render path, so reports do not show it.
Reefs, ramps, MPAsPlannedDesigned, not built.
Affiliate links in reportsPlannedNo program approved yet, so no report contains a link and none is monetised. The disclosure mechanism is built and travels with the link when enabled.

Three rules this surface obeys

Never fabricate a reading

A missing value is reported as missing, with the reason. There is no mock-data fallback anywhere in the pipeline, and no neutral filler in the verdict.

Never overclaim a source

One source is used per block and is named. Single-source data is never described as multi-source, correlated or cross-validated — the count comes from what actually contributed.

Never clear a run we cannot read

If the sea state cannot be read, the report refuses to clear the open-water run and says so. An optimistic verdict on a safety product is a liability, not a feature.

See the live report → API & developer docs