Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

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.

+5 this week 68 Trust /100
Trust breakdown (6 categories)

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

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

# add to Claude Code
claude mcp add --transport http cyanheads-national-parks-mcp-server https://national-parks.caseyjhand.com/mcp
# ~/.codex/config.toml
[mcp_servers.cyanheads-national-parks-mcp-server]
url = "https://national-parks.caseyjhand.com/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-national-parks-mcp-server": {
      "type": "remote",
      "url": "https://national-parks.caseyjhand.com/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add cyanheads-national-parks-mcp-server --url https://national-parks.caseyjhand.com/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  cyanheads-national-parks-mcp-server:
    url: "https://national-parks.caseyjhand.com/mcp"
// mcp.json
{
  "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.

Changelog

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.

Diagnostics

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
MCP tools — 6 exposed · ~1,942 tokens

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.

Tool Tokens
nps_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.

NameTypeReqDescription
limitintegerMaximum campgrounds to return (1–50).
parkCodestringPark code, or comma-separated list (e.g. "zion") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode.
querystringFree-text search across campground names/descriptions (e.g. "river", "group", "rv").
startintegerZero-based pagination offset.
stateCodestringTwo-letter state code, or comma-separated list. Returns campgrounds across all NPS sites in those states.
NameTypeReqDescription
appliedFiltersstringyesEcho of parkCode/stateCode/query as applied.
campgroundsarrayyesCampgrounds at the requested park(s)/state(s).
capnumberLimit applied (populated when results were truncated).
noticestringGuidance when no campgrounds matched.
shownnumberCampgrounds returned in this response (populated when capped by limit).
totalCountnumberyesTotal campgrounds matching the filter before the limit was applied.

No examples provided.

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

NameTypeReqDescription
dateEndstringEnd of the date window (YYYY-MM-DD). Use with dateStart.
dateStartstringStart of the date window (YYYY-MM-DD). Combine with dateEnd to bound the search (e.g. a weekend). Omit for upcoming events from today.
pageNumberinteger1-based page number. Increment to page through results beyond the first page.
pageSizeintegerMaximum events to return per page (1–50). Paginates by page number, not offset — use with pageNumber to walk through results.
parkCodestringPark code, or comma-separated list (e.g. "yell") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode.
querystringFree-text search across event titles/descriptions (e.g. "ranger", "astronomy", "guided").
stateCodestringTwo-letter state code, or comma-separated list (e.g. "WY", "WY,MT,ID"). Returns events across NPS sites in those states.
NameTypeReqDescription
appliedFiltersstringyesEcho of parkCode/stateCode/date window/query as applied.
capnumberPage size applied (populated when results were truncated).
eventsarrayyesEvents matching the park/state and date window.
noticestringGuidance when no events matched, or a warning when the upstream envelope reported errors.
shownnumberEvents returned on this page (populated when the page was capped by pageSize).
totalCountnumberyesTotal events matching the filter before the page limit.

No examples provided.

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

NameTypeReqDescription
activitystringFilter 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…
limitintegerMaximum parks to return (1–50). The full set is ~470 sites; narrow with query/stateCode rather than paging through everything.
querystringFree-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…
startintegerZero-based offset for pagination within the matched set. Use with limit to page through results.
stateCodestringTwo-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.
NameTypeReqDescription
appliedFiltersstringyesEcho of the filters as the server applied them (query / stateCode / activity), so the agent can see what was searched.
capnumberThe limit applied to this response (populated when results were truncated).
noticestringGuidance when no parks matched — suggests broadening the query, checking the state code, or dropping the activity filter.
parksarrayyesMatching parks, each carrying the parkCode needed to chain into the detail tools.
shownnumberNumber of parks returned in this response (populated when the result set was capped by limit).
totalCountnumberyesTotal parks matching the query/state filter before the limit was applied.

No examples provided.

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

NameTypeReqDescription
limitintegerMaximum activities to return (1–50).
parkCodestringA 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.
querystringFree-text search across activity titles/descriptions (e.g. "sunrise", "hike", "tour").
startintegerZero-based pagination offset.
stateCodestringA single two-letter state code (e.g. "ME"). Returns curated activities across NPS sites in that state.
NameTypeReqDescription
activitiesarrayyesCurated activities and points of interest for the requested park/state.
appliedFiltersstringyesEcho of parkCode/stateCode/query as applied.
capnumberLimit applied (populated when results were truncated).
noticestringGuidance when no curated activities matched.
shownnumberActivities returned in this response (populated when capped by limit).
totalCountnumberyesTotal activities matching the filter before the limit was applied.

No examples provided.

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

NameTypeReqDescription
categorystringFilter 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…
limitintegerMaximum alerts to return (1–50), most-recent first.
parkCodestringPark 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…
querystringFree-text search within alert titles/descriptions (e.g. "road", "wildfire", "trail").
startintegerZero-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.
stateCodestringTwo-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.
NameTypeReqDescription
alertsarrayyesCurrent 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…
appliedFiltersstringyesEcho of parkCode/stateCode/category/query as applied.
capnumberLimit applied (populated when results were truncated).
categoryBreakdownstringyesCount of returned alerts per category (e.g. "Park Closure: 3, Caution: 1, Information: 2") — gauge severity without scanning every alert.
noticestringMessage 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…
shownnumberAlerts returned in this response (populated when capped by limit).
totalCountnumberyesTotal alerts matching the filter before the limit was applied.

No examples provided.

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

NameTypeReqDescription
fieldsarrayOptional 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…
parkCodearrayyesOne 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.
NameTypeReqDescription
missingCodesarrayRequested park codes the API returned no record for — likely invalid/misspelled codes. Populated only when some codes did not resolve.
noticestringGuidance when one or more codes did not resolve, or when none did.
parksarrayyesRequested parks with trip-planning detail.
requestedCountnumberyesNumber of park codes requested.
returnedCountnumberyesNumber of parks the API returned.

No examples provided.