Skip to main content
Glama

mcp-server-jma

An MCP server for Japan Meteorological Agency (気象庁, JMA) data — weather forecasts, warnings and advisories, earthquakes with per-area seismic intensity, tsunami bulletins and volcano alerts. Place names work in kanji, kana or romaji. No API key.

CI License: MIT Node.js MCP Compatible

English · 日本語


Why

JMA publishes its forecasts, warnings and earthquake data as JSON behind www.jma.go.jp/bosai, but the feeds are keyed by 6–7 digit area codes, use numeric weather and warning codes, and split one earthquake over several bulletins. This server does that legwork so an LLM can answer "Is there a warning in Sapporo?" or "How strong was this morning's quake in Chiba?" with one tool call:

  • Place names in any script — 渋谷区, しぶや, シブヤ, Shibuya and 1311300 all resolve through JMA's own area.json.

  • Codes decoded — weather codes get JMA's Japanese and English labels; warning codes become names, severity and alert level.

  • The 2026-05-28 warning system — JMA moved warnings to a new feed (warning/data/r8/) with the new 危険警報 (urgent warning, alert level 4) tier. This server reads the new feed and merges its per-type bulletin streams into "what is in effect now".

  • Polite client — responses are cached (forecasts 10 min, warnings 2 min, quake and tsunami lists 1 min, area tables 24 h), concurrent identical requests share one fetch, and every request sends User-Agent: mcp-server-jma/<version> (+https://github.com/b84330808/mcp-server-jma).

Related MCP server: Japanese Weather MCP

Tools

Tool

What it returns

jma_find_area

Ranked JMA areas for a place name (kanji, kana, romaji) or code: level (office / class10 / class15 / class20 / center), hierarchy path, and the office_code used for forecasts and warnings.

jma_get_forecast

Today + 2 days per sub-region (weather text, English label, wind, waves, 6-hour precipitation chance %, morning low / daytime high °C per station) and the 7-day outlook (weather, precipitation %, reliability A/B/C, low/high °C with likely range, climate normals), plus the forecaster's written overview.

jma_get_warnings

Warnings and advisories in effect now: name (ja/en), severity (advisory / warning / urgent_warning / emergency_warning), alert level 2–5 where JMA assigns one, extra hazards (竜巻, ひょう …), affected sub-regions and municipalities, and JMA's headline.

jma_list_earthquakes

Recent quakes, newest first: origin time, epicenter (ja/en, lat/lon, depth km), magnitude, maximum JMA seismic intensity (震度), per-prefecture maxima, and a detail_id. Filters: min_intensity, min_magnitude, since_hours, limit.

jma_get_earthquake

One quake in full: hypocenter, magnitude, JMA's tsunami assessment (ja/en), intensity by prefecture → region → municipality (strongest first), and optional per-station readings with coordinates.

jma_get_tsunami

Latest tsunami bulletin per recent event: in effect or not, highest level (major_warning / warning / advisory / forecast), coastal areas grouped by category with expected max height (m) and first-wave arrival, observations, and the source earthquake.

jma_get_volcano_warnings

Volcanoes in JMA's eruption-warning feed: Volcanic Alert Level 1–5, status wording, raised/lowered, affected municipalities, actions and coordinates. Optional name filter (桜島, Sakurajima).

Every response is JSON shaped like { "success": true, "data": …, "note": …, "attribution": "出典:気象庁ホームページ …" }. Errors come back as { "success": false, "error": { "code", "message" } } with codes such as AREA_NOT_FOUND, AREA_TOO_BROAD (e.g. 北海道 — the error lists the forecast offices to pick from), EVENT_NOT_FOUND, NOT_FOUND, UPSTREAM_TIMEOUT and UPSTREAM_ERROR.

Units. Temperatures °C · precipitation chance % · 7-day precipitation normals mm · depth km · tsunami height m · magnitude is JMA magnitude (Mj) · seismic intensity is the JMA 震度 scale (1–4, 5- 5弱, 5+ 5強, 6- 6弱, 6+ 6強, 7), not Mercalli · all times are JST (+09:00).

Live output

Real output of npm run smoke (the built server over stdio, against the live JMA endpoints) on 2026-10-27 16:12 JST. It prints a compact summary of each tool result; npm run smoke -- --full prints the full JSON.

### jma_find_area {"query":"さっぽろ","limit":3} (168 ms)
[
  {
    "code": "0110000",
    "level": "class20",
    "name": "札幌市",
    "name_en": "Sapporo City",
    "office_code": "016000",
    "path": "北海道地方 > 石狩・空知・後志地方 > 石狩地方 > 石狩中部 > 札幌市"
  }
]

### jma_get_forecast {"area":"Shibuya"} (49 ms)
{
  "office": {
    "code": "130000",
    "name": "東京都"
  },
  "resolved": {
    "query": "Shibuya",
    "code": "1311300",
    "level": "class20",
    "name": "渋谷区",
    "name_en": "Shibuya City",
    "path": "関東甲信地方 > 東京都 > 東京地方 > 23区西部 > 渋谷区"
  },
  "report_datetime": "2026-10-27T11:00:00+09:00",
  "short_term": [
    {
      "name": "東京地方",
      "days": [
        "2026-10-27 くもり 時々 晴れ 所により 昼前 雨 (Mostly Cloudy)",
        "2026-10-28 晴れ 夜 くもり (Clear)",
        "2026-10-29 くもり 時々 晴れ (Mostly Cloudy)"
      ],
      "precipitation_chance": [
        "10-27T12:00 10%",
        "10-27T18:00 10%",
        "10-28T00:00 0%",
        "10-28T06:00 0%",
        "10-28T12:00 0%",
        "10-28T18:00 0%"
      ]
    }
  ],
  "temperatures": [
    {
      "station_code": "44132",
      "station": "東京",
      "days": [
        {
          "date": "2026-10-27",
          "min_c": null,
          "max_c": 22
        },
        {
          "date": "2026-10-28",
          "min_c": 15,
          "max_c": 20
        }
      ]
    }
  ],
  "weekly": [
    {
      "name": "東京地方",
      "days": [
        "2026-10-28 Clear -%",
        "2026-10-29 Mostly Cloudy 30%",
        "2026-10-30 Cloudy, Occasional Scattered Showers 50% C",
        "2026-10-31 Cloudy 40% B",
        "2026-11-01 Partly Cloudy 20% A",
        "2026-11-02 Cloudy 40% B",
        "2026-11-03 Mostly Cloudy 30% A"
      ]
    }
  ]
}

### jma_get_warnings {"area":"東京都"} (30 ms)
{
  "office": {
    "code": "130000",
    "name": "東京都"
  },
  "latest_report_datetime": "2026-10-27T16:04:00+09:00",
  "in_effect": [
    {
      "code": "14",
      "name": "雷注意報",
      "name_en": "Thunderstorm Advisory",
      "severity": "advisory",
      "alert_level": null,
      "region_count": 1,
      "municipality_count": 1
    },
    {
      "code": "15",
      "name": "強風注意報",
      "name_en": "Gale Advisory",
      "severity": "advisory",
      "alert_level": null,
      "region_count": 3,
      "municipality_count": 14
    },
    {
      "code": "16",
      "name": "波浪注意報",
      "name_en": "High Wave Advisory",
      "severity": "advisory",
      "alert_level": null,
      "region_count": 3,
      "municipality_count": 14
    }
  ],
  "headlines": [
    {
      "report_datetime": "2026-10-27T16:04:00+09:00",
      "text": "東京地方、伊豆諸島北部、伊豆諸島南部では、強風に注意してください。"
    },
    {
      "report_datetime": "2026-10-27T16:04:00+09:00",
      "text": "東京地方、伊豆諸島北部、伊豆諸島南部では、高波に注意してください。"
    },
    {
      "report_datetime": "2026-10-27T16:04:00+09:00",
      "text": "小笠原諸島では、急な強い雨や落雷に注意してください。"
    }
  ],
  "note": "3 kind(s) of warning/advisory in effect for 東京都."
}

### jma_list_earthquakes {"limit":3} (21 ms)
[
  {
    "origin_time": "2026-10-27T15:32:00+09:00",
    "epicenter": {
      "name": "熊本県熊本地方",
      "name_en": "Kumamoto Region, Kumamoto Prefecture",
      "latitude": 32.5,
      "longitude": 130.6,
      "depth_km": 10
    },
    "magnitude": 3,
    "max_intensity": {
      "value": "2",
      "ja": "震度2",
      "en": "2"
    },
    "detail_id": "20261027153541_20261027153247_VXSE5k_1.json"
  },
  {
    "origin_time": "2026-10-27T09:25:00+09:00",
    "epicenter": {
      "name": "福島県沖",
      "name_en": "Off the Coast of Fukushima Prefecture",
      "latitude": 37.4,
      "longitude": 141.5,
      "depth_km": 60
    },
    "magnitude": 4.6,
    "max_intensity": {
      "value": "3",
      "ja": "震度3",
      "en": "3"
    },
    "detail_id": "20261027092912_20261027092519_VXSE5k_1.json"
  },
  {
    "origin_time": "2026-10-27T08:54:00+09:00",
    "epicenter": {
      "name": "熊本県天草・芦北地方",
      "name_en": "Amakusa and Ashikita Region, Kumamoto Prefecture",
      "latitude": 32.3,
      "longitude": 130.4,
      "depth_km": 10
    },
    "magnitude": 2.1,
    "max_intensity": {
      "value": "1",
      "ja": "震度1",
      "en": "1"
    },
    "detail_id": "20261027085717_20261027085407_VXSE5k_1.json"
  }
]

### jma_get_earthquake {"detail_id":"20261027153541_20261027153247_VXSE5k_1.json"} (12 ms)
{
  "title": "震源・震度情報",
  "origin_time": "2026-10-27T15:32:00+09:00",
  "epicenter": {
    "name": "熊本県熊本地方",
    "name_en": "Kumamoto Region, Kumamoto Prefecture",
    "latitude": 32.5,
    "longitude": 130.6,
    "depth_km": 10
  },
  "magnitude": 3,
  "max_intensity": {
    "value": "2",
    "ja": "震度2",
    "en": "2"
  },
  "tsunami_comment": {
    "ja": "この地震による津波の心配はありません。",
    "en": "This earthquake poses no tsunami risk."
  },
  "intensity_by_prefecture": [
    {
      "name": "熊本県",
      "max_intensity": "2",
      "cities": [
        "八代市 震度2",
        "熊本西区 震度1",
        "宇城市 震度1"
      ]
    }
  ]
}

### jma_get_tsunami {"limit":1} (26 ms)
{
  "any_warning_in_effect": false,
  "any_in_effect": false,
  "bulletins": [
    {
      "title": "津波予報",
      "report_datetime": "2026-10-10T03:37:00+09:00",
      "valid_until": "2026-10-11T20:00:00+09:00",
      "in_effect": false,
      "highest_level": "forecast",
      "earthquake": {
        "origin_time": "2026-10-10T02:56:00+09:00",
        "epicenter": "中米",
        "epicenter_en": "Central America",
        "latitude": 7.5,
        "longitude": -80.8,
        "depth_km": null,
        "magnitude": 8
      },
      "areas": 28
    }
  ],
  "note": "No tsunami warning or advisory is in effect now."
}

### jma_get_volcano_warnings {"volcano":"桜島"} (17 ms)
[
  {
    "name": "桜島",
    "name_en": "Sakurajima",
    "alert_level": 3,
    "status": "レベル3(入山規制)",
    "change": "引下げ",
    "warning_in_effect": true,
    "report_datetime": "2022-07-27T20:00:00+09:00"
  }
]

Installation

Claude Desktop

Add this to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "jma": {
      "command": "npx",
      "args": ["-y", "--package=https://github.com/b84330808/mcp-server-jma/releases/download/v0.1.0/mcp-server-jma-0.1.0.tgz", "mcp-server-jma"]
    }
  }
}

Restart Claude Desktop. The URL is the npm pack tarball attached to the v0.1.0 release; npx installs it and its runtime dependencies. Once the package is on npm, "args": ["-y", "mcp-server-jma"] works too. (npx github:b84330808/mcp-server-jma does not work: current npm fails on git installs that need a build step.)

Claude Code

claude mcp add jma -- npx -y --package=https://github.com/b84330808/mcp-server-jma/releases/download/v0.1.0/mcp-server-jma-0.1.0.tgz mcp-server-jma

From source

git clone https://github.com/b84330808/mcp-server-jma.git
cd mcp-server-jma
npm install
npm run build

Then point your client at it:

{
  "mcpServers": {
    "jma": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server-jma/dist/index.js"]
    }
  }
}

Example prompts

  • 「明日の札幌の天気は?」 / "What's the weather in Naha this week?"

  • "Are there any weather warnings for Shibuya right now?"

  • 「今朝の地震、千葉ではどのくらい揺れた?」

  • "Is there a tsunami warning in effect?"

  • "What is Sakurajima's volcanic alert level?"

Data source and terms

  • Source: 出典:気象庁ホームページ (www.jma.go.jp). Every tool response carries this attribution and a source_url pointing to the matching JMA page; keep it when you show or redistribute the data.

  • JMA content is provided under the 気象庁ホームページ利用規約, which follows the Government of Japan Standard Terms of Use (政府標準利用規約 2.0, compatible with CC BY 4.0). If you edit or process the data, say so and do not present it as JMA's own output.

  • Unofficial endpoints, no SLA. The bosai JSON files are what JMA's own web pages load; they are public but not a documented API. JMA can change or remove them without notice (it did so for warnings on 2026-05-28). If a tool starts returning NOT_FOUND or empty data, check the corresponding page on jma.go.jp and open an issue.

  • This server is not affiliated with or endorsed by JMA. For life-safety decisions, follow JMA, your municipality and broadcast alerts directly.

Endpoints used (all under https://www.jma.go.jp/bosai/):

Data

Path

Cache

Area table

common/const/area.json

24 h

Forecast / overview

forecast/data/forecast/{office}.json, forecast/data/overview_forecast/{office}.json

10 min

Forecast area maps

forecast/const/forecast_area.json, forecast/const/week_area.json

24 h

Warnings (since 2026-05-28)

warning/data/r8/{office}.json

2 min

Earthquakes

quake/data/list.json, quake/data/{detail_id}

1 min / 24 h

Tsunami

tsunami/data/list.json, tsunami/data/{file}

1 min / 24 h

Volcanoes

volcano/data/warning.json, volcano/const/volcano_list.json

5 min / 24 h

Development

npm install
npm run lint     # type check
npm test         # unit tests on recorded fixtures (tests/fixtures, recorded 2026-10-27)
npm run build
npm run smoke    # live run against JMA (network)

Tests never touch the network: tests/helpers.ts serves the recorded JMA responses in place of axios.get.

Project structure

src/
├── index.ts         # stdio entry point
├── server.ts        # tool definitions and dispatch
├── http.ts          # fetch + cache + User-Agent, error mapping
├── areas.ts         # area.json index and place-name resolver
├── forecast.ts      # 3-day + weekly forecast parser
├── warnings.ts      # r8 warning feed → what is in effect
├── quake.ts         # earthquake list and detail
├── tsunami.ts       # tsunami bulletins
├── volcano.ts       # volcano warnings
├── codes.ts         # warning codes, prefectures, intensity scale
├── weatherCodes.ts  # JMA weather code labels (ja/en)
└── text.ts          # text, number, time and romaji helpers

License

MIT — see LICENSE. The data itself belongs to JMA; see Data source and terms.

Available Tools

7 tools
jma_find_areaA

Looks up Japan Meteorological Agency (JMA, 気象庁) area codes for a place in Japan. Accepts kanji (東京都, 札幌市, 渋谷区), kana (さっぽろ, シブヤ), romaji/English (Sapporo, Shibuya, Tokyo) or a JMA code. Returns ranked matches with their level (office = prefecture-level forecast district 府県予報区; class10 = sub-region 一次細分区域; class15 = local area; class20 = municipality 市区町村; center = regional block such as 北海道地方), the hierarchy path, and office_code, the code jma_get_forecast and jma_get_warnings use. You can usually pass a place name straight to those tools; call this first when a name is ambiguous (府中 exists in Tokyo and Hiroshima) or to show the user which area was meant. No API key needed.

NameRequiredDescriptionDefault
limitNoMaximum number of matches to return (default 5).
queryYesPlace name in kanji, kana or romaji, e.g. '札幌', 'さっぽろ', 'Sapporo', '那覇市', 'Shibuya', or a JMA code like '130000'.

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it states that no API key is needed, that results are ranked matches, and it explains the area levels and hierarchy. It does not explicitly describe error behavior or rate limits, but for a read-only lookup this is strong disclosure.

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 description is front-loaded with the core action and accepted formats, then moves into return details and usage guidance. Every sentence contributes: examples, level definitions, ambiguity handling, and the no-API-key note.

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?

There is no output schema, but the description explains what is returned: ranked matches with level, hierarchy path, and office_code. Combined with the sibling routing guidance and input format details, an agent has enough to invoke the tool correctly.

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 the schema already documents the query and limit parameters, including examples. The description reinforces accepted input formats and JMA codes, but adds little beyond the schema's own parameter documentation; baseline 3 is appropriate.

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 description states a specific verb and resource: looks up JMA area codes for a place in Japan. It distinguishes this tool from siblings by explaining that jma_get_forecast and jma_get_warnings usually accept place names directly, while this tool is for resolving ambiguity.

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

Usage Guidelines5/5

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

It explicitly says you can usually pass a place name straight to the forecast and warning tools, and to call this first when a name is ambiguous, citing the 府中 example. This gives clear when-to-use and when-not-to-use guidance with named alternatives.

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

jma_get_earthquakeA

Full Japan Meteorological Agency (JMA) report for one earthquake: hypocenter (name, latitude/longitude, depth in km), JMA magnitude, JMA's tsunami assessment in Japanese and English (e.g. 'This earthquake poses no tsunami risk.'), and observed seismic intensity (震度) by prefecture → region → municipality, strongest first. Set include_stations to also get each seismometer's reading and coordinates (large quakes have hundreds). Identify the quake with detail_id from jma_list_earthquakes, or with its 14-digit event_id.

NameRequiredDescriptionDefault
event_idNoJMA event ID (origin time as YYYYMMDDhhmmss JST), e.g. '20261008041355'.
detail_idNoThe detail_id from jma_list_earthquakes, e.g. '20261008041755_20261008041355_VXSE5k_1.json'.
include_stationsNoInclude per-station intensities with coordinates (default false).

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the response shape, bilingual tsunami text, sort ordering (strongest first), and the cost of include_stations. It does not state what happens if both identifiers are given or if neither is supplied — notable since required parameters = 0.

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?

One dense paragraph, front-loaded with what is returned, then how to identify the quake. The field enumeration is long but each item maps to something an agent needs; nothing is redundant.

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?

No output schema exists, so the description must describe returns — and it does so in detail, including ordering and the optional station payload. The remaining gap is the precedence/fallback behavior when zero or two identifiers are provided.

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 both identifiers and the boolean are already documented in the schema. The description adds only marginal meaning: provenance of detail_id and the volume implication of include_stations. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

Specific verb+resource ('Full JMA report for one earthquake') followed by an enumeration of the returned fields: hypocenter, magnitude, tsunami assessment, intensity by prefecture/region/municipality. It is clearly distinguishable from jma_list_earthquakes, which is named as the source of the detail_id.

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 tells the agent how to obtain the identifier (detail_id from jma_list_earthquakes, or the 14-digit event_id) and when to set include_stations ('large quakes have hundreds' of stations). It stops short of an explicit 'use jma_list_earthquakes instead when you have no ID' exclusion, but the routing is clear enough in practice.

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

jma_get_forecastA

Weather forecast from the Japan Meteorological Agency (JMA, 気象庁) for a place in Japan. Returns: today and the next 2 days per sub-region (weather text, wind, wave height in metres, precipitation chance in % for each 6-hour block, morning low and daytime high in °C at observation stations); a 7-day outlook (weather, precipitation chance %, reliability A=high/B=fair/C=low, low/high °C with the likely range, 30-year climate normals); and the forecaster's written overview. JMA issues forecasts per prefecture-level office around 05:00, 11:00 and 17:00 JST. Naming a municipality narrows the result to its sub-region. All times are JST (+09:00). Weather, wind and wave text is Japanese as JMA issued it; weather_en is an English label for each weather code.

NameRequiredDescriptionDefault
areaYesPlace in Japan: prefecture, city, ward, town or region in kanji (東京都, 大阪市, 渋谷区), kana (さっぽろ, ナハ), or romaji/English (Tokyo, Sapporo, Naha, Shibuya); or a 6–7 digit JMA area code from jma_find_area.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it discloses issuance cadence (≈05:00, 11:00, 17:00 JST), timezone handling (+09:00), the Japanese-verbatim vs. weather_en label distinction, and what the response contains. It omits error behavior for invalid areas and any rate/availability limits, keeping it from a 5.

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?

Front-loaded with purpose, then a structured 'Returns:' enumeration and operational notes. The returns sentence is long, but every clause (wave height, reliability grades, normals, forecaster overview) is load-bearing because no output schema exists.

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?

No output schema exists, so the description must explain the return payload — and it does exhaustively: per-block precipitation, temperatures, 7-day outlook with reliability grades and climate normals, plus the written overview. Combined with timezone and issuance notes, an agent has everything needed to call and interpret results.

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 already 100% and documents accepted scripts and area codes, so the baseline is 3. The description adds genuine semantics beyond the schema by explaining that naming a municipality narrows results to its sub-region, clarifying how granularity is chosen through the single `area` parameter.

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?

States a specific verb and resource — a JMA weather forecast for a place in Japan — and its scope (per prefecture-level office, today + 2 days + 7-day outlook) is unmistakable. It is clearly distinct from siblings like jma_get_warnings or jma_list_earthquakes, so an agent can select it without opening another 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?

The description gives clear usage context: name a municipality to narrow to its sub-region, or supply a JMA area code 'from jma_find_area', which implicitly routes the agent to that sibling for lookup. It does not state explicit exclusions (e.g., forecasts vs. warnings), so it stops short of a 5.

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

jma_get_tsunamiA

Tsunami warnings, advisories and forecasts (津波警報・注意報・予報) from the Japan Meteorological Agency (JMA). Returns the latest bulletin for each recent tsunami-related event, newest first, with: whether it is still in effect; its highest level (major_warning 大津波警報 > warning 津波警報 > advisory 津波注意報 > forecast 津波予報, i.e. slight sea-level change with no damage expected); coastal forecast areas grouped by category with expected maximum height in metres and first-wave arrival time (JST); observed tsunami heights if any; and the source earthquake (which may be far from Japan). any_warning_in_effect=false means no tsunami warning or advisory is active now.

NameRequiredDescriptionDefault
limitNoHow many recent events to return (default 3).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden well. It discloses ordering (newest first), event grouping, active-status semantics, severity hierarchy, coastal forecast structure, observed heights, and source earthquake linkage. It stops short of describing error or no-event behavior, but covers the important output semantics thoroughly.

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?

The description is dense but front-loaded: the resource and source appear immediately, followed by return structure and severity interpretation. Some parenthetical detail makes it long, but most of it earns its place by explaining non-obvious return semantics.

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?

There is no output schema, so the description must explain return values, and it does: active status, highest level hierarchy, grouped coastal areas, expected heights, arrival times, observations, and source earthquake. For a one-parameter read tool, this is complete enough to call and interpret correctly.

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 the schema already documents the single limit parameter, including default and min/max. The description does not add parameter-specific meaning beyond saying results are recent events, so baseline 3 is appropriate.

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?

States a specific verb and resource: returns JMA tsunami warnings, advisories and forecasts. It clearly distinguishes this from sibling tools like jma_get_warnings and jma_get_forecast by naming the exact hazard type and bulletin contents.

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?

The description gives clear context for when this tool is appropriate: retrieving latest tsunami bulletins and interpreting whether any warning is active. It does not explicitly name alternatives or exclusions, but the hazard-specific scope makes usage unambiguous.

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

jma_get_volcano_warningsA

Volcanic eruption warnings (噴火警報) from the Japan Meteorological Agency (JMA). Lists volcanoes in JMA's current eruption-warning feed with their Volcanic Alert Level 1–5 (噴火警戒レベル), JMA's status wording (e.g. レベル2(火口周辺規制) = Level 2, do not approach the crater; 周辺海域警戒 = stay clear of surrounding waters), whether the level was raised (引上げ) or lowered (引下げ), the affected municipalities, required actions and coordinates. Optional volcano filter by Japanese or romaji name (桜島, Sakurajima, 阿蘇, Aso) or JMA volcano code. A volcano that is not in the feed has no eruption warning in effect.

NameRequiredDescriptionDefault
volcanoNoOptional volcano name (桜島, Sakurajima, 十勝岳, Tokachidake) or JMA volcano code (e.g. '506').

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it enumerates returned fields, decodes JMA status wording (火口周辺規制, 周辺海域警戒), and defines negative-result semantics. It does not explicitly state read-only/idempotent behavior or any auth/rate constraints, which is a minor gap for an unannotated tool.

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?

Front-loaded with the core purpose and scoped in a handful of dense sentences; the parenthetical JMA wording glossary is informative but bulky. Nearly every clause earns its place, with only mild redundancy against the schema's own examples.

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 one optional parameter and no output schema, the description must describe the return payload itself, and it does: fields, level meanings, raise/lower indicators, and empty-feed interpretation. Nothing an agent needs to call or interpret this tool is missing.

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% and the schema already documents the volcano parameter with examples, so the description's restatement of Japanese/romaji names and JMA codes adds little beyond it. The additional value is interpretive context about alert levels, not parameter semantics, so 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 ('Lists volcanoes in JMA's current eruption-warning feed') and names the concrete payload: alert level 1–5, status wording, raise/lower flags, municipalities, coordinates. This clearly separates it from generic warning feeds, but it never names the sibling jma_get_warnings or explains how the two differ, so sibling differentiation is left to inference.

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?

Explains the optional-filter workflow and gives the key interpretive rule that a volcano absent from the feed has no warning in effect, which tells the agent how to read an empty result. It stops short of saying when to prefer this over jma_get_warnings or jma_find_area for related queries.

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

jma_get_warningsA

Weather warnings and advisories (気象警報・注意報) in effect now, from the Japan Meteorological Agency (JMA), for a place in Japan. Uses the warning system JMA introduced on 2026-05-28: advisory 注意報 < warning 警報 < urgent warning 危険警報 < emergency warning 特別警報; heavy rain, landslide and storm surge also carry an alert level 2–5 (警戒レベル). Returns the distinct warnings in effect (severity, alert level, how many sub-regions and municipalities), each affected area with its warnings and extra hazards (e.g. 竜巻 tornado, ひょう hail, うねり swell), and JMA's Japanese headline text. An empty in_effect list means no warning or advisory is in effect for that area. Naming a municipality narrows the result to it.

NameRequiredDescriptionDefault
areaYesPlace in Japan: prefecture, city, ward, town or region in kanji (東京都, 大阪市, 渋谷区), kana (さっぽろ, ナハ), or romaji/English (Tokyo, Sapporo, Naha, Shibuya); or a 6–7 digit JMA area code from jma_find_area.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and delivers: it explains the severity ordering (注意報 < 警報 < 危険警報 < 特別警報), the 2–5 alert level for rain/landslide/surge, the shape of the return (distinct warnings, per-area breakdown, headline text), and critically that an empty in_effect list means nothing is in effect. It stops short of stating read-only semantics or any rate/coverage limits.

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?

Three dense sentences, front-loaded with what it returns and when, with the Japanese taxonomy embedded where it disambiguates output. Slightly long, but every clause (severity ladder, alert levels, empty-list semantics) earns its place.

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?

There is no output schema and no annotations, so the description must explain the return value — and it does, covering severity, alert level, sub-region counts, per-area hazards, Japanese headline text, and the empty-result meaning. An agent can call this and interpret the response without further context.

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 already 100%, so baseline is 3, and the description adds real meaning beyond the schema by explaining that naming a municipality narrows the result to that area — a granularity behavior the parameter docs do not state. It does not document the 6–7 digit area-code path itself, but the schema already does.

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+resource: current weather warnings/advisories from JMA for a place in Japan, with the exact Japanese terminology. It is clearly distinct from jma_get_forecast by being present-tense 'in effect now', though it never explicitly names jma_get_volcano_warnings as the sibling that handles a different warning class.

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?

'in effect now' implies the current-conditions use case and the schema points at jma_find_area for area codes, but there is no explicit when-to-use/when-not statement or named alternative (e.g. forecast vs warnings, weather vs volcano warnings). Usage is inferred rather than directed.

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

jma_list_earthquakesA

Recent earthquakes in and around Japan from the Japan Meteorological Agency (JMA) feed, newest first (the feed covers roughly the last few weeks). Each item: origin time (JST), epicenter name in Japanese and English with latitude/longitude and depth in km, JMA magnitude (Mj), maximum seismic intensity on the JMA 震度 scale (1, 2, 3, 4, 5- = 5弱, 5+ = 5強, 6- = 6弱, 6+ = 6強, 7; this is not the Mercalli scale), maximum intensity per prefecture, and a detail_id for jma_get_earthquake. Use the filters to find significant quakes, e.g. min_intensity '4' or min_magnitude 5.

NameRequiredDescriptionDefault
limitNoMaximum number of earthquakes to return (default 10).
since_hoursNoOnly quakes that occurred within this many hours before now.
min_intensityNoOnly quakes whose maximum JMA seismic intensity (震度) is at least this: '1'–'4', '5-' (5弱), '5+' (5強), '6-', '6+', '7'.
min_magnitudeNoOnly quakes with JMA magnitude (Mj) at least this, e.g. 5.0.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does a good job disclosing key behavior: the feed covers roughly the last few weeks, results are newest first, and each item includes origin time, epicenter, magnitude, intensity, per-prefecture intensity, and detail_id. It does not mention authentication, rate limits, or error behavior, which keeps it from a 5.

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?

The description is a single dense paragraph but is front-loaded with the core purpose and scope. The field list and intensity-scale parenthetical are useful, though the run-on structure could be split for easier scanning.

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?

Because there is no output schema and no annotations, the description appropriately explains what each returned item contains and how the feed behaves. Combined with the fully documented input schema, an agent has enough to call it correctly, with only minor omissions like explicit auth or rate-limit context.

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 description coverage is already 100%, so the schema documents all four parameters. The description still adds value by giving example filter values and clarifying the JMA seismic intensity scale, including that it is not the Mercalli scale, which helps interpret min_intensity beyond the enum labels.

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 description states a specific verb and resource: list recent earthquakes in and around Japan from the JMA feed, newest first. It also distinguishes this list operation from the sibling detail tool by explaining that each item includes a detail_id for jma_get_earthquake.

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 gives clear usage context by naming the feed scope and showing filter examples such as min_intensity '4' or min_magnitude 5 to find significant quakes. It also points to jma_get_earthquake for details via detail_id, though it does not explicitly state when not to use this tool.

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. 7 tool updatesv0.1.0
    • First observedjma_find_area
    • First observedjma_get_earthquake
    • First observedjma_get_forecast
    • First observedjma_get_tsunami
    • First observedjma_get_volcano_warnings
    • First observedjma_get_warnings
    • First observedjma_list_earthquakes

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct JMA data product: area lookup, forecast, weather warnings, earthquake list, earthquake detail, tsunami, and volcano warnings. The list/get pair for earthquakes follows a clear convention, and the three hazard tools (warnings, tsunami, volcano) are unambiguous because each names a different hazard type. No two tools appear interchangeable.

Naming Consistency5/5

Every tool uses the same jma_ prefix followed by a verb_noun pattern (find_area, get_forecast, list_earthquakes, get_earthquake, get_tsunami, get_volcano_warnings). The list vs get distinction is applied consistently and predictably.

Tool Count5/5

Seven tools is well within the sweet spot for a domain-specific data server. Each tool corresponds to a genuine, distinct JMA dataset with no filler or trivially wrapped endpoints.

Completeness4/5

The surface covers area resolution, forecasts, weather warnings, earthquakes (both list and detail), tsunami, and volcano warnings — strong lifecycle coverage for hazard monitoring. Minor gaps remain, such as current/observed conditions (AMeDAS) and typhoon tracks, but agents can work around these for most JMA use cases.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides weather information for 110 cities across Japan with natural language support for location names in kanji, hiragana, and katakana. Retrieves current weather conditions and forecasts using OpenMeteo API through MCP-compliant tools.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables retrieval of weather information for major cities across Japan using the Japan Meteorological Agency API. Supports weather overviews, precipitation probability, and wind speed data with both local and remote OAuth 2.0 authenticated deployment options.
    3 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server providing weather forecast, warnings, AMeDAS observations, and area search from Japan Meteorological Agency JSON APIs. It normalizes responses and supports Japanese place names.
    -