mcpField
E
epa-mcp-server

epa-mcp-server

リモート
github.com/cyanheads法務・行政14 日前に更新
リポジトリ

epa-mcp-server について

epa-mcp-serverは、施設のコンプライアンス、有害物質排出、Superfund、飲料水、EJScreen、AirNowなどのEPA環境データをMCPクライアントに提供します。施設、地域、環境状況の調査に向いています。

主な機能

  1. 01規制対象施設と違反事例の検索
  2. 02施設コンプライアンス情報の取得
  3. 03TRIとSuperfund記録の検索
  4. 04飲料水システムの検索
  5. 05EJScreen指標の取得
  6. 06AirNowの状況と予報の取得

活用シーン

  1. 01施設の検査や執行履歴を確認
  2. 02州や郡ごとの有害物質排出を比較
  3. 03近隣のSuperfundサイトや飲料水システムを検索
  4. 04場所の環境・人口指標をスクリーニング

MCP 対応

STDIOまたはStreamable HTTP経由で、9つのツールと2つのリソースをMCPクライアントに提供します。セルフホスト環境でAirNow状況ツールを使うにはAPIキーが必要です。公開インスタンスではこのツールは利用できません。

設定

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

エンドポイントhttps://epa.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/epa-mcp-server0.6.0

ツール

9
パラメーター型必須説明
citystringいいえ市区町村名。大文字と小文字は区別せず、指定した文字列で始まる市区町村に一致します(例:"TACOMA"、または "SEAT" で SEATTLE と SEATAC)。state と組み合わせて指定してください。
limitintegerいいえ返す施設の最大数(1~100)
statestringいいえ米国の州を表す 2 文字の略称(例:"WA"、"CA")
latitudenumberいいえ10進度での緯度。近接検索では longitude および radius_miles と組み合わせてください。
programsarrayいいえ結果を、1つの環境プログラムに登録された施設に限定します。ECHO では検索ごとに1つのプログラムのみで絞り込めるため、値を1つ指定してください。CAA=大気、CWA=水、RCRA=有害廃棄物、TRI=有害物質の排出、SDWA=飲料水。
zip_codestringいいえ検索対象の 5 桁の ZIP コード
longitudenumberいいえ10進度での経度。近接検索では latitude および radius_miles と組み合わせてください。
active_onlybooleanいいえtrue の場合、有効な許可を持つ施設のみを返します
radius_milesnumberいいえ指定した緯度/経度を中心とする検索半径(マイル、最大 100)。latitude と longitude が必要です。
has_violationbooleanいいえtrue の場合、少なくとも1つのプログラムで重大な不遵守状態にある施設のみを返します(complianceStatus "Significant Violation")

詳細

@cyanheads/epa-mcp-server

EPAの環境データを検索・取得します。施設のコンプライアンス(ECHO)、有害物質の排出(TRI)、スーパーファンドサイト、飲料水システム、環境正義スクリーニング(EJScreen)、リアルタイムの大気質(AirNow)に対応しています。STDIOまたはStreamable HTTP。

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

バージョン ライセンス Docker MCP SDK npm TypeScript Bun

Claude Desktopにインストール Cursorにインストール VS Codeにインストール

フレームワーク

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


概要

5つの連邦プログラムにわたるEPAの環境データを提供します。施設のコンプライアンス(ECHO)、有害物質の排出(TRI)、スーパーファンドサイト、飲料水システム(SDWIS)、環境正義スクリーニング(EJScreen)に加え、AirNowのリアルタイム大気質データにも対応しています。施設の検査・執行履歴の取得、地域全体における有害物質の排出状況の追跡、任意の地点における環境正義リスクのスクリーニングができます。

ツール
ツール説明
epa_echo_search_facilitiesCAA、CWA、RCRA、TRI、SDWAにおける所在地、環境プログラム、コンプライアンス状況でEPA規制対象施設を検索します
epa_echo_get_facilityEPA Registry IDを指定して、1施設のコンプライアンス状況、検査、執行措置、罰金、TRI IDを含む詳細なプロファイルを取得します
epa_echo_search_violations州、プログラム、期間を指定して、EPAの民事・刑事執行案件を検索します
epa_airnow_get_conditionsAirNowから現在のAQI観測値または発表済みのAQI予報を取得します
epa_tri_get_facility_releases単一施設の化学物質別Toxic Release Inventoryデータを取得します
epa_tri_search_releases州または郡内の施設を対象に、Toxic Release Inventoryの記録を検索します
epa_superfund_search_sites所在地またはNPL登録状況でスーパーファンド(CERCLA/SEMS)サイトを検索します
epa_water_search_systems州またはZIPコードで飲料水システム(SDWIS)を検索します
epa_ejscreen_get_scores地点およびバッファー範囲のEJScreen環境正義指標を取得します
リソース
リソース説明
epa://facility/{registry_id}EPA Registry IDで指定した施設の完全なコンプライアンスプロファイル(epa_echo_get_facilityと同じデータ)
epa://superfund/{site_id}SEMSサイトIDで指定したスーパーファンドのサイト記録

すべてのリソースデータはツールからも取得できます。ツールのみを利用するMCPクライアントからプログラムでアクセスするには、epa_echo_get_facilityとepa_superfund_search_sitesを使用してください。

機能リファレンス

epa_echo_search_facilities ツール
  • ZIPコード、州、市(前方一致。州を指定することを推奨)、または緯度+経度+radius_miles(最大100マイル)を指定します。最大100件(デフォルトは50件)を返します
  • epa_echo_get_facilityで使用するregistryId、郡とfipsCode、座標、プログラムごとのフラグ、過去5年間の検査数と罰金額の合計を返します
  • programsにはCAA、CWA、RCRA、TRI、SDWAのいずれかを指定します。has_violationを指定すると、重大な違反状態にある施設に絞り込まれます。active_onlyを指定すると、有効な許可証を持つ施設に絞り込まれます

epa_echo_get_facility ツール
  • registry_idはepa_echo_search_facilitiesから取得します
  • complianceStatus、法令ごとのprogramComplianceの概要、過去5年間の最新100件の検査(inspectionsTotalは全件数を示します)、罰金を伴う過去5年間の執行措置、最新のTRI合計とtriReleasesTransfersYear、およびepa_tri_get_facility_releasesで使用するtriFacilityIdsを返します
  • ステータスの照会に失敗した場合、プロファイルにはcomplianceStatusが含まれず、その旨を示すnoticeが返されます。不明なIDの場合はfacility_not_foundエラーになります

epa_echo_search_violations ツール
  • stateまたはzip_codeが必要です。最大100件(デフォルトは50件)を返します
  • programではCAA、CWA、RCRA、SDWA、CERCLA、FIFRA、TSCAのいずれかで絞り込みます。事件が引用する法律のいずれかに一致します。case_typeはcivil、criminal、またはall(デフォルト)です
  • date_filed_start / date_filed_end(YYYY-MM-DD、指定日を含む)で申立日を指定します。申立日があるのは民事事件のみです。そのため、日付を指定してallを選ぶと、noticeとともに民事事件が返され、criminalは指定できません

epa_airnow_get_conditions ツール
  • zip_code、またはlatitudeとlongitudeの両方を指定します。modeはcurrent(デフォルト)またはforecastです
  • currentモードでは、50マイル以内で最も近いモニターから、各汚染物質の最新の1時間ごとのNowCast AQIを返します。forecastモードでは、発行された各日についてdateValid、actionDay、discussionを返します。forecast_date(YYYY-MM-DD)を指定すると、1日分に絞り込まれます
  • 測定値にはcategoryNameとcategoryNumber(1 Good~6 Hazardous)が含まれます。attributionは、データが暫定的なものであり、規制上または執行上の判断には適さないことを示します
  • AIRNOW_API_KEYが設定されている場合にのみ登録されます。レスポンスは約1時間キャッシュされます

epa_tri_get_facility_releases ツール
  • facility_idには、epa_tri_search_releasesまたはepa_echo_get_facilityのtriFacilityIdsから取得したTRIのfacilityIdを指定します。year(1987~2030)と部分一致のchemical_nameは任意です
  • 化学物質ごとの大気、水域、土地、地下圧入への排出量と、単発・非定常の合計を返します。yearを省略すると、報告年の新しいものから返されます。報告書が500件に達すると、どちらのレスポンス形式でも、さらに報告書が存在する可能性があることが示されます。yearまたはchemical_nameで絞り込んでください
  • 数量の単位はポンドです。グラムで報告されたダイオキシンの記録は換算され、reportedUnit: "grams"が付与されます

epa_tri_search_releases ツール
  • 2文字のstateが必要です。county(部分一致、大文字・小文字を区別しない)、部分一致のchemical_name、yearは任意です。最大200件(デフォルトは50件)を返します。yearを省略すると、報告年の新しいものから返されます
  • epa_tri_get_facility_releasesで使用するfacilityIdと、各記録の単発・非定常の合計を返します。include_release_breakdown: trueを指定すると、大気、水域、土地、地下圧入への排出量が追加されますが、上流へのリクエストが1回増えます(EPA側でキャッシュされていない場合は最大約20秒かかります)
  • グラムで報告されたダイオキシンの記録はポンドに換算され、reportedUnit: "grams"が付与されます

epa_superfund_search_sites ツール
  • state/city/zip_code、または latitude + longitude + radius_miles(0.1~500)を指定します。最大200件のサイトを返します(デフォルトは50件)。
  • サイト識別子、所在地、NPL、浄化状況を返します。npl_status では、登録済み、未登録、提案中、またはすべて(デフォルト)で絞り込めます。
  • 近接検索では、緯度/経度の候補を最後までページ取得し、正確な距離を適用して、最寄りのサイトから返します。結果の上限により除外された一致サイトの件数は、notice に記載されます。座標のないサイトは位置を特定できません。すべての候補ページで50秒の制限時間を共有するため、タイムアウトする場合は半径を狭めるか、フィルターを追加してください。

epa_water_search_systems ツール
  • state または zip_code が必要です。最大200件のシステムを返します(デフォルトは50件)。zip_code は各システムの登録住所に一致し、給水区域には一致しません。
  • has_violation を指定すると、SDWIS の未解決違反があるシステムに絞り込めます。pws_type は community、non-transient、transient のいずれかで、type ではそれぞれ CWS/NTNCWS/TNCWS として返されます。
  • has_violation では最大1,000件のレコードを読み取ります。この上限に達した場合、違反のあるシステムを見落としている可能性があることが notice に記載されます。

epa_ejscreen_get_scores ツール
  • latitude と longitude が必要です。distance のデフォルトは1、unit のデフォルトはマイルです(キロメートルも指定できます)。バッファーは最大15マイルです。
  • 環境指標13項目と人口統計指標6項目について、全国および州のパーセンタイルと人口統計インデックスを返します。対象範囲外の場合は、coverage.valid: false とともに注記が返されます。
  • EJScreen v2.2(2022)は、コミュニティが保守する EJAM API(Public Environmental Data Partners)から提供されます。

epa://facility/{registry_id} リソース
  • registry_id は epa_echo_search_facilities から取得します。
  • epa_echo_get_facility のコンプライアンスプロファイルを返します。施設が見つからない場合はエラーになります。

epa://superfund/{site_id} リソース
  • site_id は epa_superfund_search_sites から取得します。
  • Superfund のサイトレコードを返します。SEMS レコードが見つからない場合はエラーになります。

機能

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

EPA 固有の機能:

  • ECHO(施設のコンプライアンス)、Envirofacts DMAP(TRI、Superfund、SDWIS)、AirNow(大気質)、コミュニティが保守する EJAM API(EJScreen v2.2、2022)を対象とする、epa_ で始まるツール群
  • AirNow のレスポンスは、API キーごとのレート制限内に収めるため、約1時間キャッシュされます。
  • TRI の報告には約18か月の遅れがあり、最新の報告年は通常、現在より2年遅れています。

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

  • 検索結果には、次のツールで必要となる ID(registryId、fipsCode、facilityId、triFacilityIds)が含まれます。
  • ステータスの照会に失敗した場合、epa_echo_get_facility は notice を含む部分的なプロファイルを返します。
  • 検索結果がない場合は、適用されたフィルターを示し、検索範囲を広げる方法を提案する message を返します。

はじめに

公開ホストインスタンス

公開インスタンス https://epa.caseyjhand.com/mcp を利用できます。インストールは不要です。AirNow キーなしで動作するため、epa_airnow_get_conditions は利用できませんが、その他の8つのツールは利用できます。Streamable HTTP を介して、任意の MCP クライアントから接続してください。

{
  "mcpServers": {
    "epa-mcp-server": {
      "type": "streamable-http",
      "url": "https://epa.caseyjhand.com/mcp"
    }
  }
}
セルフホスト/ローカル

以下を MCP クライアントの設定ファイルに追加してください。AirNow API キーは任意です。epa_airnow_get_conditions を有効にするには、AIRNOW_API_KEY を設定してください(docs.airnowapi.org で無料登録できます)。キーがない場合でも、他の8つのツールを使ってサーバーを起動できます。ECHO、DMAP、EJScreen のツールは認証なしで利用できます。

{
  "mcpServers": {
    "epa-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/epa-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "AIRNOW_API_KEY": "your-airnow-key"
      }
    }
  }
}

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

{
  "mcpServers": {
    "epa-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/epa-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "AIRNOW_API_KEY": "your-airnow-key"
      }
    }
  }
}

または Docker を使用します。

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

Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動してください。

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 AIRNOW_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
  • Bun v1.4.0 以降(または Node.js v24 以降)。開発と Docker では Bun v1.4.4 を使用します。
  • (任意)epa_airnow_get_conditions を有効にするには、AirNow API キーが必要です。docs.airnowapi.org/account/request で無料登録できます。キーがなくても、ほかの 8 つのツールは動作します。ECHO、DMAP、EJScreen のツールには API キーは必要ありません。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/epa-mcp-server.git
  1. ディレクトリに移動します:
cd epa-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します:
cp .env.example .env
# optionally set AIRNOW_API_KEY to enable the air quality tool

設定

すべての設定は、起動時に src/config/ の Zod スキーマを使って検証されます。主な環境変数は次のとおりです。

変数説明デフォルト
AIRNOW_API_KEY任意。 epa_airnow_get_conditions を有効にします。—
EPA_ECHO_BASE_URLECHO API のベース URLhttps://echodata.epa.gov/echo
EPA_DMAP_BASE_URLEnvirofacts DMAP API のベース URLhttps://data.epa.gov/dmapservice
EPA_AIRNOW_BASE_URLAirNow API のベース URLhttps://www.airnowapi.org/aq
EJSCREEN_API_BASE_URLEJScreen(EJAM)API のベース URLhttps://api.ejanalysis.com
MCP_TRANSPORT_TYPEトランスポート:stdio または httpstdio
MCP_HTTP_PORTHTTP サーバーのポート3010
MCP_HTTP_ENDPOINT_PATHHTTP エンドポイントのパス/mcp
MCP_SESSION_MODEHTTP セッション:auto、stateful、または statelessstateless
MCP_AUTH_MODE認証モード:none、jwt、または oauthnone
MCP_LOG_LEVELログレベル(RFC 5424)info
LOG_TOOL_FAILURE_PAYLOADSキー名をマスキングして、失敗した呼び出しの引数と結果を記録します。自由形式の値に含まれるシークレットは表示されたままです。false
LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTESログに記録するペイロードのバイト数上限16384
LOGS_DIRログファイルのディレクトリ(Node.js のみ)<project-root>/logs
STORAGE_PROVIDER_TYPEストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1in-memory
OTEL_ENABLEDOpenTelemetry のトレースとメトリクスを有効にしますfalse
OTEL_EXPORTER_OTLP_ENDPOINTOTLP のベース URL—
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINTシグナルごとのエンドポイント上書き設定—
OTEL_EXPORTER_OTLP_LOGS_ENDPOINTOTLP ログのエクスポートを有効にします—

任意の上書き設定の全一覧は .env.example を参照してください。

サーバーの実行

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

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    
  • チェックとテストを実行:

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    
Docker
docker build -t epa-mcp-server .
docker run --rm -e AIRNOW_API_KEY=your-key -p 3010:3010 epa-mcp-server

Dockerfile のデフォルトは HTTP トランスポート、ステートレスセッションモードで、ログは /var/log/epa-mcp-server に記録されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。

プロジェクト構成

ディレクトリ目的
src/index.tscreateApp() のエントリーポイント。ツールとリソースを登録し、サービスを初期化します。
src/configZod を使った、サーバー固有の環境変数の解析と検証。
src/mcp-server/toolsツール定義(*.tool.ts)。ECHO、DMAP、EJAM、AirNow にわたる 9 つのツール。
src/mcp-server/resourcesリソース定義(*.resource.ts)。施設とスーパーファンドの URI ハンドラー。
src/services/echoECHO REST API サービス層。施設検索、施設詳細、執行事例。
src/services/dmapEnvirofacts DMAP サービス層。TRI の排出量、スーパーファンドのサイト、飲料水システム。
src/services/airnowAirNow サービス層。現在および予測の AQI 観測値。
src/services/ejscreenEJScreen(EJAM)サービス層。地点とバッファーに関する環境正義の指標。
tests/src/ の構成に対応する単体テストと統合テスト。

開発ガイド

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

  • ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックに try/catch は使用しません
  • リクエスト単位のロギングには ctx.log を、テナント単位のストレージには ctx.state を使用します
  • 新しいツールとリソースは、src/mcp-server/*/definitions/index.ts のバレル経由で登録します
  • 外部 API 呼び出しはラップします。生データを検証し、ドメイン型に正規化してから出力スキーマを返します。欠落しているフィールドを捏造してはいけません
  • ECHO 検索では、少なくとも 1 つの地理的パラメーターを指定する必要があります。対象範囲を指定しないクエリは、稼働中の API でタイムアウトします

貢献

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

bun run devcheck
bun run test

ライセンス

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

コメント

MCP は初めてですか?

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

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