Audact MCP server — client setup guide
Connect AI assistants to Audact using the Model Context Protocol. Manage agents, webhooks, calls, and compliance with 161 curated tools.
What is it? The Audact MCP (Model Context Protocol) server exposes a curated set of Audact operations as tools for AI assistants—Claude, Cursor, Claude Desktop, or any MCP-compatible client—over a simple HTTP interface. Connect with your tenant API key and inspect calls, manage agents and webhooks, build compliance automations, and control voice operations.
Tools available: 161 across all roles
Endpoints:
- Production:
https://api.audact.ai/mcp/
1. What It Is
The MCP server is a stateless, HTTP endpoint that translates tool calls into Audact REST API operations. It runs over Streamable HTTP (the MCP standard for server-to-client and client-to-server JSON-RPC), requires only your API key for authentication (Bearer token), and enforces the exact same permissions and isolation as the REST API itself.
Why MCP?
- One-line setup: No handwritten integrations or custom bridges.
- Real-time context: Your AI assistant has live access to agents, webhooks, numbers, calls, and evidence.
- Permission-safe: Every tool call is forwarded with your key—an assistant can only do what your key role allows.
- No secrets held: The MCP server holds no credentials and creates no new security surface; it forwards your key byte-for-byte to the underlying API.
Transport & Protocol
- Protocol: Model Context Protocol (MCP), version 2025-06-18 (backward compatible with 2025-03-26).
- Transport: Streamable HTTP POST to
/mcp/on your environment's base URL. - Content: JSON-RPC 2.0 requests and responses.
- Authentication:
Authorization: Bearer aud_live_…(your tenant API key, same one you use for REST). - Stateless: No sessions, no cookies. Every request is independent; any replica can serve it.
What OAuth Means Here
OAuth is not supported. MCP clients that require OAuth with remote servers cannot connect. Supported clients (Claude Code, Cursor, Claude Desktop via mcp-remote, MCP SDKs) all pass headers directly:
- ✅ Claude Code, Cursor, Claude Desktop with
mcp-remote: works - ✅ MCP SDK clients with
--headeror env var: works - ✅ Custom MCP implementations that support Bearer tokens: works
- ❌ Clients that only support OAuth for remote servers: not supported in v1
2. Connect Your AI Assistant
Claude Code
bash
claude mcp add --transport http audact https://api.audact.ai/mcp/ \ --header "Authorization: Bearer aud_live_…"
Replace aud_live_… with your actual API key (see Getting Your Key below).
To verify: After adding, restart Claude Code and ask it: "List my agents." If it calls list_agents without error, it's connected.
Claude Desktop
Use mcp-remote to run the MCP server behind the local gateway:
bash
# In Claude Desktop's config file (~/.config/Claude/claude_desktop_config.json on Linux/Mac,
# or %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"audact": {
"command": "npx",
"args": ["mcp-remote", "https://api.audact.ai/mcp/"],
"env": {
"MCP_REMOTE_HEADER_Authorization": "Bearer aud_live_…"
}
}
}
}Restart Claude Desktop. The Audact tools should now appear in your Tools list.
Cursor
Same as Claude Desktop: add to Cursor's mcp_server_config.json:
json
{
"audact": {
"command": "npx",
"args": ["mcp-remote", "https://api.audact.ai/mcp/"],
"env": {
"MCP_REMOTE_HEADER_Authorization": "Bearer aud_live_…"
}
}
}3. Getting Your Key
- Log in to the Audact dashboard at your environment URL.
- Navigate to API Keys (or Settings → API Keys).
- Copy a key with the role you need (Viewer, Developer, or Owner; see Role Mapping below).
- Use it in the config above.
Keep your key secret. Treat it like a password. If exposed, revoke it immediately from the dashboard.
4. What You Can Do: Tools by Role
The MCP server exposes 161 tools in total, grouped by permission level and domain. A tool appears in your assistant's available tools only if your key has the required role. Even if you list a tool you don't have permission for, the backend will reject the call with a clear error.
Role Levels
- Viewer: Read-only access. Inspect calls, evidence, configurations, webhooks, and numbers.
- Developer: Read and write. Create/update agents, tools, webhooks, and assignments. No delete/purge.
- Owner: Full access, including delete and settings changes.
Tool Categories
Legend: R = read-only | D = destructive | C = requires confirmation (ask the user first, then retry with confirm: true)
Agents
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_agents | Viewer | ✓ | List all agents in your tenant | ||
get_agent | Viewer | ✓ | Fetch one agent by ID | ||
list_agent_tools | Viewer | ✓ | See which tools an agent can use | ||
create_agent | Developer | Create a new agent | |||
replace_agent | Developer | Replace an agent (full update) | |||
update_agent | Developer | Update an agent (partial update) | |||
duplicate_agent | Developer | Clone an existing agent | |||
attach_tool_to_agent | Developer | Add a tool to an agent's toolkit | |||
detach_tool_from_agent | Developer | ✓ | Remove a tool from an agent | ||
delete_agent | Owner | ✓ | Permanently delete an agent |
Tools
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_tools | Viewer | ✓ | List all custom tools | ||
get_tool | Viewer | ✓ | Fetch one tool by ID | ||
create_tool | Developer | Create a new tool | |||
replace_tool | Developer | Replace a tool (full update) | |||
update_tool | Developer | Update a tool (partial update) | |||
test_tool | Developer | Test a platform-supplied tool such as Cal.com (custom HTTP tools have no test) | |||
delete_tool | Owner | ✓ | Soft-delete a tool |
Knowledge Bases
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_knowledge_bases | Viewer | ✓ | List the tenant's knowledge bases | ||
get_knowledge_base | Viewer | ✓ | Fetch one knowledge base by ID | ||
create_knowledge_base | Developer | Create a knowledge base | |||
update_knowledge_base | Developer | Rename a knowledge base or toggle auto-refresh | |||
delete_knowledge_base | Owner | ✓ | Delete a knowledge base with all its sources and agent links | ||
list_kb_sources | Viewer | ✓ | List a knowledge base's sources and their ingestion status | ||
get_kb_source | Viewer | ✓ | Fetch one source | ||
add_kb_source | Developer | Add a URL or text source (file uploads are REST API only) | |||
update_kb_source | Developer | Change a source's title or, for text sources, its content | |||
reingest_kb_source | Developer | Re-crawl and re-index a source | |||
delete_kb_source | Owner | ✓ | Delete a source and its indexed content | ||
list_kb_agent_links | Viewer | ✓ | List the agents a knowledge base is attached to | ||
list_kb_links_by_agent | Viewer | ✓ | List the knowledge bases attached to an agent | ||
attach_knowledge_base_to_agent | Developer | Attach a knowledge base to an agent, with retrieval settings | |||
update_kb_agent_link | Developer | Tune retrieval settings (top_k, threshold, instruction) for a link | |||
detach_knowledge_base_from_agent | Developer | ✓ | Detach a knowledge base from an agent | ||
list_kb_exclusions | Viewer | ✓ | List crawl exclusion rules | ||
add_kb_exclusion | Developer | Exclude a path prefix or URL from crawling | |||
delete_kb_exclusion | Developer | ✓ | Remove a crawl exclusion rule | ||
test_kb_retrieval | Developer | ✓ | Ask a question and see which chunks retrieval returns |
Voices
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_voices | Viewer | ✓ | List available voices for agents | ||
get_voice | Viewer | ✓ | Fetch one voice by ID |
Integrations
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_connections | Viewer | ✓ | List external integrations (Slack, Zapier, etc.) | ||
get_connection | Viewer | ✓ | Fetch one integration by ID | ||
list_connection_event_types | Viewer | ✓ | See what events this integration emits | ||
create_connection | Developer | Add a new integration | |||
test_connection | Developer | Test an integration (dry-run) | |||
delete_connection | Developer | ✓ | Remove an integration |
Configurations
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_configurations | Viewer | ✓ | List all configurations | ||
get_configuration | Viewer | ✓ | Fetch one configuration by ID | ||
get_configuration_version | Viewer | ✓ | Fetch an earlier version of a configuration (what a call pinned to that version ran with) | ||
create_configuration | Developer | Create a new configuration | |||
update_configuration | Developer | Update a configuration | |||
delete_configuration | Owner | ✓ | Permanently delete a configuration |
Calls & Evidence
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_calls | Viewer | ✓ | Search calls in your tenant | ||
get_call_detail | Viewer | ✓ | Full call record, transcript, metadata, PII tokens | ||
get_call_summary | Viewer | ✓ | High-level summary of a call | ||
get_delivery_status | Viewer | ✓ | Check if a recording or transcript was delivered to webhooks | ||
get_chain | Viewer | ✓ | Fetch the hash chain proving a call's integrity | ||
verify_chain | Viewer | ✓ | Cryptographically verify a chain | ||
reconstruct_call | Viewer | ✓ | Rebuild a call from its evidence events | ||
list_violations | Viewer | ✓ | Compliance violations in a call | ||
list_compliance_events | Viewer | ✓ | Timestamped compliance records | ||
get_article50_report | Viewer | ✓ | EU AI Act Article 50 evidence report for a call (signed JSON) | ||
get_receipt | Viewer | ✓ | Compliance receipt for a call | ||
list_proofs | Viewer | ✓ | Metachain proofs for calls | ||
get_proof | Viewer | ✓ | Fetch one proof by ID | ||
get_call_recording | Viewer | ✓ | Get call recording URL (returns a signed download link) | ||
delete_call_recording | Owner | ✓ | ✓ | Permanently delete the call recording |
Webhooks
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_webhooks | Viewer | ✓ | List all webhook subscriptions | ||
get_webhook | Viewer | ✓ | Fetch one webhook by ID | ||
list_webhook_deliveries | Viewer | ✓ | See delivery history for a webhook | ||
list_webhook_event_types | Viewer | ✓ | What events can be subscribed to | ||
get_webhook_event_schema | Viewer | ✓ | JSON schema for an event | ||
get_webhook_secret_status | Viewer | ✓ | Check if a webhook secret is active | ||
create_webhook | Developer | Subscribe to events (e.g., call_ended) | |||
update_webhook | Developer | Modify a webhook URL or events | |||
test_webhook | Developer | Send a signed test event to the endpoint | |||
resend_webhook_delivery | Developer | Re-trigger a past delivery | |||
delete_webhook | Owner | ✓ | Unsubscribe from a webhook |
Phone Numbers
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_numbers | Viewer | ✓ | List all DIDs (phone numbers) | ||
lookup_number | Viewer | ✓ | Look up one DID by phone number or ID | ||
list_available_numbers | Viewer | ✓ | Find unassigned numbers | ||
list_number_orders | Viewer | ✓ | See history of number provisioning | ||
get_number_order | Viewer | ✓ | Fetch one order by ID | ||
set_number_trunk | Developer | Set phone number trunk | |||
assign_number | Developer | Assign a DID to an agent | |||
suspend_number | Developer | Temporarily disable a number | |||
resume_number | Developer | Re-enable a suspended number | |||
create_number | Developer | ✓ | ✓ | Add phone number (may incur cost) | |
create_number_order | Developer | ✓ | ✓ | Order phone numbers (spends money) | |
release_number | Developer | ✓ | ✓ | Release a number's assignment (may be lost permanently) | |
delete_number | Developer | ✓ | ✓ | Permanently remove a number from the pool |
Tenant, Keys & Session
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
get_tenant | Viewer | ✓ | Fetch your tenant's metadata | ||
get_tenant_usage | Viewer | ✓ | Usage and quota information | ||
list_keys | Developer | ✓ | List API keys | ||
update_tenant | Owner | ✓ | Update tenant settings | ||
rotate_webhook_secret | Owner | ✓ | Rotate webhook secret | ||
generate_key | Owner | ✓ | ✓ | Generate API key (secret returned once into this conversation) | |
revoke_key | Owner | ✓ | ✓ | Revoke API key immediately | |
exchange_key | Viewer | ✓ | ✓ | Exchange API key for session token (into this conversation) | |
create_ws_ticket | Viewer | Create WebSocket ticket |
BYO Telephony (Bring Your Own)
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
get_byo_config | Viewer | ✓ | Get BYO telephony config | ||
list_byo_connections | Viewer | ✓ | List BYO SIP connections | ||
get_byo_connection | Viewer | ✓ | Get BYO SIP connection | ||
verify_byo_connection | Developer | Verify BYO SIP connection | |||
create_byo_connection | Owner | Create BYO SIP connection | |||
update_byo_connection | Owner | ✓ | Update BYO SIP connection | ||
delete_byo_connection | Owner | ✓ | ✓ | Delete BYO SIP connection (calls over it stop) |
KYC (Know Your Customer)
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_kyc_requirements | Viewer | ✓ | List KYC requirements | ||
list_kyc_document_sets | Viewer | ✓ | List KYC document sets | ||
get_kyc_document_set | Viewer | ✓ | Get KYC document set | ||
list_kyc_documents | Viewer | ✓ | List KYC documents | ||
get_kyc_document | Viewer | ✓ | Get KYC document | ||
create_kyc_document_set | Owner | Create KYC document set | |||
upload_kyc_document | Owner | Upload KYC document (see Uploading KYC documents) | |||
replace_kyc_document | Owner | Replace KYC document | |||
delete_kyc_document | Owner | ✓ | ✓ | Delete KYC document (permanently deletes regulatory record) | |
delete_kyc_document_set | Owner | ✓ | ✓ | Delete KYC document set | |
rotate_kyc_dek | Owner | ✓ | ✓ | Rotate KYC encryption key |
PII Vault
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
pii_get_settings | Viewer | ✓ | Get PII vault configuration | ||
pii_list_exemptions | Viewer | ✓ | Numbers exempt from encryption | ||
pii_list_shreds | Viewer | ✓ | Shred (permanent delete) audit log | ||
pii_list_erased_keysets | Viewer | ✓ | Keys no longer in use | ||
pii_decrypt_call | Viewer | Decrypt call PII (returns plaintext PII — see Personal data) | |||
pii_list_call_identities | Viewer | ✓ | List call identities (returns plaintext PII — see Personal data) | ||
pii_link_call_identity | Developer | Link call identity | |||
pii_shred_call | Owner | ✓ | ✓ | Shred call PII (irreversibly erases personal data — GDPR erasure) | |
pii_shred_by_hash | Owner | ✓ | ✓ | Shred PII by hash (irreversibly erases everywhere — GDPR erasure) | |
pii_add_exemption | Owner | ✓ | ✓ | Add PII exemption (exempts an identifier from encryption) | |
pii_delete_exemption | Owner | ✓ | ✓ | Delete PII exemption | |
pii_delete_exemption_by_path | Owner | ✓ | ✓ | Delete PII exemption by path | |
pii_put_settings | Owner | ✓ | ✓ | Update PII vault settings (turns tenant-wide encryption on/off) |
Calls (SIP) — Live Call Management
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
get_call_status | Viewer | ✓ | Get call status | ||
initiate_inbound_call | Developer | ✓ | ✓ | Start inbound call (starts a live inbound call room) | |
initiate_outbound_call | Developer | ✓ | ✓ | Start outbound call (places a real phone call — costs money, rings a real person) | |
create_browser_call | Developer | ✓ | ✓ | Start browser test call (starts a live test call and dispatches AI agent — costs agent minutes) | |
hangup_call | Developer | ✓ | ✓ | Hang up call (ends a live call immediately) |
Transfers & Handovers
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
get_transfer_state | Viewer | ✓ | Get transfer state | ||
get_handover | Developer | ✓ | Get handover info | ||
initiate_transfer | Developer | ✓ | ✓ | Transfer call (transfers a live call to another party) | |
initiate_handover | Developer | ✓ | ✓ | Hand over call to human | |
bridge_transfer | Developer | ✓ | ✓ | Bridge transfer (connects the caller to the transfer target) | |
cancel_transfer | Developer | ✓ | ✓ | Cancel transfer (cancels an in-progress live transfer) | |
end_transfer | Developer | ✓ | ✓ | End transfer |
SIP Routing
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
list_trunks | Viewer | ✓ | List SIP trunks | ||
list_dispatch_rules | Viewer | ✓ | List dispatch rules | ||
create_dispatch_rule | Developer | ✓ | ✓ | Create dispatch rule (changes how inbound calls are routed) | |
create_inbound_trunk | Owner | ✓ | ✓ | Create inbound SIP trunk (creates a SIP trunk that carries real calls) | |
create_outbound_trunk | Owner | ✓ | ✓ | Create outbound SIP trunk (creates a SIP trunk that carries real calls) | |
get_admission_url | Viewer | ✓ | Get admission URL | ||
set_admission_url | Developer | ✓ | ✓ | Set admission URL (changes the URL Audact calls before connecting every inbound call) |
Compliance Runtime API
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
validate_text | Developer | Validate text against policy | |||
validate_audio | Developer | Validate audio (up to ~11 MiB; see Limits) | |||
reconcile_audio | Developer | Reconcile audio (up to ~11 MiB; see Limits) | |||
evaluate_policy | Viewer | Evaluate policy | |||
get_policy | Viewer | ✓ | Get policy | ||
confirm_delivery | Developer | Confirm delivery | |||
reconcile_transcript | Developer | Reconcile transcript | |||
generate_c2pa_manifest | Developer | Generate C2PA manifest | |||
list_c2pa_manifests | Viewer | ✓ | List the C2PA manifests issued for a call | ||
create_event | Developer | ✓ | ✓ | Create evidence event (appends a permanent, tamper-evident event to the evidence chain) | |
trigger_aggregation | Owner | Trigger aggregation |
LLM Proxy
| Tool | Role | R | D | C | What It Does |
|---|---|---|---|---|---|
proxy_openai | Developer | ✓ | ✓ | Proxy OpenAI request (makes a paid LLM call; see LLM proxy) |
5. Confirmation for Dangerous Actions
Some tools require explicit confirmation before they execute. These are operations that spend money, are irreversible, or affect security:
The 33 tools that require confirmation:
- Money-spending:
create_number,create_number_order,initiate_outbound_call - Irreversible deletes:
delete_kyc_document,delete_kyc_document_set,delete_call_recording,pii_shred_call,pii_shred_by_hash,pii_delete_exemption,pii_delete_exemption_by_path,revoke_key,release_number,delete_number,delete_byo_connection - Call control:
initiate_inbound_call,create_browser_call,hangup_call,initiate_transfer,initiate_handover,bridge_transfer,cancel_transfer,end_transfer - Configuration:
create_dispatch_rule,create_inbound_trunk,create_outbound_trunk,set_admission_url,rotate_kyc_dek,pii_add_exemption,pii_put_settings - Security:
generate_key,exchange_key,create_event,proxy_openai
How Confirmation Works
When a tool requires confirmation:
-
First call fails with
CONFIRMATION_REQUIRED:json
{ "isError": true, "content": [ { "type": "text", "text": "CONFIRMATION_REQUIRED: {consequence}. Ask the user explicitly, and then retry the same call with \"confirm\": true." } ] } -
The model asks the user: "This will {consequence}. Should I proceed?"
-
After user approval, the model retries with
confirm: true:json
{ "name": "create_number_order", "arguments": { "body": {"set_id": "11111111-2222-3333-4444-555555555555", "country_code": "NL", "number_type": "local"}, "confirm": true } }
Important: confirm is a safeguard against prompt injection, not a permission system. Your API key's role still determines whether you can call the tool. A confirm: true without the required role still gets rejected with a 403 error from the backend.
6. Uploading KYC Documents
KYC (Know Your Customer) document upload works through the MCP by converting the binary file to base64 in JSON.
Parameters
file_base64(required): The file content encoded in base64 (standard or URL-safe base64 are both accepted; invalid encoding → tool errorINVALID_FILE_ENCODING)file_name(required): Original filename (e.g.,"passport.pdf")file_content_type(optional): MIME type (e.g.,"application/pdf"). Omit if unknown.doc_type(required): Document type code accepted by the KYC backend (e.g.,"passport"or"proof_of_address")
Limits
- Decoded file size limit: 10 MiB. Larger files → tool error
FILE_TOO_LARGE. - Request size limit: 15 MiB for the whole
/mcp/request, which leaves room for a 10 MiB file as base64. - Tools without a file are capped at 1 MiB of arguments (
ARGUMENTS_TOO_LARGE), exceptvalidate_audioandreconcile_audio, which may use up to the 15 MiB request limit.
Example
json
{
"doc_type": "passport",
"file_base64": "JVBERi0xLjQKJeLjz9MNCjExIDAgb2JqCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUvQSsvQmFzZUZvbnQvVGltZXMtQm9sZD4+CmVuZG9iCmZv...",
"file_name": "my_passport.pdf",
"file_content_type": "application/pdf"
}To generate base64 from your file on the command line:
bash
base64 < my_passport.pdf
7. Personal Data
pii_decrypt_call and pii_list_call_identities return plaintext personal data (names, email, phone numbers, etc.) directly into the AI assistant's context window.
Audact logs no tool arguments or results, so we do not log PII ourselves. However, whether a tenant's own AI assistant may receive plaintext personal data is the tenant's responsibility under its Data Processing Agreement. Each customer must ensure their data agreement permits this.
If you work with a data controller who restricts PII in AI contexts, use the REST API directly with proper access controls instead of the MCP server.
Credentials in the conversation. generate_key returns a new API key secret and exchange_key returns a session token. Both land in the assistant's conversation history (and wherever your AI client stores it). Both require confirm: true; revoke a key that may have been exposed with revoke_key.
Note on delete_call_recording: the API requires the Owner role, and MCP additionally requires confirm: true.
8. Limits
Rate Limit
/mcp/endpoint: 600 requests/minute per key. Counts every tool call, everytools/list.- Timeout: 30 seconds per call.
Argument Size Limits
| Category | Limit | Error |
|---|---|---|
| Most tools | 1 MiB | ARGUMENTS_TOO_LARGE |
| KYC document upload (decoded) | 10 MiB | FILE_TOO_LARGE |
Large-argument tools (validate_audio, reconcile_audio) | 15 MiB | ARGUMENTS_TOO_LARGE (if larger) |
Note: Audio larger than about 11 MiB still requires the REST API; use POST /v1/validate-audio and POST /v1/audio-reconciliation directly for very large files.
Response Size
- 256 KiB cap: If a list result exceeds 256 KiB, whole items are trimmed from the end so the result stays valid JSON. An
_mcp_truncatedfield shows how many were returned and how many fit on the page. Retry with a smallerlimitor narrower filters. - Single-item responses: If one item exceeds 256 KiB (rare), you get a tool error
RESPONSE_TOO_LARGEinstead.
Other Limits
- File encoding: Only base64 (standard or URL-safe) is accepted for
file_base64. Invalid encoding →INVALID_FILE_ENCODING. - Base64 decoding: Encoded size must fit within 10 MiB (decoded); oversized →
FILE_TOO_LARGE.
9. LLM Proxy
The proxy_openai tool forwards a request to the Audact LLM proxy, which manages authentication and routing to your configured LLM provider.
Parameters
call_id(required): UUID of the call context (X-Audact-Call-IDheader)config_id(required): UUID of the LLM configuration (X-Audact-Config-IDheader)turn(required): Turn number in the conversation (X-Audact-Turnheader)- Other fields: Passed as the request body to the LLM provider (e.g.,
messages,temperature, etc.)
Important Notes
- Tenant is always from your key: You cannot specify a different tenant; it is automatically filled from the authenticated API key.
- Requires confirmation: Calls
proxy_openaiwith"confirm": truebecause it makes a paid LLM call. - Streaming not available over MCP: Streaming (
text/event-stream) is REST-only. MCP is JSON-only; use/v1/llm-proxy/openaidirectly for streaming responses. - Latency: This call runs on the hot path (40ms hard deadline for compliance validation); expect sub-second responses for the proxy itself.
Example
json
{
"call_id": "550e8400-e29b-41d4-a716-446655440000",
"config_id": "660e8400-e29b-41d4-a716-446655440001",
"turn": 1,
"messages": [{"role": "user", "content": "Hello"}],
"temperature": 0.7,
"confirm": true
}10. What Is NOT Exposed (and Why)
The MCP server deliberately excludes some operations in v1:
| Excluded | Reason |
|---|---|
Org & platform admin (/v1/org/*, /v1/platform/*, org/platform-only endpoints) | Require org or platform credentials, not tenant API keys |
Voice cloning (create_agent_worker_voice, delete_agent_worker_voice) | Behind platform-only auth; no tenant key can call them |
Export/import (exportAgent, exportTenant, importTenant) | Require platform tokens or special signup flow |
Signup (createTenant) | Not a tenant operation; no tenant key can call it |
Cal.com OAuth (calcom_oauth_start, calcom_oauth_callback) | Out of scope: OAuth / authorization-code flows not supported in this phase |
Streaming LLM proxy (proxyOpenAIStream) | Returns text/event-stream; MCP is JSON-only. Use REST API for streaming. |
Internal pipeline endpoints (finalizeCallScore, checkCallingHours) | Not publicly routed; not tenant-facing operations |
| Inbound webhooks (receive_* endpoints) | Provider webhooks are inbound callbacks, not MCP tools |
| Public keys, evidence export download, SIP control plane | System endpoints, token-gated URLs, or unrelated to tenant API operations |
Public verification (getMetachain, verifyInclusion) and dashboard session refresh (refreshToken) | Take no tenant API key |
The authoritative list, with one reason per entry, is maintained in the MCP server's exclusions configuration.
For any of these, use the REST API directly with your key, or the Audact dashboard.
11. Errors & Rate Limits
Tool Errors
When an MCP tool call fails, you get a tool error with:
- code: The Audact API error code (e.g.,
CALL_NOT_FOUND,INVALID_API_KEY,CONFIRMATION_REQUIRED,ARGUMENTS_TOO_LARGE,FILE_TOO_LARGE,INVALID_FILE_ENCODING) - hint: A human-readable suggestion
- message: Full error text
Example:
json
{
"isError": true,
"content": [
{
"type": "text",
"text": "404 CALL_NOT_FOUND: Call not found\nHint: Provide a valid UUID for call_id"
}
]
}Authentication & Rate Limits
- Transport 401 (HTTP 401): Invalid or revoked API key. Check that your key is correct and not revoked.
- Tool error 403 (from backend): Your key role is insufficient for this tool. Upgrade to Developer or Owner if needed.
- HTTP 429 (rate limit):
/mcp/is rate-limited to 600 requests/minute per key, counting every MCP request. When the limit is reached you get HTTP 429 with aRetry-Afterheader; wait that many seconds before retrying. - Response size cap (256 KiB): If a list result is larger than 256 KiB, whole items are dropped from the end so the result stays valid JSON, and an
_mcp_truncatedfield says how many were shown.next_cursoris removed from a trimmed page. A single item over the cap returns aRESPONSE_TOO_LARGEtool error instead.
Timeouts
- Each tool call has a 30-second timeout. Network delays or slow upstream operations can occasionally trigger this. If it happens, retry after a brief delay.
12. Forwarding & Architecture
Your MCP calls are forwarded to the real Audact REST API (/v1) with your key, exactly as if you had called it directly. This means:
- Permissions: Your key role determines what you can do. A Viewer key sees only read tools; a Developer or Owner key can write.
- Tenant isolation: Your key is tied to one tenant. You cannot read or modify another tenant's data, even if you somehow pass their IDs.
- Audit trail: Every call is logged under your key, just like a REST call.
- Idempotency: Handled by the same backend services that handle REST; pass
idempotency_keywhere a tool offers it.
In short: An MCP tool call can never do more than the same key could do against /v1 directly.
13. Examples
List Agents
Tool: list_agents Arguments: (none) → Returns a list of your tenant's agents
Create a Webhook
Tool: create_webhook
Arguments:
- body:
url: "https://example.com/hook"
events: ["call_ended", "call_summary"]
scope: "account"
→ Returns the new webhook ID and configurationConfirm Delivery
Tool: confirm_delivery
Arguments:
- body:
call_id: "aaaabbbb-cccc-dddd-eeee-ffff00001111"
delivered_text: "Your balance is low"
mechanism: "voice"
→ Returns 200 OK; evidence event recordedUpload a KYC Document
Tool: upload_kyc_document Arguments: - doc_type: "passport" - file_base64: "JVBERi0xLjQK..." (base64-encoded PDF) - file_name: "my_passport.pdf" - file_content_type: "application/pdf" → Returns the document ID and upload timestamp
14. Support & Feedback
- REST API reference: Audact API reference
- MCP protocol spec: Model Context Protocol
- Troubleshooting:
- Verify your API key is correct and not revoked.
- Verify that you're using
https://api.audact.ai/mcp/as the endpoint URL. - For
tools/listreturning an empty list: your key's role may be insufficient. Try a Developer key. - For specific tool errors: the error code and hint point to the REST API documentation.
- Report issues: Audact Support
Quick Reference
| Item | Value |
|---|---|
| Protocol | MCP (Model Context Protocol) 2025-06-18 |
| Transport | Streamable HTTP, POST /mcp/ |
| Production URL | https://api.audact.ai/mcp/ |
| Auth | Authorization: Bearer aud_live_… |
| Tools | 161 curated operations from Audact REST API |
| Roles | Viewer, Developer, Owner |
| Rate limit | 600 req/min per key on /mcp/ |
| Timeout | 30 seconds per call |
| Tools requiring confirm | 33 (money, irreversible, security-critical) |
| Argument limit (most tools) | 1 MiB |
| Argument limit (audio validation) | 15 MiB (audio: ~11 MiB recommended) |
| KYC document limit | 10 MiB (decoded) |
| Response cap | 256 KiB: lists are trimmed (_mcp_truncated); single items over cap return RESPONSE_TOO_LARGE |
