us-drought-monitor-mcp-server について
米国干ばつモニターの週次データを、全国、州、郡、流域などの地域単位で照会するMCPサーバーです。深刻度のスナップショット、時系列、地域ランキング、干ばつ期間の集計に加え、大規模結果の一時保存と読み取り専用SQL分析に対応します。
主な機能
- 01現在または指定日の干ばつ深刻度を照会
- 02週次指標と時系列の取得
- 03干ばつ指標による州・郡の順位付け
- 04郡ごとの干ばつ週数の集計
- 05大規模結果を一時保存して読み取り専用SQLで照会
- 06地域とカテゴリの参照情報を確認
活用シーン
- 01州ごとの干ばつ深刻度の比較
- 02地域の干ばつ指標を時系列で追跡
- 03干ばつ期間の条件を満たす郡の検索
- 04SQLによる大規模結果テーブルの分析
MCP 対応
stdioまたはStreamable HTTPで、MCPクライアント向けに8つのツールを提供し、公開ホストエンドポイントもあります。米国干ばつモニターのデータを照会し、大規模な結果は読み取り専用SQL用に一時保存できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://us-drought-monitor.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-us-drought-monitor https://us-drought-monitor.caseyjhand.com/mcp{"mcpServers":{"cyanheads-us-drought-monitor":{"type":"http","url":"https://us-drought-monitor.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-us-drought-monitor":{"type":"http","url":"https://us-drought-monitor.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-us-drought-monitor":{"type":"http","url":"https://us-drought-monitor.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-us-drought-monitor":{"serverUrl":"https://us-drought-monitor.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
7| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | このページに表示するレコードの最大数。 |
| state | string | いいえ | 郡専用フィルター:州の郵便略号、2 桁の FIPS、または州の正式名称を完全一致で指定します。 |
| topic | enum | はい | 参照する参照ファミリー。categories | dsci | area_types | coverage | states | counties | tribal | climate_divisions | huc |
| cursor | string | いいえ | 同じフィルターを使用した前のページの継続カーソル。 |
| hucLevel | any | いいえ | huc では必須。識別子の正確な桁数。 |
| nameContains | string | いいえ | 正規化されたすべてのトークンが参照名に含まれている必要があります。 |
詳細
@cyanheads/us-drought-monitor-mcp-server
MCP 経由で、米国干ばつモニターの深刻度、DSCI、人口、干ばつ期間を照会します。STDIO または Streamable HTTP に対応しています。
概要
米国干ばつモニター(USDM)のデータサービスから、毎週の干ばつ統計を取得します。地域の現在または指定日の深刻度を確認し、週ごとの履歴を追跡し、州や郡をランキングし、全国、州、郡、HUC 流域、部族、気候区分、河川予報センターの各地理区分における郡の干ばつ週数を集計できます。大規模な結果は、読み取り専用 SQL 用のテーブルとしてステージングされます。API キーは不要です。
呼び出し元ガイドでは、データの解釈と分析に必要なデータをすべて取得する方法を説明しています。サーバーはこのガイドをスキルリソースとしても提供します。
ツール
| ツール | 説明 |
|---|---|
drought_list_reference | 干ばつのカテゴリ、DSCI の計算式、カバレッジ、正確な地理識別子を参照します |
drought_get_current_severity | 現在または指定日のスナップショット。面積、平方マイル、人口、DSCI、および 4 週/52 週の DSCI 変化を含みます |
drought_get_timeseries | 指定した地域の週次指標と DSCI。欠損データ期間とピークの要約を含みます |
drought_compare_areas | 州または郡を、DSCI、D2+/D3+ のカバレッジ、または基準週からの変化で順位付けします |
drought_get_weeks_in_drought | 干ばつカテゴリ以上の状態が続いた郡の連続期間、または連続しない週数を取得します |
drought_dataframe_describe | ステージング済みキャンバスを調査します。テーブル、列、有効期限、完全な生成元メタデータを確認できます |
drought_dataframe_query | ステージング済み干ばつテーブルに対して、読み取り専用 SQL をページ単位で実行します |
drought_dataframe_drop | 破棄可能なステージング済みテーブルを 1 つ削除します。DROUGHT_DATAFRAME_DROP_ENABLED=true によるオプトインが必要です |
機能リファレンス
drought_list_reference ツール
topic:categories、dsci、area_types、coverage、states、counties、tribal、climate_divisions、river_forecast_centersまたはhuc。nameContainsはトークンフィルター、stateは郡または気候区分の指定に使用します。hucではhucLevel(2、4、6、8)が必須です。省略可能なparentHucを指定すると、レベル 2、4、6 の既存の短い HUC の下位地域を選択できます- 1 ページあたりの既定件数は 25 件で、最大 200 件です。フィルターを変更せずに
nextCursorで続きを取得します。ページを明示的に指定すると、有効な件数が返され、データが尽きた場合のみ指定件数を下回ります。totalCountは一致するすべての件数を示します - レコードでは、先頭のゼロを含む識別子、気候関連の州郵便略号、およびデータソースの版が保持されます。
bundleVersionとトピックに応じたsourceMetadata(データソース URL と SHA-256 ハッシュ)でオフラインバンドルの日付を確認できます。provenance.sourceUrlsには同じデータソースの選択内容が使われます
drought_get_current_severity ツール
- 1 つの
area(areaTypeとaoi。HUC の場合はhucLevelも指定します。aoiには正確な識別子、州名、または"County Name, ST"形式の名前を指定します)。郡名が重複しない場合は、正確な名前との照合後に"King, WA"のような州略号のない名前も使用できます。省略可能なdateの既定値は最新の公開マップです。usでは CONUS と Total の両方を選択します - 各スナップショットには、累積およびカテゴリ別の面積比率、累積面積(平方マイル)、累積人口(米国/州/郡以外では
populationStatusはunsupported)、dsci、および正確に 28 日前と 364 日前を基準とするdsciChange4Weeks/dsciChange52Weeksが含まれます。それぞれにavailable/missing/before_coverageのステータスが付きます - 公開済みのカバレッジ範囲外の日付では、
found: falseとguidanceが返されます - River Forecast Centers では、公式コード(例:
CBRFC)または正確な名前(Colorado Basin)を指定してareaType: "river_forecast_center"を使用します。面積比率、平方マイル、DSCI に対応しています。不明な RFC はローカルの参照情報との照合に失敗します
drought_get_timeseries ツール
- 同じ
areaTypeと HUC レベルを共有する 1~100 件のareasを指定します。startDate/endDateは両端を含みます。metricはarea_percent(既定値)、area_sq_miles、population_percentまたはpopulation_count(米国/州/郡のみ)です。statisticsTypeはcumulative(既定値)またはcategoricalです - 行には指標バケットと
dsciが含まれます。missingAreas、missingObservations(指標および DSCI の各構成要素についての日付期間)、地域ごとのsummary(同率のピークをすべて含む)で、時系列全体を網羅します - インライン予算を超える行は、プレビューを介してステージングされ、テーブルは
stagingに置かれます。省略可能なcanvas_idを指定すると、既存のキャンバスにステージングできます。収まる場合、メタデータはすべてインラインに保持されます。あふれた場合も、観測数が 0 件の結果を含め、行とメタデータ全体が自動的に保持されます。metadata_pagesには各配列の合計件数、返却件数、次のオフセットが示されます
drought_compare_areas ツール
scopeはstatesまたはcounties(任意のstateを指定しない場合は全米)、metricはdsci(デフォルト)、d2_d4またはd3_d4です。任意のdate(デフォルトは最新)と、変化を順位付けするためのbaselineDateを指定できます。directionはdesc(デフォルト)またはascです- 同順位は同じ順位になります。
excludedAreasには、対象日または基準日の値が欠けている各地域が示されます。changeUnitはindexまたはpercentage_pointsです limit(デフォルトは20、最大200)はインラインプレビューの件数を指定します。完全なランキングはステージングされ、任意でcanvas_idを再利用できます
drought_get_weeks_in_drought ツール
startDate、endDate、minCategory(D0~D4)、minWeeksは必須です。modeはconsecutive(デフォルト)またはnon_consecutiveです。statesまたは単一のcountyのいずれか一方を指定するか、どちらも指定せず全米の郡を対象にできます- 行には
fips、county、stateと、startDate/endDate/consecutiveWeeksまたはnonConsecutiveWeeksが含まれます。郡の一部でも指定カテゴリ以上の深刻度に達すると、その郡は条件を満たします。連続期間は指定された期間内に限られます - 連続期間の
startMayExtendEarlierとendMayContinueは、指定された有効期間の境界に接する状態を示します。これらは継続の不確実性を表します。月曜日の終了日は、最終マップの火曜日から6日後の日付と比較されます。非連続の行にはこれらのフラグはありません - 1ページあたりの行数はデフォルトで25、最大200です。フィルターを変更しなければ、
nextCursorは5分間有効です。明示的にページを指定した場合は有効件数が返され、データが尽きた場合にのみ件数が少なくなります。件数は期間に関する統計であり、プログラムの適格性を示すものではありません
drought_dataframe_describe ツール
- ステージング応答に含まれる
canvas_idを指定します。テーブルの SQL 列型、行数、有効期限が表示されます table_nameを指定すると、そのテーブルの完全な生成元メタデータ(要求範囲と有効範囲、単位、バケット列の対応関係、欠損データ、概要、由来)が表示されます- メタデータが大きすぎる場合、最初のページの先頭部分が
metadata_pagesとともに返されます。保持されているコレクション全体を読み取るには、table_name、metadata_field(areas、summary、missingAreas、missingObservations)、metadata_offset、metadata_limit(デフォルトは20、最大100)を指定し、metadata_page.next_offsetが null になるまで続けて取得します。明示的にページを指定した場合は、同一のスナップショットから有効件数が返され、データが尽きた場合にのみ件数が少なくなります。上流への再取得は行われません
drought_dataframe_query ツール
canvas_idと、末尾に任意でセミコロンを付けられるDuckDB読み取り式を1つ指定します。書き込み、複数のステートメント、外部読み取り、システムカタログへのアクセスは拒否されますcurrent_schemaという名前の列は、テーブル名を付けて参照する必要があります(t.current_schema)。DuckDBがこれをエンジン設定関数として解釈する可能性があるため、テーブル名のない参照は拒否されますlimit(デフォルトは25、最大500)と、最大250,000までのoffsetを指定できます。next_offsetが null になるまで、同じ SQL で続きを取得してください。明示的にページを指定した場合は、セル幅にかかわらず有効件数が返され、データが尽きた場合にのみ件数が少なくなります。SELECT * FROM <table_name> ORDER BY row_idは元の行を順番どおりに返しますcountIsExactが true になるのは、offset 0からの1ページにすべての行が含まれる場合のみです。総件数を取得するにはSELECT COUNT(*)を使用してください
drought_dataframe_drop ツール
canvas_idとtable_nameを指定します。分析用コピーのみを削除します。テーブルがすでに存在しない場合はdropped: falseを返します。期限切れのキャンバスではcanvas_not_foundエラーになります- オプトイン方式です。
DROUGHT_DATAFRAME_DROP_ENABLED=trueでない限り、tools/listには表示されません
機能
@cyanheads/mcp-ts-core を基盤としており、stdioおよびStreamable HTTPトランスポート、切り替え可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションのOpenTelemetryトレースに対応した構造化ログを提供します。
USDM固有の機能:
- USDM データサービス(
usdmdataservices.unl.edu)向けの固定オリジンのクライアントです。キーは不要です。上流へのリクエストは呼び出しごとに最大 64 件、最大 64 MiB、同時実行は 3 件で、Retry-Afterを尊重する再試行は 1 回です - 日付は該当する火曜日〜月曜日のマップ週に切り捨てられます。対象期間は 2000-01-04 から始まり、通常は木曜日に公開される最新マップを上流から検出します
- 累積バケット(
d1_d4= D1 以上)は重複します。カテゴリ別バケット(d1_only)は相互に排他的です。DSCI は上流の実験的な 0~500 の指数であり、再計算されることはありません - オフラインの地理データバンドル:52 の州および管轄区域、3,230 の郡(コネチカット州の計画地域を含む)、323 の部族地域、357 の気候区分、13 の河川予報センター、2,916 の HUC。
scripts/update-reference-data.tsで更新されます - ステージングされたテーブルは DuckDB に保存され、30 分のスライディング有効期間がクエリによって更新されます。キャンバストークンはテナント単位の共有可能な機能なので、認証情報として扱ってください
- プロセス上限の 4 キャンバスに達した場合、トークンを省略したステージングでは、空きスロットがあるサービス所有のキャンバスのうち、そのテナントで最後に使用されたものを再利用します(1 キャンバスあたり 8 テーブル)。明示的に指定されたキャンバスは呼び出し元の所有のままで、存続中のテーブルが退避されることはありません。
staging_capacity_exhaustedはトークンの再利用または有効期限切れを、staging_busyは処理中の作業が終わるまで待機することを推奨します。2 ワークフローの受け入れ上限は、インライン読み取りを含め、フェッチ前に適用されます - コネチカット州の旧郡 FIPS 8 件は引き続き検出可能ですが、比較対象の母集団からは除外されます。観測値の検索結果が空であるのは、USDM がコネチカット州を計画地域単位で提供しているためです。
topic: counties、state: CTを指定してdrought_list_referenceを呼び出してください。郡が異なる計画地域境界に割り当てられることはありません。currentUsdm: falseだけでは過去の対象期間に関する規則にはなりません - Node での取得には、再利用可能なプライベートの Undici HTTP/1.1 ディスパッチャーを使用し、サーバーの終了時に解放します。Bun ではネイティブの fetch を引き続き使用します
エージェント向けの出力:
- 参照レコード、クエリ行、説明用の列は、JSON セルを含むコンパクトなテーブル形式です。空のセルと null 値により、存在しない任意フィールドと null 値を区別できます。メタデータ、ネストされた値、クリック可能な URL は、どちらのレスポンス形式でも完全な状態で保持されます
- 正の整数のページ/プレビュー上限が、参照情報、比較、期間では 200、SQL では 500、メタデータでは 100 を超える場合、上限値に調整されます。
effectiveLimitとlimitNoticeに調整結果が示されます。代わりにDROUGHT_CLAMP_LIMITS=falseを設定すると、これらの最大値が通知され、適用されます。上限調整はリクエストログとdrought.limit_clampsカウンターに記録されます。継続処理ではすべてのレコードが保持されます。0 以下または小数の上限値は拒否されます。件数の上限はレスポンスのバイト数を制限しません - 日付入力では
YYYY-MM-DDが指定され、実在する暦日であることが検証されます。空の省略可能なスナップショット日付と比較日付には、既定値が適用されます。期間内のしきい値が対象期間を超える場合は、minWeeksを小さくするか日付の範囲を広げるよう通知されます - すべてのレスポンスには出典情報が含まれます:
sourceUrls、retrievedAt、USDM のcredit行、実験的な DSCI の引用 - 対応する人口スナップショットと人口系列には
provenance.populationInterpretationが追加され、データフレームの説明/クエリ処理後も保持されます:USDM の人口値は、郡内の人口が一様であると仮定した国勢調査に基づく概算値であり、実際の現在の人口数ではなく、人工的な精度を伴います。出典値は変更されず、国勢調査の実施年は推定されません - 欠損データは明示的に保持されます:
dsciStatus/populationStatusを伴う null、missingAreas、日付範囲を示すmissingObservations、excludedAreasが使われ、0 で補完されることはありません - 範囲と識別情報を返します:
requestedRange/effectiveRange、latestMapDate、resolvedAreas、およびdrought_dataframe_describeとdrought_dataframe_queryを示すステージングハンドル
はじめに
ホストされたインスタンスに接続します:
claude mcp add --transport http us-drought-monitor-mcp-server https://us-drought-monitor.caseyjhand.com/mcp
または、ローカルで実行します:
claude mcp add us-drought-monitor-mcp-server -- npx -y @cyanheads/us-drought-monitor-mcp-server
その他のクライアントでは、MCP 設定ファイルに以下を追加します:
{
"mcpServers": {
"us-drought-monitor-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/us-drought-monitor-mcp-server"]
}
}
}
API キーやアカウントは不要です。テーブルの削除を公開するには、DROUGHT_DATAFRAME_DROP_ENABLED=true を設定します。Docker またはソースからのビルドについては、サーバーの実行を参照してください。
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
DROUGHT_DATAFRAME_DROP_ENABLED | 一時的なステージング済みテーブル用に drought_dataframe_drop を公開します。 | false |
DROUGHT_CLAMP_LIMITS | 上限を超える正の制限値を上限に合わせます。false にすると、最大値を公開して適用します。 | true |
CANVAS_PROVIDER_TYPE | 分析エンジン:duckdb、またはステージングと SQL を無効にする場合は none。 | duckdb |
CANVAS_DEFAULT_MEMORY_LIMIT_MB | 各キャンバスエンジンのメモリ制限。 | 128 |
CANVAS_MAX_CANVASES_PER_TENANT | プロバイダーのキャンバス上限。サーバーはこれとは別に、プロセスあたり4つの稼働中キャンバスを受け入れます。 | 4 |
CANVAS_DEFAULT_ROW_LIMIT | プロバイダーのクエリ行数上限。キャンバスが有効な場合は 501 以上にします。 | 10000 |
CANVAS_TTL_MS | スライド式のキャンバス有効期間(ミリ秒)。ステージング済みテーブルは30分間使用されないと期限切れになります。 | 86400000 |
CANVAS_ABSOLUTE_CAP_MS | キャンバスの絶対有効期間(ミリ秒)。 | 604800000 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_HOST | HTTP バインドアドレス。 | 127.0.0.1 |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP エンドポイントのパス。 | /mcp |
MCP_SESSION_MODE | HTTP セッションモード:stateless、stateful、または auto。 | stateless |
MCP_AUTH_MODE | 認証:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(debug、info、warning、error など)。 | info |
LOGS_DIR | ログファイルのディレクトリ(Node.js のみ)。 | <app-root>/logs |
OTEL_ENABLED | OpenTelemetry を有効にします。 | false |
すべてのサーバー設定と共通のフレームワーク上書きについては、.env.example を参照してください。
サーバーの実行
ローカル開発
Bun v1.4.0 以降(または Node.js v24 以降)が必要です。
git clone https://github.com/cyanheads/us-drought-monitor-mcp-server.git
cd us-drought-monitor-mcp-server
bun install
cp .env.example .env
# optional: set DROUGHT_DATAFRAME_DROP_ENABLED or canvas limits
ステージングと SQL にはネイティブの DuckDB が必要です。これは npm および Docker によるインストールに含まれています。ポータブルな Claude Desktop 用 .mcpb バンドルでは CANVAS_PROVIDER_TYPE=none に固定され、データ取得の上限内でデータ生成ツールが結果をすべてインラインで返します。明示的なキャンバストークンとデータフレーム操作には、引き続き分析プロバイダーが必要です。無効、期限切れ、または他者のトークンがインラインでの成功にフォールバックすることはありません。
-
本番版をビルドして実行する:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
チェックとテストを実行する:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
Docker
docker run --rm -p 127.0.0.1:3010:3010 ghcr.io/cyanheads/us-drought-monitor-mcp-server:latest
このイメージはネイティブ DuckDB を含む Bun 上で動作し、デフォルトではステートレスセッションモードでポート3010の HTTP を使用し、/var/log/us-drought-monitor-mcp-server にログを記録します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドします。
ローカルでビルドするには、docker build -t us-drought-monitor-mcp-server . を実行します。stdio クライアントでは、"command": "docker" を指定し、"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/us-drought-monitor-mcp-server:latest"] を設定します。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/mcp-server/tools | ツール定義(*.tool.ts)。干ばつ関連およびデータフレーム関連の8つのツール。 |
src/services/drought | USDM クライアント、地理情報の解決、地図週の日付、ワークフロー、ステージング、レンダリング。 |
src/services/canvas-accessor.ts | 起動時に設定されたフレームワークの DataCanvas へのアクセス。 |
src/config | 環境設定の読み込み、キャンバスのデフォルト値、件数スキーマ、上限調整のテレメトリ。 |
src/data | 生成された地理情報リファレンスバンドル(reference.json)。 |
scripts/update-reference-data.ts | 公式ソースからリファレンスバンドルを更新するメンテナンス用スクリプト。 |
tests/ | src/ の構成に対応する、ユニットテスト、コントラクトテスト、統合テスト。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。概要は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックでは
try/catchを使わないでください - サービスエラーには、各ツールのインライン
errors[]コントラクトで宣言されたreasonが含まれます - 新しいツールは、
src/index.tsのcreateApp()配列に登録してください - 外部 API 呼び出しをラップしてください。生データを検証し、ドメイン型に正規化してから、出力スキーマに沿った値を返してください。不足しているフィールドを決して捏造しないでください
コントリビューション
イシューを歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
このプロジェクトは Apache 2.0 ライセンスの下でライセンスされています。詳細については、LICENSE ファイルを参照してください。
米国干ばつモニターは、ネブラスカ大学リンカーン校の国立干ばつ緩和センター、米国農務省、米国海洋大気庁、米国航空宇宙局が共同で作成しています。地図提供:NDMC。
DSCI:Akyuz, F. A. 2017. Drought Severity and Coverage Index. United States Drought Monitor.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。