io.github.cyanheads/us-drought-monitor-mcp-server
io.github.cyanheads/us-drought-monitor-mcp-servercyanheadsstreamable-httpv0.1.3Scanned
Query U.S. Drought Monitor severity, DSCI, population, and drought duration.
7 tools: 1 change things and 6 only read.
- Reads private data · 2
- Reads text others write · 4
- Can send data out · 0
- 1 finding
Anlyon alternative
1 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
7 tools
Changes things 1Claude Code: ask
drought_dataframe_queryRun one DuckDB read expression against staged drought tables, optionally ending with one semicolon.Reads private data1 finding
Why it is in this group
- The name "drought_dataframe_query" says "query": a word for reading.
- The description's first verb is "run": a word for a change.
- The input takes a statement or command to run (input.sql), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- private-dataThe description's first sentence says "db": it reads databases.
- private-dataThe name says "query" and the input takes a statement (input.sql): it reads databases.
Findings
- Warn
The server marks "drought_dataframe_query" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "drought_dataframe_query" says "query": a word for reading.
Description, as the server wrote it Run one DuckDB read expression against staged drought tables, optionally ending with one semicolon. Get canvas_id from drought_get_timeseries or drought_compare_areas and inspect columns with drought_dataframe_describe. For every original row, SELECT * FROM the table ORDER BY row_id and follow next_offset until null. Arbitrary SQL pagination requires your own stable ORDER BY. Exact totals require SELECT COUNT(*).
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
Only reads 6Show 6 read-only tools
drought_compare_areasRank all supported states, or counties within an optional state, on one published map.Reads text others writeNo findings
Why it is in this group
- The name "drought_compare_areas" says "compare": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Rank all supported states, or counties within an optional state, on one published map. Omit state for nationwide supported counties. With baselineDate, rank target minus exact baseline; missing sides are excluded explicitly. Equal values share competition rank. limit controls a staged preview, never discards comparable rows.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
drought_dataframe_describeInspect tables and column types in a canvas_id returned by drought_get_timeseries or drought_compare_areas.Reads private dataNo findings
Why it is in this group
- The name "drought_dataframe_describe" says "describe": a word for reading.
What it can reach
- private-dataThe description's first sentence says "inspect" and "table": it reads databases.
- private-dataThe input names a table (input.table_name), and the tool reads: it reads databases.
Description, as the server wrote it Inspect tables and column types in a canvas_id returned by drought_get_timeseries or drought_compare_areas. Supply table_name for its complete source query, area/date/metric, units, missing-data and provenance metadata. Omit table_name for bounded schema summaries. Tokens are shareable capabilities and expire; this tool never lists other tokens.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
drought_get_current_severityGet current or dated drought severity, cumulative and categorical area percentages, area square miles, supported population counts and experimental upstream DSCI.Reads text others writeNo findings
Why it is in this group
- The name "drought_get_current_severity" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Get current or dated drought severity, cumulative and categorical area percentages, area square miles, supported population counts and experimental upstream DSCI. Resolve identifiers with drought_list_reference. DSCI changes use exactly 4 and 52 weeks earlier; missing observations remain null. US selects both CONUS and Total.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
drought_get_timeseriesGet weekly drought metrics and experimental DSCI for 1–100 explicit areas sharing one geography type and HUC level.Reads text others writeNo findings
Why it is in this group
- The name "drought_get_timeseries" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Get weekly drought metrics and experimental DSCI for 1–100 explicit areas sharing one geography type and HUC level. Resolve identifiers with drought_list_reference. Dates select inclusive Tuesday map weeks. Missing values remain null; summaries include every tied peak. Complete large results are staged; use the returned dataframe tools to read every row.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
drought_get_weeks_in_droughtGet authoritative consecutive streaks or non-consecutive week counts when any county area meets the selected drought category or worse.Reads text others writeNo findings
Why it is in this group
- The name "drought_get_weeks_in_drought" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Get authoritative consecutive streaks or non-consecutive week counts when any county area meets the selected drought category or worse. Supply states or one county, never both; omitted selectors mean supported nationwide counties. Counts are duration statistics, not program eligibility. Follow nextCursor with unchanged filters within five minutes.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
drought_list_referenceLook up drought categories, DSCI formulas, metric support, publication coverage and exact geography identifiers.No findings
Why it is in this group
- The name "drought_list_reference" says "list": a word for reading.
Description, as the server wrote it Look up drought categories, DSCI formulas, metric support, publication coverage and exact geography identifiers. Filter complete families by nameContains before paging. Use state for counties or climate_divisions; huc requires hucLevel 2, 4, 6 or 8 and accepts a shorter parentHuc. Follow nextCursor with the same filters to browse every match.
Annotations the server declares
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.
- Reads private data2
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write4
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
The server marks "drought_dataframe_query" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "drought_dataframe_query" says "query": a word for reading.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 0.1.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http us-drought-monitor https://us-drought-monitor.caseyjhand.com/mcpclaude mcp add --transport http us-drought-monitor https://us-drought-monitor.caseyjhand.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__us-drought-monitor__drought_list_reference",
"mcp__us-drought-monitor__drought_get_current_severity",
"mcp__us-drought-monitor__drought_get_timeseries",
"mcp__us-drought-monitor__drought_compare_areas",
"mcp__us-drought-monitor__drought_get_weeks_in_drought",
"mcp__us-drought-monitor__drought_dataframe_describe"
],
"ask": [
"mcp__us-drought-monitor__drought_dataframe_query"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as us-drought-monitor. Review it before you use it.
Capability tags behind 6 rules
- mcp__us-drought-monitor__drought_get_current_severity untrusted-input
- mcp__us-drought-monitor__drought_get_timeseries untrusted-input
- mcp__us-drought-monitor__drought_compare_areas untrusted-input
- mcp__us-drought-monitor__drought_get_weeks_in_drought untrusted-input
- mcp__us-drought-monitor__drought_dataframe_query private-data
- mcp__us-drought-monitor__drought_dataframe_describe private-data
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.github.cyanheads/us-drought-monitor-mcp-server/verify?hash=d80db40f3216d676fc1f5fd6b95b008f5822fd8fb2fddaed139eeb244f34cb0e" | jq -e '.changed == false'Pinned hash d80db40f3216, from Oct 24, 2026, 09:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.github.cyanheads/us-drought-monitor-mcp-server/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.github.cyanheads/us-drought-monitor-mcp-server)Source: MCP Registry · repository. Synced Oct 24, 2026, 09:17 UTC.