KrosAI MCP

KrosAI is the telecom infrastructure layer for AI voice agents.

От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноТолько чтение

Что умеет

  • Calls.List: List calls for the authenticated organisation with optional filters. Args: status: Filter by call status (``completed``, ``in_progress``, ``failed``, ``never_connected``, etc.). direction:
  • Calls.Get: Fetch the full record for a single call. Args: call_id: Internal KrosAI call UUID. Returns: Full call row dict including transcript, recording URL, cost, and provider metadata.
  • Calls.Initiate: Place an outbound call to a PSTN number via an AI endpoint. The endpoint determines the AI provider (ElevenLabs, Vapi, Retell, etc.) and the routing strategy. If ``endpoint_id`` is omi

Какие данные видит

Нужен ли аккаунт

Не нужен: сервер работает без входа

KrosAI is the telecom infrastructure layer for AI voice agents. This MCP server gives Claude (and other MCP clients) direct, programmatic access to real telephony infrastructure — phone number provisioning, carrier connectivity, AI endpoint configuration, and call data — across emerging markets including but not limited to Nigeria, Kenya, Ghana, the US, and the UK.

What you can do with this server:

Provision, claim, and manage phone numbers across supported markets Attach and configure AI voice endpoints (ElevenLabs, Vapi, Retell, and more) to live phone numbers Query call history, transcripts, recordings, and lifecycle events Run SIP diagnostics and monitor porting status Manage your organization's telephony inventory without leaving your MCP client

Why KrosAI: Building a voice AI agent is the easy part — getting it a real, compliant phone number is where most teams get stuck. KrosAI handles carrier integration, KYC/regulatory compliance, number provisioning, and fraud detection so your agent can actually make and receive calls in the markets that matter, without months of carrier back-and-forth.

Get started: Connect your KrosAI account to start managing phone numbers and voice endpoints directly from your MCP client.

Список инструментов сервера (45)

Технические названия из tools/list. Нужны только разработчикам.

calls.listList calls for the authenticated organisation with optional filters. Args: status: Filter by call status (``completed``, ``in_progress``, ``failed``, ``never_connected``, etc.). direction: Filter by direction — ``"inbound"`` or ``"outbound"``. limit: Maximum rows to return (1–200; default 50). cursor: Pagination cursor — pass the ``created_at`` value of the last row from the previous page to fetch the next page. include_never_connected: Include ``never_connected`` ghost-call rows (campaign calls that never reached the remote party). Defaults to ``False``. Returns: Dict with ``data`` (list of call rows), ``count``, ``has_more``, and optional ``next_cursor``.
calls.getFetch the full record for a single call. Args: call_id: Internal KrosAI call UUID. Returns: Full call row dict including transcript, recording URL, cost, and provider metadata.
calls.initiatePlace an outbound call to a PSTN number via an AI endpoint. The endpoint determines the AI provider (ElevenLabs, Vapi, Retell, etc.) and the routing strategy. If ``endpoint_id`` is omitted, the endpoint attached to ``from_number`` is used. Args: to_number: Destination E.164 phone number (e.g. ``"+14155552671"``). from_number: Caller-ID E.164 number owned by the organisation. endpoint_id: UUID of the AI endpoint to use for the call. Optional if ``from_number`` has a default endpoint attached. metadata: Optional key-value dict attached to the call row for downstream enrichment. Returns: Dict with ``call_id``, ``status``, and provider-specific fields.
calls.hangupTerminate an active in-progress call. Sends a hangup signal to FreeSWITCH for the underlying channel. Has no effect if the call has already ended. Args: call_id: Internal KrosAI call UUID. Returns: Dict with ``ok`` flag and ``call_id``.
calls.eventsFetch the lifecycle event log for a call. Events include ``call.initiated``, ``call.answered``, ``call.completed``, ``call.recording.available``, ``call.transcript.available``, etc. Args: call_id: Internal KrosAI call UUID. limit: Maximum events to return (default 100). Returns: Dict with ``data`` list of event rows ordered by ``created_at`` ascending.
calls.transcriptFetch the turn-by-turn transcript for a completed call. Returns the Deepgram or provider-supplied diarised transcript stored in the ``calls.transcript`` column. Args: call_id: Internal KrosAI call UUID. Returns: Dict with ``call_id`` and ``transcript`` (list of speaker turns or raw text, depending on the transcription provider).
calls.recordingFetch the recording URL for a completed call. Args: call_id: Internal KrosAI call UUID. Returns: Dict with ``call_id`` and ``recording_url`` (presigned Supabase Storage URL, valid for a limited time).
calls.deleteSoft-delete a call record by setting its status to ``deleted``. The row is retained for billing and audit purposes. Cannot delete a call that is currently in-progress — hang it up first. Args: call_id: Internal KrosAI call UUID. Returns: Dict with ``ok`` flag on success.
endpoints.listList all AI endpoint configurations for the organisation. Args: type: Optional provider type filter — one of ``"elevenlabs"``, ``"vapi"``, ``"retell"``, ``"vogent"``, ``"aethex"``, ``"sip"``. Returns: List of endpoint dicts ordered by ``created_at`` descending. Each dict includes ``id``, ``name``, ``type``, ``url``, ``provider_config``, ``status``, ``organization_id``, ``created_at``, and ``updated_at``.
endpoints.getFetch a single AI endpoint configuration by ID. Args: endpoint_id: UUID of the endpoint. Returns: Endpoint dict with full ``provider_config``.
endpoints.createCreate a new AI endpoint configuration. Args: name: Human-readable display name for the endpoint. type: Provider type — one of ``"elevenlabs"``, ``"vapi"``, ``"retell"``, ``"vogent"``, ``"aethex"``, ``"sip"``. url: SIP URI or provider webhook URL. Required for ``"sip"`` and ``"vogent"``; optional for API-based providers. provider_config: Provider-specific configuration dict (e.g. ``{"agent_id": "...", "elevenlabs_phone_number_id": "..."}``) Required structure varies by provider type. status: Lifecycle status — ``"active"`` (default) or ``"inactive"``. Returns: Newly created endpoint row dict.
endpoints.updateUpdate an existing AI endpoint configuration. Only the provided fields are changed; omitted fields are left as-is. Args: endpoint_id: UUID of the endpoint to update. name: New display name. url: New SIP URI or webhook URL. provider_config: Full replacement for the provider config dict. status: New lifecycle status — ``"active"`` or ``"inactive"``. Returns: Updated endpoint row dict.
endpoints.deleteDelete an AI endpoint configuration. Fails if any phone numbers are currently attached to this endpoint. Detach them first using :func:`mcp_tools.phone_numbers.detach_endpoint_from_number`. Args: endpoint_id: UUID of the endpoint to delete. Returns: Dict with ``ok`` flag on success.
endpoints.testTest live connectivity to an AI endpoint. Sends a lightweight probe to the provider API (no call is placed) and returns the connection result. Args: endpoint_id: UUID of the endpoint to test. Returns: Dict with ``ok`` flag, ``latency_ms`` (when available), and optional ``detail`` message from the provider.
numbers.listList all phone numbers owned by the organisation. SIP credentials are excluded from list results for security; fetch a single number by ``id`` to obtain credentials. Args: status: Optional status filter — ``"active"``, ``"released"``, or ``"porting"``. Returns: List of phone number dicts ordered by ``number`` ascending. Each dict includes ``id``, ``number``, ``status``, ``endpoint_id``, ``allow_inbound``, ``allow_outbound``, ``routing_mode``, ``created_at``, and ``updated_at``.
numbers.getFetch the full record for a single phone number. Includes SIP credentials (``sip_username``, ``sip_password``, ``sip_domain``) unlike the list endpoint. Args: phone_number_id: UUID of the phone number record. Returns: Full phone number dict.
numbers.searchSearch for purchasable phone numbers. Args: country_code: ISO 3166-1 alpha-2 country code (default ``"US"``). area_code: Optional NPA area code to filter by (e.g. ``"415"``). contains: Optional digit sequence the number must contain. limit: Maximum results to return (default 20, max 50). Returns: List of available number dicts with ``number``, ``monthly_cost``, and capability fields.
numbers.claimClaim / register a phone number for the organisation. Args: number: E.164 phone number string (e.g. ``"+14155552671"``). endpoint_id: UUID of the AI endpoint to attach immediately. allow_inbound: Whether to accept inbound calls on this number. allow_outbound: Whether to use this number as caller-ID for outbound calls. Returns: Newly registered phone number row dict.
numbers.updateUpdate routing configuration for a phone number. Args: phone_number_id: UUID of the phone number to update. allow_inbound: Enable or disable inbound call reception. allow_outbound: Enable or disable use as outbound caller-ID. routing_mode: Routing mode string (e.g. ``"endpoint"`` or ``"ivr"``). Returns: Updated phone number row dict.
numbers.releaseRelease a phone number back to the carrier pool. This action is irreversible. The number will no longer receive calls and will be removed from the organisation's inventory. Args: phone_number_id: UUID of the phone number to release. Returns: Dict with ``ok`` flag on success.
numbers.attachAttach an AI endpoint to a phone number. Inbound calls to this number will be routed to the specified endpoint. Args: phone_number_id: UUID of the phone number. endpoint_id: UUID of the AI endpoint to attach. Returns: Updated phone number row dict.
numbers.detachDetach the AI endpoint from a phone number. After detaching, inbound calls to this number will not be routed to any AI endpoint until a new one is attached. Args: phone_number_id: UUID of the phone number. Returns: Updated phone number row dict with ``endpoint_id`` set to ``null``.
numbers.diagnosticsFetch porting status and SIP diagnostics for a phone number. Returns carrier porting events, SIP registration state, and any known configuration issues. Args: phone_number_id: UUID of the phone number. Returns: Dict with ``porting_status``, ``sip_registered``, ``events`` list, and optional ``issues`` list.
webhooks.listList all outbound webhook registrations for the organisation. Signing secrets are not included in the list response. Returns: List of webhook dicts ordered by ``created_at`` descending. Each dict includes ``id``, ``url``, ``events``, ``enabled``, ``organization_id``, ``created_at``, and ``updated_at``.
webhooks.createRegister a new outbound webhook URL. The Bridge will POST call lifecycle events to this URL signed with an HMAC-SHA256 ``X-KrosAI-Signature`` header. Valid ``events`` values: ``"call.initiated"``, ``"call.answered"``, ``"call.completed"``, ``"call.failed"``, ``"call.recording.available"``, ``"call.transcript.available"``. Args: url: HTTPS URL to deliver events to. events: List of event names to subscribe to. Omit to subscribe to all events. enabled: Whether the webhook is active (default ``True``). signing_secret: Optional custom HMAC signing secret. A random secret is generated automatically when omitted. Returns: Newly registered webhook row dict (without signing_secret).
webhooks.updateUpdate a webhook registration. Only provided fields are changed. Args: webhook_id: UUID of the webhook to update. url: New delivery URL. events: Replacement event subscription list. enabled: Enable or disable the webhook. signing_secret: New HMAC signing secret. Returns: Updated webhook row dict.
webhooks.deleteDelete a webhook registration. The webhook will immediately stop receiving events. Args: webhook_id: UUID of the webhook to delete. Returns: Dict with ``ok`` flag on success.
webhooks.testSend a test event to a webhook URL to verify reachability. The Bridge sends a synthetic ``"webhook.test"`` payload and returns whether the endpoint responded with a 2xx status code within the timeout. Args: webhook_id: UUID of the webhook to test. Returns: Dict with ``ok`` flag, ``status_code`` from the target server, and optional ``latency_ms``.
webhooks.deliveries.listFetch the delivery history for a webhook. Args: webhook_id: UUID of the webhook. limit: Maximum deliveries to return (default 50). status: Filter by delivery status — ``"success"`` or ``"failed"``. Returns: Dict with ``data`` list of delivery records including ``event``, ``status_code``, ``response_body``, ``created_at``, and ``next_retry_at`` for pending retries.
webhooks.deliveries.retryRetry a failed webhook delivery immediately. Args: delivery_id: UUID of the delivery record to retry. Returns: Dict with ``ok`` flag and updated delivery row.
keys.listList API keys for the organisation. Raw key values are never returned — only ``prefix`` (first 12 chars) and ``last4`` (last 4 chars) are available. Args: include_revoked: When ``True``, revoked keys are included in the results. Defaults to ``False``. Returns: List of API key dicts ordered by ``created_at`` descending. Each dict includes ``id``, ``name``, ``prefix``, ``scopes``, ``last_used_at``, ``created_at``, ``revoked_at``, and ``organization_id``.
keys.createCreate a new ``kros_*`` API key. The raw key is returned only in this response — store it immediately. It cannot be retrieved again. Args: name: Human-readable label for the key (e.g. ``"Production server"``). scopes: Optional list of permission scopes. Omit for full access. Returns: Dict including ``id``, ``name``, ``key`` (raw value, one-time), ``prefix``, ``last4``, ``scopes``, and ``created_at``.
keys.updateUpdate an API key's name or scope list. Args: key_id: UUID of the API key record. name: New display name. scopes: Replacement scope list. Returns: Updated API key row dict (without the raw key value).
keys.rotateRotate an API key: revoke the existing key and issue a new one. The new raw key is returned only in this response — store it immediately. Args: key_id: UUID of the API key to rotate. Returns: Dict with the new ``key`` value (raw, one-time), ``id``, ``prefix``, and ``last4`` for the replacement key.
keys.revokePermanently revoke an API key. The key will be rejected immediately on the next request. This action cannot be undone. Args: key_id: UUID of the API key to revoke. Returns: Dict with ``ok`` flag and ``revoked_at`` timestamp.
keys.usageFetch per-key usage statistics. Args: key_id: UUID of the API key. Returns: Dict with ``calls_count``, ``last_used_at``, and a ``daily`` breakdown of request counts for the last 30 days.
org.getReturn read-only metadata for the authenticated organisation. Exposes plan, balance, billing window, KYC status, SIP subdomain, and locale. Fields that could leak Stripe credentials or internal configs are excluded. Returns: Dict with ``id``, ``name``, ``plan``, ``plan_id``, ``cents_balance``, ``billing_period_start``, ``billing_period_cents_used``, ``sip_subdomain``, ``stack_level``, ``kyc_provider``, ``timezone``, ``locale``, ``created_at``, and ``updated_at``.
billing.getReturn the current billing snapshot for the organisation. Includes the live wallet balance, current billing period usage, plan included credits, and a breakdown of recent charges. Returns: Dict with ``cents_balance``, ``billing_period_cents_used``, ``billing_period_start``, ``included_cents``, ``plan``, and a ``recent_transactions`` list.
integrations.listList provider integrations configured for the organisation. Raw API keys are never returned — only safe metadata fields are included (``id``, ``provider``, ``display_name``, ``is_connected``, ``last_tested_at``, ``organization_id``, ``created_at``, ``updated_at``). Args: provider: Optional provider filter — one of ``"elevenlabs"``, ``"vapi"``, ``"retell"``, ``"openai"``, ``"aethex"``. Returns: List of integration metadata dicts ordered by ``created_at`` descending.
integrations.getFetch a single provider integration by ID. Args: integration_id: UUID of the integration record. Returns: Integration metadata dict (no raw API key values).
integrations.createStore or upsert provider API credentials. If an integration for this ``(organization, provider)`` pair already exists it is updated in-place. The raw ``api_key`` is stored encrypted and is never returned; the response includes only a masked hint. Args: provider: Provider name — one of ``"elevenlabs"``, ``"vapi"``, ``"retell"``, ``"openai"``, ``"aethex"``. api_key: Provider API key or secret. Write-only: stored encrypted, never returned. display_name: Optional human-readable label for the integration. extra_config: Optional provider-specific extra settings dict. Returns: Integration metadata row with ``api_key_hint`` (masked).
integrations.updateUpdate an existing provider integration. Only provided fields are changed. Args: integration_id: UUID of the integration to update. api_key: New provider API key (write-only; replaces the stored key). display_name: New display name. extra_config: Replacement extra configuration dict. Returns: Updated integration metadata dict.
integrations.deleteRemove a provider integration and its stored credentials. Args: integration_id: UUID of the integration to delete. Returns: Dict with ``ok`` flag on success.
integrations.testVerify that the stored API key can authenticate with the provider. Sends a lightweight probe to the provider API and updates ``last_tested_at`` and ``is_connected`` on the integration record. Args: integration_id: UUID of the integration to test. Returns: Dict with ``ok`` flag, ``is_connected`` bool, and optional ``detail`` from the provider.
analytics.summaryReturn aggregate call statistics for the organisation over a date range. Reads from the ``call_stats_daily`` rollup table. Totals are pre-computed by the nightly rollup job; the most recent day may be slightly behind real-time. Args: start_date: Inclusive start date in ``YYYY-MM-DD`` format. Defaults to 30 days ago when omitted. end_date: Inclusive end date in ``YYYY-MM-DD`` format. Defaults to today when omitted. Returns: Dict with: - ``total_calls`` — total call count in the period. - ``answered_calls`` — calls that were answered. - ``total_minutes`` — total call duration in minutes. - ``total_cost`` — total cost in USD. - ``date_range`` — dict with ``start`` and ``end`` used. - ``by_day`` — list of daily breakdown rows sorted by date ascending.
KrosAI MCP: подключить к Claude, ChatGPT, Cursor · Connectors.fun