Carrier MCP: Give Your AI Agent Global Connectivity

Carrier MCP — natural language control of your MVNO/eSIM fleet.

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

Что умеет

  • List Reseller Accounts: Use this to enumerate all accounts (sub-resellers or customer accounts) under a reseller. Returns each account's name, ID, current balance, package-only flag, and account type.
  • Modify Account Balance: Use this to adjust or set the monetary balance on a reseller account. 'adapt' mode adds (positive amount) or subtracts (negative amount) from the current balance; 'set' mode re
  • Get Reseller Info: Use this to retrieve full details for a reseller: main info, traffic configuration, charging info, contact info, and active pricing plans. Params: `resellerId` (integer, optional —

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

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

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

Carrier MCP — natural language control of your MVNO/eSIM fleet. 52 tools (43 OCS API wrappers + 8 AI intelligence + 1 OCS event history), 5 prompts, OAuth 2.1 + PKCE. Streamable HTTP on Cloudflare Workers.

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

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

list_reseller_accountsUse this to enumerate all accounts (sub-resellers or customer accounts) under a reseller. Returns each account's name, ID, current balance, package-only flag, and account type. Params: `resellerId` (integer, optional — omit to list accounts under the token owner's reseller). Returns: array of account records, each containing `accountId`, `name`, `balance`, `type`. Do NOT use this to fetch a single subscriber's details — use `get_subscriber` instead. Do NOT use this to check eSIM activation counts — use `esim_status_per_account` for that.
modify_account_balanceUse this to adjust or set the monetary balance on a reseller account. 'adapt' mode adds (positive amount) or subtracts (negative amount) from the current balance; 'set' mode replaces the balance with the exact amount. Every change is logged as a transaction. Params: `accountId` (integer account ID from `list_reseller_accounts`), `amount` (number), `mode` ('adapt' | 'set'). Returns: updated account balance record with the transaction ID. Do NOT use this to modify a subscriber's personal balance — use `modify_subscriber_balance` instead. Always call `list_reseller_accounts` first to confirm the target accountId before executing.
get_reseller_infoUse this to retrieve full details for a reseller: main info, traffic configuration, charging info, contact info, and active pricing plans. Params: `resellerId` (integer, optional — omit to return the token owner's reseller). Returns: reseller object with `id`, `name`, `balance`, `pricingPlan`, `contactInfo`, and more. Do NOT use this to list all accounts under a reseller — use `list_reseller_accounts` for that.
esim_status_per_accountUse this to get eSIM status counts broken down by account: active, suspended, inventory (not yet activated), and other states. Good for fleet health dashboards and capacity planning. Params: `accountId` (integer, optional — omit for all accounts under the reseller). Returns: array of per-account objects with `accountId`, `active`, `suspended`, `inventory`, `other`. Do NOT use this to check a single subscriber's status — use `get_subscriber` for that. Do NOT use this for billing or balance checks — use `list_reseller_accounts` for balances.
list_sponsorsUse this to list all sponsor networks (eSIM sponsor carriers) available to this reseller. A sponsor defines which physical network infrastructure backs a given eSIM profile. Params: `resellerId` (integer, optional — omit to use the token owner's reseller). Returns: array of sponsor records with `sponsorId`, `name`, and coverage metadata. Do NOT use this to list steering lists or network profiles — those are separate concepts. Use `list_steering_lists` to see operator preference configurations.
list_steering_listsUse this to retrieve all network steering lists configured for this reseller. A steering list is a named configuration of excluded and priority mobile operators that controls which networks an eSIM prefers to roam onto — the primary mechanism for network quality optimisation and cost control. Call this before `modify_subscriber_steering_list` to obtain valid steering list IDs. Params: `resellerId` (integer, optional — omit to use the token owner's reseller). Returns: array of steering list records with `steeringListId`, `name`, and configured operators. Do NOT use this to assign a steering list to a subscriber — use `modify_subscriber_steering_list`. Do NOT use this to push a steering change to a device — use `push_steering_to_subscriber` after assignment.
get_subscriberUse this as the primary lookup for a single subscriber by ICCID or MSISDN. Returns the complete subscriber record: status, balance, assigned account, contact info, IMSI, simId, steering list, active pricing plan, and traffic restriction flags. Params: `iccid` (20-digit ICC identifier, optional) OR `msisdn` (E.164 phone number, optional) — provide at least one. Returns: full subscriber object. Key fields: `status` (ACTIVE/SUSPENDED/TERMINATED), `balance`, `imsi`, `simId`, `steeringListId`. Do NOT use this for bulk lookups — use `list_subscribers` with filters for that.
list_subscribersUse this to list subscribers with optional filters and pagination. Good for fleet enumeration, bulk status checks, and finding subscribers by account or status. Params: `accountId` (integer, filter by account), `status` (string, e.g. 'ACTIVE'/'SUSPENDED'), `offset` (integer, for pagination — default 0), `limit` (integer, max results — always set to avoid unbounded fetches; recommended max 100 per call). Returns: array of subscriber summary records with ICCID, status, and account. Do NOT use this to fetch full details for a specific subscriber — use `get_subscriber` for that.
modify_subscriber_balanceUse this to adjust or set the monetary balance for an individual subscriber. 'adapt' mode adds (positive) or subtracts (negative) from the current balance; 'set' mode replaces the balance with the exact amount provided. Params: `iccid` (subscriber identifier), `amount` (number), `mode` ('adapt' | 'set'). Returns: updated subscriber balance. Do NOT use this to modify an account-level balance — use `modify_account_balance` for that. Always call `get_subscriber` first to capture the current balance before adjusting.
modify_subscriber_statusUse this to change the OCS lifecycle status of a subscriber. Common transitions: ACTIVE → SUSPENDED (pause without losing packages), SUSPENDED → ACTIVE (reactivate), ACTIVE/SUSPENDED → TERMINATED (irreversible). WARNING: TERMINATED status is permanent — the subscriber record cannot be reactivated. Params: `iccid` (subscriber identifier), `status` (new status string, e.g. 'ACTIVE', 'SUSPENDED', 'TERMINATED'). Returns: updated subscriber record with the new status. Do NOT use this to disable the SIM card at the network level — use `change_sim_status` for that. Always call `get_subscriber` first to confirm current status before modifying.
change_sim_statusUse this to change the physical SIM/eSIM card status at the SIM provider level, independent of the OCS subscriber lifecycle status. Statuses: ENABLED (normal operation), DISABLED (blocked at network level, subscriber cannot connect), DELETED (irrecoverably removes the SIM profile — use only to decommission). WARNING: DELETED is irreversible. Always use `dry_run=true` first. Internally resolves ICCID → numeric simId via a getSingleSubscriber call before forwarding to OCS. Params: `iccid` (subscriber identifier), `simStatus` ('ENABLED' | 'DISABLED' | 'DELETED'). Returns: updated SIM record with new status. Do NOT use this to change the subscriber's OCS lifecycle status — use `modify_subscriber_status`. Do NOT confuse DISABLED (reversible) with DELETED (irreversible).
get_sim_provider_statusUse this to check the physical SIM/eSIM card status at the SIM provider level (ENABLED, DISABLED, DELETED) — distinct from the OCS subscriber status. Useful when `get_subscriber` shows ACTIVE but connectivity is broken; the SIM may be DISABLED at the provider level. Internally resolves ICCID → numeric simId. Params: `iccid` (subscriber identifier). Returns: provider status object with `simStatus`, `activationDate`, `lastStatusChange`. Do NOT use this to change the SIM status — use `change_sim_status` for that.
get_subscriber_locationUse this to get the last known roaming location of a subscriber (country and operator). Returned on a best-effort basis — location is updated when the device re-registers on the network. Params: `iccid` (subscriber identifier). Returns: object with `country`, `countryCode`, `network`, `operator`, and `timestamp` of last update. Do NOT use this for cell-tower-level precision — use `get_subscriber_location_by_cell_id` instead. Do NOT use this for bulk fleet location analysis — use `audit_network_coverage` for that.
modify_subscriber_contact_infoUse this to update the contact details stored on a subscriber record in OCS. Only the fields you provide are updated — omitted fields are left unchanged. Params: `iccid` (subscriber identifier), `firstName` (optional), `lastName` (optional), `company` (optional), `email` (optional), `phoneNumber` (optional). Returns: updated subscriber contact record. Do NOT use this to change subscriber status, balance, or traffic flags — those have dedicated tools.
set_subscriber_traffic_restrictionsUse this to enable or disable individual traffic types for a subscriber: mobile data, voice calls (mobile-originated and mobile-terminated), and SMS. Omit any flag to leave it unchanged. Changes take effect immediately at the OCS level. Params: `iccid` (subscriber identifier), `dataAllowed` (boolean, controls data traffic), `mocAllowed` (boolean, controls outbound calls), `mtcAllowed` (boolean, controls inbound calls), `smsMoAllowed` (boolean, controls outbound SMS). Returns: updated traffic restriction record for the subscriber. Do NOT use this to throttle bandwidth — use `hlr_set_bitrate` for speed limiting. Do NOT use this to suspend the subscriber entirely — use `modify_subscriber_status` (SUSPENDED) instead.
modify_subscriber_steering_listUse this to assign or remove a network steering list on a specific subscriber, controlling which mobile operators the subscriber's eSIM prefers to connect to. Steering lists are managed separately — call `list_steering_lists` to get valid IDs. This operates at the SUBSCRIBER level only. After assigning, call `push_steering_to_subscriber` to push the change to the physical device immediately; without that call the device continues using the old operator preference list until next re-registration. Params: `iccid` (subscriber identifier), `steeringListId` (integer from `list_steering_lists`, or null/0 to remove the current steering list). Returns: updated subscriber record confirming the new steeringListId. Do NOT use this for account-level steering (no MCP tool yet — gap G-03, awaiting eSIMVault input).
move_subscriber_range_to_accountUse this to move a contiguous ICCID range of subscribers to a different account. Useful for bulk subscriber migrations between accounts or during account restructuring. Params: `iccidFrom` (start ICCID of range, inclusive), `iccidTo` (end ICCID of range, inclusive), `accountId` (target account ID from `list_reseller_accounts`). Returns: OCS confirmation of the range move with affected subscriber count. Do NOT use this for a single subscriber move — provide identical iccidFrom and iccidTo. Always call `list_subscribers` on the range first to verify the correct subscribers are included.
hlr_set_bitrateUse this to set a hard bandwidth cap for a subscriber at the HLR (Home Location Register) level. This is a network-level throttle applied regardless of package allowance — use it to enforce fair-use speed limits or to throttle heavy users without suspending service. Common values: 256000 (256 kbps throttle), 1000000 (1 Mbps), 0 (remove limit). Internally resolves ICCID → IMSI via a getSingleSubscriber lookup. Params: `iccid` (subscriber identifier), `bitrate` (integer, bits-per-second; 0 removes the limit). Returns: HLR confirmation with the applied bitrate. Do NOT use this to block data entirely — use `set_subscriber_traffic_restrictions` with `dataAllowed=false`. Do NOT use this to change throttling thresholds on a package template — use `modify_template_throttling`.
hlr_get_bitrateUse this to read the current HLR-level bandwidth cap applied to a subscriber. A non-zero value means the subscriber is throttled to that speed regardless of package allowance. A zero or null response means no HLR-level cap is in effect. Internally resolves ICCID → IMSI via a getSingleSubscriber lookup. Params: `iccid` (subscriber identifier). Returns: object with `bitrate` (integer, bits-per-second) or null if no limit is set. Do NOT use this to check package data allowance limits — use `list_subscriber_packages` for that.
list_subscriber_packagesUse this to retrieve all prepaid packages currently assigned to a subscriber. Returns each package's allowance (data/voice/SMS), consumed usage, expiry date, status, and packageId. Always call this before any package modification tool (`modify_package_limits`, `modify_package_expiry`, `modify_package_status`, `delete_subscriber_package`) to confirm the correct packageId and current state. Params: `iccid` (subscriber identifier). Returns: array of package records with `packageId`, `name`, `status`, `dataLimit`, `dataUsed`, `expirationDate`, `recurring` flag. Do NOT use this to browse the product catalog — use `list_package_templates` for that.
assign_packageUse this to assign a one-time prepaid data/voice package to a subscriber from an existing template. The package is active immediately (or at first usage, depending on template settings). Params: `iccid` (subscriber identifier), `packageTemplateId` (integer from `list_package_templates`). Returns: created package record with `packageId`, `startDate`, `endDate`, and allowances. Do NOT use this for packages that should auto-renew — use `assign_recurring_package` instead. Do NOT use this to provision a new subscriber end-to-end — consider `provision_esim_wizard` for a guided flow with dry-run preview.
assign_recurring_packageUse this to assign an auto-renewing prepaid package to a subscriber. The package renews automatically based on the template's periodicity settings, reducing churn from manual renewal. Params: `iccid` (subscriber identifier), `packageTemplateId` (integer from `list_package_templates` — must be a template configured with recurring/periodicity settings). Returns: created recurring package record with `packageId` and renewal schedule. Do NOT use this for one-time packages — use `assign_package` instead. To pause or cancel auto-renewal without deleting the package, use `stop_resume_recurring_package`.
modify_package_limitsUse this to change the data, voice, or SMS allowance ceilings on an already-assigned subscriber package. Useful for mid-cycle top-ups or corrections without assigning a new package. Params: `iccid` (subscriber identifier), `packageId` (integer from `list_subscriber_packages`), `limits` (JSON string with the limit fields to change, e.g. {"dataLimit": 5368709120}). Returns: updated package record with new limits. Do NOT use this to change the package template (affecting future subscribers) — use `modify_template_core`. Do NOT use this to change expiry — use `modify_package_expiry`. Always call `list_subscriber_packages` first to confirm the correct packageId.
modify_package_expiryUse this to extend or shorten the expiry date of an active prepaid package on a subscriber. Useful when a subscriber's trip is longer than expected or for promotional extensions. Params: `iccid` (subscriber identifier), `packageId` (integer from `list_subscriber_packages`), `expirationDate` (ISO 8601 date string, e.g. '2026-06-01' or '2026-06-01T23:59:59'). Returns: updated package record with the new expiry date. Do NOT use this to change when a package becomes active — use `modify_subscriber_package_active_period`. Do NOT use this to change data allowances — use `modify_package_limits`.
modify_package_statusUse this to activate or deactivate a specific prepaid package on a subscriber without removing it. A deactivated package retains its allowances and can be reactivated later. Params: `iccid` (subscriber identifier), `packageId` (integer from `list_subscriber_packages`), `status` (new package status string, e.g. 'ACTIVE', 'INACTIVE'). Returns: updated package record with the new status. Do NOT use this to delete a package — use `delete_subscriber_package` for permanent removal. Do NOT use this to change the subscriber's overall account status — use `modify_subscriber_status`.
stop_resume_recurring_packageUse this to pause or restart the auto-renewal cycle of a recurring package without removing it. 'stop' halts future renewals (subscriber keeps current period until expiry); 'resume' re-enables auto-renewal from the next renewal date. Params: `iccid` (subscriber identifier), `packageId` (integer from `list_subscriber_packages`), `action` ('stop' | 'resume'). Returns: updated recurring package record with new renewal state. Do NOT use this to permanently delete a recurring package — use `delete_subscriber_package`. Do NOT confuse this with `modify_package_status` (which activates/deactivates a package for usage).
delete_subscriber_packageUse this to permanently remove a single prepaid package from a subscriber. This is irreversible — the package record and any unused allowance are deleted. Always call `list_subscriber_packages` first to confirm the correct packageId and snapshot the current state. Use `dry_run=true` on the first call. Params: `iccid` (subscriber identifier), `packageId` (integer from `list_subscriber_packages`). Returns: OCS confirmation of deletion. Do NOT use this to remove ALL packages at once — use `clean_all_packages` for that (requires separate confirm). Do NOT use this to pause a package — use `modify_package_status` to deactivate it instead.
clean_all_packagesDANGEROUS: Removes ALL prepaid packages from a subscriber in a single irreversible operation. There is no undo. Typical use: resetting a subscriber to zero before re-provisioning a new package series. REQUIRED workflow: (1) call `list_subscriber_packages` to snapshot what will be deleted; (2) call this tool with `dry_run=true` to preview; (3) get explicit user confirmation; (4) call again with `dry_run=false`. Params: `iccid` (subscriber identifier), `dry_run` (boolean — MUST be true on first call). Returns: list of packages that were (or would be) deleted. Do NOT use this to remove a single package — use `delete_subscriber_package` instead.
list_package_templatesUse this to browse the product catalog of prepaid package templates available for assignment. Returns each template's name, data/voice/SMS limits, pricing, validity period, location zone, and recurring configuration. Call this before `assign_package` or `assign_recurring_package` to obtain valid `packageTemplateId` values. Params: `accountId` (integer, optional — filter templates visible to a specific account). Returns: array of template records with `templateId`, `name`, `dataLimit`, `price`, `validityDays`, `locationZoneId`, `recurring`. Do NOT use this to list packages assigned to a specific subscriber — use `list_subscriber_packages`.
create_package_templateUse this to create a new prepaid package template in the product catalog. Templates define allowances, pricing, location zones, validity, and throttling thresholds that are reused each time the template is assigned to a subscriber. Params: `template` (full template configuration as a JSON string — fields include `name`, `dataLimit` in bytes, `price`, `validityDays`, `locationZoneId`, `recurring`, `throttlingActive`). Returns: created template record with the new `templateId`. Do NOT use this to modify an existing template — use `modify_template_core`. After creation, call `list_package_templates` to confirm the template is visible.
modify_template_coreUse this to change the core fields of an existing package template: name, data/voice/SMS limits, pricing, validity period, and location zone. Changes affect future package assignments from this template but do NOT retroactively change packages already assigned to subscribers. Params: `templateId` (integer from `list_package_templates`), `changes` (JSON string with fields to modify, e.g. {"name": "Europe 5GB", "dataLimit": 5368709120}). Returns: updated template record. Do NOT use this to modify throttling thresholds — use `modify_template_throttling`. Do NOT use this to modify recurring/renewal settings — use `modify_template_recurring`.
modify_template_recurringUse this to change the auto-renewal configuration of a package template: periodicity (daily/weekly/monthly), occurrence count, and renewal trigger conditions. Changes affect future assignments and existing recurring packages assigned from this template. Params: `templateId` (integer from `list_package_templates`), `changes` (JSON string with recurring fields, e.g. {"periodicity": "monthly", "occurrences": 12}). Returns: updated template record with new recurring settings. Do NOT use this to stop an individual subscriber's recurring renewal — use `stop_resume_recurring_package`. Do NOT use this to change core template fields like data limits — use `modify_template_core`.
modify_template_throttlingUse this to change the bandwidth throttling thresholds on a package template. WARNING: changes apply immediately to ALL existing subscriber packages created from this template, not just future ones. Setting a lower threshold will NOT retroactively throttle subscribers already below the new threshold (the system does not re-check existing usage). Params: `templateId` (integer), `changes` (JSON string with throttling fields, e.g. {"throttlingActive": true, "firstThresholdPercent": 80, "firstThresholdLimitKbps": 1024, "errorAction": "continue_unthrottled"}). Returns: updated template record with new throttling configuration. Do NOT use this to throttle a single subscriber — use `hlr_set_bitrate` instead. Do NOT use this to change core package limits — use `modify_template_core`.
list_location_zonesUse this to list countries and networks within a specific location zone. WARNING: this method has a known Jackson deserialization bug in the upstream OCS API that may return malformed responses. Prefer `list_detailed_location_zones` for reliable results. Params: `locationZoneId` (integer, optional — filter to a specific zone). Returns: array of zone element records with country and operator entries. Do NOT use this for reliable zone data — use `list_detailed_location_zones` instead. Do NOT use this to create zones — use `create_location_zone`.
list_detailed_location_zonesUse this as the preferred way to list location zones with full detail: included countries, operator networks, zone IDs, and names. This is the working alternative to `list_location_zones` which has a known upstream deserialization bug. Use `locationZoneId` values from this response when creating or editing package templates. Params: `resellerId` (integer, optional — omit to use the token owner's reseller). Returns: array of zone objects each containing `locationZoneId`, `name`, `countries`, and `operators`. Do NOT use `list_location_zones` when you need reliable data — always use this tool instead.
list_destination_prefixesUse this to list the phone number prefixes (country dialling codes) within a specific named destination list. Destination lists control which countries a subscriber may call on voice/SMS packages. You must already know the `destinationListId` to use this tool. Params: `destinationListId` (integer, optional — omit to list all known prefixes). Returns: array of prefix records with country code and E.164 prefix. Do NOT use this to discover the destination list catalog — use `list_destination_lists` for that. For data-only eSIM products without MOC voice, destination lists are irrelevant.
create_location_zoneUse this to create a new location zone — a named collection of countries and operators that defines where a package can be used. Location zones are required when creating package templates. Use `list_network_profiles` to find valid operator identifiers to include. Params: `zone` (full zone configuration as a JSON string — fields include `name`, `countries` (array of ISO country codes), `operators` (array of MCC-MNC strings)). Returns: created zone record with the new `locationZoneId`. Do NOT use this to modify an existing zone — no edit tool exists yet (gap G-19, pending eSIMVault). After creation, verify with `list_detailed_location_zones`.
subscriber_usageUse this to retrieve daily data, voice, and SMS usage for a subscriber over a date range. Hard limit: maximum 7 days per query — do not exceed or OCS will return an error. Params: `iccid` (subscriber identifier), `startDate` (YYYY-MM-DD, inclusive), `endDate` (YYYY-MM-DD, inclusive, max 7 days from start). Returns: array of daily usage records with `date`, `dataBytes`, `voiceSeconds`, `smsCount`. Do NOT use this for event-level network activity — use `subscriber_network_events` for attach/detach events. Do NOT use this to check current package allowances — use `list_subscriber_packages`.
subscriber_network_eventsUse this to retrieve timestamped network events for a subscriber: attach, detach, location updates, and handovers between operators. Useful for connectivity troubleshooting, roaming activity verification, and fraud pattern detection. Max 7 days per query. Params: `iccid` (subscriber identifier), `startDate` (YYYY-MM-DD, inclusive), `endDate` (YYYY-MM-DD, inclusive, max 7 days from start). Returns: array of event records with `timestamp`, `eventType`, `country`, `operator`, `mccMnc`. Do NOT use this for daily usage volumes — use `subscriber_usage` for data/voice/SMS byte counts. For real-time events (last 24h), prefer `list_recent_ocs_events` which reads from the ring buffer.
subscriber_active_periodUse this to retrieve the lifetime activity window for a subscriber: the date of first usage and the date of last usage. Useful for churn analysis, dormancy detection, and subscriber lifetime value calculations. Params: `iccid` (subscriber identifier). Returns: object with `firstUseDate` and `lastUseDate` (ISO 8601 strings). Do NOT use this to check current package status — use `list_subscriber_packages`. Do NOT use this for detailed daily usage patterns — use `subscriber_usage`.
get_tariffUse this to retrieve the complete tariff table for a reseller: per-country, per-traffic-type (data/voice/SMS) wholesale rates. Useful for cost analysis, margin calculations, and identifying expensive roaming countries before steering decisions. Params: `resellerId` (integer, optional — omit to use the token owner's reseller). Returns: array of tariff rules, each with `country`, `trafficType`, `rate`, and `currency`. Response key in OCS is `listTariffRule`. Do NOT use this to assign a pricing plan to a subscriber — use `modify_subscriber_mobile_plan`. This shows the RESELLER's wholesale cost, not what end-users are charged.
send_smsUse this to send a mobile-terminated (MT) SMS to a subscriber. Useful for service notifications, package expiry alerts, and support messages sent programmatically from the platform. Internally resolves ICCID → IMSI via a getSingleSubscriber lookup before forwarding to OCS. Params: `iccid` (subscriber identifier), `msisdn` (E.164 phone number of the subscriber), `message` (SMS text content, max 160 chars for single SMS), `sender` (optional sender ID or phone number displayed on the device). Returns: OCS delivery confirmation. Do NOT use this for bulk SMS campaigns — this sends one message per call and is rate-limited. Requires admin scope.
list_network_profilesUse this to list all network profiles available to this reseller. A network profile defines the roaming configuration and operator partnerships for eSIM provisioning. Use profile IDs when creating location zones or configuring steering lists. Params: none. Returns: array of profile records with `profileId`, `name`, and coverage metadata. Do NOT use this to list operator steering configurations — use `list_steering_lists` for that.
diagnose_subscriberSmart diagnostic that chains multiple API calls to analyse why a subscriber may be offline, throttled, or having connectivity issues.
fleet_healthAggregates eSIM status counts, low-balance accounts, and provides a fleet-wide health summary in a single call.
detect_usage_anomaliesAnalyses recent usage to detect anomalies: spikes, off-hours activity, or consumption exhausting the package before expiry.
optimize_packageCompares a subscriber's usage against their current package and all available templates; recommends better-fit packages.
churn_riskAnalyses usage trends, package status, balance, and activity to produce a churn risk score (0-100) with retention recommendations.
audit_network_coverageAnalyses which networks subscribers connect to vs steering lists; flags expensive/non-preferred network roaming.
marketing_intelligenceIdentifies high-growth markets, underserved regions, and revenue concentration. Answers 'where should I target marketing?'
high_cost_subscribersIdentifies subscribers with disproportionately high data consumption relative to package value.
affect_subscriber_phone_numberUse this to assign a phone number (MSISDN) to a subscriber. Supports both fake/test MSISDNs and real production MSISDNs via the `phone_type` parameter. Required for MSISDN assignment workflows before activating voice services. Params: `iccid` (subscriber identifier), `phone_number` (E.164 format, e.g. +31612345678), `phone_type` ('fake' for test/dev, 'real' for production). Returns: updated subscriber record with the new MSISDN. Do NOT use this to check a subscriber's current MSISDN — use `get_subscriber` instead.
get_subscriber_location_by_cell_idUse this to retrieve a subscriber's current location with cell-tower-level precision (MCC, MNC, LAC, Cell ID). More precise than `get_subscriber_location` which returns country/network only. Useful for fraud detection, roaming cost attribution, and fine-grained network troubleshooting. Params: `iccid` (subscriber identifier). Returns: object containing `mcc` (mobile country code), `mnc` (mobile network code), `lac` (location area code), `cellId`, `country`, and `operator`. Do NOT use this for bulk location mapping — it incurs one OCS call per subscriber; use `audit_network_coverage` for fleet-level location analysis instead.
list_destination_listsUse this to retrieve the full catalog of destination lists available to this reseller. A destination list is a named set of phone number prefixes (country codes) that control which numbers a subscriber may call on a voice/SMS package. Returns: array of destination list records, each with `id`, `name`, and prefix count. Do NOT use this to read the prefixes inside a specific list — use `list_destination_prefixes` with a known `destinationListId` for that. Do NOT use this for data-only eSIM products without MOC voice; destination lists only apply to packages with voice/SMS allowances.
modify_subscriber_mobile_planUse this to change the mobile pricing plan assigned to a specific subscriber. The mobile plan determines per-country rates for data, voice, and SMS. Changing the plan takes effect immediately on the next OCS rating cycle. Params: `iccid` (subscriber identifier), `mobile_plan_id` (integer plan ID — obtain valid plan IDs from the OCS reseller settings or `get_tariff`). Returns: updated subscriber record confirming the new plan assignment. Do NOT use this to change package allowances — use `modify_package_limits` for that. Do NOT use this to change account-level pricing — this only affects the individual subscriber.
modify_subscriber_package_active_periodUse this to change the start and/or end date of a prepaid package's active period for a specific subscriber. This controls WHEN the package runs, not what it contains. Useful for scheduling packages in advance (e.g. activate on arrival date) or extending a package that would otherwise expire while the subscriber is still travelling. Params: `iccid` (subscriber identifier), `package_id` (from `list_subscriber_packages`), `start_date` (ISO 8601 date, optional), `end_date` (ISO 8601 date, optional). Returns: updated package record with new active period. Do NOT use this to change a package's data/voice allowance — use `modify_package_limits`. Do NOT use this to change the expiry date of a package — use `modify_package_expiry`.
modify_subscriber_voip_planUse this to change the VoIP pricing plan assigned to a specific subscriber. VoIP plans control billing rates for VoIP calls made through the OCS platform, separate from the standard mobile plan's call rates. Params: `iccid` (subscriber identifier), `voip_plan_id` (integer VoIP plan ID from the OCS reseller settings). Returns: updated subscriber record confirming the new VoIP plan. Do NOT use this for mobile (non-VoIP) plan changes — use `modify_subscriber_mobile_plan`. For data-only eSIM products without VoIP services this tool has no effect.
push_steering_to_subscriberUse this AFTER `modify_subscriber_steering_list` to actively push the updated OPLMN (operator preference list) to the subscriber's physical eSIM/SIM. Without this call, the steering list assignment change is recorded in OCS but the device continues using the old operator preference list until it performs a network re-registration. This is required for immediate operator switching (e.g. steering a subscriber away from an expensive roaming partner in real time). Params: `iccid` (subscriber identifier). Returns: push confirmation from OCS with delivery status. Do NOT call this without first calling `modify_subscriber_steering_list` — pushing without an assigned steering list is a no-op and wastes an OCS call.
reset_subscriber_gz_counterADMIN: Use this to reset the Gz (Diameter accounting) usage counter for a subscriber. Typically used after a billing dispute or test-cycle reset where accumulated usage data must be cleared. This operation is IRREVERSIBLE — the usage history for the current counter period is permanently zeroed. Params: `iccid` (subscriber identifier). Returns: OCS confirmation of the counter reset. Always call `subscriber_usage` first to capture the usage snapshot before resetting. Do NOT use this to pause data usage — use `set_subscriber_traffic_restrictions` with `dataAllowed=false` instead.
carrier_askUse this when you want to perform a carrier operation but don't know which specific tool to call. Describe your intent in plain language and carrier_ask will identify the correct tool(s) and suggest the required parameters. For simple read intents, it executes directly and returns results. For destructive operations it returns a confirm_token that you must pass in a second call. Params: `intent` (string — natural language description of what you want to do, e.g. 'throttle ICCID 8932... to 256kbps' or 'show me Mango fleet usage this week'), `context` (optional object with `iccid`, `account_id`, `reseller_id` if already known). Returns: RouteResult — one of: confirmed (read op executed), pending_confirm (destructive, returns confirm_token), ambiguous (clarifying question), none (no match). Do NOT use this as a substitute for calling tools directly when you know the right tool — direct tool calls are faster and cheaper. Use carrier_ask only for ambiguous or exploratory intents. STATUS: scaffold — routing engine not yet active (follow-up PR). Currently echoes intent back.
Carrier MCP: Give Your AI Agent Global Connectivity: подключить к Claude, ChatGPT, Cursor · Connectors.fun