
Gagelink
io.github.Adeniyikayodee由 GitHub 账号 Adeniyikayodee 发布v0.7.0更新于 Oct 24, 2026
River level, streamflow, floods and basins from USGS, NOAA, Hub'Eau, UK Environment Agency, SWOT
概览
GageLink 让 AI 助手以只读方式获取水文数据——河流水位、流量、洪水预报、流域和卫星水位——并附带单位、基准面和记录状态。
- 可以做什么
- 查找监测站,读取站点元数据与参考框架,包括基准面偏移及在覆盖范围内通过 NOAA VDatum 的换算。获取各参数的最新读数、指定日期范围的时间序列、年度峰值流量、带洪水阈值的预报、无测站河段的模型流量以及卫星水位。沿河网追溯上游和下游站点,并获取汇水流域范围。解析参数代码,并导出记录每次检索的清单以便日后重放和审计。四个提示词分别引导干舷校核、洪水状态、站点查找和可复现回答;静态资源列出参数、基准面和覆盖范围。
- 适用场景
- 适合涉及河流水位、流量、洪水等级、堤坝干舷、流域面积或上下游关系的问题,尤其是在混用基准面或临时记录可能造成误导时。覆盖以美国最完整,对法国、英国和全球卫星数据只有部分支持。
- 运行要求
- 以 Python 包形式在本地运行(需 Python 3.10 或更高版本),可通过 uvx 或 pip 安装,也可使用 .mcpb 打包文件;可选的 HTTP 模式仅绑定回环地址。无需账户。需要能访问各机构数据服务的网络。可选的 GAGELINK_API_KEY 可提高每小时请求额度。
安装
在 SourceWeft 中
- 打开 控制台中的 Gagelink,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
GageLink
Hydrology data for AI agents, with the reference frames kept attached.
River levels, streamflow, flood forecasts, drainage basins and satellite water levels from USGS, NOAA, Hub'Eau, the UK Environment Agency and SWOT. Every value arrives carrying its unit, the datum it was measured from, its timezone, and whether the record is provisional or approved.
mcp-name: io.github.Adeniyikayodee/gagelink
Pre-alpha. The API may change.
Install
pip install gagelink for the library. From an MCP client, with nothing installed:
Or open the .mcpb bundle,
which carries the server and its dependencies in one file.
No account is needed. A free key raises the
allowance from 50 requests an hour to 1,000; set it as GAGELINK_API_KEY.
What can it answer?
- How high is the river, and how does that compare with flood stage?
- How much freeboard is there between the water and a surveyed levee crest?
- What is the flow now, and what fraction of the record peak is that?
- What is forecast over the next few days, and does it cross a flood category?
- What lies upstream or downstream along the river network?
- How large is the basin draining to this point?
- What did a station record over a date range, and has that record been revised?
- What is the water surface elevation of a river with no gage on it?
- Is a reading provisional or approved, and how old is it?
Why the frames matter
At Little Falls on the Potomac, a river stage of 3.02 ft is measured upward from the
gage's own zero. A surveyed levee crest of 41 ft is measured upward from a national datum.
Both are lengths in feet, so subtracting one from the other produces a number that reads as
freeboard, and a units library will pass it.
The gage zero at this station sits 37.04 ft above NAVD88, so the stage is 40.06 ft on that datum and the freeboard is 0.94 ft. Subtracting without the offset gives 37.98 ft, which overstates the margin by a factor of 40 in the direction of calling a levee safe.
GageLink refuses that subtraction and returns the offset that makes it well defined. The same applies to satellite elevations, which sit on a geoid, and to modelled flows, which may have no measurement behind them.
python demo/freeboard.py runs the whole example offline from recorded responses.
Converting a datum
The offset is available for most stations, so the refusal can become an answer. Pass
on_datum to describe_location and the station's offset is converted through NOAA's
VDatum, with the uncertainty of the conversion returned beside it:
Two things this surfaces are easy to miss.
The offset has an accuracy of its own. Across 7,361 USGS stream stations sampled in four
states, 3,397 publish an altitude for their gage datum. Of those, 72% are known no better
than a foot. The commonest published accuracy is 15 ft, a third were interpolated from a
topographic map, and about one in twenty is levelled to a hundredth. A freeboard is bounded
by that figure whatever precision the stage was read to, so describe_location returns it
alongside the method used to determine it.
Most stations are on the older datum. 58% of those altitudes are published on NGVD29 while a modern survey or lidar product is on NAVD88. Across the contiguous states the difference runs to feet.
on_datum also takes the tidal datums (MLLW, MLW, LMSL, MTL, DTL, MHW, MHHW)
for questions about level relative to the tide, and get_satellite_passes takes it to move
SWOT elevations off the EGM2008 geoid they are measured against. Both cover the contiguous
United States. Outside that coverage the conversion is refused and the reason is stated.
Tools
All thirteen are read-only and annotated as such, so a client asks for consent once.
Results come back as structured data against each tool's output schema, so a unit, datum or grade is a field the client can read directly.
A series is returned as a handle with a summary. A year of 15-minute record is 35,000 values, and no answer needs them in a context window.
Prompts
A tool list says what can be called. It does not say what to call first, and the datum rule above is an order of operations rather than a call. Four prompts state the ones that go wrong when a model assembles them itself.
Resources
The tables that do not change between calls, readable without spending a request against the hourly allowance.
gagelink://parameter/{code} and gagelink://datum/{name} are templates, and their
variables complete: the server answers completion/complete for them and for the prompt
arguments with a closed set of values. The specification scopes completion to prompt
arguments and resource template variables, which is why those two vocabularies are exposed
as templates as well as inside the tool schemas.
Coverage
ERA5, GRACE, CAMELS and HydroBASINS are available to library callers.
Each service publishes a different amount, and the tools say which. Hub'Eau states no unit on any value, so levels in millimetres and flows in litres per second are labelled here from a recorded table. The Environment Agency publishes no record grade on live data, so age is the only staleness signal for a UK reading.
To find a UK station, find_locations takes country=GB. The agency matches river and town
in full and in its own spelling, so River Thames returns stations and Thames returns
none. Free text matched against the station name is the filter to use when the agency's
spelling is unknown.
Protocol support
GageLink serves MCP revision 2026-07-28 and the three handshake revisions before it
(2025-06-18, 2025-03-26, 2024-11-05). It declares tools, prompts, resources and
completions, and declares listChanged false on all of them: every list is built at
import, so a client that subscribed would be waiting on a notification that cannot come.
The 2026 revision removed the initialize handshake. Every request carries its own version
and capabilities, so a client calls a tool on its first message and learns what the server
is through server/discover. Clients on the earlier revisions continue to open a session
and keep it.
Because a connection no longer implies a conversation, a client that wants a ledger of its
own names one in _meta:
Each name gets its own manifest, quantities and checks. A client that sends no name shares the default.
For clients that cannot start a local process:
This binds to loopback and checks the Origin header. It has no authentication, so
--host on a reachable interface gives away your hourly allowance.
Reproducible answers
Every retrieval is recorded with its URL, the time it was made, and a hash of the response
body. export_manifest returns that record, and a session can be replayed later in three
modes:
offlineuses the archived bodiesstrictchecks the live service returns identical datarevision_awareseparates a changed answer caused by an official record revision from one caused by changed code
The third mode exists because hydrology data is revised. A provisional measurement is often
approved or corrected months later, so an answer can change for reasons that have nothing to
do with the code. revision_aware tells the two causes apart.
Values are also checked against the ledger, so an answer can be audited:
Benchmark
waterbench measures whether the interface changes what a model gets right. It runs the
same nine tasks under three conditions: raw API responses, structured results with the
metadata stripped, and the full toolkit.
First results, gpt-oss-120b, eight replicates, 216 runs:
Six of the nine tasks sit at ceiling, which is a finding about the suite. Where it separates, the causes are legible. Two long-record tasks sent 49,864 and 42,006 prompt tokens through raw JSON against 5,462 and 2,384 through the toolkit. On the opaque-unit task, stripping the reference frames sent seven of eight runs into the recorded trap, answering with the USGS discharge of 3010 ft³/s where the forecast service had published 2.95 kcfs.
One model and a small suite, so these numbers are an early signal about the interface. A general claim would need more models and more tasks.
Development
Requires Python 3.10 or later. The suite answers from recorded fixtures and needs no network
access. mypy src/gagelink is expected to be clean.
License
MIT
来源:README.md,提交 8ce1d92
工具
0版本历史
1- v0.7.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分