national-parks-mcp-server

Plan US National Park Service trips — parks, alerts, campgrounds, things to do, events.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
100%
Vollständigkeit des Schemas
92%
Qualität der Benennung
80%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~8,785Tokens (Tool-Definitionen)
~17.5 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (6.86% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "national-parks-mcp-server": {
      "command": "node",
      "args": [
        "@cyanheads/national-parks-mcp-server"
      ]
    }
  }
}

Ausführbare Pakete

npm@cyanheads/national-parks-mcp-server0.2.0streamable-http

Remote-Endpunkte

https://national-parks.caseyjhand.com/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (6)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢nps_find_parks(query, stateCode, activity, limit, start)

Resolve a place name, US state, or free-text query to National Park Service parks — the required first step before the detail tools. Returns each park's parkCode (the key nps_get_park, nps_get_alerts, nps_find_campgrounds, nps_get_activities, and nps_find_events all use) plus a compact trip-planning summary (designation, states, description, coordinates, headline activities, entrance fee, NPS page). Coverage is US NPS sites only — national parks, monuments, historic sites, seashores — not state parks and not Forest Service or BLM land.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "query": {
      "description": "Free-text search across park names and descriptions (e.g. \"yosemite\", \"civil war\", \"redwood\"). Exact parkCode or name matches lead, then other name matches, then parks that only mention the term in their description — ranked across every match before start/limit apply. Omit to browse by state. At least one of query or stateCode is recommended; with neither, returns the first page of all ~470 NPS sites.",
      "type": "string"
    },
    "stateCode": {
      "description": "Two-letter US state/territory code, or comma-separated list (e.g. \"CA\", \"WY,MT,ID\"). Filters to parks located in those states. Combine with query to narrow.",
      "type": "string"
    },
    "activity": {
      "description": "Filter to parks offering an activity, matched against each park's activities list (e.g. \"hiking\", \"camping\", \"stargazing\"). Case-insensitive substring match, combined with query/stateCode and applied before start/limit, so totalCount counts every matching park, not one page. Use nps_get_park to see a park's full activity list.",
      "type": "string"
    },
    "limit": {
      "default": 10,
      "description": "Maximum parks to return (1–50). The full set is ~470 sites; narrow with query/stateCode rather than paging through everything.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "start": {
      "default": 0,
      "description": "Zero-based offset for pagination within the matched set. Use with limit to page through results.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "parks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "parkCode": {
            "type": "string",
            "description": "Park code — the key for nps_get_park, nps_get_alerts, nps_find_campgrounds, nps_get_activities, nps_find_events (e.g. \"yose\")."
          },
          "fullName": {
            "type": "string",
            "description": "Full official name (e.g. \"Yosemite National Park\")."
          },
          "designation": {
            "type": "string",
            "description": "Site type (e.g. \"National Park\", \"National Monument\", \"National Historic Site\"). Empty string for sites without a designation."
          },
          "states": {
            "type": "string",
            "description": "Comma-separated state codes the park spans (e.g. \"CA\", \"WY,MT,ID\")."
          },
          "description": {
            "type": "string",
            "description": "Short park description."
          },
          "latitude": {
            "description": "Center latitude (decimal degrees), or null if the park record has no coordinates.",
            "type": [
              "number",
              "null"
            ]
          },
          "longitude": {
            "description": "Center longitude (decimal degrees), or null if absent.",
            "type": [
              "number",
              "null"
            ]
          },
          "activities": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Activity names available at the park (e.g. \"Hiking\", \"Camping\"). May be empty."
          },
          "entranceFee": {
            "description": "Lowest standard entrance fee as a dollar string (e.g. \"35.00\"), or null if the park is fee-free or lists no fee. Full fee/pass breakdown is in nps_get_park.",
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Park's official NPS.gov page, with fuller detail than this summary."
          }
        },
        "required": [
          "parkCode",
          "fullName",
          "designation",
          "states",
          "description",
          "latitude",
          "longitude",
          "activities",
          "entranceFee",
          "url"
        ],
        "additionalProperties": false,
        "description": "A matching park with its parkCode and trip-planning summary."
      },
      "description": "Matching parks, each carrying the parkCode needed to chain into the detail tools."
    },
    "totalCount": {
      "type": "number",
      "description": "Total parks matching every filter, before start/limit were applied."
    },
    "truncated": {
      "description": "True when more parks matched than this response returned; absent on a complete result.",
      "type": "boolean"
    },
    "shown": {
      "description": "Number of parks returned in this response (populated when the result set was capped by limit).",
      "type": "number"
    },
    "cap": {
      "description": "The limit applied to this response (populated when results were truncated).",
      "type": "number"
    },
    "appliedFilters": {
      "type": "string",
      "description": "Echo of the filters as applied (query / stateCode / activity)."
    },
    "notice": {
      "description": "Guidance on the result set: how to broaden a search that matched nothing, the start value for the next page when more parks matched, the way back when start ran past the end, and a best-effort disclosure when the activity scan could not cover every site.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_state_code`: A stateCode token is not two letters. Other values are possible when a failure originates below the handler.",
              "examples": [
                "invalid_state_code"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "parks",
        "totalCount",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢nps_get_park(parkCode, fields)

Full trip-planning detail for one or more parks by parkCode: description, activities and topics, entrance fees and passes, operating hours by area/season, contacts, directions, a free-text weather overview, representative images, and the NPS page for everything else. Get codes from nps_find_parks. Accepts up to ten codes per call. Use the fields parameter to return only the sections you need.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "parkCode": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One to ten park codes per call, each a 4-letter lowercase code (e.g. \"yose\", \"grca\", \"zion\"). Get codes from nps_find_parks."
    },
    "fields": {
      "description": "Optional detail sections to include beyond the always-present core (name, designation, states, description, coordinates, weather, url). Omit for all sections. Narrow to reduce payload when you only need, say, hours and fees.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "activities",
          "topics",
          "fees",
          "hours",
          "contacts",
          "directions",
          "images"
        ]
      }
    }
  },
  "required": [
    "parkCode"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "parks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "parkCode": {
            "type": "string",
            "description": "Park code (echoes the request)."
          },
          "fullName": {
            "type": "string",
            "description": "Full official park name."
          },
          "designation": {
            "type": "string",
            "description": "Site type (e.g. \"National Park\"). Empty string if none."
          },
          "states": {
            "type": "string",
            "description": "Comma-separated state codes the park spans."
          },
          "description": {
            "type": "string",
            "description": "Full park description."
          },
          "latitude": {
            "description": "Center latitude (decimal degrees) or null.",
            "type": [
              "number",
              "null"
            ]
          },
          "longitude": {
            "description": "Center longitude (decimal degrees) or null.",
            "type": [
              "number",
              "null"
            ]
          },
          "weatherOverview": {
            "description": "NPS free-text weather/seasonal overview for the park, or null. General seasonal guidance, not a forecast.",
            "type": [
              "string",
              "null"
            ]
          },
          "directionsInfo": {
            "description": "Free-text driving/access directions, or null when NPS publishes none (included unless fields excludes \"directions\").",
            "type": [
              "string",
              "null"
            ]
          },
          "directionsUrl": {
            "description": "NPS directions page URL, or null when NPS publishes none (included unless fields excludes \"directions\").",
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Park's official NPS.gov page."
          },
          "activities": {
            "description": "Activity names (included unless fields excludes \"activities\").",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "topics": {
            "description": "Topic names — what the park is about, e.g. \"Volcanoes\", \"Civil War\" (included unless fields excludes \"topics\").",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "entranceFees": {
            "description": "Entrance fees by category (included unless fields excludes \"fees\"). Empty array means the park lists no entrance fee.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "cost": {
                  "type": "string",
                  "description": "Fee amount as a dollar string (e.g. \"35.00\"). \"0.00\" means no charge for that category."
                },
                "title": {
                  "type": "string",
                  "description": "Fee title (e.g. \"Entrance - Private Vehicle\")."
                },
                "description": {
                  "type": "string",
                  "description": "What the fee covers and for how long."
                }
              },
              "required": [
                "cost",
                "title",
                "description"
              ],
              "additionalProperties": false,
              "description": "A single entrance fee category."
            }
          },
          "entrancePasses": {
            "description": "Annual/park-specific passes (included unless fields excludes \"fees\"). May be empty.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "cost": {
                  "type": "string",
                  "description": "Pass cost as a dollar string."
                },
                "title": {
                  "type": "string",
                  "description": "Pass title (e.g. \"Yosemite Annual Pass\")."
                },
                "description": {
                  "type": "string",
                  "description": "Pass coverage and validity."
                }
              },
              "required": [
                "cost",
                "title",
                "description"
              ],
              "additionalProperties": false,
              "description": "A single annual or park-specific pass."
            }
          },
          "operatingHours": {
            "description": "Operating hours by area/season (included unless fields excludes \"hours\"). May be empty.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Schedule name (e.g. \"Yosemite Valley\")."
                },
                "description": {
                  "type": "string",
                  "description": "Free-text hours/seasonality notes."
                },
                "standardHours": {
                  "type": "object",
                  "properties": {
                    "monday": {
                      "type": "string",
                      "description": "Monday hours (e.g. \"All Day\", \"Closed\", \"9:00AM - 5:00PM\")."
                    },
                    "tuesday": {
                      "type": "string",
                      "description": "Tuesday hours."
                    },
                    "wednesday": {
                      "type": "string",
                      "description": "Wednesday hours."
                    },
                    "thursday": {
                      "type": "string",
                      "description": "Thursday hours."
                    },
                    "friday": {
                      "type": "string",
                      "description": "Friday hours."
                    },
                    "saturday": {
                      "type": "string",
                      "description": "Saturday hours."
                    },
                    "sunday": {
                      "type": "string",
                      "description": "Sunday hours."
                    }
                  },
                  "required": [
                    "monday",
                    "tuesday",
                    "wednesday",
                    "thursday",
                    "friday",
                    "saturday",
                    "sunday"
                  ],
                  "additionalProperties": false,
                  "description": "Per-weekday operating hours. Values are free-text strings from NPS."
                }
              },
              "required": [
                "name",
                "description",
                "standardHours"
              ],
              "additionalProperties": false,
              "description": "Operating hours for one area or season."
            }
          },
          "contacts": {
            "description": "Park contact info (included unless fields excludes \"contacts\").",
            "type": "object",
            "properties": {
              "phoneNumbers": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "phoneNumber": {
                      "type": "string",
                      "description": "The number."
                    },
                    "type": {
                      "type": "string",
                      "description": "Type (e.g. \"Voice\", \"Fax\")."
                    }
                  },
                  "required": [
                    "phoneNumber",
                    "type"
                  ],
                  "additionalProperties": false,
                  "description": "A single phone contact."
                },
                "description": "Phone contacts. May be empty."
              },
              "emailAddresses": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "emailAddress": {
                      "type": "string",
                      "description": "The email address."
                    }
                  },
                  "required": [
                    "emailAddress"
                  ],
                  "additionalProperties": false,
                  "description": "A single email contact."
                },
                "description": "Email contacts. May be empty."
              }
            },
            "required": [
              "phoneNumbers",
              "emailAddresses"
            ],
            "additionalProperties": false
          },
          "images": {
            "description": "Representative park images (included unless fields excludes \"images\"). Capped at 5; imagesTruncated flags when the park has more. May be empty.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "description": "Image URL."
                },
                "altText": {
                  "type": "string",
                  "description": "Alt text / caption."
                },
                "title": {
                  "type": "string",
                  "description": "Image title."
                }
              },
              "required": [
                "url",
                "altText",
                "title"
              ],
              "additionalProperties": false,
              "description": "A single representative park image."
            }
          },
          "imagesTruncated": {
            "description": "True when the park has more than the 5 images returned here; the park url has the full set. Present only when the images section is included.",
            "type": "boolean"
          }
        },
        "required": [
          "parkCode",
          "fullName",
          "designation",
          "states",
          "description",
          "latitude",
          "longitude",
          "weatherOverview",
          "url"
        ],
        "additionalProperties": false,
        "description": "One park with its trip-planning detail."
      },
      "description": "Requested parks with trip-planning detail."
    },
    "requestedCount": {
      "type": "number",
      "description": "Number of park codes requested."
    },
    "returnedCount": {
      "type": "number",
      "description": "Number of requested parks found."
    },
    "missingCodes": {
      "description": "Requested park codes that matched no NPS site — likely misspelled. Populated only when some codes did not resolve.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "notice": {
      "description": "Guidance when one or more codes did not resolve, or when none did.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_park_code`: A parkCode element isn't 4 lowercase letters. `no_parks_found`: None of the requested codes matched an NPS site. Other values are possible when a failure originates below the handler.",
              "examples": [
                "invalid_park_code",
                "no_parks_found"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "parks",
        "requestedCount",
        "returnedCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢nps_get_alerts(parkCode, stateCode, category, query, limit, ...)

Current alerts for a park or a whole state — closures, hazards, caution notices, and information — with category and recency surfaced first so "is anything closed at Glacier right now?" is answered at a glance. Get park codes from nps_find_parks, or pass a stateCode for a statewide "what's closed" sweep. Returns most-recent-first. An empty result with totalCount 0 means no active alerts match the request (with category or query set, alerts outside that filter may still be active); an empty page with a non-zero totalCount means start ran past the end of the matches. Closures and road conditions change daily.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "parkCode": {
      "description": "Park code, or comma-separated list (e.g. \"glac\", \"yose,zion\") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode; with neither, returns recent alerts service-wide.",
      "type": "string"
    },
    "stateCode": {
      "description": "Two-letter state code, or comma-separated list (e.g. \"MT\", \"WY,MT,ID\"). Returns alerts for all NPS sites in those states — use for a statewide sweep rather than one park.",
      "type": "string"
    },
    "category": {
      "description": "Filter to one alert category. \"Danger\" and \"Park Closure\" are trip-affecting. Combined with parkCode/stateCode/query and applied before start/limit, so totalCount counts every matching alert, not one page. Omit to see all categories.",
      "type": "string",
      "enum": [
        "Danger",
        "Caution",
        "Information",
        "Park Closure"
      ]
    },
    "query": {
      "description": "Free-text search within alert titles/descriptions (e.g. \"road\", \"wildfire\", \"trail\").",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "description": "Maximum alerts to return (1–50), most-recent first.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "start": {
      "default": 0,
      "description": "Zero-based offset for pagination within the matched set. Use with limit to page through results — when totalCount exceeds what was returned, re-request with start advanced by limit.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "alerts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Alert ID."
          },
          "parkCode": {
            "type": "string",
            "description": "Park code the alert belongs to — useful when querying by state across multiple parks."
          },
          "category": {
            "type": "string",
            "description": "Alert category: \"Danger\", \"Park Closure\", \"Caution\", or \"Information\". Danger and Park Closure are trip-affecting."
          },
          "title": {
            "type": "string",
            "description": "Short alert headline (e.g. \"Tioga Road Closed for the Season\")."
          },
          "description": {
            "type": "string",
            "description": "Full alert text — what is affected and any guidance."
          },
          "url": {
            "description": "Link to more detail on NPS.gov, or null when absent.",
            "type": [
              "string",
              "null"
            ]
          },
          "lastIndexedDate": {
            "description": "When NPS last updated/indexed this alert (YYYY-MM-DD), or null. The recency signal — a stale date may mean the condition has changed.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "parkCode",
          "category",
          "title",
          "description",
          "url",
          "lastIndexedDate"
        ],
        "additionalProperties": false,
        "description": "A single alert with its category, recency, and detail."
      },
      "description": "Current alerts, most-recent first. Empty with totalCount 0 means no active alerts match the request; empty with a non-zero totalCount means start ran past the end of the matches."
    },
    "totalCount": {
      "type": "number",
      "description": "Total alerts matching the filter before the limit was applied."
    },
    "truncated": {
      "description": "True when more alerts matched than this response returned; absent on a complete result.",
      "type": "boolean"
    },
    "shown": {
      "description": "Alerts returned in this response (populated when capped by limit).",
      "type": "number"
    },
    "cap": {
      "description": "Limit applied (populated when results were truncated).",
      "type": "number"
    },
    "categoryBreakdown": {
      "type": "string",
      "description": "Count of returned alerts per category, most severe first (e.g. \"Park Closure: 3, Caution: 1, Information: 2\")."
    },
    "appliedFilters": {
      "type": "string",
      "description": "Echo of parkCode/stateCode/category/query as applied."
    },
    "notice": {
      "description": "Guidance on the result set: whether an empty page means no active alerts match (totalCount 0) or start ran past the end of the matches, the start value for the next page when more alerts matched, and a best-effort disclosure when the category filter could not cover every alert.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_park_code`: A parkCode token isn't 4 lowercase letters. `invalid_state_code`: A stateCode token isn't two letters. Other values are possible when a failure originates below the handler.",
              "examples": [
                "invalid_park_code",
                "invalid_state_code"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "alerts",
        "totalCount",
        "categoryBreakdown",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢nps_find_campgrounds(parkCode, stateCode, query, limit, start)

Campgrounds at a park or across a state: amenities (potable water, showers, RV dump station, toilets, trash collection, RV access), reservable vs. first-come-first-served site counts, reservation guidance and booking URL, accessibility, and fees — answering "where can I camp at Zion, and can I get an RV hookup?" Get park codes from nps_find_parks. Some parks list lodging or backcountry permits instead of NPS-managed campgrounds; an empty result is not an error.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "parkCode": {
      "description": "Park code, or comma-separated list (e.g. \"zion\") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode.",
      "type": "string"
    },
    "stateCode": {
      "description": "Two-letter state code, or comma-separated list. Returns campgrounds across all NPS sites in those states.",
      "type": "string"
    },
    "query": {
      "description": "Free-text search across campground names/descriptions (e.g. \"river\", \"group\", \"rv\").",
      "type": "string"
    },
    "limit": {
      "default": 15,
      "description": "Maximum campgrounds to return (1–50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "start": {
      "default": 0,
      "description": "Zero-based pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "campgrounds": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Campground ID."
          },
          "name": {
            "type": "string",
            "description": "Campground name (e.g. \"Watchman Campground\")."
          },
          "parkCode": {
            "type": "string",
            "description": "Park code the campground belongs to."
          },
          "description": {
            "type": "string",
            "description": "Short campground description."
          },
          "latitude": {
            "description": "Latitude (decimal degrees) or null.",
            "type": [
              "number",
              "null"
            ]
          },
          "longitude": {
            "description": "Longitude (decimal degrees) or null.",
            "type": [
              "number",
              "null"
            ]
          },
          "totalSites": {
            "description": "Total number of campsites, or null if unspecified.",
            "type": [
              "number",
              "null"
            ]
          },
          "reservableSites": {
            "description": "Number of reservable sites, or null. 0 means first-come-first-served only.",
            "type": [
              "number",
              "null"
            ]
          },
          "firstComeSites": {
            "description": "Number of first-come-first-served sites, or null.",
            "type": [
              "number",
              "null"
            ]
          },
          "reservationInfo": {
            "description": "Free-text reservation guidance (how/where to book), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "reservationUrl": {
            "description": "Booking URL (often recreation.gov), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "fee": {
            "description": "Lowest campground fee as a dollar string (e.g. \"30.00\"), or null if free / unspecified.",
            "type": [
              "string",
              "null"
            ]
          },
          "amenities": {
            "type": "object",
            "properties": {
              "potableWater": {
                "description": "Drinking water available on site, or null when NPS published no value.",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "showers": {
                "description": "Showers available, or null when NPS published no value.",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "dumpStation": {
                "description": "RV dump station available, or null when NPS published no value.",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "rvAllowed": {
                "description": "RVs permitted, or null when NPS published no value.",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "toilets": {
                "description": "Toilets of any type (flush, vault, portable, composting) available, or null when NPS published no value.",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "trashCollection": {
                "description": "Trash/recycling collection on site, or null when NPS published no value.",
                "type": [
                  "boolean",
                  "null"
                ]
              }
            },
            "required": [
              "potableWater",
              "showers",
              "dumpStation",
              "rvAllowed",
              "toilets",
              "trashCollection"
            ],
            "additionalProperties": false,
            "description": "Key amenities: true, false, or null when NPS published no value (unknown, not absent). The campground's NPS page has the full amenity list."
          },
          "accessibility": {
            "description": "Free-text accessibility summary, or null if NPS publishes none.",
            "type": [
              "string",
              "null"
            ]
          },
          "url": {
            "description": "Campground's NPS.gov page with the full amenity and site detail, or null.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "name",
          "parkCode",
          "description",
          "latitude",
          "longitude",
          "totalSites",
          "reservableSites",
          "firstComeSites",
          "reservationInfo",
          "reservationUrl",
          "fee",
          "amenities",
          "accessibility",
          "url"
        ],
        "additionalProperties": false,
        "description": "A single campground with amenities, site counts, and reservation info."
      },
      "description": "Campgrounds at the requested park(s)/state(s)."
    },
    "totalCount": {
      "type": "number",
      "description": "Total campgrounds matching the filter before the limit was applied."
    },
    "truncated": {
      "description": "True when more campgrounds matched than this response returned; absent on a complete result.",
      "type": "boolean"
    },
    "shown": {
      "description": "Campgrounds returned in this response (populated when capped by limit).",
      "type": "number"
    },
    "cap": {
      "description": "Limit applied (populated when results were truncated).",
      "type": "number"
    },
    "appliedFilters": {
      "type": "string",
      "description": "Echo of parkCode/stateCode/query as applied."
    },
    "notice": {
      "description": "Guidance on the result set: where else to look when no campgrounds matched, the start value for the next page when more matched, or the way back when start ran past the end.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_park_code`: A parkCode token isn't 4 lowercase letters. `invalid_state_code`: A stateCode token isn't two letters. Other values are possible when a failure originates below the handler.",
              "examples": [
                "invalid_park_code",
                "invalid_state_code"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "campgrounds",
        "totalCount",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢nps_get_activities(parkCode, stateCode, query, limit, start)

Curated things to do and points of interest at a park — title, description, time commitment, location, accessibility, and fee/pet/reservation flags — answering "what should I do at Acadia?" Covers the NPS editorially-curated activity list (distinct from a park's raw activity tags in nps_get_park). Accepts a single 4-letter park code or a single two-letter state code, and at least one is required. Not every park has a curated list; an empty result is not an error.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "parkCode": {
      "description": "A single 4-letter lowercase park code (e.g. \"acad\"). Get it from nps_find_parks. Accepts one park code, not a list. Provide parkCode or stateCode.",
      "type": "string"
    },
    "stateCode": {
      "description": "A single two-letter state code (e.g. \"ME\"). Returns curated activities across NPS sites in that state.",
      "type": "string"
    },
    "query": {
      "description": "Free-text search across activity titles/descriptions (e.g. \"sunrise\", \"hike\", \"tour\").",
      "type": "string"
    },
    "limit": {
      "default": 15,
      "description": "Maximum activities to return (1–50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "start": {
      "default": 0,
      "description": "Zero-based pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "activities": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Activity ID."
          },
          "title": {
            "type": "string",
            "description": "Activity title (e.g. \"Watch the Sunrise from Cadillac Mountain\")."
          },
          "parkCode": {
            "description": "Park code the activity belongs to, or null if absent.",
            "type": [
              "string",
              "null"
            ]
          },
          "shortDescription": {
            "type": "string",
            "description": "Concise description of the activity."
          },
          "location": {
            "description": "Where in the park this happens (free text), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "latitude": {
            "description": "Activity latitude (decimal degrees) or null.",
            "type": [
              "number",
              "null"
            ]
          },
          "longitude": {
            "description": "Activity longitude (decimal degrees) or null.",
            "type": [
              "number",
              "null"
            ]
          },
          "duration": {
            "description": "Time commitment (e.g. \"1-3 Hours\"), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "reservationRequired": {
            "type": "boolean",
            "description": "Whether a reservation is required."
          },
          "feeDescription": {
            "description": "Fee info if any (free text), or null. Absence does not guarantee free — check the park page.",
            "type": [
              "string",
              "null"
            ]
          },
          "petsPermitted": {
            "type": "boolean",
            "description": "Whether pets are permitted."
          },
          "accessibility": {
            "description": "Accessibility information (free text), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "season": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Seasons when the activity is available (e.g. [\"Summer\", \"Fall\"]). May be empty."
          },
          "url": {
            "description": "Activity's NPS.gov page, or null.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "parkCode",
          "shortDescription",
          "location",
          "latitude",
          "longitude",
          "duration",
          "reservationRequired",
          "feeDescription",
          "petsPermitted",
          "accessibility",
          "season",
          "url"
        ],
        "additionalProperties": false,
        "description": "A single curated activity or point of interest."
      },
      "description": "Curated activities and points of interest for the requested park/state."
    },
    "totalCount": {
      "type": "number",
      "description": "Total activities matching the filter before the limit was applied."
    },
    "truncated": {
      "description": "True when more activities matched than this response returned; absent on a complete result.",
      "type": "boolean"
    },
    "shown": {
      "description": "Activities returned in this response (populated when capped by limit).",
      "type": "number"
    },
    "cap": {
      "description": "Limit applied (populated when results were truncated).",
      "type": "number"
    },
    "appliedFilters": {
      "type": "string",
      "description": "Echo of parkCode/stateCode/query as applied."
    },
    "notice": {
      "description": "Guidance on the result set: where else to look when no curated activities matched, the start value for the next page when more matched, or the way back when start ran past the end.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `missing_filter`: Neither parkCode nor stateCode provided. `invalid_park_code`: parkCode isn't a single 4-letter lowercase code. `invalid_state_code`: stateCode isn't a single two-letter code. Other values are possible when a failure originates below the handler.",
              "examples": [
                "missing_filter",
                "invalid_park_code",
                "invalid_state_code"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "activities",
        "totalCount",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}
🟢nps_find_events(parkCode, stateCode, dateStart, dateEnd, query, ...)

Scheduled events at a park within a date range — ranger programs, festivals, tours, interpretive events — answering "what's happening at Yellowstone this weekend?" with title, dates and times, location, category, fee, and registration links. Get park codes from nps_find_parks. Paginates by page number, not offset. Many parks list few or no events; an empty result is not an error.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "parkCode": {
      "description": "Park code, or comma-separated list (e.g. \"yell\") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode.",
      "type": "string"
    },
    "stateCode": {
      "description": "Two-letter state code, or comma-separated list (e.g. \"WY\", \"WY,MT,ID\"). Returns events across NPS sites in those states.",
      "type": "string"
    },
    "dateStart": {
      "description": "Start of the date window (YYYY-MM-DD). Combine with dateEnd to bound the search (e.g. a weekend). Omit for upcoming events from today.",
      "type": "string"
    },
    "dateEnd": {
      "description": "End of the date window (YYYY-MM-DD). Use with dateStart.",
      "type": "string"
    },
    "query": {
      "description": "Free-text search across event titles/descriptions (e.g. \"ranger\", \"astronomy\", \"guided\").",
      "type": "string"
    },
    "pageSize": {
      "default": 15,
      "description": "Maximum events to return per page (1–50). Paginates by page number, not offset — use with pageNumber to walk through results.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "pageNumber": {
      "default": 1,
      "description": "1-based page number. Increment to page through results beyond the first page.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Event ID."
          },
          "title": {
            "type": "string",
            "description": "Event title."
          },
          "parkCode": {
            "description": "Park code the event belongs to, or null if absent.",
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": "string",
            "description": "Event description as plain text."
          },
          "location": {
            "description": "Event location within the park (free text), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "dateStart": {
            "description": "Event start date (YYYY-MM-DD), or null. For a recurring event this is the series anchor (its original first date), which can predate your requested window — use occurrenceDates for the dates that actually fall in the window.",
            "type": [
              "string",
              "null"
            ]
          },
          "dateEnd": {
            "description": "Event end date (YYYY-MM-DD), or null. For a recurring event this is the anchor date, not the last occurrence — see occurrenceDates and isRecurring.",
            "type": [
              "string",
              "null"
            ]
          },
          "occurrenceDates": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Dates (YYYY-MM-DD) the event actually occurs within the requested dateStart/dateEnd window; with no window, every remaining occurrence from today through the series end. Empty when the window matches no occurrence. For a recurring series, dateStart/dateEnd hold the series anchor instead."
          },
          "isRecurring": {
            "type": "boolean",
            "description": "True when this is a recurring series (multiple occurrence dates); dateStart/dateEnd then hold the series anchor and occurrenceDates the actual dates."
          },
          "times": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "timeStart": {
                  "type": "string",
                  "description": "Start time (e.g. \"02:00 PM\")."
                },
                "timeEnd": {
                  "type": "string",
                  "description": "End time (e.g. \"02:30 PM\")."
                }
              },
              "required": [
                "timeStart",
                "timeEnd"
              ],
              "additionalProperties": false,
              "description": "A single scheduled time slot."
            },
            "description": "Scheduled time slots for the event. May be empty (all-day or unspecified)."
          },
          "category": {
            "description": "Event category (e.g. \"Regular Event\", \"Ranger Programs\"), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "isFree": {
            "type": "boolean",
            "description": "Whether the event is free."
          },
          "feeInfo": {
            "description": "Fee details when not free (free text), or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "registrationUrl": {
            "description": "Registration/reservation URL, or null.",
            "type": [
              "string",
              "null"
            ]
          },
          "infoUrl": {
            "description": "More-info URL, or null.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "parkCode",
          "description",
          "location",
          "dateStart",
          "dateEnd",
          "occurrenceDates",
          "isRecurring",
          "times",
          "category",
          "isFree",
          "feeInfo",
          "registrationUrl",
          "infoUrl"
        ],
        "additionalProperties": false,
        "description": "A single scheduled event with dates, times, and registration links."
      },
      "description": "Events matching the park/state and date window."
    },
    "totalCount": {
      "type": "number",
      "description": "Total events matching the filter before the page limit."
    },
    "truncated": {
      "description": "True when more matching events follow this page; absent on the last page of the result.",
      "type": "boolean"
    },
    "shown": {
      "description": "Events returned on this page (populated when the page was capped by pageSize).",
      "type": "number"
    },
    "cap": {
      "description": "Page size applied (populated when results were truncated).",
      "type": "number"
    },
    "appliedFilters": {
      "type": "string",
      "description": "Echo of parkCode/stateCode/date window/query as applied."
    },
    "notice": {
      "description": "Guidance on the result set: how to widen a search that matched nothing, the pageNumber for the next page when more events matched, the way back when pageNumber ran past the end, and a warning when NPS reports errors for the request.",
      "type": "string"
    },
    "error": {
      "description": "Present when the call failed. Absent on success.",
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_date`: dateStart/dateEnd not YYYY-MM-DD, not a real calendar date (e.g. 2026-02-31), or dateEnd < dateStart. `invalid_park_code`: A parkCode token isn't 4 lowercase letters. `invalid_state_code`: A stateCode token isn't two letters. Other values are possible when a failure originates below the handler.",
              "examples": [
                "invalid_date",
                "invalid_park_code",
                "invalid_state_code"
              ]
            },
            "recovery": {
              "description": "Actionable next step for the caller.",
              "type": "object",
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "required": [
                "hint"
              ],
              "additionalProperties": {}
            },
            "retryable": {
              "description": "Whether retrying may succeed.",
              "type": "boolean"
            }
          },
          "additionalProperties": {}
        }
      },
      "required": [
        "code",
        "message"
      ],
      "additionalProperties": {}
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false,
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "events",
        "totalCount",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ]
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet6 Tools
verifiziertVersion nicht aufgezeichnet6 Tools