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. Check the linked campground page for RV hookups and date-specific availability. 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

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

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.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the bar is lower, yet the description adds real behavior: some parks return lodging or backcountry permits instead of NPS-managed campgrounds, and an empty result is not an error. It also flags data currency limits (availability must be checked on the linked page). Pagination behavior is left to the schema.

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

Conciseness4/5

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

Front-loaded with the resource and scope, then the payload, then the caveats. The amenity enumeration is long but each item is a concrete returned field; the final two sentences (sibling for codes, empty-result caveat) earn their place. Slightly dense, no filler.

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

Completeness4/5

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

An output schema exists, so return values need not be spelled out, and the description still sketches them. It covers the prerequisite, the two locator modes, and the failure mode an agent would otherwise misread. Only pagination/limit behavior is left implicit, which the schema handles.

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?

Schema coverage is 100%, so parkCode/stateCode/query/limit/start are already fully documented, and the description's "at a park or across a state" plus the park-code pointer largely restate the schema. Baseline 3 is appropriate — it adds framing but no syntax or constraints beyond the schema.

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?

Names the exact resource (campgrounds) and its two scoping modes (a park or across a state), then enumerates the data returned (amenities, reservable vs. first-come counts, fees, accessibility). This is instantly distinguishable from siblings like nps_find_parks and nps_find_events without opening the schema.

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?

Gives a clear prerequisite ("Get park codes from nps_find_parks") and warns that an empty result is expected behavior rather than a failure, which prevents misdiagnosis. It also tells the agent to follow the linked campground page for RV hookups and date-specific availability, i.e. what this tool does not answer. No explicit exclusion against a sibling, but the context is unambiguous.

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.