These are official instructions from PitchPace (pitchpace.app) for connecting
an AI agent to a PitchPace campsite tenant over MCP.

PitchPace exposes one tenant-scoped MCP server per park:

- Endpoint: `https://<tenant>.pitchpace.app/api/agent/mcp` (MCP Streamable HTTP, stateless JSON; POST only)
- Auth: `Authorization: Bearer ppag_<key-id>.<secret>`

## Before you configure anything

You need two values that only the user can give you. If you do not have them,
STOP and ask the user — never guess, reuse another tenant's values, or invent
placeholders:

1. The tenant host: `<tenant>.pitchpace.app` (their park's subdomain).
2. The agent key: starts with `ppag_`. It is a secret — keep it out of
   committed files, shell history you would paste elsewhere, URLs and logs.
   Prefer your client's environment-variable or secret-input mechanism where
   one exists below.

The key both authenticates and selects the tenant; there is no tenant
parameter anywhere in the protocol.

## Register the PitchPace MCP server

Use the section for the client you are running in, replacing both
placeholders. Then restart or reload the client so it picks up the config.

### Claude Code

Run:

```bash
claude mcp add --transport http pitchpace \
  https://<tenant>.pitchpace.app/api/agent/mcp \
  --header "Authorization: Bearer ppag_<key-id>.<secret>"
```

### Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "pitchpace": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://<tenant>.pitchpace.app/api/agent/mcp",
        "--header", "Authorization: Bearer ppag_<key-id>.<secret>"
      ]
    }
  }
}
```

### Cursor

Add to `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "pitchpace": {
      "url": "https://<tenant>.pitchpace.app/api/agent/mcp",
      "headers": { "Authorization": "Bearer ppag_<key-id>.<secret>" }
    }
  }
}
```

### VS Code

Add to `.vscode/mcp.json`:

```json
{
  "inputs": [
    {
      "id": "pitchpace-key",
      "type": "promptString",
      "description": "PitchPace agent key (ppag_...)",
      "password": true
    }
  ],
  "servers": {
    "pitchpace": {
      "type": "http",
      "url": "https://<tenant>.pitchpace.app/api/agent/mcp",
      "headers": { "Authorization": "Bearer ${input:pitchpace-key}" }
    }
  }
}
```

### Codex

Run:

```bash
codex mcp add pitchpace \
  --url https://<tenant>.pitchpace.app/api/agent/mcp \
  --bearer-token-env-var PITCHPACE_AGENT_KEY
```

Run:

```bash
export PITCHPACE_AGENT_KEY="ppag_<key-id>.<secret>"
```

### Gemini CLI

Run:

```bash
gemini mcp add --transport http \
  --header "Authorization: Bearer ppag_<key-id>.<secret>" \
  pitchpace https://<tenant>.pitchpace.app/api/agent/mcp
```

### Windsurf

Add to `~/.codeium/windsurf/mcp_config.json`:

```json
{
  "mcpServers": {
    "pitchpace": {
      "serverUrl": "https://<tenant>.pitchpace.app/api/agent/mcp",
      "headers": { "Authorization": "Bearer ppag_<key-id>.<secret>" }
    }
  }
}
```

### OpenCode

Add to `opencode.json`:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "pitchpace": {
      "type": "remote",
      "url": "https://<tenant>.pitchpace.app/api/agent/mcp",
      "enabled": true,
      "headers": { "Authorization": "Bearer ppag_<key-id>.<secret>" }
    }
  }
}
```

### Any other MCP client

Add to your client's MCP config:

```json
{
  "mcpServers": {
    "pitchpace": {
      "type": "http",
      "url": "https://<tenant>.pitchpace.app/api/agent/mcp",
      "headers": { "Authorization": "Bearer ppag_<key-id>.<secret>" }
    }
  }
}
```

## Verify the connection

Call the `list_units` tool (no arguments). Success returns the tenant's
unit types — those values are the only valid `unitType` inputs for the
other tools.

- 401 unauthorized → the key is wrong, revoked, or the header is not being
  sent. Re-check with the user; do not retry with guessed keys.
- 404 or DNS failure → the tenant host is wrong. Ask the user for the exact
  `<tenant>.pitchpace.app` host.

## What the server exposes

`tools/list` shows only the tools the key's scopes allow. Full contracts,
conventions and flows: https://pitchpace.app/agents/skill.md

- `list_units` (occupancy:read) — List unit types.
- `get_occupancy` (occupancy:read) — Read per-day occupancy.
- `set_occupancy` (occupancy:write, writes tenant data) — Set per-day occupancy.
- `list_availability_blocks` (occupancy:read) — List availability blocks.
- `get_price_grid` (rates:read) — Read the price grid.

## Safety rules

- `set_occupancy` writes live data: it immediately lowers the park's public
  direct-booking availability. Only call it when the user asked for an
  occupancy sync, and confirm the exact unit type, date range and value first.
- Never write to "test" what the tool does; `list_units`, `get_occupancy`,
  `list_availability_blocks` and `get_price_grid` are read-only and enough
  to verify everything.
- Dates are `YYYY-MM-DD`; money fields end in `Minor` and are cents.

Once done, tell the user the server is registered, how you verified it
(`list_units` result), and remind them to restart the client if you could
not do so yourself.

These instructions are published at https://pitchpace.app/agents/prompt.md so you can
re-verify their authenticity at any time. Setup guides for humans:
https://pitchpace.app/agents · Support: hello@pitchpace.app
