KrosAI MCP

KrosAI MCP управляет телефонными номерами и голосовыми AI-агентами через оператора связи

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

Что умеет

  • Искать, закреплять и освобождать телефонные номера по рынкам
  • Подключать и настраивать голосовые эндпоинты AI-провайдеров к номерам
  • Инициировать и завершать исходящие звонки
  • Получать транскрипты, записи и историю событий звонков
  • Запускать SIP-диагностику и следить за статусом портирования

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

Доступ ограничен телефонной инфраструктурой организации пользователя в KrosAI.

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

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

KrosAI — MCP-сервер телеком-инфраструктуры для голосовых AI-агентов: выделение номеров, подключение операторов, настройка голосовых эндпоинтов (ElevenLabs, Vapi, Retell) и работа с историей звонков в Нигерии, Кении, Гане, США и Великобритании. Сервер закрывает регуляторные и carrier-вопросы, чтобы агент мог реально звонить и принимать звонки.

Как подключить

Как подключить KrosAI MCP к Claude

Адрес сервера, который нужно вставить в настройках Claude:

https://krosai-mcp--trykrosweb.run.tools

  1. Откройте Claude (сайт claude.ai или приложение для компьютера).
  2. Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
  3. Нажмите Добавить пользовательский коннектор (Add custom connector).
  4. Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
  5. В чате нажмите + → Коннекторы и включите новый коннектор.

Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.

Авторизация

После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.

Как подключить KrosAI MCP к ChatGPT

Адрес сервера, который нужно вставить в настройках ChatGPT:

https://krosai-mcp--trykrosweb.run.tools

  1. Откройте ChatGPT в браузере (chatgpt.com). Нужен тариф Plus, Pro, Business, Enterprise или Edu.
  2. Один раз включите режим разработчика: Настройки → Приложения → Дополнительные настройки → Режим разработчика (Settings → Apps → Advanced settings → Developer mode).
  3. Откройте Настройки → Коннекторы и нажмите Создать (Create).
  4. Заполните форму: Название (любое), Описание (одна фраза, что делает сервис), URL MCP-сервера (скопируйте ниже).
  5. В поле Аутентификация выберите OAuth, если сервис требует вход, иначе Нет. Нажмите Создать.
  6. В новом чате откройте + → Приложения/Коннекторы и включите коннектор.

Название раздела у OpenAI менялось (Connectors → Apps/Plugins). Если пункт называется иначе, ищите «режим разработчика» в настройках. В рабочих пространствах Business/Enterprise администратор должен разрешить пользовательские коннекторы.

Авторизация

При первом использовании ChatGPT откроет окно входа в сервис. Войдите и подтвердите доступ.

Как подключить KrosAI MCP к Cursor

Адрес сервера, который нужно вставить в настройках Cursor:

https://krosai-mcp--trykrosweb.run.tools

Быстрый способ: нажмите кнопку Открыть в Cursor ниже, Cursor сам предложит добавить сервер.

Вручную:

  1. В Cursor откройте Settings → Cursor Settings → MCP и нажмите Add new global MCP server.
  2. Вставьте JSON, скопированный ниже, в открывшийся файл ~/.cursor/mcp.json (для одного проекта: .cursor/mcp.json в корне проекта).
  3. Сохраните файл. Сервер появится в списке MCP; при необходимости пройдите авторизацию по кнопке рядом с ним.

Авторизация

Если сервис требует вход, рядом с сервером в списке MCP появится кнопка авторизации.

Список инструментов сервера (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.