Koskamo

earthquake-mcp-server

An MCP server that allows AI agents to search USGS and EMSC seismic catalogs, fetch real-time earthquake feeds by magnitude and time, count events, and retrieve detailed analysis for specific seismic events.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

earthquake-mcp-server logo, by cyanheadsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by cyanheads
MCP endpoint (Streamable HTTP)
https://earthquake.caseyjhand.com/mcp
Vendor documentation

What its tools do

4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

4 of 4 have a description · 4 of 4 declare behavior hints · 4 of 4 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Fetch real-time earthquake feeds by magnitude tier
  • Search seismic events by time, magnitude, and location
  • Count earthquakes matching specific filters
  • Retrieve detailed analysis for a single earthquake event

Source and maintenance

Community listingRegistry 0.5.1
Maintenance checked

Protocol and capabilities

Server
earthquake-mcp-server 0.5.1
MCP protocol negotiated in check
2025-11-25
Tools
4 advertised
Resources
21 advertised
Resource templates
4 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": true,
    "listChanged": true
  },
  "extensions": {
    "io.modelcontextprotocol/skills": {
      "directoryRead": true
    }
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Query keyless USGS ComCat and independent global EMSC SeismicPortal data. earthquake_get_feed covers USGS current activity; earthquake_search_events covers historical/filtered queries, sized with earthquake_count_events. Search returns limit events per page (at most 1,000); continue with nextOffset, including beyond 20,000 matches. earthquake_get_event takes the id of any feed or search result, USGS (us6000sznj) or EMSC (20190706_0000043). USGS events add PAGER, DYFI, ShakeMap and other products, plus include groups (alternative origins, magnitudes, phase arrivals, aftershock forecast, PAGER loss estimates); EMSC events carry neither, and EMSC search discloses unsupported filters in ignoredFilters.

Tools

4 advertised

earthquake_get_feed — Get USGS Earthquake Feed
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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. Each page returns limit events (default 15, at most 1,000), fewer only on the last 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. An expired cursor requires a fresh first read. For historical or filtered queries, use earthquake_search_events instead.

earthquake_get_feed input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "number",
      "minimum": 1,
      "multipleOf": 1,
      "description": "Events to return per page. Default 15; a larger value returns at most 1,000 and says so. Applies to the first page; later pages carry the page size inside the cursor and ignore limit, so set it on the first call."
    },
    "cursor": {
      "type": "string",
      "description": "Opaque token for the next page, taken verbatim from a previous call's nextCursor. Omit for the first page. Do not construct, parse, or edit it — it encodes a position in the feed snapshot and is rejected if malformed."
    },
    "time_window": {
      "enum": [
        "hour",
        "day",
        "week",
        "month"
      ],
      "type": "string",
      "default": "day",
      "description": "Time window for the feed. \"hour\" typically returns 0–10 events; \"month\" can exceed 10,000 for the \"all\" tier. Prefer \"hour\" or \"day\" for real-time status checks."
    },
    "magnitude_tier": {
      "enum": [
        "all",
        "1.0",
        "2.5",
        "4.5",
        "significant"
      ],
      "type": "string",
      "default": "2.5",
      "description": "Minimum magnitude threshold for the feed. \"all\" includes microseisms (M<1). \"1.0\" is M1.0+. \"2.5\" is M2.5+. \"4.5\" is M4.5+. \"significant\" is a USGS curated selection based on magnitude, felt reports, and PAGER impact estimates — not purely magnitude-based."
    }
  },
  "additionalProperties": false
}
earthquake_get_feed output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "count",
        "generated_at",
        "events",
        "feed_url"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "count": {
      "type": "number",
      "description": "Number of events returned in this page, not the whole feed."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "invalid_cursor",
                "cursor_expired",
                "snapshot_too_large",
                "feed_unavailable",
                "feed_timeout"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_cursor`: The feed cursor is malformed. `cursor_expired`: The retained generation expired, was evicted, or does not belong to this tenant and feed. `snapshot_too_large`: The feed exceeds retained storage capacity. `feed_unavailable`: USGS feed endpoint returns a 5xx, serves HTML or an unreadable body, or is unreachable. `feed_timeout`: USGS feed endpoint did not answer before the request deadline. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "magnitude",
          "magnitude_type",
          "time",
          "updated",
          "place",
          "latitude",
          "longitude",
          "depth_km",
          "felt",
          "cdi",
          "mmi",
          "alert",
          "tsunami",
          "significance",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "USGS or EMSC event identifier."
          },
          "cdi": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum DYFI Community Decimal Intensity (0–12); null if uncomputed or unsupported (EMSC)."
          },
          "mmi": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum ShakeMap Modified Mercalli intensity (1–12); null without a ShakeMap, when the ShakeMap computed no intensity, or for EMSC."
          },
          "auth": {
            "type": "string",
            "description": "Authoritative agency/network code (EMSC auth or USGS net); absent if unpublished."
          },
          "felt": {
            "type": [
              "number",
              "null"
            ],
            "description": "DYFI (Did You Feel It?) response count; null if no USGS reports or source has no DYFI (EMSC). Null does not mean unfelt."
          },
          "time": {
            "type": "string",
            "description": "ISO 8601 UTC origin time."
          },
          "alert": {
            "anyOf": [
              {
                "enum": [
                  "green",
                  "yellow",
                  "orange",
                  "red"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "PAGER estimated impact; null without an assessment or for EMSC."
          },
          "place": {
            "type": "string",
            "description": "Nearest named location."
          },
          "title": {
            "type": "string",
            "description": "Event summary, e.g. \"M 6.0 - Hawaii\"."
          },
          "status": {
            "anyOf": [
              {
                "enum": [
                  "automatic",
                  "reviewed",
                  "deleted"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Review state: automatic (unverified), reviewed (analyst checked), or deleted. Null if unpublished (EMSC, or a USGS record without one of these values); such solutions remain unverified and subject to revision."
          },
          "tsunami": {
            "type": [
              "number",
              "null"
            ],
            "description": "USGS tsunami flag: 1 for large oceanic events, 0 otherwise; null if unpublished (EMSC). Not a warning or evidence of a tsunami; check NOAA tsunami.gov for alerts."
          },
          "updated": {
            "type": "string",
            "description": "ISO 8601 UTC time this record was last updated."
          },
          "depth_km": {
            "type": [
              "number",
              "null"
            ],
            "description": "Hypocenter depth in km; null if unmeasured."
          },
          "latitude": {
            "type": "number",
            "description": "Epicenter latitude in decimal degrees."
          },
          "event_url": {
            "type": "string",
            "description": "USGS event page URL. Present for USGS events only."
          },
          "longitude": {
            "type": "number",
            "description": "Epicenter longitude in decimal degrees."
          },
          "magnitude": {
            "type": [
              "number",
              "null"
            ],
            "description": "Preferred magnitude; null if not computed (title: \"M ?\")."
          },
          "detail_url": {
            "type": "string",
            "description": "URL to fetch the full GeoJSON detail record. Present in USGS list responses."
          },
          "event_type": {
            "type": "string",
            "description": "QuakeML classification (earthquake, quarry blast, explosion, etc.). EMSC codes decode to USGS names; unknown codes pass through verbatim. Certainty is separate. Absent if unpublished; either catalog includes non-tectonic events."
          },
          "significance": {
            "type": [
              "number",
              "null"
            ],
            "description": "USGS significance (0–2000+), combining magnitude, felt reports and PAGER; null if uncomputed or for EMSC."
          },
          "associated_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Other network IDs USGS lists for this event, in upstream order; earthquake_get_event accepts them. Absent when USGS lists none, and for EMSC events."
          },
          "magnitude_type": {
            "type": "string",
            "description": "Magnitude type (ml, mww, mw, mb, etc.)."
          },
          "source_catalog": {
            "type": "string",
            "description": "Solution catalog, e.g. EMSC-RTS (real-time, subject to revision). Absent for USGS."
          },
          "event_certainty": {
            "enum": [
              "known",
              "suspected",
              "unknown",
              "unreported"
            ],
            "type": "string",
            "description": "EMSC classification certainty: known (asserted), suspected, unknown, or unreported. Suspected is not confirmed. Absent for USGS and unrecognized EMSC codes."
          }
        },
        "description": "A single earthquake event.",
        "additionalProperties": false
      },
      "description": "Earthquake events for this page, newest first."
    },
    "notice": {
      "type": "string",
      "description": "Guidance when a first-page limit was clamped to 1,000 (requested and applied values), when the feed or cursor position holds no events (a wider window, lower tier, or earthquake_search_events), or when more pages remain (paging with the cursor). Absent when none applies."
    },
    "feed_url": {
      "type": "string",
      "description": "Source feed URL."
    },
    "truncated": {
      "type": "boolean",
      "description": "True when the feed holds more events than this page returned. nextCursor carries the input for the following page."
    },
    "nextCursor": {
      "type": "string",
      "description": "Opaque token to pass back as the cursor input for the next page. Present only when more events remain; absent means this was the last page."
    },
    "totalCount": {
      "type": "number",
      "description": "Number of events in the whole feed, across every page."
    },
    "generated_at": {
      "type": "string",
      "description": "ISO 8601 UTC timestamp when this feed was generated by USGS."
    }
  },
  "additionalProperties": false
}
earthquake_get_feed annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
earthquake_search_events — Search Earthquakes
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search USGS or independent global EMSC seismic catalogs by time, magnitude, depth, area and source-specific filters. Both include non-tectonic events; event_type="earthquake" excludes them on USGS. Circle and independently optional box edges intersect. Unsupported EMSC filters appear in ignoredFilters. Size queries with earthquake_count_events. Returns limit events per call (at most 1,000), fewer only on the last page. Continue with offset=nextOffset and unchanged filters/order. totalCount is the full match total when known; countUnavailable marks a failed count lookup, so the total is unknown. Paging can retrieve matches beyond 20,000.

earthquake_search_events input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "number",
      "minimum": 1,
      "multipleOf": 1,
      "description": "Events to return per call. Default 15; a larger value returns at most 1,000 and says so. Combine with offset to retrieve match sets larger than one call can return."
    },
    "offset": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Index of the first event to return, counting from 1 — offset=1 is the first match (both upstream APIs reject 0). Omit for the first page, then pass the nextOffset value from a capped result to fetch the next one. Ordering is set by order_by, so keep order_by, limit, and every filter identical across pages."
    },
    "source": {
      "enum": [
        "usgs",
        "emsc"
      ],
      "type": "string",
      "default": "usgs",
      "description": "USGS includes PAGER, DYFI and ShakeMap; EMSC (European-Mediterranean Seismological Centre) is an independent global catalog, with densest station coverage around Europe/Mediterranean and no such impact products. earthquake_get_event accepts IDs from either source."
    },
    "min_cdi": {
      "type": "number",
      "maximum": 12,
      "minimum": 1,
      "description": "Minimum DYFI (Did You Feel It?) community intensity (1–12): the strongest shaking people reported for the event. An event without DYFI reports never matches. Only available from USGS."
    },
    "min_mmi": {
      "type": "number",
      "maximum": 12,
      "minimum": 1,
      "description": "Minimum ShakeMap intensity on the Modified Mercalli scale (1–12): the strongest shaking USGS modeled for the event, e.g. 7 for very strong shaking. Finds shaking a magnitude floor or alert_level misses. An event without a ShakeMap never matches; product_type \"shakemap\" requires one at any intensity. Only available from USGS."
    },
    "end_time": {
      "type": "string",
      "pattern": "^\\d{4}(-\\d{1,2}(-\\d{1,2})?)?([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$",
      "description": "End of time range as ISO 8601, in the same forms start_time accepts. Date-only values mean midnight at the start of the named day, not the whole day. Defaults to current time if omitted."
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude for radius search. Requires longitude and radius_km."
    },
    "min_felt": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Minimum number of DYFI (Did You Feel It?) reports. Use to find events with confirmed public impact. Only available from USGS."
    },
    "order_by": {
      "enum": [
        "time",
        "time-asc",
        "magnitude",
        "magnitude-asc"
      ],
      "type": "string",
      "default": "time",
      "description": "Sort order. \"time\" returns newest first; \"magnitude\" returns largest first."
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude for radius search. Requires latitude and radius_km."
    },
    "radius_km": {
      "type": "number",
      "maximum": 20001.6,
      "minimum": 0,
      "description": "Search radius in kilometers from the lat/lon point. 100 km covers a metro region; 500 km covers a large country. Max 20001.6, the ceiling USGS enforces. Converted to degrees for EMSC (1° ≈ 111.2 km)."
    },
    "event_type": {
      "type": "string",
      "minLength": 1,
      "description": "Filter by upstream event classification, e.g. \"earthquake\" to exclude quarry blasts and explosions, or \"quarry blast\" to see only those; a comma-separated list such as \"earthquake,explosion\" matches any of them. USGS matches case-insensitively and returns zero matches for a value it does not list, which the notice then names. Only available from USGS."
    },
    "start_time": {
      "type": "string",
      "pattern": "^\\d{4}(-\\d{1,2}(-\\d{1,2})?)?([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$",
      "description": "Start of time range as ISO 8601 (e.g. \"2026-01-01\" or \"2026-05-23T00:00:00\"). A bare year expands to January 1st and an unpadded month or day is zero-padded, with date-only values resolved to midnight (T00:00:00) on both sources. Explicit time and timezone suffixes are preserved. Defaults to 30 days before end_time (or before the current time) if omitted — applied server-side so USGS and EMSC honor the same window."
    },
    "alert_level": {
      "enum": [
        "green",
        "yellow",
        "orange",
        "red"
      ],
      "type": "string",
      "description": "Minimum PAGER alert level. PAGER estimates economic loss and casualties. \"green\" = minimal impact; \"red\" = extreme. Only available from USGS."
    },
    "max_depth_km": {
      "type": "number",
      "maximum": 1000,
      "minimum": -100,
      "description": "Maximum depth in kilometers. Bounded to the documented -100 to 1000 km catalog envelope."
    },
    "max_latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Northern edge of a bounding-box search, in degrees."
    },
    "min_depth_km": {
      "type": "number",
      "maximum": 1000,
      "minimum": -100,
      "description": "Minimum depth in kilometers. Bounded to the documented -100 to 1000 km catalog envelope. Shallow quakes (0–70 km) typically cause more surface damage than deep quakes (>300 km)."
    },
    "min_latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Southern edge of a bounding-box search, in degrees. Independent of the other three box parameters — supply any of them. Must not exceed max_latitude when both are given."
    },
    "product_type": {
      "type": "string",
      "description": "Required product type, e.g. \"moment-tensor\" (hyphenated, unlike the moment_tensor detail group); USGS only, matched case-insensitively. Blank means omitted."
    },
    "max_longitude": {
      "type": "number",
      "maximum": 360,
      "minimum": -360,
      "description": "Eastern edge of a bounding-box search, in degrees."
    },
    "max_magnitude": {
      "type": "number",
      "maximum": 10,
      "minimum": -1,
      "description": "Maximum magnitude."
    },
    "min_longitude": {
      "type": "number",
      "maximum": 360,
      "minimum": -360,
      "description": "Western edge of a bounding-box search, in degrees. Range extends beyond ±180 so a box can cross the antimeridian (e.g. min_longitude=170, max_longitude=190) — always keep min_longitude at or below max_longitude rather than inverting the pair."
    },
    "min_magnitude": {
      "type": "number",
      "maximum": 10,
      "minimum": -1,
      "description": "Minimum magnitude (Richter or equivalent). M2.5+ is felt by some people; M5+ can cause damage; M7+ is major."
    },
    "review_status": {
      "type": "string",
      "description": "USGS review status: automatic or reviewed. Blank means omitted; unsupported by EMSC."
    },
    "magnitude_type": {
      "type": "string",
      "description": "Magnitude type, e.g. \"mb\" or \"mww\"; both sources. USGS matches case-insensitively; EMSC matches its own lowercase types (\"mb\", \"mw\") case-sensitively and has no \"mww\". Blank means omitted."
    },
    "min_significance": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Minimum USGS significance score (0–2000+). Combines magnitude, felt reports, and PAGER estimates. Significant events typically score 600+. Only available from USGS."
    }
  },
  "additionalProperties": false
}
earthquake_search_events output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "count",
        "source",
        "events"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "count": {
      "type": "number",
      "description": "Number of events returned."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "invalid_range",
                "invalid_radius",
                "invalid_bounding_box",
                "source_unavailable",
                "source_timeout",
                "upstream_rejected",
                "upstream_rejected_no_reason"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_range`: Minimum magnitude or depth exceeds its maximum, or start_time is after end_time. `invalid_radius`: latitude or longitude provided without radius_km, or vice versa. `invalid_bounding_box`: min_latitude exceeds max_latitude, or min_longitude exceeds max_longitude. `source_unavailable`: Selected source API returns a 5xx, serves HTML or an unreadable body, or is unreachable. `source_timeout`: Selected source API did not answer before the request deadline. `upstream_rejected`: The source API rejected the query parameters and explained why in its response body. `upstream_rejected_no_reason`: The source API rejected the query but its response body carried no usable explanation. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "magnitude",
          "magnitude_type",
          "time",
          "updated",
          "place",
          "latitude",
          "longitude",
          "depth_km",
          "felt",
          "cdi",
          "mmi",
          "alert",
          "tsunami",
          "significance",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "USGS or EMSC event identifier."
          },
          "cdi": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum DYFI Community Decimal Intensity (0–12); null if uncomputed or unsupported (EMSC)."
          },
          "mmi": {
            "type": [
              "number",
              "null"
            ],
            "description": "Maximum ShakeMap Modified Mercalli intensity (1–12); null without a ShakeMap, when the ShakeMap computed no intensity, or for EMSC."
          },
          "auth": {
            "type": "string",
            "description": "Authoritative agency/network code (EMSC auth or USGS net); absent if unpublished."
          },
          "felt": {
            "type": [
              "number",
              "null"
            ],
            "description": "DYFI (Did You Feel It?) response count; null if no USGS reports or source has no DYFI (EMSC). Null does not mean unfelt."
          },
          "time": {
            "type": "string",
            "description": "ISO 8601 UTC origin time."
          },
          "alert": {
            "anyOf": [
              {
                "enum": [
                  "green",
                  "yellow",
                  "orange",
                  "red"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "PAGER estimated impact; null without an assessment or for EMSC."
          },
          "place": {
            "type": "string",
            "description": "Nearest named location."
          },
          "title": {
            "type": "string",
            "description": "Event summary, e.g. \"M 6.0 - Hawaii\"."
          },
          "status": {
            "anyOf": [
              {
                "enum": [
                  "automatic",
                  "reviewed",
                  "deleted"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Review state: automatic (unverified), reviewed (analyst checked), or deleted. Null if unpublished (EMSC, or a USGS record without one of these values); such solutions remain unverified and subject to revision."
          },
          "tsunami": {
            "type": [
              "number",
              "null"
            ],
            "description": "USGS tsunami flag: 1 for large oceanic events, 0 otherwise; null if unpublished (EMSC). Not a warning or evidence of a tsunami; check NOAA tsunami.gov for alerts."
          },
          "updated": {
            "type": "string",
            "description": "ISO 8601 UTC time this record was last updated."
          },
          "depth_km": {
            "type": [
              "number",
              "null"
            ],
            "description": "Hypocenter depth in km; null if unmeasured."
          },
          "latitude": {
            "type": "number",
            "description": "Epicenter latitude in decimal degrees."
          },
          "event_url": {
            "type": "string",
            "description": "USGS event page URL. Present for USGS events only."
          },
          "longitude": {
            "type": "number",
            "description": "Epicenter longitude in decimal degrees."
          },
          "magnitude": {
            "type": [
              "number",
              "null"
            ],
            "description": "Preferred magnitude; null if not computed (title: \"M ?\")."
          },
          "detail_url": {
            "type": "string",
            "description": "URL to fetch the full GeoJSON detail record. Present in USGS list responses."
          },
          "event_type": {
            "type": "string",
            "description": "QuakeML classification (earthquake, quarry blast, explosion, etc.). EMSC codes decode to USGS names; unknown codes pass through verbatim. Certainty is separate. Absent if unpublished; either catalog includes non-tectonic events."
          },
          "significance": {
            "type": [
              "number",
              "null"
            ],
            "description": "USGS significance (0–2000+), combining magnitude, felt reports and PAGER; null if uncomputed or for EMSC."
          },
          "associated_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Other network IDs USGS lists for this event, in upstream order; earthquake_get_event accepts them. Absent when USGS lists none, and for EMSC events."
          },
          "magnitude_type": {
            "type": "string",
            "description": "Magnitude type (ml, mww, mw, mb, etc.)."
          },
          "source_catalog": {
            "type": "string",
            "description": "Solution catalog, e.g. EMSC-RTS (real-time, subject to revision). Absent for USGS."
          },
          "event_certainty": {
            "enum": [
              "known",
              "suspected",
              "unknown",
              "unreported"
            ],
            "type": "string",
            "description": "EMSC classification certainty: known (asserted), suspected, unknown, or unreported. Suspected is not confirmed. Absent for USGS and unrecognized EMSC codes."
          }
        },
        "description": "A single earthquake event.",
        "additionalProperties": false
      },
      "description": "Matching earthquake events."
    },
    "notice": {
      "type": "string",
      "description": "Guidance when limit was clamped to 1,000 (requested and applied values), when results are empty (how to broaden filters, or on USGS each supplied event_type, magnitude_type, or product_type value USGS does not list, with the listed value it likely meant), or when more pages remain (the next offset). Absent when none applies."
    },
    "source": {
      "enum": [
        "usgs",
        "emsc"
      ],
      "type": "string",
      "description": "Data source used."
    },
    "queryEcho": {
      "type": "object",
      "required": [
        "source",
        "limit",
        "order_by"
      ],
      "properties": {
        "limit": {
          "type": "number",
          "description": "Applied result limit sent upstream, after any clamp."
        },
        "offset": {
          "type": "number",
          "description": "1-based paging offset sent upstream. Absent when the first page was fetched."
        },
        "source": {
          "enum": [
            "usgs",
            "emsc"
          ],
          "type": "string",
          "description": "Data source queried."
        },
        "min_cdi": {
          "type": "number",
          "description": "Applied minimum DYFI community intensity (CDI); absent for EMSC."
        },
        "min_mmi": {
          "type": "number",
          "description": "Applied minimum ShakeMap intensity (MMI); absent for EMSC."
        },
        "end_time": {
          "type": "string",
          "description": "Applied end time; absent means upstream current-time default."
        },
        "latitude": {
          "type": "number",
          "description": "Circle latitude, degrees."
        },
        "min_felt": {
          "type": "number",
          "description": "Applied minimum DYFI response count; absent for EMSC."
        },
        "order_by": {
          "type": "string",
          "description": "Sort order sent upstream."
        },
        "longitude": {
          "type": "number",
          "description": "Circle longitude, degrees."
        },
        "radius_km": {
          "type": "number",
          "description": "Search radius in km sent upstream (converted to degrees for EMSC)."
        },
        "event_type": {
          "type": "string",
          "description": "Applied event type; absent for EMSC."
        },
        "start_time": {
          "type": "string",
          "description": "Applied start time; defaults to 30 days before end/now."
        },
        "alert_level": {
          "type": "string",
          "description": "Applied minimum PAGER alert; absent for EMSC."
        },
        "max_depth_km": {
          "type": "number",
          "description": "Applied maximum depth, km."
        },
        "max_latitude": {
          "type": "number",
          "description": "Northern bounding-box edge sent upstream, in degrees."
        },
        "min_depth_km": {
          "type": "number",
          "description": "Applied minimum depth, km."
        },
        "min_latitude": {
          "type": "number",
          "description": "Southern bounding-box edge sent upstream, in degrees."
        },
        "product_type": {
          "type": "string",
          "description": "Applied required product; USGS only."
        },
        "max_longitude": {
          "type": "number",
          "description": "Eastern bounding-box edge sent upstream, in degrees."
        },
        "max_magnitude": {
          "type": "number",
          "description": "Applied maximum magnitude."
        },
        "min_longitude": {
          "type": "number",
          "description": "Western bounding-box edge sent upstream, in degrees."
        },
        "min_magnitude": {
          "type": "number",
          "description": "Applied minimum magnitude."
        },
        "review_status": {
          "enum": [
            "automatic",
            "reviewed"
          ],
          "type": "string",
          "description": "Applied review status; USGS only."
        },
        "magnitude_type": {
          "type": "string",
          "description": "Applied magnitude type."
        },
        "min_significance": {
          "type": "number",
          "description": "Applied minimum significance; absent for EMSC."
        }
      },
      "description": "Echo of the effective parameters sent to the upstream API, including server-resolved defaults. Use to diagnose unexpected or empty results — a filter absent here was not sent upstream.",
      "additionalProperties": false
    },
    "truncated": {
      "type": "boolean",
      "description": "Page filled the applied limit and more matches remain or may remain. Continue with nextOffset. Without totalCount, more events may remain but are not confirmed."
    },
    "nextOffset": {
      "type": "number",
      "description": "Next 1-based offset; keep other inputs unchanged. Present if more events remain or may remain with unknown total; absent on last page."
    },
    "totalCount": {
      "type": "number",
      "description": "Full match total, inferred from a nonempty short upstream page (or empty first page), otherwise counted for full pages. Absent for empty later pages or failed counts; countUnavailable marks failures."
    },
    "ignoredFilters": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Name of an input filter that was not applied."
      },
      "description": "USGS-only filters supplied in the input but not sent upstream because source=emsc does not support them. The result set is NOT constrained by these — re-run with source=usgs to apply them. Absent when every supplied filter was applied."
    },
    "countUnavailable": {
      "type": "boolean",
      "description": "True if the count lookup failed; events are unaffected, totalCount unknown. Retry earthquake_count_events with identical filters. Absent if count succeeded or was unnecessary."
    }
  },
  "additionalProperties": false
}
earthquake_search_events annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
earthquake_get_event — Get Earthquake Event Detail
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetch one earthquake by event ID: a USGS ID, or an EMSC ID (an origin date and seven-digit sequence, e.g. "20190706_0000043"). Returns the same normalized event a search result carries. For a USGS event it adds 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, depth type), and finite-fault rupture dimensions. Product groups are omitted when no projected field is available — a small automatic event typically carries only origin quality, while a large reviewed one has most of it. Opt into more with include: alternative origin solutions, magnitude solutions, phase arrivals, the USGS aftershock forecast, or the PAGER loss estimates behind the alert with population exposure by shaking intensity; a requested group that is not returned is listed in unavailable_includes. EMSC publishes none of these products, so an EMSC event has no detail and lists every requested group as not_published. Event IDs appear in the "id" field of earthquake_get_feed and earthquake_search_events results; a USGS event's associated_ids are also accepted.

earthquake_get_event input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "event_id"
  ],
  "properties": {
    "include": {
      "type": "array",
      "items": {
        "enum": [
          "origins",
          "magnitudes",
          "arrivals",
          "aftershock_forecast",
          "pager"
        ],
        "type": "string"
      },
      "description": "Optional groups: origins (every contributed origin solution, no extra request), magnitudes and arrivals (one shared phase-data download; every arrival of the preferred origin, nearest first), aftershock_forecast (one extra request), pager (fatality and economic-loss brackets with probabilities, and people exposed at each intensity by country; two or three extra requests). Omit for the default response."
    },
    "event_id": {
      "type": "string",
      "minLength": 1,
      "description": "USGS event ID, e.g. \"hv74966427\" or \"us6000sznj\", or EMSC event ID, e.g. \"20190706_0000043\". Found in the \"id\" field of earthquake_get_feed and earthquake_search_events results."
    }
  },
  "additionalProperties": false
}
earthquake_get_event output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "event"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "event_deleted",
                "not_found",
                "source_unavailable",
                "source_timeout"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `event_deleted`: USGS reports that the requested event was deleted. `not_found`: No USGS or EMSC event matches the provided event_id. `source_unavailable`: The USGS or EMSC event API returns a 5xx, serves HTML or an unreadable body, or is unreachable. `source_timeout`: The USGS or EMSC event API did not answer before the request deadline. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "event": {
      "type": "object",
      "required": [
        "id",
        "title",
        "magnitude",
        "magnitude_type",
        "time",
        "updated",
        "place",
        "latitude",
        "longitude",
        "depth_km",
        "felt",
        "cdi",
        "mmi",
        "alert",
        "tsunami",
        "significance",
        "status"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "USGS or EMSC event identifier."
        },
        "cdi": {
          "type": [
            "number",
            "null"
          ],
          "description": "Maximum DYFI Community Decimal Intensity (0–12); null if uncomputed or unsupported (EMSC)."
        },
        "mmi": {
          "type": [
            "number",
            "null"
          ],
          "description": "Maximum ShakeMap Modified Mercalli intensity (1–12); null without a ShakeMap, when the ShakeMap computed no intensity, or for EMSC."
        },
        "auth": {
          "type": "string",
          "description": "Authoritative agency/network code (EMSC auth or USGS net); absent if unpublished."
        },
        "felt": {
          "type": [
            "number",
            "null"
          ],
          "description": "DYFI (Did You Feel It?) response count; null if no USGS reports or source has no DYFI (EMSC). Null does not mean unfelt."
        },
        "time": {
          "type": "string",
          "description": "ISO 8601 UTC origin time."
        },
        "alert": {
          "anyOf": [
            {
              "enum": [
                "green",
                "yellow",
                "orange",
                "red"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "PAGER estimated impact; null without an assessment or for EMSC."
        },
        "place": {
          "type": "string",
          "description": "Nearest named location."
        },
        "title": {
          "type": "string",
          "description": "Event summary, e.g. \"M 6.0 - Hawaii\"."
        },
        "status": {
          "anyOf": [
            {
              "enum": [
                "automatic",
                "reviewed",
                "deleted"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Review state: automatic (unverified), reviewed (analyst checked), or deleted. Null if unpublished (EMSC, or a USGS record without one of these values); such solutions remain unverified and subject to revision."
        },
        "tsunami": {
          "type": [
            "number",
            "null"
          ],
          "description": "USGS tsunami flag: 1 for large oceanic events, 0 otherwise; null if unpublished (EMSC). Not a warning or evidence of a tsunami; check NOAA tsunami.gov for alerts."
        },
        "updated": {
          "type": "string",
          "description": "ISO 8601 UTC time this record was last updated."
        },
        "depth_km": {
          "type": [
            "number",
            "null"
          ],
          "description": "Hypocenter depth in km; null if unmeasured."
        },
        "latitude": {
          "type": "number",
          "description": "Epicenter latitude in decimal degrees."
        },
        "event_url": {
          "type": "string",
          "description": "USGS event page URL. Present for USGS events only."
        },
        "longitude": {
          "type": "number",
          "description": "Epicenter longitude in decimal degrees."
        },
        "magnitude": {
          "type": [
            "number",
            "null"
          ],
          "description": "Preferred magnitude; null if not computed (title: \"M ?\")."
        },
        "detail_url": {
          "type": "string",
          "description": "URL to fetch the full GeoJSON detail record. Present in USGS list responses."
        },
        "event_type": {
          "type": "string",
          "description": "QuakeML classification (earthquake, quarry blast, explosion, etc.). EMSC codes decode to USGS names; unknown codes pass through verbatim. Certainty is separate. Absent if unpublished; either catalog includes non-tectonic events."
        },
        "significance": {
          "type": [
            "number",
            "null"
          ],
          "description": "USGS significance (0–2000+), combining magnitude, felt reports and PAGER; null if uncomputed or for EMSC."
        },
        "associated_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Other network IDs USGS lists for this event, in upstream order; earthquake_get_event accepts them. Absent when USGS lists none, and for EMSC events."
        },
        "magnitude_type": {
          "type": "string",
          "description": "Magnitude type (ml, mww, mw, mb, etc.)."
        },
        "source_catalog": {
          "type": "string",
          "description": "Solution catalog, e.g. EMSC-RTS (real-time, subject to revision). Absent for USGS."
        },
        "event_certainty": {
          "enum": [
            "known",
            "suspected",
            "unknown",
            "unreported"
          ],
          "type": "string",
          "description": "EMSC classification certainty: known (asserted), suspected, unknown, or unreported. Suspected is not confirmed. Absent for USGS and unrecognized EMSC codes."
        }
      },
      "description": "Full earthquake event detail.",
      "additionalProperties": false
    },
    "pager": {
      "type": "object",
      "required": [
        "fatality",
        "economic",
        "exposure"
      ],
      "properties": {
        "impact": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "PAGER impact statements in published order; absent when none is published."
        },
        "economic": {
          "type": "object",
          "required": [
            "bins"
          ],
          "properties": {
            "bins": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "min",
                  "max",
                  "probability"
                ],
                "properties": {
                  "max": {
                    "type": "number",
                    "description": "Upper bound, exclusive, in millions of USD."
                  },
                  "min": {
                    "type": "number",
                    "description": "Lower bound, inclusive, in millions of USD."
                  },
                  "color": {
                    "type": "string",
                    "description": "Alert color of this bracket. Absent when unpublished."
                  },
                  "probability": {
                    "type": "number",
                    "description": "Probability (0–1) that the outcome falls in this bracket."
                  }
                },
                "description": "One probability bracket.",
                "additionalProperties": false
              },
              "description": "Every bracket in upstream order."
            },
            "level": {
              "type": "string",
              "description": "Alert level this estimate sets — \"green\", \"yellow\", \"orange\", or \"red\"; the event alert is the higher of the two estimates. Absent when unpublished."
            }
          },
          "description": "Estimated economic losses.",
          "additionalProperties": false
        },
        "exposure": {
          "type": "object",
          "required": [
            "mmi",
            "population",
            "countries"
          ],
          "properties": {
            "mmi": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "description": "Modified Mercalli intensity of each column, in published order."
            },
            "countries": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "country_code",
                  "population"
                ],
                "properties": {
                  "population": {
                    "type": "array",
                    "items": {
                      "type": "number"
                    },
                    "description": "Estimated people exposed at each intensity in this country."
                  },
                  "country_code": {
                    "type": "string",
                    "description": "Two-letter country code as PAGER publishes it; \"UK\" marks areas assigned to no country, not the United Kingdom (GB)."
                  }
                },
                "description": "One country row.",
                "additionalProperties": false
              },
              "description": "Every country row in published order, all-zero rows included; empty when PAGER lists none."
            },
            "population": {
              "type": "array",
              "items": {
                "type": "number"
              },
              "description": "Estimated people exposed at each intensity, all areas combined."
            }
          },
          "description": "Estimated population exposed to each shaking intensity.",
          "additionalProperties": false
        },
        "fatality": {
          "type": "object",
          "required": [
            "bins"
          ],
          "properties": {
            "bins": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "min",
                  "max",
                  "probability"
                ],
                "properties": {
                  "max": {
                    "type": "number",
                    "description": "Upper bound, exclusive, in deaths."
                  },
                  "min": {
                    "type": "number",
                    "description": "Lower bound, inclusive, in deaths."
                  },
                  "color": {
                    "type": "string",
                    "description": "Alert color of this bracket. Absent when unpublished."
                  },
                  "probability": {
                    "type": "number",
                    "description": "Probability (0–1) that the outcome falls in this bracket."
                  }
                },
                "description": "One probability bracket.",
                "additionalProperties": false
              },
              "description": "Every bracket in upstream order."
            },
            "level": {
              "type": "string",
              "description": "Alert level this estimate sets — \"green\", \"yellow\", \"orange\", or \"red\"; the event alert is the higher of the two estimates. Absent when unpublished."
            }
          },
          "description": "Estimated shaking-related fatalities.",
          "additionalProperties": false
        }
      },
      "description": "USGS PAGER loss estimates and population exposure; values change with each PAGER update.",
      "additionalProperties": false
    },
    "detail": {
      "type": "object",
      "properties": {
        "dyfi": {
          "type": "object",
          "properties": {
            "map_url": {
              "type": "string",
              "description": "URL of the rendered DYFI intensity map image."
            },
            "max_cdi": {
              "type": "number",
              "description": "Maximum Community Decimal Intensity derived from those reports (0–12 scale)."
            },
            "responses": {
              "type": "number",
              "description": "Public DYFI (Did You Feel It?) report count."
            }
          },
          "description": "Felt-report summary. Absent without projected fields.",
          "additionalProperties": false
        },
        "origin": {
          "type": "object",
          "properties": {
            "depth_type": {
              "type": "string",
              "description": "How the depth was set, as published, e.g. \"from location\" or \"operator assigned\" (fixed, not solved for)."
            },
            "review_status": {
              "type": "string",
              "description": "Origin review state published by its network."
            },
            "depth_error_km": {
              "type": "number",
              "description": "Depth uncertainty in kilometers."
            },
            "azimuthal_gap_deg": {
              "type": "number",
              "description": "Largest station azimuthal gap, degrees; >~180 means poorly constrained location."
            },
            "num_stations_used": {
              "type": "number",
              "description": "Number of seismic stations used in the location solution."
            },
            "horizontal_error_km": {
              "type": "number",
              "description": "Horizontal location uncertainty in kilometers."
            }
          },
          "description": "Location-quality metrics for the preferred origin; absent without projected fields.",
          "additionalProperties": false
        },
        "shakemap": {
          "type": "object",
          "properties": {
            "max_mmi": {
              "type": "number",
              "description": "Maximum modeled shaking intensity across the ShakeMap grid (Modified Mercalli)."
            },
            "max_pga": {
              "type": "number",
              "description": "Maximum modeled peak ground acceleration, in g (fraction of standard gravity)."
            },
            "max_pgv": {
              "type": "number",
              "description": "Maximum modeled peak ground velocity, in cm/s."
            },
            "code_version": {
              "type": "string",
              "description": "ShakeMap producer code version reported by USGS."
            },
            "intensity_map_url": {
              "type": "string",
              "description": "URL of the rendered ShakeMap intensity map image."
            }
          },
          "description": "ShakeMap modeled ground-motion summary. Absent without projected fields.",
          "additionalProperties": false
        },
        "losspager": {
          "type": "object",
          "properties": {
            "report_url": {
              "type": "string",
              "description": "URL of the PAGER one-page PDF summary of estimated impact."
            },
            "alert_level": {
              "type": "string",
              "description": "PAGER impact alert level — \"green\", \"yellow\", \"orange\", or \"red\"."
            }
          },
          "description": "PAGER alert and report link. The fatality and economic-loss brackets behind the alert, and population exposure, come from the pager include group of earthquake_get_event. Absent without projected fields.",
          "additionalProperties": false
        },
        "finite_fault": {
          "type": "object",
          "properties": {
            "model_url": {
              "type": "string",
              "description": "URL of the finite-fault rupture model file."
            },
            "rupture_width_km": {
              "type": "number",
              "description": "Modeled rupture width down dip, in kilometers."
            },
            "rupture_length_km": {
              "type": "number",
              "description": "Modeled rupture length along strike, in kilometers."
            }
          },
          "description": "Finite-fault rupture model for large events; absent without projected fields.",
          "additionalProperties": false
        },
        "moment_tensor": {
          "type": "object",
          "properties": {
            "nodal_plane_1": {
              "type": "object",
              "required": [
                "strike",
                "dip",
                "rake"
              ],
              "properties": {
                "dip": {
                  "type": "number",
                  "description": "Fault plane dip in degrees from horizontal (0–90)."
                },
                "rake": {
                  "type": "number",
                  "description": "Slip direction, degrees (-180..180): ~90 reverse, ~-90 normal, ~0/180 strike-slip."
                },
                "strike": {
                  "type": "number",
                  "description": "Fault plane strike in degrees clockwise from north (0–360)."
                }
              },
              "description": "First nodal plane; either plane may be the fault.",
              "additionalProperties": false
            },
            "nodal_plane_2": {
              "type": "object",
              "required": [
                "strike",
                "dip",
                "rake"
              ],
              "properties": {
                "dip": {
                  "type": "number",
                  "description": "Fault plane dip in degrees from horizontal (0–90)."
                },
                "rake": {
                  "type": "number",
                  "description": "Slip direction, degrees (-180..180): ~90 reverse, ~-90 normal, ~0/180 strike-slip."
                },
                "strike": {
                  "type": "number",
                  "description": "Fault plane strike in degrees clockwise from north (0–360)."
                }
              },
              "description": "Auxiliary nodal plane; seismic data alone cannot distinguish the true fault.",
              "additionalProperties": false
            },
            "derived_depth_km": {
              "type": "number",
              "description": "Moment-tensor centroid depth, km."
            },
            "scalar_moment_nm": {
              "type": "number",
              "description": "Scalar seismic moment, newton-metres."
            }
          },
          "description": "Focal mechanism; absent without projected fields.",
          "additionalProperties": false
        },
        "ground_failure": {
          "type": "object",
          "properties": {
            "landslide_alert": {
              "type": "string",
              "description": "Landslide hazard alert level — \"green\", \"yellow\", \"orange\", or \"red\"."
            },
            "liquefaction_alert": {
              "type": "string",
              "description": "Liquefaction hazard alert level — \"green\", \"yellow\", \"orange\", or \"red\"."
            }
          },
          "description": "Secondary-hazard alert levels. Absent without projected fields.",
          "additionalProperties": false
        }
      },
      "description": "Projected USGS analysis products. Absent when no projected field is available; absence does not mean impact was zero.",
      "additionalProperties": false
    },
    "origins": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "is_preferred"
        ],
        "properties": {
          "time": {
            "type": "string",
            "description": "ISO 8601 UTC origin time."
          },
          "source": {
            "type": "string",
            "description": "Network that contributed this origin product."
          },
          "depth_km": {
            "type": "number",
            "description": "Hypocenter depth, km."
          },
          "event_id": {
            "type": "string",
            "description": "Contributing network's ID for the event."
          },
          "latitude": {
            "type": "number",
            "description": "Epicenter latitude, decimal degrees."
          },
          "longitude": {
            "type": "number",
            "description": "Epicenter longitude, decimal degrees."
          },
          "magnitude": {
            "type": "number",
            "description": "Magnitude published with this origin."
          },
          "depth_type": {
            "type": "string",
            "description": "How the depth was set, as published, e.g. \"from location\" or \"operator assigned\"."
          },
          "is_preferred": {
            "type": "boolean",
            "description": "True for the origin USGS prefers (listed first)."
          },
          "review_status": {
            "type": "string",
            "description": "Review status as published by the network."
          },
          "depth_error_km": {
            "type": "number",
            "description": "Depth uncertainty, km."
          },
          "magnitude_type": {
            "type": "string",
            "description": "Magnitude type, e.g. mww, mb, Mi."
          },
          "num_phases_used": {
            "type": "number",
            "description": "Phases used in the location."
          },
          "standard_error_s": {
            "type": "number",
            "description": "RMS travel-time residual, seconds."
          },
          "azimuthal_gap_deg": {
            "type": "number",
            "description": "Largest azimuthal gap, degrees."
          },
          "evaluation_status": {
            "type": "string",
            "description": "QuakeML evaluation status, e.g. final."
          },
          "num_stations_used": {
            "type": "number",
            "description": "Stations used in the location."
          },
          "horizontal_error_km": {
            "type": "number",
            "description": "Horizontal location uncertainty, km."
          },
          "minimum_distance_deg": {
            "type": "number",
            "description": "Distance to the nearest station, degrees."
          }
        },
        "description": "One origin solution from an origin product.",
        "additionalProperties": false
      },
      "description": "Every origin product, preferred first. Present when requested and published."
    },
    "arrivals": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "time": {
            "type": "string",
            "description": "ISO 8601 UTC pick time."
          },
          "phase": {
            "type": "string",
            "description": "Phase name, e.g. P, Pn, S."
          },
          "channel": {
            "type": "string",
            "description": "SEED channel code."
          },
          "network": {
            "type": "string",
            "description": "SEED network code."
          },
          "station": {
            "type": "string",
            "description": "SEED station code."
          },
          "location": {
            "type": "string",
            "description": "SEED location code as published; \"\" and \"--\" both mean blank."
          },
          "azimuth_deg": {
            "type": "number",
            "description": "Azimuth from epicenter to station, degrees."
          },
          "time_weight": {
            "type": "number",
            "description": "Weight of the arrival time in the location."
          },
          "distance_deg": {
            "type": "number",
            "description": "Epicentral distance, degrees."
          },
          "time_residual_s": {
            "type": "number",
            "description": "Travel-time residual, seconds."
          }
        },
        "description": "One phase arrival joined to its pick.",
        "additionalProperties": false
      },
      "description": "All phase arrivals of the preferred origin, sorted by distance ascending."
    },
    "magnitudes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "is_preferred"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Magnitude type, e.g. Mww, mb, Ml."
          },
          "value": {
            "type": "number",
            "description": "Magnitude value."
          },
          "agency": {
            "type": "string",
            "description": "Agency that computed the magnitude."
          },
          "is_preferred": {
            "type": "boolean",
            "description": "True for the document's preferred magnitude."
          },
          "station_count": {
            "type": "number",
            "description": "Stations contributing to this magnitude."
          },
          "evaluation_mode": {
            "type": "string",
            "description": "QuakeML evaluation mode: manual or automatic."
          },
          "evaluation_status": {
            "type": "string",
            "description": "QuakeML evaluation status, e.g. reviewed."
          }
        },
        "description": "One event-level magnitude solution.",
        "additionalProperties": false
      },
      "description": "Magnitude solutions from the preferred phase-data product, in document order."
    },
    "aftershock_forecast": {
      "type": "object",
      "required": [
        "advisory_window",
        "created",
        "expires",
        "windows"
      ],
      "properties": {
        "created": {
          "type": "string",
          "description": "ISO 8601 UTC time the forecast was issued."
        },
        "expires": {
          "type": "string",
          "description": "ISO 8601 UTC expiry of the forecast."
        },
        "windows": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "label",
              "start",
              "end",
              "bins"
            ],
            "properties": {
              "end": {
                "type": "string",
                "description": "ISO 8601 UTC window end."
              },
              "bins": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "magnitude",
                    "probability"
                  ],
                  "properties": {
                    "magnitude": {
                      "type": "number",
                      "description": "Minimum magnitude of this bin."
                    },
                    "probability": {
                      "type": "number",
                      "description": "Probability (0–1) of at least one aftershock at or above it."
                    },
                    "count_median": {
                      "type": "number",
                      "description": "Median expected count."
                    },
                    "count_p95_max": {
                      "type": "number",
                      "description": "Upper bound of the 95% count range."
                    },
                    "count_p95_min": {
                      "type": "number",
                      "description": "Lower bound of the 95% count range."
                    }
                  },
                  "description": "One magnitude bin.",
                  "additionalProperties": false
                },
                "description": "Magnitude bins in upstream order."
              },
              "label": {
                "type": "string",
                "description": "Window label, e.g. \"1 Day\", \"1 Week\"."
              },
              "start": {
                "type": "string",
                "description": "ISO 8601 UTC window start (the forecast issue time, not now)."
              },
              "above_mainshock": {
                "type": "object",
                "required": [
                  "magnitude",
                  "probability"
                ],
                "properties": {
                  "magnitude": {
                    "type": "number",
                    "description": "Mainshock magnitude."
                  },
                  "probability": {
                    "type": "number",
                    "description": "Probability (0–1) of an aftershock at or above the mainshock magnitude."
                  }
                },
                "description": "Chance of an aftershock as large as the mainshock; absent when unpublished.",
                "additionalProperties": false
              }
            },
            "description": "One forecast window.",
            "additionalProperties": false
          },
          "description": "Forecast windows in upstream order."
        },
        "next_update": {
          "type": "string",
          "description": "ISO 8601 UTC time of the next scheduled update; absent once updates stop."
        },
        "advisory_window": {
          "type": "string",
          "description": "Window USGS headlines in its advisory, e.g. \"1 Week\"."
        }
      },
      "description": "USGS Operational Aftershock Forecast; probabilities change with each update.",
      "additionalProperties": false
    },
    "unavailable_includes": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "group",
          "reason"
        ],
        "properties": {
          "group": {
            "enum": [
              "origins",
              "magnitudes",
              "arrivals",
              "aftershock_forecast",
              "pager"
            ],
            "type": "string",
            "description": "The requested group."
          },
          "reason": {
            "enum": [
              "not_published",
              "fetch_failed"
            ],
            "type": "string",
            "description": "not_published: the event has no product for it, or its product lacks the files the group reads. fetch_failed: the product exists but could not be fetched or parsed."
          }
        },
        "description": "One requested group that was not returned.",
        "additionalProperties": false
      },
      "description": "Requested groups not returned, with the reason. Absent when all were returned."
    }
  },
  "additionalProperties": false
}
earthquake_get_event annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
earthquake_count_events — Count Earthquakes
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Count matches without event records, or size an earthquake_search_events query. Omitting start_time uses 30 days; pass explicit bounds for historical periods. queryEcho reports applied filters/window; ignoredFilters names unsupported EMSC inputs. Circle and independently optional box edges intersect. Both catalogs include non-tectonic events; event_type="earthquake" excludes them on USGS. exceeds_limit marks the 20,000-event single-request threshold, not a retrieval ceiling: search supports offset paging beyond it. max_allowed is 20,000 for USGS, null for EMSC.

earthquake_count_events input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "source": {
      "enum": [
        "usgs",
        "emsc"
      ],
      "type": "string",
      "default": "usgs",
      "description": "Data source. Both catalogs are global. \"usgs\" covers global events with PAGER, DYFI, and ShakeMap metadata. \"emsc\" is an independent global catalog operated by the European-Mediterranean Seismological Centre — use it to cross-check a count from a separate network. It has no PAGER, DYFI, or ShakeMap metadata; its station coverage is densest around Europe and the Mediterranean, so counts of small events differ most by region."
    },
    "min_cdi": {
      "type": "number",
      "maximum": 12,
      "minimum": 1,
      "description": "Minimum DYFI (Did You Feel It?) community intensity (1–12): the strongest shaking people reported for the event. An event without DYFI reports never matches. Only available from USGS."
    },
    "min_mmi": {
      "type": "number",
      "maximum": 12,
      "minimum": 1,
      "description": "Minimum ShakeMap intensity on the Modified Mercalli scale (1–12): the strongest shaking USGS modeled for the event, e.g. 7 for very strong shaking. Finds shaking a magnitude floor or alert_level misses. An event without a ShakeMap never matches; product_type \"shakemap\" requires one at any intensity. Only available from USGS."
    },
    "end_time": {
      "type": "string",
      "pattern": "^\\d{4}(-\\d{1,2}(-\\d{1,2})?)?([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$",
      "description": "End of time range as ISO 8601, in the same forms start_time accepts. Date-only values mean midnight at the start of the named day, not the whole day. Defaults to current time if omitted."
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude for radius search. Requires longitude and radius_km."
    },
    "min_felt": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Minimum number of DYFI (Did You Feel It?) reports. Use to count events with confirmed public impact. Only available from USGS."
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude for radius search. Requires latitude and radius_km."
    },
    "radius_km": {
      "type": "number",
      "maximum": 20001.6,
      "minimum": 0,
      "description": "Search radius in kilometers from the lat/lon point. Max 20001.6, the ceiling USGS enforces — half the Earth's great-circle circumference. Converted to degrees for EMSC (1° ≈ 111.2 km)."
    },
    "event_type": {
      "type": "string",
      "minLength": 1,
      "description": "Filter by upstream event classification, e.g. \"earthquake\" to exclude quarry blasts and explosions from the count, or \"quarry blast\" to count only those; a comma-separated list such as \"earthquake,explosion\" counts any of them. USGS matches case-insensitively and counts zero for a value it does not list, which the notice then names. Only available from USGS."
    },
    "start_time": {
      "type": "string",
      "pattern": "^\\d{4}(-\\d{1,2}(-\\d{1,2})?)?([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$",
      "description": "Start of time range as ISO 8601 (e.g. \"2026-01-01\" or \"2026-05-23T00:00:00\"). A bare year expands to January 1st and an unpadded month or day is zero-padded, with date-only values resolved to midnight (T00:00:00) on both sources. Explicit time and timezone suffixes are preserved. Defaults to 30 days before end_time (or before the current time) if omitted — applied server-side so USGS and EMSC honor the same window."
    },
    "alert_level": {
      "enum": [
        "green",
        "yellow",
        "orange",
        "red"
      ],
      "type": "string",
      "description": "Minimum PAGER alert level. PAGER estimates economic loss and casualties. \"green\" = minimal impact; \"red\" = extreme. Only available from USGS."
    },
    "max_depth_km": {
      "type": "number",
      "maximum": 1000,
      "minimum": -100,
      "description": "Maximum depth in kilometers. Bounded to the documented -100 to 1000 km catalog envelope."
    },
    "max_latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Northern edge of a bounding-box search, in degrees."
    },
    "min_depth_km": {
      "type": "number",
      "maximum": 1000,
      "minimum": -100,
      "description": "Minimum depth in kilometers. Bounded to the documented -100 to 1000 km catalog envelope. Shallow quakes (0–70 km) typically cause more surface damage than deep quakes (>300 km)."
    },
    "min_latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Southern edge of a bounding-box search, in degrees. Independent of the other three box parameters — supply any of them. Must not exceed max_latitude when both are given."
    },
    "product_type": {
      "type": "string",
      "description": "Required product type, e.g. \"moment-tensor\" (hyphenated, unlike the moment_tensor detail group); USGS only, matched case-insensitively. Blank means omitted."
    },
    "max_longitude": {
      "type": "number",
      "maximum": 360,
      "minimum": -360,
      "description": "Eastern edge of a bounding-box search, in degrees."
    },
    "max_magnitude": {
      "type": "number",
      "maximum": 10,
      "minimum": -1,
      "description": "Maximum magnitude."
    },
    "min_longitude": {
      "type": "number",
      "maximum": 360,
      "minimum": -360,
      "description": "Western edge of a bounding-box search, in degrees. Range extends beyond ±180 so a box can cross the antimeridian (e.g. min_longitude=170, max_longitude=190) — always keep min_longitude at or below max_longitude rather than inverting the pair."
    },
    "min_magnitude": {
      "type": "number",
      "maximum": 10,
      "minimum": -1,
      "description": "Minimum magnitude (Richter or equivalent). M2.5+ is felt by some people; M5+ can cause damage; M7+ is major."
    },
    "review_status": {
      "type": "string",
      "description": "USGS review status: automatic or reviewed. Blank means omitted; unsupported by EMSC."
    },
    "magnitude_type": {
      "type": "string",
      "description": "Magnitude type, e.g. \"mb\" or \"mww\"; both sources. USGS matches case-insensitively; EMSC matches its own lowercase types (\"mb\", \"mw\") case-sensitively and has no \"mww\". Blank means omitted."
    },
    "min_significance": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Minimum USGS significance score (0–2000+). Combines magnitude, felt reports, and PAGER estimates. Significant events typically score 600+. Only available from USGS."
    }
  },
  "additionalProperties": false
}
earthquake_count_events output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "count",
        "max_allowed",
        "source",
        "exceeds_limit"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "count": {
      "type": "number",
      "description": "Number of events matching the query."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "invalid_range",
                "invalid_radius",
                "invalid_bounding_box",
                "source_unavailable",
                "source_timeout",
                "upstream_rejected",
                "upstream_rejected_no_reason"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_range`: Minimum magnitude or depth exceeds its maximum, or start_time is after end_time. `invalid_radius`: latitude or longitude provided without radius_km, or vice versa. `invalid_bounding_box`: min_latitude exceeds max_latitude, or min_longitude exceeds max_longitude. `source_unavailable`: Selected source API returns a 5xx, serves HTML or an unreadable body, or is unreachable. `source_timeout`: Selected source API did not answer before the request deadline. `upstream_rejected`: The source API rejected the query parameters and explained why in its response body. `upstream_rejected_no_reason`: The source API rejected the query but its response body carried no usable explanation. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "On a USGS count of zero, names each supplied event_type, magnitude_type, or product_type value USGS does not list, which matches no events, with the listed value it likely meant. Absent otherwise."
    },
    "source": {
      "enum": [
        "usgs",
        "emsc"
      ],
      "type": "string",
      "description": "Data source used."
    },
    "queryEcho": {
      "type": "object",
      "required": [
        "source"
      ],
      "properties": {
        "source": {
          "enum": [
            "usgs",
            "emsc"
          ],
          "type": "string",
          "description": "Data source queried."
        },
        "min_cdi": {
          "type": "number",
          "description": "Applied minimum DYFI community intensity (CDI); absent for EMSC."
        },
        "min_mmi": {
          "type": "number",
          "description": "Applied minimum ShakeMap intensity (MMI); absent for EMSC."
        },
        "end_time": {
          "type": "string",
          "description": "Applied end time; absent means upstream current-time default."
        },
        "latitude": {
          "type": "number",
          "description": "Circle latitude, degrees."
        },
        "min_felt": {
          "type": "number",
          "description": "Applied minimum DYFI response count; absent for EMSC."
        },
        "longitude": {
          "type": "number",
          "description": "Circle longitude, degrees."
        },
        "radius_km": {
          "type": "number",
          "description": "Search radius in km sent upstream (converted to degrees for EMSC)."
        },
        "event_type": {
          "type": "string",
          "description": "Applied event type; absent for EMSC."
        },
        "start_time": {
          "type": "string",
          "description": "Applied start time; defaults to 30 days before end/now."
        },
        "alert_level": {
          "type": "string",
          "description": "Applied minimum PAGER alert; absent for EMSC."
        },
        "max_depth_km": {
          "type": "number",
          "description": "Applied maximum depth, km."
        },
        "max_latitude": {
          "type": "number",
          "description": "Northern bounding-box edge sent upstream, in degrees."
        },
        "min_depth_km": {
          "type": "number",
          "description": "Applied minimum depth, km."
        },
        "min_latitude": {
          "type": "number",
          "description": "Southern bounding-box edge sent upstream, in degrees."
        },
        "product_type": {
          "type": "string",
          "description": "Applied required product; USGS only."
        },
        "max_longitude": {
          "type": "number",
          "description": "Eastern bounding-box edge sent upstream, in degrees."
        },
        "max_magnitude": {
          "type": "number",
          "description": "Applied maximum magnitude."
        },
        "min_longitude": {
          "type": "number",
          "description": "Western bounding-box edge sent upstream, in degrees."
        },
        "min_magnitude": {
          "type": "number",
          "description": "Applied minimum magnitude."
        },
        "review_status": {
          "enum": [
            "automatic",
            "reviewed"
          ],
          "type": "string",
          "description": "Applied review status; USGS only."
        },
        "magnitude_type": {
          "type": "string",
          "description": "Applied magnitude type."
        },
        "min_significance": {
          "type": "number",
          "description": "Applied minimum significance; absent for EMSC."
        }
      },
      "description": "Echo of the effective parameters the count covers, including server-resolved defaults. Read start_time and end_time to know which window the count spans — a filter absent here was not sent upstream.",
      "additionalProperties": false
    },
    "max_allowed": {
      "type": [
        "number",
        "null"
      ],
      "description": "Upstream single-request threshold: 20000 for USGS; null because EMSC count omits it. Offset paging can retrieve larger sets."
    },
    "exceeds_limit": {
      "type": "boolean",
      "description": "Count exceeds the single-request threshold (20000 for EMSC despite null max_allowed). Use search offset paging or narrower filters."
    },
    "ignoredFilters": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Name of an input filter that was not applied."
      },
      "description": "USGS-only filters supplied in the input but not sent upstream because source=emsc does not support them. The count is NOT constrained by these — re-run with source=usgs to apply them. Absent when every supplied filter was applied."
    }
  },
  "additionalProperties": false
}
earthquake_count_events annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

21 advertised

USGS all earthquakes (hour) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: all events in the last hour.

USGS all earthquakes (hour) URI
earthquake://feed/all/hour

MIME type: application/json

USGS all earthquakes (day) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: all events in the last day.

USGS all earthquakes (day) URI
earthquake://feed/all/day

MIME type: application/json

USGS all earthquakes (week) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: all events in the last week.

USGS all earthquakes (week) URI
earthquake://feed/all/week

MIME type: application/json

USGS all earthquakes (month) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: all events in the last month.

USGS all earthquakes (month) URI
earthquake://feed/all/month

MIME type: application/json

USGS 1.0 earthquakes (hour) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M1.0+ events in the last hour.

USGS 1.0 earthquakes (hour) URI
earthquake://feed/1.0/hour

MIME type: application/json

USGS 1.0 earthquakes (day) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M1.0+ events in the last day.

USGS 1.0 earthquakes (day) URI
earthquake://feed/1.0/day

MIME type: application/json

USGS 1.0 earthquakes (week) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M1.0+ events in the last week.

USGS 1.0 earthquakes (week) URI
earthquake://feed/1.0/week

MIME type: application/json

USGS 1.0 earthquakes (month) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M1.0+ events in the last month.

USGS 1.0 earthquakes (month) URI
earthquake://feed/1.0/month

MIME type: application/json

USGS 2.5 earthquakes (hour) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M2.5+ events in the last hour.

USGS 2.5 earthquakes (hour) URI
earthquake://feed/2.5/hour

MIME type: application/json

USGS 2.5 earthquakes (day) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M2.5+ events in the last day.

USGS 2.5 earthquakes (day) URI
earthquake://feed/2.5/day

MIME type: application/json

USGS 2.5 earthquakes (week) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M2.5+ events in the last week.

USGS 2.5 earthquakes (week) URI
earthquake://feed/2.5/week

MIME type: application/json

USGS 2.5 earthquakes (month) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M2.5+ events in the last month.

USGS 2.5 earthquakes (month) URI
earthquake://feed/2.5/month

MIME type: application/json

USGS 4.5 earthquakes (hour) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M4.5+ events in the last hour.

USGS 4.5 earthquakes (hour) URI
earthquake://feed/4.5/hour

MIME type: application/json

USGS 4.5 earthquakes (day) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M4.5+ events in the last day.

USGS 4.5 earthquakes (day) URI
earthquake://feed/4.5/day

MIME type: application/json

USGS 4.5 earthquakes (week) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M4.5+ events in the last week.

USGS 4.5 earthquakes (week) URI
earthquake://feed/4.5/week

MIME type: application/json

USGS 4.5 earthquakes (month) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: M4.5+ events in the last month.

USGS 4.5 earthquakes (month) URI
earthquake://feed/4.5/month

MIME type: application/json

USGS significant earthquakes (hour) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: significant events in the last hour.

USGS significant earthquakes (hour) URI
earthquake://feed/significant/hour

MIME type: application/json

USGS significant earthquakes (day) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: significant events in the last day.

USGS significant earthquakes (day) URI
earthquake://feed/significant/day

MIME type: application/json

USGS significant earthquakes (week) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: significant events in the last week.

USGS significant earthquakes (week) URI
earthquake://feed/significant/week

MIME type: application/json

USGS significant earthquakes (month) — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

USGS real-time feed: significant events in the last month.

USGS significant earthquakes (month) URI
earthquake://feed/significant/month

MIME type: application/json

earthquake-guide

Advertised by the server during the last successful anonymous check.

Gates and workflows for the earthquake_* tools (USGS ComCat and EMSC). Use to judge how bad a quake was, read USGS aftershock odds, check whether a depth or location holds up, match one event across USGS and EMSC, or count and list events over years or in a region — before concluding from a missing product, a default time window, or magnitudes of different types.

earthquake-guide URI
skill://earthquake-guide/SKILL.md

MIME type: text/markdown

earthquake-feed — USGS Earthquake Feed

Advertised by the server during the last successful anonymous check.

Direct access to a USGS real-time earthquake feed as injectable context. magnitude_tier: all | 1.0 | 2.5 | 4.5 | significant. time_window: hour | day | week | month. Returns 100 events per page with totalCount, and next_uri when more events remain. Read next_uri verbatim to continue the retained generation. Snapshots last up to 15 minutes, subject to capacity eviction and process restart. The earthquake_get_feed tool exposes the same generation.

earthquake-feed URI template
earthquake://feed/{magnitude_tier}/{time_window}

MIME type: application/json

earthquake-feed-page — USGS Earthquake Feed Page

Advertised by the server during the last successful anonymous check.

Direct access to a USGS real-time earthquake feed as injectable context. magnitude_tier: all | 1.0 | 2.5 | 4.5 | significant. time_window: hour | day | week | month. Returns 100 events per page with totalCount, and next_uri when more events remain. Read next_uri verbatim to continue the retained generation. Snapshots last up to 15 minutes, subject to capacity eviction and process restart. The earthquake_get_feed tool exposes the same generation.

earthquake-feed-page URI template
earthquake://feed/{magnitude_tier}/{time_window}/page/{cursor}

MIME type: application/json

earthquake-event — Earthquake Event

Advertised by the server during the last successful anonymous check.

Earthquake event detail by USGS event ID or EMSC event ID (e.g. "20190706_0000043") as injectable context. Returns the normalized event; a USGS event adds the analysis products only the single-event response holds: PAGER alert, ShakeMap ground motion, DYFI felt reports, moment tensor, ground-failure alerts, origin quality, and finite-fault rupture dimensions. Groups with no projected field are omitted; EMSC publishes none of them. Use event IDs from earthquake_get_feed or earthquake_search_events results.

earthquake-event URI template
earthquake://event/{event_id}

MIME type: application/json

io.modelcontextprotocol/skills

Advertised by the server during the last successful anonymous check.

io.modelcontextprotocol/skills URI template
skill://{+path}

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
759 ms
95th percentile latency
759 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 759 ms · metadata changed · 4 tool(s), 21 resource(s), 4 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http earthquake-mcp-server-caseyjhand https://earthquake.caseyjhand.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add earthquake-mcp-server-caseyjhand --url https://earthquake.caseyjhand.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable earthquake-mcp-server-caseyjhand in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "earthquake-mcp-server-caseyjhand": {
      "url": "https://earthquake.caseyjhand.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "earthquake-mcp-server-caseyjhand": {
      "type": "streamableHttp",
      "url": "https://earthquake.caseyjhand.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start earthquake-mcp-server-caseyjhand and inspect its tools.
VS Code configuration
{
  "servers": {
    "earthquake-mcp-server-caseyjhand": {
      "type": "http",
      "url": "https://earthquake.caseyjhand.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http earthquake-mcp-server-caseyjhand https://earthquake.caseyjhand.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://earthquake.caseyjhand.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "earthquake-mcp-server-caseyjhand": {
      "serverUrl": "https://earthquake.caseyjhand.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like earthquake-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.