Skip to content

MCP server

Rindee runs a Model Context Protocol server, so an AI assistant can read your calls, contacts and appointments, and manage contacts and appointments, on your behalf.

https://api.rindee.ai/mcp

It uses the Streamable HTTP transport and accepts two kinds of credential: a user signing in with their Rindee account (OAuth), or a regular API key. Either way it is available on the plans that include API access (Business and above).

ChatGPT and Claude connect this way: add https://api.rindee.ai/mcp as a custom connector, and the client discovers everything else. The user signs in, picks the organization, decides whether the assistant may make changes, and is returned to the client. Connections are listed, and can be disconnected, under Integrations → Connected apps in the app.

Claude — Settings → Connectors → Add custom connector: enter a name and https://api.rindee.ai/mcp, then Continue. Claude detects the right options, so keep them: Sign in now, Use Claude’s published identity, and (under Advanced) Streamable HTTP. Select Add, then Connect to sign in to Rindee.

For client developers, Rindee follows the MCP authorization spec:

  • A 401 from /mcp carries WWW-Authenticate: Bearer resource_metadata="https://api.rindee.ai/.well-known/oauth-protected-resource/mcp".
  • Authorization server metadata is at https://api.rindee.ai/.well-known/oauth-authorization-server (issuer https://api.rindee.ai).
  • Authorization code with PKCE (S256 only). The authorization response includes iss.
  • Clients identify themselves with a Client ID Metadata Document (an HTTPS URL as client_id), or register through Dynamic Client Registration at /register. Public clients use token_endpoint_auth_method none with PKCE. A client whose metadata document asks for private_key_jwt and publishes an HTTPS jwks_uri may sign its /token and /revoke requests (RFC 7523). A signed request is verified strictly: RS256, iss and sub equal to the client_id, aud the issuer or the endpoint, exp at most an hour ahead, and a jti used once — any failure is invalid_client. An unsigned request is handled as a public client.
  • Send resource=https://api.rindee.ai/mcp. Tokens are issued for that resource only, and any other value is refused with invalid_target.
  • Scopes: read, and operate for the tools that change data. operate is granted only when the user allows changes and their own role can make changes.
  • Access tokens last one hour. Refresh tokens rotate on every use, and reusing an old one disconnects the client. A connection needs a new sign-in after 30 days without use, or 90 days after it was made.
  • /revoke disconnects the client.

What a signed-in assistant can do is always capped by the user who connected it: if their role changes or they leave the organization, the assistant’s access follows.

Any MCP client that can send an Authorization header works.

Claude Code

Terminal window
claude mcp add --transport http rindee https://api.rindee.ai/mcp \
--header "Authorization: Bearer rk_live_your_key_here"

JSON configuration (.mcp.json and clients that use the same format)

{
"mcpServers": {
"rindee": {
"type": "http",
"url": "https://api.rindee.ai/mcp",
"headers": {
"Authorization": "Bearer rk_live_your_key_here"
}
}
}
}

Create a dedicated key for each assistant you connect, so you can revoke one without affecting your other integrations.

Every tool performs one API request as the caller, so it can do exactly what that key or signed-in connection can do over the REST API: the same capabilities, plan limits and rate limits apply, and it only ever sees your organization’s data.

Area Read Change
Agents list_agents, get_agent, list_agent_flows create_agent, update_agent
Agent tools list_agent_tools, list_agent_tool_kinds create_agent_tool, update_agent_tool, delete_agent_tool
Calls list_calls, get_call (with transcript) —
Contacts list_contacts, get_contact, list_contact_tags create_contact, update_contact, delete_contact
Segments list_segments, list_segment_fields, preview_segment create_segment, update_segment, delete_segment, count_segment_contacts
Appointments list_appointments, get_appointment create_appointment, update_appointment, delete_appointment
Branches, services, staff list_branches, list_services, list_staff_members create_/update_/delete_branch, _service, _staff_member
Time off list_time_off create_time_off, update_time_off, delete_time_off
Campaigns list_campaigns, get_campaign, get_campaign_metrics, list_campaign_batches pause_campaign, resume_campaign (drip); pause_campaign_batch, resume_campaign_batch (bulk)
Numbers and providers list_phone_numbers, list_ai_providers —
Reporting get_analytics, list_activity —
Account get_balance, get_plan_status —

Each tool is generated from the REST route it calls: its arguments are that route’s parameters and body, and its description is the route’s description in the API reference. The tools that change data need the operate capability: a key with it, or a signed-in connection granted the operate scope. Without it the assistant sees only the read tools, so it can answer questions about your account but change nothing over MCP. Tools that overwrite, delete or start calls carry destructiveHint; resuming a campaign or batch starts calling again.

Nothing over MCP places calls, starts campaigns or batches, deletes agents, sets an agent’s voice or speech settings (studio, s2s — the agent tools leave them out), requests phone numbers, spends balance, connects AI-provider keys, or changes billing, API keys, webhooks, members or settings. Use the API reference or the app for those.

Response Meaning
401 The Authorization header is missing, or the key or access token is invalid, expired or revoked.
402 The organization’s plan does not include API access.
429 More than 240 MCP requests in a minute for your organization. Retry after the Retry-After header.

A tool that fails (for example, an appointment time that is not available, or a contact that does not exist) returns a tool error carrying the API’s HTTP status and message, which the assistant can read and act on.