Skip to main content
Glama

iran-quake-mcp: Iran earthquakes MCP server for AI agents

Let your AI agent check the latest earthquakes in Iran (زلزله ایران). An unofficial, read-only MCP server for earthquake data from USGS, EMSC and the Iranian Seismological Center: latest quakes, history search, the strongest events, one event in full and activity statistics, from Claude, Cursor or Copilot.

PyPI Python CI MCP Registry License: MIT mcpfarsi

Install in VS Code

For AI agents · Quick start · What it can do · Tools · FAQ · فارسی


For AI agents

  • What: unofficial MCP server (model context protocol) for earthquakes in Iran. Sources: USGS ComCat (source="usgs", default), EMSC via SeismicPortal (source="emsc") and the Iranian Seismological Center (source="irsc", only its latest ~20 events, with province names). Sources are not merged; their event ids differ.

  • Install: uvx iran-quake-mcp or claude mcp add iran-quake -- uvx iran-quake-mcp. Transport: stdio. Needs uv (Python 3.10+).

  • Auth: none, no API key or account. Optional IRAN_QUAKE_MCP_PROXY (HTTP proxy URL, or a comma-separated list); system proxy settings are ignored.

  • Access: read-only. It cannot write or subscribe, so no confirmation is needed before calling any tool.

  • Tools: 5, all prefixed eq_. Typical sequence: eq_latest or eq_significant -> eq_detail with an id from the list. eq_search for a date range, bounding box or place; eq_stats for counts.

  • Use when: the user asks about recent or past earthquakes in Iran, the strongest quakes, quakes near a province or city, or how active a period was.

  • Do not use when: the user needs an official warning or alert (this is not a warning service; see the Iranian Seismological Center, irsc.ut.ac.ir), or asks about earthquakes outside Iran and its neighbours.

  • Units: time_utc (UTC) and time_tehran (UTC+03:30, no daylight saving); search dates are UTC; depth_km in kilometres; mag_type (mb, ml, mw...) says which magnitude it is.

  • Replies: at most 50 events per call (limit 1-50), about 12 KB at the maximum, under 15 KB.

  • Machine-readable: server.json and the iran-mcp catalog.

Related MCP server: earthquake-mcp-server

Why

Earthquake feeds are built for seismologists: different servers, different id formats, UTC timestamps, no province field. Asking "was there a quake above 4.5 near Kerman this week, and what was the strongest one in Iran this month?" means querying a map or a query form and converting times by hand. With iran-quake-mcp an agent answers it in a few calls and returns a short summary with Tehran time and depth in kilometres.

You: Were there any strong earthquakes in Iran in the last 30 days?

Agent: calls eq_significant(days=30, min_magnitude=5.0) -> eq_detail(...) for the largest one

It lists the events from largest to smallest with magnitude, place, depth and Tehran time, then adds the review status and felt reports of the biggest one.

Every reply stays under 15 KB (about 12 KB at the maximum), so it does not flood the agent's context.

What it can do

  • Latest earthquakes in Iran by minimum magnitude and hours back, newest first

  • Search by UTC date range, magnitude range, bounding box and place text, ordered by time or magnitude

  • Strongest events of the last N days, largest first

  • One event in full by id: for USGS review status, felt/shaking, tsunami flag and quality; for EMSC the agency and update time; for IRSC the nearest towns

  • Statistics for a window: counts by magnitude band, top places and the strongest event

  • Three sources in one server: USGS, EMSC and the Iranian Seismological Center

  • Read-only by design: nothing is written or subscribed to

Example prompts:

  • "Show earthquakes of magnitude 4 or more in Iran in the last 48 hours."

  • "What were the 10 strongest earthquakes in Iran in the last year?"

  • "Any earthquakes near Kerman this month?"

  • "Give me the quake statistics for Iran over the last 30 days."

  • "Details of the latest quake on the Iranian Seismological Center feed, with province."

  • آخرین زلزله‌های ایران در ۲۴ ساعت گذشته کدام‌اند؟

  • قوی‌ترین زلزله‌های ماه اخیر در ایران را با عمق و ساعت تهران بده.

  • آیا در هفته گذشته در هرمزگان زلزله بالای ۴ ریشتر آمده؟

Quick start

You need uv. No API key or account.

claude mcp add iran-quake -- uvx iran-quake-mcp

Settings → Developer → Edit Config, then add:

{
  "mcpServers": {
    "iran-quake": { "command": "uvx", "args": ["iran-quake-mcp"] }
  }
}

Add the Claude Desktop block above to ~/.cursor/mcp.json (or .cursor/mcp.json in a project).

Click Install in VS Code above, or add to .vscode/mcp.json:

{
  "servers": {
    "iran-quake": { "type": "stdio", "command": "uvx", "args": ["iran-quake-mcp"] }
  }
}
codex mcp add iran-quake -- uvx iran-quake-mcp

Or in ~/.codex/config.toml:

[mcp_servers.iran-quake]
command = "uvx"
args = ["iran-quake-mcp"]

Add to ~/.gemini/settings.json:

{
  "mcpServers": {
    "iran-quake": { "command": "uvx", "args": ["iran-quake-mcp"] }
  }
}

Add the Claude Desktop block to ~/.codeium/windsurf/mcp_config.json.

It is a standard stdio MCP server: run uvx iran-quake-mcp, or pip install iran-quake-mcp and run iran-quake-mcp.

Tools

The list tools (eq_latest, eq_search, eq_significant, eq_stats) take an optional source (usgs default, emsc, irsc) and iran_only (default true).

Tool

What it does

eq_latest

List the most recent earthquakes in Iran, newest first

eq_search

Search earthquakes in Iran by date range, magnitude, bounding box and place text

eq_significant

List the strongest recent earthquakes in Iran, largest magnitude first

eq_detail

Get one earthquake in full: location, depth_km, magnitude type and source quality fields

eq_stats

Count earthquakes in Iran over a window: by magnitude band, by place, plus the strongest event

All 5 tools are annotated readOnlyHint: true.

How it works

  AI agent  (Claude, Cursor, Copilot, ...)
      │
      │  MCP over stdio
      ▼
  iran-quake-mcp  (runs on your machine)
      │
      │  HTTPS (IRSC: plain HTTP)
      ├──────▶  earthquake.usgs.gov   USGS FDSN event API
      ├──────▶  www.seismicportal.eu  EMSC FDSN event API
      └──────▶  irsc.ut.ac.ir         events_list.xml

iran-quake-mcp runs locally and calls the public feeds of USGS, EMSC and IRSC. It has no hosted server in between and no API key. It sends at most 2 requests at a time with a little jitter, keeps answers for 60 seconds, retries a failed GET up to 4 times (USGS sometimes answers a sporadic 502), caps a response body at 5 MB and only talks to those three hosts. It only reads.

Good to know

  • Times: time_utc is UTC, time_tehran is UTC+03:30 (no daylight saving since 2022). Search dates are UTC. Depth is depth_km, positive.

  • Magnitudes: the type is in mag_type (mb, ml, mw...). Values from different types or sources are not exactly comparable.

  • Sources are separate: results are not merged or deduplicated and ids differ. eq_detail takes only an event id and detects the source from its format: EMSC 20261014_0000009, IRSC a plain number such as 213549 (only found in its latest ~20 events), otherwise USGS.

  • Inside Iran only by default: the event must fall inside a coarse Iran outline (about 0.3 degrees on land borders, plus Iranian waters of the Persian Gulf, Gulf of Oman and south Caspian) and its place text must name Iran, Persian Gulf, Gulf of Oman or Caspian Sea. Events just across the border are dropped. iran_only=false returns everything in the box 24-40 N, 43.5-64 E.

  • Places: USGS and EMSC have no province field (USGS gives the nearest town, EMSC a region). place accepts a province name (Tehran, Kerman, Hormozgan, Khuzestan, Fars, Sistan and Baluchestan, Kermanshah, Razavi Khorasan, East Azerbaijan, West Azerbaijan, Bushehr, Mazandaran), which selects an approximate box that overlaps its neighbours. Other text is an English, accent-insensitive substring match. IRSC places are Town, Province.

  • IRSC: read from http://irsc.ut.ac.ir/events_list.xml (plain HTTP; its https is closed). It lists only the latest ~20 events, with no magnitude type and no history, so more is true when your dates reach further back. The data is licensed for non-commercial, humanitarian use and must cite the Iranian Seismological Center (University of Tehran).

  • Reply size: limit is at most 50. eq_stats sets truncated when the raw fetch came back full at 3000 rows.

  • Delays and revisions: feeds list small events with a delay and revise values later. USGS cold queries can take about 10 seconds.

  • What it does not do: no alerts, no push notifications, no early warning, no shaking maps, no damage estimates.

  • Network: set IRAN_QUAKE_MCP_PROXY if the feeds are not reachable directly. System proxy variables are ignored on purpose.

FAQ

Yes. iran-quake-mcp is an unofficial MCP server with 5 read-only tools. It reads the public USGS, EMSC and IRSC feeds and returns compact JSON for AI agents.

USGS ComCat (default), EMSC through SeismicPortal, and the Iranian Seismological Center (IRSC, University of Tehran). Pick one with the source argument. They are not merged.

Add the server with claude mcp add iran-quake -- uvx iran-quake-mcp, or use the matching config in Quick start, then ask in plain language, in Persian or English.

No. It reads public catalogs that list events after the fact, sometimes with a delay, and values get revised. For official information use the Iranian Seismological Center (irsc.ut.ac.ir).

Each event has time_utc and time_tehran (UTC+03:30, no daylight saving). Search dates you pass are UTC.

Partly. The USGS and EMSC feeds have no province field. Pass a province name from the list in Good to know in place for an approximate box that overlaps neighbouring provinces, other English text to match the nearest town or region, or a bbox. IRSC rows carry Town, Province text.

The IRSC feed lists only its latest ~20 events and has no history. Use usgs or emsc for longer ranges.

By default only events inside a coarse Iran outline are returned, so events across the border are dropped. Pass iran_only=false to include neighbours.

npx @modelcontextprotocol/inspector uvx iran-quake-mcp

Configuration

Variable

Default

Meaning

IRAN_QUAKE_MCP_PROXY

unset

Optional HTTP proxy URL for reaching USGS/EMSC; system proxy settings are ignored. A comma-separated list is used one at a time: the next proxy takes over when one is blocked or cannot connect

فارسی: سرور MCP زلزله ایران

iran-quake-mcp یک سرور MCP غیررسمی و فقط‌خواندنی برای داده‌های زلزله ایران است. این سرور به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه می‌دهد آخرین زلزله‌ها، زلزله‌های قوی، تاریخچه و آمار لرزه‌خیزی ایران را از منابع عمومی USGS، EMSC و مرکز لرزه‌نگاری کشوری (IRSC) بخواند.

چه کارهایی می‌کند

  • آخرین زلزله‌ها با حداقل بزرگا و تعداد ساعت گذشته، از جدیدترین.

  • جستجو بر اساس بازه تاریخ (UTC)، بزرگا، محدوده جغرافیایی و نام مکان یا استان.

  • قوی‌ترین زلزله‌ها در چند روز اخیر، از بزرگ‌ترین.

  • جزئیات یک زلزله با شناسه: عمق، نوع بزرگا، وضعیت بازبینی و منبع.

  • آمار یک بازه: تعداد به تفکیک بزرگا، پرتکرارترین مکان‌ها و قوی‌ترین رویداد.

نکته‌ها

  • فقط خواندنی است و هشدار یا پیش‌آگاهی زلزله نیست؛ برای اطلاعات رسمی به مرکز لرزه‌نگاری کشوری (irsc.ut.ac.ir) مراجعه کنید.

  • زمان هر رویداد هم به UTC و هم به وقت تهران (UTC+03:30) داده می‌شود؛ عمق به کیلومتر است.

  • منابع با هم ادغام نمی‌شوند و شناسه‌هایشان فرق دارد. منبع IRSC فقط حدود ۲۰ رویداد آخر را دارد.

  • فیلد استان در USGS و EMSC وجود ندارد؛ نام استان (به انگلیسی، مثل Kerman) محدوده تقریبی آن را انتخاب می‌کند.

  • کلید API لازم نیست و روی سیستم خود شما اجرا می‌شود. در صورت نیاز متغیر IRAN_QUAKE_MCP_PROXY را روی یک پراکسی HTTP بگذارید.

نصب (اول uv را نصب کنید). در Claude Code:

claude mcp add iran-quake -- uvx iran-quake-mcp

در Claude Desktop، Cursor و بقیه برنامه‌ها همان تنظیم بخش Quick start را بگذارید.

نمونه پرسش‌ها

  • «آخرین زلزله‌های ایران در ۲۴ ساعت گذشته کدام‌اند؟»

  • «قوی‌ترین زلزله‌های ماه اخیر در ایران را نشان بده.»

  • «آیا این هفته در کرمان زلزله بالای ۴ ریشتر آمده؟»

  • «آمار زلزله‌های ایران در ۳۰ روز گذشته را بده.»

Development

git clone https://github.com/sepehr071/iran-quake-mcp && cd iran-quake-mcp
uv sync
uv run ruff check . && uv run ruff format --check .
uv run python -m pytest -q          # offline unit tests
uv run python -m pytest -m live -q  # calls the real USGS/EMSC feeds
uv build

All tools live in src/iran_quake_mcp/quakes.py; each is a typed async function with a docstring that tells the agent when to use it. Issues and PRs are welcome.

Releases: bump the version in pyproject.toml and server.json, then push a v* tag. GitHub Actions publishes to PyPI.

Disclaimer

Unofficial and not affiliated with or endorsed by USGS, EMSC or the Iranian Seismological Center. It is read-only. Earthquake data is informational, can be delayed and is revised by the sources; this is not a warning service. Check each source's terms of use: IRSC data is licensed for non-commercial, humanitarian use and must cite the Iranian Seismological Center (University of Tehran).

Author

Built and maintained by Sepehr Radmard (سپهر رادمرد). Connect on LinkedIn or follow @sepehr071 on GitHub for more MCP servers for Iranian websites, all listed in iran-mcp. If this saves you time, a star on the repo helps other people find it.

License

MIT

Available Tools

5 tools
eq_detailEarthquake detailA
Read-onlyIdempotent

Get one earthquake in full: location, depth_km, magnitude type and source quality fields.

The source is detected from the id format (IRSC: plain number, found only in its latest ~20 events, adds the nearest towns). USGS adds review status, shaking (felt reports, cdi, mmi), tsunami flag, sig (significance 0-1000), nst (stations), gap (degrees), rms; EMSC adds the contributing agency (catalog) and last update. Times in UTC and Tehran (UTC+03:30).

NameRequiredDescriptionDefault
event_idYesEvent id from another eq_ tool: USGS 'us6000u2w9', EMSC '20261016_0000282' or IRSC '213549'.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), yet the description adds real behavior: the source is inferred from the id format, return fields vary by source, IRSC ids resolve only against the latest ~20 events, and times are returned in both UTC and Tehran. It stops short of describing not-found behavior or error cases.

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 and scope are front-loaded in the first clause, before the source-specific detail. The parenthetical field enumerations are information-dense and mostly earn their place, though the per-source listing is long enough to make it slightly heavy for a one-parameter tool.

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?

With no output schema, the description effectively enumerates the returned fields per source and states timezone conventions, and annotations cover the read-only/idempotent profile. For a single-parameter lookup, an agent has everything needed to call it and interpret the result.

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

Parameters4/5

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

Schema coverage is 100% and the schema already documents the id pattern and example formats, so the baseline is 3. The description goes further by explaining that the id format itself determines which source (and therefore which fields) you get, which is functional parameter semantics not present in the schema.

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

Purpose4/5

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

A specific verb ('Get') plus resource ('one earthquake in full') with an explicit scope that sets it apart from the list-oriented siblings eq_search/eq_latest/eq_significant/eq_stats. It never names a sibling directly, so differentiation is by scope inference rather than explicit contrast.

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

Usage Guidelines3/5

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

Usage is implied: you need a single event's full record and an event_id drawn from another eq_ tool (stated in the schema/description). There is no explicit when-to-use/when-not or a named alternative for the single-event case, leaving the routing to inference.

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

eq_latestLatest earthquakesA
Read-onlyIdempotent

List the most recent earthquakes in Iran, newest first.

Use for "was there an earthquake today?". Times: time_utc and time_tehran (UTC+03:30); depth_km in km; magnitude type in mag_type (mb, ml, mw...). Call eq_detail with an id for more, eq_stats for counts.

NameRequiredDescriptionDefault
hoursNoLook back this many hours, e.g. 24.
limitNoMax events to return, 1-50 (a reply stays under 15 KB), e.g. 20.
sourceNoData source: 'usgs' (USGS ComCat, default), 'emsc' (EMSC via SeismicPortal) or 'irsc' (Iranian Seismological Center, only its latest ~20 events, with province names). Magnitudes and locations differ slightly between them; ids are not interchangeable.usgs
iran_onlyNoTrue (default): keep only events inside a coarse Iran outline (lat/lon, includes Iranian waters) whose place text names Iran (or Persian Gulf, Gulf of Oman, Caspian Sea); neighbours across the border are dropped. False: everything in the bounding box.
min_magnitudeNoMinimum magnitude, e.g. 3.0.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds behavior the annotations cannot: results are ordered newest-first, and returned timestamps appear in both UTC and Tehran time (UTC+03:30). It does not discuss rate limits or freshness/latency of the upstream feeds.

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

Conciseness5/5

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

Two tight sentences, front-loaded with purpose and scenario, followed by field conventions and sibling routing in one line. No filler and nothing repeated from the schema or annotations.

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?

With five optional params all fully documented in the schema and no output schema, the description usefully compensates by naming the returned fields (time_utc, time_tehran, depth_km, mag_type) and the result ordering. An agent has everything needed to call it and interpret the response.

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%, including enum, ranges and defaults (limit capped at 50 to stay under 15 KB, source ids not interchangeable), so the schema carries the input burden. The description's extra detail (time_utc/time_tehran, depth_km, mag_type) describes output fields rather than adding meaning to the five input parameters, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource with scope and ordering: "List the most recent earthquakes in Iran, newest first." That clearly separates it from eq_detail (single event) and eq_stats (counts), which the description also names. It never distinguishes itself from eq_search or eq_significant, so it falls short of full sibling differentiation.

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?

Gives a concrete triggering scenario ("was there an earthquake today?") and routes to alternatives by function: eq_detail for more on an id, eq_stats for counts. There is no explicit when-not guidance (e.g., non-Iran queries or historical ranges belong elsewhere), so it is clear context without exclusions.

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

eq_significantSignificant earthquakesA
Read-onlyIdempotent

List the strongest recent earthquakes in Iran, largest magnitude first.

Use for "biggest earthquakes this month/year". Times in UTC and Tehran (UTC+03:30), depth_km in km.

NameRequiredDescriptionDefault
daysNoLook back this many days, e.g. 30.
limitNoMax events to return, 1-50, e.g. 10.
sourceNoData source: 'usgs' (USGS ComCat, default), 'emsc' (EMSC via SeismicPortal) or 'irsc' (Iranian Seismological Center, only its latest ~20 events, with province names). Magnitudes and locations differ slightly between them; ids are not interchangeable.usgs
iran_onlyNoTrue (default): keep only events inside a coarse Iran outline (lat/lon, includes Iranian waters) whose place text names Iran (or Persian Gulf, Gulf of Oman, Caspian Sea); neighbours across the border are dropped. False: everything in the bounding box.
min_magnitudeNoMinimum magnitude, e.g. 5.0.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so safety is covered. The description adds useful non-schema context about the returned data: times given in both UTC and Tehran (UTC+03:30) and depth_km units, which matters since there is no output schema.

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

Conciseness5/5

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

Two short sentences, zero waste, with the core purpose and ordering front-loaded before the usage cue and unit notes.

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

Completeness4/5

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

With no output schema, the description usefully discloses the time and depth unit conventions for returned fields, and the schema covers all inputs. It could go further on what fields each event carries, but for this tool it is largely complete.

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 description coverage is 100%, so all five parameters (days, limit, source, iran_only, min_magnitude) are already fully documented with defaults and enums. The description adds no parameter-level meaning beyond noting the output units, so baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (List), resource (earthquakes), geographic scope (Iran), and ordering (largest magnitude first). This distinguishes it in spirit from eq_search/eq_latest, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The phrase 'Use for "biggest earthquakes this month/year"' gives a concrete usage cue, but it offers no exclusions or routing against the four sibling tools (eq_search, eq_latest, eq_detail, eq_stats), leaving the agent to infer which one to pick.

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

eq_statsEarthquake statisticsA
Read-onlyIdempotent

Count earthquakes in Iran over a window: by magnitude band, by place, plus the strongest event.

Use for "how active has Iran been this month". Places are USGS nearest towns or EMSC regions (no province data). truncated = the source returned its full 3000 rows before the Iran filter, so the count covers only the newest.

NameRequiredDescriptionDefault
daysNoWindow length in days, ending now, e.g. 30.
sourceNoData source: 'usgs' (USGS ComCat, default), 'emsc' (EMSC via SeismicPortal) or 'irsc' (Iranian Seismological Center, only its latest ~20 events, with province names). Magnitudes and locations differ slightly between them; ids are not interchangeable.usgs
iran_onlyNoTrue (default): keep only events inside a coarse Iran outline (lat/lon, includes Iranian waters) whose place text names Iran (or Persian Gulf, Gulf of Oman, Caspian Sea); neighbours across the border are dropped. False: everything in the bounding box.
min_magnitudeNoMinimum magnitude counted, e.g. 3.0.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the description is free to spend its words on data behavior. It does: places are nearest-town/EMSC-region labels with no province data, and `truncated` reveals that counts can silently reflect only the newest events because the source capped at 3000 rows before Iran filtering. That truncation disclosure is exactly the kind of trait 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.

Conciseness5/5

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

The scope and output shape come first, then the usage trigger, then two dense caveats. Three sentences, no filler, and every clause carries information an agent cannot get from the schema or annotations.

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

Completeness4/5

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

With no output schema and no annotations on return shape, the description carries the burden and largely meets it: it names the three result components and the truncation flag, and notes source-specific limitations (IRSC only ~20 events). It stops short of describing the exact structure or empty-result behavior, but an agent has enough to call and interpret it.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema lacks: place values depend on which source is chosen, and `truncated` interacts with the iran_only/source filtering. It clarifies semantics rather than restating the schema.

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

Purpose4/5

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

States a specific verb (Count) and resource (earthquakes in Iran) plus the exact aggregations returned: magnitude band, place, and strongest event. The counting/aggregation framing is implicitly distinct from siblings like eq_search or eq_detail, but no sibling is named explicitly, so it falls just short of a 5.

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?

Gives a concrete usage trigger ("how active has Iran been this month"), which maps cleanly onto an activity-summary tool rather than an event-lookup tool. It gives no explicit exclusions or named alternatives (e.g. eq_search for individual events), so it is clear context without routing guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedeq_detail
    • First observedeq_latest
    • First observedeq_search
    • First observedeq_significant
    • First observedeq_stats

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation4/5

Each tool has a recognizable role: free-form filtered search, newest-first list, strongest-first list, single-event detail, and aggregate counts. However, eq_search, eq_latest, and eq_significant all return event lists and differ mainly in sort/filter semantics, so a sloppy agent could pick the wrong one; the descriptions do a good job clarifying when to use each.

Naming Consistency4/5

All names use the eq_ prefix with snake_case, which is highly predictable and readable. The one deviation is that search/detail are verb-like while latest/significant/stats are nouns/adjectives, so the verb_noun pattern isn't strictly uniform.

Tool Count5/5

Five tools is well-scoped for an Iran earthquake service: discovery (search/latest/significant), retrieval (detail), and aggregation (stats). No tool feels redundant or padded.

Completeness4/5

The surface covers the core lifecycle: find events by time/place/magnitude, get newest and largest, fetch full detail, and compute activity counts. Gaps are minor (no source/catalog listing or station/network metadata), but nothing blocks typical agent workflows.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides access to the USGS Earthquake Catalog for querying earthquake events via the FDSNWS API, enabling natural language questions about earthquake data.
    198 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying seismic station metadata, regional earthquake catalogs, and federated waveform data availability across FDSN web services, letting users locate seismometers, retrieve local seismicity, and identify data holdings through direct tool calls or natural language.
    495 npm
    MIT