mcpField
F
federal-regulations-mcp-server

federal-regulations-mcp-server

リモート
github.com/cyanheads法務・行政1今日更新
リポジトリ

federal-regulations-mcp-server について

federal-regulations-mcp-serverは、政策研究者や法務チーム、規則制定の関係者向けに、Federal Register、eCFR、Regulations.govを横断検索します。各ソースの識別子を連携し、提案からパブリックコメント、成文化された条文まで追跡できます。

主な機能

  1. 01規則・告示・文書の検索
  2. 02現行または過去のCFR本文の取得
  3. 03CFRの構成の閲覧と検索
  4. 04ドケットとパブリックコメントの取得
  5. 05意見募集中の文書の一覧

活用シーン

  1. 01規則案から成文化された条文まで追跡
  2. 02ドケットに寄せられた意見を検索
  3. 03過去の日付時点のCFR条文を確認
  4. 04意見募集期間中の規則文書を特定

MCP 対応

STDIOまたはStreamable HTTP経由で、MCPクライアントに7つのツールと2つのリソースを提供します。Federal RegisterとeCFRの5ツールはキー不要で、ドケットとコメントのツールにはRegulations.gov APIキーが必要です。

設定

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

エンドポイントhttps://federal-regulations.caseyjhand.com/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 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@cyanheads/federal-regulations-mcp-server0.6.0

ツール

7
パラメーター型必須説明
rinstringいいえこの Regulation Identifier Number を持つ文書のみを対象にします。例として "2040-AG18" のような regulationIdNumbers エントリーがあり、規則制定を提案から最終規則まで追跡します。完全な RIN を渡してください。断片("2040")は、その文字列を含むすべての RIN に一致します。
pageintegerいいえページ番号(1~50、デフォルト 1)。Federal Register は最大 50 ページを提供するため、クエリで取得できる一致件数は 50 × per_page(per_page が 100 の場合は 5,000 件)です。応答の totalPages と nextPage で、このクエリで取得できる範囲を確認できます。さらに先の結果を取得するには、ページを進めるのではなく published_after/published_before で範囲を絞ってください。
typearrayいいえ含める文書タイプ。PRORULE=規則案、RULE=最終規則、NOTICE=告示、PRESDOCU=大統領文書。省略するとすべてのタイプが対象です。
orderenumいいえ結果の並び順。クエリがある場合はデフォルトで関連度順、ない場合は新しい順です。クエリなしで relevance を指定すると新しい順になり、oldest は公開日の古い順です。citation を指定した場合は無視され、一致結果はページ順になります。relevance | newest | oldest
querystringいいえ文書のタイトルと本文を全文検索します。省略するとフィルターのみで検索します(例:指定期間内の EPA 規則案すべて)。
agenciesarrayいいえFederal Register の agency slug を使って 1 つ以上の機関で絞り込みます(例:"environmental-protection-agency"、"securities-and-exchange-commission")。機関名や略称ではなく、小文字の kebab-case を指定してください。各結果には機関と slug が表示されます。不明な場合は query で検索し、結果の agencies[].slug を確認してください。認識できない slug が 1 つでもあると、リクエスト全体が失敗します。
cfr_partstringいいえcfrReferences にこの cfr_title のパートが含まれる文書のみを対象にします。パート番号("141")または範囲("140-143")を指定します。たとえば、regulations_get_cfr_section が読み取ったパートを指定できます。"Part" または "pt." の接頭辞は削除されます。cfr_title が必要です。文字を含むパート番号("1203a")では絞り込めません。"40 CFR 141" のクエリはそのパートに言及する文書に一致しますが、この指定は CFR 参照にそのパートが記載されている文書に一致します。
citationanyいいえFederal Register のページ引用("89 FR 49102"、巻号 FR ページ)を指定します。例:regulations_get_cfr_section の bodyText の末尾にある出典注の引用。そのページに掲載された文書を返します。通常は 1 件ですが、同じページを共有する複数件の場合もあり、開始ページ順に並びます。citation_date が必要で、published_after/published_before の代わりに使用されます。第 59 巻(1994 年)以降が対象です。
per_pageintegerいいえ1 ページあたりの結果数(2~100、デフォルト 20)。Federal Register API では、1 を指定すると 1 件ではなくデフォルトのページサイズが使われます。
cfr_titleintegerいいえ対象となる CFR パート(cfrReferences)がこのタイトル(1~50)に属する文書のみを対象にします。たとえば、regulations_get_cfr_section が読み取ったタイトルを指定します。単独ではタイトルで絞り込み、cfr_part と併用するとそのパートで絞り込みます。
docket_idstringいいえ連邦官報にこのドケット番号が記載された文書のみを対象とします。番号はこの結果または regulations_get_document の docketIds エントリにあるもので、「Docket No.」などの接頭辞が付いていてもいなくてもかまいません。REGULATIONS_GOV_API_KEY なしで、ドケットの連邦官報文書を一覧表示します。Regulations.gov のドケット ID は、連邦官報に記載されている場合にのみ一致します。完全な番号を渡してください。断片(「FAA-2026」)では、それを含むすべてのドケットに一致します。
citation_dateanyいいえ出典注記で引用の横に記載された発行日(YYYY-MM-DD)です。「89 FR 49102, June 11, 2024」は 2024-06-11 です。与えられた citation に必須です。年は巻数 + 1935 です。
published_afteranyいいえ最も早い発行日。ISO 8601 形式(YYYY-MM-DD)で、有効な日付を指定します。published_before と組み合わせて大量の結果を期間で絞り込みます。FR のページ移動は最大 50 ページです。
published_beforeanyいいえ最も遅い発行日。ISO 8601 形式(YYYY-MM-DD)で、有効な日付を指定します。

詳細

@cyanheads/federal-regulations-mcp-server

Federal Register(規則案/最終規則および告示)、eCFR(成文化されたCFRの特定時点の全文。ローカルにミラーリング)およびRegulations.gov(規則制定のドケットと一般からのコメント)を通じて、米国連邦規則を検索・追跡できます。MCP経由で利用できます。STDIOまたはStreamable HTTPに対応しています。

7個のツール • 2個のリソース

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

公開ホスト型サーバー: https://federal-regulations.caseyjhand.com/mcp


概要

Federal Register、eCFR、Regulations.govの米国連邦規則を扱います。規則案や最終規則を検索し、規則案から一般からのコメントを経て成文化された条文に至るまで追跡できます。また、CFRの任意の条項を現在の内容、または過去の日付時点の内容で確認できます。

ツール
ツール説明
regulations_search_rulesクエリ、種類、機関、期間、CFRの部、ドケット番号、RINでFederal Registerの規則案、最終規則、告示、大統領文書を検索するか、ページ引用から文書を特定します
regulations_get_documentFederal Registerの文書を番号で1件取得します。ほかのツールにつながるドケットID、CFRの部、引用、コメント数、コメントURLも含まれます
regulations_browse_cfrCFRのタイトル、タイトル内の章、または部に含まれるすべての条項と付録を一覧表示するか、成文化されたCFRの全文検索を行います
regulations_get_cfr_sectionCFRの成文化された条文について、条項、部全体、または付録の内容を、現在または過去の日付時点で取得します
regulations_get_docketRegulations.govから、規則制定のドケットと提出済み文書を取得します(キーが必要です)
regulations_find_comments文書またはドケットに寄せられた一般からのコメントを取得するか、コメント1件の全文と添付ファイルを取得します(キーが必要です)
regulations_list_open_comments現在パブリックコメントを受け付けている文書を、締切が近い順に一覧表示します
リソース
リソース説明
regulations://document/{documentNumber}1件の Federal Register 文書のメタデータと、ソース間で参照するための識別情報
regulations://cfr/{title}/{part}/{section}現行 CFR セクションの成文化された本文

どちらのリソースもツール(regulations_get_document、regulations_get_cfr_section)と同じ内容を提供するため、ツールのみを使うクライアントでも情報が不足することはありません。

機能リファレンス

regulations_search_rules ツール
  • 任意の全文検索用queryと、type(PRORULE/RULE/NOTICE/PRESDOCU)、agencies(名前や略称ではなく、environmental-protection-agencyなどの Federal Register スラッグ)、published_after/published_before、cfr_title + cfr_part(140-143などのパート番号または範囲。cfr_partにはcfr_titleが必要で、指定しない場合はtitle_required_for_part)、docket_id(Federal Registerに記載された形式のドケット番号)、rinによる絞り込みを組み合わせて指定できます。per_pageは2~100(デフォルト20)、pageは1~50です
  • citation("89 FR 49102")とcitation_date(出典注記に併記される日付)を指定すると、そのページに掲載された文書をページ順に返します。対象は第59巻(1994年)以降です。日付を付けずに引用を指定した場合、または日付範囲と併用した場合はcitation_incompleteエラーになります。第59巻より前の巻、または別の年の日付を指定した場合はcitation_out_of_rangeエラーになります。そのページに該当する文書がない場合は、その日のページ範囲を通知します
  • 各結果には、後続のツールで使うdocumentNumber、citation/startPage/endPage、agencies[].slug、印刷されたdocketIds、regulationsGovDocketId、regulationsGovDocumentId、commentCount、commentUrl、commentsCloseOnとcommentPeriodOpen(締切日の東部時間午後11時59分までコメント期間が開いているかどうか)、regulationIdNumbers、cfrReferencesが含まれます。totalPagesとnextPageで結果をページ分割できます。Federal Registerは50ページ分の結果を提供するため、結果セットが50 × per_page(デフォルトでは1,000件、100の場合は5,000件)を超えるとtruncatedが設定されます。ページをさらに進めるのではなく、日付範囲を狭めてください。totalCountは10,000で打ち切られるため、少なくともその件数があることを示します。開始日が終了日より後の範囲を指定するとdate_range_invertedエラーになり、拒否されたパラメーターはinvalid_filterで示されます

regulations_get_document ツール
  • Federal Registerで発行された任意の形式のdocument_numberを指定できます。2010年以降は2024-07773、それ以前の番号や訂正番号は98-1572、E9-25990、C1-2009-30484などです。include_full_textを指定すると、offsetから始まるmax_chars分(デフォルト64,000、最大200,000)のプレーンテキスト本文を1つのウィンドウとして追加します。いずれかを指定すると、もう一方も暗黙的に有効になります
  • メタデータと、他のツールで使用する識別情報を返します。これには、Regulations.govのdocketIdとregulationsGovDocumentId、印刷されたdocketIds、citation/startPage/endPage、commentCount、commentUrl、commentPeriodOpen、cfrReferencesが含まれます。テキストを含めた場合、fullTextLengthとfullTextNextOffset(テキストが残っている間は表示)で本文をページ分割できます。主要な最終規則は100万文字を超える場合があります

regulations_browse_cfr ツール
  • mode: "structure"では、50のタイトル、タイトルの最上位の区分、またはtitle + partを指定した場合はパート内のすべてのセクションと付録(subpartとsubjectGroupを含む)を一覧表示します。mode: "search"では成文化されたCFRの全文を検索し、queryの指定が必要です。title、part(titleが必要)、および特定時点のdateは、どちらのモードでも対象を絞り込みます。per_pageは1~50(デフォルト20)で、検索結果とパート一覧をページ分割します
  • 検索結果の各行には、セクションごとにcfrCite、heading、hierarchyPath、excerptが含まれます。source(mirror/live)とsourceScopeは、回答に使用したコーパスとその対象範囲を示します。countBasisは、totalCountがsectionsとsection_versionsのどちらを数えるかを示します。ライブ検索で取得できるのはeCFRの最初の10,000件までです(その範囲を超えるページではpage_out_of_windowになります)

regulations_get_cfr_section ツール
  • 1つの条項(title + part + section)、パート全体(sectionを省略)、または1つの付録(regulations_browse_cfrが出力する表記をそのまま使用します。例:Appendix A-1 to Part 50)を指定します。sectionには、一般的な引用表記("61"、"§ 141.61"、"141.61(c)")や、サーバーが返すcfrCite("40 CFR 141.61"、"14 CFR 241 § 25")も指定できます(別のタイトルを示す引用はconflicting_titleエラーになります)。partには"Part 141"を指定します。dateでは、2017-01-01から当該タイトルの最新日付までのテキストを読み取ります
  • テキストは1つのbodyTextウィンドウとして返されます(max_charsのデフォルトは64,000、最大200,000、offsetから取得)。bodyTextLengthとbodyTextNextOffsetを使ってページ分割します。パート全体を読み取る場合は、各セクションのoffsetを含むsections[]インデックスが追加され、テキストなしでappendicesも示されます。source(mirror / live)は出典を示します
  • パート全体を読み取る場合は、そのパートのheading、authority、sourceNote、notesも返されます。また、各sections[]エントリには、そのセクションの小区分または主題グループに記載されたAuthorityまたはSourceが含まれます
  • 上付き文字は^x、下付き文字は_x(3 × 10^−8、CO_{2}e)として読み取られます。脚注記号は[n]、ダイアクリティカルマークと上線は結合文字です(x̄)

regulations_get_docket ツール · キーが必要
  • docket_idには、Regulations.govのドケットIDを指定します(例:EPA-HQ-OAR-2025-0194)。検索結果またはコメント受付中の行にあるregulationsGovDocketId、またはregulations_get_documentのdocketIdを使用します。印刷されたdocketIdsの項目は使用しないでください。document_typesでは、Proposed Rule、Rule、Notice、Supporting & Related Material、Otherに絞り込めます。per_pageは5~250(デフォルトは25)、pageは1~40です
  • ドケットのメタデータ、documentCount、およびdocuments[]を返します。各エントリには、regulations_find_commentsで使うobjectId、regulations_get_documentに戻るためのfrDocNum、Regulations.govが報告するcommentPeriodOpenが含まれます。totalPagesとnextPageで文書をページ分割します。Regulations.govが提供するのは40ページまでのため、40 × per_page(per_pageが250の場合は10,000)を超えるドケットではtruncatedが示されます

regulations_find_comments ツール · キーが必要
  • docket_id、document_object_id、fr_document_number、comment_idのいずれか1つを指定します。リスト形式のスコープでは、per_pageは5~250(デフォルトは25)、pageは1~40です
  • document_object_idには、オブジェクトID(0900006485883ec6)または文書ID(EPA-HQ-OW-2022-0114-0027)を指定します。fr_document_numberは、その番号と完全に一致するRegulations.govの文書を検索します。一致する文書がない場合はnot_foundを返します
  • リストはsearch_termでコメント本文を絞り込めます。各検索結果には、該当する文章であるhighlightedContentが含まれます。posted_after / posted_beforeでは、投稿日の範囲を両端を含めて指定します。開始日が終了日より後の場合はdate_range_invertedエラーになります。また、comment_idと一緒にフィルターを指定するとfilter_requires_list_modeエラーになります
  • modeはlistまたはdetailです。リスト形式では、本文を含まないコメントの概要が返されます。comment_idを指定すると、本文、投稿者、receivedDate、postmarkDate、duplicateComments(1より大きい値は、まとめて送信されたキャンペーンの記録を示します)、attachmentsが返されます。内容がPDF/DOCXファイルにある場合は、attachmentOnly: trueも返されます。リスト形式にはtotalPagesとnextPageが含まれます。Regulations.govが提供する40ページ(40 × per_page、per_pageが250の場合は10,000)を超える結果ではtruncatedが示されます。投稿日の範囲を指定した場合は、範囲を分割して順に取得します

regulations_list_open_comments ツール
  • 任意の query、type(PRORULE、RULE、NOTICE。デフォルトは ["PRORULE", "RULE"])、agencies(Federal Register のスラッグ)、closing_before を指定できます。per_page は 1~100(デフォルトは 20)です
  • 行は締切日の早い順に並び、commentsCloseOn、daysRemaining、documentNumber、印刷版の docketIds、regulationsGovDocketId、regulationsGovDocumentId、commentCount、commentUrl を含みます。asOf は米国東部時間での今日の日付なので、文書は締切日当日も一覧に表示されます。totalPages と nextPage で表示範囲をページ分割します。truncated は Federal Register の 10,000 件の文書上限に達したことを示します
  • API キーは不要です。keyed は REGULATIONS_GOV_API_KEY が設定されているかを示します。このキーは、行の詳細を確認するために regulations_get_docket と regulations_find_comments で必要です

regulations://document/{documentNumber} リソース
  • documentNumber には、Federal Register の任意の形式(2024-07773、98-1572、E9-25990)を指定できます。ペイロードは本文テキストを除いた regulations_get_document の出力です
  • docketId、regulationsGovDocumentId、印刷版の docketIds、cfrReferences、citation、commentCount、commentUrl を使って、検索、コメント、CFR の各ツールに連携できます

regulations://cfr/{title}/{part}/{section} リソース
  • 現在の日付時点のセクションのみを取得でき、ツールのデフォルトの 64,000 文字のウィンドウが適用されます。part と section の各セグメントは、ツールと同じ方法で解決されます("Part 141"、"61"、"§ 141.61"、"40 CFR 141.61")
  • source(mirror / live)はデータの出所を示します。bodyTextNextOffset は、セクションがウィンドウより長い場合にその位置を示します。残りは offset を指定して regulations_get_cfr_section から読み取れます

機能

@cyanheads/mcp-ts-core を基盤としており、stdio と Streamable HTTP のトランスポート、プラグイン可能な認証(none / jwt / oauth)、差し替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレース機能を備えた構造化ロギングを提供します。

Federal Register、eCFR、Regulations.gov に特化した機能:

  • 3 つの公式ソースを横断する 1 つのワークフロー:エージェントは 3 つの API クライアントを使い分けるのではなく、規制関連の動詞(search_rules、get_cfr_section、find_comments)を呼び出します
  • ソース間の連携:すべての Federal Register 文書から、その提案 → コメント → 最終規則 → 成文化された本文の追跡に使えるドケット ID と CFR パートのハンドルを取得できます
  • 中核機能は API キー不要:Federal Register と eCFR の 5 つのツールにはキーが不要です。regulations_get_docket と regulations_find_comments には REGULATIONS_GOV_API_KEY が必要です(api.data.gov/signup で無料登録できます。1 時間あたり 1,000 件のリクエスト)。キーが未設定または拒否された場合は、変数名と登録 URL を示して auth_required を返します
  • ローカルにミラーリングされた成文化済み CFR:eCFR は組み込みの SQLite + FTS5 に同期され、正確な引用の読み取りと全文検索に利用されます。過去の日付、パート全体、付録、ミラーの対象外のタイトル、前回のミラー同期後に eCFR が再発行したタイトルについては、ライブ API にフォールバックします
  • リクエストごとに 45 秒の予算を設け、すべての上流呼び出し、再試行、バックオフで共有します。これにより、ソースから応答がない場合でも、クライアントのタイムアウト内に upstream_unavailable を返します

エージェントに適した出力:

  • 出所情報:すべての CFR 読み取りに source: "mirror" | "live" が含まれ、検索にはコーパスの対象範囲を示す sourceScope 行が含まれます
  • 明確なページ分割:リストの範囲は totalPages と nextPage で示されます。最終ページを超えるページを指定すると、「一致するものがありません」と誤解されないよう、最終ページが示されます。Federal Register の 50 ページまたは Regulations.gov の 40 ページを超える一致は、行が黙って除外されるのではなく、truncated と notice で示されます
  • 添付ファイルを考慮したコメント:コメントの要旨がファイルである場合は attachmentOnly で示され、ダウンロード URL も含まれます

はじめに

ホスト型の公開インスタンス

公開インスタンスは https://federal-regulations.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP を提供しており、クライアントごとに設定形式が異なります。

Claude Code の場合:

claude mcp add --transport http federal-regulations-mcp-server https://federal-regulations.caseyjhand.com/mcp

Cline の場合(cline_mcp_settings.json):

{
  "mcpServers": {
    "federal-regulations-mcp-server": {
      "type": "streamableHttp",
      "url": "https://federal-regulations.caseyjhand.com/mcp"
    }
  }
}

Cursor の場合(mcp.json):

{
  "mcpServers": {
    "federal-regulations-mcp-server": {
      "url": "https://federal-regulations.caseyjhand.com/mcp"
    }
  }
}

Claude Desktop では、Settings → Connectors からリモートサーバーを追加できます。

セルフホスト/ローカル

以下を MCP クライアントの設定ファイルに追加します。REGULATIONS_GOV_API_KEY を設定するとドケットツールとコメントツールが有効になります。設定しない場合は、キーが不要な Federal Register ツールと eCFR ツールのみで実行されます。

{
  "mcpServers": {
    "federal-regulations-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/federal-regulations-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "REGULATIONS_GOV_API_KEY": "your-key-here"
      }
    }
  }
}

または、npx を使用します(Bun は不要です)。

{
  "mcpServers": {
    "federal-regulations-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/federal-regulations-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "REGULATIONS_GOV_API_KEY": "your-key-here"
      }
    }
  }
}

または、Docker を使用します。

{
  "mcpServers": {
    "federal-regulations-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT_TYPE=stdio",
        "-e", "REGULATIONS_GOV_API_KEY=your-key-here",
        "ghcr.io/cyanheads/federal-regulations-mcp-server:latest"
      ]
    }
  }
}

Streamable HTTP の場合は、トランスポートを設定してサーバーを起動します。

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/federal-regulations-mcp-server.git
  1. ディレクトリに移動します:
cd federal-regulations-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します:
cp .env.example .env
# optionally set REGULATIONS_GOV_API_KEY

設定

変数説明デフォルト
REGULATIONS_GOV_API_KEYregulations_get_docket および regulations_find_comments 用の api.data.gov キー。なし
FEDERAL_REGISTER_BASE_URLFederal Register API v1 のベース URL。https://www.federalregister.gov/api/v1
ECFR_BASE_URLeCFR API のベース URL。https://www.ecfr.gov/api
REGULATIONS_GOV_BASE_URLRegulations.gov API v4 のベース URL。https://api.regulations.gov/v4
ECFR_MIRROR_PATHeCFR SQLite ミラーデータベースへのパス。./data/ecfr-mirror.sqlite
ECFR_MIRROR_REFRESH_CRONプロセス内でミラーを更新する cron 式(HTTP トランスポートのみ)。例:0 4 * * 0。実行のたびに、設定されたすべてのタイトルを完全に再取得します。なし(ジョブなし)
ECFR_MIRROR_TITLESミラー対象の CFR タイトルをカンマ区切りで指定します(例:21,40)。指定範囲外の読み取りと検索、および全タイトルの検索には、ライブの eCFR API が使用されます。全 50 タイトル
MCP_TRANSPORT_TYPEトランスポート:stdio または http。stdio
MCP_HTTP_PORTHTTP サーバーのポート。3010
MCP_AUTH_MODE認証:none、jwt、または oauth。none
MCP_LOG_LEVELログレベル(debug、info、warning、error など)。info
STORAGE_PROVIDER_TYPEストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。in-memory
OTEL_ENABLEDOpenTelemetry を有効にします。false

オプションの上書き設定の全一覧は .env.example を参照してください。

サーバーの実行

ローカル開発
  • ビルドして実行:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • eCFR ミラーをビルドまたは更新(別途実行され、冪等です。最初のビルドが完了するまでは、CFR ツールはライブの eCFR API を使用します):

    bun run mirror:init      # full build, resumable (scope with ECFR_MIRROR_TITLES)
    bun run mirror:refresh   # re-harvest every configured title against the latest eCFR issues
    bun run mirror:verify    # report row counts and the last-synced issue date
    
  • チェックとテストを実行:

    bun run devcheck   # Lint, format, typecheck, security, changelog sync
    bun run test       # Vitest test suite
    
Docker
docker build -t federal-regulations-mcp-server .
docker run --rm -e REGULATIONS_GOV_API_KEY=your-key -p 3010:3010 federal-regulations-mcp-server

Dockerfile は、HTTP トランスポート、ステートレスセッションモード、および /var/log/federal-regulations-mcp-server へのログ出力をデフォルトにしています。実行中のコンテナ内で docker exec <container> bun run mirror:init を実行してミラーをビルドし、再作成後もデータが保持されるように /usr/src/app/data にボリュームをマウントしてください。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドします。

プロジェクト構成

ディレクトリ目的
src/index.tscreateApp() のエントリーポイントです。ツールとリソースを登録し、3 つのサービスを初期化します。また、ECFR_MIRROR_REFRESH_CRON が設定されている場合は、ミラーの更新をスケジュールします。
src/configサーバー固有の環境変数を Zod で解析、検証します。
src/mcp-server/toolsツール定義(*.tool.ts)と、7 つの regulations_* ツールです。
src/mcp-server/resourcesリソース定義(*.resource.ts)と、ドキュメントおよび CFR セクションのリソースです。
src/services/federal-registerFederal Register API v1 クライアント(キー不要)です。
src/services/ecfreCFR API クライアント(キー不要)です。バージョナー、構造、検索、セクション XML の解析、引用の解決を行います。
src/services/ecfr-mirroreCFR 法典化テキストのミラー(SQLite + FTS5)と、オプトインの更新ジョブです。
src/services/regulations-govRegulations.gov v4 クライアント(X-Api-Key)です。ドケットとコメントを扱います。
src/services共通のリクエスト予算、テキストのウィンドウ化、文字参照のデコード、上流障害の処理です。
scripts/ecfr-mirror-*.tsミラーのライフサイクルを個別に管理します(init、refresh、verify)。
tests/src/ に対応する単体テストと統合テストです。

開発ガイド

開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。概要は次のとおりです。

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで try/catch を使用しないでください。
  • リクエスト単位のロギングには ctx.log を、テナント単位のストレージには ctx.state を使用してください。
  • 新しいツールとリソースは、src/mcp-server/*/definitions/index.ts のバレル経由で登録してください。
  • 外部 API 呼び出しはラップしてください。生データを検証し、ドメイン型に正規化してから、出力スキーマに沿って返してください。上流に存在しないフィールドを捏造しないでください。

データに関する免責事項

Office of the Federal Register によれば、eCFR の内容は「権威あるものですが、非公式」です。Code of Federal Regulations の公式な法令版ではありません。法令調査では govinfo.gov と照合してください。このサーバーは、Office of the Federal Register、Government Publishing Office、General Services Administration とは提携しておらず、これらの機関から推奨も受けていません。

コントリビューション

Issue を歓迎します。提出前にチェックとテストを実行してください。

bun run devcheck
bun run test

ライセンス

Apache-2.0 — 詳細は LICENSE を参照してください。

コメント

MCP は初めてですか?

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

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