Skip to main content
Glama

national-parks-mcp-server: find campgrounds

nps_find_campgrounds
Read-only

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum campgrounds to return (1–50).
queryNoFree-text search across campground names/descriptions (e.g. "river", "group", "rv").
startNoZero-based pagination offset.
parkCodeNoPark code, or comma-separated list (e.g. "zion") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode.
stateCodeNoTwo-letter state code, or comma-separated list. Returns campgrounds across all NPS sites in those states.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoLimit applied (populated when results were truncated).
errorNoPresent when the call failed. Absent on success.
shownNoCampgrounds returned in this response (populated when capped by limit).
noticeNoGuidance 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.
truncatedNoTrue when more campgrounds matched than this response returned; absent on a complete result.
totalCountNoTotal campgrounds matching the filter before the limit was applied.
campgroundsNoCampgrounds at the requested park(s)/state(s).
appliedFiltersNoEcho of parkCode/stateCode/query as applied.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed17 schema fields changed
    • changedOutput schema / properties / campgrounds / items / properties / accessibility / description
      Previous value: -"Free-text accessibility summary (from accessibility.adaInfo), or null if absent/empty."New value: +"Free-text accessibility summary, or null if NPS publishes none."
    • changedOutput schema / properties / campgrounds / items / properties / amenities / description
      Previous value: -"Key amenities as booleans, normalized from NPS's mixed array/string amenity fields. The campground's NPS page has the full amenity list."New value: +"Key amenities: true, false, or null when NPS published no value (unknown, not absent). The campground's NPS page has the full amenity list."
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / dumpStation / description
      Previous value: -"RV dump station available."New value: +"RV dump station available, or null when NPS published no value."
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / dumpStation / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / potableWater / description
      Previous value: -"Drinking water available on site."New value: +"Drinking water available on site, or null when NPS published no value."
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / potableWater / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / rvAllowed / description
      Previous value: -"RVs permitted."New value: +"RVs permitted, or null when NPS published no value."
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / rvAllowed / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / showers / description
      Previous value: -"Showers available."New value: +"Showers available, or null when NPS published no value."
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / showers / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / toilets / description
      Previous value: -"Toilets (flush or vault) available."New value: +"Toilets of any type (flush, vault, portable, composting) available, or null when NPS published no value."
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / toilets / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / trashCollection / description
      Previous value: -"Trash/recycling collection on site."New value: +"Trash/recycling collection on site, or null when NPS published no value."
    • changedOutput schema / properties / campgrounds / items / properties / amenities / properties / trashCollection / type
      Previous value: -"boolean"New value: +[
      +  "boolean",
      +  "null"
      +]
    • changedOutput schema / properties / campgrounds / items / properties / url / description
      Previous value: -"Campground's NPS.gov page, or null — the source for the full amenity/site detail trimmed here."New value: +"Campground's NPS.gov page with the full amenity and site detail, or null."
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no campgrounds matched."New value: +"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."
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when more campgrounds matched than this response returned; absent on a complete result.",
      +  "type": "boolean"
      +}
  2. Changed20 schema fields changed
    • removedOutput schema / properties / campgrounds / items / properties / accessibility / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / accessibility / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / fee / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / fee / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / firstComeSites / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / firstComeSites / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / latitude / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / latitude / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / longitude / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / longitude / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / reservableSites / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / reservableSites / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / reservationInfo / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / reservationInfo / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / reservationUrl / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / reservationUrl / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / totalSites / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / totalSites / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / campgrounds / items / properties / url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / campgrounds / items / properties / url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "campgrounds",
      +      "totalCount",
      +      "appliedFilters"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "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"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "campgrounds",
      -  "totalCount",
      -  "appliedFilters"
      -]
  4. Changed3 schema fields changed
    • changedInput schema / properties / parkCode / description
      Previous value: -"Park code, or comma-separated list (e.g. \"zion\"). Get codes from nps_find_parks. Provide parkCode or stateCode."New value: +"Park code, or comma-separated list (e.g. \"zion\") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode."
    • removedInput schema / properties / parkCode / pattern
      Removed value: -"^[a-z]{4}(,[a-z]{4})*$"
    • removedInput schema / properties / stateCode / pattern
      Removed value: -"^[A-Za-z]{2}(,[A-Za-z]{2})*$"
  5. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations (readOnlyHint, openWorldHint). It discloses that some parks list lodging or backcountry permits instead of NPS-managed campgrounds, and that an empty result is not an error—important nuances not captured in annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core purpose, then details what data is returned, followed by usage guidance and caveats. Every sentence earns its place, and it avoids redundancy with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with five optional parameters and an output schema, the description fully covers what the tool does, how to use it, and important edge cases. It provides sufficient context for an agent to call it correctly without requiring additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage with descriptions for all five parameters, including the requirement to provide parkCode or stateCode. The description does not add new parameter meaning beyond what the schema states, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds campgrounds at a park or across a state, listing specific data points like amenities, reservable counts, fees, and accessibility. It differentiates from siblings by explicitly referencing nps_find_parks for park codes, making the purpose and resource unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides concrete guidance on when to use the tool (for campground queries like 'where can I camp at Zion') and a clear prerequisite (get park codes from nps_find_parks). It also cautions that empty results are not errors for parks with lodging/backcountry permits, which clarifies interpretation. It does not explicitly name alternatives for other tasks, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.