national-parks-mcp-server について
national-parks-mcp-serverは、米国国立公園局の公園、警報、キャンプ場、アクティビティ、イベント情報を提供します。NPS施設への旅行を計画するMCPクライアント向けに、専用ツールで公園の詳細や最新通知を検索できます。
主な機能
- 01名称、州、検索語による公園の検索
- 02公園の詳細、料金、開園時間、道順の取得
- 03警報と閉鎖情報の確認
- 04キャンプ場と設備の検索
- 05アクティビティと予定イベントの閲覧
活用シーン
- 01州やアクティビティで旅行先の公園を選ぶ
- 02訪問前に閉鎖や危険情報を確認
- 03キャンプ場の設備と予約情報を比較
- 04滞在中のアクティビティやイベントを探す
MCP 対応
MCPクライアントに、旅行計画情報をNPS Data APIから取得する6つのツールを提供します。STDIOとStreamable HTTPに対応し、セルフホストにはNPS APIキーが必要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://national-parks.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-national-parks https://national-parks.caseyjhand.com/mcp{"mcpServers":{"cyanheads-national-parks":{"type":"http","url":"https://national-parks.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-national-parks":{"type":"http","url":"https://national-parks.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-national-parks":{"type":"http","url":"https://national-parks.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-national-parks":{"serverUrl":"https://national-parks.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
6| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | 返す公園の最大数(1~50)。全体では約 470 か所あります。すべてをページ送りで取得するのではなく、query/stateCode で絞り込んでください。 |
| query | string | いいえ | 公園名と説明を自由形式のテキストで検索します(例:"yosemite"、"civil war"、"redwood")。parkCode または名称の完全一致が最優先で、次にその他の名称一致、最後に説明にのみ語句が含まれる公園が続きます。すべての一致結果を順位付けしてから start/limit を適用します。省略すると州別に参照します。query または stateCode のいずれかを指定することを推奨します。どちらも指定しない場合、約 470 か所ある NPS 景勝地すべての最初のページを返します。 |
| start | integer | いいえ | 一致した結果セット内の 0 始まりのページネーションオフセット。結果をページ送りするには limit と併用します。 |
| activity | string | いいえ | アクティビティを提供する公園に絞り込みます。各公園のアクティビティ一覧と照合します(例:"hiking"、"camping"、"stargazing")。大文字と小文字を区別しない部分文字列一致で、query/stateCode と組み合わせられます。start/limit の適用前に実行されるため、totalCount は 1 ページ分ではなく、一致するすべての公園を数えます。公園のアクティビティ一覧全体は nps_get_park で確認してください。 |
| stateCode | string | いいえ | 2 文字の米国州・準州コード、またはカンマ区切りのコード一覧(例:"CA"、"WY,MT,ID")。該当する州にある公園に絞り込みます。query と組み合わせてさらに絞り込めます。 |
詳細
@cyanheads/national-parks-mcp-server
NPS Data API を使用して、米国国立公園局の旅行を計画できます。公園の検索、警報や閉鎖状況の確認、キャンプ場の検索、アクティビティやイベントの閲覧が可能です。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://national-parks.caseyjhand.com/mcp
概要
国立公園局の旅行を計画できます。公園の検索、警報や閉鎖状況の確認、キャンプ場、アクティビティ、イベントの閲覧が可能です。対象は国立公園、国定公園、史跡、国立海岸であり、州立公園、森林局、BLM の土地は対象外です。
ツール
| ツール | 説明 |
|---|---|
nps_find_parks | 地名、米国の州、または自由入力のクエリから公園を特定します。必須の最初のステップです。各公園の parkCode と旅行計画向けの概要を返します。 |
nps_get_park | 最大 10 件の公園の詳細を、1 回のまとめての呼び出しで取得します。説明、アクティビティ、料金とパス、営業時間、連絡先、道順、天候の概要、画像が含まれます。 |
nps_get_alerts | 公園または州の現在の警報を取得します。閉鎖、危険、注意喚起、情報を、カテゴリと新しさがわかる順に表示します。 |
nps_find_campgrounds | 公園または州のキャンプ場を検索します。設備、予約可能サイトと先着順サイトの数、予約情報、アクセシビリティ、料金を確認できます。 |
nps_get_activities | 厳選されたアクティビティや見どころを取得します。タイトル、所要時間、場所、アクセシビリティ、料金・ペット・予約に関するフラグが含まれます。 |
nps_find_events | 指定した日付範囲内の予定イベントを検索します。日付と時刻、場所、カテゴリ、料金、登録リンクが含まれます。 |
機能リファレンス
nps_find_parks ツール
- フリーテキストの
query、2 文字のstateCode(または"WY,MT,ID"のようなカンマ区切りリスト)、および任意のactivityフィルターを指定します。limitは 1~50(デフォルトは 10)で、startオフセットを指定できます - 各公園には、
parkCodeに加えて、指定区分、州、説明、座標、主なアクティビティ、最低入園料、NPS ページが含まれます。parkCodeまたは名前の完全一致が上位に表示され、totalCountにはすべての一致件数が含まれます
nps_get_park ツール
- 1 回の呼び出しで最大 10 個の
parkCodeを指定できます。任意のfieldsセレクター(activities、topics、fees、hours、contacts、directions、images)を使うと、必要なセクションだけに応答を絞り込めます - 常に名前、指定区分、州、説明、座標、天気の概要、NPS ページを返します。カテゴリ別の料金とパス、エリア別・季節別の営業時間、連絡先、最大 5 枚の画像が含まれます(公園の画像がそれより多い場合は
imagesTruncatedが示されます) - 該当するサイトがないコードは
missingCodesとして返されます。1 件も解決できない場合に限り、呼び出しは失敗(no_parks_found)します
nps_get_alerts ツール
parkCode、stateCode、フリーテキストのquery、category(Danger、Caution、Information、Park Closure)で絞り込みます。limitは 1~50(デフォルトは 20)で、startオフセットを指定できます- 新しい順に並び、各アラートにはカテゴリ、鮮度を示す
lastIndexedDate、詳細が含まれます。categoryBreakdownには、返されたアラートの重大度別件数が表示されます - 該当場所にアラートがない場合の「問題なし」の通知は、フィルターに一致するものがない場合や、末尾を過ぎたページの場合とは区別されます
nps_find_campgrounds ツール
parkCode、stateCode、またはフリーテキストのqueryで絞り込みます。limitは 1~50(デフォルトは 15)で、startオフセットを指定できます- キャンプ場ごとに、飲料水、シャワー、ダンプステーション、トイレ、ゴミ収集、RV 利用の可否を「はい」「いいえ」「不明」で示す設備情報、予約可能・先着順・総サイト数、予約案内と予約 URL、最低料金、アクセシビリティ、座標、NPS ページが含まれます
nps_get_activities ツール
parkCodeを 1 つ、またはstateCodeを 1 つ指定する必要があります。任意でqueryを指定できます。limitは 1~50(デフォルトは 15)で、startオフセットを指定できます- アクティビティごとに、タイトル、短い説明、所要時間、場所、座標、アクセシビリティ、季節、予約必須およびペット同伴可のフラグ、料金の説明、NPS ページが含まれます
nps_find_events ツール
dateStart/dateEndの期間(YYYY-MM-DD)内で、parkCode、stateCode、またはqueryにより絞り込みます。オフセットではなく、pageNumberとpageSize(1~50、デフォルトは 15)でページを指定します- イベントごとに、タイトル、開催期間、期間内の
occurrenceDates(シリーズ開催の場合はisRecurringで示されます)、時間枠、場所、カテゴリ、料金、登録 URL と情報 URL が含まれます - 結果とともに NPS が報告するエラーは、呼び出しを失敗させるのではなく通知にまとめられます
特長
@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、プラグイン可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、任意で OpenTelemetry トレースを利用できる構造化ログを備えています。
NPS 固有の機能:
- NPS Data API(
developer.nps.gov/api/v1、X-Api-Key認証)を、旅行計画向けの 6 つのエンドポイントにわたって扱う 1 つのサービス - NPS の一貫性のないペイロードを徹底的に正規化します。文字列として返される数値・ブール値フィールド、ネストされた値(
campsites.totalSites)、配列型のアメニティフィールド、フィールド名が小文字になっている/events固有のエンベロープを、ハンドラーに渡す前に明確なドメイン型へ変換します nps_get_parkは、最大 10 件の公園コードを 1 回の上流リクエストにまとめます- 上流で一時的な障害(5xx/ネットワーク)が発生した場合は軽量な再試行を行います。キーがない、または無効な場合はエラーを明示し、
NPS_API_KEYを指定します nps_find_parks/nps_get_parkが返す座標は、天気予報の取得に天気サーバー(nws-weather、open-meteo)で利用できます
エージェント向けの出力:
- すべての応答に結果セットのコンテキストを含めます。
totalCount、切り捨て情報(truncated/shown/cap)、適用したフィルターのエコー、結果がない場合の通知が、構造化出力とテキスト出力の両方に反映されます - キャンプ場、厳選されたアクティビティ、イベントがない公園は多数あります。結果が空の場合はエラーにせず、ほかにどこを確認すればよいかを通知します
parkCodeを最初に使うワークフローを各ツールの説明に記載しています。nps_get_parkはmissingCodesを返すため、コードを誤って入力した場合に自分で修正できます- 不確実性を保ち、捏造はしません。座標、道順、料金、アメニティの値が不明な場合は推測せず
nullを返します。後続の天気情報取得で使う座標を捏造することもありません
はじめに
公開ホストインスタンス
https://national-parks.caseyjhand.com/mcp で公開インスタンスを利用できます。インストールは不要です。Streamable HTTP を提供しており、クライアントごとに設定形式が異なります。
Claude Code の場合:
claude mcp add --transport http national-parks-mcp-server https://national-parks.caseyjhand.com/mcp
Cline の場合(cline_mcp_settings.json):
{
"mcpServers": {
"national-parks-mcp-server": {
"type": "streamableHttp",
"url": "https://national-parks.caseyjhand.com/mcp"
}
}
}
Cursor の場合(mcp.json):
{
"mcpServers": {
"national-parks-mcp-server": {
"url": "https://national-parks.caseyjhand.com/mcp"
}
}
}
Claude Desktop では、Settings → Connectors からリモートサーバーを追加できます。
セルフホスト/ローカル
以下を MCP クライアントの設定ファイルに追加してください。無料の NPS Data API キーが必要です。こちらからすぐに登録できます。
{
"mcpServers": {
"national-parks-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/national-parks-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NPS_API_KEY": "your-api-key"
}
}
}
}
または、npx を使用する場合(Bun は不要です):
{
"mcpServers": {
"national-parks-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/national-parks-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NPS_API_KEY": "your-api-key"
}
}
}
}
または、Docker を使用する場合:
{
"mcpServers": {
"national-parks-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "NPS_API_KEY=your-api-key",
"ghcr.io/cyanheads/national-parks-mcp-server:latest"
]
}
}
}
Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 NPS_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4 以降(または Node.js v24 以降)。
- 無料の NPS Data API キー。こちらからすぐに登録できます。キーがないとサーバーは起動しません。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/national-parks-mcp-server.git
- ディレクトリに移動します:
cd national-parks-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set NPS_API_KEY
設定
すべての設定は、起動時に Zod スキーマで検証されます。主な環境変数は次のとおりです。
| 変数 | 説明 | デフォルト |
|---|---|---|
NPS_API_KEY | 必須。 NPS Data API キーです。X-Api-Key ヘッダーとして送信されます。キーがない場合、サーバーは起動に失敗します。 | — |
NPS_BASE_URL | NPS Data API のベース URL の上書き設定(テスト/プロキシ用)。 | https://developer.nps.gov/api/v1 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_HTTP_ENDPOINT_PATH | MCP サーバーをマウントするパス。 | /mcp |
MCP_SESSION_MODE | セッション処理:auto、stateful、stateless のいずれか。スキーマのデフォルトである auto は stateful に解決されます。このサーバーでは stateless を明示的に設定しています。MCP 2026-07-28 では、どちらのモードでもセッションは不要です。 | stateless |
MCP_AUTH_MODE | 認証モード:none、jwt、oauth のいずれか。 | none |
MCP_LOG_LEVEL | ログレベル(RFC 5424)。 | info |
LOGS_DIR | ログファイルの保存ディレクトリ(Node.js のみ)。 | <project-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 失敗した各ツール呼び出しの引数と結果を、キー名で機密情報をマスキングし、LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(デフォルトは 16384)を上限として記録します。自由形式の値に含まれる機密情報はマスキングされません。 | false |
STORAGE_PROVIDER_TYPE | ストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。 | in-memory |
OTEL_ENABLED | OpenTelemetry instrumentation(スパン、メトリクス、完了ログ)を有効にします。 | false |
省略可能な上書き設定の一覧は、.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 national-parks-mcp-server .
docker run --rm -e NPS_API_KEY=your-key -p 3010:3010 national-parks-mcp-server
Dockerfile のデフォルトでは、HTTP トランスポート、ステートレスセッションモードを使用し、ログは /var/log/national-parks-mcp-server に出力されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには --build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。6 つのツールを登録し、NPS サービスを初期化します。 |
src/config | サーバー固有の環境変数の解析と、Zod による検証を行います。 |
src/mcp-server/tools | ツール定義(*.tool.ts)。 |
src/services/nps | NPS Data API サービスです。HTTP クライアント、再試行境界、エラーエンベロープの検出、アップストリームデータの正規化をすべて担います。 |
tests/ | src/ と対応する単体テストおよび統合テスト。 |
開発ガイド
開発ガイドラインとアーキテクチャ上の規則については、AGENTS.md/CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックに
try/catchを使用しないでください。 - リクエスト単位のログには
ctx.logを、テナント単位のストレージにはctx.stateを使用してください。 - 新しいツールは
createApp()の配列に登録してください。 - 外部 API はラップしてください。生データを検証してからドメイン型に正規化し、出力スキーマに従って返します。不足しているフィールドを捏造してはいけません。
データと出典表記
データは、米国国立公園局が運営する NPS Data API から取得されます。職務上の立場で NPS 職員が作成したコンテンツは、米国政府の著作物としてパブリックドメインに属します(17 U.S.C. §§ 101 and 105)。米国政府の著作物に対する権利は主張しません。
API が返すコンテンツのすべてが政府によって作成されたものとは限りません。画像や素材の中には、第三者の著作権やその他の制限が適用されるものがあります。再利用する前に、各項目の権利を確認してください。
NPS のアローヘッドシンボルは、18 U.S.C. § 701 に基づいて保護されている使用制限付きの標章です。NPS 長官の書面による許可なしに、複製または再利用してはなりません。
貢献
Issue の報告を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。