Skip to main content
Glama

Server Details

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

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/national-parks-mcp-server
GitHub Stars
1
Server Listing
National Parks MCP Server

Available Tools

6 tools
nps_find_campgroundsnational-parks-mcp-server: find campgroundsA
Read-only
Inspect

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.

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
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 when no campgrounds matched.
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.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly and openWorld. Description adds caveat about empty results not being an error, which clarifies behavior beyond annotations. No contradictions. Does not discuss rate limits or pagination, but schema covers start/limit.

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?

Two sentences covering purpose, content, and a caveat. Front-loaded with action and output type. No filler, but the example question adds slight verbosity without major cost.

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?

Comprehensive for a query tool: describes return fields, dependency on park codes, edge case of empty results. Output schema exists, so return structure is further specified. Missing explicit pagination behavior but schema provides start/limit fields.

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 description coverage is 100%, so parameters are already documented. Description adds example use of query ('river', 'group', 'rv') and reminds to get park codes from another tool, but does not deepen semantic meaning beyond schema. Meets baseline for high coverage.

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?

Clear verb+resource: 'find campgrounds'. States exact fields returned (amenities, site counts, fees) and answers a concrete user question ('where can I camp at Zion, and can I get an RV hookup?'). Distinct from siblings like events or alerts; references nps_find_parks as prerequisite.

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?

Describes context of use (campground search) and explicitly points to nps_find_parks for codes. Warns that some parks return lodging/backcountry permits instead, so empty results expected. Does not name alternative tools to switch to, but the dependency is clear.

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

nps_find_eventsnational-parks-mcp-server: find eventsA
Read-only
Inspect

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. The events feed is sparser and less consistent than alerts or campgrounds; many parks list few or no events, and an empty result is not an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFree-text search across event titles/descriptions (e.g. "ranger", "astronomy", "guided").
dateEndNoEnd of the date window (YYYY-MM-DD). Use with dateStart.
pageSizeNoMaximum events to return per page (1–50). Paginates by page number, not offset — use with pageNumber to walk through results.
parkCodeNoPark code, or comma-separated list (e.g. "yell") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode.
dateStartNoStart of the date window (YYYY-MM-DD). Combine with dateEnd to bound the search (e.g. a weekend). Omit for upcoming events from today.
stateCodeNoTwo-letter state code, or comma-separated list (e.g. "WY", "WY,MT,ID"). Returns events across NPS sites in those states.
pageNumberNo1-based page number. Increment to page through results beyond the first page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoPage size applied (populated when results were truncated).
errorNoPresent when the call failed. Absent on success.
shownNoEvents returned on this page (populated when the page was capped by pageSize).
eventsNoEvents matching the park/state and date window.
noticeNoGuidance when no events matched, or a warning when the upstream envelope reported errors.
totalCountNoTotal events matching the filter before the page limit.
appliedFiltersNoEcho of parkCode/stateCode/date window/query as applied.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only nature is covered. The description adds valuable non-obvious behavior: pagination is by page number (not offset), and the feed is sparse/inconsistent with empty results being normal. This beyond-annotation context helps an agent set expectations and handle responses correctly.

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 compact yet dense with information, front-loading the purpose and example before technical caveats. Each sentence serves a distinct purpose: what it does, what it returns, cross-reference to park codes, pagination behavior, and data quality warning. No wasted words.

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?

Given an output schema exists, the description need not explain return values. It covers all critical call-time concerns: how to specify parks/states, date range usage, pagination method, empty-result semantics, and cross-tool references. For a tool with 7 optional parameters and a mutual-exclusivity constraint, this is complete for correct invocation.

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

Parameters4/5

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

Schema coverage is 100% with each parameter documented, so the baseline is 3. The description adds extra meaning beyond the schema: it clarifies the mutual exclusivity of parkCode and stateCode ('Provide parkCode or stateCode') and explains pagination semantics ('paginates by page number, not offset'). This directly aids correct invocation.

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 it finds scheduled events at a park within a date range, specifying event types (ranger programs, festivals, tours, interpretive events) and the exact answer it provides ('what's happening at Yellowstone this weekend?'). It distinguishes itself from sibling tools like alerts and campgrounds by the data it returns (title, dates, location, category, fee, registration links).

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 clear context for when to use the tool (e.g., 'what's happening at this park this weekend?') and explicitly instructs to get park codes from nps_find_parks. It also notes the events feed is sparser than alerts or campgrounds, implying alternative tools for those use cases, but does not explicitly say 'use nps_get_alerts for alerts' – leaving the differentiation slightly implicit.

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

nps_find_parksnational-parks-mcp-server: find parksA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum parks to return (1–50). The full set is ~470 sites; narrow with query/stateCode rather than paging through everything.
queryNoFree-text search across park names and descriptions (e.g. "yosemite", "civil war", "redwood"). Results are re-ranked locally so an exact parkCode or name match leads: NPS returns matches in alphabetical-by-code order with no relevance ranking, so without this the obvious park can sit behind sites that only mention the term in their description. 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.
startNoZero-based offset for pagination within the matched set. Use with limit to page through results.
activityNoFilter to parks offering an activity, matched against each park's activities list (e.g. "hiking", "camping", "stargazing"). Case-insensitive substring match applied locally (the API has no activity param) across every site matching query/stateCode, then paginated with start/limit — so totalCount is the true count of matching parks, not a per-page tally. Use nps_get_park to see a park's full activity list.
stateCodeNoTwo-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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe limit applied to this response (populated when results were truncated).
errorNoPresent when the call failed. Absent on success.
parksNoMatching parks, each carrying the parkCode needed to chain into the detail tools.
shownNoNumber of parks returned in this response (populated when the result set was capped by limit).
noticeNoGuidance when no parks matched — suggests broadening the query, checking the state code, or dropping the activity filter.
totalCountNoTotal parks matching the query/state filter before the limit was applied.
appliedFiltersNoEcho of the filters as the server applied them (query / stateCode / activity), so the agent can see what was searched.

TDQS

A5/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true and openWorldHint=true, which are generic. The description adds significant behavioral detail: local re-ranking for exact matches, that NPS returns results in alphabetical-by-code order with no relevance ranking, that the activity filter is a local substring match (the API has no activity param), and that totalCount reflects true matches across all parks. It also clarifies pagination semantics and coverage scope. These are exactly the behaviors an agent needs to interpret results correctly.

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 packed but efficient. The first sentence establishes purpose and the required-first-step role, then bullet-like details enumerate return contents, then a compact coverage clause. No wasted words; every sentence carries functional information. For an entry-point tool with five optional parameters, this length is justified and well-front-loaded.

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?

Given the tool's complexity (5 optional params, no required, local filtering, re-ranking, ~470 sites) and the presence of an output schema, the description covers all critical usage scenarios: parameter combinations, edge cases (no query/stateCode), pagination behavior, and the relationship to detail tools. Nothing an agent needs to call this correctly is missing.

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

Parameters5/5

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

Schema coverage is 100%, so each parameter already has a description. The description goes further: it explains the re-ranking nuance for query, the local filtering and totalCount semantics for activity, and the pagination behavior for start/limit. It also warns against paging through all sites with limit and suggests narrowing with query/stateCode. This adds genuine value 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?

States a specific verb ('Resolve') with a clear resource ('place name, US state, or free-text query to National Park Service parks') and immediately positions it as 'the required first step before the detail tools.' It lists exactly what is returned (parkCode, trip-planning summary) and explicitly names the sibling tools that depend on it, making differentiation trivial.

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

Usage Guidelines5/5

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

Explicitly declares when to use this tool ('first step before the detail tools'), when to omit parameters ('Omit to browse by state'), and what happens with no parameters ('returns the first page of all ~470 NPS sites'). It also states exclusions ('not state parks and not Forest Service or BLM land') and recommends using at least one of query or stateCode. No ambiguity about usage context.

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

nps_get_activitiesnational-parks-mcp-server: get activitiesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum activities to return (1–50).
queryNoFree-text search across activity titles/descriptions (e.g. "sunrise", "hike", "tour").
startNoZero-based pagination offset.
parkCodeNoA 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.
stateCodeNoA single two-letter state code (e.g. "ME"). Returns curated activities across NPS sites in that state.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoLimit applied (populated when results were truncated).
errorNoPresent when the call failed. Absent on success.
shownNoActivities returned in this response (populated when capped by limit).
noticeNoGuidance when no curated activities matched.
activitiesNoCurated activities and points of interest for the requested park/state.
totalCountNoTotal activities matching the filter before the limit was applied.
appliedFiltersNoEcho of parkCode/stateCode/query as applied.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, but the description adds value by explicitly stating the open-world behavior ('Not every park has a curated list; an empty result is not an error') and clarifying the curated vs. raw distinction. It does not contradict annotations and provides useful context beyond the structured fields.

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 dense but every sentence earns its place. It front-loads the core purpose and content, then clarifies the distinction, input constraints, and edge-case behavior. No redundancy or 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?

Given the tool has 5 params and an output schema, the description covers the key aspects: purpose, input requirements, empty-result behavior, and differentiation from a sibling. It does not clarify what happens if both parkCode and stateCode are provided (though schema implies 'or'), nor does it describe the output format in detail, but the output schema covers that. Overall, it's quite complete for an agent to use correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds extra meaning: it emphasizes that parkCode is a single code (not a list), specifies that at least one of parkCode/stateCode is required, and cross-references nps_find_parks for obtaining park codes. These details go beyond the schema's descriptions, justifying a 4.

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 states a specific verb+resource (returns curated activities) with a concrete use case ('what should I do at Acadia?') and lists the content fields. It explicitly differentiates from the sibling nps_get_park by noting the curated list vs. raw activity tags, making it easy for an agent to select the right tool.

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

Usage Guidelines5/5

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

It names the alternative (nps_get_park) and the condition that selects it (raw tags vs. curated list), and explicitly states the input requirement ('at least one is required' for parkCode/stateCode). It also sets expectations for empty results ('an empty result is not an error'), giving clear when-to-use and when-not-to-use guidance.

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

nps_get_alertsnational-parks-mcp-server: get alertsA
Read-only
Inspect

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 the park reports nothing closed or hazardous — good news, not an error. An empty page with a non-zero totalCount only means start ran past the end, so read the notice rather than the empty list. Closures and road conditions change daily — re-check before departure.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum alerts to return (1–50), most-recent first.
queryNoFree-text search within alert titles/descriptions (e.g. "road", "wildfire", "trail").
startNoZero-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.
categoryNoFilter to one alert category. "Danger" and "Park Closure" are the high-priority ones for trip safety. Applied locally (the API has no category param) across every alert matching parkCode/stateCode/query, then paginated with start/limit — so totalCount is the true count of matching alerts, not a per-page tally. Omit to see all categories (the default — closures and hazards should not be missed).
parkCodeNoPark 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.
stateCodeNoTwo-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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoLimit applied (populated when results were truncated).
errorNoPresent when the call failed. Absent on success.
shownNoAlerts returned in this response (populated when capped by limit).
alertsNoCurrent alerts, sorted most-recent first. An empty array with totalCount 0 means no active alerts — good news, not an error; with a non-zero totalCount it means start paged past the end of the matches. The notice says which.
noticeNoMessage when the page is empty — states which case it is: good news (totalCount 0, the park reports nothing closed/hazardous right now) or a paging artifact (start ran past the end of a non-empty matched set).
totalCountNoTotal alerts matching the filter before the limit was applied.
appliedFiltersNoEcho of parkCode/stateCode/category/query as applied.
categoryBreakdownNoCount of returned alerts per category (e.g. "Park Closure: 3, Caution: 1, Information: 2") — gauge severity without scanning every alert.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations (readOnlyHint=true, openWorldHint=true) already establish the safety profile; the description goes well beyond this. It discloses ordering ('most-recent-first'), the exact semantics of empty results vs. empty pages ('An empty page with a non-zero totalCount only means start ran past the end'), the local-filter behavior of category, and a real-world caveat ('Closures and road conditions change daily — re-check before departure'). No contradiction with annotations — the read-only, open-world hints align perfectly with the described behavior.

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?

The main purpose is front-loaded in the first sentence with the key use-case poised as a question. The three sentences each earn their place: purpose+recency priority, usage routing, and output semantics. Dense but not bloated for a 6-parameter tool with non-trivial pagination and filtering semantics. Slightly compresses the category-local-filter detail into the schema, which keeps the main description lean.

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?

An output schema exists, so no obligation to explain return values. The description covers purpose, input routing (park vs. state, service-wide fallback), result interpretation (empty = good news vs. empty page = pagination overrun), recency ordering, and a freshness warning. For a tool with this complexity — 6 params, pagination, local filtering, cross-tool dependency — nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% (all 6 params described in schema with enums and defaults), so baseline is 3. The description adds real value beyond schema: it ranks category values ('Danger' and 'Park Closure' are the high-priority ones), explains that category filtering is applied locally vs. API-native, explains the meaning of totalCount under local filtering, and provides the nps_find_parks cross-reference for parkCode. This meaningful interpretation pushes it above baseline.

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?

Specific verb ('get alerts') + resource (NPS alerts) + explicit scope ('for a park or a whole state') with the alert types enumerated (closures, hazards, caution notices, information). The sibling set (campgrounds, events, parks, activities) contains no alert tool, so the domain is auto-differentiated, and the description reinforces this by naming the exact resource. No ambiguity in what this tool does.

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?

Provides clear when-to-use context: 'Get park codes from nps_find_parks, or pass a stateCode for a statewide sweep' names the concrete alternative for obtaining input. It also tells the agent how to interpret outcomes ('an empty result with totalCount 0 means... good news, not an error'), which guides decision-making. It doesn't explicitly state when NOT to use this tool versus an alternative, but sibling domains are separated so cleanly by topic that explicit exclusions would be redundant.

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

nps_get_parknational-parks-mcp-server: get park detailA
Read-only
Inspect

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. Up to ten codes are fetched in a single request. Use the fields parameter to trim the payload when you only need certain sections.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOptional 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.
parkCodeYesOne to ten park codes (each a 4-letter lowercase code like "yose", "grca", "zion"). Get codes from nps_find_parks. Multiple codes are fetched in a single request.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
parksNoRequested parks with trip-planning detail.
noticeNoGuidance when one or more codes did not resolve, or when none did.
missingCodesNoRequested park codes the API returned no record for — likely invalid/misspelled codes. Populated only when some codes did not resolve.
returnedCountNoNumber of parks the API returned.
requestedCountNoNumber of park codes requested.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, lowering the burden. The description adds value beyond annotations: single-request batching up to ten codes, the always-present core-field set vs. optional sections, and a pointer to the NPS page for anything not covered. No contradiction with annotations; 'get' aligns with the read-only hint.

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?

A single dense paragraph where every sentence earns its place: content list, code source, batching limit, and payload trimming. It is slightly longer than the leanest ideal but sharply front-loaded with the purpose and scoping guidance, with no filler or redundancy.

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?

Given the output schema documents return values and annotations cover safety, the description supplies the remaining operational context: content scope, batching, code acquisition, payload control, and a fallback pointer to the NPS page. A minor gap is behavior for invalid/unknown codes, but overall the agent has everything needed to call it correctly.

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% and both parameters are thoroughly documented: parkCode specifies format, examples, count range and batching; fields lists all enum values and the omit-for-all behavior. The description largely reiterates what the schema already states ('Get codes from nps_find_parks', 'single request'), adding little new semantic meaning beyond the structured definitions.

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 uses a specific verb-resource pair (get park detail by parkCode) and enumerates the full content sections returned (description, activities, topics, fees, hours, contacts, directions, weather, images, NPS page). This fully differentiates it from siblings like nps_get_alerts and nps_get_activities without needing to inspect their schemas.

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?

Provides concrete usage context: how to obtain valid codes (from nps_find_parks), that up to ten codes fetch in one request, and that the fields parameter trims payloads. It does not name explicit when-not-to-use conditions or alternative siblings for cases like current alerts, but the cross-tool routing to nps_find_parks is clear and actionable.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updates
    • Changednps_find_campgrounds6 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"
        -]
    • Changednps_find_events6 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": [
        +      "events",
        +      "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_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"
        +          ],
        +          "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: -[
        -  "events",
        -  "totalCount",
        -  "appliedFilters"
        -]
    • Changednps_find_parks6 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": [
        +      "parks",
        +      "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_state_code`: A stateCode token is not two letters. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "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: -[
        -  "parks",
        -  "totalCount",
        -  "appliedFilters"
        -]
    • Changednps_get_activities6 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": [
        +      "activities",
        +      "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: `missing_filter`: Neither parkCode nor stateCode provided. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "missing_filter"
        +          ],
        +          "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: -[
        -  "activities",
        -  "totalCount",
        -  "appliedFilters"
        -]
    • Changednps_get_alerts6 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": [
        +      "alerts",
        +      "totalCount",
        +      "categoryBreakdown",
        +      "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: -[
        -  "alerts",
        -  "totalCount",
        -  "categoryBreakdown",
        -  "appliedFilters"
        -]
    • Changednps_get_park6 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": [
        +      "parks",
        +      "requestedCount",
        +      "returnedCount"
        +    ]
        +  },
        +  {
        +    "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: `no_parks_found`: The API returned zero records for every requested code. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_parks_found"
        +          ],
        +          "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: -[
        -  "parks",
        -  "requestedCount",
        -  "returnedCount"
        -]
  2. 4 tool updates
    • Changednps_find_campgrounds3 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})*$"
    • Changednps_find_events9 fields changed
      • changedInput schema / properties / parkCode / description
        Previous value: -"Park code, or comma-separated list (e.g. \"yell\"). Get codes from nps_find_parks. Provide parkCode or stateCode."New value: +"Park code, or comma-separated list (e.g. \"yell\") — 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})*$"
      • changedInput schema / properties / stateCode / description
        Previous value: -"Two-letter state code, or comma-separated list. Returns events across NPS sites in those states."New value: +"Two-letter state code, or comma-separated list (e.g. \"WY\", \"WY,MT,ID\"). Returns events across NPS sites in those states."
      • removedInput schema / properties / stateCode / pattern
        Removed value: -"^[A-Za-z]{2}(,[A-Za-z]{2})*$"
      • changedOutput schema / properties / events / items / properties / dateEnd / description
        Previous value: -"Event end date (YYYY-MM-DD), or null."New value: +"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."
      • changedOutput schema / properties / events / items / properties / dateStart / description
        Previous value: -"Event start date (YYYY-MM-DD), or null."New value: +"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."
      • addedOutput schema / properties / events / items / properties / isRecurring
        Added value: +{
        +  "description": "True when this is a recurring series (multiple occurrence dates). Explains why dateStart/dateEnd may show a single frozen anchor date while occurrenceDates carries the real dates.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / events / items / properties / occurrenceDates
        Added value: +{
        +  "description": "Occurrence dates (YYYY-MM-DD) that fall within the requested dateStart/dateEnd window. When no date window is requested, this lists every remaining occurrence from today through the series end. Empty when the window matches no occurrence. Trust this for \"when does this actually happen?\" — dateStart/dateEnd above are the record's anchor and can be stale for a long-running recurring series.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / events / items / required
        Previous value: -[
        -  "id",
        -  "title",
        -  "parkCode",
        -  "description",
        -  "location",
        -  "dateStart",
        -  "dateEnd",
        -  "times",
        -  "category",
        -  "isFree",
        -  "feeInfo",
        -  "registrationUrl",
        -  "infoUrl"
        -]New value: +[
        +  "id",
        +  "title",
        +  "parkCode",
        +  "description",
        +  "location",
        +  "dateStart",
        +  "dateEnd",
        +  "occurrenceDates",
        +  "isRecurring",
        +  "times",
        +  "category",
        +  "isFree",
        +  "feeInfo",
        +  "registrationUrl",
        +  "infoUrl"
        +]
    • Changednps_find_parks1 field changed
      • removedInput schema / properties / stateCode / pattern
        Removed value: -"^[A-Za-z]{2}(,[A-Za-z]{2})*$"
    • Changednps_get_alerts3 fields changed
      • changedInput schema / properties / parkCode / description
        Previous value: -"Park code, or comma-separated list (e.g. \"glac\", \"yose,zion\"). Get codes from nps_find_parks. Provide parkCode or stateCode; with neither, returns recent alerts service-wide."New value: +"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."
      • 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})*$"
  3. 3 tool updates
    • Changednps_find_parks2 fields changed
      • changedInput schema / properties / activity / description
        Previous value: -"Filter to parks offering an activity, matched against each park's activities list (e.g. \"hiking\", \"camping\", \"stargazing\"). Case-insensitive substring match applied locally after fetch — it narrows the returned page, it does not search all ~470 sites by activity. Use nps_get_park to see a park's full activity list."New value: +"Filter to parks offering an activity, matched against each park's activities list (e.g. \"hiking\", \"camping\", \"stargazing\"). Case-insensitive substring match applied locally (the API has no activity param) across every site matching query/stateCode, then paginated with start/limit — so totalCount is the true count of matching parks, not a per-page tally. Use nps_get_park to see a park's full activity list."
      • changedInput schema / properties / query / description
        Previous value: -"Free-text search across park names and descriptions (e.g. \"yosemite\", \"civil war\", \"redwood\"). 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."New value: +"Free-text search across park names and descriptions (e.g. \"yosemite\", \"civil war\", \"redwood\"). Results are re-ranked locally so an exact parkCode or name match leads: NPS returns matches in alphabetical-by-code order with no relevance ranking, so without this the obvious park can sit behind sites that only mention the term in their description. 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."
    • Changednps_get_alerts4 fields changed
      • changedInput schema / properties / category / description
        Previous value: -"Filter to one alert category. \"Danger\" and \"Park Closure\" are the high-priority ones for trip safety. Omit to see all categories (the default — closures and hazards should not be missed)."New value: +"Filter to one alert category. \"Danger\" and \"Park Closure\" are the high-priority ones for trip safety. Applied locally (the API has no category param) across every alert matching parkCode/stateCode/query, then paginated with start/limit — so totalCount is the true count of matching alerts, not a per-page tally. Omit to see all categories (the default — closures and hazards should not be missed)."
      • addedInput schema / properties / start
        Added value: +{
        +  "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.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / alerts / description
        Previous value: -"Current alerts, sorted most-recent first. An empty array means no active alerts — good news, not an error."New value: +"Current alerts, sorted most-recent first. An empty array with totalCount 0 means no active alerts — good news, not an error; with a non-zero totalCount it means start paged past the end of the matches. The notice says which."
      • changedOutput schema / properties / notice / description
        Previous value: -"Message when there are no active alerts — explicitly states this is good news (the park reports nothing closed/hazardous right now)."New value: +"Message when the page is empty — states which case it is: good news (totalCount 0, the park reports nothing closed/hazardous right now) or a paging artifact (start ran past the end of a non-empty matched set)."
    • Changednps_get_park2 fields changed
      • changedOutput schema / properties / parks / items / properties / images / description
        Previous value: -"Representative park images (included unless fields excludes \"images\"). Capped at 5. May be empty."New value: +"Representative park images (included unless fields excludes \"images\"). Capped at 5; imagesTruncated flags when the park has more. May be empty."
      • addedOutput schema / properties / parks / items / properties / imagesTruncated
        Added value: +{
        +  "description": "True when the park has more images upstream than the 5 returned here — open the park url for the full set. Present only when the images section is included.",
        +  "type": "boolean"
        +}
  4. 6 tool updates
    • First observednps_find_campgrounds
    • First observednps_find_events
    • First observednps_find_parks
    • First observednps_get_activities
    • First observednps_get_alerts
    • First observednps_get_park

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    Provides real-time information about U.S. National Parks through the NPS API, enabling users to search parks, check details, alerts, visitor centers, campgrounds, and upcoming events.
    6
    895
    41
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides access to the National Park Service API, enabling natural language queries about parks, alerts, campgrounds, events, and more.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides LLM context on U.S. national parks by integrating National Park Service, Recreation.gov, and weather APIs, enabling queries about park info, trails, alerts, events, weather forecasts, and more via tool calls.
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct domain resource: parks, park details, alerts, events, activities, and campgrounds. There is no overlap in purpose; an agent can unambiguously select the right tool for a query.

Naming Consistency5/5

All tools follow a consistent `nps_` prefix with a verb-noun pattern (`find_*` or `get_*`). The only minor variation is singular/plural nouns, but this is predictable and does not hinder understanding.

Tool Count5/5

Six tools is well-scoped for a national parks API, each covering a core aspect of trip planning (lookup, detail, alerts, events, activities, campgrounds). No tool feels redundant or unnecessary.

Completeness4/5

The surface covers primary trip-planning needs: finding parks, getting detailed info, checking alerts, seeing events, exploring activities, and finding campgrounds. Minor gaps like webcams or permits are non-essential, but the set is nearly complete.