io.github.cyanheads/national-parks-mcp-server
REMOTE · NATIONAL-PARKS.CASEYJHAND.COM · 2 COMPONENTS · SCANNED AUG 3
Plan US National Park Service trips — parks, alerts, campgrounds, things to do, events.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security66
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 6 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability62
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2090 tokens (~348/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · national-parks.caseyjhand.com
claude mcp add --transport http cyanheads-national-parks-mcp-server https://national-parks.caseyjhand.com/mcp
[mcp_servers.cyanheads-national-parks-mcp-server] url = "https://national-parks.caseyjhand.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cyanheads-national-parks-mcp-server": {
"type": "remote",
"url": "https://national-parks.caseyjhand.com/mcp",
"enabled": true
}
}
} openclaw mcp add cyanheads-national-parks-mcp-server --url https://national-parks.caseyjhand.com/mcp --transport streamable-http
mcp_servers:
cyanheads-national-parks-mcp-server:
url: "https://national-parks.caseyjhand.com/mcp" {
"mcpServers": {
"cyanheads-national-parks-mcp-server": {
"type": "http",
"url": "https://national-parks.caseyjhand.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 62
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://national-parks.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 7 Jul 2026 | 5 Oct 2026 | ECDSA 256 | ECDSA-SHA256 | 5aad900eb2055a0b0ea55912ec19680c |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
DNSSEC secure
Validation of national-parks.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| national-parks.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://national-parks.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://national-parks.caseyjhand.com/mcp | HTTPS enforced | 301 | https://national-parks.caseyjhand.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
nps_find_campgrounds national-parks-mcp-server: find campgrounds ~244
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | Maximum campgrounds to return (1–50). |
| parkCode | string | — | Park code, or comma-separated list (e.g. "zion") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode. |
| query | string | — | Free-text search across campground names/descriptions (e.g. "river", "group", "rv"). |
| start | integer | — | Zero-based pagination offset. |
| stateCode | string | — | Two-letter state code, or comma-separated list. Returns campgrounds across all NPS sites in those states. |
| Name | Type | Req | Description |
|---|---|---|---|
| appliedFilters | string | yes | Echo of parkCode/stateCode/query as applied. |
| campgrounds | array | yes | Campgrounds at the requested park(s)/state(s). |
| cap | number | — | Limit applied (populated when results were truncated). |
| notice | string | — | Guidance when no campgrounds matched. |
| shown | number | — | Campgrounds returned in this response (populated when capped by limit). |
| totalCount | number | yes | Total campgrounds matching the filter before the limit was applied. |
No examples provided.
nps_find_events national-parks-mcp-server: find events ~346
Scheduled events at a park within a date range — ranger programs, festivals, tours, interpretive events — answering "what's happening at Yellowstone this weekend?" with title, dates and times, location, category, fee, and registration links. Get park codes from nps_find_parks. Paginates by page number, not offset. The events feed is sparser and less consistent than alerts or campgrounds; many parks list few or no events, and an empty result is not an error.
| Name | Type | Req | Description |
|---|---|---|---|
| dateEnd | string | — | End of the date window (YYYY-MM-DD). Use with dateStart. |
| dateStart | string | — | Start of the date window (YYYY-MM-DD). Combine with dateEnd to bound the search (e.g. a weekend). Omit for upcoming events from today. |
| pageNumber | integer | — | 1-based page number. Increment to page through results beyond the first page. |
| pageSize | integer | — | Maximum events to return per page (1–50). Paginates by page number, not offset — use with pageNumber to walk through results. |
| parkCode | string | — | Park code, or comma-separated list (e.g. "yell") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode. |
| query | string | — | Free-text search across event titles/descriptions (e.g. "ranger", "astronomy", "guided"). |
| stateCode | string | — | Two-letter state code, or comma-separated list (e.g. "WY", "WY,MT,ID"). Returns events across NPS sites in those states. |
| Name | Type | Req | Description |
|---|---|---|---|
| appliedFilters | string | yes | Echo of parkCode/stateCode/date window/query as applied. |
| cap | number | — | Page size applied (populated when results were truncated). |
| events | array | yes | Events matching the park/state and date window. |
| notice | string | — | Guidance when no events matched, or a warning when the upstream envelope reported errors. |
| shown | number | — | Events returned on this page (populated when the page was capped by pageSize). |
| totalCount | number | yes | Total events matching the filter before the page limit. |
No examples provided.
nps_find_parks national-parks-mcp-server: find parks ~456
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.
| Name | Type | Req | Description |
|---|---|---|---|
| activity | string | — | 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 p… |
| limit | integer | — | Maximum parks to return (1–50). The full set is ~470 sites; narrow with query/stateCode rather than paging through everything. |
| query | string | — | 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 alphabeti… |
| start | integer | — | Zero-based offset for pagination within the matched set. Use with limit to page through results. |
| stateCode | string | — | Two-letter US state/territory code, or comma-separated list (e.g. "CA", "WY,MT,ID"). Filters to parks located in those states. Combine with query to narrow. |
| Name | Type | Req | Description |
|---|---|---|---|
| appliedFilters | string | yes | Echo of the filters as the server applied them (query / stateCode / activity), so the agent can see what was searched. |
| cap | number | — | The limit applied to this response (populated when results were truncated). |
| notice | string | — | Guidance when no parks matched — suggests broadening the query, checking the state code, or dropping the activity filter. |
| parks | array | yes | Matching parks, each carrying the parkCode needed to chain into the detail tools. |
| shown | number | — | Number of parks returned in this response (populated when the result set was capped by limit). |
| totalCount | number | yes | Total parks matching the query/state filter before the limit was applied. |
No examples provided.
nps_get_activities national-parks-mcp-server: get activities ~253
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.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | Maximum activities to return (1–50). |
| parkCode | string | — | A single 4-letter lowercase park code (e.g. "acad"). Get it from nps_find_parks. Accepts one park code, not a list. Provide parkCode or stateCode. |
| query | string | — | Free-text search across activity titles/descriptions (e.g. "sunrise", "hike", "tour"). |
| start | integer | — | Zero-based pagination offset. |
| stateCode | string | — | A single two-letter state code (e.g. "ME"). Returns curated activities across NPS sites in that state. |
| Name | Type | Req | Description |
|---|---|---|---|
| activities | array | yes | Curated activities and points of interest for the requested park/state. |
| appliedFilters | string | yes | Echo of parkCode/stateCode/query as applied. |
| cap | number | — | Limit applied (populated when results were truncated). |
| notice | string | — | Guidance when no curated activities matched. |
| shown | number | — | Activities returned in this response (populated when capped by limit). |
| totalCount | number | yes | Total activities matching the filter before the limit was applied. |
No examples provided.
nps_get_alerts national-parks-mcp-server: get alerts ~441
Current alerts for a park or a whole state — closures, hazards, caution notices, and information — with category and recency surfaced first so "is anything closed at Glacier right now?" is answered at a glance. Get park codes from nps_find_parks, or pass a stateCode for a statewide "what's closed" sweep. Returns most-recent-first; an empty result with totalCount 0 means the park reports nothing closed or hazardous — good news, not an error. An empty page with a non-zero totalCount only means start ran past the end, so read the notice rather than the empty list. Closures and road conditions change daily — re-check before departure.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | — | 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/qu… |
| limit | integer | — | Maximum alerts to return (1–50), most-recent first. |
| parkCode | string | — | 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-wid… |
| query | string | — | Free-text search within alert titles/descriptions (e.g. "road", "wildfire", "trail"). |
| start | integer | — | 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. |
| stateCode | string | — | Two-letter state code, or comma-separated list (e.g. "MT", "WY,MT,ID"). Returns alerts for all NPS sites in those states — use for a statewide sweep rather than one park. |
| Name | Type | Req | Description |
|---|---|---|---|
| alerts | array | yes | 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 matche… |
| appliedFilters | string | yes | Echo of parkCode/stateCode/category/query as applied. |
| cap | number | — | Limit applied (populated when results were truncated). |
| categoryBreakdown | string | yes | Count of returned alerts per category (e.g. "Park Closure: 3, Caution: 1, Information: 2") — gauge severity without scanning every alert. |
| notice | string | — | 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 mat… |
| shown | number | — | Alerts returned in this response (populated when capped by limit). |
| totalCount | number | yes | Total alerts matching the filter before the limit was applied. |
No examples provided.
nps_get_park national-parks-mcp-server: get park detail ~202
Full trip-planning detail for one or more parks by parkCode: description, activities and topics, entrance fees and passes, operating hours by area/season, contacts, directions, a free-text weather overview, representative images, and the NPS page for everything else. Get codes from nps_find_parks. Up to ten codes are fetched in a single request. Use the fields parameter to trim the payload when you only need certain sections.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | — | Optional detail sections to include beyond the always-present core (name, designation, states, description, coordinates, weather, url). Omit for all sections. Narrow to reduce payload when you only n… |
| parkCode | array | yes | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| missingCodes | array | — | Requested park codes the API returned no record for — likely invalid/misspelled codes. Populated only when some codes did not resolve. |
| notice | string | — | Guidance when one or more codes did not resolve, or when none did. |
| parks | array | yes | Requested parks with trip-planning detail. |
| requestedCount | number | yes | Number of park codes requested. |
| returnedCount | number | yes | Number of parks the API returned. |
No examples provided.