earthquake-mcp-server
Search USGS and EMSC seismic data — real-time feeds, event queries, and earthquake counts.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"earthquake-mcp-server": {
"command": "bun",
"args": [
"@cyanheads/earthquake-mcp-server"
]
}
}
}실행 가능한 패키지
0.3.7streamable-http원격 엔드포인트
https://earthquake.caseyjhand.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (4)
🟢earthquake_get_feed(magnitude_tier, time_window, limit, cursor)
Fetch a USGS pre-computed real-time earthquake feed by magnitude tier and time window. These feeds are CDN-cached by USGS and faster and more available than the query API — use them for "what's happening now" queries. "all" includes microseisms (M<1); "significant" is a USGS curation based on magnitude, felt reports, and PAGER impact estimates. "hour" returns 0–10 events typically; "month" can exceed 10,000 for the "all" tier, so results are returned a page at a time: count is the page size, totalCount the whole feed, and nextCursor the input for the following page. The cursor is opaque and must be passed back verbatim — unlike earthquake_search, these feeds have no upstream paging parameter and USGS regenerates them about once a minute, so a numeric offset across two calls would skip or repeat events. For historical or filtered queries, use earthquake_search instead.
입력 스키마
{
"type": "object",
"properties": {
"magnitude_tier": {
"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.",
"type": "string",
"enum": [
"all",
"1.0",
"2.5",
"4.5",
"significant"
]
},
"time_window": {
"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.",
"type": "string",
"enum": [
"hour",
"day",
"week",
"month"
]
},
"limit": {
"description": "Maximum events to return in this call. Default 100, max 1000. Applies to the first page; later pages carry the page size inside the cursor, so set it on the first call rather than changing it mid-sequence.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"cursor": {
"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.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number of events returned in this page, not the whole feed."
},
"generated_at": {
"type": "string",
"description": "ISO 8601 UTC timestamp when this feed was generated by USGS."
},
"events": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "USGS or EMSC event identifier."
},
"title": {
"type": "string",
"description": "Human-readable event summary, e.g. \"M 6.0 - 13 km S of Honaunau-Napoopoo, Hawaii\"."
},
"magnitude": {
"description": "Preferred magnitude value. Null when no magnitude was computed for the event (the title renders it as \"M ?\").",
"type": [
"number",
"null"
]
},
"magnitude_type": {
"type": "string",
"description": "Magnitude type (ml, mww, mw, mb, etc.)."
},
"time": {
"type": "string",
"description": "ISO 8601 UTC origin time."
},
"updated": {
"type": "string",
"description": "ISO 8601 UTC time this record was last updated."
},
"place": {
"type": "string",
"description": "Nearest named location."
},
"latitude": {
"type": "number",
"description": "Epicenter latitude in decimal degrees."
},
"longitude": {
"type": "number",
"description": "Epicenter longitude in decimal degrees."
},
"depth_km": {
"description": "Hypocenter depth in kilometers. Shallow (<70 km), intermediate (70–300 km), or deep (>300 km). Null for historical events where depth was not measured.",
"type": [
"number",
"null"
]
},
"felt": {
"description": "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.",
"type": [
"number",
"null"
]
},
"cdi": {
"description": "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.",
"type": [
"number",
"null"
]
},
"mmi": {
"description": "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.",
"type": [
"number",
"null"
]
},
"alert": {
"anyOf": [
{
"type": "string",
"enum": [
"green",
"yellow",
"orange",
"red"
]
},
{
"type": "null"
}
],
"description": "PAGER estimated impact alert level. Null when USGS ran no PAGER assessment, and always null for EMSC, which publishes no such field."
},
"tsunami": {
"description": "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.",
"type": [
"number",
"null"
]
},
"significance": {
"description": "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.",
"type": [
"number",
"null"
]
},
"status": {
"anyOf": [
{
"type": "string",
"enum": [
"automatic",
"reviewed",
"deleted"
]
},
{
"type": "null"
}
],
"description": "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."
},
"source_catalog": {
"description": "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.",
"type": "string"
},
"auth": {
"description": "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.",
"type": "string"
},
"event_type": {
"description": "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.",
"type": "string"
},
"event_certainty": {
"description": "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.",
"type": "string",
"enum": [
"known",
"suspected",
"unknown",
"unreported"
]
},
"event_url": {
"description": "USGS event page URL. Present for USGS events only.",
"type": "string"
},
"detail_url": {
"description": "URL to fetch the full GeoJSON detail record. Present in USGS list responses.",
"type": "string"
}
},
"required": [
"id",
"title",
"magnitude",
"magnitude_type",
"time",
"updated",
"place",
"latitude",
"longitude",
"depth_km",
"felt",
"cdi",
"mmi",
"alert",
"tsunami",
"significance",
"status"
],
"additionalProperties": false,
"description": "A single earthquake event."
},
"description": "Earthquake events for this page, newest first."
},
"feed_url": {
"type": "string",
"description": "Source feed URL."
},
"totalCount": {
"description": "Number of events in the whole feed, across every page.",
"type": "number"
},
"truncated": {
"description": "True when the feed holds more events than this page returned. nextCursor carries the input for the following page.",
"type": "boolean"
},
"nextCursor": {
"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.",
"type": "string"
},
"notice": {
"description": "Recovery guidance when the feed contains no events, or how to continue when a page was capped — narrowing the magnitude tier, widening the time window, paging with the cursor, or using earthquake_search for filtered queries. Absent when a single page covers the whole feed.",
"type": "string"
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `feed_unavailable`: USGS feed endpoint returns a 5xx, HTML, 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.",
"examples": [
"feed_unavailable",
"feed_timeout"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"count",
"generated_at",
"events",
"feed_url"
]
},
{
"required": [
"error"
]
}
]
}🟢earthquake_search(start_time, end_time, min_magnitude, max_magnitude, latitude, ...)
Search earthquakes by time range, magnitude, depth, location radius, PAGER alert level, or felt reports. Supports USGS (global, richer metadata: PAGER, DYFI, ShakeMap) and EMSC, an independent global catalog operated by the European-Mediterranean Seismological Centre. For location-based queries, provide latitude, longitude, and radius_km together. A rectangular study area is expressed with min_latitude, max_latitude, min_longitude, and max_longitude — each independently optional, so a single edge is a valid constraint. Combining the box with the lat/lon/radius circle intersects the two, returning only events inside both. Both catalogs include non-tectonic records (quarry blasts, explosions) — every event carries its event_type, and event_type="earthquake" filters the rest out on USGS. USGS-specific filters (alert_level, event_type, min_felt, min_significance) are not sent when source=emsc — the response names them in ignoredFilters. Use earthquake_count first to gauge result size before requesting large result sets. A single call returns at most 20,000 events; larger result sets are retrieved by paging with offset, which is passed straight through to the upstream FDSN API. When a result is capped, nextOffset carries the offset for the following page and totalCount the full match count — or countUnavailable reports that the count lookup failed and the total is unknown.
입력 스키마
{
"type": "object",
"properties": {
"start_time": {
"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, so both sources honor the same window. 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.",
"type": "string",
"pattern": "^\\d{4}(-\\d{1,2}(-\\d{1,2})?)?([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"end_time": {
"description": "End of time range as ISO 8601, in the same forms start_time accepts. Defaults to current time if omitted.",
"type": "string",
"pattern": "^\\d{4}(-\\d{1,2}(-\\d{1,2})?)?([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"min_magnitude": {
"description": "Minimum magnitude (Richter or equivalent). M2.5+ is felt by some people; M5+ can cause damage; M7+ is major.",
"type": "number",
"minimum": -1,
"maximum": 10
},
"max_magnitude": {
"description": "Maximum magnitude.",
"type": "number",
"minimum": -1,
"maximum": 10
},
"latitude": {
"description": "Latitude for radius search. Requires longitude and radius_km.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"description": "Longitude for radius search. Requires latitude and radius_km.",
"type": "number",
"minimum": -180,
"maximum": 180
},
"radius_km": {
"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).",
"type": "number",
"minimum": 0,
"maximum": 20001.6
},
"min_latitude": {
"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.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"max_latitude": {
"description": "Northern edge of a bounding-box search, in degrees.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"min_longitude": {
"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.",
"type": "number",
"minimum": -360,
"maximum": 360
},
"max_longitude": {
"description": "Eastern edge of a bounding-box search, in degrees.",
"type": "number",
"minimum": -360,
"maximum": 360
},
"min_depth_km": {
"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).",
"type": "number",
"minimum": -100,
"maximum": 1000
},
"max_depth_km": {
"description": "Maximum depth in kilometers. Bounded to the documented -100 to 1000 km catalog envelope.",
"type": "number",
"minimum": -100,
"maximum": 1000
},
"alert_level": {
"description": "Minimum PAGER alert level. PAGER estimates economic loss and casualties. \"green\" = minimal impact; \"red\" = extreme. Only available from USGS.",
"type": "string",
"enum": [
"green",
"yellow",
"orange",
"red"
]
},
"min_felt": {
"description": "Minimum number of DYFI (Did You Feel It?) reports. Use to find events with confirmed public impact. Only available from USGS.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"min_significance": {
"description": "Minimum USGS significance score (0–2000+). Combines magnitude, felt reports, and PAGER estimates. Significant events typically score 600+. Only available from USGS.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"event_type": {
"description": "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.",
"type": "string",
"minLength": 1
},
"source": {
"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 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.",
"type": "string",
"enum": [
"usgs",
"emsc"
]
},
"limit": {
"description": "Maximum events to return per call. Default 100. Large limits (>1000) may result in slow responses. Max 20000. Combine with offset to retrieve match sets larger than one call can return.",
"type": "integer",
"minimum": 1,
"maximum": 20000
},
"offset": {
"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.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"order_by": {
"default": "time",
"description": "Sort order. \"time\" returns newest first; \"magnitude\" returns largest first.",
"type": "string",
"enum": [
"time",
"time-asc",
"magnitude",
"magnitude-asc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number of events returned."
},
"source": {
"type": "string",
"enum": [
"usgs",
"emsc"
],
"description": "Data source used."
},
"events": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "USGS or EMSC event identifier."
},
"title": {
"type": "string",
"description": "Human-readable event summary, e.g. \"M 6.0 - 13 km S of Honaunau-Napoopoo, Hawaii\"."
},
"magnitude": {
"description": "Preferred magnitude value. Null when no magnitude was computed for the event (the title renders it as \"M ?\").",
"type": [
"number",
"null"
]
},
"magnitude_type": {
"type": "string",
"description": "Magnitude type (ml, mww, mw, mb, etc.)."
},
"time": {
"type": "string",
"description": "ISO 8601 UTC origin time."
},
"updated": {
"type": "string",
"description": "ISO 8601 UTC time this record was last updated."
},
"place": {
"type": "string",
"description": "Nearest named location."
},
"latitude": {
"type": "number",
"description": "Epicenter latitude in decimal degrees."
},
"longitude": {
"type": "number",
"description": "Epicenter longitude in decimal degrees."
},
"depth_km": {
"description": "Hypocenter depth in kilometers. Shallow (<70 km), intermediate (70–300 km), or deep (>300 km). Null for historical events where depth was not measured.",
"type": [
"number",
"null"
]
},
"felt": {
"description": "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.",
"type": [
"number",
"null"
]
},
"cdi": {
"description": "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.",
"type": [
"number",
"null"
]
},
"mmi": {
"description": "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.",
"type": [
"number",
"null"
]
},
"alert": {
"anyOf": [
{
"type": "string",
"enum": [
"green",
"yellow",
"orange",
"red"
]
},
{
"type": "null"
}
],
"description": "PAGER estimated impact alert level. Null when USGS ran no PAGER assessment, and always null for EMSC, which publishes no such field."
},
"tsunami": {
"description": "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.",
"type": [
"number",
"null"
]
},
"significance": {
"description": "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.",
"type": [
"number",
"null"
]
},
"status": {
"anyOf": [
{
"type": "string",
"enum": [
"automatic",
"reviewed",
"deleted"
]
},
{
"type": "null"
}
],
"description": "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."
},
"source_catalog": {
"description": "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.",
"type": "string"
},
"auth": {
"description": "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.",
"type": "string"
},
"event_type": {
"description": "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.",
"type": "string"
},
"event_certainty": {
"description": "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.",
"type": "string",
"enum": [
"known",
"suspected",
"unknown",
"unreported"
]
},
"event_url": {
"description": "USGS event page URL. Present for USGS events only.",
"type": "string"
},
"detail_url": {
"description": "URL to fetch the full GeoJSON detail record. Present in USGS list responses.",
"type": "string"
}
},
"required": [
"id",
"title",
"magnitude",
"magnitude_type",
"time",
"updated",
"place",
"latitude",
"longitude",
"depth_km",
"felt",
"cdi",
"mmi",
"alert",
"tsunami",
"significance",
"status"
],
"additionalProperties": false,
"description": "A single earthquake event."
},
"description": "Matching earthquake events."
},
"totalCount": {
"description": "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.",
"type": "number"
},
"countUnavailable": {
"description": "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 with the same filters to recover the total. Absent whenever the count succeeded or was never needed.",
"type": "boolean"
},
"truncated": {
"description": "True when results were capped by the limit parameter. 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.",
"type": "boolean"
},
"nextOffset": {
"description": "Value to pass as the offset input to retrieve the next page, with every other input unchanged. Present only when more events remain; absent means this was the last page.",
"type": "number"
},
"notice": {
"description": "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.",
"type": "string"
},
"ignoredFilters": {
"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.",
"type": "array",
"items": {
"type": "string",
"description": "Name of an input filter that was not applied."
}
},
"queryEcho": {
"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.",
"type": "object",
"properties": {
"start_time": {
"description": "Effective query start time sent upstream — server-resolved to a 30-day window when omitted from input.",
"type": "string"
},
"end_time": {
"description": "Effective query end time. Absent when omitted from input — the upstream defaults to the current time.",
"type": "string"
},
"min_magnitude": {
"description": "Minimum magnitude filter sent upstream.",
"type": "number"
},
"max_magnitude": {
"description": "Maximum magnitude filter sent upstream.",
"type": "number"
},
"latitude": {
"description": "Radius-search latitude sent upstream.",
"type": "number"
},
"longitude": {
"description": "Radius-search longitude sent upstream.",
"type": "number"
},
"radius_km": {
"description": "Search radius in km sent upstream (converted to degrees for EMSC).",
"type": "number"
},
"min_latitude": {
"description": "Southern bounding-box edge sent upstream, in degrees.",
"type": "number"
},
"max_latitude": {
"description": "Northern bounding-box edge sent upstream, in degrees.",
"type": "number"
},
"min_longitude": {
"description": "Western bounding-box edge sent upstream, in degrees.",
"type": "number"
},
"max_longitude": {
"description": "Eastern bounding-box edge sent upstream, in degrees.",
"type": "number"
},
"min_depth_km": {
"description": "Minimum depth filter sent upstream.",
"type": "number"
},
"max_depth_km": {
"description": "Maximum depth filter sent upstream.",
"type": "number"
},
"alert_level": {
"description": "PAGER alert filter sent upstream. Absent for EMSC — not supported there.",
"type": "string"
},
"min_felt": {
"description": "DYFI felt-report filter sent upstream. Absent for EMSC — not supported there.",
"type": "number"
},
"min_significance": {
"description": "Significance filter sent upstream. Absent for EMSC — not supported there.",
"type": "number"
},
"event_type": {
"description": "Event-type filter sent upstream. Absent for EMSC — not supported there.",
"type": "string"
},
"source": {
"type": "string",
"enum": [
"usgs",
"emsc"
],
"description": "Data source queried."
},
"limit": {
"type": "number",
"description": "Effective result limit sent upstream."
},
"offset": {
"description": "1-based paging offset sent upstream. Absent when the first page was fetched.",
"type": "number"
},
"order_by": {
"type": "string",
"description": "Sort order sent upstream."
}
},
"required": [
"source",
"limit",
"order_by"
],
"additionalProperties": false
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `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.",
"examples": [
"invalid_radius",
"invalid_bounding_box",
"source_unavailable",
"source_timeout",
"upstream_rejected",
"upstream_rejected_no_reason"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"count",
"source",
"events"
]
},
{
"required": [
"error"
]
}
]
}🟢earthquake_get_event(event_id)
Fetch detail for a specific earthquake by USGS event ID. Returns the same normalized event a search result carries, plus a projection of the analysis products only the single-event response holds: PAGER impact alert and report link, ShakeMap peak intensity and ground motion, DYFI felt-report totals, the moment-tensor focal mechanism, landslide and liquefaction alerts, origin quality (azimuthal gap, station count, location uncertainty), and finite-fault rupture dimensions. Products are omitted when USGS produced none — a small automatic event typically has no detail at all, while a large reviewed one has most of it. Event IDs appear in the "id" field of earthquake_get_feed and earthquake_search results. This tool is USGS-only — EMSC events have no per-event detail endpoint.
입력 스키마
{
"type": "object",
"properties": {
"event_id": {
"type": "string",
"description": "USGS event ID, e.g. \"hv74966427\" or \"us6000sznj\". Found in the \"id\" field of earthquake_get_feed and earthquake_search results."
}
},
"required": [
"event_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"event": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "USGS or EMSC event identifier."
},
"title": {
"type": "string",
"description": "Human-readable event summary, e.g. \"M 6.0 - 13 km S of Honaunau-Napoopoo, Hawaii\"."
},
"magnitude": {
"description": "Preferred magnitude value. Null when no magnitude was computed for the event (the title renders it as \"M ?\").",
"type": [
"number",
"null"
]
},
"magnitude_type": {
"type": "string",
"description": "Magnitude type (ml, mww, mw, mb, etc.)."
},
"time": {
"type": "string",
"description": "ISO 8601 UTC origin time."
},
"updated": {
"type": "string",
"description": "ISO 8601 UTC time this record was last updated."
},
"place": {
"type": "string",
"description": "Nearest named location."
},
"latitude": {
"type": "number",
"description": "Epicenter latitude in decimal degrees."
},
"longitude": {
"type": "number",
"description": "Epicenter longitude in decimal degrees."
},
"depth_km": {
"description": "Hypocenter depth in kilometers. Shallow (<70 km), intermediate (70–300 km), or deep (>300 km). Null for historical events where depth was not measured.",
"type": [
"number",
"null"
]
},
"felt": {
"description": "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.",
"type": [
"number",
"null"
]
},
"cdi": {
"description": "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.",
"type": [
"number",
"null"
]
},
"mmi": {
"description": "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.",
"type": [
"number",
"null"
]
},
"alert": {
"anyOf": [
{
"type": "string",
"enum": [
"green",
"yellow",
"orange",
"red"
]
},
{
"type": "null"
}
],
"description": "PAGER estimated impact alert level. Null when USGS ran no PAGER assessment, and always null for EMSC, which publishes no such field."
},
"tsunami": {
"description": "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.",
"type": [
"number",
"null"
]
},
"significance": {
"description": "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.",
"type": [
"number",
"null"
]
},
"status": {
"anyOf": [
{
"type": "string",
"enum": [
"automatic",
"reviewed",
"deleted"
]
},
{
"type": "null"
}
],
"description": "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."
},
"source_catalog": {
"description": "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.",
"type": "string"
},
"auth": {
"description": "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.",
"type": "string"
},
"event_type": {
"description": "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.",
"type": "string"
},
"event_certainty": {
"description": "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.",
"type": "string",
"enum": [
"known",
"suspected",
"unknown",
"unreported"
]
},
"event_url": {
"description": "USGS event page URL. Present for USGS events only.",
"type": "string"
},
"detail_url": {
"description": "URL to fetch the full GeoJSON detail record. Present in USGS list responses.",
"type": "string"
}
},
"required": [
"id",
"title",
"magnitude",
"magnitude_type",
"time",
"updated",
"place",
"latitude",
"longitude",
"depth_km",
"felt",
"cdi",
"mmi",
"alert",
"tsunami",
"significance",
"status"
],
"additionalProperties": false,
"description": "Full earthquake event detail."
},
"detail": {
"description": "Analysis products USGS attached to this event. Absent when the event carries none — that means no product was produced, not that impact was zero.",
"type": "object",
"properties": {
"losspager": {
"description": "PAGER impact assessment. Estimated fatality and economic-loss brackets live in a separate content file and are not part of this response — fetch report_url for them.",
"type": "object",
"properties": {
"alert_level": {
"description": "PAGER impact alert level — \"green\", \"yellow\", \"orange\", or \"red\".",
"type": "string"
},
"report_url": {
"description": "URL of the PAGER one-page PDF summary of estimated impact.",
"type": "string"
}
},
"additionalProperties": false
},
"shakemap": {
"description": "ShakeMap modeled ground-motion summary. Absent when no ShakeMap was produced.",
"type": "object",
"properties": {
"max_mmi": {
"description": "Maximum modeled shaking intensity across the ShakeMap grid (Modified Mercalli).",
"type": "number"
},
"max_pga": {
"description": "Maximum modeled peak ground acceleration, in g — a fraction of standard gravity, as USGS ShakeMap publishes it (0.4 is four tenths of g).",
"type": "number"
},
"max_pgv": {
"description": "Maximum modeled peak ground velocity, in cm/s.",
"type": "number"
},
"intensity_map_url": {
"description": "URL of the rendered ShakeMap intensity map image.",
"type": "string"
}
},
"additionalProperties": false
},
"dyfi": {
"description": "Felt-report summary. Absent when no DYFI product exists for the event.",
"type": "object",
"properties": {
"responses": {
"description": "Number of \"Did You Feel It?\" reports the public submitted.",
"type": "number"
},
"max_cdi": {
"description": "Maximum Community Decimal Intensity derived from those reports (0–12 scale).",
"type": "number"
},
"map_url": {
"description": "URL of the rendered DYFI intensity map image.",
"type": "string"
}
},
"additionalProperties": false
},
"moment_tensor": {
"description": "Focal-mechanism solution. Absent for events with no moment-tensor inversion.",
"type": "object",
"properties": {
"scalar_moment_nm": {
"description": "Scalar seismic moment in newton-metres — the physical size of the rupture.",
"type": "number"
},
"derived_depth_km": {
"description": "Centroid depth in kilometers derived from the moment-tensor inversion.",
"type": "number"
},
"nodal_plane_1": {
"description": "First nodal plane of the focal mechanism. Either plane can be the true fault.",
"type": "object",
"properties": {
"strike": {
"type": "number",
"description": "Fault plane strike in degrees clockwise from north (0–360)."
},
"dip": {
"type": "number",
"description": "Fault plane dip in degrees from horizontal (0–90)."
},
"rake": {
"type": "number",
"description": "Slip direction in degrees (-180 to 180). Near 90 is reverse faulting, near -90 normal, near 0 or 180 strike-slip."
}
},
"required": [
"strike",
"dip",
"rake"
],
"additionalProperties": false
},
"nodal_plane_2": {
"description": "Second nodal plane — the auxiliary solution, indistinguishable from the first on seismic data alone.",
"type": "object",
"properties": {
"strike": {
"type": "number",
"description": "Fault plane strike in degrees clockwise from north (0–360)."
},
"dip": {
"type": "number",
"description": "Fault plane dip in degrees from horizontal (0–90)."
},
"rake": {
"type": "number",
"description": "Slip direction in degrees (-180 to 180). Near 90 is reverse faulting, near -90 normal, near 0 or 180 strike-slip."
}
},
"required": [
"strike",
"dip",
"rake"
],
"additionalProperties": false
}
},
"additionalProperties": false
},
"ground_failure": {
"description": "Secondary-hazard alert levels. Absent when no ground-failure model was run.",
"type": "object",
"properties": {
"landslide_alert": {
"description": "Landslide hazard alert level — \"green\", \"yellow\", \"orange\", or \"red\".",
"type": "string"
},
"liquefaction_alert": {
"description": "Liquefaction hazard alert level — \"green\", \"yellow\", \"orange\", or \"red\".",
"type": "string"
}
},
"additionalProperties": false
},
"origin": {
"description": "Location-quality metrics for the preferred origin.",
"type": "object",
"properties": {
"azimuthal_gap_deg": {
"description": "Largest azimuthal gap between stations, in degrees. Gaps above ~180 make the location poorly constrained.",
"type": "number"
},
"num_stations_used": {
"description": "Number of seismic stations used in the location solution.",
"type": "number"
},
"horizontal_error_km": {
"description": "Horizontal location uncertainty in kilometers.",
"type": "number"
},
"depth_error_km": {
"description": "Depth uncertainty in kilometers.",
"type": "number"
},
"review_status": {
"description": "Review state of the origin solution as the contributing network published it.",
"type": "string"
}
},
"additionalProperties": false
},
"finite_fault": {
"description": "Finite-fault rupture model. Produced only for large events.",
"type": "object",
"properties": {
"rupture_length_km": {
"description": "Modeled rupture length along strike, in kilometers.",
"type": "number"
},
"rupture_width_km": {
"description": "Modeled rupture width down dip, in kilometers.",
"type": "number"
},
"model_url": {
"description": "URL of the finite-fault rupture model file.",
"type": "string"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `not_found`: No event matches the provided event_id. `source_unavailable`: The USGS event API returns a 5xx, serves HTML, or is unreachable. `source_timeout`: The USGS event API did not answer before the request deadline. Other values are possible when a failure originates below the handler.",
"examples": [
"not_found",
"source_unavailable",
"source_timeout"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"event"
]
},
{
"required": [
"error"
]
}
]
}🟢earthquake_count(start_time, end_time, min_magnitude, max_magnitude, latitude, ...)
Count earthquakes matching filters without fetching full records. Use for statistical queries ("how many M5+ earthquakes in 2025?") or to gauge result size before calling earthquake_search. Omitting start_time counts only the last 30 days, so pass an explicit range for any period-specific question; queryEcho reports the window and filters the count actually covers. When exceeds_limit is true, the count exceeds 20,000 and a full search would be truncated — narrow filters before fetching. USGS returns the max_allowed cap (20,000); EMSC count endpoint does not return this field (max_allowed will be null). Counts can be scoped to a rectangular study area with min_latitude, max_latitude, min_longitude, and max_longitude — each independently optional. Combining the box with the lat/lon/radius circle intersects the two, counting only events inside both. Both catalogs include non-tectonic records, so a radius over a mining region counts quarry blasts alongside earthquakes — pass event_type="earthquake" on USGS to exclude them. USGS-specific filters (alert_level, event_type, min_felt, min_significance) are not sent when source=emsc — the response names them in ignoredFilters.
입력 스키마
{
"type": "object",
"properties": {
"start_time": {
"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, so both sources honor the same window. 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.",
"type": "string",
"pattern": "^\\d{4}(-\\d{1,2}(-\\d{1,2})?)?([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"end_time": {
"description": "End of time range as ISO 8601, in the same forms start_time accepts. Defaults to current time if omitted.",
"type": "string",
"pattern": "^\\d{4}(-\\d{1,2}(-\\d{1,2})?)?([T ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"min_magnitude": {
"description": "Minimum magnitude (Richter or equivalent). M2.5+ is felt by some people; M5+ can cause damage; M7+ is major.",
"type": "number",
"minimum": -1,
"maximum": 10
},
"max_magnitude": {
"description": "Maximum magnitude.",
"type": "number",
"minimum": -1,
"maximum": 10
},
"latitude": {
"description": "Latitude for radius search. Requires longitude and radius_km.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"description": "Longitude for radius search. Requires latitude and radius_km.",
"type": "number",
"minimum": -180,
"maximum": 180
},
"radius_km": {
"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).",
"type": "number",
"minimum": 0,
"maximum": 20001.6
},
"min_latitude": {
"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.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"max_latitude": {
"description": "Northern edge of a bounding-box search, in degrees.",
"type": "number",
"minimum": -90,
"maximum": 90
},
"min_longitude": {
"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.",
"type": "number",
"minimum": -360,
"maximum": 360
},
"max_longitude": {
"description": "Eastern edge of a bounding-box search, in degrees.",
"type": "number",
"minimum": -360,
"maximum": 360
},
"min_depth_km": {
"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).",
"type": "number",
"minimum": -100,
"maximum": 1000
},
"max_depth_km": {
"description": "Maximum depth in kilometers. Bounded to the documented -100 to 1000 km catalog envelope.",
"type": "number",
"minimum": -100,
"maximum": 1000
},
"alert_level": {
"description": "Minimum PAGER alert level. PAGER estimates economic loss and casualties. \"green\" = minimal impact; \"red\" = extreme. Only available from USGS.",
"type": "string",
"enum": [
"green",
"yellow",
"orange",
"red"
]
},
"min_felt": {
"description": "Minimum number of DYFI (Did You Feel It?) reports. Use to count events with confirmed public impact. Only available from USGS.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"min_significance": {
"description": "Minimum USGS significance score (0–2000+). Combines magnitude, felt reports, and PAGER estimates. Significant events typically score 600+. Only available from USGS.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"event_type": {
"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. Matched verbatim against the USGS catalog, which accepts any string and returns a count of zero for an unrecognized one. Only available from USGS.",
"type": "string",
"minLength": 1
},
"source": {
"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.",
"type": "string",
"enum": [
"usgs",
"emsc"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"count": {
"type": "number",
"description": "Number of events matching the query."
},
"max_allowed": {
"description": "Maximum events the API would return for a full fetch. 20000 for USGS. Null for EMSC — the EMSC count endpoint does not return this field.",
"type": [
"number",
"null"
]
},
"source": {
"type": "string",
"enum": [
"usgs",
"emsc"
],
"description": "Data source used."
},
"exceeds_limit": {
"type": "boolean",
"description": "True when count exceeds 20000 — a full earthquake_search would be truncated. For EMSC, evaluated against the known 20000 limit since max_allowed is not returned. Narrow filters to retrieve all matching events."
},
"queryEcho": {
"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.",
"type": "object",
"properties": {
"start_time": {
"description": "Effective query start time sent upstream — server-resolved to a 30-day window when omitted from input.",
"type": "string"
},
"end_time": {
"description": "Effective query end time. Absent when omitted from input — the upstream defaults to the current time.",
"type": "string"
},
"min_magnitude": {
"description": "Minimum magnitude filter sent upstream.",
"type": "number"
},
"max_magnitude": {
"description": "Maximum magnitude filter sent upstream.",
"type": "number"
},
"latitude": {
"description": "Radius-search latitude sent upstream.",
"type": "number"
},
"longitude": {
"description": "Radius-search longitude sent upstream.",
"type": "number"
},
"radius_km": {
"description": "Search radius in km sent upstream (converted to degrees for EMSC).",
"type": "number"
},
"min_latitude": {
"description": "Southern bounding-box edge sent upstream, in degrees.",
"type": "number"
},
"max_latitude": {
"description": "Northern bounding-box edge sent upstream, in degrees.",
"type": "number"
},
"min_longitude": {
"description": "Western bounding-box edge sent upstream, in degrees.",
"type": "number"
},
"max_longitude": {
"description": "Eastern bounding-box edge sent upstream, in degrees.",
"type": "number"
},
"min_depth_km": {
"description": "Minimum depth filter sent upstream.",
"type": "number"
},
"max_depth_km": {
"description": "Maximum depth filter sent upstream.",
"type": "number"
},
"alert_level": {
"description": "PAGER alert filter sent upstream. Absent for EMSC — not supported there.",
"type": "string"
},
"min_felt": {
"description": "DYFI felt-report filter sent upstream. Absent for EMSC — not supported there.",
"type": "number"
},
"min_significance": {
"description": "Significance filter sent upstream. Absent for EMSC — not supported there.",
"type": "number"
},
"event_type": {
"description": "Event-type filter sent upstream. Absent for EMSC — not supported there.",
"type": "string"
},
"source": {
"type": "string",
"enum": [
"usgs",
"emsc"
],
"description": "Data source queried."
}
},
"required": [
"source"
],
"additionalProperties": false
},
"ignoredFilters": {
"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.",
"type": "array",
"items": {
"type": "string",
"description": "Name of an input filter that was not applied."
}
},
"error": {
"description": "Present when the call failed. Absent on success.",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode. Declared by this tool: `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.",
"examples": [
"invalid_radius",
"invalid_bounding_box",
"source_unavailable",
"source_timeout",
"upstream_rejected",
"upstream_rejected_no_reason"
]
},
"recovery": {
"description": "Actionable next step for the caller.",
"type": "object",
"properties": {
"hint": {
"type": "string"
}
},
"required": [
"hint"
],
"additionalProperties": {}
},
"retryable": {
"description": "Whether retrying may succeed.",
"type": "boolean"
}
},
"additionalProperties": {}
}
},
"required": [
"code",
"message"
],
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"count",
"max_allowed",
"source",
"exceeds_limit"
]
},
{
"required": [
"error"
]
}
]
}커뮤니티
증거