TheDocumentation Index
Fetch the complete documentation index at: https://docs.kataven.ai/llms.txt
Use this file to discover all available pages before exploring further.
sk_live_ API key in your MCP config gives the AI full account scope — same surface as a CI deploy key. This page is the risk model + the practical mitigations.
Mint a separate key per AI app
hub.kataven.ai/settings → API Keys → Create API key. Suggested naming convention:- Revocation works without disrupting other tools. Stop using ChatGPT? Revoke its key without breaking the Cursor key.
- Audit trails are usable. Every API call logs the key id; you can see “the deletion came from
chatgpt-tunneled” not just “from one of your keys.” - Rotation is incremental. Bulk rotation across every AI app at once is friction; per-app keys let you rotate one at a time.
Set per-tenant cost caps
A runaway loop in any AI tool can rack up calls fast. Cost caps are the kill switch. hub.kataven.ai/settings → Limits tab. Three caps that boundkataven_originate_call, kataven_start_campaign, etc.:
- Concurrent calls — max calls in flight at once. Useful when an AI loop fires many
originate_callrequests in parallel. - Calls per minute — burst rate.
- Daily calls / minutes max — hard cap. The server returns
429once you hit it; the AI sees the error and stops.
sk_live_ cannot raise them.
Approve write tools, don’t auto-allow
Most AI clients (Claude Desktop, ChatGPT, Cursor, Warp, Windsurf) ask before executing destructive tools by default. Keep that on for:kataven_originate_call— places real calls, real money.kataven_start_campaign,kataven_resume_campaign— bulk dial.kataven_delete_*— irreversible.
Where your sk_live_ actually lives
Different MCP setups put your key in different places. Knowing which matters for incident response.
Direct stdio (Claude Desktop, Cursor, Windsurf, Zed, VS Code, JetBrains, Warp, Goose, Raycast)
Tunneled (ChatGPT, Claude.ai web, n8n)
kataven-mcp directly, gated only by what kataven-mcp itself enforces (which is “any caller can use any tool” — there’s no per-request auth on top of the env-baked key). Mitigations:
- Random ngrok URLs aren’t a security boundary, but they’re impractical to brute-force in short sessions. For short ad-hoc work, fine.
- Cloudflare Tunnel + Cloudflare Access (free) puts a Google/GitHub SSO gate in front of the tunnel — much stronger.
- Shut the tunnel down when not in use.
killsupergateway when the session ends, or useKeepAlive: falsein launchd.
Endpoints intentionally not exposed via MCP
Four admin endpoints are deliberately not callable from MCP, even with a validsk_live_ key:
| Endpoint | Why not |
|---|---|
PUT /api/v1/call-limits | Cost caps are platform-tier policy. A leaked sk_live_ shouldn’t be able to raise its own limits. |
POST /api/marketplace/agents | Template authoring is admin-only. |
POST /api/integrations | Integration definitions are platform-curated. |
DELETE /api/v1/sessions/{id}/recording | Audit trail integrity — recordings can only be deleted via Hub UI by an admin. |
403 Forbidden to sk_live_ callers on these paths, and the MCP server doesn’t list them as tools at all. Edit them at hub.kataven.ai/settings under the Limits / Integrations / etc. tabs.
Incident response
If you suspect a key leak:- hub.kataven.ai/settings → API Keys tab → find the key by its name (
claude-desktop-laptop, etc.) → Revoke. Effective immediately. - Check hub.kataven.ai/conversations for unexpected recent calls.
- Check hub.kataven.ai/campaigns for unexpected campaigns.
- Mint a new key with the same name and update the AI app’s config.
See also
- Authentication — sk_live_ vs JWT, when each is required.
- Tunneling — risks specific to the public-tunnel path.
- Manage with AI overview — picking between MCP and direct-SDK paths.

