Plan US National Park Service trips — parks, alerts, campgrounds, things to do, events.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Maximum campgrounds to return (1–50).
Free-text search across campground names/descriptions (e.g. "river", "group", "rv").
Zero-based pagination offset.
Park code, or comma-separated list (e.g. "zion") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode.
Two-letter state code, or comma-separated list. Returns campgrounds across all NPS sites in those states.
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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum campgrounds to return (1–50). |
| query | string | Free-text search across campground names/descriptions (e.g. "river", "group", "rv"). |
| start | integer | Zero-based pagination offset. |
| 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. |
| stateCode | string | Two-letter state code, or comma-separated list. Returns campgrounds across all NPS sites in those states. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 15,
"maximum": 50,
"minimum": 1,
"description": "Maximum campgrounds to return (1–50)."
},
"query": {
"type": "string",
"description": "Free-text search across campground names/descriptions (e.g. \"river\", \"group\", \"rv\")."
},
"start": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based pagination offset."
},
"parkCode": {
"type": "string",
"description": "Park code, or comma-separated list (e.g. \"zion\") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode."
},
"stateCode": {
"type": "string",
"description": "Two-letter state code, or comma-separated list. Returns campgrounds across all NPS sites in those states."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| query | string | Free-text search across event titles/descriptions (e.g. "ranger", "astronomy", "guided"). |
| dateEnd | string | End of the date window (YYYY-MM-DD). Use with dateStart. |
| 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. |
| 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. |
| stateCode | string | Two-letter state code, or comma-separated list (e.g. "WY", "WY,MT,ID"). Returns events across NPS sites in those states. |
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.
| Argument | Type | Description |
|---|---|---|
| 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"). 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. |
| start | integer | Zero-based offset for pagination within the matched set. Use with limit to page through results. |
| activity | string | 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. |
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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum activities to return (1–50). |
| query | string | Free-text search across activity titles/descriptions (e.g. "sunrise", "hike", "tour"). |
| start | integer | Zero-based pagination offset. |
| 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. |
| stateCode | string | A single two-letter state code (e.g. "ME"). Returns curated activities across NPS sites in that state. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 15,
"maximum": 50,
"minimum": 1,
"description": "Maximum activities to return (1–50)."
},
"query": {
"type": "string",
"description": "Free-text search across activity titles/descriptions (e.g. \"sunrise\", \"hike\", \"tour\")."
},
"start": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based pagination offset."
},
"parkCode": {
"type": "string",
"description": "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."
},
"stateCode": {
"type": "string",
"description": "A single two-letter state code (e.g. \"ME\"). Returns curated activities across NPS sites in that state."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum alerts to return (1–50), most-recent first. |
| 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. |
| category | string | 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. |
| 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-wide. |
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.
| Argument | Type | 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 need, say, hours and fees. |
| parkCode* | array | One to ten park codes per call, each a 4-letter lowercase code (e.g. "yose", "grca", "zion"). Get codes from nps_find_parks. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"parkCode"
],
"properties": {
"fields": {
"type": "array",
"items": {
"enum": [
"activities",
"topics",
"fees",
"hours",
"contacts",
"directions",
"images"
],
"type": "string"
},
"description": "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 need, say, hours and fees."
},
"parkCode": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "One to ten park codes per call, each a 4-letter lowercase code (e.g. \"yose\", \"grca\", \"zion\"). Get codes from nps_find_parks."
}
},
"additionalProperties": false
}| pageNumber |
| integer |
| 1-based page number. Increment to page through results beyond the first page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"description": "Free-text search across event titles/descriptions (e.g. \"ranger\", \"astronomy\", \"guided\")."
},
"dateEnd": {
"type": "string",
"description": "End of the date window (YYYY-MM-DD). Use with dateStart."
},
"pageSize": {
"type": "integer",
"default": 15,
"maximum": 50,
"minimum": 1,
"description": "Maximum events to return per page (1–50). Paginates by page number, not offset — use with pageNumber to walk through results."
},
"parkCode": {
"type": "string",
"description": "Park code, or comma-separated list (e.g. \"yell\") — 4-letter lowercase codes. Get codes from nps_find_parks. Provide parkCode or stateCode."
},
"dateStart": {
"type": "string",
"description": "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."
},
"stateCode": {
"type": "string",
"description": "Two-letter state code, or comma-separated list (e.g. \"WY\", \"WY,MT,ID\"). Returns events across NPS sites in those states."
},
"pageNumber": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "1-based page number. Increment to page through results beyond the first page."
}
},
"additionalProperties": false
}| 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. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Maximum parks to return (1–50). The full set is ~470 sites; narrow with query/stateCode rather than paging through everything."
},
"query": {
"type": "string",
"description": "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."
},
"start": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based offset for pagination within the matched set. Use with limit to page through results."
},
"activity": {
"type": "string",
"description": "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."
},
"stateCode": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
}| 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. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Maximum alerts to return (1–50), most-recent first."
},
"query": {
"type": "string",
"description": "Free-text search within alert titles/descriptions (e.g. \"road\", \"wildfire\", \"trail\")."
},
"start": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 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."
},
"category": {
"enum": [
"Danger",
"Caution",
"Information",
"Park Closure"
],
"type": "string",
"description": "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."
},
"parkCode": {
"type": "string",
"description": "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."
},
"stateCode": {
"type": "string",
"description": "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."
}
},
"additionalProperties": false
}