Skip to main content
Glama
Sora-bluesky

building-standards-act-mcp

by Sora-bluesky

building-standards-act-mcp

npm version CI Node.js License: MIT

建築確認申請に必要な法令・告示を e-Gov 法令 API からリアルタイム取得する MCP サーバー。

AI の建築法規回答に含まれるハルシネーションを、条文原文との照合によって防ぐ。

特徴

  • 法令取得 — e-Gov 法令 API v2 から条文を条単位(elm 指定)で取得。1 条あたり数 KB で済み、全文 1 MB 超を読まない

  • 法令検索 — 法令名で建築関連法令を横断検索

  • 条文本文検索 — e-Gov のキーワード検索 API で条文本文を全文検索(search_articles)

  • 法令全文取得 — 法令全体のテキストを取得

  • 告示取得 — 建築基準法が技術基準を委任している告示を国土交通省の告示データベース(PDF)から取得

  • 検索ファースト — e-Gov API 検索による動的な法令解決。プリセットに限らず、e-Gov 収録の全法令を取得可能

  • 略称マップ — 建築基準法・消防法・都市計画法ほか 116 法令の略称を登録済み。「建基法」「都計法」「消防法」等の略称で指定可能

  • キャッシュ — 検索 30 分・法令データ 24 時間の TTL キャッシュ(永続化オプションあり)

  • API 耐障害性 — 自動リトライ(exponential backoff)+ サーキットブレーカー

  • 運用可視化 — 構造化 JSON ログ + 使用量メトリクス(get_metrics ツール)

Related MCP server: e-Gov Law MCP Server

Web で使う(Vercel デプロイ)

Vercel にデプロイすると、Claude.ai からすぐに使えます。環境変数の設定は不要です(e-Gov API は公開 API)。

公開インスタンス: https://building-standards-act-mcp.vercel.app/api/mcp(自分でデプロイしなくても、この URL をそのまま Custom Connector に登録できます)

Deploy with Vercel

Claude.ai でのセットアップ(Free/Pro/Max/Team/Enterprise)

Custom Connectors は Free / Pro / Max / Team / Enterprise の各プランで利用できます(Free プランは 1 件まで)。ローカルで動かしたい場合は npx(ローカル)でのセットアップ を参照してください。

  1. 公開インスタンスを使う場合はこの手順を飛ばす。自分でホストする場合は上の「Deploy with Vercel」ボタンでデプロイ(ワンクリック)

  2. claude.ai → Customize → Connectors

  3. 「+ Add」→「Add custom connector」をクリック

  4. URL に https://building-standards-act-mcp.vercel.app/api/mcp(自分でデプロイした場合はその URL)を入力し、認証は「No sign in」を選択

  5. チャットで「+」→「Connectors」→ building-standards-act を有効化

  6. 「建築基準法第20条を教えて」と質問

参考: Get started with custom connectors using remote MCP

Vercel での実行時間

  • Vercel Functions の実行時間は Hobby プランでも既定 300 秒です(Fluid compute)。本リポの vercel.json は maxDuration を 60 秒に設定しています

  • get_kokuji(告示取得)は PDF ダウンロード + パースが重いため、60 秒を超える場合は vercel.json の maxDuration を引き上げてください

  • check_law_updates の大規模グループ(9章: 53法令)は最大 5 並行で実行します(BUILDING_LAW_CONCURRENCY で調整可能)

  • BUILDING_LAW_REQUEST_TIMEOUT=8000 を設定して e-Gov API 呼び出しのタイムアウトを短縮できます


ローカルで使う(stdio)

npx(推奨)

インストール不要で実行できます。

npx -y building-standards-act-mcp@latest

@latest を付けると、npx のキャッシュに古い版が残っていても最新版で起動します。

Claude Desktop

claude_desktop_config.json に以下を追加してください。

{
  "mcpServers": {
    "building-standards-act": {
      "command": "npx",
      "args": ["-y", "building-standards-act-mcp@latest"]
    }
  }
}

Claude Code

claude mcp add building-standards-act -- npx -y building-standards-act-mcp@latest

Windows + VS Code 拡張機能の場合

VS Code 拡張機能では npx 経由の起動が Connection closed エラーになる場合があります。その場合は、公開中の Vercel 版に HTTP で接続するのが確実です。

claude mcp add --transport http building-standards-act https://building-standards-act-mcp.vercel.app/api/mcp

プロジェクト単位で設定するなら、プロジェクトルートの .mcp.json に次を書きます。

{
  "mcpServers": {
    "building-standards-act": {
      "type": "http",
      "url": "https://building-standards-act-mcp.vercel.app/api/mcp"
    }
  }
}

ローカルの stdio で動かしたい場合は、npx を cmd /c で包みます。

claude mcp add building-standards-act -- cmd /c npx -y building-standards-act-mcp@latest

注意: グローバルインストールした dist/index.js のパスを .mcp.json に直接書く方法は使わないでください。パッケージの更新・削除やフォルダの移動で、エラーを出さずに接続できなくなります。

ローカル(ソースから)

git clone https://github.com/Sora-bluesky/building-standards-act-mcp.git
cd building-standards-act-mcp
npm install
npm run build
{
  "mcpServers": {
    "building-standards-act": {
      "command": "node",
      "args": ["/path/to/building-standards-act-mcp/dist/index.js"]
    }
  }
}

MCP ツール

ツール

説明

get_law

条番号を指定して条文を取得する。format=text は本文と参照一覧(references)を合わせて max_chars(最大 24,000、既定 20,000)で制限。長い条の項・表の行は find で探し、返った matches と offset を使う。続きは next_offset を指定(続きは find を外す)

get_full_law

法令の全文を取得する。max_chars(最大 48,000、既定 30,000)で区切り、続きは offset で取る

search_law

法令名(タイトル)で建築関連法令を検索する。略称マップと e-Gov API の両方を検索。条文本文の検索は search_articles

search_articles

条文本文をキーワードで全文検索する(e-Gov /keyword)。半角スペース区切りで AND 検索。AND・OR・NOT は演算子ではなく検索語として扱われる。全角スペースは半角に直して送る。法令名で絞り込み可。条番号は get_law で確定する

get_kokuji

建築基準法が技術基準を委任している告示の全文を取得する(省エネ告示は国交省 PDF から直接取得)。住宅局の DB 告示には改正一覧も表示。max_chars(最大 48,000、既定 30,000)で区切り、続きは offset で取る

get_kokuji_amendments

告示番号または告示名から改正一覧だけを軽量に取得する(2018年1月1日以降公布分)

check_law_updates

法令の改正状況を e-Gov API で確認する。since(既定は 12 か月前)より後の改正だけを「改正あり」にする

get_laws_batch

複数条文を一括取得(最大20件)。max_chars_per_item(最大 20,000、既定 8,000)で切り詰め、max_total_chars(最大 24,000、既定 20,000)を超える後続本文は省略。上限を超える指定は入力エラー。長い条(例: 建築基準法施行規則 第1条の3)は get_law で個別に取得

verify_citation

AIの回答に含まれる法令引用を検証する(条文存在確認・テキスト照合、最大10件)

suggest_related

指定した条文の関連法令・委任先・同法令内参照を自動抽出して提案する

analyze_article

条文の構造解析メタデータ(項数・号数・参照統計・プレビュー)をJSON形式で返す

get_metrics

サーバーの使用量メトリクスを返す(ツール呼び出し回数・APIリクエスト数・キャッシュヒット率)

パラメータ

get_law

パラメータ

説明

例

law_name

法令名(正式名称または略称)

建築基準法, 建基法

article_number

条文番号(附則・別表にも対応)

第20条, 附則, 別表第一

format

出力形式(text または structured、省略時は text)

structured

max_chars

本文と参照一覧(references)を合わせた最大文字数(1,000〜24,000、既定 20,000)。format=text のみ

8000

offset

本文内の開始位置(既定 0)。format=text のみ。続きは next_offset を指定

8000

find

この条の本文から探す語(1〜100文字)。空白を無視し、全角・半角を区別せずに検索。一致を含む行から表示。format=text のみ適用

非常用の昇降機

offset は見出し・参照・出典を含まない本文内の文字位置です。get_laws_batch の next_offset をそのまま指定できます。

format=text の上限は、structuredContent を含む応答全体が約5万字に収まる値です。max_chars の上限を超える指定は入力エラーになります。

長い条の中の項・表の行を探すときは find に語を渡し、offset を自分で推測しないでください。検索語は search_articles と同じ空白正規化を通した後、本文とともにコードポイントごとに NFKC 正規化し、すべての空白(全角スペースを含む)を除いて照合します。matches は本文全体での一致開始位置の先頭20件、matches_total は一致の総件数です。位置は正規化前の元本文の UTF-16 文字位置で返します。

find と offset を併用すると、offset 以上の最初の一致を選びます。たとえば offset=matches[1] で2件目へ移動できます。該当する一致が後ろにない場合は最初の一致に戻ります。返る offset は選択した一致を含む行の先頭です。一致の終端が行頭から max_chars の余裕を除いた範囲に収まらない場合は、一致位置から表示します。ページ末尾は従来どおり改行を優先するため、改行や大量の空白をまたぐ一致は複数ページに分かれることがあります。続きは find を外し、返った next_offset をそのまま渡してください。

一致がないときは「この条に『検索語』は見つかりませんでした。」と本文全体の文字数を返し、本文は返しません。article.text は空文字列、matches は空配列、matches_total は0、next_offset は null です。format=structured では find・max_chars・offset を適用しません。

参照一覧はページ内の本文に現れる参照に絞ったうえで、本文と参照のJSONの長さの合計が max_chars に収まる順序どおりの先頭部分だけを表示し、表示が0件なら article の references キーを省略します。参照を省略した場合は references_total と references_truncated: true、表示件数の案内を返し、関連法令の一覧は suggest_related でも確認できます。

get_full_law

パラメータ

説明

例

law_name

法令名(正式名称または略称)

建築基準法施行令, 建基令

max_chars

1 回に返す最大文字数(1,000〜48,000、既定 30,000)

30000

offset

続きを取るときの開始位置(末尾の案内に出る値)

30000

search_law

パラメータ

説明

例

keyword

法令名に含まれる語

建築, 都市計画

search_articles

パラメータ

説明

例

keyword

条文本文に含まれる語。半角スペース区切りで AND 検索。AND・OR・NOT は演算子ではなく検索語として扱われる。全角スペースは半角に直して送る。* ? のワイルドカードが使える

準耐火構造 外壁, 壁量

law_title

法令名または略称で絞り込み(省略時は e-Gov の全法令)

建築基準法

limit

返す該当文の数(既定 10、最大 50)

20

offset

続きを取るときの開始位置(応答の next_offset を渡す)

10

連続する空白は半角スペース1つにまとめ、前後の空白を除いて検索します。正規化後に検索語が空の場合は入力エラーを返し、検索結果が0件の場合は通信エラーと区別して「該当する条文はありませんでした。」と返します。

get_kokuji

住宅局の DB 告示には、国交省「建築基準法等に基づく告示の制定・改正について」から改正一覧を付けます。国交省の告示 DB には2019年3月以降の建築告示の改正が反映されていないため、本文を根拠にする前に新旧対照表 PDF を確認してください。対象が未確定の改正告示があれば件数を示します。

改正欄は毎ページに表示します。offset は従来どおり見出し等を含む本文の位置です。改正欄を含む表示テキストを content と structuredContent.text の両方に入れます。本文ページの上限を減らし、両方のテキストと構造化情報を合わせた応答全体を約50,000文字に収めます。構造化出力には取得元・告示番号・改正一覧・続きの位置も入れます。

パラメータ

説明

例

kokuji_name

告示名

耐火構造の構造方法を定める件

max_chars

1 回に返す最大文字数(1,000〜48,000、既定 30,000)

30000

offset

続きを取るときの開始位置

30000

get_kokuji_amendments

本文を取らずに改正の有無だけを確認できます。kokuji_number と kokuji_name は、どちらか一つだけ指定してください。

パラメータ

説明

例

kokuji_number

年・発出省・番号を含む告示番号(最大100文字、略記可)

平成12年建設省告示第1399号、平12建告1399

kokuji_name

告示名(最大200文字)

耐火構造の構造方法を定める件

対象は平成30年1月1日以降に公布された告示(改正ページの平成29年度分から)です。公布日・施行日・新旧対照表等へのリンクを返します。最大30件を新しい順に表示し、省略件数・対象未確定件数も示します。取得失敗時や対象未確定の告示がある場合は、官報等でも確認してください。

check_law_updates

パラメータ

説明

例

law_name

法令名または略称(単体チェック)

建築基準法

group

章グループ(バッチチェック、省略時は全章)

1章

show_history

改正履歴の詳細を表示(law_name 指定時)

true

since

基準日。これより後の改正だけを報告(省略時は 12 か月前)

2026-01-01

get_laws_batch

パラメータ

説明

例

requests

取得対象の配列。各要素に law_name, article_number, format を指定

—

max_chars_per_item

条文ごとの最大文字数(1,000〜20,000、既定 8,000)。構造化形式はJSONの長さを基準に項単位で切り詰め

8000

max_total_chars

応答全体のJSONの最大文字数(10,000〜24,000、既定 20,000)。超過する後続本文は省略。上限を超える指定は入力エラー

20000

上限は、structuredContent を含む応答全体が約5万字に収まる値です。

切り詰めたテキストの続きは、案内された offset を get_law に指定して取得します。本文を省略した結果は omitted: true と省略一覧で示します。取得の成功・失敗件数は本文の省略によって変わりません。

長い条(例: 建築基準法施行規則 第1条の3)は get_law で個別に取得してください。

verify_citation

パラメータ

説明

例

citations

検証対象の配列。各要素に law_name, article_number, claimed_text(省略可)

—

パラメータ

説明

例

law_name

法令名(正式名称または略称)

建築基準法

article_number

条文番号

第20条

analyze_article

パラメータ

説明

例

law_name

法令名(正式名称または略称)

建築基準法

article_number

条文番号

第20条

get_metrics

パラメータなし。サーバー起動後の稼働時間・ツール呼び出し回数・API リクエスト数・キャッシュヒット率を返す。

使用例

条文取得

建築基準法第20条を取得して
→ get_law(law_name="建築基準法", article_number="20")

略称使用

建基法第6条の2を取得して
→ get_law(law_name="建基法", article_number="第6条の2")

法令検索

都市計画に関する法令を検索して
→ search_law(keyword="都市計画")

条文本文検索

建築基準法で「耐火構造」が出てくる条文を探して
→ search_articles(keyword="耐火構造", law_title="建築基準法")
→ 該当文と区分(本則 / 附則)が返るので、条番号は get_law で確定する

全文取得

建築基準法施行令の全文を取得して
→ get_full_law(law_name="建築基準法施行令")

告示取得

耐火構造の構造方法を定める件を取得して
→ get_kokuji(kokuji_name="耐火構造の構造方法を定める件")

附則取得

建築基準法の附則を取得して
→ get_law(law_name="建築基準法", article_number="附則")

建築基準法施行令の附則第1条を取得して
→ get_law(law_name="建築基準法施行令", article_number="附則第1条")

未施行の改正附則(現行データに無いときは改正履歴から未施行版を取る)
→ get_law(law_name="建築基準法施行令", article_number="附則(令和8年政令第284号)")

別表取得

建築基準法の別表第一を取得して
→ get_law(law_name="建築基準法", article_number="別表第一")

ハルシネーション防止ワークフロー

AI が建築法規について回答する際、条文の引用ミスや存在しない条文の捏造(ハルシネーション)が発生することがあります。本ツールは 4 段階の防止メカニズム でこれを解決します。

基本ワークフロー(自動実行)

ユーザーの質問
  ↓
1. AI が仮回答を作成
  ↓
2. get_law / get_kokuji で引用した条文・告示の原文を取得
  ↓
3. 原文と仮回答を照合 → 誤りがあれば修正
  ↓
4. 2〜3 を収束するまで繰り返す(最大 4 ラウンド)
  ↓
照合済みの条文番号・告示番号を引用元として明示した最終回答

このワークフローは MCP サーバーの システムプロンプト に組み込まれており、AI が自動的に実行します。

追加の検証ツール

基本ワークフローに加えて、以下の専用ツールを使用することでさらに精度を高められます。

ツール

用途

使い方

verify_citation

AI の回答に含まれる 法令引用を自動検証 する

回答テキストから条文番号・法令名を自動抽出し、e-Gov API から原文を取得して照合。不一致があれば指摘し、正しい条文を提示する(最大 10 件同時検証)

suggest_related

指定条文の 関連法令を自動提案 する

条文間の参照(委任先・同法令内参照)を解析し、見落としがちな関連規定を提示。施行令への委任や別の章への参照を漏れなく把握できる

analyze_article

条文の 構造を解析 する

項数・号数・参照先の統計情報をメタデータとして返す。複雑な条文の全体像を把握し、読み落としを防ぐ

get_laws_batch

複数条文を一括取得 する

関連する複数の条文をまとめて取得し、条文間の整合性を確認する(最大 20 件)

使用例:引用検証

「建築基準法第20条で木造建築物の構造計算が必要な条件を教えて」

→ AI が回答を作成
→ verify_citation で回答内の引用を自動検証
→ 「第20条第1項第四号の引用が正確であることを確認しました」
  または
→ 「第20条第1項第三号の記載に誤りがあります。正しくは…」

対応法令一覧(116 法令 + e-Gov 全法令)

以下の 116 法令は略称マップに登録済みです。略称マップに含まれない法令も、正式名称を指定すれば e-Gov API 検索で動的に取得できます。

総則(4 法令)

法令名

略称

建築基準法

建基法, 基準法

建築基準法施行令

建基令, 基準法施行令

建築基準法施行規則

建基規則

民法

—

手続関連規定(6 法令)

法令名

略称

建築士法

士法

建築士法施行令

士法施行令

建築士法施行規則

士法施行規則

建設業法

—

建設業法施行令

—

建設業法施行規則

—

集団規定・街づくり(13 法令)

法令名

略称

都市計画法

都計法

都市計画法施行令

都計令

都市再開発法

再開発法

景観法

—

密集市街地における防災街区の整備の促進に関する法律

密集法

都市の低炭素化の促進に関する法律

低炭素法

屋外広告物法

—

文化財保護法

—

土地区画整理法

区画整理法

都市緑地法

—

生産緑地法

—

国土利用計画法

国土利用計画法, 国土法

都市計画法施行規則

都計規則

防火・耐火規定(4 法令)

法令名

略称

消防法

—

消防法施行令

消防令

消防法施行規則

消防規則

危険物の規制に関する規則

危険物規則

構造規定(7 法令)

法令名

略称

地震防災対策特別措置法

地震防災特措法

津波防災地域づくりに関する法律

津波防災法

特定都市河川浸水被害対策法

特定都市河川法

住宅地区改良法

—

建築物における衛生的環境の確保に関する法律

建築物衛生法, ビル管法

建築物の耐震改修の促進に関する法律施行令

耐震改修促進法施行令

建築物の耐震改修の促進に関する法律施行規則

耐震改修促進法施行規則

建築材料(3 法令)

法令名

略称

産業標準化法

JIS法, 産業標準化法

製造物責任法

PL法, 製造物責任法

石綿障害予防規則

石綿則, アスベスト規則

設備関連規定(5 法令)

法令名

略称

浄化槽法

—

電気工事士法

—

電気用品安全法

電安法

浄化槽法施行令

—

環境省関係浄化槽法施行規則

浄化槽法施行規則

その他(5 法令)

法令名

略称

特定住宅瑕疵担保責任の履行の確保等に関する法律

住宅瑕疵担保履行法

不動産登記法

不登法

借地借家法

—

不動産の鑑定評価に関する法律

不動産鑑定法

住宅宿泊事業法

民泊新法

建築基準関係規定・建築関連法令(52 法令)

法令名

略称

旅館業法

—

食品衛生法

—

風俗営業等の規制及び業務の適正化等に関する法律

風営法, 風適法

興行場法

—

公衆浴場法

—

医療法

—

児童福祉法

—

社会福祉法

—

老人福祉法

—

学校教育法

—

駐車場法

—

火薬類取締法

—

高圧ガス保安法

—

液化石油ガスの保安の確保及び取引の適正化に関する法律

液石法, LPガス法

ガス事業法

—

電気事業法

—

宅地造成及び特定盛土等規制法

盛土規制法, 宅造法

宅地建物取引業法

宅建業法

道路法

—

土地収用法

—

農地法

—

森林法

—

河川法

—

港湾法

—

地すべり等防止法

—

急傾斜地の崩壊による災害の防止に関する法律

急傾斜地法

土砂災害警戒区域等における土砂災害防止対策の推進に関する法律

土砂災害防止法

危険物の規制に関する政令

危険物政令

水道法

—

下水道法

—

廃棄物の処理及び清掃に関する法律

廃棄物処理法, 廃掃法

土壌汚染対策法

—

労働安全衛生法

安衛法, 労安法

建設工事に係る資材の再資源化等に関する法律

建設リサイクル法

大気汚染防止法

—

水質汚濁防止法

—

騒音規制法

—

振動規制法

—

悪臭防止法

—

高齢者、障害者等の移動等の円滑化の促進に関する法律

バリアフリー法

高齢者、障害者等の移動等の円滑化の促進に関する法律施行令

バリアフリー法施行令

道路交通法

道交法

都市公園法

—

自然公園法

—

古都における歴史的風土の保存に関する特別措置法

古都保存法

空家等対策の推進に関する特別措置法

空家対策特措法

介護保険法

—

障害者の日常生活及び社会生活を総合的に支援するための法律

障害者総合支援法

墓地、埋葬等に関する法律

墓地埋葬法

高齢者の居住の安定確保に関する法律

高齢者住まい法

労働安全衛生法施行令

安衛令

宅地造成及び特定盛土等規制法施行令

盛土規制法施行令

省エネ・住宅関連法(14 法令)

法令名

略称

建築物のエネルギー消費性能の向上等に関する法律

建築物省エネ法

建築物のエネルギー消費性能の向上等に関する法律施行令

建築物省エネ法施行令

建築物エネルギー消費性能基準等を定める省令

省エネ基準省令

エネルギーの使用の合理化及び非化石エネルギーへの転換等に関する法律

省エネ法

住宅の品質確保の促進等に関する法律

品確法, 住宅品質確保法

長期優良住宅の普及の促進に関する法律

長期優良住宅法

マンションの管理の適正化の推進に関する法律

マンション管理適正化法

マンションの建替え等の円滑化に関する法律

マンション建替え法

建物の区分所有等に関する法律

区分所有法

住宅の品質確保の促進等に関する法律施行令

品確法施行令

住宅の品質確保の促進等に関する法律施行規則

品確法施行規則

長期優良住宅の普及の促進に関する法律施行令

長期優良住宅法施行令

長期優良住宅の普及の促進に関する法律施行規則

長期優良住宅法施行規則

建築物のエネルギー消費性能の向上等に関する法律施行規則

建築物省エネ法施行規則

既存建築物関連(3 法令)

法令名

略称

建築物の耐震改修の促進に関する法律

耐震改修促進法

被災市街地復興特別措置法

被災市街地復興法

被災区分所有建物の再建等に関する特別措置法

被災マンション法

告示の取得

e-Gov API は告示を収録していないため、get_kokuji は国土交通省の告示・通達データベース(Excel → PDF)から正式名称で動的に取得します。見つからない場合は e-Gov API のキーワード検索にフォールバックします。

ハードコードされたプリセットは持たず、常に最新の告示データベースから取得するため、改正後も陳腐化しません。

耐火構造の構造方法を定める件を取得して
→ get_kokuji(kokuji_name="耐火構造の構造方法を定める件")

木造建築物の軸組の設置の基準を定める件を取得して
→ get_kokuji(kokuji_name="木造建築物の軸組の設置の基準を定める件")

法令解決の仕組み

  • 法令名(正式名称または略称)を受け取ると、e-Gov API のキーワード検索で law_id を動的に解決します

  • 略称マップに登録済みの法令は、略称から正式名称に展開した上で検索します

  • 略称マップに含まれない法令も、正式名称を指定すれば取得可能です

  • check_law_updates ツールで法令の改正状況を確認できます(e-Gov API のリビジョン履歴を参照)

注意: 自治体条例(都道府県・市区町村の条例)は e-Gov API の収録対象外のため取得できません。対象は国の法律・政令・省令・告示のみです。 例: 東京都建築安全条例、横浜市建築基準条例などは取得不可

環境変数

変数

説明

デフォルト

BUILDING_LAW_CACHE

キャッシュモード(memory / file)

memory

BUILDING_LAW_CACHE_DIR

ファイルキャッシュの保存先ディレクトリ

~/.cache/building-standards-act-mcp/

BUILDING_LAW_LOG_LEVEL

ログレベル(debug / info / warn / error)

info

BUILDING_LAW_REQUEST_TIMEOUT

API リクエストタイムアウト(ミリ秒)

30000

BUILDING_LAW_RATE_LIMIT_MS

API 呼び出し間隔(ミリ秒)

200

BUILDING_LAW_CONCURRENCY

最大並行 API 呼び出し数

5

永続キャッシュの有効化

{
  "mcpServers": {
    "building-standards-act": {
      "command": "npx",
      "args": ["-y", "building-standards-act-mcp@latest"],
      "env": {
        "BUILDING_LAW_CACHE": "file"
      }
    }
  }
}

技術仕様

項目

値

e-Gov API ベース URL

https://laws.e-gov.go.jp/api/2

MLIT 告示データベース

https://www.mlit.go.jp/notice/

検索キャッシュ TTL

30 分

法令データキャッシュ TTL

24 時間

MLIT Excel キャッシュ TTL

6 時間

告示 PDF テキストキャッシュ

24 時間

リビジョン履歴キャッシュ TTL

1 時間

リクエストタイムアウト

30 秒(環境変数で変更可能)

API 並行呼び出し

最大 5 並行(200ms 間隔)

Vercel デプロイ

対応(MCP-over-HTTP + REST API)

Vercel 関数タイムアウト

60 秒(maxDuration)

Node.js

>= 22.12.0

セキュリティ

  • 読み取り専用: 本サーバーは法令テキストの取得のみを行い、書き込み・変更・削除操作は一切ありません

  • 公開データのみ: e-Gov 法令 API および国土交通省告示データベースから公開情報を取得します。API キーや認証情報は不要です

  • 入力バリデーション: 全ツールの入力パラメータに文字数上限を設定しています(OWASP MCP Top 10 MCP05 対応)

  • SSRF 対策: PDF 取得先を政府ドメイン(www.mlit.go.jp)に限定しています

  • キャッシュ制限: インメモリキャッシュにエントリ数上限と TTL 自動失効を設定し、メモリ枯渇を防止しています

  • 引用検証: verify_citation ツールで AI が生成した法令引用を条文原文と照合できます

データソース

免責事項

本 MCP サーバーは、e-Gov 法令検索および国土交通省告示・通達データベースから取得した情報を提供しますが、掲載情報の正確性・完全性を保証するものではありません。

本ツールの利用に伴って発生した不利益や問題について、開発者は一切の責任を負いません。正確な条文の確認には、必ず官報または法令集の原本を参照してください。

国土交通省は掲載されている情報の正確性については万全を期すよう努力しておりますが、本ページのデータの利用に伴って発生した不利益や問題について、責任を負うものではありません。 — 国土交通省 告示・通達データベース

謝辞

本プロジェクトは tax-law-mcp(MIT License, Copyright (c) 2026 Kentaro Ajisaka)のアーキテクチャおよびコードを参考に開発しました。

ライセンス

MIT

Available Tools

12 tools
analyze_article条文構造解析A
Read-onlyIdempotent

条文の構造を解析し、項数・号数・参照統計・プレビューなどのメタデータをJSON形式で返す。AIが要約・解説を生成する際の素材データとして活用。

NameRequiredDescriptionDefault
law_nameYes法令名(正式名称または略称。例: 建築基準法、建基法)
article_numberYes条文番号(例: 第20条、20)

Output Schema

NameRequiredDescription
captionYes
law_numYes
law_nameYes
structureYes
article_numYes
article_titleYes
structured_dataYes
reference_summaryYes
paragraph_summariesYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety and repeatability profile is covered. The description adds that output is JSON metadata rather than article text, which is useful, but with an output schema present the enumerated return fields add little beyond structured data.

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?

Two compact sentences, front-loaded with the action and output shape, followed by the usage context. Nothing is redundant, though the second sentence is fairly generic guidance.

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

Completeness4/5

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

With an output schema, rich annotations, and fully documented parameters, the description only needs to frame purpose and usage, which it does. It could be stronger by distinguishing itself from the many sibling retrieval tools, but nothing essential to correct invocation 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 description coverage is 100%, and both parameters (law_name, article_number) are documented in the schema with format examples. The description contributes no additional parameter meaning, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: it analyzes the structure of a legal article and returns metadata (paragraph counts, item counts, reference statistics, preview). This clearly differs from siblings that fetch raw text (get_law, search_articles), though the description never names those siblings explicitly.

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

Usage Guidelines3/5

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

It gives an implied usage context — 'use as source material when an AI generates summaries or explanations' — which tells the agent this is a pre-processing step rather than a text-fetching tool. However, it names no alternatives and gives no when-not-to-use condition, so the routing signal remains inferential.

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

check_law_updates改正状況確認B
Read-onlyIdempotent

法令の改正状況をe-Gov APIで確認する。法令名指定で単体チェック、グループ指定でバッチチェック、show_historyで改正履歴表示が可能。

NameRequiredDescriptionDefault
groupNo検証対象の章グループ(例: 1章)。省略時は全プリセットをチェック。
sinceNo基準日(YYYY-MM-DD)。この日より後に公布された改正だけを『改正あり』として報告する。省略時は今日の 12 か月前
law_nameNo法令名または略称(例: 建築基準法、建基法)。単体チェックに使用。
show_historyNotrue で改正履歴の詳細を表示。law_name 指定時のみ有効。

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds that the check is performed against the external e-Gov API, but it does not disclose rate limits, error behavior, or what output is produced.

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?

Two compact sentences with the core purpose front-loaded and the mode distinctions following. No filler, though it is very terse for a four-parameter tool.

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

Completeness3/5

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

With no output schema, the description should ideally hint at the return shape (e.g., what a '改正あり' result contains), but it does not. Annotations cover the safety profile and the schema covers parameters, leaving output format as the notable gap.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (group, since, law_name, show_history) are already documented in the schema. The description restates the law_name/group/show_history usage but adds no syntax, format, or constraint detail beyond the schema.

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

Purpose4/5

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

States a specific verb (確認する) and resource (法令の改正状況), plus the mechanism (e-Gov API). It is clearly distinguishable from read-oriented siblings like get_law or search_law, though it does not explicitly name how it differs from the amendment-related sibling get_kokuji_amendments.

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

Usage Guidelines3/5

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

The description maps the three parameters to three usage modes (law_name=単体チェック, group=バッチチェック, show_history=履歴表示), which is useful implied guidance. However, it offers no explicit when-to-use versus siblings or any when-not/exclusion criteria.

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

get_full_law法令全文取得A
Read-onlyIdempotent

法令の全文を取得する。条番号を指定せず法令全体のテキストを返す。

NameRequiredDescriptionDefault
offsetNo取得開始位置(0から始まる文字位置)。続きの取得時は案内された offset を指定。
law_nameYes法令名(正式名称、略称のいずれか。例: 建築基準法施行令、建基令)
max_charsNo1回に取得する最大文字数(1,000〜48,000)。省略時は30,000文字。

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds that the entire law text is returned rather than a subset, which is useful return-scope context, but it says nothing about pagination/truncation behavior (covered only in the schema) or any rate/permission constraints.

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

Conciseness5/5

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

Two short sentences with zero waste; the core action is front-loaded and the scope clarification follows immediately. Every sentence earns its place.

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?

For a read-only, idempotent retrieval tool with full schema coverage and no output schema, the description is largely sufficient: it states what is returned and at what granularity. It stops short of describing the offset-based continuation flow, but that is adequately handled by the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so law_name, offset, and max_chars are fully documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('法令の全文を取得する') and clarifies scope ('条番号を指定せず法令全体のテキストを返す'), which implicitly separates it from article-level siblings. However, it never names or contrasts with the closely related 'get_law' sibling, so an agent cannot fully disambiguate between the two from the description alone.

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

Usage Guidelines3/5

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

The phrase '条番号を指定せず' implies this tool is for whole-law retrieval as opposed to article-specific tools, but no alternative (e.g., get_law, search_articles) is named and no explicit when-to-use condition is given. Usage is inferable rather than stated.

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

get_kokuji告示取得A
Read-onlyIdempotent

告示名または告示番号(例: 平成28年国土交通省告示第696号、平28国交告696)から、建築基準法が技術基準を委任している告示の全文を取得する。国土交通省の告示データベース(PDF)から取得し、告示名で見つからない場合はe-Gov APIで検索を試みる。番号が国交省 DB にない場合は、その旨を返す。

NameRequiredDescriptionDefault
offsetNo取得開始位置(0から始まる文字位置)。続きの取得時は案内された offset を指定。
max_charsNo1回に取得する本文の最大文字数(1,000〜48,000)。省略時は30,000文字。本文を content と structuredContent.text の両方に含めるため、改正欄と構造化情報も合わせた応答全体が約50,000文字に収まるよう本文ページを減らす。
kokuji_nameYes告示名または告示番号(例: 耐火構造の構造方法を定める件、平成28年国土交通省告示第696号、平28国交告696)。番号が国交省 DB にない場合は、その旨を返す。

Output Schema

NameRequiredDescription
textYes
foundYes
titleYes
offsetYes
sourceYes
db_noticeYes
amendmentsYes
next_offsetYes
total_charsYes
current_titleYes
kokuji_numberYes
housing_bureauYes
document_numberYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the primary data source (MLIT PDF database), the e-Gov fallback, and the explicit not-found message when a number is absent from the MLIT DB.

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 sentences, front-loaded with purpose and input format, then source and fallback. Slightly redundant in restating the not-found behavior that the kokuji_name schema field already carries, but otherwise tight.

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

Completeness4/5

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

With an output schema present, return-value explanation is unnecessary, and the description covers source, fallback, and error case adequately. Pagination via offset/max_chars is left to the schema, which is acceptable given full coverage.

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% and the schema already documents offset, max_chars and kokuji_name with the same examples used in the description. The description adds no new parameter meaning (syntax, formatting, constraints) beyond the schema, so the baseline 3 applies.

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 (建築基準法が技術基準を委任している告示), and names the input forms precisely. It is clearly distinguishable from siblings like get_law, get_full_law and search_law, which operate on laws rather than delegated technical notifications.

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

Usage Guidelines4/5

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

Gives a clear context for use (retrieving full text of delegated technical standards) plus accepted input formats and a documented fallback path (e-Gov API when not found by name). It does not explicitly state when to prefer get_law or search_law over this tool, so it stops short of full routing guidance.

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

get_kokuji_amendments告示の改正一覧A
Read-onlyIdempotent

告示番号または告示名から改正一覧だけを取得する。本文を取得する get_kokuji より軽量。国交省の改正ページに掲載された2018年1月1日以降公布分を対象とする。kokuji_number と kokuji_name はどちらか一つだけ指定する。

NameRequiredDescriptionDefault
kokuji_nameNo告示名(例: 耐火構造の構造方法を定める件)
kokuji_numberNo告示番号(例: 平成12年建設省告示第1399号、平12建告1399)

Output Schema

NameRequiredDescription
textYes
titleYes
amendmentsYes
kokuji_numberYes
housing_bureauYes
document_numberYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely useful scope information the annotations cannot convey: results are limited to amendments published on/after 2018-01-01 and only those listed on the MLIT (国交省) amendment pages. Pagination/return behavior is left to the output schema.

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

Conciseness5/5

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

Four short sentences, front-loaded with the core action, then the sibling comparison, then the data-scope caveat, then the parameter rule. No filler; every sentence carries information.

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 annotations covering safety and an output schema covering return shape, the description supplies exactly the remaining pieces an agent needs: what is returned, the data coverage window, the source, and the parameter selection rule.

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

Parameters4/5

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

Schema coverage is 100% and both params are optional, but the description adds a constraint the schema cannot express: exactly one of the two identifiers must be supplied. That mutual-exclusivity rule is real added meaning beyond the structured fields.

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+resource ('改正一覧だけを取得する') and immediately distinguishes itself from the sibling get_kokuji by noting it is the lighter-weight option that omits the body text. An agent can tell the two apart without opening either 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?

Names the alternative (get_kokuji) and the trade-off (lighter, no body text), and states the selection constraint that exactly one of kokuji_number / kokuji_name must be given. It does not spell out an explicit 'when not to use' case beyond the sibling contrast, so a 4 rather than 5.

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

get_law条文取得A
Read-onlyIdempotent

条番号を指定して法令の条文を取得する。附則・別表にも対応。略称・正式名称のいずれでも指定可能。format=structured で条→項→号の階層構造をJSON形式で取得可能。format=text の上限は、structuredContent を含む応答全体が約5万字に収まる値。長い条の中の項・表の行は find で探し、offset を推測しない。

NameRequiredDescriptionDefault
findNoこの条の本文から探す語。指定すると最初の一致を含む行から本文を返し、一致位置の一覧を matches に入れる。空白は無視し、全角・半角の違いは区別しない。長い条の中の項・表の行を探すときに使い、offset を推測しない。format=text のみ適用。続きは find を外して next_offset を指定。
formatNo出力形式。text: 従来のテキスト形式、structured: 条→項→号の階層を持つJSON構造化形式text
offsetNo本文の取得開始位置(0から始まる文字位置)。続きは案内された offset を指定。format=text のみ適用。
law_nameYes法令名(正式名称、略称のいずれか。例: 建築基準法、建基法)
max_charsNo本文と参照一覧(references)を合わせた最大文字数(1,000〜24,000)。省略時は20,000文字。format=text のみ適用。
article_numberYes条文番号(例: 第20条、20、第6条の2、附則、附則第3条、別表第一)

Output Schema

NameRequiredDescription
findNo
noteNo
formatYes
offsetNo
sourceYes
articleYes
law_numYes
matchesNo
revisionNo
law_titleYes
truncatedNo
next_offsetNo
total_charsNo
matches_totalNo
revision_noteNo
references_totalNo
references_truncatedNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive). The description adds genuinely useful behavior: the ~50,000-character cap on the whole response including structuredContent, the structured JSON hierarchy, and the find/matches continuation pattern. It does not describe auth or rate limits, but adds real context 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.

Conciseness4/5

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

Four dense sentences, purpose front-loaded, each carrying distinct information (scope, format options, size limit, find/offset rule). No filler, though the limit sentence is a bit convoluted.

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?

An output schema exists, so return-shape explanation is unnecessary and the description rightly focuses on format choice, size cap, and pagination via find/offset. Covers what an agent needs to call it correctly, with the only gap being tool-level alternatives.

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% and the per-parameter descriptions are already rich (find semantics, offset, max_chars range, enum for format). The description restates format=text vs structured and the find/offset workflow but adds little syntax or meaning beyond the schema. Baseline 3 is correct.

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?

Specific verb+resource: retrieve a law's provisions by article number, with explicit coverage of 附則・別表 and acceptance of abbreviations or official names. This implicitly separates it from get_full_law (whole law) by keying on a single article, but no sibling is named explicitly, so it stops short of a 5.

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

Usage Guidelines3/5

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

It gives good intra-tool guidance (use find for paragraphs/table rows in long articles, don't guess offset; format=structured for hierarchical JSON), but there is no statement of when to choose this tool over search_articles, search_law, or get_full_law. Usage across siblings is left to inference.

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

get_laws_batch条文一括取得A
Read-onlyIdempotent

複数の法令・条文を一括取得する。各条文をe-Govから個別に条単位取得する。最大20件。上限は、structuredContent を含む応答全体が約5万字に収まる値。長い条(例: 建築基準法施行規則 第1条の3)は get_law で個別に取得。

NameRequiredDescriptionDefault
requestsYes取得対象の条文リスト(最大20件)
max_total_charsNo応答全体のJSONの最大文字数(10,000〜24,000)。省略時は20,000文字。超過分の本文は省略。
max_chars_per_itemNo条文ごとの最大文字数(1,000〜20,000)。省略時は8,000文字。

Output Schema

NameRequiredDescription
noteNo
totalYes
failedYes
omittedNo
resultsYes
successYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld and non-destructive, so the safety profile is covered. The description adds real value beyond them: the 20-item batch cap, the ~50,000-character whole-response ceiling tied to structuredContent, and per-article e-Gov retrieval. It does not describe pagination or partial-failure behavior across the batch.

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?

Four compact sentences with the purpose front-loaded, followed by limits and the alternative routing. Dense but every sentence carries information; no filler.

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?

An output schema exists, so return values need not be explained. The description covers scope, batch cap, character constraints, and the alternative for oversized items, which is sufficient for a batch-read tool; only cross-batch error/partial-result semantics are unaddressed.

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 100%, so the baseline is 3, but the description adds rationale beyond the schema by explaining that the char limit exists to keep the whole response (including structuredContent) under ~50,000 characters. Minor tension between the stated ~50k total and the schema's 24,000 max_total_chars is not resolved.

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+resource (複数の法令・条文を一括取得) and clarifies the retrieval mechanism (each article fetched individually from e-Gov per article). It names the sibling get_law for the long-article case, letting an agent distinguish batch vs. single-article retrieval without opening the schema.

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

Usage Guidelines4/5

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

Gives a clear batch context plus an explicit routing rule: long articles (with a concrete example, 建築基準法施行規則 第1条の3) should use get_law instead. It does not address when to prefer this over get_full_law or search_articles, so no explicit exclusions for other siblings.

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

get_metrics使用量メトリクスA
Read-onlyIdempotent

サーバーの使用量メトリクスを返す(ツール呼び出し回数・APIリクエスト数・キャッシュヒット率・稼働時間)

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
apiYes
cacheYes
toolsYes
uptime_secondsYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds value by naming the metric categories returned, but says nothing about freshness, aggregation window, or scoping. With annotations carrying the safety burden, a 3 is appropriate.

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?

A single front-loaded sentence with the resource first and the payload enumerated in parentheses. Every element earns its place and nothing is padded.

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?

An output schema exists, so return-value structure need not be described, and the description still previews the metric categories. Annotations cover the safety profile. The only gap is the absence of any usage context, which is minor for a zero-parameter read tool.

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?

The tool takes zero parameters, which is the baseline-4 case. The description correctly implies no input is needed, and there is nothing further to document.

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?

Specific verb (返す) plus resource (使用量メトリクス), with an explicit enumeration of what is returned (tool call counts, API requests, cache hit rate, uptime). It is unmistakably distinct from the law-lookup siblings, though it never names or contrasts them, so it falls short of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites or timing (e.g. for monitoring or diagnostics), and no reference to any alternative tool. The agent must infer the use case entirely from the name.

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

search_articles条文本文検索A
Read-onlyIdempotent

条文本文をキーワードで検索する。半角スペース区切りで AND 検索。AND・OR・NOT は演算子ではなく検索語として扱われる。全角スペースは半角に直して送る。*・? のワイルドカードに対応。法令名・略称で絞り込み可能。検索結果は節名と抜粋のみで条番号は返らないため、正確な条文は get_law で確認してください。

NameRequiredDescriptionDefault
limitNo取得する文の数(最大50)
offsetNo検索開始位置(文単位)
keywordYes本文の検索語。半角スペース区切りで AND 検索。AND・OR・NOT は演算子ではなく検索語として扱われる。全角スペースは半角に直して送る。*・? のワイルドカードが使用可能
law_titleNo法令名または略称で絞り込み

Output Schema

NameRequiredDescription
hitsYes
keywordYes
law_titleNo
next_offsetYes
total_countYes
sentence_countYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds genuinely useful behavioral detail: AND/OR/NOT are treated as literal search terms, wildcards are supported, full-width spaces are normalized, and results contain only section names and excerpts. That last point about missing article numbers is exactly the kind of non-obvious behavior an agent needs.

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 purpose is front-loaded, followed by query syntax and then the key caveat about missing article numbers. It is dense and mostly earns its sentences, though the syntax rules restate what the schema already says.

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?

An output schema exists, so return values need not be explained, yet the description still usefully warns that results lack article numbers and points to get_law. Coverage of syntax, filtering, and the key limitation is sufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are documented in the schema. The description's syntax notes (space-delimited AND, wildcard support) duplicate the keyword parameter's schema description verbatim and add no new semantics, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb and resource ('条文本文をキーワードで検索する') and clarifies the scope of results (節名と抜粋のみ, no article numbers). It distinguishes itself from get_law for accurate article text, but never contrasts with the sibling search_law, so the differentiation is only partial.

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

Usage Guidelines4/5

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

It explicitly routes the agent to get_law when exact article text is needed, since search results omit article numbers, and it explains the accepted query syntax. It gives no guidance on when to prefer search_law or suggest_related, so the routing is clear but not exhaustive.

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

search_law法令名検索A
Read-onlyIdempotent

キーワードで建築関連法令を横断検索する。登録済みエイリアスとe-Gov APIの両方を検索する。注意: 検索対象は法令名(タイトル)のみ。条文本文のキーワード検索には search_articles を使用してください。

NameRequiredDescriptionDefault
keywordYes検索キーワード(例: 耐火構造、避難階段、建築確認)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds genuinely useful context beyond them: the search spans both locally registered aliases and an external e-Gov API, which implies a network dependency and possible variability in results. It stops short of describing latency, rate limits, or result count behavior.

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?

Three short sentences, front-loaded with the core action followed by source coverage and then the caveat/alternative. Every sentence carries distinct information with no repetition of the tool name or schema.

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?

For a single-parameter read tool with annotations covering safety and openWorld, the description covers purpose, scope, and the sibling routing decision. The only omission is what the result looks like (law titles/IDs to feed into get_law), which matters mildly for chaining but is not required to invoke correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the parameter itself is documented. The description nonetheless adds a semantic constraint the schema does not encode: the keyword is matched against law titles, not article text, which materially shapes what strings are worth passing. That is real value over the schema.

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 ('キーワードで建築関連法令を横断検索する') and immediately names the scope (law titles only) plus the source coverage (registered aliases and the e-Gov API). It clearly distinguishes itself from search_articles, which operates on article bodies.

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?

Explicitly states the exclusion ('検索対象は法令名(タイトル)のみ') and routes the agent to the correct sibling for the other case ('条文本文のキーワード検索には search_articles を使用してください'). The when/when-not decision is fully specified.

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

verify_citation引用検証A
Read-onlyIdempotent

AIの回答に含まれる法令引用を検証する。条文の存在確認、テキスト照合による正確性チェックが可能。最大10件。

NameRequiredDescriptionDefault
citationsYes検証対象の引用リスト(最大10件)

Output Schema

NameRequiredDescription
errorYes
totalYes
resultsYes
mismatchYes
verifiedYes
not_foundYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: the batch ceiling of 10 items and the fact that accuracy checking is done via text matching (as opposed to mere existence lookup). It does not discuss failure behavior for unverifiable citations, 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.

Conciseness5/5

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

Three short clauses, no filler, and the core action is front-loaded before the capability details and the limit. Every sentence carries information an agent needs.

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

Completeness4/5

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

With an output schema present, the description needn't explain return values, and it covers purpose, both verification modes, and the batch limit for a single-parameter tool. Slightly incomplete on what happens when a citation cannot be verified, but nothing critical to correct invocation 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 description coverage is 100% for the single 'citations' parameter, including per-field descriptions and the omission semantics of claimed_text, so the baseline is 3. The description's only added datum is the repeated 10-item limit, which the schema already enforces via maxItems.

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?

The description names a specific verb and resource (verify legal citations contained in AI answers) and enumerates the two verification modes: existence confirmation and text-matching accuracy. This clearly separates it from siblings like get_law or search_articles, which retrieve rather than verify. It falls short of 5 only because it never names an alternative sibling to route against.

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

Usage Guidelines3/5

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

Usage is implied by the phrase 'AIの回答に含まれる法令引用' — the tool is for checking citations produced by a model — but there is no explicit when-to-use/when-not guidance and no named alternative for adjacent tasks. An agent can infer the context but must guess at the boundary with analyze_article or get_law.

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. 12 tool updatesv1.11.2
    • Changedanalyze_article2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "definitions": {
        +    "__schema0": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "subitem_num": {
        +          "type": "string"
        +        },
        +        "subitem_sentence": {
        +          "type": "string"
        +        },
        +        "subitem_title": {
        +          "type": "string"
        +        },
        +        "subitems": {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "subitem_num",
        +        "subitem_title",
        +        "subitem_sentence",
        +        "subitems"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "article_num": {
        +      "type": "string"
        +    },
        +    "article_title": {
        +      "type": "string"
        +    },
        +    "caption": {
        +      "type": "string"
        +    },
        +    "law_name": {
        +      "type": "string"
        +    },
        +    "law_num": {
        +      "type": "string"
        +    },
        +    "paragraph_summaries": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "item_count": {
        +            "type": "number"
        +          },
        +          "paragraph_num": {
        +            "type": "string"
        +          },
        +          "preview": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "paragraph_num",
        +          "preview",
        +          "item_count"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "reference_summary": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "cross_law": {
        +          "type": "number"
        +        },
        +        "delegation": {
        +          "type": "number"
        +        },
        +        "referenced_laws": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "relative": {
        +          "type": "number"
        +        },
        +        "same_law": {
        +          "type": "number"
        +        },
        +        "total": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "total",
        +        "cross_law",
        +        "same_law",
        +        "relative",
        +        "delegation",
        +        "referenced_laws"
        +      ],
        +      "type": "object"
        +    },
        +    "structure": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "item_count": {
        +          "type": "number"
        +        },
        +        "paragraph_count": {
        +          "type": "number"
        +        },
        +        "subitem_count": {
        +          "type": "number"
        +        },
        +        "total_characters": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "paragraph_count",
        +        "item_count",
        +        "subitem_count",
        +        "total_characters"
        +      ],
        +      "type": "object"
        +    },
        +    "structured_data": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "article_caption": {
        +          "type": "string"
        +        },
        +        "article_num": {
        +          "type": "string"
        +        },
        +        "article_title": {
        +          "type": "string"
        +        },
        +        "paragraphs": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "items": {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "item_num": {
        +                      "type": "string"
        +                    },
        +                    "item_sentence": {
        +                      "type": "string"
        +                    },
        +                    "item_title": {
        +                      "type": "string"
        +                    },
        +                    "subitems": {
        +                      "items": {
        +                        "$ref": "#/definitions/__schema0"
        +                      },
        +                      "type": "array"
        +                    }
        +                  },
        +                  "required": [
        +                    "item_num",
        +                    "item_title",
        +                    "item_sentence",
        +                    "subitems"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "paragraph_num": {
        +                "type": "string"
        +              },
        +              "paragraph_sentence": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "paragraph_num",
        +              "paragraph_sentence",
        +              "items"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "references": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "raw_text": {
        +                "type": "string"
        +              },
        +              "ref_type": {
        +                "enum": [
        +                  "same_law",
        +                  "cross_law",
        +                  "relative",
        +                  "delegation",
        +                  "unknown"
        +                ],
        +                "type": "string"
        +              },
        +              "target_article": {
        +                "type": "string"
        +              },
        +              "target_item": {
        +                "type": "string"
        +              },
        +              "target_law": {
        +                "type": "string"
        +              },
        +              "target_paragraph": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "raw_text",
        +              "ref_type"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "article_num",
        +        "article_caption",
        +        "article_title",
        +        "paragraphs"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "law_name",
        +    "law_num",
        +    "article_num",
        +    "article_title",
        +    "caption",
        +    "structure",
        +    "paragraph_summaries",
        +    "reference_summary",
        +    "structured_data"
        +  ],
        +  "type": "object"
        +}
    • Changedcheck_law_updates2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / since
        Added value: +{
        +  "description": "基準日(YYYY-MM-DD)。この日より後に公布された改正だけを『改正あり』として報告する。省略時は今日の 12 か月前",
        +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
        +  "type": "string"
        +}
    • Changedget_full_law3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / max_chars
        Added value: +{
        +  "default": 30000,
        +  "description": "1回に取得する最大文字数(1,000〜48,000)。省略時は30,000文字。",
        +  "maximum": 48000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "取得開始位置(0から始まる文字位置)。続きの取得時は案内された offset を指定。",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changedget_kokuji5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / kokuji_name / description
        Previous value: -"告示名(例: 耐火構造の構造方法を定める件、不燃材料を定める件)"New value: +"告示名または告示番号(例: 耐火構造の構造方法を定める件、平成28年国土交通省告示第696号、平28国交告696)。番号が国交省 DB にない場合は、その旨を返す。"
      • addedInput schema / properties / max_chars
        Added value: +{
        +  "default": 30000,
        +  "description": "1回に取得する本文の最大文字数(1,000〜48,000)。省略時は30,000文字。本文を content と structuredContent.text の両方に含めるため、改正欄と構造化情報も合わせた応答全体が約50,000文字に収まるよう本文ページを減らす。",
        +  "maximum": 48000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "取得開始位置(0から始まる文字位置)。続きの取得時は案内された offset を指定。",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "amendments": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "coverage": {
        +              "type": "string"
        +            },
        +            "items": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "documents": {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "label": {
        +                          "type": "string"
        +                        },
        +                        "url": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "label",
        +                        "url"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "effective_note": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "effective_on": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "matched_by": {
        +                    "enum": [
        +                      "pdf",
        +                      "page",
        +                      "title"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "number": {
        +                    "type": "string"
        +                  },
        +                  "promulgated_on": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "title": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "number",
        +                  "title",
        +                  "promulgated_on",
        +                  "effective_on",
        +                  "effective_note",
        +                  "documents",
        +                  "matched_by"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "omitted_count": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "source_url": {
        +              "type": "string"
        +            },
        +            "status": {
        +              "enum": [
        +                "ok",
        +                "unavailable"
        +              ],
        +              "type": "string"
        +            },
        +            "unresolved_count": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "status",
        +            "source_url",
        +            "coverage",
        +            "items",
        +            "omitted_count",
        +            "unresolved_count"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "current_title": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "db_notice": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "document_number": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "found": {
        +      "type": "boolean"
        +    },
        +    "housing_bureau": {
        +      "type": "boolean"
        +    },
        +    "kokuji_number": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "next_offset": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "offset": {
        +      "type": "number"
        +    },
        +    "source": {
        +      "enum": [
        +        "mlit_db",
        +        "mlit_pdf",
        +        "egov",
        +        "not_found"
        +      ],
        +      "type": "string"
        +    },
        +    "text": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_chars": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "text",
        +    "found",
        +    "title",
        +    "current_title",
        +    "document_number",
        +    "kokuji_number",
        +    "source",
        +    "housing_bureau",
        +    "db_notice",
        +    "amendments",
        +    "offset",
        +    "next_offset",
        +    "total_chars"
        +  ],
        +  "type": "object"
        +}
    • Addedget_kokuji_amendments
    • Changedget_law5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / find
        Added value: +{
        +  "description": "この条の本文から探す語。指定すると最初の一致を含む行から本文を返し、一致位置の一覧を matches に入れる。空白は無視し、全角・半角の違いは区別しない。長い条の中の項・表の行を探すときに使い、offset を推測しない。format=text のみ適用。続きは find を外して next_offset を指定。",
        +  "maxLength": 100,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / max_chars
        Added value: +{
        +  "default": 20000,
        +  "description": "本文と参照一覧(references)を合わせた最大文字数(1,000〜24,000)。省略時は20,000文字。format=text のみ適用。",
        +  "maximum": 24000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "本文の取得開始位置(0から始まる文字位置)。続きは案内された offset を指定。format=text のみ適用。",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "definitions": {
        +    "__schema0": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "subitem_num": {
        +          "type": "string"
        +        },
        +        "subitem_sentence": {
        +          "type": "string"
        +        },
        +        "subitem_title": {
        +          "type": "string"
        +        },
        +        "subitems": {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "subitem_num",
        +        "subitem_title",
        +        "subitem_sentence",
        +        "subitems"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "article": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "article_caption": {
        +              "type": "string"
        +            },
        +            "article_num": {
        +              "type": "string"
        +            },
        +            "article_title": {
        +              "type": "string"
        +            },
        +            "references": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "raw_text": {
        +                    "type": "string"
        +                  },
        +                  "ref_type": {
        +                    "enum": [
        +                      "same_law",
        +                      "cross_law",
        +                      "relative",
        +                      "delegation",
        +                      "unknown"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "target_article": {
        +                    "type": "string"
        +                  },
        +                  "target_item": {
        +                    "type": "string"
        +                  },
        +                  "target_law": {
        +                    "type": "string"
        +                  },
        +                  "target_paragraph": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "raw_text",
        +                  "ref_type"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "text": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "article_num",
        +            "article_caption",
        +            "article_title",
        +            "text"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "article_caption": {
        +              "type": "string"
        +            },
        +            "article_num": {
        +              "type": "string"
        +            },
        +            "article_title": {
        +              "type": "string"
        +            },
        +            "paragraphs": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "items": {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "item_num": {
        +                          "type": "string"
        +                        },
        +                        "item_sentence": {
        +                          "type": "string"
        +                        },
        +                        "item_title": {
        +                          "type": "string"
        +                        },
        +                        "subitems": {
        +                          "items": {
        +                            "$ref": "#/definitions/__schema0"
        +                          },
        +                          "type": "array"
        +                        }
        +                      },
        +                      "required": [
        +                        "item_num",
        +                        "item_title",
        +                        "item_sentence",
        +                        "subitems"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "paragraph_num": {
        +                    "type": "string"
        +                  },
        +                  "paragraph_sentence": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "paragraph_num",
        +                  "paragraph_sentence",
        +                  "items"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "references": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "raw_text": {
        +                    "type": "string"
        +                  },
        +                  "ref_type": {
        +                    "enum": [
        +                      "same_law",
        +                      "cross_law",
        +                      "relative",
        +                      "delegation",
        +                      "unknown"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "target_article": {
        +                    "type": "string"
        +                  },
        +                  "target_item": {
        +                    "type": "string"
        +                  },
        +                  "target_law": {
        +                    "type": "string"
        +                  },
        +                  "target_paragraph": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "raw_text",
        +                  "ref_type"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "required": [
        +            "article_num",
        +            "article_caption",
        +            "article_title",
        +            "paragraphs"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "find": {
        +      "type": "string"
        +    },
        +    "format": {
        +      "enum": [
        +        "text",
        +        "structured"
        +      ],
        +      "type": "string"
        +    },
        +    "law_num": {
        +      "type": "string"
        +    },
        +    "law_title": {
        +      "type": "string"
        +    },
        +    "matches": {
        +      "items": {
        +        "type": "number"
        +      },
        +      "type": "array"
        +    },
        +    "matches_total": {
        +      "type": "number"
        +    },
        +    "next_offset": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "offset": {
        +      "type": "number"
        +    },
        +    "references_total": {
        +      "type": "number"
        +    },
        +    "references_truncated": {
        +      "type": "boolean"
        +    },
        +    "revision": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amendment_enforcement_date": {
        +          "type": "string"
        +        },
        +        "current_revision_status": {
        +          "type": "string"
        +        },
        +        "law_revision_id": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "law_revision_id",
        +        "amendment_enforcement_date",
        +        "current_revision_status"
        +      ],
        +      "type": "object"
        +    },
        +    "revision_note": {
        +      "type": "string"
        +    },
        +    "source": {
        +      "const": "e-Gov法令検索",
        +      "type": "string"
        +    },
        +    "total_chars": {
        +      "type": "number"
        +    },
        +    "truncated": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "law_title",
        +    "law_num",
        +    "source",
        +    "format",
        +    "article"
        +  ],
        +  "type": "object"
        +}
    • Changedget_laws_batch5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / max_chars_per_item
        Added value: +{
        +  "default": 8000,
        +  "description": "条文ごとの最大文字数(1,000〜20,000)。省略時は8,000文字。",
        +  "maximum": 20000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • addedInput schema / properties / max_total_chars
        Added value: +{
        +  "default": 20000,
        +  "description": "応答全体のJSONの最大文字数(10,000〜24,000)。省略時は20,000文字。超過分の本文は省略。",
        +  "maximum": 24000,
        +  "minimum": 10000,
        +  "type": "integer"
        +}
      • removedInput schema / properties / requests / items / additionalProperties
        Removed value: -false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "definitions": {
        +    "__schema0": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "subitem_num": {
        +          "type": "string"
        +        },
        +        "subitem_sentence": {
        +          "type": "string"
        +        },
        +        "subitem_title": {
        +          "type": "string"
        +        },
        +        "subitems": {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "subitem_num",
        +        "subitem_title",
        +        "subitem_sentence",
        +        "subitems"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "failed": {
        +      "type": "number"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "omitted": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "article_number": {
        +            "type": "string"
        +          },
        +          "law_name": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "law_name",
        +          "article_number"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "results": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "article_number": {
        +            "type": "string"
        +          },
        +          "error_message": {
        +            "type": "string"
        +          },
        +          "law_name": {
        +            "type": "string"
        +          },
        +          "next_offset": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "note": {
        +            "type": "string"
        +          },
        +          "omitted": {
        +            "type": "boolean"
        +          },
        +          "revision_note": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "success",
        +              "law_not_found",
        +              "article_not_found",
        +              "error"
        +            ],
        +            "type": "string"
        +          },
        +          "structured": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "article_caption": {
        +                "type": "string"
        +              },
        +              "article_num": {
        +                "type": "string"
        +              },
        +              "article_title": {
        +                "type": "string"
        +              },
        +              "paragraphs": {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "items": {
        +                      "items": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "item_num": {
        +                            "type": "string"
        +                          },
        +                          "item_sentence": {
        +                            "type": "string"
        +                          },
        +                          "item_title": {
        +                            "type": "string"
        +                          },
        +                          "subitems": {
        +                            "items": {
        +                              "$ref": "#/definitions/__schema0"
        +                            },
        +                            "type": "array"
        +                          }
        +                        },
        +                        "required": [
        +                          "item_num",
        +                          "item_title",
        +                          "item_sentence",
        +                          "subitems"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "paragraph_num": {
        +                      "type": "string"
        +                    },
        +                    "paragraph_sentence": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "paragraph_num",
        +                    "paragraph_sentence",
        +                    "items"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "references": {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "raw_text": {
        +                      "type": "string"
        +                    },
        +                    "ref_type": {
        +                      "enum": [
        +                        "same_law",
        +                        "cross_law",
        +                        "relative",
        +                        "delegation",
        +                        "unknown"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "target_article": {
        +                      "type": "string"
        +                    },
        +                    "target_item": {
        +                      "type": "string"
        +                    },
        +                    "target_law": {
        +                      "type": "string"
        +                    },
        +                    "target_paragraph": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "raw_text",
        +                    "ref_type"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              }
        +            },
        +            "required": [
        +              "article_num",
        +              "article_caption",
        +              "article_title",
        +              "paragraphs"
        +            ],
        +            "type": "object"
        +          },
        +          "text": {
        +            "type": "string"
        +          },
        +          "total_chars": {
        +            "type": "number"
        +          },
        +          "truncated": {
        +            "type": "boolean"
        +          }
        +        },
        +        "required": [
        +          "law_name",
        +          "article_number",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "success": {
        +      "type": "number"
        +    },
        +    "total": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "success",
        +    "failed",
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Changedget_metrics2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "api": {
        +      "additionalProperties": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "avg_ms": {
        +            "type": "number"
        +          },
        +          "error_rate": {
        +            "type": "string"
        +          },
        +          "errors": {
        +            "type": "number"
        +          },
        +          "requests": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "requests",
        +          "avg_ms",
        +          "errors",
        +          "error_rate"
        +        ],
        +        "type": "object"
        +      },
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "cache": {
        +      "additionalProperties": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "hit_rate": {
        +            "type": "string"
        +          },
        +          "hits": {
        +            "type": "number"
        +          },
        +          "misses": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "hits",
        +          "misses",
        +          "hit_rate"
        +        ],
        +        "type": "object"
        +      },
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "tools": {
        +      "additionalProperties": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "avg_ms": {
        +            "type": "number"
        +          },
        +          "calls": {
        +            "type": "number"
        +          },
        +          "errors": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "calls",
        +          "avg_ms",
        +          "errors"
        +        ],
        +        "type": "object"
        +      },
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "uptime_seconds": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "uptime_seconds",
        +    "tools",
        +    "api",
        +    "cache"
        +  ],
        +  "type": "object"
        +}
    • Addedsearch_articles
    • Changedsearch_law1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsuggest_related1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedverify_citation3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / citations / items / additionalProperties
        Removed value: -false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "type": "number"
        +    },
        +    "mismatch": {
        +      "type": "number"
        +    },
        +    "not_found": {
        +      "type": "number"
        +    },
        +    "results": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "actual_text": {
        +            "type": "string"
        +          },
        +          "article_number": {
        +            "type": "string"
        +          },
        +          "error_message": {
        +            "type": "string"
        +          },
        +          "law_name": {
        +            "type": "string"
        +          },
        +          "match_score": {
        +            "type": "number"
        +          },
        +          "mismatch_detail": {
        +            "type": "string"
        +          },
        +          "status": {
        +            "enum": [
        +              "verified",
        +              "mismatch",
        +              "article_not_found",
        +              "law_not_found",
        +              "error"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "law_name",
        +          "article_number",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total": {
        +      "type": "number"
        +    },
        +    "verified": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "verified",
        +    "mismatch",
        +    "not_found",
        +    "error",
        +    "results"
        +  ],
        +  "type": "object"
        +}
  2. 10 tool updatesv1.7.0
    • First observedanalyze_article
    • First observedcheck_law_updates
    • First observedget_full_law
    • First observedget_kokuji
    • First observedget_law
    • First observedget_laws_batch
    • First observedget_metrics
    • First observedsearch_law
    • First observedsuggest_related
    • First observedverify_citation

TDQS

A4/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct resource and action: article retrieval, full-law retrieval, law-title search, article-text search, kokuji retrieval, amendment listing, update checks, batch retrieval, citation verification, structural analysis, related-reference suggestion, and server metrics. Descriptions explicitly clarify potentially overlapping pairs such as search_law vs. search_articles and get_law vs. get_full_law.

Naming Consistency5/5

All 12 tools use lowercase snake_case with predictable verb-led patterns (get_, search_, check_, verify_, analyze_, suggest_), and no mixed conventions are present. Minor variations like get_full_law, get_laws_batch, and get_kokuji_amendments remain readable and consistent with the overall scheme.

Tool Count5/5

12 tools is well-scoped for a legal-research MCP covering retrieval, search, update checking, verification, and analysis. The count stays within a reasonable range and each tool has a plausible role, even though get_metrics is ancillary.

Completeness4/5

The surface covers article/full-law retrieval, title and full-text search, kokuji retrieval and amendments, update history, batch retrieval, citation verification, and article analysis. Minor gaps remain: no tool to list available laws/aliases, no keyword search over kokuji contents, and citation verification is capped at 10 items, but core legal workflows are supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables intelligent search and retrieval of Japanese legal statutes through the e-Gov API. Supports smart lookup of laws and articles with abbreviation recognition, batch processing, and multi-tier caching for high-performance legal research.
    8
    15
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying Japanese national laws and ordinances via the e-Gov Law API, allowing AI agents to access legal data through natural language questions.
    181 npm
    MIT