Japan Toilet & Accessibility
Server Details
Structured data on wheelchair-accessible & public toilets across Japan for AI agents and travel/accessibility apps. 526 Tokyo stations (each mapped to its nearest station exit) + 612 municipalities. Station names accept Japanese or romaji. Free tier with API key.
- Status
- Healthy
- Uptime
- 100.0% over 37 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 10 tools
Several tools come in close pairs: get_active_alerts vs get_station_alerts, get_municipality_context vs get_station_context, and get_public_toilet_by_city vs get_toilet_by_station all have overlapping purposes that require careful reading to distinguish. The descriptions do provide clear differentiating details, but an agent could easily select the wrong tool when the user's intent involves a station in a particular municipality or areawide alerts.
The naming is largely consistent with a get_ prefix and clear resource nouns (get_station_hazard, get_train_status, get_municipality_context). Minor deviations include station_search and ping not following the get_ pattern, plus some inconsistency between get_public_toilet_by_city and get_toilet_by_station.
Ten tools is a well-scoped count for a read-only Japan travel/accessibility information server. Each tool covers a distinct aspect of the domain—alerts, station/municipality context, toilets, hazard data, train status, and discovery—without obvious bloat.
The tool set covers the main workflows: discovering stations, getting toilet and hazard details, checking live alerts/train status, and retrieving municipality context. Minor gaps exist, such as a search_ramen tool being referenced in station_search but not actually provided, and public-toilet coverage being capped for large cities, but agents can generally work around these.
Available Tools
10 toolsget_active_alertsARead-onlyIdempotentInspect
Live river flood forecasts and landslide alerts for Japan (JMA official). NOT general weather warnings (storm/heavy rain/snow) and NOT earthquakes. Covers JMA 指定河川洪水予報 (river flood forecast, levels 2–5) and 土砂災害警戒情報 (landslide warning), each with level, affected area, official summary and issue time. Optional area filters by 2-digit prefecture code (e.g. 13 = Tokyo) or a JMA forecast-area code. Relay of official facts — not a warning issued by this service, not a life-safety system.
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | Optional prefecture code (01–47, e.g. 13 = Tokyo) or JMA forecast-area code. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of active alerts. |
| stale | No | True if the snapshot is stale. |
| alerts | No | Active JMA river-flood / landslide alerts with level, area, summary, issue time. |
| source | No | Source label. |
| coverage | No | What this feed covers — string or array of categories. |
| disclaimer | No | Relay disclaimer (not a warning issued by this service). |
| fetched_at | No | When the snapshot was fetched. |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable context about the data source (JMA official), the specific alert types covered, the fields returned (level, affected area, summary, issue time), and a disclaimer that it is not a life-safety system, going beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. It uses four sentences, each adding value: purpose/exclusions, coverage details, parameter explanation, and a disclaimer. It is dense but not overly lengthy, with no redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter, strong annotations, and an output schema, the description sufficiently covers the data source, alert types, returned fields, filtering option, and important caveats. This is complete for an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single `area` parameter, so the baseline is 3. The tool description repeats the filter functionality and examples (13 = Tokyo) but adds little beyond the schema's own description, which already explains the parameter is optional and examples are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Live river flood forecasts and landslide alerts for Japan (JMA official)' with explicit exclusions ('NOT general weather warnings... and NOT earthquakes'), distinguishing it from sibling tools like get_station_alerts. The verb 'get' plus specific resource and scope makes purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use: it covers JMA river flood and landslide alerts, and explicitly excludes other warning types and earthquakes. It also describes the optional area filter and the service's role as a relay, not a life-safety system. However, it does not name alternative tools or state 'use this when...' beyond exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_municipality_contextARead-onlyIdempotentInspect
Official Japanese government data for any municipality, one call — housing vacancy (2003–2023), nearest-station ridership trend, hazard categories, land prices, livability counts. No scores, no judgment — official values only. Accepts a 5-digit municipality code (13104) or an exact name (Shinjuku-ku / 新宿区).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Optional comma-separated subset: vacancy,ridership,population,hazard,land_price,livability. | |
| name_or_code | Yes | 5-digit 全国地方公共団体コード (e.g. 13104) or exact municipality name (Shinjuku-ku / 新宿区). |
Output Schema
| Name | Required | Description |
|---|---|---|
| hazard | No | Hazard categories. |
| vacancy | No | Housing-vacancy counts (2003–2023). |
| ridership | No | Nearest-station ridership trend. |
| land_price | No | Published land prices near the centroid. |
| livability | No | Livability counts. |
| population | No | Population / future estimate. |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
| municipality | No | Resolved municipality + code. |
| hazard_disclaimer | No | Hazard usage disclaimer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, and destructiveHint. The description adds behavioral context beyond these: it promises 'official values only' with no judgment, indicates a single aggregated call ('one call'), and specifies a data range for vacancy. It does not discuss rate limits or pagination, but the output schema covers return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each serving a distinct purpose: scope/data categories, behavioral promise, and input format. No filler or redundancy, with key facts front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and annotations cover safety, the description fully supports tool selection and invocation. It covers what the tool offers, how to specify the municipality, the optional fields concept, and the raw-data nature, making it complete for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are well-described. The description adds useful semantic context by explaining what the data fields mean (e.g., vacancy years 2003–2023, nearest-station ridership trend) and gives input examples, although the examples duplicate the schema description. This enriches parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides official Japanese government data for municipalities, listing specific data categories (vacancy, ridership, hazard, land price, livability). It distinguishes itself from sibling station/toilet tools by focusing on municipality-level official data, and the 'No scores, no judgment' note clarifies its non-analytical nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong context for when to use it: for official municipal data on multiple topics. It does not explicitly mention alternatives or when not to use it (e.g., for station-specific alerts), but the scope is clear enough given the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_public_toilet_by_cityARead-onlyIdempotentInspect
List public toilets in a Japanese municipality, with wheelchair / baby-seat / ostomate flags, address and coordinates. Covers 612 municipalities nationwide (large cities capped at the top 50 results). Municipality names accept Japanese (e.g. 那覇市, 渋谷区); prefixing the prefecture improves accuracy.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | Municipality name in Japanese (e.g. 那覇市, 渋谷区, 上天草市). Prefix the prefecture for accuracy. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | No | Resolved municipality. |
| note | No | Human-readable note. |
| count | No | Toilets returned. |
| error | No | Set when nothing was found. |
| toilets | No | Public toilets with wheelchair / baby-seat / ostomate flags, address and coordinates. |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. Beyond that, the description discloses important behavioral details: nationwide coverage of 612 municipalities, a cap of 50 results for large cities, and locale-specific input handling. These add meaningful context and are consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences that front-load the primary purpose and then efficiently cover important scope and usage details. Every sentence provides value, with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema and rich annotations, the description is complete. It covers the resource, return fields, geographical scope, result limits, and input-language nuance. No return-format explanation is needed because the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for 'city' already covers the meaning, examples, and the prefecture-prefix tip, so the tool description largely repeats this information. It adds no new parameter-level semantic detail beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: 'List public toilets in a Japanese municipality' and enumerates the data returned (wheelchair / baby-seat / ostomate flags, address, coordinates). It distinguishes from sibling get_toilet_by_station by focusing on municipality-level lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (municipality-level query) and practical guidance on input format ('Municipality names accept Japanese... prefixing the prefecture improves accuracy'). It does not explicitly name alternatives such as get_toilet_by_station, but the city versus station distinction is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_station_alertsARead-onlyIdempotentInspect
Live JMA river flood forecasts and landslide alerts affecting a station's prefecture — NOT general weather warnings. Ask by station name in Japanese (新宿) or romaji (Shinjuku). Prefecture-level match (station master is Greater Tokyo). Relay of official JMA facts.
| Name | Required | Description | Default |
|---|---|---|---|
| station_name | Yes | Station name in Japanese (新宿) or romaji (Shinjuku). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of alerts. |
| stale | No | True if stale. |
| alerts | No | JMA alerts affecting the prefecture. |
| station | No | Resolved station. |
| disclaimer | No | Relay disclaimer. |
| fetched_at | No | When the snapshot was fetched. |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable context beyond this: the prefecture-level matching (station master is Greater Tokyo), the fact that it's a 'Relay of official JMA facts' (not original analysis), and that it excludes general warnings. These traits meaningfully shape agent expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: what it is, how to query, and scope/caveat. The dash for exclusion is efficient. No padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, the description covers content type, query language, matching scope, and source. It gives the agent enough to decide when to use it and what to expect, without needing to inspect the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description reinforces the Japanese/romaji format. It also adds the nuance that the station_name is used for a prefecture-level match, which is extra meaning beyond the schema's simple 'station name' definition. This justifies a score above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'Live JMA river flood forecasts and landslide alerts affecting a station's prefecture' and explicitly excludes 'general weather warnings', distinguishing it from likely siblings like get_active_alerts. The verb 'Live' and resource 'JMA alerts' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: ask by station name in Japanese or romaji, and notes the prefecture-level match. It explicitly says 'NOT general weather warnings', which provides a when-not scenario. However, it does not name alternative tools directly, so it falls short of full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_station_contextARead-onlyIdempotentInspect
Same official municipality data as get_municipality_context, resolved from a station: pass a station name (Shinjuku / 新宿 / Musashi-Kosugi) or a Japan Station Master station_id (e.g. st_00001), and it returns the context for that station's municipality. Official values only — no scores.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Optional comma-separated subset: vacancy,ridership,population,hazard,land_price,livability. | |
| station_id | No | Japan Station Master station_id (e.g. st_00001). Alternative to station_name. | |
| station_name | No | Station name in English/romaji (Shinjuku) or Japanese (新宿). Provide this or station_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hazard | No | Hazard categories. |
| station | No | Resolved station. |
| vacancy | No | Housing-vacancy counts. |
| ridership | No | Ridership trend. |
| land_price | No | Land prices near the centroid. |
| livability | No | Livability counts. |
| population | No | Population / future estimate. |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
| municipality | No | Municipality + code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context by specifying the data source (same official municipality data) and what is excluded ('no scores'), which goes beyond the structured annotations. It does not mention rate limits or error handling, but for a read-only lookup this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the key reference to get_municipality_context. Every sentence adds meaningful information (input options, output type, data policy) without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and annotations cover safety, the description explains the core use case well. It clearly indicates how to specify input (station name or ID) and what the output represents. It omits hypothetical edge cases, but overall it is complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions, providing a baseline of 3. The tool description adds valuable examples (Shinjuku / 新宿 / Musashi-Kosugi and st_00001) and clarifies the mutual exclusivity implicit between station_name and station_id, enriching the schema's bare parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns official municipality context resolved from a station, with specific input examples (station name or station_id). It also distinguishes from get_municipality_context and clarifies 'no scores', making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly references get_municipality_context and explains the key difference—resolved from a station—which tells when to use this tool. It gives clear input instructions, though it does not explicitly state when not to use it or name alternative tools beyond the municipality counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_station_hazardARead-onlyIdempotentInspect
Official disaster-risk categories at a Japanese train station, relayed live from the MLIT 不動産情報ライブラリ (Real Estate Information Library): flood inundation-depth rank, landform / liquefaction classification, and storm-surge inundation-area presence (landslide & tsunami are license-restricted and return available:false with a link to the official maps). Returns the official values/categories as-is — no composite score, no judgment. Accepts a station name in Japanese (新宿, 武蔵小杉) or romaji (Shinjuku, Musashi-Kosugi). For research/analytics; NOT a substitute for official government hazard maps or evacuation decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| station_name | Yes | Station name in Japanese (新宿, 武蔵小杉) or romaji (Shinjuku, Musashi-Kosugi). |
Output Schema
| Name | Required | Description |
|---|---|---|
| hazard | No | Official categories: flood inundation depth, landform/liquefaction, storm-surge. |
| station | No | Resolved station + coordinates. |
| disclaimer | No | Usage disclaimer (not a substitute for official maps). |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, idempotent, and non-destructive nature. The description goes further by disclosing that landslide and tsunami data are license-restricted and return available:false with a link to official maps, and that the tool returns official values as-is with no composite score or judgment. This adds valuable behavioral context about data availability and interpretation beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately sized and front-loaded with the core purpose. Each sentence provides substantive information (source, categories, licensing, return semantics, input format, usage caveat), though the input format sentence is redundant with the schema and could be trimmed without loss. Overall, the structure is clear and information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description doesn't need to explain return values, but it still addresses key contextual elements: data source, specific hazard categories, licensing limitations, output semantics, input format, and appropriate usage. This makes the tool's behavior and limitations clear for an AI agent, especially for a niche Japanese data source.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single parameter 'station_name' with examples in Japanese and romaji, achieving 100% coverage. The description repeats this input format but adds no semantic detail beyond the schema, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: returning official disaster-risk categories at a Japanese train station from the MLIT Real Estate Information Library. It specifies the exact categories (flood inundation-depth rank, landform/liquefaction classification, storm-surge presence) and distinguishes itself from siblings like get_station_alerts and get_station_context by focusing on hazard categories rather than alerts or general context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool ('For research/analytics') and explicitly warns against using it as a substitute for official government hazard maps or evacuation decisions. However, it does not explicitly name alternative tools or state when NOT to use this tool in favor of a sibling, though the distinct subject matter implies appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_toilet_by_stationARead-onlyIdempotentInspect
Look up wheelchair-accessible / multipurpose toilets inside a train station, including floor, gender, equipment (wheelchair, ostomate, diaper table) and the nearest exit. Covers 526 Tokyo stations (Tokyo Bureau of Social Welfare data). Major stations outside Tokyo (Yokohama, Kawasaki, Omiya, Chiba, Fujisawa, Shin-Yokohama…) return an in-station layer that groups accessible toilets by ticket gate — inside vs outside — per railway operator. Accepts Japanese (新宿, 横浜) or romaji (Shinjuku, Yokohama) for major stations.
| Name | Required | Description | Default |
|---|---|---|---|
| station | Yes | Station name in Japanese (新宿, 渋谷) or romaji for major stations (Shinjuku, Shibuya, Kita-Senju). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Human-readable note. |
| count | No | Toilets returned. |
| error | No | Set when nothing was found. |
| layer | No | Data layer (e.g. in_station_gate). |
| source | No | Data source label. |
| station | No | Resolved station (English). |
| toilets | No | Accessible toilets with floor, gender, equipment and nearest exit. |
| station_ja | No | Station name in Japanese. |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
| station_name_source | No | How the name was resolved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds valuable context beyond annotations: the data source (Tokyo Bureau of Social Welfare), station coverage, and the special in-station layer grouped by ticket gate and railway operator for major stations. This gives the agent a clear picture of edge-case behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core purpose and output fields; the second defines coverage and special behavior for major stations; the third specifies input formats with examples. No fluff, well front-loaded, and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter), the description covers all essential aspects: what it retrieves, the geographic scope, data source, input varieties, and special grouping behavior for major stations. An output schema exists, so return-value details are already structured. The description is complete for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter with 100% coverage, providing the baseline of 3. The description enhances this by explaining accepted formats (Japanese and romaji), providing examples, and clarifying that romaji is only for major stations. This adds practical guidance for correctly filling the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('look up') and clearly identifies the resource: wheelchair-accessible/multipurpose toilets inside train stations. It enumerates details (floor, gender, equipment, nearest exit) and distinguishes itself from sibling tools like get_public_toilet_by_city, which focuses on city-level public toilets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it works for 526 Tokyo stations and major stations outside Tokyo with a different grouping behavior. It also specifies acceptable input formats (Japanese/romaji) and hints that romaji is only for major stations. However, it does not explicitly state when NOT to use it or name alternative tools, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_train_statusARead-onlyIdempotentInspect
Live train service status for Tokyo-area lines — delays, suspensions, resumptions. Ask 'is the Yamanote Line running?' by line or station name, English or Japanese. Status enum: normal / delayed / suspended / resumed. Cause text relayed from ODPT (English summary for known patterns, else original text + null). Data via ODPT (CC BY 4.0).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Line or station name (English or Japanese), e.g. "Yamanote" or "新宿". |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of lines. |
| lines | No | Per-line status: normal / delayed / suspended / resumed, with cause. |
| query | No | Echo of the query. |
| stale | No | True if stale. |
| fetched_at | No | When the snapshot was fetched. |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, idempotent), the description discloses the status enum (normal/delayed/suspended/resumed), how cause text is handled (English summary for known patterns, else original text + null), and credits ODPT as the data source with license. This adds real behavioral detail without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences packed with relevant information — purpose, usage, enum, data source. No filler words. Front-loaded with the most important part.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single query parameter, a read-only action, and an output schema. The description covers purpose, usage, result format (status enum and cause handling), and data provenance. There's no gap that would hinder an agent from using it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents query as 'Line or station name (English or Japanese)'. The description repeats this and adds an example query. With 100% schema coverage, the baseline is 3; the description adds minimal extra semantic meaning beyond the schema, so 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Live train service status for Tokyo-area lines' — a specific verb (get status), resource (Tokyo-area train lines), and scope (delays, suspensions, resumptions). It clearly distinguishes from sibling tools like get_station_alerts or station_search by focusing on line-level running status rather than station facilities or alerts. The example phrasing solidifies purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage context (ask by line or station name, English or Japanese) and a natural-language example ('is the Yamanote Line running?'). It does not explicitly name alternatives or exclusions, so it earns 4 rather than 5. The context alone makes it clear when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingARead-onlyIdempotentInspect
Connection test / health check — call this first to confirm the server is reachable. Returns server identity, deploy version, tool count, station coverage, and the update times of the realtime layers (JMA alerts, train status) so you can confirm freshness, not just liveness. No auth, no arguments, lightweight.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tools | No | Number of tools exposed by this server. |
| server | No | Server name. |
| status | No | Always "ok" when the server is reachable. |
| version | No | Deploy version. |
| realtime_layers | No | Update times of the realtime KV snapshots (a field is omitted if that layer is unavailable). |
| stations_covered | No | Stations with accessible-toilet data. |
| rate_limit_noauth | No | No-auth rate limit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond this: it is lightweight, requires no auth, and returns specific fields (server identity, deploy version, tool count, station coverage, update times) to confirm 'freshness, not just liveness'. This fully discloses behavior and return value scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the key action ('call this first'), and every clause adds useful detail: what it returns, the no-auth/lightweight nature, and the distinction between liveness and freshness. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only health check, the description fully covers purpose, usage, and output expectations. It even notes the update times for realtime layers, which is more than necessary given the output schema exists. It is complete for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is nothing to describe beyond stating 'no arguments', which the description does. Baseline for 0 params is 4, and the description reinforces the schema. There is no missing parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Connection test / health check' and specifies 'call this first to confirm the server is reachable', giving a specific verb and resource. It clearly distinguishes itself from sibling data-retrieval tools by focusing on server health and returning aggregated metadata rather than domain data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'call this first' to confirm reachability, establishing it as the initial check before using other tools. It also mentions 'No auth, no arguments, lightweight', implying it is the low-cost entry point. The description makes the usage context clear without needing to name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
station_searchARead-onlyIdempotentInspect
Discover Japanese train stations by describing what you want around them, in English or Japanese — "朝ラーメンが食べられて車椅子トイレがある駅", "terminal station with late-night ramen", "水害リスクが低くてラーメンが多い駅". Semantic search over 9,035 station profiles (lines/terminal size, ramen density & styles, in-station accessible-toilet equipment, official hazard categories, ridership) with hybrid metadata filters — the filters guarantee the constraint, the embedding ranks by fit. Filter intent in the query text (朝ラー/深夜/おむつ/車椅子/水害リスク低…) is auto-applied (filter_source: inferred); explicit params win. Water-hazard intent (水害/洪水/浸水/高潮…リスク低) expands to flood rank AND storm-surge zone; 液状化/地盤 intent filters on the official liquefaction-tendency category; results carry risk_notes when other official hazard categories are high. Inferred facility filters with partial data coverage (おむつ/車椅子 — Tokyo-only data) BOOST confirmed stations instead of excluding unknowns (see soft_filters); explicit params remain strict. Taste/quality words (うまい, "good food", delicious…) are not evaluated (no review data); ramen ranking reflects shop density and style variety only. name_contains gives exact substring matching on station names (日本語/romaji) when the name itself is the requirement. Coverage notes: toilet stats = Tokyo stations only; ridership = Greater Tokyo operators only; hazard = official MLIT categories relayed as-is, NOT a safety judgment. Role split: station_search finds candidate stations — then get_toilet_by_station / search_ramen / get_station_hazard / get_station_context for detail on one station.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Natural-language description of the station/area you want (ja/en). Concrete attribute words (朝ラー, wheelchair toilet, terminal, 水害リスク低) match best. | |
| pref | No | Optional prefecture filter, Japanese (東京都, 千葉 OK) or romaji (tokyo/osaka). Auto-inferred from the query text when omitted. | |
| limit | No | Max results (default 10; max 20, or 300 when name_contains is given — set limit >= name_matches_total for exhaustive name-match coverage). | |
| diaper | No | Require a diaper changing table in station toilets (auto-inferred from おむつ/子連れ…). | |
| ramen_min | No | Require at least this many ramen shops nearby (e.g. 30). | |
| late_ramen | No | Require late-night ramen nearby (auto-inferred from 深夜/late night…). | |
| morning_ramen | No | Require morning-ramen availability nearby (auto-inferred from 朝ラー/morning…). | |
| name_contains | No | Substring filter on the station name (matches both 日本語 name_ja and romaji name, e.g. "谷" or "sakura"). ANDs with other filters; q still ranks the matches. Use for "stations whose name contains X" requests that semantic search cannot guarantee. | |
| flood_rank_max | No | Max official flood inundation-depth rank 0–6 (0 = no assumed inundation; auto-inferred from 水害リスク低/flood-safe…). | |
| accessible_toilet_min | No | Require at least this many in-station accessible toilets (Tokyo stations only; auto-inferred from 車椅子/wheelchair…). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when the query contains taste/quality words: they are not evaluated (no review data). |
| count | No | Results returned. |
| notes | No | Coverage caveats (toilet stats Tokyo-only, ridership Greater-Tokyo-only). |
| query | No | Echo of the query. |
| stations | No | Matching stations, best first: name, pref, similarity, ramen stats, toilet stats, official hazard categories (plus risk_notes when an official hazard category not covered by the filter is high), lines, ridership. |
| disclaimer | No | Hazard usage disclaimer. |
| attribution | No | Data source(s), license and provenance — an object, or an array of sources. |
| stats_as_of | No | Freshness of the underlying ramen stats (YYYY-MM-DD). |
| soft_filters | No | Inferred facility filters applied as a score BOOST (confirmed stations get +BOOST on similarity = final_score; unknown/missing never excluded), with coverage note. Present only when active. |
| filter_source | No | explicit / inferred / none — how the filters were chosen. |
| applied_filters | No | Hard metadata filters actually applied (explicit + inferred; includes name_contains when given). |
| name_matches_total | No | Total stations whose name matched name_contains (before ranking/limit). Present only in name_contains mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint and idempotentHint annotations, the description adds rich behavioral nuance: auto-inference of filter intent, water-hazard expansion to flood rank AND storm-surge zone, partial-data soft filtering (BOOST confirmed instead of exclude), and explicit statements that hazard categories are relayed as-is, not a safety judgment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Lengthy but every sentence adds value. Structured clearly: core purpose with examples, edge-case handling, coverage caveats, then role split. Front-loaded with the primary use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters, hybrid search, auto-inference, and multiple data caveats, the description is comprehensive. Output schema exists, so return value explanation is not needed. Covers soft-filter behavior, data coverage, and tool relationships.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. But the description elevates meaning by explaining auto-inference behavior ('explicit params win'), name_contains substring matching details, and limit semantics ('set limit >= name_matches_total for exhaustive name-match coverage').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Discover Japanese train stations by describing what you want around them' — a specific verb, resource, and mechanism. It distinguishes from sibling detail tools via 'Role split: station_search finds candidate stations — then get_toilet_by_station / search_ramen / get_station_hazard / get_station_context for detail on one station.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool: for candidate discovery, then delegates to specific sibling tools for detail. Also covers when to use name_contains ('when the name itself is the requirement') and warns about limitations (taste words not evaluated, coverage notes).
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 tool update
- Changed
station_search4 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 10, max 20)."New value: +"Max results (default 10; max 20, or 300 when name_contains is given — set limit >= name_matches_total for exhaustive name-match coverage)." - added
Input schema / properties / name_containsAdded value: +{ + "description": "Substring filter on the station name (matches both 日本語 name_ja and romaji name, e.g. \"谷\" or \"sakura\"). ANDs with other filters; q still ranks the matches. Use for \"stations whose name contains X\" requests that semantic search cannot guarantee.", + "type": "string" +} - changed
Output schema / properties / applied_filters / descriptionPrevious value: -"Hard metadata filters actually applied (explicit + inferred)."New value: +"Hard metadata filters actually applied (explicit + inferred; includes name_contains when given)." - added
Output schema / properties / name_matches_totalAdded value: +{ + "description": "Total stations whose name matched name_contains (before ranking/limit). Present only in name_contains mode." +}
1 tool update
- Changed
station_search1 field changed- changed
Output schema / properties / soft_filters / descriptionPrevious value: -"Inferred facility filters applied as BOOST (confirmed first, unknown demoted — not excluded), with coverage note. Present only when active."New value: +"Inferred facility filters applied as a score BOOST (confirmed stations get +BOOST on similarity = final_score; unknown/missing never excluded), with coverage note. Present only when active."
1 tool update
- Changed
station_search4 fields changed- changed
Output schema / properties / applied_filters / descriptionPrevious value: -"Metadata filters actually applied (explicit + inferred)."New value: +"Hard metadata filters actually applied (explicit + inferred)." - added
Output schema / properties / noteAdded value: +{ + "description": "Present when the query contains taste/quality words: they are not evaluated (no review data)." +} - added
Output schema / properties / soft_filtersAdded value: +{ + "description": "Inferred facility filters applied as BOOST (confirmed first, unknown demoted — not excluded), with coverage note. Present only when active.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / stations / descriptionPrevious value: -"Matching stations, best first: name, pref, similarity, ramen stats, toilet stats, official hazard categories, lines, ridership."New value: +"Matching stations, best first: name, pref, similarity, ramen stats, toilet stats, official hazard categories (plus risk_notes when an official hazard category not covered by the filter is high), lines, ridership."
1 tool update
- Added
station_search
1 tool update
- Added
ping
8 tool updates
- Changed
get_active_alerts1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Live JMA river-flood & landslide alerts.", + "properties": { + "alerts": { + "description": "Active JMA river-flood / landslide alerts with level, area, summary, issue time.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "attribution": { + "description": "Data source(s), license and provenance — an object, or an array of sources." + }, + "count": { + "description": "Number of active alerts." + }, + "coverage": { + "description": "What this feed covers — string or array of categories." + }, + "disclaimer": { + "description": "Relay disclaimer (not a warning issued by this service)." + }, + "fetched_at": { + "description": "When the snapshot was fetched." + }, + "source": { + "description": "Source label." + }, + "stale": { + "description": "True if the snapshot is stale." + } + }, + "type": "object" +}
- Changed
get_municipality_context1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Official municipality data (vacancy, ridership, hazard, land price, livability).", + "properties": { + "attribution": { + "description": "Data source(s), license and provenance — an object, or an array of sources." + }, + "hazard": { + "description": "Hazard categories." + }, + "hazard_disclaimer": { + "description": "Hazard usage disclaimer." + }, + "land_price": { + "description": "Published land prices near the centroid." + }, + "livability": { + "description": "Livability counts." + }, + "municipality": { + "description": "Resolved municipality + code." + }, + "population": { + "description": "Population / future estimate." + }, + "ridership": { + "description": "Nearest-station ridership trend." + }, + "vacancy": { + "description": "Housing-vacancy counts (2003–2023)." + } + }, + "type": "object" +}
- Changed
get_public_toilet_by_city1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Public toilets in a municipality.", + "properties": { + "attribution": { + "description": "Data source(s), license and provenance — an object, or an array of sources." + }, + "city": { + "description": "Resolved municipality." + }, + "count": { + "description": "Toilets returned." + }, + "error": { + "description": "Set when nothing was found." + }, + "note": { + "description": "Human-readable note." + }, + "toilets": { + "description": "Public toilets with wheelchair / baby-seat / ostomate flags, address and coordinates.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
get_station_alerts1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Live JMA alerts for a station's prefecture.", + "properties": { + "alerts": { + "description": "JMA alerts affecting the prefecture.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "attribution": { + "description": "Data source(s), license and provenance — an object, or an array of sources." + }, + "count": { + "description": "Number of alerts." + }, + "disclaimer": { + "description": "Relay disclaimer." + }, + "fetched_at": { + "description": "When the snapshot was fetched." + }, + "stale": { + "description": "True if stale." + }, + "station": { + "description": "Resolved station." + } + }, + "type": "object" +}
- Changed
get_station_context1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Official data for a station's municipality.", + "properties": { + "attribution": { + "description": "Data source(s), license and provenance — an object, or an array of sources." + }, + "hazard": { + "description": "Hazard categories." + }, + "land_price": { + "description": "Land prices near the centroid." + }, + "livability": { + "description": "Livability counts." + }, + "municipality": { + "description": "Municipality + code." + }, + "population": { + "description": "Population / future estimate." + }, + "ridership": { + "description": "Ridership trend." + }, + "station": { + "description": "Resolved station." + }, + "vacancy": { + "description": "Housing-vacancy counts." + } + }, + "type": "object" +}
- Changed
get_station_hazard1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Official disaster-risk categories at a station (MLIT relay).", + "properties": { + "attribution": { + "description": "Data source(s), license and provenance — an object, or an array of sources." + }, + "disclaimer": { + "description": "Usage disclaimer (not a substitute for official maps)." + }, + "hazard": { + "description": "Official categories: flood inundation depth, landform/liquefaction, storm-surge." + }, + "station": { + "description": "Resolved station + coordinates." + } + }, + "type": "object" +}
- Changed
get_toilet_by_station1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Wheelchair-accessible / multipurpose toilets inside a station.", + "properties": { + "attribution": { + "description": "Data source(s), license and provenance — an object, or an array of sources." + }, + "count": { + "description": "Toilets returned." + }, + "error": { + "description": "Set when nothing was found." + }, + "layer": { + "description": "Data layer (e.g. in_station_gate)." + }, + "note": { + "description": "Human-readable note." + }, + "source": { + "description": "Data source label." + }, + "station": { + "description": "Resolved station (English)." + }, + "station_ja": { + "description": "Station name in Japanese." + }, + "station_name_source": { + "description": "How the name was resolved." + }, + "toilets": { + "description": "Accessible toilets with floor, gender, equipment and nearest exit.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
get_train_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "description": "Live Tokyo-area train service status.", + "properties": { + "attribution": { + "description": "Data source(s), license and provenance — an object, or an array of sources." + }, + "count": { + "description": "Number of lines." + }, + "fetched_at": { + "description": "When the snapshot was fetched." + }, + "lines": { + "description": "Per-line status: normal / delayed / suspended / resumed, with cause.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "query": { + "description": "Echo of the query." + }, + "stale": { + "description": "True if stale." + } + }, + "type": "object" +}
3 tool updates
- Removed
get_ramen_changes - Removed
get_ramen_shop - Removed
search_ramen
1 tool update
- Changed
search_ramen1 field changed- changed
Input schema / properties / keito / descriptionPrevious value: -"Optional ramen-style enum: iekei, yokohama_iekei, jiro, tsukemen, tantanmen, abura_mazesoba, miso, shio, shoyu, tonkotsu, chuka_tanrei, sapporo, kitakata."New value: +"Optional ramen-style enum: iekei, yokohama_iekei, jiro, tsukemen, tantanmen, abura_mazesoba, miso, shio, shoyu, tonkotsu, chuka_tanrei, sapporo, kitakata, ramen_shop (ラーメンショップ/ラーショ roadside chain)."
3 tool updates
- Added
get_ramen_changes - Added
get_ramen_shop - Added
search_ramen
1 tool update
- Changed
get_station_context3 fields changed- changed
Input schema / properties / station_id / descriptionPrevious value: -"Japan Station Master station_id (e.g. st_00001)."New value: +"Japan Station Master station_id (e.g. st_00001). Alternative to station_name." - added
Input schema / properties / station_nameAdded value: +{ + "description": "Station name in English/romaji (Shinjuku) or Japanese (新宿). Provide this or station_id.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "station_id" -]New value: +[]
2 tool updates
- Added
get_municipality_context - Added
get_station_context
3 tool updates
- Added
get_active_alerts - Added
get_station_alerts - Added
get_train_status
1 tool update
- Added
get_station_hazard
2 tool updates
- First observed
get_public_toilet_by_city - First observed
get_toilet_by_station
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.167 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm49 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.