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
Uptime
100.0% over 41 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/national-parks-mcp-server
GitHub Stars
2
Server Listing
National Parks MCP Server

TDQS

A4.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct NPS domain: park lookup, park detail, campgrounds, events, activities, and alerts. The shared nps_ prefix combined with clear resource nouns and explicit cross-references in descriptions leaves little room for misselection.

Naming Consistency5/5

All tool names follow a consistent nps_<verb>_<resource> pattern, using find for search-oriented operations and get for fetching by code or state. There are no mixed conventions or vague verbs.

Tool Count5/5

Six tools form a well-scoped, coherent read-only surface for national parks trip planning. The count is neither bloated nor too thin for the stated purpose.

Completeness5/5

The set covers the essential trip-planning lifecycle: resolving parks, retrieving full park details, and covering camping, events, activities, and alerts. No major dead ends are apparent, and edge cases like empty results are explicitly documented.

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 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.

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.

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. Many parks list few or no events; 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 on the result set: how to widen a search that matched nothing, the pageNumber for the next page when more events matched, the way back when pageNumber ran past the end, and a warning when NPS reports errors for the request.
truncatedNoTrue when more matching events follow this page; absent on the last page of the result.
totalCountNoTotal events matching the filter before the page limit.
appliedFiltersNoEcho of parkCode/stateCode/date window/query as applied.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish read-only and open-world behavior, so the description adds value with operational details: pagination is by page number rather than offset, and empty results are expected for many parks rather than errors. This goes beyond what annotations and schema expose.

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?

Four effective sentences with the core operation front-loaded, followed by a use case, prerequisite, pagination detail, and expected-empty-result behavior. Every sentence earns its place with distinct information.

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 read-only lookup with a full output schema and 100% parameter coverage, the description covers the key operational risks: how to scope by park or date, how to page through results, and how to interpret empty lists. Nothing essential to invoking it correctly is missing.

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 the seven parameters are already fully documented. The description adds helpful orientation about date range, sourcing park codes, and page-number pagination, but it does not need to re-explain individual parameters.

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 and resource — 'find' scheduled 'events' — and scopes it to a park within a date range. The natural-language example 'what's happening at Yellowstone this weekend?' makes the operation unmistakable, and the resource clearly separates it from sibling tools for parks, campgrounds, alerts, and activities.

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?

The description provides a clear use case — date-bounded scheduled events — and instructs the agent to get park codes from nps_find_parks. It does not explicitly name when-not alternatives, such as using nps_get_alerts for hazards, but the query framing makes the intended context evident.

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"). Exact parkCode or name matches lead, then other name matches, then parks that only mention the term in their description — ranked across every match before start/limit apply. Omit to browse by state. At least one of query or stateCode is recommended; with neither, returns the first page of all ~470 NPS sites.
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, combined with query/stateCode and applied before start/limit, so totalCount counts every matching park, not one page. Use nps_get_park to see a park's full activity list.
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 on the result set: how to broaden a search that matched nothing, the start value for the next page when more parks matched, the way back when start ran past the end, and a best-effort disclosure when the activity scan could not cover every site.
truncatedNoTrue when more parks matched than this response returned; absent on a complete result.
totalCountNoTotal parks matching every filter, before start/limit were applied.
appliedFiltersNoEcho of the filters as applied (query / stateCode / activity).

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. The description adds valuable context beyond these: it specifies the return payload (parkCode plus compact trip-planning summary) and the scope limitation (NPS sites only). It does not contradict the annotations and adds meaningful behavioral context, though it does not cover error handling or rate limits.

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 exactly two sentences with zero redundancy. The first sentence front-loads the core purpose and workflow position; the second details the output and scope. Every word contributes to understanding, making it an exemplar of concise, structured documentation.

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 presence of an output schema and full parameter coverage in the schema, the description provides all necessary context for correct invocation. It explains the tool's role as the entry point, the nature of its output, and its coverage boundaries. 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.

Parameters3/5

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

Schema description coverage is 100%, with each of the 5 parameters thoroughly documented (e.g., query ranking order, stateCode format, limit/start semantics). The tool description itself does not add parameter-specific details beyond what the schema already provides; it only mentions the general output. This meets the baseline for full schema 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?

The description states a specific verb ('resolve') and resource ('place name, US state, or free-text query to National Park Service parks'). It clearly differentiates from siblings by identifying itself as the 'required first step before the detail tools' and noting that other tools depend on its parkCode. The explicit scope ('US NPS sites only') further distinguishes it from non-NPS park tools.

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?

The description explicitly states it is the 'required first step before the detail tools', making its position in the workflow unambiguous. It also clarifies exclusions ('not state parks and not Forest Service or BLM land'), preventing misuse. While it doesn't name specific alternatives, the role as entry point and the coverage limitations provide clear when-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_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 on the result set: where else to look when no curated activities matched, the start value for the next page when more matched, or the way back when start ran past the end.
truncatedNoTrue when more activities matched than this response returned; absent on a complete result.
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.9/5.0
Behavior5/5

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

Annotations already provide readOnlyHint and openWorldHint, but the description adds substantial behavioral context beyond those: it clarifies that only a single code is accepted (not a list), that at least one code is required despite the schema having no required fields, and that an empty result is normal for parks without curated lists. It also notes the source of the park code (nps_find_parks). These details are not implied by the annotations and materially help correct invocation.

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 with essential information in a compact, front-loaded format. It opens with the return type and fields, then states the use case, the distinction from a sibling, input constraints, and an edge case—all in a few sentences with zero filler. Every sentence earns its place.

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 has an output schema (so return format is already documented), the description covers everything an agent needs: what the tool returns, how to filter (park or state), the single-code constraint, the requirement for at least one code, and the empty-result behavior. No essential behavioral or selection information 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% with per-parameter descriptions, so baseline is 3. The description adds value by explaining that parkCode must be a single lowercase 4-letter code sourced from nps_find_parks, that stateCode is two-letter and returns activities across sites, and that at least one of the two is required. This goes beyond the schema's individual field descriptions, though it does not fully detail every param (e.g., limit/start are left to 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?

The description clearly identifies the tool as returning curated activities for a park or state, listing the specific fields (title, description, time commitment, etc.) and the exact use case ('what should I do at Acadia?'). It explicitly distinguishes itself from nps_get_park's raw activity tags, which is a direct sibling differentiator.

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 provides explicit when-to-use context (answering activity recommendations) and a clear exclusion: 'distinct from a park's raw activity tags in nps_get_park'. It also states the accepted inputs (single park code or state code) and that at least one is required, plus the edge case that empty results are not an error. This fully guides an agent on when and how to invoke it.

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 no active alerts match the request (with category or query set, alerts outside that filter may still be active); an empty page with a non-zero totalCount means start ran past the end of the matches. Closures and road conditions change daily.

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 trip-affecting. Combined with parkCode/stateCode/query and applied before start/limit, so totalCount counts every matching alert, not one page. Omit to see all categories.
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, most-recent first. Empty with totalCount 0 means no active alerts match the request; empty with a non-zero totalCount means start ran past the end of the matches.
noticeNoGuidance on the result set: whether an empty page means no active alerts match (totalCount 0) or start ran past the end of the matches, the start value for the next page when more alerts matched, and a best-effort disclosure when the category filter could not cover every alert.
truncatedNoTrue when more alerts matched than this response returned; absent on a complete result.
totalCountNoTotal alerts matching the filter before the limit was applied.
appliedFiltersNoEcho of parkCode/stateCode/category/query as applied.
categoryBreakdownNoCount of returned alerts per category, most severe first (e.g. "Park Closure: 3, Caution: 1, Information: 2").

TDQS

A4.9/5.0
Behavior5/5

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

Even though readOnlyHint and openWorldHint are present, the description adds substantial behavioral detail: returns most-recent-first, explains the distinction between an empty result (totalCount 0) and an exhausted page (non-zero totalCount), warns that filters may hide still-active alerts, and notes that closures change daily. This goes well beyond what the annotations provide.

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 well-organized: main purpose and example first, then code-source guidance, then ordering, then pagination and filter edge cases, then a freshness caveat. Every sentence earns its place and the structure lets an agent quickly extract the key behavior without rereading.

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?

With a rich output schema, complete parameter descriptions in the schema, and a description that covers recency, pagination semantics, filter behavior, and cross-tool dependencies, nothing an agent needs to call this tool correctly is missing. The open-world note about filtered results is especially valuable.

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 the baseline is 3, but the description adds meaningful context: it explains the open-world caveat for category/query filters, clarifies the pagination edge case for start, and frames stateCode as a statewide sweep. It doesn't redefine every parameter, but the schema already covers those details thoroughly.

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 names a specific resource (alerts) and a clear scope (park or state), enumerates alert types (closures, hazards, cautions, information), and frames the use case with an example question. It is immediately distinguishable from siblings like nps_find_parks or nps_get_park, and it even cross-references nps_find_parks for obtaining park codes.

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?

The description gives explicit when-to-use guidance: check alerts for a park or a statewide sweep for closures, and tells the agent where to get park codes (nps_find_parks). It also distinguishes parkCode usage from stateCode usage and notes the service-wide fallback when neither is provided.

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. Accepts up to ten codes per call. Use the fields parameter to return only the sections you need.

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 per call, each a 4-letter lowercase code (e.g. "yose", "grca", "zion"). Get codes from nps_find_parks.

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 that matched no NPS site — likely misspelled. Populated only when some codes did not resolve.
returnedCountNoNumber of requested parks found.
requestedCountNoNumber of park codes requested.

TDQS

A4.3/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 Edition. Beyond those, the description adds useful behavioral context: the default returns all sections, up to ten codes are supported per call, and fields can narrow the response. It also indicates the NPS page covers anything not returned. It does not cover rate limits or errors, but the output schema and read-only hint reduce that burden.

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?

Three sentences with no filler. The first sentence names what the tool does and enumerates the return sections; the second tells the agent where to get inputs; the third warns about the ten-code limit and points to payload filtering. All information earns its place.

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 read-only retrieval tool with an output schema, the description is complete: it names all return sections, explains the fields filter, sets the 10-code limit, and directs the agent to nps_find_parks for valid codes. No critical gap remains for an agent 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 description coverage is 100%, and the parkCode and fields descriptions already explain formats, examples, limits, and optional behavior. The tool description mostly repeats these rather than adding new parameter-level meaning. It provides useful narrative context (trip-planning detail) but does not materially improve on the schema's already thorough parameter documentation.

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 ('get'), a clear resource ('parks by parkCode'), and enumerates what the detail includes: description, activities/topics, fees, hours, contacts, directions, weather, images. It distinguishes itself from nps_find_parks by saying codes should come from that sibling and by focusing on full detail rather than discovery.

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 gives clear usage context: obtain codes from nps_find_parks, pass one to ten codes, and use the fields parameter to reduce payload. It does not explicitly state when not to use this tool versus other siblings, but the 'Get codes from nps_find_parks' instruction and full-detail framing make the intended workflow obvious.

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.

  1. 6 tool updates
    • Changednps_find_campgrounds17 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"
        +}
    • Changednps_find_events7 fields changed
      • removedInput schema / properties / dateEnd / pattern
        Removed value: -"^\\d{4}-\\d{2}-\\d{2}$"
      • removedInput schema / properties / dateStart / pattern
        Removed value: -"^\\d{4}-\\d{2}-\\d{2}$"
      • changedOutput schema / properties / events / items / properties / description / description
        Previous value: -"Event description (HTML stripped to plain text)."New value: +"Event description as plain text."
      • changedOutput schema / properties / events / items / properties / isRecurring / description
        Previous value: -"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."New value: +"True when this is a recurring series (multiple occurrence dates); dateStart/dateEnd then hold the series anchor and occurrenceDates the actual dates."
      • changedOutput schema / properties / events / items / properties / occurrenceDates / description
        Previous value: -"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."New value: +"Dates (YYYY-MM-DD) the event actually occurs within the requested dateStart/dateEnd window; with no window, every remaining occurrence from today through the series end. Empty when the window matches no occurrence. For a recurring series, dateStart/dateEnd hold the series anchor instead."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when no events matched, or a warning when the upstream envelope reported errors."New value: +"Guidance on the result set: how to widen a search that matched nothing, the pageNumber for the next page when more events matched, the way back when pageNumber ran past the end, and a warning when NPS reports errors for the request."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when more matching events follow this page; absent on the last page of the result.",
        +  "type": "boolean"
        +}
    • Changednps_find_parks8 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 (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."New value: +"Filter to parks offering an activity, matched against each park's activities list (e.g. \"hiking\", \"camping\", \"stargazing\"). Case-insensitive substring match, combined with query/stateCode and applied before start/limit, so totalCount counts every matching park, not one page. Use nps_get_park to see a park's full activity list."
      • changedInput schema / properties / query / description
        Previous 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."New value: +"Free-text search across park names and descriptions (e.g. \"yosemite\", \"civil war\", \"redwood\"). Exact parkCode or name matches lead, then other name matches, then parks that only mention the term in their description — ranked across every match before start/limit apply. Omit to browse by state. At least one of query or stateCode is recommended; with neither, returns the first page of all ~470 NPS sites."
      • changedOutput schema / properties / appliedFilters / description
        Previous value: -"Echo of the filters as the server applied them (query / stateCode / activity), so the agent can see what was searched."New value: +"Echo of the filters as applied (query / stateCode / activity)."
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when no parks matched — suggests broadening the query, checking the state code, or dropping the activity filter."New value: +"Guidance on the result set: how to broaden a search that matched nothing, the start value for the next page when more parks matched, the way back when start ran past the end, and a best-effort disclosure when the activity scan could not cover every site."
      • changedOutput schema / properties / parks / items / properties / latitude / description
        Previous value: -"Center latitude (decimal degrees), or null if the park record has no coordinates. Feed to nws-weather / open-meteo for a forecast."New value: +"Center latitude (decimal degrees), or null if the park record has no coordinates."
      • changedOutput schema / properties / parks / items / properties / url / description
        Previous value: -"Park's official NPS.gov page — the source for everything trimmed from this summary."New value: +"Park's official NPS.gov page, with fuller detail than this summary."
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Total parks matching the query/state filter before the limit was applied."New value: +"Total parks matching every filter, before start/limit were applied."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when more parks matched than this response returned; absent on a complete result.",
        +  "type": "boolean"
        +}
    • Changednps_get_activities6 fields changed
      • removedInput schema / properties / parkCode / pattern
        Removed value: -"^[a-z]{4}$"
      • removedInput schema / properties / stateCode / pattern
        Removed value: -"^[A-Za-z]{2}$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"Machine-readable failure mode. Declared by this tool: `missing_filter`: Neither parkCode nor stateCode provided. `invalid_park_code`: parkCode isn't a single 4-letter lowercase code. `invalid_state_code`: stateCode isn't a single two-letter code. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "missing_filter"
        -]New value: +[
        +  "missing_filter",
        +  "invalid_park_code",
        +  "invalid_state_code"
        +]
      • changedOutput schema / properties / notice / description
        Previous value: -"Guidance when no curated activities matched."New value: +"Guidance on the result set: where else to look when no curated activities matched, the start value for the next page when more matched, or the way back when start ran past the end."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when more activities matched than this response returned; absent on a complete result.",
        +  "type": "boolean"
        +}
    • Changednps_get_alerts7 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. 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)."New value: +"Filter to one alert category. \"Danger\" and \"Park Closure\" are trip-affecting. Combined with parkCode/stateCode/query and applied before start/limit, so totalCount counts every matching alert, not one page. Omit to see all categories."
      • changedOutput schema / properties / alerts / description
        Previous 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."New value: +"Current alerts, most-recent first. Empty with totalCount 0 means no active alerts match the request; empty with a non-zero totalCount means start ran past the end of the matches."
      • changedOutput schema / properties / alerts / items / properties / category / description
        Previous value: -"Alert category: \"Danger\", \"Park Closure\", \"Caution\", or \"Information\". Treat Danger and Park Closure as trip-affecting."New value: +"Alert category: \"Danger\", \"Park Closure\", \"Caution\", or \"Information\". Danger and Park Closure are trip-affecting."
      • changedOutput schema / properties / alerts / items / properties / lastIndexedDate / description
        Previous value: -"When NPS last updated/indexed this alert (YYYY-MM-DD), or null. The recency signal — a stale date may mean the condition has changed; verify against the park page."New value: +"When NPS last updated/indexed this alert (YYYY-MM-DD), or null. The recency signal — a stale date may mean the condition has changed."
      • changedOutput schema / properties / categoryBreakdown / description
        Previous value: -"Count of returned alerts per category (e.g. \"Park Closure: 3, Caution: 1, Information: 2\") — gauge severity without scanning every alert."New value: +"Count of returned alerts per category, most severe first (e.g. \"Park Closure: 3, Caution: 1, Information: 2\")."
      • changedOutput schema / properties / notice / description
        Previous 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)."New value: +"Guidance on the result set: whether an empty page means no active alerts match (totalCount 0) or start ran past the end of the matches, the start value for the next page when more alerts matched, and a best-effort disclosure when the category filter could not cover every alert."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when more alerts matched than this response returned; absent on a complete result.",
        +  "type": "boolean"
        +}
    • Changednps_get_park11 fields changed
      • changedInput schema / properties / parkCode / description
        Previous value: -"One 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."New value: +"One to ten park codes per call, each a 4-letter lowercase code (e.g. \"yose\", \"grca\", \"zion\"). Get codes from nps_find_parks."
      • removedInput schema / properties / parkCode / items / pattern
        Removed value: -"^[a-z]{4}$"
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"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."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_park_code`: A parkCode element isn't 4 lowercase letters. `no_parks_found`: None of the requested codes matched an NPS site. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "no_parks_found"
        -]New value: +[
        +  "invalid_park_code",
        +  "no_parks_found"
        +]
      • changedOutput schema / properties / missingCodes / description
        Previous value: -"Requested park codes the API returned no record for — likely invalid/misspelled codes. Populated only when some codes did not resolve."New value: +"Requested park codes that matched no NPS site — likely misspelled. Populated only when some codes did not resolve."
      • changedOutput schema / properties / parks / items / properties / directionsInfo / description
        Previous value: -"Free-text driving/access directions, or null."New value: +"Free-text driving/access directions, or null when NPS publishes none (included unless fields excludes \"directions\")."
      • changedOutput schema / properties / parks / items / properties / directionsUrl / description
        Previous value: -"NPS directions page URL, or null."New value: +"NPS directions page URL, or null when NPS publishes none (included unless fields excludes \"directions\")."
      • changedOutput schema / properties / parks / items / properties / imagesTruncated / description
        Previous value: -"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."New value: +"True when the park has more than the 5 images returned here; the park url has the full set. Present only when the images section is included."
      • changedOutput schema / properties / parks / items / properties / weatherOverview / description
        Previous value: -"NPS free-text weather/seasonal overview for the park, or null. For an actual forecast, feed the coordinates to nws-weather or open-meteo."New value: +"NPS free-text weather/seasonal overview for the park, or null. General seasonal guidance, not a forecast."
      • changedOutput schema / properties / parks / items / required
        Previous value: -[
        -  "parkCode",
        -  "fullName",
        -  "designation",
        -  "states",
        -  "description",
        -  "latitude",
        -  "longitude",
        -  "weatherOverview",
        -  "directionsInfo",
        -  "directionsUrl",
        -  "url"
        -]New value: +[
        +  "parkCode",
        +  "fullName",
        +  "designation",
        +  "states",
        +  "description",
        +  "latitude",
        +  "longitude",
        +  "weatherOverview",
        +  "url"
        +]
      • changedOutput schema / properties / returnedCount / description
        Previous value: -"Number of parks the API returned."New value: +"Number of requested parks found."
  2. 6 tool updates
    • Changednps_find_campgrounds20 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"
        +]
    • Changednps_find_events16 fields changed
      • removedOutput schema / properties / events / items / properties / category / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / category / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / events / items / properties / dateEnd / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / dateEnd / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / events / items / properties / dateStart / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / dateStart / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / events / items / properties / feeInfo / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / feeInfo / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / events / items / properties / infoUrl / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / infoUrl / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / events / items / properties / location / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / location / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / events / items / properties / parkCode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / parkCode / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / events / items / properties / registrationUrl / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / events / items / properties / registrationUrl / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changednps_find_parks6 fields changed
      • removedOutput schema / properties / parks / items / properties / entranceFee / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parks / items / properties / entranceFee / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / parks / items / properties / latitude / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parks / items / properties / latitude / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / parks / items / properties / longitude / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parks / items / properties / longitude / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changednps_get_activities16 fields changed
      • removedOutput schema / properties / activities / items / properties / accessibility / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / activities / items / properties / accessibility / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / activities / items / properties / duration / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / activities / items / properties / duration / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / activities / items / properties / feeDescription / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / activities / items / properties / feeDescription / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / activities / items / properties / latitude / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / activities / items / properties / latitude / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / activities / items / properties / location / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / activities / items / properties / location / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / activities / items / properties / longitude / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / activities / items / properties / longitude / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / activities / items / properties / parkCode / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / activities / items / properties / parkCode / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / activities / items / properties / url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / activities / items / properties / url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changednps_get_alerts4 fields changed
      • removedOutput schema / properties / alerts / items / properties / lastIndexedDate / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alerts / items / properties / lastIndexedDate / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / alerts / items / properties / url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / alerts / items / properties / url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changednps_get_park10 fields changed
      • removedOutput schema / properties / parks / items / properties / directionsInfo / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parks / items / properties / directionsInfo / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / parks / items / properties / directionsUrl / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parks / items / properties / directionsUrl / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / parks / items / properties / latitude / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parks / items / properties / latitude / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / parks / items / properties / longitude / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parks / items / properties / longitude / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / parks / items / properties / weatherOverview / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / parks / items / properties / weatherOverview / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  3. 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"
        -]
  4. 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})*$"
  5. 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"
        +}
  6. 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

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
    90 npm
    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.