mcpField
H
Hawaii Code

Hawaii Code

リモート
pipeworx.io法務・行政02 日前に更新
リポジトリ公式サイト

Hawaii Code について

Hawaii Codeは、ハワイ州改正法典を検索するMCPサーバーです。法令調査や過去の条文確認に向け、引用番号検索、公式見出しによる検索、改正履歴、1999年以降の年次版に対応します。

主な機能

  1. 01引用番号から法令全文を取得
  2. 02公式見出しでトピックを検索
  3. 03改正・制定履歴を抽出
  4. 041999年以降の過去版を検索

活用シーン

  1. 01引用番号から州法を確認
  2. 02公式見出しを使ってテーマを検索
  3. 03過去の条文や改正を比較

MCP 対応

法令検索とトピック検索のツールをMCPクライアントに提供します。法令の結果には改正履歴を含められ、年を指定して過去の条文を取得できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://gateway.pipeworx.io/hawaii-code/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

@pipeworx/hawaii-code

ハワイ改正法(HRS)— 引用番号または公式の見出し(トピック検索)で州法を検索できます。改正・制定履歴を本文中に含み、1999年まで遡る年別アーカイブも利用できます。キーは不要です。

Pipeworx の一部です。AI エージェントを1881以上のライブデータソースに接続するMCPゲートウェイです。独立した非公式インテグレーションであり、上流プロバイダーとは提携、承認、公開のいずれも行っていません。

ツール

  • hi_statute(citation, year?) — 引用番号で指定したHRS条項の全文を取得します(「707-701」は第1級殺人、「521-44」は住宅賃貸借法に基づく家主の敷金義務です)。 議会の末尾にある「[L 1972, c 9, ...]」という会期法の角括弧から解析した、公式の見出し、章の文脈、改正・制定履歴が含まれます。year(1999~2025)を指定すると、現行の条文の代わりに、その年の同じ条項のアーカイブ版を取得します。
  • hi_search(query, limit?) — 議会の公式な条項および章の見出し(法令本文全体ではありません。詳細は以下を参照)を対象にトピック/キーワード検索を行い、一致する引用番号を返します。

認証

キーは不要です。

調査時の落とし穴には当てはまりませんでした — 実際には壁ではありませんでした

8月の調査では「Hawaii (403)」と記録して、それ以上の確認をしませんでした。さらに調べると、議会の法令サイト(www.capitol.hawaii.gov/hrscurrent/)はCloudflareの背後にあり、WAFはこのチームのノートパソコン/オフィスのIPからのすべてのリクエストに対して、「Sorry, you have been blocked」というハード403を返していました。完全な実際のChromeヘッダーセットを含め、UA/Accept/Accept-Languageの組み合わせを12通り試しても、成功は0回でした。これは説明されていた落とし穴と一致します。

しかし、エッジプローブの結果は異なりました。本番Cloudflareアカウント上の使い捨てのwrangler dev --remote Workerで同じURLを取得したところ、キャッシュのHITとMISSのどちらでも、実際のページを12種類取得でき、ブロックは一度もなく、毎回正常な200レスポンスが返されました。これはoscn.net/oklahoma-codeのケース(Workerはブロックされ、ブラウザーは問題なし)とは逆です。ここではCloudflareのWorkerがアクセスできるクライアントで、ノートパソコンはアクセスできません。ライブゲートウェイ自体がCloudflare Workerなので、エグレスリレーも特別なヘッダーもBYOKも不要です。ゲートウェイから通常のfetch()を実行するだけで、サイトに直接アクセスできます。このパックのsrc/index.tsヘッダーにプローブの全記録があります。このファイルの目的は、調査で「403」を見て反射的にリレーを使おうとする次の人のために、結論を記録しておくことだけです。

統合インデックスも検索APIもありません — 章ごとに目次を1回取得し、一度だけ生成します

hrscurrent/は単純なIISディレクトリツリーで、条項ごとに1つのファイルがあります。

/hrscurrent/Vol{NN}_Ch{range}/HRS{chapterNum}/HRS_{chapterNum}-{section}.htm

各章のディレクトリには、追加ファイルがちょうど1つあります。HRS_{chapterNum}-.htmというファイルで、その章の公式目次です。「CHAPTER NNN」という見出し、章の名称、公式の見出し付き条項番号がすべて記載されています。章ごとに1回(計1,108回)取得すれば、引用番号と見出しのインデックス全体を生成できます。hi_searchは生成済みのテーブルをすべてメモリー上で読み取ります。hi_statuteは生成済みのテーブルで章を特定してから、要求された条項のファイル名を予測してエンコードし、ライブで取得します。エンコードされた推測で解決できない場合は、ライブのディレクトリ一覧にフォールバックします(最後に生成して以降に追加・番号変更された条項や、エンコーダーが予測していない小数点/文字サフィックス形式の条項など)。生成済みのテーブルに法令本文が含まれることはありません。

ベイク出力を実際に比較して見つかった、TOC 解析の落とし穴3つ
  1. 空行の区切りの直前にあるセクションが、続きのテキストだけでなく丸ごと黙って欠落していました。空行の処理で、処理中のセクションを出力に追加しないままリセットしていました。これは最もよくあるパターンです(すべての「Part」見出しの直前にある最後のセクション、および各章の最後のセクション)。そのため、各所でループが current をリセットするたびにフラッシュ処理を追加するまでは、最初のベイクで全体の約10件に1件のセクションが黙って失われていました(確認済み:「521-11」と「414-1」がどちらも欠落)。
  2. 廃止されたセクションが連続して並ぶと、1行ずつではなく1行にまとめて表示されます。例:「27-12, 13 Repealed」や「27-21, 21.1, 21.2, 21.3 Repealed」(章27で実際に確認済み)。章番号が付くのは最初の番号だけです。これを処理しないと、その行全体が「続きのテキスト」として扱われ、直前の実際のセクションのキャッチラインが黙って壊れます。
  3. 実際のセクション一覧の後に、相互参照の付録が追加される章がいくつかあります。「DERIVATION TABLE OF CHAPTER NNN FROM 」(第414章のModel Business Corporation Actとの相互参照では、実際に「414-1 1.01」と表示されます。これはセクション引用のパターンに一致し、実際の「414-1 Short title」の行を黙って上書きしていました)か、見出しがまったくない、プレーンな列形式の番号振り直し/処分表のどちらかです(第634章)。どちらも実際のセクション一覧では使われない XNotes/XNotesHeading CSSクラスに必ず含まれるため、パーサーはそのようなブロックの最初で停止します。ただし、その章自体の見出しを通過した後に限ります。Titleの先頭にある章(例:第21章)は、章自体の「CHAPTER 21」見出しが現れる前に、Titleレベルの章一覧と「Cross References」ブロックで始まります。そこで最初のXNotesブロックで無条件に停止すると、章の実際の内容がすべて破棄されてしまいます。
4つ目の落とし穴:TOCではなく、SECTIONページ自体にあります

見出しとセクションの冒頭の文は、同じ <p> ブロックに含まれていることがよくあります。HRSでは、<b>§707-701 Murder...</b> (1) A person commits... のように、2つの段落ではなく1つの段落として記述されています。段落全体をフラット化したテキストに見出しの正規表現を適用すると、冒頭の文まで解析済みの catchline に取り込まれ、本文から失われます(実際に確認済み:初期バージョンの hi_statute('707-701') は、「(1) A person commits the offense of murder in the first degree if the person intentionally or knowingly causes the death of:」ではなく、「(a) More than one person...」から始まるテキストを返していました)。生のブロック内にある最初の <b>...</b> の範囲内だけから見出しを読み取り、同じブロック内の閉じタグ以降のテキストを本文の最初の部分として扱うように修正しました。

更新手順

Hawaiiで法典の再編が行われるたびに、ベイクスクリプトを再実行してください(通常は年1回、立法会期の制定法の編纂後です)。

node mcps/hawaii-code/scripts/bake-index.mjs --relay <url> > mcps/hawaii-code/src/hi-index-data.ts

WAFがブロックするネットワークから実行する場合、--relay には稼働中のパススルーWorker(GET /?raw=1&url=<target> → fetch(target) のバイト列をそのまま返す)を指定する必要があります。この環境のラップトップでは必要ですが、本番ゲートウェイでは不要です。巻数が10未満、章数が500未満、またはセクション数が10,000未満の場合は、黙って処理を続けずにエラーになります。いずれの場合も、Codeが縮小したのではなく、サイトのマークアップが変更されたことを意味するためです。

文字コード — hrscurrent は UTF-8、過去のアーカイブは異なります

/hrsarchive/hrs{YYYY}/(1999〜2025 年の稼働を確認済み。ルートが異なるだけで、同じディレクトリ構成です)では、過去年分が windows-1252 で配信されます。文字コードは HTML の <meta> タグにのみ宣言され、HTTP ヘッダーには含まれません。どのページも一律に UTF-8 としてデコードすると、アーカイブページの §、em ダッシュ、曲線引用符がすべて気付かないうちに文字化けします。これは、共有エグレスリレー経由で oscn.net をかつて破損させたのと同種のバグです(fleet #2742)。sniffAndDecode は、デコーダーを選ぶ前に生のバイト列から <meta charset> 宣言を読み取ります。これは現行・過去のどちらのページを取得するときも行われます。

「見つからない」ページは HTTP 200 であり、404 ではありません

存在しない引用を指定すると、HTTP 200 とサイト独自の汎用 IIS/ASP.NET 404 ページ(charset=iso-8859-2、/screen.css)が返されます。404 ステータスでも、法令のテンプレートでもありません。ステータスコードだけを確認すると、存在しない引用をすべて、解析対象がないにもかかわらず通信成功として扱ってしまいます。isNotFoundPage はこれを、実際の解析失敗(法令のテンプレート自体は存在し、WordSection1/hrs.css があるものの、見出しの正規表現に一致せず、黙って処理を続けず明確にエラーになります)や、Cloudflare のブロックページ(こちらも明確にエラーになります。isBlockedPage を参照してください。このサイトの WAF は 2xx のチャレンジではなく、ハード 403 を返しますが、多層防御として用意されています)と区別します。

4 つの機能 — すべて利用可能

  • 引用の検索 — 利用可能(hi_statute)。
  • トピック/キーワード検索 — 利用可能(hi_search)。ただし、法令本文全体ではなく、公式の CATCHLINE に一致します。Hawaii は法令本文の全文検索を公開していません(実際に確認済み)。「landlord」のようなクエリでは、章 521 の「Landlord's remedies for failure by tenant to pay rent」など、15 件以上の CATCHLINE が直接表示され、章題も検索対象に含めると一致件数は合計 80 件以上になります。
  • 改正/制定履歴 — 利用可能。本文に含まれています。改正されたことのある現行 HRS の各条項では、本文の末尾に [L 1972, c 9, pt of §1; am L 1986, c 314, §49; ...] の形式の括弧が付き、改正ごとに 1 件の session law が記載されます。hi_statute はこの部分を抽出して amendments_history に分割するため、text の中に埋もれたままにはなりません。このような括弧のない条項についても、フィールドを省略せず、その旨を明示します。
  • 過去の版 — 1999 年まで遡って利用可能です。hi_statute({citation, year}) は /hrsarchive/hrs{YYYY}/ 配下にある同じツリーから取得します。殺人に関する HRS 707-701 の 2015 年時点の内容を実際に取得して動作を確認済みです。当時の条文は現行より短く、家庭裁判所の証人に関する状況を追加した 2016 年の改正より前のものです。

引用形式

Hawaii では章番号と条項番号で引用します。例:「707-701」(第 707 章、第 701 条:第一級殺人)、「521-44」(第 521 章、第 44 条:保証金)。章番号には、追加された章を表す文字の接尾辞が付くことがあります(「502C-1」)。条項番号には小数や末尾の文字が付くことがあります(「69.5」、「21.6」)。hi_statute は特定の接尾辞形式を要求せず、組み込みの章テーブルを使って引用全体を解決します。

データソース

  • https://www.capitol.hawaii.gov/hrscurrent/ — 現行の Hawaii Revised Statutes。プレーンなディレクトリツリーで、条項ごとに 1 ファイル、章ごとに 1 つの目次ページがあります。src/hi-index-data.ts に一度だけ組み込みます(章、引用、CATCHLINE のみで、法令本文は含みません)。hi_statute は呼び出しごとに、呼び出し元が指定した条項ページ 1 つをライブで取得します。
  • https://www.capitol.hawaii.gov/hrsarchive/hrs{YYYY}/ — 1999〜2025 年の過去年分について、同じツリーを提供します。ライブで取得し、組み込みデータには含めません。

どちらも、キー不要のプレーンなサーバーレンダリング HTML で、ログインも JavaScript も不要です。サイトの Cloudflare WAF はこの fleet 自体のノート PC/オフィスネットワークをブロックします(上記を参照)。ライブゲートウェイは Cloudflare Worker 自体であり、影響を受けません。

クイックスタート

MCP クライアント(Claude Desktop、Cursor、Windsurf など)に追加します。

{
  "mcpServers": {
    "hawaii-code": {
      "url": "https://gateway.pipeworx.io/hawaii-code/mcp"
    }
  }
}
このエンドポイントが実際に提供するもの

https://gateway.pipeworx.io/hawaii-code/mcp の tools/list は、上の表にあるツールに加えて、共有の Pipeworx メタツールである ask_pipeworx、 discover_tools、search_within、remember/recall など、ゲートウェイ全体で使えるツール群も返します。そのため、表示されるツール数はこの表より多くなります。現在、単一パックのエンドポイントには、パック固有のツールとともに約 30 個の共有ツールが表示されます。接続の initialize レスポンスに正確な範囲が記載されており、その日の状況を確認する際の正式な情報源です。

これは意図的な設計であり、偶然の多重化ではありません。メタツールを使えば、対象パックで扱っていない質問にも、カタログ全体を横断してルーティングする ask_pipeworx を介して回答できます。そのため、2 つ目の MCP サーバーを追加する必要はありません。現時点では、メタツールを含めずにパックのエンドポイントをマウントする方法はありません。追加のスキーマによるコンテキスト消費が、ルーティングの利点を上回る場合は、複数のパックエンドポイントではなく、フルゲートウェイに一度だけ接続してください。

または、フル Pipeworx ゲートウェイに接続すると、このパックだけでなく、すべてのパックのツールが直接一覧表示されます。

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://gateway.pipeworx.io/mcp"
    }
  }
}

どちらの URL も、同じゲートウェイと同じ 1881 以上のデータソースに接続します。違いは、どのパックのツールが直接一覧表示されるかだけです。どちらからでも、ask_pipeworx を使ってすべてのツールにアクセスできます。

MCP クライアントをお持ちでない場合:HTTP 経由で呼び出す

curl -X POST https://gateway.pipeworx.io/v1/tools/hi_statute \
  -H 'Content-Type: application/json' \
  -d '{"citation":"707-701"}'

最初の呼び出しにはアカウントは必要ありません。任意のツールを確認するには、GET https://gateway.pipeworx.io/v1/tools/hi_statute を実行します。ツールを検索するには、{"query":"..."} を指定して POST https://gateway.pipeworx.io/v1/tools/search_packs を実行します。

スタンドアロン(ゲートウェイアカウント不要)

このパッケージは、ローカルの stdio MCP サーバーとしても実行できます。Pipeworx アカウントも、ゲートウェイへの往復通信も必要ありません。

{
  "mcpServers": {
    "hawaii-code": {
      "command": "npx",
      "args": ["-y", "@pipeworx/mcp-hawaii-code"]
    }
  }
}

または、直接実行して起動を確認してください。

npx -y @pipeworx/mcp-hawaii-code

stdin/stdout 経由で MCP を通信し、initialize/tools/list/tools/call に対して、このパックのツールのみを返します。上記のゲートウェイ接続で追加される共有メタツールは含まれません。同じソース、同じツールを使えますが、ask_pipeworx によるルーティングはありません。

ask_pipeworx の使用

ツールを直接呼び出す代わりに、平易な英語で質問できます。上記のパックエンドポイントでも、フルゲートウェイでも利用できます。

ask_pipeworx({ question: "your question about Hawaii Code data" })

ゲートウェイが適切なツールを選び、引数を自動的に設定します。

詳細

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。