> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pickupbell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP tools

> Every PickupBell MCP tool, its input schema, and the scope it requires.

All 35 tools run through the same service layer as the REST API. Every input is JSON Schema validated; outputs are JSON-scrubbed per the caller's scope.

## Locations

### `list_locations`

List locations this API key can access (usually just one — keys are location-scoped).

**Scope:** `locations:read`
**Input:** `{}`

### `get_location`

Fetch a location by UUID or slug.

**Scope:** `locations:read`
**Input:** `{ id: string }`

### `update_location`

Update mutable location fields.

**Scope:** `locations:write`
**Input:** `{ id: string, name?, legal_name?, industry?, timezone?, website_url?, owner_cell?, service_areas?, zip_codes?, travel_radius_miles? }`

## Members

### `list_members`

List location members. Emails/phones masked when read over API.

**Scope:** `members:read`
**Input:** `{ location_id: string }`

### `list_api_keys`

List API keys issued for this location (prefix + scopes only — never secrets).

**Scope:** `api_keys:read`
**Input:** `{ location_id }`

## Agent configuration

### `get_agent_config`

Voice, greetings, personality sliders, emergency keywords, compliance guardrails.

**Scope:** `agent:read`
**Input:** `{ location_id }`

### `update_agent_config`

Update any subset.

**Scope:** `agent:write`
**Input:** `{ location_id, voice_id?, voice_name?, greeting_primary?, greeting_after_hours?, greeting_emergency?, greeting_voicemail?, greeting_cant_help?, personality_* (0..1)?, emergency_keywords?, vulnerable_signals?, transfer_number?, transfer_ring_seconds?, ai_self_id?, two_party_consent?, pricebook_lock?, no_pii_collection?, profanity_filter? }`

### `list_business_hours`

7-day weekly hours.

**Scope:** `agent:read`
**Input:** `{ location_id }`

### `update_business_hours`

Replace the whole week in one call.

**Scope:** `agent:write`
**Input:** `{ location_id, hours: [{ day_of_week (0..6), is_open, open_time?, close_time? }] }`

### `get_call_forwarding`

How calls route to the AI.

**Scope:** `agent:read`
**Input:** `{ location_id }`

### `update_call_forwarding`

Change routing mode.

**Scope:** `agent:write`
**Input:** `{ location_id, mode?: "replace"|"forward_all"|"forward_busy"|"forward_hours", existing_business_line? }`

## FAQs & pricebook

### `list_faqs` · `add_faq` · `update_faq` · `delete_faq`

CRUD on what the AI quotes. All require `location_id`.

**Scopes:** `faqs:read` / `faqs:write`

### `list_pricebook` · `add_pricebook_item`

Pricebook items (service names with prices/ranges).

**Scopes:** `faqs:read` / `faqs:write`

## Calls

### `list_calls`

Recent calls. Phones masked; transcripts/recordings gated by scope.

**Scope:** `calls:read` · optional `transcripts:read` · optional `recordings:read`
**Input:** `{ location_id, outcome?, emergency?, since?, limit? }`

### `get_call`

Single call detail. Same scrubbing.

**Scope:** `calls:read` (+ transcripts/recordings as above)
**Input:** `{ location_id, call_id }`

## Leads

### `list_leads` · `create_lead` · `update_lead`

Pipeline operations.

**Scopes:** `leads:read` / `leads:write`

## Bookings

### `list_bookings` · `create_booking`

Appointments.

**Scopes:** `bookings:read` / `bookings:write`

## Insights

### `get_insights_summary`

Rolled-up metrics over the last N days.

**Scope:** `insights:read`
**Input:** `{ location_id, days?: 1..90 }`

## Notifications

### `get_notification_settings` · `update_notification_settings` · `list_notification_log`

**Scopes:** `agent:read` / `agent:write`

## Billing (read-only)

### `get_subscription`

Subscription state. Upstream billing IDs omitted.

**Scope:** `locations:read`
**Input:** `{ location_id }`

## Integrations

### `list_integration_catalog`

Static catalog of every integration PickupBell knows about.

**No scope required.**

### `list_integrations`

Connected integrations for the location.

**Scope:** `locations:read`

### `connect_webhook_integration`

Attach a Slack / Zapier / Make / n8n / Cal.com by URL.

**Scope:** `locations:write`
**Input:** `{ location_id, provider, webhook_url, label? }`

### `disconnect_integration`

Disconnect a provider.

**Scope:** `locations:write`
**Input:** `{ location_id, provider }`
