Skip to content

io.github.cyanheads/earthquake-mcp-server

by cyanheads · remote · local (npm) · no sign-in to list tools · v0.4.0 · published by GitHub user cyanheads

Search USGS and EMSC seismic data — real-time feeds, event queries, and earthquake counts.

Read only

4 tools: 4 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http earthquake https://earthquake.caseyjhand.com/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

4 tools

Only reads 4Claude Code: allow
  • earthquake_count_eventsCount earthquakes matching filters without fetching full records.No findings

    Why it is in this group

    • The name "earthquake_count_events" says "count": a word for reading.
    Description, as the server wrote it
    Count earthquakes matching filters without fetching full records. Use for statistical queries ("how many M5+ earthquakes in 2025?") or to gauge result size before calling earthquake_search_events. Omitting start_time counts only the last 30 days, so pass an explicit range for any period-specific question; queryEcho reports the window and filters the count actually covers. When exceeds_limit is true, the count exceeds 20,000 and a full search would be truncated — narrow filters before fetching. USGS returns the max_allowed cap (20,000); EMSC count endpoint does not return this field (max_allowed will be null). Counts can be scoped to a rectangular study area with min_latitude, max_latitude, min_longitude, and max_longitude — each independently optional. Combining the box with the lat/lon/radius circle intersects the two, counting only events inside both. Both catalogs include non-tectonic records, so a radius over a mining region counts quarry blasts alongside earthquakes — pass event_type="earthquake" on USGS to exclude them. USGS-specific filters (alert_level, event_type, min_felt, min_significance) are not sent when source=emsc — the response names them in ignoredFilters.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • earthquake_get_eventFetch detail for a specific earthquake by USGS event ID.No findings

    Why it is in this group

    • The name "earthquake_get_event" says "get": a word for reading.
    Description, as the server wrote it
    Fetch detail for a specific earthquake by USGS event ID. Returns the same normalized event a search result carries, plus a projection of the analysis products only the single-event response holds: PAGER impact alert and report link, ShakeMap peak intensity and ground motion, DYFI felt-report totals, the moment-tensor focal mechanism, landslide and liquefaction alerts, origin quality (azimuthal gap, station count, location uncertainty), and finite-fault rupture dimensions. Products are omitted when USGS produced none — a small automatic event typically has no detail at all, while a large reviewed one has most of it. Event IDs appear in the "id" field of earthquake_get_feed and earthquake_search_events results. This tool is USGS-only — EMSC events have no per-event detail endpoint.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • earthquake_get_feedFetch a USGS pre-computed real-time earthquake feed by magnitude tier and time window.No findings

    Why it is in this group

    • The name "earthquake_get_feed" says "get": a word for reading.
    Description, as the server wrote it
    Fetch a USGS pre-computed real-time earthquake feed by magnitude tier and time window. These feeds are CDN-cached by USGS and faster and more available than the query API — use them for "what's happening now" queries. "all" includes microseisms (M<1); "significant" is a USGS curation based on magnitude, felt reports, and PAGER impact estimates. "hour" returns 0–10 events typically; "month" can exceed 10,000 for the "all" tier, so results are returned a page at a time: count is the page size, totalCount the whole feed, and nextCursor the input for the following page. The cursor is opaque and must be passed back verbatim — unlike earthquake_search_events, these feeds retain the first-read generation for up to 15 minutes, subject to capacity eviction and restart. Pages fit a 24,000-byte result budget and can be smaller than limit. An expired cursor requires a fresh first read. For historical or filtered queries, use earthquake_search_events instead.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • earthquake_search_eventsSearch earthquakes by time range, magnitude, depth, location radius, PAGER alert level, or felt reports.No findings

    Why it is in this group

    • The name "earthquake_search_events" says "search": a word for reading.
    Description, as the server wrote it
    Search earthquakes by time range, magnitude, depth, location radius, PAGER alert level, or felt reports. Supports USGS (global, richer metadata: PAGER, DYFI, ShakeMap) and EMSC, an independent global catalog operated by the European-Mediterranean Seismological Centre. For location-based queries, provide latitude, longitude, and radius_km together. A rectangular study area is expressed with min_latitude, max_latitude, min_longitude, and max_longitude — each independently optional, so a single edge is a valid constraint. Combining the box with the lat/lon/radius circle intersects the two, returning only events inside both. Both catalogs include non-tectonic records (quarry blasts, explosions) — every event carries its event_type, and event_type="earthquake" filters the rest out on USGS. USGS-specific filters (alert_level, event_type, min_felt, min_significance) are not sent when source=emsc — the response names them in ignoredFilters. Use earthquake_count_events first to gauge result size before requesting large result sets. A call accepts limit up to 20,000 but fetches at most 100 candidates and returns a 24,000-byte page; retrieve remaining results by paging with offset, which is passed straight through to the upstream FDSN API. When a result is capped, nextOffset carries the offset for the following page and totalCount the full match count — or countUnavailable reports that the count lookup failed and the total is unknown.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true

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.

Install

Pinned to version 0.4.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http earthquake https://earthquake.caseyjhand.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__earthquake__earthquake_get_feed",
      "mcp__earthquake__earthquake_search_events",
      "mcp__earthquake__earthquake_get_event",
      "mcp__earthquake__earthquake_count_events"
    ],
    "ask": [],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as earthquake. Review it before you use it.