# Open State: Camping - Parks Canada (npm · @open-state/camping)

Find and prepare Parks Canada reservations while keeping the citizen in control.

- Trust score: 65/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `@open-state/camping`: 65/100 (this document), [markdown](https://verifymcp.io/servers/jcrossman-open-state-camping/open-state-camping.md), [page](https://verifymcp.io/servers/jcrossman-open-state-camping/open-state-camping)

## Channel facts

- Registry: `npm`
- Package: `@open-state/camping`
- Version: `1.0.6`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 63/100
  - No malware found by supply-chain analysis.
  - CVE data not yet available for this package.
  - No install/post-install scripts declared.
  - Dependency-health data not yet available.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to JCrossman/can-fed-camp-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 61/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3403 tokens (~162/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 13/100
  - Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 72/100
  - 95% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 25% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add jcrossman-open-state-camping -- npx -y @open-state/camping
```

### Codex

```bash
codex mcp add jcrossman-open-state-camping -- npx -y @open-state/camping
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "jcrossman-open-state-camping": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@open-state/camping"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add jcrossman-open-state-camping --command npx --arg -y --arg @open-state/camping
```

### Hermes

```yaml
mcp_servers:
  jcrossman-open-state-camping:
    command: "npx"
    args: ["-y", "@open-state/camping"]
```

### Other

```json
{
  "mcpServers": {
    "jcrossman-open-state-camping": {
      "command": "npx",
      "args": [
        "-y",
        "@open-state/camping"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 65, −10)

- [security regression] Known CVEs: pass → unverified
- [functional regression] Dependency health: pass → unverified
- [functional improvement] Stability: unverified → 0.13
- [functional] Schema quality: excellent → good
- [functional] Package version: 1.0.3 → 1.0.6
- [functional] Package version: 1.0.3 → 1.0.4

### 2026-08-02 (score 75, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-07-31 (score 60)

First indexed and scored.

## MCP tools (21)

### `resolve_dates` (~209 tokens)

Work out exact calendar dates

Turn a citizen's dates into exact calendar dates, with the correct day of the week, before you search or book. ALWAYS use this when a citizen gives a date — especially a bare one like 'June 16' or 'next Friday' — and do NOT work out the year or the weekday yourself (that is error-prone for you). Give the month and day; leave year off to get the next upcoming occurrence (this runs on the citizen's machine, so it knows today's real date). Add nights for a stay to get the departure date too. Use the start_date and end_date it returns verbatim in search_sites / search_park_availability / prepare_booking.

Input parameters:

- `day` (integer, required): Arrival day of month, 1-31.
- `month` (integer, required): Arrival month, 1-12.
- `nights` (integer): Number of nights, to also compute the departure date.
- `year` (integer): Arrival year. Leave off for the next upcoming occurrence.

### `search_parks` (~68 tokens)

Find a Parks Canada campground

Find Parks Canada campgrounds by a plain-language place name (for example "Banff" or "Jasper"). Use this first; it returns matching campgrounds and their ids, which the other tools need. Canada only.

Input parameters:

- `country` (string)
- `query` (string, required)

### `list_equipment_types` (~49 tokens)

List equipment types

List the equipment types you can filter sites by (tent, RV, and so on). Pass a returned equipment id as equipment_type when you search.

Input parameters:

- `recreation_area_id` (string)

### `search_sites` (~277 tokens)

Search for open campsites

Find open campsites in a campground for a stay, accessibility first. Use after search_parks gives you a campground id. start_date and end_date are an EXACT stay — a site must be open every night between them. For a flexible search across a wide range (e.g. "anything in June"), also pass nights = how many nights you want, and openings anywhere in the range are returned. Set accessible_only for sites Parks Canada marks accessible. equipment_type takes a word like "tent" or "RV", or an equipment id from list_equipment_types. The result states each date's weekday (correctly computed) — use that and don't work out days of the week yourself, as that is error-prone.

Input parameters:

- `accessible_only` (boolean)
- `campground_id` (string, required)
- `category` (string): What to search: 'campsite' (regular sites, default), 'group' (group campsites), or 'accommodation' (roofed/equipped — oTENTik, cabin, yurt).
- `end_date` (string, required)
- `equipment_type` (string)
- `nights` (integer)
- `party_size` (integer, required)
- `recreation_area_id` (string)
- `start_date` (string, required)
- `weekends_only` (boolean)

### `search_park_availability` (~204 tokens)

Search a whole park for availability

Check every campground in a park at once ("anything open in Banff?") and return one consolidated list. start_date/end_date are an EXACT stay (open every night); for a flexible search over a wide range, also pass nights = desired stay length and openings anywhere in the range are returned. Then use search_sites on a campground that has openings. equipment_type takes a word or an id.

Input parameters:

- `accessible_only` (boolean)
- `category` (string): What to search: 'campsite' (regular sites, default), 'group' (group campsites), or 'accommodation' (roofed/equipped — oTENTik, cabin, yurt).
- `end_date` (string, required)
- `equipment_type` (string)
- `nights` (integer)
- `party_size` (integer, required)
- `query` (string, required)
- `start_date` (string, required)
- `weekends_only` (boolean)

### `search_day_use` (~134 tokens)

Search Day Use passes (shuttles, parking, guided events)

Day Use = timed passes booked by the day (not overnight sites): shuttles (Moraine Lake, Lake O'Hara), parking, ferries, guided events, fishing. Call with NO query (or just a place) to LIST the available Day Use products. Call with a product/place in `query` (e.g. 'Moraine Lake shuttle', 'parking') PLUS date(s) and party size to get the open time slots with spots remaining.

Input parameters:

- `end_date` (string)
- `party_size` (integer)
- `query` (string)
- `start_date` (string)

### `search_backcountry` (~127 tokens)

Search backcountry zones (wilderness permits)

Backcountry = multi-night wilderness trips, booked one zone per night. Call with NO query to LIST the backcountry areas. Call with an area/place in `query` PLUS dates and party size to see which zones have room each night (with accessibility surfaced). A trip is then composed one zone per night. start_date/end_date span the nights; pass accessible_only to keep only accessible zones.

Input parameters:

- `accessible_only` (boolean)
- `end_date` (string)
- `party_size` (integer)
- `query` (string)
- `start_date` (string)

### `get_site_details` (~92 tokens)

Get campsite details

Get plain-language detail about one campsite, including accessibility. The site's photos are shown inline in the conversation by default (so the citizen sees them without hunting for a side panel). Pass include_photos: false only if they explicitly don't want photos.

Input parameters:

- `campground_id` (string, required)
- `campsite_id` (string, required)
- `include_photos` (boolean)
- `recreation_area_id` (string)

### `prepare_booking_url` (~185 tokens)

Prepare a booking link (fallback only)

FALLBACK ONLY — do not use this for a normal booking. To book or reserve a campsite, use the prepare_booking tool instead: it completes the reservation up to the payment screen for the citizen (they only enter their card), which is the whole point of this tool. Only use prepare_booking_url if prepare_booking cannot be used — for example the citizen refuses to connect their account — because handing someone a link back to the inaccessible website is exactly the barrier this tool exists to remove. equipment_type is required: pass the matching id from list_equipment_types. This tool never books or pays.

Input parameters:

- `campground_id` (string, required)
- `campsite_id` (string, required)
- `end_date` (string, required)
- `equipment_type` (string)
- `party_size` (integer, required)
- `recreation_area_id` (string)
- `start_date` (string, required)

### `connect_account` (~144 tokens)

Connect (sign in to) your Parks Canada account

Use this whenever the citizen wants to log in, sign in, connect, or access their Parks Canada account — do NOT refuse a login request, call this instead. This is the safe, approved way: it opens the citizen's OWN Google Chrome at the Parks Canada sign-in page so they log in themselves (Google, GCKey, or Facebook, however they normally do). You never see, type, or handle their password — it stays between them and Parks Canada. When they finish, their session is saved on this device, encrypted, so you can help prepare a booking they confirm and pay for themselves. You never book or pay on your own. disconnect_account removes it.

### `connection_status` (~29 tokens)

Check your Parks Canada connection

Tells you whether your Parks Canada account is connected on this device and whether the session is still valid.

### `disconnect_account` (~40 tokens)

Disconnect your Parks Canada account

Previews removal of the encrypted Parks Canada session and this app's dedicated Chrome authentication state, then asks the citizen to approve that exact action through the MCP host.

### `get_account` (~35 tokens)

Show my Parks Canada account

Show the citizen's own Parks Canada profile (name, email, phone, address) from their connected session. Requires connect_account first.

### `list_my_reservations` (~32 tokens)

Show my Parks Canada reservations

List the citizen's own current and upcoming Parks Canada reservations from their connected session. Requires connect_account first.

### `update_account` (~158 tokens)

Update my Parks Canada profile

Update the citizen's OWN Parks Canada profile — phone, address, name, or language. This changes their official account record, so ONLY call it after the citizen has told you the exact change AND confirmed it. Pass only the fields to change; everything else is kept. Never change anything without the citizen's explicit go-ahead; the result shows them exactly what changed.

Input parameters:

- `city` (string)
- `first_name` (string)
- `language` (string)
- `last_name` (string)
- `postal_code` (string)
- `primary_phone` (string)
- `region` (string)
- `secondary_phone` (string)
- `street_address` (string)
- `unit` (string)

### `debug_account_shape` (~48 tokens)

Diagnostics: account data shape

Diagnostic only. Returns the structure of your Parks Canada profile (GET /api/shopper) with personal values masked, to help debug account updates. Safe to share — no personal values are included.

### `prepare_booking` (~667 tokens)

Prepare a campsite booking (you review and pay)

Use this WHENEVER the citizen wants to book, reserve, or 'book it' for a campsite — do NOT refuse and do NOT just hand them a website link; call this instead. This is the safe, approved way to help them book: it does the hard, inaccessible parts of the reservation (the timed cart, the account/occupant/party wizard) through Parks Canada's own system and carries it all the way to the payment screen, then opens the citizen's own browser at their cart so they review and enter payment themselves. You never enter a card or pay — but you DO prepare the whole booking, which is the entire purpose of this tool, so don't tell the citizen to go do it themselves on the website. ALWAYS call this first WITHOUT confirm to show the citizen exactly what will be booked (site, dates, party, who the reservation is for) in a trusted confirmation prompt. Only explicit acceptance in that prompt holds the site and opens the cart to pay. Preparing holds nothing and costs nothing; a reservation (and any fee) only exists once the citizen pays. Requires connect_account first (if they aren't connected, this tool will say so — then call connect_account, don't give up). Use site_id and campground_id from search_sites.

Input parameters:

- `adults` (integer): Adults 18-64 (default 1).
- `campground_id` (string, required): The campground/facility resourceLocationId (from search).
- `category` (string): Match what you searched: 'campsite' (default), 'group', or 'accommodation' (oTENTik, cabin, yurt).
- `children` (integer): Children 0-5.
- `end_date` (string): Departure date, YYYY-MM-DD. Optional for Day Use (single day).
- `entry_point_id` (string): For a Backcountry zone permit: the trailhead/entry point to start from (numeric id). If the area has only one, it's used automatically; if several, prepare_booking will list them and ask.
- `equipment_type` (string): The equipment for the site (e.g. 'small tent', 'van', or an id from list_equipment_types). Use the same equipment you searched with. Defaults to a small tent. Not needed for accommodations.
- `itinerary` (array): For a Backcountry trip: one entry per night (a zone for a date range), in order. Requires product_id and campground_id (the facility). The trip spans the first arrival to the last departure.
- `product_id` (string): For a Day Use booking (shuttle, parking, guided event) OR a Backcountry trip: the product id from search_day_use / search_backcountry (its productId). For Day Use, site_id is the time slot. For Backc…
- `seniors` (integer): Seniors 65+.
- `site_id` (string): The chosen site/slot id (from search). Omit for a Backcountry trip (use itinerary).
- `start_date` (string): Arrival date, YYYY-MM-DD. Omit for Backcountry (taken from the itinerary).
- `youth` (integer): Youth 6-17.

### `get_reservation_policies` (~219 tokens)

Parks Canada reservation policies

Look up Parks Canada's reservation rules in plain language: the non-refundable reservation fee, change/cancellation deadlines and refunds, check-in times, no-show rules, and the fact that park entry is NOT included. Call this whenever the citizen asks 'what if I cancel?', 'is there a fee?', 'when can I check in?', 'can I get a refund?', or any rules question — and proactively when you're about to prepare a booking so they confirm with the terms in front of them. Pass `family` to focus on one kind of trip (frontcountry campsite, accommodation, group, dayUse, backcountry); omit it for the full briefing across all families. This reads nothing about the citizen and books nothing.

Input parameters:

- `family` (string): Narrow to one trip type: 'frontcountry' (drive-up campsites), 'accommodation' (oTENTik/cabin/yurt), 'group', 'dayUse' (shuttles, parking, guided), or 'backcountry'. Omit for all of them.

### `create_alert` (~145 tokens)

Set a cancellation alert

Preview a local cancellation watch and ask the citizen to approve the exact dates, party, accessibility filter, and notification destination through the MCP host. Acceptance saves the watch and, for notify_target='auto', sends a test message. It checks only while the assistant is connected and never books.

Input parameters:

- `accessible_only` (boolean)
- `campground_id` (string, required)
- `end_date` (string, required)
- `equipment_type` (string)
- `nights` (integer)
- `notify_target` (string)
- `party_size` (integer, required)
- `recreation_area_id` (string)
- `start_date` (string, required)
- `weekends_only` (boolean)

### `list_alerts` (~6 tokens)

List your cancellation alerts

### `delete_alert` (~36 tokens)

Delete a cancellation alert

Preview deletion of a saved watch and ask the citizen to approve that exact deletion through the MCP host.

Input parameters:

- `alert_id` (string, required)

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/jcrossman-open-state-camping/open-state-camping#diagnostics

## Score history

- 2026-08-04: 65
- 2026-08-03: 75
- 2026-08-02: 75
- 2026-08-01: 60
- 2026-07-31: 60

## Links

- npm package: https://www.npmjs.com/package/@open-state/camping
- Socket report: https://socket.dev/npm/package/@open-state/camping
- Repository: https://github.com/JCrossman/can-fed-camp-mcp
- Changelog RSS feed: https://verifymcp.io/servers/jcrossman-open-state-camping/open-state-camping/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/jcrossman-open-state-camping/open-state-camping/changelog.json
- HTML version of this page: https://verifymcp.io/servers/jcrossman-open-state-camping/open-state-camping
