Skip to main content
Glama

earthquake-mcp-server

Search Earthquakes

earthquake_search_events
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
limitNoEvents 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.
offsetNoIndex 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.
sourceNoUSGS 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.usgs
min_cdiNoMinimum 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_mmiNoMinimum 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_timeNoEnd 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.
latitudeNoLatitude for radius search. Requires longitude and radius_km.
min_feltNoMinimum number of DYFI (Did You Feel It?) reports. Use to find events with confirmed public impact. Only available from USGS.
order_byNoSort order. "time" returns newest first; "magnitude" returns largest first.time
longitudeNoLongitude for radius search. Requires latitude and radius_km.
radius_kmNoSearch 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_typeNoFilter 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_timeNoStart 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_levelNoMinimum PAGER alert level. PAGER estimates economic loss and casualties. "green" = minimal impact; "red" = extreme. Only available from USGS.
max_depth_kmNoMaximum depth in kilometers. Bounded to the documented -100 to 1000 km catalog envelope.
max_latitudeNoNorthern edge of a bounding-box search, in degrees.
min_depth_kmNoMinimum 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_latitudeNoSouthern 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_typeNoRequired product type, e.g. "moment-tensor" (hyphenated, unlike the moment_tensor detail group); USGS only, matched case-insensitively. Blank means omitted.
max_longitudeNoEastern edge of a bounding-box search, in degrees.
max_magnitudeNoMaximum magnitude.
min_longitudeNoWestern 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_magnitudeNoMinimum magnitude (Richter or equivalent). M2.5+ is felt by some people; M5+ can cause damage; M7+ is major.
review_statusNoUSGS review status: automatic or reviewed. Blank means omitted; unsupported by EMSC.
magnitude_typeNoMagnitude 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_significanceNoMinimum USGS significance score (0–2000+). Combines magnitude, felt reports, and PAGER estimates. Significant events typically score 600+. Only available from USGS.

Output Schema

NameRequiredDescriptionDefault
countNoNumber of events returned.
errorNoPresent when the call failed. Absent on success.
eventsNoMatching earthquake events.
noticeNoGuidance 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.
sourceNoData source used.
queryEchoNoEcho 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.
truncatedNoPage filled the applied limit and more matches remain or may remain. Continue with nextOffset. Without totalCount, more events may remain but are not confirmed.
nextOffsetNoNext 1-based offset; keep other inputs unchanged. Present if more events remain or may remain with unknown total; absent on last page.
totalCountNoFull 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.
ignoredFiltersNoUSGS-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.
countUnavailableNoTrue if the count lookup failed; events are unaffected, totalCount unknown. Retry earthquake_count_events with identical filters. Absent if count succeeded or was unnecessary.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • changedInput schema / properties / event_type / description
      Previous value: -"Filter by upstream event classification, e.g. \"earthquake\" to exclude quarry blasts and explosions, or \"quarry blast\" to see only those. Matched verbatim against the USGS catalog, which accepts any string and returns zero matches for an unrecognized one. Only available from USGS."New value: +"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."
    • changedInput schema / properties / magnitude_type / description
      Previous value: -"Magnitude type, e.g. \"mb\" or \"mww\"; both sources. Blank means omitted."New value: +"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."
    • addedInput schema / properties / min_cdi
      Added value: +{
      +  "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.",
      +  "maximum": 12,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • addedInput schema / properties / min_mmi
      Added value: +{
      +  "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.",
      +  "maximum": 12,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • changedInput schema / properties / product_type / description
      Previous value: -"Required product type, e.g. \"moment-tensor\"; USGS only. Blank means omitted."New value: +"Required product type, e.g. \"moment-tensor\" (hyphenated, unlike the moment_tensor detail group); USGS only, matched case-insensitively. Blank means omitted."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"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 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."New value: +"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."
    • changedOutput schema / properties / events / items / properties / mmi / description
      Previous value: -"Maximum ShakeMap Modified Mercalli intensity (0–12); null without a ShakeMap or for EMSC."New value: +"Maximum ShakeMap Modified Mercalli intensity (1–12); null without a ShakeMap, when the ShakeMap computed no intensity, or for EMSC."
    • changedOutput schema / properties / events / items / properties / status / description
      Previous value: -"Review state: automatic (unverified), reviewed (analyst checked), or deleted. Null if unpublished (EMSC); such solutions remain unverified and subject to revision."New value: +"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."
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when limit was clamped to 1,000 (requested and applied values), when results are empty (how to broaden filters), or when more pages remain (the next offset). Absent when none applies."New value: +"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."
    • addedOutput schema / properties / queryEcho / properties / min_cdi
      Added value: +{
      +  "description": "Applied minimum DYFI community intensity (CDI); absent for EMSC.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / queryEcho / properties / min_mmi
      Added value: +{
      +  "description": "Applied minimum ShakeMap intensity (MMI); absent for EMSC.",
      +  "type": "number"
      +}
  2. Changed11 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum events to return per call. Default 100. Accepts up to 20000; fetches at most 100 candidates and returns a byte-bounded page. Combine with offset to retrieve match sets larger than one call can return."New value: +"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."
    • removedInput schema / properties / limit / maximum
      Removed value: -20000
    • addedInput schema / properties / limit / multipleOf
      Added value: +1
    • changedInput schema / properties / limit / type
      Previous value: -"integer"New value: +"number"
    • changedInput schema / properties / source / description
      Previous value: -"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. Event-detail tool accepts USGS IDs only."New value: +"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."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_range`: Minimum magnitude or depth exceeds its maximum, or start_time is after end_time. `result_too_large`: One event or page metadata cannot fit the response budget. `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 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."New value: +"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 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."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_range",
      -  "result_too_large",
      -  "invalid_radius",
      -  "invalid_bounding_box",
      -  "source_unavailable",
      -  "source_timeout",
      -  "upstream_rejected",
      -  "upstream_rejected_no_reason"
      -]New value: +[
      +  "invalid_range",
      +  "invalid_radius",
      +  "invalid_bounding_box",
      +  "source_unavailable",
      +  "source_timeout",
      +  "upstream_rejected",
      +  "upstream_rejected_no_reason"
      +]
    • addedOutput schema / properties / events / items / properties / associated_ids
      Added value: +{
      +  "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.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Recovery guidance when results are empty or capped — how to broaden filters or get the full count. Absent when the result set is non-empty and within the limit."New value: +"Guidance when limit was clamped to 1,000 (requested and applied values), when results are empty (how to broaden filters), or when more pages remain (the next offset). Absent when none applies."
    • changedOutput schema / properties / queryEcho / properties / limit / description
      Previous value: -"Effective result limit sent upstream."New value: +"Applied result limit sent upstream, after any clamp."
    • changedOutput schema / properties / truncated / description
      Previous value: -"Page capped by limit, candidates or bytes. Continue with nextOffset. Without totalCount, more events may remain but are not confirmed."New value: +"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."
  3. Changed39 schema fields changed
    • addedInput schema / properties / magnitude_type
      Added value: +{
      +  "description": "Magnitude type, e.g. \"mb\" or \"mww\"; both sources. Blank means omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / product_type
      Added value: +{
      +  "description": "Required product type, e.g. \"moment-tensor\"; USGS only. Blank means omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / review_status
      Added value: +{
      +  "description": "USGS review status: automatic or reviewed. Blank means omitted; unsupported by EMSC.",
      +  "type": "string"
      +}
    • changedInput schema / properties / source / description
      Previous value: -"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 any event, anywhere, against a separate network. It publishes no PAGER, DYFI, or ShakeMap metadata and no per-event detail endpoint; its station coverage is densest around Europe and the Mediterranean."New value: +"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. Event-detail tool accepts USGS IDs only."
    • changedOutput schema / properties / countUnavailable / description
      Previous value: -"True when the follow-up total-count query failed, so the total is unknown for this call rather than never requested. The returned events are complete and unaffected; only totalCount is missing. Retry earthquake_count_events with the same filters to recover the total. Absent whenever the count succeeded or was never needed."New value: +"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."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `result_too_large`: One event or page metadata cannot fit the response budget. `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 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."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_range`: Minimum magnitude or depth exceeds its maximum, or start_time is after end_time. `result_too_large`: One event or page metadata cannot fit the response budget. `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 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."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "result_too_large",
      -  "invalid_radius",
      -  "invalid_bounding_box",
      -  "source_unavailable",
      -  "source_timeout",
      -  "upstream_rejected",
      -  "upstream_rejected_no_reason"
      -]New value: +[
      +  "invalid_range",
      +  "result_too_large",
      +  "invalid_radius",
      +  "invalid_bounding_box",
      +  "source_unavailable",
      +  "source_timeout",
      +  "upstream_rejected",
      +  "upstream_rejected_no_reason"
      +]
    • changedOutput schema / properties / events / items / properties / alert / description
      Previous value: -"PAGER estimated impact alert level. Null when USGS ran no PAGER assessment, and always null for EMSC, which publishes no such field."New value: +"PAGER estimated impact; null without an assessment or for EMSC."
    • changedOutput schema / properties / events / items / properties / auth / description
      Previous value: -"Code of the agency or network the source names as authoritative for this solution, e.g. \"NEIC\", \"BMKG\", \"NDI\" from EMSC or \"us\", \"ci\", \"ak\" from USGS. Absent when the source reports none."New value: +"Authoritative agency/network code (EMSC auth or USGS net); absent if unpublished."
    • changedOutput schema / properties / events / items / properties / cdi / description
      Previous value: -"Maximum reported intensity (Community Decimal Intensity, 0–12 scale), derived from DYFI responses. Null when USGS computed no DYFI intensity, and always null for EMSC, which publishes no such field."New value: +"Maximum DYFI Community Decimal Intensity (0–12); null if uncomputed or unsupported (EMSC)."
    • changedOutput schema / properties / events / items / properties / depth_km / description
      Previous value: -"Hypocenter depth in kilometers. Shallow (<70 km), intermediate (70–300 km), or deep (>300 km). Null for historical events where depth was not measured."New value: +"Hypocenter depth in km; null if unmeasured."
    • changedOutput schema / properties / events / items / properties / event_certainty / description
      Previous value: -"How certain the source is of event_type: \"known\" (asserted), \"suspected\", \"unknown\", or \"unreported\". EMSC publishes this as the first character of its event-type code — a suspected explosion is not a confirmed one, and this is the only field that says so. Absent for USGS, which publishes no certainty axis, and absent for an EMSC code outside the published nomenclature."New value: +"EMSC classification certainty: known (asserted), suspected, unknown, or unreported. Suspected is not confirmed. Absent for USGS and unrecognized EMSC codes."
    • changedOutput schema / properties / events / items / properties / event_type / description
      Previous value: -"What kind of event this is, in one vocabulary whichever source served it — the QuakeML type names USGS publishes (\"earthquake\", \"quarry blast\", \"explosion\", \"ice quake\"). EMSC's two-character code is decoded to the same names, so the same event carries the same value from either source; how sure the source is rides on event_certainty instead. A code outside the published nomenclature is forwarded verbatim rather than guessed at. Not every record in either catalog is a tectonic earthquake. Absent when the source publishes no classification."New value: +"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."
    • changedOutput schema / properties / events / items / properties / felt / description
      Previous value: -"Number of DYFI (Did You Feel It?) responses. Null when USGS has received no reports for the event, and always null for EMSC, which publishes no DYFI field — a null is not evidence the event went unfelt."New value: +"DYFI (Did You Feel It?) response count; null if no USGS reports or source has no DYFI (EMSC). Null does not mean unfelt."
    • changedOutput schema / properties / events / items / properties / magnitude / description
      Previous value: -"Preferred magnitude value. Null when no magnitude was computed for the event (the title renders it as \"M ?\")."New value: +"Preferred magnitude; null if not computed (title: \"M ?\")."
    • changedOutput schema / properties / events / items / properties / mmi / description
      Previous value: -"Maximum ShakeMap instrumental intensity (Modified Mercalli, 0–12 scale). Null when USGS produced no ShakeMap for the event, and always null for EMSC, which publishes no such field."New value: +"Maximum ShakeMap Modified Mercalli intensity (0–12); null without a ShakeMap or for EMSC."
    • changedOutput schema / properties / events / items / properties / significance / description
      Previous value: -"USGS significance score (0–2000+). Combines magnitude, felt reports, PAGER. Null when USGS computed no score, and always null for EMSC, which publishes no such field."New value: +"USGS significance (0–2000+), combining magnitude, felt reports and PAGER; null if uncomputed or for EMSC."
    • changedOutput schema / properties / events / items / properties / source_catalog / description
      Previous value: -"Upstream catalog this solution came from, e.g. \"EMSC-RTS\" (EMSC real-time seismicity, revised as analysis continues). Absent for USGS, which publishes no catalog identifier on event records."New value: +"Solution catalog, e.g. EMSC-RTS (real-time, subject to revision). Absent for USGS."
    • changedOutput schema / properties / events / items / properties / status / description
      Previous value: -"Human-review state: \"automatic\" (posted by automatic processing, not yet verified by a person), \"reviewed\" (examined by an analyst), or \"deleted\". Null when the source publishes no review status — EMSC does not, so treat an EMSC solution as unverified and subject to revision rather than final."New value: +"Review state: automatic (unverified), reviewed (analyst checked), or deleted. Null if unpublished (EMSC); such solutions remain unverified and subject to revision."
    • changedOutput schema / properties / events / items / properties / title / description
      Previous value: -"Human-readable event summary, e.g. \"M 6.0 - 13 km S of Honaunau-Napoopoo, Hawaii\"."New value: +"Event summary, e.g. \"M 6.0 - Hawaii\"."
    • changedOutput schema / properties / events / items / properties / tsunami / description
      Previous value: -"USGS tsunami flag: 1 for large events in oceanic regions, 0 otherwise. It is not a warning — USGS states the flag does not indicate whether a tsunami did or will exist; check NOAA (tsunami.gov) for actual alert status. Null when the source publishes no such flag, as EMSC does not."New value: +"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."
    • changedOutput schema / properties / nextOffset / description
      Previous value: -"Value to pass as the offset input to retrieve the next page, with every other input unchanged. Present when more events remain or may remain with an unknown total; absent means this was the last page."New value: +"Next 1-based offset; keep other inputs unchanged. Present if more events remain or may remain with unknown total; absent on last page."
    • changedOutput schema / properties / queryEcho / properties / alert_level / description
      Previous value: -"PAGER alert filter sent upstream. Absent for EMSC — not supported there."New value: +"Applied minimum PAGER alert; absent for EMSC."
    • changedOutput schema / properties / queryEcho / properties / end_time / description
      Previous value: -"Effective query end time. Absent when omitted from input — the upstream defaults to the current time."New value: +"Applied end time; absent means upstream current-time default."
    • changedOutput schema / properties / queryEcho / properties / event_type / description
      Previous value: -"Event-type filter sent upstream. Absent for EMSC — not supported there."New value: +"Applied event type; absent for EMSC."
    • changedOutput schema / properties / queryEcho / properties / latitude / description
      Previous value: -"Radius-search latitude sent upstream."New value: +"Circle latitude, degrees."
    • changedOutput schema / properties / queryEcho / properties / longitude / description
      Previous value: -"Radius-search longitude sent upstream."New value: +"Circle longitude, degrees."
    • addedOutput schema / properties / queryEcho / properties / magnitude_type
      Added value: +{
      +  "description": "Applied magnitude type.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / queryEcho / properties / max_depth_km / description
      Previous value: -"Maximum depth filter sent upstream."New value: +"Applied maximum depth, km."
    • changedOutput schema / properties / queryEcho / properties / max_magnitude / description
      Previous value: -"Maximum magnitude filter sent upstream."New value: +"Applied maximum magnitude."
    • changedOutput schema / properties / queryEcho / properties / min_depth_km / description
      Previous value: -"Minimum depth filter sent upstream."New value: +"Applied minimum depth, km."
    • changedOutput schema / properties / queryEcho / properties / min_felt / description
      Previous value: -"DYFI felt-report filter sent upstream. Absent for EMSC — not supported there."New value: +"Applied minimum DYFI response count; absent for EMSC."
    • changedOutput schema / properties / queryEcho / properties / min_magnitude / description
      Previous value: -"Minimum magnitude filter sent upstream."New value: +"Applied minimum magnitude."
    • changedOutput schema / properties / queryEcho / properties / min_significance / description
      Previous value: -"Significance filter sent upstream. Absent for EMSC — not supported there."New value: +"Applied minimum significance; absent for EMSC."
    • addedOutput schema / properties / queryEcho / properties / product_type
      Added value: +{
      +  "description": "Applied required product; USGS only.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / queryEcho / properties / review_status
      Added value: +{
      +  "description": "Applied review status; USGS only.",
      +  "enum": [
      +    "automatic",
      +    "reviewed"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / queryEcho / properties / start_time / description
      Previous value: -"Effective query start time sent upstream — server-resolved to a 30-day window when omitted from input."New value: +"Applied start time; defaults to 30 days before end/now."
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Total events matching the query before the limit was applied. Fetched via a follow-up count query when results are truncated at the limit. Absent when results were not capped, and when that follow-up query failed — countUnavailable separates the two."New value: +"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."
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when results were capped by the requested limit, candidate limit, or response byte budget. totalCount carries the full match count when available, and nextOffset the input for the following page. With countUnavailable set the total is unknown, so this flag means the page was filled, not that more events are confirmed to remain."New value: +"Page capped by limit, candidates or bytes. Continue with nextOffset. Without totalCount, more events may remain but are not confirmed."
  4. Added

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/idempotent, yet the description still adds substantial behavior: both catalogs include non-tectonic events, event_type="earthquake" filters them on USGS, circle and box filters intersect, unsupported EMSC filters surface in ignoredFilters, and results are capped at 1,000 per call. It also explains totalCount/countUnavailable and that paging can reach beyond 20,000 matches — exactly the operational context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and almost every following sentence carries operational information. It drifts toward telegraphic fragments ("Circle and independently optional box edges intersect") that trade clarity for density, but there is little genuine filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter, zero-required search tool with an output schema and full annotation coverage, the description covers everything an agent needs: scoping, source differences, filter interaction, result caps, pagination protocol, and total-count ambiguity. Return-value structure is legitimately left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all 26 parameters are already documented in structured fields; the baseline is 3. The description does add genuine cross-parameter meaning — geographic filters intersecting rather than overriding, the need to hold filters and order_by constant across pages, and EMSC dropping unsupported filters — but it does not add per-parameter guidance beyond what the schema already carries.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb (Search) and resource (USGS / EMSC seismic catalogs) plus the filter axes (time, magnitude, depth, area), which clearly distinguishes it from earthquake_count_events, earthquake_get_event and earthquake_get_feed. An agent can identify this as the general-purpose catalog query tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent to earthquake_count_events for sizing and gives concrete paging instructions (continue with offset=nextOffset, keep filters/order unchanged). What it lacks is any statement of when to prefer this over earthquake_get_feed or earthquake_get_event, so the sibling differentiation is partial rather than complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.