Skip to main content
Glama
README.md
# Campspot MCP

**First MCP server for the [Campspot](https://software.campspot.com) Online Booking API.** Talk to your campground's reservations, sites, and rate plans from Claude, Cursor, or any MCP client.

## Who is this for?

Campspot is the leading online booking platform for private campgrounds — nearly 2,000 parks and 200,000+ campsites listed on the Campspot Marketplace. Independent campground owners run their day-to-day business in Campspot: setting up sites, adjusting rate plans, watching availability, confirming reservations. This MCP exposes that surface to AI agents so a manager can ask "what's arriving this weekend and what sites are still open for July 4?" and get a real answer instead of a dashboard tour.

## Install

```bash
pip install -e .
```

## Configure

Request a per-park API key from the Campspot support team (activation is a one-time access fee plus the standard partner authentication flow — see https://support.campspot.com/online-booking-api).

```bash
export CAMPSPOT_API_KEY="your-campspot-api-key"
# Optional: override if you are using a sandbox or per-park base URL
# export CAMPSPOT_BASE_URL="https://api.campspot.com"
```

## Use with Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "campspot_mcp": {
      "command": "campspot_mcp",
      "env": {
        "CAMPSPOT_API_KEY": "your-campspot-api-key"
      }
    }
  }
}
```

## Use with Claude Code

```bash
claude mcp add campspot_mcp -- campspot_mcp --env CAMPSPOT_API_KEY=your-key
```

## Tools

| Tool | What it does |
| --- | --- |
| `health_check` | Verifies credentials by hitting `/park`. If this fails, all other tools will too. |
| `get_park_info` | Returns metadata about the configured park (name, timezone, contact, address). |
| `list_sites` | Paginated list of campsites at the park. Optional `limit` and `offset`. |
| `get_site` | Single campsite by id (name, type, capacity, rates). |
| `search_availability` | Find sites available across a date range. Optional `site_ids` to scope. |
| `list_reservations` | List reservations filtered by arrival date range and status. |
| `get_reservation` | Single reservation by id. |
| `list_rates` | List rate plans effective during an optional date range. |

## Example session

```
You:    "What's arriving at our park next weekend, and which sites are still open for July 4?"
Claude: *calls list_reservations(start_date="2026-07-04", end_date="2026-07-06") and search_availability(start_date="2026-07-04", end_date="2026-07-07"), summarises the results*

You:    "Pull up reservation 9384."
Claude: *calls get_reservation(9384), shows the guest details*
```

## Engineering

- Shared `httpx.AsyncClient` with connection pooling + transport retries (encode/httpx pattern).
- Typed exception hierarchy (`CampspotAuthError`, `CampspotNotFoundError`, `CampspotRateLimitError`, `CampspotAPIError`, `CampspotConnectionError`) with structured fields (`http_status`, `request_id`, `retry_after`).
- Application-level retry with exponential backoff + full jitter on 429/5xx, honoring `Retry-After`.
- **isError-compliance**: tools raise bare exceptions so FastMCP sets `isError=true` on the wire. AI agents can distinguish failure from data (Blackwell Systems audit, 54 MCPs / 20 bugs).
- JSONL audit log per tool call to stderr (or `CAMPSPOT_AUDIT_LOG` file) — fail-open, secrets redacted, strings truncated to 256 chars.
- py.typed marker (PEP 561). mypy --strict clean. ruff full rule set clean.

## Development

```bash
pip install -e ".[dev]"
pytest                       # 23 tests, no live API required (respx mocks)
ruff check src tests         # lint
mypy src                     # strict type-check
CAMPSPOT_API_KEY=... campspot_mcp
```

## License

MIT.

## See also

- [Model Context Protocol spec](https://modelcontextprotocol.io)
- [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk)
- [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers)
- [Other vertical MCPs by sanjibani](https://github.com/sanjibani?q=-mcp)
- [Custom MCP engagements](https://sanjibani.github.io/mcp-services/)

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct resource and action: park info, individual reservation, individual site, health check, rate plans, list reservations, list sites, and availability search. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., get_park_info, list_reservations, search_availability) using lowercase with underscores. No mixed conventions or vague verbs.

Tool Count5/5

8 tools is well-scoped for a campsite management server. It covers essential operations without being overly numerous or sparse.

Completeness4/5

The tool set covers core read operations and availability search. Missing write operations (e.g., create reservation) but this is likely intentional for a query-focused server.

Maintenance

ActivityStale
ResponsivenessNo issues