Developer Guide

MCP Server

Connect AI agents (Claude, Cursor, or custom integrations) to Call Camp Studio via the Model Context Protocol. The MCP server provides 12 tools and 7 resources for managing campaigns, records, calls, and analytics.

Overview

The Call Camp Studio MCP server implements the Model Context Protocol specification, enabling AI assistants to securely interact with your campaign data. All operations are scoped to the authenticated user's client — meaning each API token sees only its own data.

12 Tools

Create records, initiate calls, manage call orders, and view transcripts.

7 Resources

Read campaign stats, outcomes, costs, and detailed record profiles.

Secure

Bearer token auth with role-based permissions and client data isolation.

Authentication & Access

The MCP server uses Bearer token authentication. Each token resolves to a specific User → Client → Role chain, which determines both data scope and available permissions.

1

Generate an API Token

Go to Profile → Security → Generate Token. Copy the token value — you will need it for the MCP configuration.

2

Configure your MCP client

Use the token in the Authorization: Bearer <token> header.

3

Data scope

All data queries are automatically filtered to the client associated with your user account. Master users can see cross-client data.

Connection Setup

MCP Endpoint: https://callcamp.ai/mcp

Claude Desktop

Claude Desktop only supports local stdio servers. Since our server is hosted over HTTP, you must use a bridge like mcp-remote or server-proxy to translate the protocol:

{
  "mcpServers": {
    "call-camp-studio": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://callcamp.ai/mcp",
        "--header", "Authorization: Bearer YOUR_API_TOKEN"
      ]
    }
  }
}

Do not use curl or http command: These tools cannot maintain the persistent JSON-RPC session required for tools and resources to function correctly.

Cursor / IDE

Add to your .cursor/mcp.json or equivalent MCP config:

{
  "mcpServers": {
    "call-camp-studio": {
      "url": "https://callcamp.ai/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}
Cursor natively supports HTTP MCP servers, so a bridge is not required there.

Tools Reference

Tools are actions that can create, update, or read data. Each tool returns a JSON text response.

Record Tools

TOOLlist-records

List and search records for the current client. Supports pagination and filtering.

ParameterTypeRequiredDescription
searchstringNoSearch by name, email, or phone number
statusstringNoFilter: active, inactive, archived
recordTypeUuidstringNoFilter by record type UUID
pagenumberNoPage number (default: 1)
limitnumberNoResults per page (max 100)
TOOLget-record

Get a single record by UUID with its type and related counts.

ParameterTypeRequiredDescription
uuidstringYesUUID of the record
TOOLcreate-record

Create a new record (contact) for the current client.

ParameterTypeRequiredDescription
namestringYesFull name
phoneNumberstringYesInternational format (e.g., +1234567890)
recordTypeUuidstringYesUUID of the record type
emailstringNoEmail address
firstNamestringNoFirst name
lastNamestringNoLast name
countrystringNoCountry code (e.g., US, AE)
parametersobjectNoCustom key-value parameters
TOOLupdate-record

Update an existing record by UUID.

ParameterTypeRequiredDescription
uuidstringYesUUID of the record to update
namestringNoUpdated full name
emailstringNoUpdated email
phoneNumberstringNoUpdated phone number
statusstringNoUpdated status
firstNamestringNoUpdated first name
lastNamestringNoUpdated last name
parametersobjectNoUpdated custom parameters

Call Order Tools

TOOLlist-call-orders

List call orders for the current client with optional filtering.

ParameterTypeRequiredDescription
campaignUuidstringNoFilter by campaign UUID
recordUuidstringNoFilter by record UUID
statusstringNoFilter: planned, busy, contacted, canceled, do_not_call, rescheduled, failed
pagenumberNoPage number (default: 1)
limitnumberNoResults per page (max 100)
TOOLcreate-call-order

Create a call order — assigns a record to a campaign for calling.

ParameterTypeRequiredDescription
recordUuidstringYesUUID of the record to call
campaignUuidstringYesUUID of the campaign
callTypestringNoCall type: phone_out, phone_in, web
scheduledTimestringNoISO-8601 scheduled time
instructionsstringNoSpecial instructions
TOOLupdate-call-order-status

Update the status of a call order.

ParameterTypeRequiredDescription
uuidstringYesUUID of the call order
statusstringYesNew status: planned, busy, contacted, canceled, do_not_call, rescheduled, failed

Call Tools

TOOLinitiate-callcalls.manage

Initiate an outbound phone call for a call order. Validates balance, campaign status, and phone number before calling.

ParameterTypeRequiredDescription
callOrderUuidstringYesUUID of the call order
TOOLget-call-detailscalls.view

Get full call details including campaign, record, outcomes, and cost breakdown.

ParameterTypeRequiredDescription
callUuidstringYesUUID of the call
TOOLget-call-recordingcalls.view

Get the recording URL for a completed call (MP3 format).

ParameterTypeRequiredDescription
callUuidstringYesUUID of the call
TOOLget-call-transcriptcalls.view

Get the full transcript of a call with role labels and call summary.

ParameterTypeRequiredDescription
callUuidstringYesUUID of the call
TOOLget-call-outcomescalls.view

Get all AI-extracted outcomes from a specific call.

ParameterTypeRequiredDescription
callUuidstringYesUUID of the call

Resources Reference

Resources provide read-only analytical data. AI agents can read these to understand campaign performance before taking action.

RESOURCEcampaign-stats-list
URI:studio://campaigns/stats

Aggregated performance statistics for all client campaigns.

Response data:

Total calls, answered rate, avg duration, total cost, calls by end reason, orders by status — per campaign.

RESOURCEcampaign-stats-single
URI:studio://campaigns/{uuid}/stats

Detailed performance statistics for a specific campaign.

Response data:

Same as above, scoped to a single campaign UUID.

RESOURCEcampaign-outcomes
URI:studio://campaigns/{uuid}/outcomes

Aggregated outcome summary for a specific campaign, grouped by outcome name.

Response data:

Outcome counts and collected values grouped by AssistantOutcome name.

RESOURCErecord-outcomes
URI:studio://records/{uuid}/outcomes

Outcome summary for a specific record across all its campaigns.

Response data:

Outcome counts and values with campaign attribution.

RESOURCErecord-details
URI:studio://records/{uuid}

Full details of a record including call history, outcomes, and notes.

Response data:

Record fields, call orders with calls (status, duration, summary), latest 20 notes.

RESOURCEcampaign-cost
URI:studio://campaigns/{uuid}/cost

Cost breakdown for a specific campaign.

Response data:

Operational cost, phone cost, total price, margin, and currency.

RESOURCEtotal-cost
URI:studio://costs/total

Total cost across all campaigns for the current client.

Response data:

Aggregated costs with per-campaign breakdown.

Error Handling

When a tool encounters an error, it returns a response with isError: true and a human-readable error message. The MCP connection itself remains active.

// Error response format
{
  "isError": true,
  "content": [{
    "type": "text",
    "text": "Record not found or access denied"
  }]
}

// Common error scenarios:
// - Invalid/expired token → HTTP 401 (handled via bridge/client)
// - No client association → HTTP 403
// - Missing permission → "Forbidden: Missing required permission [calls.manage]"
// - Record not found → "Record not found or access denied"
// - Insufficient balance → "Insufficient client balance to initiate calls"

Permissions

Some tools require specific permissions based on the user's role. Admin users have all permissions automatically.

ToolRequired Permission
initiate-callcalls.manage
get-call-detailscalls.view
get-call-recordingcalls.view
get-call-transcriptcalls.view
get-call-outcomescalls.view
All other tools (records, call orders) use implicit token-based access — any valid token belonging to a user with an associated client can access them.