mcpField
E
epa-drinking-water-mcp-server

epa-drinking-water-mcp-server

ローカル
github.com/cyanheads法務・行政13 日前に更新

epa-drinking-water-mcp-server について

epa-drinking-water-mcp-server は、EPA の飲料水システム記録、過去の違反、執行措置、汚染物質測定値を MCP 経由で提供します。SDWIS DMAP と UCMR 5 のデータを調べるエージェントや研究者向けで、結果には出典情報と完全性に関する注記が含まれます。

主な機能

  1. 01公共水道システム一覧の検索
  2. 02システム概要とサービス地域の取得
  3. 03過去の違反と執行措置の検索
  4. 04LCR 概要と UCMR 5 測定値の検索
  5. 05データセットをステージングして読み取り専用 SQL を実行

活用シーン

  1. 01場所や属性を指定した飲料水システムの検索
  2. 02システムの報告済み違反と措置の確認
  3. 03汚染物質の検出記録の調査
  4. 04ステージングした EPA データの SQL 分析

MCP 対応

MCP サーバーは EPA データ用の 6 つのツールと、ステージングテーブルの確認、クエリ、削除に使うオプションのデータフレームツールを公開します。stdio と Streamable HTTP に対応し、EPA API キーは不要です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cyanheads-epa-drinking-water": {
"command": "npx",
"args": [
"-y",
"@cyanheads/epa-drinking-water-mcp-server"
],
"env": {
"CANVAS_PROVIDER_TYPE": "<CANVAS_PROVIDER_TYPE>",
"SDWIS_DATAFRAME_DROP_ENABLED": "<SDWIS_DATAFRAME_DROP_ENABLED>",
"CANVAS_DEFAULT_ROW_LIMIT": "<CANVAS_DEFAULT_ROW_LIMIT>",
"CANVAS_DEFAULT_MEMORY_LIMIT_MB": "<CANVAS_DEFAULT_MEMORY_LIMIT_MB>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>",
"MCP_TRANSPORT_TYPE": "<MCP_TRANSPORT_TYPE>",
"MCP_HTTP_HOST": "<MCP_HTTP_HOST>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"MCP_HTTP_ENDPOINT_PATH": "<MCP_HTTP_ENDPOINT_PATH>",
"MCP_AUTH_MODE": "<MCP_AUTH_MODE>"
}
}
}
}
起動コマンドnpx -y @cyanheads/epa-drinking-water-mcp-server
設定が必要な環境変数
CANVAS_PROVIDER_TYPEOptional SQL staging in the npm runtime: none or duckdb.
SDWIS_DATAFRAME_DROP_ENABLEDEnable removal of staged tables when DataCanvas is enabled.
CANVAS_DEFAULT_ROW_LIMITSQL retained-row ceiling; the server maximum is 25000.
CANVAS_DEFAULT_MEMORY_LIMIT_MBDuckDB memory budget per engine in MiB; maximum 512.
MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_TRANSPORT_TYPESelects the HTTP transport.
MCP_HTTP_HOSTThe hostname for the HTTP server.
MCP_HTTP_PORTThe port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.
MCP_AUTH_MODEシークレットAuthentication mode to use: 'none', 'jwt', or 'oauth'.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@cyanheads/epa-drinking-water-mcp-server0.2.0

ツール

6

掲載時のツール一覧 · 2 日前に更新

パラメーター型必須説明
viewenumいいえデフォルトではレコードを返します。text は record_cursor を使って巨大なレコードを損失なく読み取ります。records | text
limitintegerいいえインライン項目の要求数です。有効な上限の 100 を超える値は切り詰められ、通知が表示されます。
querystringいいえ選択した参照トピック内で、完全一致するフィールドを対象に、大文字と小文字を区別せず部分文字列検索します。
topicenumはい組み込みの解釈トピックまたは EPA のライブ辞書トピック。identifiers | system_types | sources | contaminants | violation_types | enforcement_types | treatment | service_areas | standards | coverage
cursorstringいいえこのツールが返す不透明な継続カーソルです。元のセレクターをそのまま保持してください。
record_cursorstringいいえこのツールが返す署名付き巨大レコードポインターです。view text と併用してください。

詳細

@cyanheads/epa-drinking-water-mcp-server

MCP を介して、EPA の飲料水システム、違反、執行措置、汚染物質の測定値を検索します。STDIO または Streamable HTTP に対応しています。

EPA ツール 6 個 • DataCanvas オプションツール 3 個

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概要

SDWIS DMAP および UCMR 5 公表資料に含まれる EPA の飲料水記録を扱います。水道システムを特定し、過去の違反や執行措置を調べ、鉛・銅規則の概要、または規制対象外汚染物質の検出測定値を取得できます。API キーなしで stdio または Streamable HTTP 経由で動作します。

ツール
ツール説明
sdwis_list_reference識別子、汚染物質の名前空間、対象範囲、基準、EPA 辞書を解読します
sdwis_search_water_systems連絡先情報を含まない公共水道システムの一覧を検索します
sdwis_get_system_profile概要、地理情報、給水区域、または処理情報を取得します
sdwis_get_violations報告された過去の SDWA 違反をページ単位で取得します
sdwis_search_contaminants違反、LCR 概要、または UCMR 5 の検出情報を選択します
sdwis_get_enforcement_actions執行措置または違反との関連付けを取得します
sdwis_dataframe_describe提供されたキャンバス内のテーブルとデータの出所を確認します
sdwis_dataframe_queryステージング済みパーティションに対して読み取り専用 SQL を実行します
sdwis_dataframe_drop必要に応じてステージング済みテーブルを 1 つ削除します

データフレームツールを使用するには、npm または Docker に加えて CANVAS_PROVIDER_TYPE=duckdb が必要です。drop には SDWIS_DATAFRAME_DROP_ENABLED=true も必要です。Claude Desktop バンドルには、EPA の情報を読み取る 6 つのツールが含まれています。

機能リファレンス

sdwis_list_reference ツール
  • 必須の topic:identifiers、system_types、sources、contaminants、violation_types、enforcement_types、treatment、service_areas、standards、または coverage。任意の部分文字列 query
  • 解釈トピックはまとめて提供され、辞書は最新の内容です。SDWIS コードと UCMR 分析対象物質は別々の名前空間です。基準では MCL、MCLG、措置レベルについて説明しますが、過去の記録を基準超過として分類することはありません

sdwis_search_water_systems ツール
  • 少なくとも1つの絞り込み条件が必要です:pwsid、name_contains、state、county(state が必須)、population_min / population_max、source、system_type、primacy_agency、または pwsid_prefix
  • activity の既定値は active です。inactive または all を明示的に選択してください。州は報告された法人の所在州を、郡は給水対象の郡を示します。いずれも、物理的な給水区域全体を確定するものではありません

sdwis_get_system_profile ツール
  • 9文字の英数字からなる pwsid が必須です。section は summary(既定値)、geography、service_areas、または treatment で、各セクションは個別にページ分割されます
  • Summary は system を返し、子セクションは items を返します。found:false はインベントリに情報がないことを示し、コンプライアンス上の判定ではありません。運営者の連絡先と郵送先住所は除外されます

sdwis_get_violations ツール
  • pwsid または state が必須です。county、contaminant、category、health_based、compliance_status は任意です
  • 開始日と終了日を含む date_from / date_to で、コンプライアンス期間との重複を選択します。不明な日付は一致しません。モニタリング違反や報告違反には、濃度がない場合があります
  • stage:true はデータの分割を要求します。stage_max_rows の既定値は5,000で、上限は25,000です。保持中の別の分割を追加するには、canvas_id を指定してください

sdwis_search_contaminants ツール
  • dataset(violations、lcr、または ucmr5)と、pwsid または state が必須です。任意の county、contaminant、期間指定により、それぞれコンプライアンス期間、LCR サンプル期間、UCMR 採取日を選択します
  • LCR の鉛/銅では、家庭のサンプルではなく PB90/CU90 の概要を選択します。UCMR の PFAS は29種類の分析対象物質を対象とし、リチウムは別扱いです。zip と detected_only は UCMR 専用です。給水区域の ZIP コードはサンプル採取場所を示すものではなく、検出限界未満の値は不明のままです
  • stage、canvas_id、stage_max_rows(既定値5,000、上限25,000)に対応しています。UCMR の初回呼び出しには180秒のクライアントタイムアウトが必要になる場合があります。対象範囲の解決がタイムアウトする場合は、広範なリクエストを PWSID または郡で絞り込んでください

sdwis_get_enforcement_actions ツール
  • pwsid が必須です。section は actions(既定値)または associations です。任意の violation_id を指定すると、PWSID に紐づく関連付けキーを通じて関連措置を選択します
  • action_type、originator、および開始日と終了日を含む執行日のフィルターは、措置にのみ適用されます。関連付けは別個にページ分割されます。ソースの措置テキストだけでは、連邦命令や金銭的罰則を意味しません
  • stage、canvas_id、stage_max_rows(既定値5,000、上限25,000)に対応しています

sdwis_dataframe_describe ツール
  • 呼び出し側が保持する canvas_id が必須です。完全一致の table_name は任意です。limit の既定値は10で、cursor によるページネーションで上限100に制限されます
  • 各項目にテーブル列のエントリーが1つ含まれ、型、行数、有効期限、フィルター、データ来歴、完全性、続きの有無が示されます。キャンバス全体を一覧表示する機能はありません

sdwis_dataframe_query ツール
  • canvas_id と、sql 内の読み取り専用 SELECT、WITH、または FROM ステートメント1つ(最大20,000文字)が必須です。先にキャンバスを説明してください
  • 保持される行数は最大 CANVAS_DEFAULT_ROW_LIMIT(フレームワークの既定値は10,000)で、上限は25,000です。row_count、truncated、has_more により、保持された行と省略された行を区別できます。続きの取得では、最大15分間、変更されない結果を読み取ります
  • ファイル、ネットワーク、書き込み、システムカタログへのアクセスは拒否されます。source_complete には、SQL が参照しないテーブルも含め、すべてのライブソースの分割が保守的に含まれます
sdwis_dataframe_drop ツール
  • 必須項目は canvas_id と完全一致する table_name です。CANVAS_PROVIDER_TYPE=duckdb および SDWIS_DATAFRAME_DROP_ENABLED=true が必要です
  • 冪等です。テーブルがない場合やキャンバスの有効期限が切れている場合は dropped:false を返し、その他のステージング済みパーティションは引き続き利用できます

機能

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

EPA 固有の機能:

  • 連絡先情報を必要とせずにインベントリとサービスの所属情報を取得できます。ラベルがない場合もソースコードを保持します
  • 過去の四半期ごとの SDWIS レコード、LCR の概要、参加が限定された UCMR 5 の監視データをそれぞれ区別して保持します。結果が空でも、現在の法令遵守状況、蛇口の水の安全性、または汚染物質が存在しないことは確認できません
  • ソースの日付は暦上の日付の意味を保持します。ソースのタイムスタンプが午前 0 時以外の場合は、_raw フィールドを保持します
  • UCMR の取得はプロセス内で遅延実行されます。アーカイブ取得後でも、州全体を対象とするリクエストは 45 秒のサービス所属情報の予算を超える場合があります。サーバーを完全な全米データウェアハウスと見なすのではなく、PWSID/郡で対象を絞り込んでください

エージェント向けの出力:

  • 来歴 — effective_filters、ソース URL、retrieved_at、利用可能な場合は公開情報/HTTP バリデーター、および解釈上の注意事項
  • 完全性 — 以前のページやパーティションで行が配信されている場合、has_more:false でも source_complete:false のままになることがあります。集約しても完全性は回復しません
  • レコード全体単位のページング — limit のデフォルトは 10 で、上限は 100 です。バイト数の制限により、返される行数が少なくなる場合があります。空の phase:membership ページも含め、セレクターを変更せずに next_cursor を使用してください。ソースカーソルは 15 分間操作がないと期限切れになります
  • サイズ超過のレコード — item_too_large は record_cursor を返します。view:text を使用して JSON チャンクを連結し、その後、レコードの続きに進んでください。両方の MCP コンテンツサーフェスには同じ値が含まれます

はじめに

次のいずれかの設定を MCP クライアントに追加してください。EPA アカウントや API キーは不要です。

{
  "mcpServers": {
    "epa-drinking-water-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/epa-drinking-water-mcp-server@latest"]
    }
  }
}

または npx を使用する場合(Bun は不要です):

{
  "mcpServers": {
    "epa-drinking-water-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/epa-drinking-water-mcp-server@latest"]
    }
  }
}

または Docker を使用する場合:

{
  "mcpServers": {
    "epa-drinking-water-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_TRANSPORT_TYPE=stdio",
        "ghcr.io/cyanheads/epa-drinking-water-mcp-server:latest"
      ]
    }
  }
}

SQL ステージングを行うには、npm プロセスの環境に CANVAS_PROVIDER_TYPE=duckdb を設定します(Docker の場合:-e CANVAS_PROVIDER_TYPE=duckdb)。stage:true を指定してソースツールを呼び出し、dataset.canvas_id を保持してから、クエリを実行する前に sdwis_dataframe_describe を呼び出してください。ソースパーティションの続きはすべて保持してください。Claude Desktop バンドルでは CANVAS_PROVIDER_TYPE=none に固定されており、そこでステージングを試みると canvas_disabled が返されます。

ローカルのチェックアウトから Streamable HTTP を使用する場合:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# http://localhost:3010/mcp
前提条件
  • Bun ≥1.4.0 または Node.js ≥24.0.0
  • EPA サービスへのネットワークアクセス。UCMR の初回呼び出しには、クライアントのタイムアウトを 180 秒に設定してください
インストール
git clone https://github.com/cyanheads/epa-drinking-water-mcp-server.git
cd epa-drinking-water-mcp-server
bun install
cp .env.example .env
bun run rebuild

設定

変数説明デフォルト
SDWIS_DATAFRAME_DROP_ENABLEDキャンバスが有効な場合に、ステージング済みテーブルを早期に削除できるようにしますfalse
CANVAS_PROVIDER_TYPEnone または duckdb。npm/Docker は DuckDB に対応し、MCPB は none に固定されていますnone
CANVAS_DEFAULT_ROW_LIMITSQL の行数上限。サーバーの最大値 25,000 が上限です10000
CANVAS_DEFAULT_MEMORY_LIMIT_MBエンジンごとのメモリ上限。最大 512 MiB です512
MCP_TRANSPORT_TYPEstdio または httpstdio
MCP_HTTP_HOSTHTTP バインドアドレス。Docker は 0.0.0.0 にバインドします127.0.0.1
MCP_HTTP_PORTHTTP ポート3010
MCP_AUTH_MODEnone、jwt、または oauthnone
MCP_LOG_LEVEL最低ログレベルinfo
OTEL_ENABLEDOpenTelemetry を有効にしますfalse

すべてのオーバーライドについては、.env.example を参照してください。

サーバーの実行

ローカル開発
bun run rebuild
bun run start:stdio
# or bun run start:http
bun run devcheck
bun run test
Docker
docker build -t epa-drinking-water-mcp-server .
docker run --rm -p 3010:3010 epa-drinking-water-mcp-server

イメージはデフォルトで、ステートレスセッションを使用する Streamable HTTP をポート 3010 で起動します。SQL ステージングを行うには、-e CANVAS_PROVIDER_TYPE=duckdb を追加してください。

プロジェクト構成

パス目的
src/index.ts登録、ソースの初期化、オプションのキャンバス
src/configデータフレームのドロップ設定
src/domainセレクター、参照データ、スキーマ、デュアルサーフェス形式
src/mcp-server/tools/definitions6つのEPAツールと3つのオプションのデータフレームツール
src/services/sdwis検証済みDMAP読み取り、メンバーシップ、ページング、結合
src/services/ucmr5アーカイブの取得、解析、インデックス作成、発生状況
src/services/dataframe機能スコープ付きのステージング、SQL、有効期限、削除
testsドメイン、サービス、ツール、統合テスト
scriptsビルド、チェック、パッケージ化、リリース用ツール

開発ガイド

CLAUDE.md と AGENTS.md を参照してください。

  • ハンドラーは型付きの失敗をスローし、フレームワークがエラーを表示します
  • src/index.ts に直接登録し、正規化の前に上流データを検証してください
  • 不確実性、来歴、日付、完全性を保持し、コンプライアンス、世帯の曝露、基準超過を決して推測しないでください
  • content[] と structuredContent を同等に保ち、ソース結果をユーザーストレージに書き込まないでください

貢献

課題の報告を歓迎します。提出前に bun run devcheck と bun run test を実行してください。

ライセンス

Apache-2.0。

コメント

MCP は初めてですか?

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

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