North Dakota Code について
North Dakota Century Codeを調べるMCPサーバーです。法務担当者、研究者、開発者向けに、章PDFから条文を都度抽出し、公式キャッチラインでトピックを検索します。
主な機能
- 01引用による条文取得
- 02公式キャッチラインで検索
- 03章PDFからのリアルタイム抽出
- 04引用・章のコンテキスト参照
活用シーン
- 01特定の州法条文の確認
- 02トピックに関係する条文の検索
- 03MCPクライアントでのノースダコタ州法の照会
MCP 対応
引用検索用の`nd_statute`と、キャッチライン検索用の`nd_search`を提供します。Pipeworxゲートウェイへの接続と、ローカルのstdio MCPサーバーとしての実行に対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://gateway.pipeworx.io/north-dakota-code/mcpclaude mcp add --transport http pipeworx-io-north-dakota-code https://gateway.pipeworx.io/north-dakota-code/mcp{"mcpServers":{"pipeworx-io-north-dakota-code":{"type":"http","url":"https://gateway.pipeworx.io/north-dakota-code/mcp"}}}Cursor で開く{"servers":{"pipeworx-io-north-dakota-code":{"type":"http","url":"https://gateway.pipeworx.io/north-dakota-code/mcp"}}}VS Code で開く{"mcpServers":{"pipeworx-io-north-dakota-code":{"type":"http","url":"https://gateway.pipeworx.io/north-dakota-code/mcp"}}}{"mcpServers":{"pipeworx-io-north-dakota-code":{"serverUrl":"https://gateway.pipeworx.io/north-dakota-code/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
@pipeworx/north-dakota-code
ノースダコタ州法典 — 引用および公式の見出し(トピック検索)による州法。キー不要です。
Pipeworx の一部です — AI エージェントを1819以上の稼働中のデータソースに接続するMCPゲートウェイです。これは独立した非公式の統合であり、上流プロバイダーとの提携、承認、公開はありません。
ツール
nd_statute(citation)— 引用によるノースダコタ州法典の条文全文 (「12.1-16-01」は殺人、「47-16-13.1」は賃貸住戸を維持する 家主の義務です)。引用を該当する1つの章のPDFに解決し、 ライブで取得してテキストを抽出します。nd_search(query, limit?)— 議会が定めた公式の条と章の見出しを 対象とするトピック/キーワード検索(法文全文ではありません — 詳細は後述)を行い、一致する引用を返します。
認証
キー不要です。
調査で見つかった落とし穴は、ここでは完全には当てはまりませんでした
このパック系列で記録されていた落とし穴は「PDFとしてのみ公開」でした — 法文についてはそのとおりです(ndlegis.govでは各章が小さなPDF、
cencode/t12-1c16.pdfとして提供されています)。しかし議会は、すべての編、章、条と公式の見出しを一覧表示するHTMLページも1つ公開しています:
https://ndlegis.gov/general-information/north-dakota-century-code/index.html
このページは約9.5 MBで、法典全体(約29,000条、1,740章、74編)を1つの文書に収録しています — 呼び出しごとに取得するには大きすぎます。また、(アイオワ州とは異なり)より軽量な編ごとの一覧ページはなく、法典の検索APIもありません(ndlegis.govの法案追跡側にはJSON APIがありますが、法典側にはありません。ライブで確認済みです)。そこで、scripts/bake-index.mjsによって一度だけ取得し、src/nd-index-data.tsに焼き込みます — 引用、公式の見出し、章/編のコンテキストのみで、法文は含みません。これはmcps/symmapがハーブ表に使用するものと同じ「焼き込みテーブル」の形式です。nd_searchはこの焼き込みテーブルをすべてメモリ上で読み取ります。nd_statuteは引用を該当する1つの章のPDFに解決するためだけにこのテーブルを使用し、そのPDFをライブで取得して抽出します。そのため、法文自体が焼き込まれたり再配布されたりすることはありません。
更新手順
ノースダコタ州が法典を再編した際は、焼き込みスクリプトを再実行してください(新しい会期法は継続的に成立しますが、インデックスページは独自のスケジュールで更新されます):
node mcps/north-dakota-code/scripts/bake-index.mjs > mcps/north-dakota-code/src/nd-index-data.ts
ページが約1 MB未満に縮小した場合や、解析された行数が疑わしいほど少ない場合は、スクリプトは黙って処理を続けず、明示的にエラーになります — どちらの場合も、法典が小さくなったのではなく、ndlegis.govのマークアップが変更されたことを意味するためです。
pdf-text.tsには、この州向けに2つの実質的な拡張が必要でした
shared/src/pdf-text.ts(ケンタッキー州の条ごとのPDF向けに構築)では、ノースダコタ州の章PDFをそのまま処理できませんでした — テストとともに、別のコミットで修正しました:
- すべてのコンテンツストリームで、
/Lengthはインラインの整数ではなく、間接参照 (/Length 12 0 R)として記述されています。元の検出正規表現は、 複数桁の参照オブジェクト番号に対してバックトラッキングの問題がありました (参照をたどらず、文字どおりの整数1に黙って解決されていました)— バックトラッキングが発生しない明示的な省略可能グループに書き換えました。 - 本文のフォントは単純な(Type0ではない)TrueTypeサブセットで、
/Encodingが まったくありません — WinAnsiのバイトとしては読み取れません。このフォント独自の/ToUnicodeCMap(Type0の2バイトCIDとは異なり、1バイトのコードをキーとするもの)だけに 実際の文字が記録されているため、単純フォントにWinAnsiの指定がない場合は、 抽出器がこのCMapを確認するようになりました。 /Font自体がResources内の間接参照(/Font 18 0 R)になっています。ケンタッキー州のPDFでは使われていなかった形式です — すでに対応していた/Pagesと同じ方法で解決しました。
信頼できる空白がない場合のセクション分割
抽出後、章のテキストにはセクション間の信頼できる改行がありません。見出しと本文が直接つながっています(「12.1-16-01.
Murder.1.A person is guilty...」)。sliceNdSection は、章自身の検証済み引用一覧(汎用的な番号パターンではなく、あらかじめインデックスに登録されているもの)から見出しの境界を構築します。これにより、別の章の引用への相互参照との一致を防ぎます。また、同じ章内の相互参照が、たまたま同じ番号で文末になるまれなケースは、通常の「テキスト量が多い方を優先する」タイブレークで引き続き保護されます。
4 つの機能 — 2 つは利用可能、2 つは利用不可
- 引用検索 — 利用可能(
nd_statute)。 - トピック/キーワード検索 — 利用可能(
nd_search)。ただし、法令の全文ではなく、公式の CATCHLINE に一致します。ノースダコタ州は、Code の条文全文を対象とした全文検索を公開していません(実際に確認済み)。「landlord」のようなクエリでも、実際に存在する 7 つのセクションが表示されます(例:「Landlord obligations - Maintenance of premises」)。「Landlord and Tenant」という CHAPTER は存在しませんが、これらのセクションは Title 28、31、35、47 に分散しており、セクション単位の見出しインデックスでのみ検出できます。 - 改正/制定履歴 — 現行のセクションでは利用できません。ndlegis.gov の現行オンライン Code には、現在も有効なセクションの「History:」/「Amended by」行はありません(47-16「Leasing of Real Property」の章全体を確認済み。有効な約 40 のセクションに該当する行はありませんでした)。廃止または再指定されたセクションの 1 行の処分表示(「Repealed by S.L. 1977, ch. 429, § 7.」)だけが、Code のページに掲載されている唯一の会期法の引用です。
nd_statuteはこれを抑制せず、そのままtextで返します。実際の改正履歴を再構築するには、ノースダコタ州の別個の会期法アーカイブ(ndlegis.gov/research-and-archives/session-laws。会期ごとに 1 巻の PDF があり、セクション別のインデックスはありません)を解析する必要があります。これはここでは対象外です。 - 過去の版(改正前にセクションに記載されていたテキスト) — 利用できません。ndlegis.gov の歴史的アーカイブ(
research-and-archives/historical-constitution-and-century-code)は、1930 年以前の Revised Codes/Compiled Laws(1877~1925 年)までしか扱っていません。Title 12.1(1973 年に制定された刑法)や、現行 Code の大部分が成立するずっと前のものです。また、Iowa や Indiana が公開しているような、現行時代の Code の年別アーカイブはありません。利用できるのは現行のオンライン版のみです。
引用
ノースダコタ州では、Title-章-セクションの形式で引用します。たとえば「12.1-16-01」(Title 12.1、Chapter 16、Section 01:殺人)や「47-16-13.1」(Title 47、Chapter 16、Section 13.1:家主の維持管理義務)です。章とセクションには、それぞれ小数の接尾辞が付く場合があります(「12.1-27.2-02」、「47-16-07.3」)。nd_statute は引用を部分に分解せず、ベイク済みのインデックスから直接検索するため、インデックス自体で使用されている接尾辞の形式をそのまま扱えます。
データソース
https://ndlegis.gov/general-information/north-dakota-century-code/index.html— Code 全体の Title/章/セクション/見出しのインデックスです。src/nd-index-data.tsに一度だけベイクされ、呼び出しごとに取得されることはありません。https://ndlegis.gov/cencode/t12-1c16.pdf— 1 つの章の法令全文です(ここでは Title 12.1 Chapter 16。他の章の場合はファイル名を置き換えてください)。nd_statuteは呼び出しのたびにこれを取得し、対象セクションを抽出します。
どちらも、ログイン不要、JS 不要で、キーも不要なサーバーレンダリングの HTML/PDF です。開発中にレート制限は確認されませんでした。
クイックスタート
MCP クライアント(Claude Desktop、Cursor、Windsurf など)に追加します。
{
"mcpServers": {
"north-dakota-code": {
"url": "https://gateway.pipeworx.io/north-dakota-code/mcp"
}
}
}
このエンドポイントが実際に提供するもの
https://gateway.pipeworx.io/north-dakota-code/mcp の tools/list は、上の表にあるツールに加えて、共有 Pipeworx メタツール(ask_pipeworx、
discover_tools、search_within、remember/recall など、ゲートウェイ全体で利用できるツール群)も返します。そのため、表示されるツール数はこの表より多くなります。単一パックのエンドポイントでは現在、パック固有のツールとともに、共有ツールが約 30 個一覧表示されます。接続の initialize レスポンスには正確な範囲が記載されており、その日の状況を確認する際の正式な情報源です。
これは意図的な仕様であり、偶然に多重化されているわけではありません。メタツールを使えば、このパックでは扱えない質問にも、カタログ全体を横断してルーティングする ask_pipeworx を通じて回答できます。そのため、MCP サーバーをもう 1 つ追加する必要はありません。現時点では、メタツールなしでパックのエンドポイントをマウントする方法はありません。追加のスキーマによるコンテキスト消費が、ルーティングの利点を上回る場合は、複数のパックエンドポイントではなく、フルゲートウェイに一度接続してください。
または、フル Pipeworx ゲートウェイに接続すると、このパックだけでなく、すべてのパックのツールが直接一覧表示されます。
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
どちらの URL も同じゲートウェイと同じ 1819 以上のデータソースに接続します。唯一の違いは、どのパックのツールが直接一覧表示されるかです。どちらの URL からでも、ask_pipeworx を使えばすべてのツールにアクセスできます。
MCP クライアントがない場合:HTTP で呼び出す
curl -X POST https://gateway.pipeworx.io/v1/tools/nd_statute \
-H 'Content-Type: application/json' \
-d '{"citation":"12.1-16-01"}'
最初の呼び出しにアカウントは必要ありません。ツールを確認するには、GET https://gateway.pipeworx.io/v1/tools/nd_statute を実行します。ツールを検索するには、{"query":"..."} を指定して POST https://gateway.pipeworx.io/v1/tools/search_packs を実行します。
スタンドアロン(ゲートウェイアカウント不要)
このパッケージは、ローカルの stdio MCP サーバーとしても実行できます。Pipeworx アカウントは不要で、ゲートウェイへの往復通信もありません。
{
"mcpServers": {
"north-dakota-code": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-north-dakota-code"]
}
}
}
または、直接実行して起動を確認できます。
npx -y @pipeworx/mcp-north-dakota-code
stdin/stdout 経由で MCP を使用し、このパックのツールのみを対象に initialize/tools/list/tools/call に応答します。上記のゲートウェイ接続で追加される共有メタツールはありません。同じソース、同じツールで、ask_pipeworx によるルーティングはありません。
ask_pipeworx を使用する
ツールを直接呼び出す代わりに、自然な英語で質問できます。これは上記のパックエンドポイントでも、フルゲートウェイでも利用できます。
ask_pipeworx({ question: "your question about North Dakota Code data" })
ゲートウェイが適切なツールを選び、引数を自動的に入力します。
詳細
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。