134 tools. Everything exposed.
69 read, 44 write, 21 admin. Scope gates: read (Free), write (Pro), admin (Enterprise). Each tool below uses the full description from the registry.
Markdown · JSON · All downloads
Read tools
list_reseller_accountsreadUse this to enumerate the accounts (sub-resellers or customer accounts) BELOW a reseller.›
list_reseller_accountsUse this to enumerate the accounts (sub-resellers or customer accounts) BELOW a reseller. Params: `resellerId` (integer, optional — omit to list accounts under the token owner's reseller). Returns: `{ summary, reseller: [ { id, name, account: [ { id, name, balance, packageOnly } ] } ] }` — the accounts are NESTED under each reseller, not a flat top-level array. `summary.total` therefore counts RESELLERS; the account count is `summary.nested.accounts`. For any question about accounts use that, never `total`. 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. Do NOT use this to find a reseller's PARENT, balance or charging plans — those are above or on the reseller itself, not in this list; use `get_reseller_info`.
# Available on Free tier
# In Claude:
Use the list_reseller_accounts tool. Use this to enumerate the accounts (sub-resellers or customer accounts) BELOW a reseller.get_reseller_inforeadUse this to retrieve full details for a reseller: identity and PARENT in the reseller hierarchy, balance, traffic configuration, charging plans, and contact info.›
get_reseller_infoUse this to retrieve full details for a reseller: identity and PARENT in the reseller hierarchy, balance, traffic configuration, charging plans, and contact info. This is the tool that answers who sits ABOVE a reseller, and which mobile or VoIP charging plan it is on. Params: `resellerId` (integer, optional — omit to return the token owner's reseller). Returns: `id`, `name`, `parentId` and `parentName` (the reseller directly above this one), `balance` (a decimal STRING, e.g. "46.31"), `cdrFolder`, `trafficInfo` (relayGy / relayCallSms / relayLU / relayVoIP booleans), `chargingInfo.mobilePlan` and `chargingInfo.voipPlan` (each `{id, name}`), and `contactInfo`. Do NOT use this to list all accounts under a reseller — use `list_reseller_accounts` for that. Do NOT use `list_reseller_accounts` to find a reseller's parent or charging plans: it returns the accounts BELOW a reseller and carries neither.
# Available on Free tier
# In Claude:
Use the get_reseller_info tool. Use this to retrieve full details for a reseller: identity and PARENT in the reseller hierarchy, balance, traffic configuration, charging plans, and contact info.esim_status_per_accountreadUse this to get eSIM status counts broken down by account: active, suspended, inventory (not yet activated), and other states.›
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). `resellerId` (integer, optional — omit to use the token owner's 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.
# Available on Free tier
# In Claude:
Use the esim_status_per_account tool. Use this to get eSIM status counts broken down by account: active, suspended, inventory (not yet activated), and other states.list_sponsorsreadUse this to list all sponsor networks (eSIM sponsor carriers) available to this reseller.›
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.
# Available on Free tier
# In Claude:
Use the list_sponsors tool. Use this to list all sponsor networks (eSIM sponsor carriers) available to this reseller.list_steering_listsreadUse this to retrieve all network steering lists configured for this reseller.›
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: an array of steering list records with `steeringListId`, `name`, and configured operators. An empty catalog is `[]`. When OCS answers a successful list with null, that null is this empty array, not an error. 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.
# Available on Free tier
# In Claude:
Use the list_steering_lists tool. Use this to retrieve all network steering lists configured for this reseller.get_subscriberreadUse this as the primary lookup for a single subscriber by ICCID or MSISDN.›
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. Optional: `with_gz_counter` (boolean) — when true, includes `greenZoneCounter` in the response: { subscriberId, volumeOnGZ (bytes consumed on reseller whitelist hosts/IPs after bundle depletion), lastResetDate, lastUpdateDate }. Omit or set false to skip the GZ counter (default). 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.
# Available on Free tier
# In Claude:
Use the get_subscriber tool. Use this as the primary lookup for a single subscriber by ICCID or MSISDN.list_subscribersreadUse this to list subscribers with optional filters and pagination.›
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. OCS needs a search key: `imsi`, `iccid`, `activationCode`, `accountId` or `msisdn`. With none, Carrier scopes the call to this organization's default account (its preferred_account_id, else the lowest-id account under its reseller) and says so in `default_account`. If no account can be found the call fails with an error — it never returns an empty list. Params: `imsi` (string), `iccid` (string), `activationCode` (string), `accountId` (integer), `msisdn` (string), `status` (string, e.g. 'ACTIVE'/'SUSPENDED'), `offset` (integer, pagination — default 0), `limit` (integer, max results — always set to avoid unbounded fetches; recommended max 100 per call). Returns: `{ summary, subscriberList: [...] }` — subscriber summary records with ICCID, status and account, behind a server-counted `summary.total` (rows returned) and `summary.breakdown.status`. Answer 'how many' from `summary`, not by counting rows — but when `summary.moreAvailable` is set this is one page, so report `summary.upstreamTotal` for the fleet-wide figure, never `total`. Do NOT use this to fetch full details for a specific subscriber — use `get_subscriber` for that.
# Available on Free tier
# In Claude:
Use the list_subscribers tool. Use this to list subscribers with optional filters and pagination.get_sim_provider_statusreadUse this to check the physical SIM/eSIM card status at the SIM provider level (ENABLED, DISABLED, DELETED) — distinct from the OCS subscriber status.›
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: an array of provider status periods. Each entry has `status`, `start`, `end`, `profileType`, and `statusModification`. Do NOT use this to change the SIM status — use `change_sim_status` for that.
# Available on Free tier
# In Claude:
Use the get_sim_provider_status tool. Use this to check the physical SIM/eSIM card status at the SIM provider level (ENABLED, DISABLED, DELETED) — distinct from the OCS subscriber status.get_subscriber_locationreadUse this to get where one subscriber was last seen, derived from the cell tower its most recent traffic went through.›
get_subscriber_locationUse this to get where one subscriber was last seen, derived from the cell tower its most recent traffic went through. This is the tool to reach for whenever you have an ICCID — it does the tower lookup for you. Params: `iccid` (subscriber identifier). Returns: the subscriber's last-known location record from OCS, as reported for its most recent session. Do NOT use this when you have raw cell parameters (radio type, MCC, MNC, LAC, cell id) and no subscriber — `get_subscriber_location_by_cell_id` resolves those directly and is the more accurate of the two. Do NOT use this to check which country a subscriber has moved through over time — use `subscriber_country_history`.
# Available on Free tier
# In Claude:
Use the get_subscriber_location tool. Use this to get where one subscriber was last seen, derived from the cell tower its most recent traffic went through.hlr_get_bitratereadUse this to read the current HLR-level bandwidth cap applied to a subscriber.›
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.
# Available on Free tier
# In Claude:
Use the hlr_get_bitrate tool. Use this to read the current HLR-level bandwidth cap applied to a subscriber.list_subscriber_packagesreadUse this to retrieve all prepaid packages currently assigned to a subscriber.›
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: `{ summary, packages: [...] }` — package records with `packageId`, `name`, `status`, `dataLimit`, `dataUsed`, `expirationDate` and a `recurring` flag, behind a server-counted `summary.total` and a `summary.breakdown` over status and recurring. Answer 'how many' from `summary`, not by counting rows. Do NOT use this to browse the product catalog — use `list_package_templates` for that.
# Available on Free tier
# In Claude:
Use the list_subscriber_packages tool. Use this to retrieve all prepaid packages currently assigned to a subscriber.list_package_templatesreadUse this to browse the product catalog of prepaid package templates available for assignment.›
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: none — returns the whole catalog for the token owner's reseller. Returns: `{ summary, template: [...] }`. `summary.total` is the number of templates, counted by the server over the complete catalog, and `summary.breakdown` counts the templates per `recurring` value and per location zone. Answer any 'how many' question from `summary` — it is authoritative, and counting the rows yourself gets it wrong. Each row carries `prepaidpackagetemplateid`, `prepaidpackagetemplatename`, `databyte` (bytes), `cost`, `perioddays`, `locationzoneid`, `rdbLocationZones.locationzonename` and `recurring`. Do NOT use this to list packages assigned to a specific subscriber — use `list_subscriber_packages`.
# Available on Free tier
# In Claude:
Use the list_package_templates tool. Use this to browse the product catalog of prepaid package templates available for assignment.list_location_zonesreadUse this to list countries and networks within a specific location zone.›
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, REQUIRED — OCS takes a bare zone id, not an object; there is no unfiltered call). 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`.
# Available on Free tier
# In Claude:
Use the list_location_zones tool. Use this to list countries and networks within a specific location zone.list_detailed_location_zonesreadUse this as the preferred way to list location zones with full detail: included countries, operator networks, zone IDs, and names.›
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); `verbose` (optional boolean, default false — returns the full untouched zone shape with a smaller operator-entry budget). Returns BY DEFAULT a projected result: `totalZones`, `returnedZones`, `totalOperators`, `returnedOperators`, `truncated`, a `fields` legend, and `zones[]` each with `zoneId`, `zoneName`, `operatorCount` and short-keyed `operators[]` (`net`, `iso`, `op`). Per-operator mccMncs, tadigs, continent, countryCode, countryName, utcOffset and the repeated reseller object are dropped unless `verbose` is true. Operator entries are capped at 2000 so the result fits the MCP transport (issue #663); when the cap bites, `truncated` is true and `note` says so — never silently. Do NOT use `list_location_zones` when you need reliable data — always use this tool instead.
# Available on Free tier
# In Claude:
Use the list_detailed_location_zones tool. Use this as the preferred way to list location zones with full detail: included countries, operator networks, zone IDs, and names.list_destination_prefixesreadUse this to list the phone number prefixes (country dialling codes) within a specific named destination list.›
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, REQUIRED — OCS takes a bare list id, not an object; there is no unfiltered call). 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.
# Available on Free tier
# In Claude:
Use the list_destination_prefixes tool. Use this to list the phone number prefixes (country dialling codes) within a specific named destination list.subscriber_usagereadUse this to retrieve daily data, voice, and SMS usage for a subscriber over a date range.›
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. Each record contains a `usageType` integer code: 1=MOC (mobile-originated call), 15=MTC (mobile-terminated call), 21=MO-SMS (outbound SMS), 22=MT-SMS (inbound SMS), 33=Data, 40=MOC VoIP, 41=MTC VoIP. 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`.
# Available on Free tier
# In Claude:
Use the subscriber_usage tool. Use this to retrieve daily data, voice, and SMS usage for a subscriber over a date range.subscriber_network_eventsreadUse this to retrieve per-session charging and network records for a subscriber.›
subscriber_network_eventsUse this to retrieve per-session charging and network records for a subscriber. Useful for connectivity troubleshooting, roaming verification, fraud patterns, and cost attribution per operator. Max 7 days per query, one subscriber per call, no bulk endpoint. Params: `iccid` (subscriber identifier), `startDate` (YYYY-MM-DD, inclusive), `endDate` (YYYY-MM-DD, inclusive, max 7 days from start). Returns SIX interface buckets, not a flat array: `mapAnswer`, `s6aAnswer`, `gyAnswer`, `camelAnswer`, `mocAnswer`, `mtcAnswer`. The data you almost always want is at `gyAnswer.events` — Gy charging records, one per session update. Each carries `eventTime`, `operator`, `countryName`, `countryAlpha2`, `usedUnits`, `usedUnitsPerRG`, `userLocationInfoMCC`, `userLocationInfoMNC`, `sgsnMccMnc`, `ratTypes`, `imei`, `apn`, `msisdn`, `requestType` (Init/Update/Term), `ratingGroup` and `session`. `usedUnits` is a STRING of bytes ('0', '5080') — summing without a numeric cast silently yields zero and looks like a subscriber with no traffic. Because every record carries its own country, this is enough to reconstruct travel history without the Relay LU webhook. Responses are large: one subscriber over one week measured 165 KB across 94 records. 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.
# Available on Free tier
# In Claude:
Use the subscriber_network_events tool. Use this to retrieve per-session charging and network records for a subscriber.subscriber_active_periodreadUse this to retrieve the lifetime activity window for a subscriber: the date of first usage and the date of last usage.›
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`.
# Available on Free tier
# In Claude:
Use the subscriber_active_period tool. Use this to retrieve the lifetime activity window for a subscriber: the date of first usage and the date of last usage.get_tariffreadUse this to retrieve the tariff table for a reseller: per-country, per-operator wholesale data/voice/SMS rates.›
get_tariffUse this to retrieve the tariff table for a reseller: per-country, per-operator wholesale data/voice/SMS 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); `country` (optional, ISO-3166 alpha-2 such as "nl" OR a full country name such as "Netherlands", case-insensitive); `trafficType` (optional, "data" | "voice" | "sms" — keeps only rules whose corresponding rate is greater than zero); `verbose` (optional boolean, default false — returns the full untouched OCS rule shape, capped at 250 rows, so combine it with the filters). Returns BY DEFAULT a projected result: `totalRules`, `matchedRules`, `returnedRules`, `truncated`, a hoisted `currency`, a `fields` legend and `rules[]` of short-keyed rows (`iso`, `op`, `data`, `moCall`, `mtCall`, `moSms`, `mtSms`, `active`). Zero rates and inactive flags are omitted per row. Nested operator detail (mccMncs, tadigs, continent, countryCode, utcOffset), the sponsor object, plan ids and the validity/discount flags are dropped unless `verbose` is true. Rows are capped at 3000; when the cap bites, `truncated` is true and `note` says so explicitly and names the filter params — the result is never silently shortened. Filtering happens server-side on the complete OCS table, so a filtered call sees every matching rule. Response key in OCS is `listTariffRule`. This is the slowest tool on the platform: the OCS table is ~3.4 MB and takes 3 s in a fast window and up to ~2 minutes in a slow one, so the call carries a 180 s budget. Expect to wait, and do not call it in a loop. 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.
# Available on Free tier
# In Claude:
Use the get_tariff tool. Use this to retrieve the tariff table for a reseller: per-country, per-operator wholesale data/voice/SMS rates.list_network_profilesreadUse this to list all network profiles available to this reseller.›
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.
# Available on Free tier
# In Claude:
Use the list_network_profiles tool. Use this to list all network profiles available to this reseller.diagnose_subscriberreadSmart diagnostic that chains multiple API calls to analyze why a subscriber may be offline, throttled, or having connectivity issues.›
diagnose_subscriberSmart diagnostic that chains multiple API calls to analyze why a subscriber may be offline, throttled, or having connectivity issues. Returns a structured diagnosis with root cause analysis and recommended actions.
# Available on Free tier
# In Claude:
Use the diagnose_subscriber tool. Smart diagnostic that chains multiple API calls to analyze why a subscriber may be offline, throttled, or having connectivity issues.fleet_healthreadUse this for a one-call overview of the whole fleet: eSIM status counts, accounts running low on balance, and a summary naming the accounts that need attention.›
fleet_healthUse this for a one-call overview of the whole fleet: eSIM status counts, accounts running low on balance, and a summary naming the accounts that need attention. Chains several OCS calls so you do not have to. Params: `accountId` (integer, optional — omit to cover every account under the reseller). Returns: a markdown report — eSIM status counts with a utilisation percentage, an account summary, the accounts under 10 balance, and a healthy/warning/critical verdict. A section reads 'Unavailable' when its underlying OCS call failed, so check for that before reporting the fleet as healthy. Do NOT use this when the client can render an interactive panel and the user wants charts — `fleet_health_app` returns the same data as a dashboard. Do NOT use this to investigate one subscriber — use `diagnose_subscriber`.
# Available on Free tier
# In Claude:
Use the fleet_health tool. Use this for a one-call overview of the whole fleet: eSIM status counts, accounts running low on balance, and a summary naming the accounts that need attention.detect_usage_anomaliesreadAnalyzes a subscriber's recent usage patterns over the last 7 days to detect anomalies: sudden spikes, unusual off-hours activity, or consumption rates that would exhaust the package before expiry.›
detect_usage_anomaliesAnalyzes a subscriber's recent usage patterns over the last 7 days to detect anomalies: sudden spikes, unusual off-hours activity, or consumption rates that would exhaust the package before expiry.
# Available on Free tier
# In Claude:
Use the detect_usage_anomalies tool. Analyzes a subscriber's recent usage patterns over the last 7 days to detect anomalies: sudden spikes, unusual off-hours activity, or consumption rates that would exhaust the package before expiry.optimize_packagereadCompares a subscriber's actual usage against their current package and all available templates.›
optimize_packageCompares a subscriber's actual usage against their current package and all available templates. Recommends better-fit packages to reduce waste or prevent overages. Calculates potential savings.
# Available on Free tier
# In Claude:
Use the optimize_package tool. Compares a subscriber's actual usage against their current package and all available templates.churn_riskreadAnalyzes a subscriber's usage trends, package status, balance, and activity to produce a churn risk score (0-100) with contributing factors and retention recommendations.›
churn_riskAnalyzes a subscriber's usage trends, package status, balance, and activity to produce a churn risk score (0-100) with contributing factors and retention recommendations.
# Available on Free tier
# In Claude:
Use the churn_risk tool. Analyzes a subscriber's usage trends, package status, balance, and activity to produce a churn risk score (0-100) with contributing factors and retention recommendations.audit_network_coveragereadAnalyzes which networks your subscribers are actually connecting to in a given country or across all countries.›
audit_network_coverageAnalyzes which networks your subscribers are actually connecting to in a given country or across all countries. Compares against your steering lists to identify mismatches — subscribers roaming on expensive or non-preferred networks. Use this to answer: 'Am I using the right networks in country X?'
# Available on Free tier
# In Claude:
Use the audit_network_coverage tool. Analyzes which networks your subscribers are actually connecting to in a given country or across all countries.marketing_intelligencereadAnalyzes your subscriber base to identify high-growth markets, underserved regions, and revenue concentration.›
marketing_intelligenceAnalyzes your subscriber base to identify high-growth markets, underserved regions, and revenue concentration. Answers: 'Which countries should I target with marketing?' and 'Where are my most valuable subscribers?'
# Available on Free tier
# In Claude:
Use the marketing_intelligence tool. Analyzes your subscriber base to identify high-growth markets, underserved regions, and revenue concentration.high_cost_subscribersreadIdentifies subscribers with disproportionately high data consumption relative to their package value.›
high_cost_subscribersIdentifies subscribers with disproportionately high data consumption relative to their package value. Finds subscribers burning through data at rates that erode margins. Answers: 'Which subscribers are costing me money?'
# Available on Free tier
# In Claude:
Use the high_cost_subscribers tool. Identifies subscribers with disproportionately high data consumption relative to their package value.detect_country_entryreadDetects when a subscriber has entered a new country by reading networkInfo.lastMcc from getSingleSubscriber (one cheap OCS call — avoids the per-call cost of getSubscriberLocationByCellId).›
detect_country_entryDetects when a subscriber has entered a new country by reading networkInfo.lastMcc from getSingleSubscriber (one cheap OCS call — avoids the per-call cost of getSubscriberLocationByCellId). Resolves MCC → ISO 3166-1 alpha-2 and optionally diffs against a caller-supplied expectedCountry to return countryChanged. Designed for downstream country-entry upsell workflows (e.g. mango.talk SMS/push offers). NOT AN AI TOOL: this is a deterministic MCC lookup and returns no model-written analysis, unlike the eight intelligence composites. COST NOTE: This tool makes exactly one OCS call per invocation. Consumers running polling crons MUST enforce their own rate floor — this layer provides no throttle.
# Available on Free tier
# In Claude:
Use the detect_country_entry tool. Detects when a subscriber has entered a new country by reading networkInfo.lastMcc from getSingleSubscriber (one cheap OCS call — avoids the per-call cost of getSubscriberLocationByCellId).get_subscriber_location_by_cell_idreadPowered by Bridge4IP GeoSense — cell-level location resolution with sub-cell accuracy where available.›
get_subscriber_location_by_cell_idPowered by Bridge4IP GeoSense — cell-level location resolution with sub-cell accuracy where available. Use this to resolve a cell tower tuple (radio type + MCC + MNC + LAC + optional cellId) to a latitude/longitude estimate. No subscriber identifier required — caller supplies cell parameters directly. Useful for fraud detection, roaming cost attribution, and network troubleshooting when you have raw cell info from an external source (e.g. a Relay LU webhook event). Params: `radio_type` ('2G'|'3G'|'4G'|'5G'|'NB-IoT'; also accepts 'NBIOT'|'nb-iot'|'nbiot' — normalised to 'NB-IoT'), `mcc` (int), `mnc` (int), `lac` (int), `cell_id` (int, optional but strongly recommended for accuracy), `signal_strength` (number dBm, optional). Returns: { latitude, longitude, accuracy } — accuracy is median error in meters at 50% confidence. Without cell_id accuracy degrades significantly (>10 km). Do NOT use this for bulk fleet location sweeps — one OCS call per cell tower; use `audit_network_coverage` for fleet-level analysis instead.
# Available on Free tier
# In Claude:
Use the get_subscriber_location_by_cell_id tool. Powered by Bridge4IP GeoSense — cell-level location resolution with sub-cell accuracy where available.list_destination_listsreadUse this to retrieve the full catalog of destination lists available to this reseller.›
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.
# Available on Free tier
# In Claude:
Use the list_destination_lists tool. Use this to retrieve the full catalog of destination lists available to this reseller.carrier_webhook_configreadUse this to check the current Bridge4IP webhook and relay flag configuration for this reseller.›
carrier_webhook_configUse this to check the current Bridge4IP webhook and relay flag configuration for this reseller. Returns the active state of all four traffic relay flags: Relay LU (Update Location — cell tower changes, closest to country-change signal), Relay Gy (mobile data usage events), Relay VoIP (VoIP usage events), Relay calls+SMS (call and SMS events). Also returns which notification webhooks are enabled (prepaid package usage threshold, reseller low credit, ES2 eSIM status, recurring packages) as a passthrough object. All relay/notification configuration is done in the OCS portal UI — this tool is READ-ONLY and reflects current state. Relay LU is the highest-value flag: when active, Bridge4IP pushes real-time Update Location events (mcc, mnc, lac, cellId) to the configured HTTP endpoint.
# Available on Free tier
# In Claude:
Use the carrier_webhook_config tool. Use this to check the current Bridge4IP webhook and relay flag configuration for this reseller.list_subscriber_voip_tariffreadUse this to list VoIP tariff definitions available to a reseller.›
list_subscriber_voip_tariffUse this to list VoIP tariff definitions available to a reseller. Despite the OCS method name (listSubscriberVoipTariff), this is a reseller-level catalog listing — not a per-ICCID lookup. Use results (or get_reseller_info chargingInfo.voipPlan.id) to feed `list_voip_tariff_rule` for rate detail. Params: `reseller_id` (integer, optional — omit to use the token owner's reseller). Returns: OCS VoIP tariff records (may be empty when no VoIP catalog is configured). Do NOT use this for mobile wholesale rates — use `get_tariff` (getCustomerTariff). Do NOT use this to assign a VoIP plan — use `modify_subscriber_voip_plan`.
# Available on Free tier
# In Claude:
Use the list_subscriber_voip_tariff tool. Use this to list VoIP tariff definitions available to a reseller.list_voip_tariff_rulereadUse this to list the rate rules (costs) for a specific VoIP plan/tariff.›
list_voip_tariff_ruleUse this to list the rate rules (costs) for a specific VoIP plan/tariff. OCS expects a bare integer plan id in the request body (not an object). Obtain plan ids from `get_reseller_info` → chargingInfo.voipPlan.id, or from `list_subscriber_voip_tariff`. Params: `voip_plan_id` (integer, required — VoIP plan/tariff id). Returns: VoIP tariff rule rows for that plan, or an OCS error when the id is unknown. Do NOT use this for mobile (non-VoIP) wholesale rates — use `get_tariff`. Do NOT use this to change a subscriber's VoIP plan — use `modify_subscriber_voip_plan`.
# Available on Free tier
# In Claude:
Use the list_voip_tariff_rule tool. Use this to list the rate rules (costs) for a specific VoIP plan/tariff.carrier_askreadUse this when you want to perform a carrier operation but don't know which specific tool to call.›
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), `context` (optional: iccid, account_id, reseller_id if already known). Returns: RouteResult — confirmed | pending_confirm | ambiguous | none. Do NOT use this when you know the right tool — direct calls are faster and cheaper. Do NOT confuse this with `ui_agent_ask`: that one drives a real browser on the open web and costs $0.20-1.00 a run; this one only routes to tools already on this server and never leaves it.
# Available on Free tier
# In Claude:
Use the carrier_ask tool. Use this when you want to perform a carrier operation but don't know which specific tool to call.carrier_ask_describereadGet full documentation for any registered Carrier MCP tool: description, parameters, 2-3 example invocations, required scope, destructive flag, and guidance.›
carrier_ask_describeGet full documentation for any registered Carrier MCP tool: description, parameters, 2-3 example invocations, required scope, destructive flag, and guidance. Params: `tool_name` (exact MCP tool name, e.g. 'assign_package'). Returns: structured tool metadata. Does NOT execute the tool.
# Available on Free tier
# In Claude:
Use the carrier_ask_describe tool. Get full documentation for any registered Carrier MCP tool: description, parameters, 2-3 example invocations, required scope, destructive flag, and guidance.list_recent_ocs_eventsreadReturn the last N OCS events buffered for a given ICCID.›
list_recent_ocs_eventsReturn the last N OCS events buffered for a given ICCID. Events include eSIM activations, disable, package expiry warnings, location changes, and balance alerts. Location for every SIM under reseller 1170 (all child accounts) lands on this buffer; each event may include account_id. Buffer holds up to 50 events per ICCID, 24h TTL. Use this when a user asks 'what happened to ICCID X recently' or 'why did subscriber Y go offline'.
# Available on Free tier
# In Claude:
Use the list_recent_ocs_events tool. Return the last N OCS events buffered for a given ICCID.rate_limit_statusreadInspect Bridge4IP OCS rate-limit governor state — bucket fill levels, per-endpoint limits, and 80% alert thresholds.›
rate_limit_statusInspect Bridge4IP OCS rate-limit governor state — bucket fill levels, per-endpoint limits, and 80% alert thresholds. Use this to answer: 'are we rate limited', 'check ocs quota', 'how full is the rate limit bucket', 'rate limit status'. Params: `endpoint` (optional — OCS camelCase method name to inspect a single bucket, e.g. 'subscriberUsageOverPeriod'; omit for all monitored endpoints). Returns: per-endpoint { limit_per_min, batch_cap_per_min, calls_in_window, batch_calls_in_window, utilisation_pct, alert (true when ≥80% of limit) }. Note: counts come from the in-process sliding-window log (same key as OCS calls: API token + endpoint) — they reset when the Worker isolate recycles. Use as a relative signal, not an exact counter. Do NOT use this to adjust limits — limits are set by Bridge4IP contract and cannot be changed via MCP.
# Available on Free tier
# In Claude:
Use the rate_limit_status tool. Inspect Bridge4IP OCS rate-limit governor state — bucket fill levels, per-endpoint limits, and 80% alert thresholds.fleet_health_appreadDraw the fleet overview as an interactive panel: eSIM status, per-account breakdown and low-balance alerts.›
fleet_health_appDraw the fleet overview as an interactive panel: eSIM status, per-account breakdown and low-balance alerts. Returns structuredContent for the panel, so it only helps a client that can render MCP UI resources. Do NOT use this when the answer has to be readable text, or in any headless or scripted context — `fleet_health` returns the same data as prose.
# Available on Free tier
# In Claude:
Use the fleet_health_app tool. Draw the fleet overview as an interactive panel: eSIM status, per-account breakdown and low-balance alerts.subscriber_investigator_appreadDraw a single-subscriber drill-down panel: identity, active packages, 7-day usage timeline and 72h network events.›
subscriber_investigator_appDraw a single-subscriber drill-down panel: identity, active packages, 7-day usage timeline and 72h network events. Returns structuredContent for the panel, so it only helps a client that can render MCP UI resources. Read-only — this app never writes. Do NOT use this when the answer has to be readable text, or in any headless or scripted context — `diagnose_subscriber` returns a judged report, and `get_subscriber` returns the raw record, as prose.
# Available on Free tier
# In Claude:
Use the subscriber_investigator_app tool. Draw a single-subscriber drill-down panel: identity, active packages, 7-day usage timeline and 72h network events.credit_balancereadRead how much of this Carrier MCP plan is left: credits remaining, daily free credits, overage state, volume discount tier, and billing threshold state.›
credit_balanceRead how much of this Carrier MCP plan is left: credits remaining, daily free credits, overage state, volume discount tier, and billing threshold state. Credits meter tool calls against the plan — they are not money and not a telecom balance. Params: none (the plan is taken from the session). Returns: { tier, credits: { monthly_allotment, consumed, remaining, rollover_applied, overage_consumed, overage_billed_cents }, daily_free, volume_discount, billing, rollover, reset_at, credit_costs } — credit_costs is the per-scope cost of one call (read/write/admin), so a remaining balance does not translate one-to-one into calls left. Do NOT use this for the prepaid wallet Carrier bills eSIM spend against — use `wallet_balance`. Do NOT use this for an OCS reseller or subscriber balance — use `get_reseller_info` or `get_subscriber`.
# Available on Free tier
# In Claude:
Use the credit_balance tool. Read how much of this Carrier MCP plan is left: credits remaining, daily free credits, overage state, volume discount tier, and billing threshold state.usage_projectionreadProject your credit usage and costs for the remainder of the billing period based on current consumption rate.›
usage_projectionProject your credit usage and costs for the remainder of the billing period based on current consumption rate. Includes overage cost estimates and recommendations for plan changes.
# Available on Free tier
# In Claude:
Use the usage_projection tool. Project your credit usage and costs for the remainder of the billing period based on current consumption rate.pricing_plansreadView all available Carrier MCP pricing plans with credit allotments, features, overage rates, and volume discount tiers.›
pricing_plansView all available Carrier MCP pricing plans with credit allotments, features, overage rates, and volume discount tiers. Use this to compare plans and understand upgrade benefits.
# Available on Free tier
# In Claude:
Use the pricing_plans tool. View all available Carrier MCP pricing plans with credit allotments, features, overage rates, and volume discount tiers.billing_eventsreadView recent billing threshold events: notifications, invoice triggers, hard cap alerts, and overage pauses.›
billing_eventsView recent billing threshold events: notifications, invoice triggers, hard cap alerts, and overage pauses. Useful for monitoring spend and understanding billing activity.
# Available on Free tier
# In Claude:
Use the billing_events tool. View recent billing threshold events: notifications, invoice triggers, hard cap alerts, and overage pauses.service_catalogreadBrowse the Carrier service catalog — discover available services, their requirements, endpoints, and documentation.›
service_catalogBrowse the Carrier service catalog — discover available services, their requirements, endpoints, and documentation. Filter by category or tier. Similar to `stripe projects catalog`.
# Available on Free tier
# In Claude:
Use the service_catalog tool. Browse the Carrier service catalog — discover available services, their requirements, endpoints, and documentation.credential_statusreadReport on the stored eSIMVault credential without changing it: whether a token is present, whether it is encrypted, how old it is, and whether rotation is recommended (over 90 days).›
credential_statusReport on the stored eSIMVault credential without changing it: whether a token is present, whether it is encrypted, how old it is, and whether rotation is recommended (over 90 days). Params: none (the org or user is taken from the session). Returns: { credentials: { esimvault_token: { present, encrypted, last_updated, age_days, rotation_recommended }, oauth }, environment, recommendations }. Never reveals the token itself. Do NOT use this to replace the token — that is `rotate_credentials`, which invalidates the current one.
# Available on Free tier
# In Claude:
Use the credential_status tool. Report on the stored eSIMVault credential without changing it: whether a token is present, whether it is encrypted, how old it is, and whether rotation is recommended (over 90 days).llm_contextreadGenerate a comprehensive LLM context document describing your Carrier environment, available tools, current tier, usage patterns, and best practices.›
llm_contextGenerate a comprehensive LLM context document describing your Carrier environment, available tools, current tier, usage patterns, and best practices. Designed for AI agents that need to understand your setup. Similar to `stripe projects llm-context`.
# Available on Free tier
# In Claude:
Use the llm_context tool. Generate a comprehensive LLM context document describing your Carrier environment, available tools, current tier, usage patterns, and best practices.environment_inforeadView your Carrier environment configuration — active organization, reseller details, connected services, and deployment environment.›
environment_infoView your Carrier environment configuration — active organization, reseller details, connected services, and deployment environment. Similar to `stripe projects status`.
# Available on Free tier
# In Claude:
Use the environment_info tool. View your Carrier environment configuration — active organization, reseller details, connected services, and deployment environment.ui_agent_schedule_listreadLists all Steel recurring schedules stored in KV.›
ui_agent_schedule_listLists all Steel recurring schedules stored in KV. Returns schedule IDs, names, cron expressions, status (active/paused), and next/last run timestamps.
# Available on Free tier
# In Claude:
Use the ui_agent_schedule_list tool. Lists all Steel recurring schedules stored in KV.ui_agent_usagereadReturns an estimated Anthropic API cost for Steel agent tasks dispatched this calendar month.›
ui_agent_usageReturns an estimated Anthropic API cost for Steel agent tasks dispatched this calendar month. Steel has no native usage API — cost is estimated from KV task records using claude-sonnet-4-6 pricing ($3.00/MTok in, $15.00/MTok out, ~$0.21 per typical 15-step task). Use this to track Carrier's Steel/Anthropic credit burn.
# Available on Free tier
# In Claude:
Use the ui_agent_usage tool. Returns an estimated Anthropic API cost for Steel agent tasks dispatched this calendar month.ui_agent_list_pendingreadReturns all browser automation tasks that are currently paused waiting for human input.›
ui_agent_list_pendingReturns all browser automation tasks that are currently paused waiting for human input. Shows the agent's question, task URL, and when it was asked. Entries expire after 24 hours. Use ui_agent_reply to resume a task.
# Available on Free tier
# In Claude:
Use the ui_agent_list_pending tool. Returns all browser automation tasks that are currently paused waiting for human input.stripe_connect_statusreadRead-only: returns the Stripe Connect account status, capabilities, and requirements for the authenticated operator.›
stripe_connect_statusRead-only: returns the Stripe Connect account status, capabilities, and requirements for the authenticated operator.
# Available on Free tier
# In Claude:
Use the stripe_connect_status tool. Read-only: returns the Stripe Connect account status, capabilities, and requirements for the authenticated operator.stripe_connect_payoutsreadList money Stripe has already sent from the operator's connected account to their bank, newest first.›
stripe_connect_payoutsList money Stripe has already sent from the operator's connected account to their bank, newest first. Read-only. Params: `limit` (1-50, default 10), `status` (optional Stripe payout status, e.g. 'paid', 'pending', 'failed'). Returns: { payouts: [{ id, amount, currency, status, arrival_date, automatic, created }], has_more } — amount in the currency's smallest unit. Do NOT use this for money still sitting at Stripe and not yet paid out — use `stripe_connect_balance`.
# Available on Free tier
# In Claude:
Use the stripe_connect_payouts tool. List money Stripe has already sent from the operator's connected account to their bank, newest first.stripe_connect_charges_listreadList recent payments (charges) on the operator's connected Stripe account, e.g.›
stripe_connect_charges_listList recent payments (charges) on the operator's connected Stripe account, e.g. storefront purchases. Read-only. Params: limit (1-100), starting_after (charge id for paging). Returns: { charges: [{ id, amount, amount_refunded, currency, status, paid, captured, refunded, created, payment_intent, payment_method_type, metadata }], has_more }. Do NOT use this for payouts to the bank — use `stripe_connect_payouts`.
# Available on Free tier
# In Claude:
Use the stripe_connect_charges_list tool. List recent payments (charges) on the operator's connected Stripe account, e.g.stripe_connect_balancereadRead the money sitting in the operator's connected Stripe account: available and pending, split per currency.›
stripe_connect_balanceRead the money sitting in the operator's connected Stripe account: available and pending, split per currency. Params: none (the connected account is resolved from the session). Returns: { account_id, available: [{ amount, currency }], pending: [{ amount, currency }] } — amounts in the currency's smallest unit (cents for EUR/USD). Do NOT use this for the Carrier prepaid wallet — use `wallet_balance`. Do NOT use this for money already paid out to the bank — use `stripe_connect_payouts`.
# Available on Free tier
# In Claude:
Use the stripe_connect_balance tool. Read the money sitting in the operator's connected Stripe account: available and pending, split per currency.stripe_connect_dispute_listreadList chargebacks customers have raised with their bank against the operator's connected Stripe account.›
stripe_connect_dispute_listList chargebacks customers have raised with their bank against the operator's connected Stripe account. Read-only — responding to one is Dashboard work. Params: `limit` (1-50, default 10), `status` (optional Stripe dispute status, e.g. 'needs_response', 'under_review'). Returns: { disputes: [{ id, charge, amount, currency, status, reason, evidence_details.due_by }], has_more } — amount in the currency's smallest unit, `due_by` a Unix timestamp or null. Do NOT use this for charges Stripe is holding for fraud review before they settle — those are `radar_review_list`. Check this before refunding: refunding a disputed charge can cost the operator the amount twice.
# Available on Free tier
# In Claude:
Use the stripe_connect_dispute_list tool. List chargebacks customers have raised with their bank against the operator's connected Stripe account.radar_review_listreadList the Stripe Radar fraud reviews waiting on a manual approve/decline decision, newest first.›
radar_review_listList the Stripe Radar fraud reviews waiting on a manual approve/decline decision, newest first. Reads only — deciding a review is a separate call. Params: `open_only` (boolean, default true; Stripe lists open reviews only, so false returns the same set), `limit` (1-50, default 10). Returns: { reviews: [{ id (`prv_...`), charge, reason, opened_reason, closed_reason, created, closed }], has_more }. Call this first to get the `review_id` that `radar_review_approve` and `radar_review_decline` require. Do NOT use this for chargebacks the customer has already raised with their bank — use `stripe_connect_dispute_list`.
# Available on Free tier
# In Claude:
Use the radar_review_list tool. List the Stripe Radar fraud reviews waiting on a manual approve/decline decision, newest first.affiliate_statusreadRead-only: returns the affiliate profile, referral code, link, counts, money owed and paid, and Connect payouts status for the authenticated operator.›
affiliate_statusRead-only: returns the affiliate profile, referral code, link, counts, money owed and paid, and Connect payouts status for the authenticated operator.
# Available on Free tier
# In Claude:
Use the affiliate_status tool. Read-only: returns the affiliate profile, referral code, link, counts, money owed and paid, and Connect payouts status for the authenticated operator.affiliate_commissionsreadRead-only: returns the list of commission records for the authenticated operator.›
affiliate_commissionsRead-only: returns the list of commission records for the authenticated operator.
# Available on Free tier
# In Claude:
Use the affiliate_commissions tool. Read-only: returns the list of commission records for the authenticated operator.wallet_balancereadRead the caller organisation's Carrier prepaid wallet: current balance and auto-top-up settings.›
wallet_balanceRead the caller organisation's Carrier prepaid wallet: current balance and auto-top-up settings. The wallet is what Carrier bills your own eSIM spend against — it is not an OCS balance and not your MCP plan credits. Params: none (the organisation is taken from the session). Returns: { org_id, balance_eur_cents, auto_topup_enabled, auto_topup_threshold_cents, auto_topup_pack_cents } — all amounts in EUR cents, not euros. Do NOT use this for a reseller account balance in OCS — use `get_reseller_info` or `list_reseller_accounts`. Do NOT use this for a subscriber's OCS balance — use `get_subscriber`. Do NOT use this for MCP plan credits — use `credit_balance`. Do NOT use this for money held at Stripe — use `stripe_connect_balance`.
# Available on Free tier
# In Claude:
Use the wallet_balance tool. Read the caller organisation's Carrier prepaid wallet: current balance and auto-top-up settings.greenzone_whitelist_listreadList current Greenzone whitelist entries from the KV cache.›
greenzone_whitelist_listList current Greenzone whitelist entries from the KV cache. Returns all whitelisted hosts and IPs, when the state was last synced, and whether the last hourly reconciliation detected drift from the portal. This is a fast read from KV — no browser automation required. Use `from_portal: true` to trigger a live portal read via Kapture instead of KV. Requires 'read' scope.
# Available on Free tier
# In Claude:
Use the greenzone_whitelist_list tool. List current Greenzone whitelist entries from the KV cache.subscriber_country_historyreadReturn cross-border movement history for a subscriber, reconstructed from OCS Gy charging events.›
subscriber_country_historyReturn cross-border movement history for a subscriber, reconstructed from OCS Gy charging events. Reads `gyAnswer.events` from `subscriberNetworkEventsOverPeriod` — every Gy record carries its own country, operator and MCC — and collapses consecutive same-country records into stays with first-seen and last-seen timestamps. This needs no webhook: it works with Relay LU and Relay Gy off. Relay `country.entered` events from the 24h ring-buffer are merged in as a supplement when present. Use this to answer: 'where has subscriber X traveled', 'show country history for ICCID', 'border crossings for this SIM'. Params: `subscriberId` (ICCID, 19–20 digits), `startDate`/`endDate` (YYYY-MM-DD, max 7 days apart, default the last 7 days), `limit` (1–50, default 20, newest first). Returns: `stays` ({ country, country_name, first_seen, last_seen, operators, mccs, event_count, used_bytes }), `transitions` ({ from, to, at }), and `country_events` in the legacy flat shape. `used_bytes` already handles the string-typed `usedUnits` and its 'N/A' values. Do NOT use this for raw per-session records — use `subscriber_network_events` for those.
# Available on Free tier
# In Claude:
Use the subscriber_country_history tool. Return cross-border movement history for a subscriber, reconstructed from OCS Gy charging events.get_network_defaultreadUse this to read the network default for this organisation: which networks a SIM is given in a country.›
get_network_defaultUse this to read the network default for this organisation: which networks a SIM is given in a country. The system default is `cheapest_available` (the lowest data rate among networks really available in the country). The org can choose `all` or a `custom` steering list instead. Returns: `systemDefault`, `orgDefault` (null when none stored), `effectiveMode`, `warnings`, and `appliesTo` (always `new_assignments_only`: existing SIMs are never changed by this setting). Do NOT use this to see which list a specific SIM has — use `get_subscriber`.
# Available on Free tier
# In Claude:
Use the get_network_default tool. Use this to read the network default for this organisation: which networks a SIM is given in a country.plan_network_defaultreadUse this to see which networks a SIM would be given in one or more countries, before anything is assigned.›
plan_network_defaultUse this to see which networks a SIM would be given in one or more countries, before anything is assigned. By default that is the cheapest available network per country (lowest data rate above zero, among rules really in force). Precedence: `simOverride`, then `packageOverride`, then the org default, then `cheapest_available`. Read only: `applied` is always false. If the tariff is missing or cannot be compared it falls back to ALL networks and says so in `warnings` and `summary` (`fellBackToAll: true`); never present that as a cheapest choice. The price basis is the wholesale data rate per MB, not the end price. Creating a steering list has no OCS REST method, so when no existing list matches the result is `needs_list`, not a created list. Params: `countries` (ISO-3166 alpha-2 codes, required), `simOverride`, `packageOverride`, `resellerId` (optional).
# Available on Free tier
# In Claude:
Use the plan_network_default tool. Use this to see which networks a SIM would be given in one or more countries, before anything is assigned.get_atlas_coveragereadList the mobile networks Carrier Atlas has configured for one country.›
get_atlas_coverageList the mobile networks Carrier Atlas has configured for one country. The catalog is OCS coverage metadata refreshed every 15 minutes. It is not licensed live telemetry, and a network with status 'unknown' has not been probed yet. Use this for 'which networks are in Japan', 'coverage in NL', 'MNOs for country US'. Params: country (ISO 3166-1 alpha-2, required), status (up|degraded|down|unknown), technology (2G|3G|4G|5G). Do NOT use this for where a subscriber is attached right now — that is a subscriber location tool. Do NOT use this for fleet health.
# Available on Free tier
# In Claude:
Use the get_atlas_coverage tool. List the mobile networks Carrier Atlas has configured for one country.get_atlas_network_statusreadRead one mobile network from Carrier Atlas by MCC and MNC, including the latest status sample and the last 24 hours of probes.›
get_atlas_network_statusRead one mobile network from Carrier Atlas by MCC and MNC, including the latest status sample and the last 24 hours of probes. Status comes from the 15-minute OCS coverage cron. 'unknown' means the catalog row exists and has not been probed. Use this for 'status of MCC 440 MNC 10', 'is this operator in the Atlas catalog'. Params: mcc (3 digits), mnc (2 or 3 digits). Do NOT use this for a subscriber's current radio attachment.
# Available on Free tier
# In Claude:
Use the get_atlas_network_status tool. Read one mobile network from Carrier Atlas by MCC and MNC, including the latest status sample and the last 24 hours of probes.subscriber_depletion_eventsreadLook up bundle depletion events for a subscriber (or list recent fleet-wide depletions).›
subscriber_depletion_eventsLook up bundle depletion events for a subscriber (or list recent fleet-wide depletions). Returns the most recent bundle.depleted event stored when the prepaid usage webhook received a last_slice notification. Events are retained for 7 days. Use subscriberId to check a specific subscriber, or omit to list the 20 most recent fleet-wide depletions. Requires 'read' scope.
# Available on Free tier
# In Claude:
Use the subscriber_depletion_events tool. Look up bundle depletion events for a subscriber (or list recent fleet-wide depletions).ui_agent_statusreadPoll the status of a browser agent task dispatched by ui_agent_ask or any ui_* tool.›
ui_agent_statusPoll the status of a browser agent task dispatched by ui_agent_ask or any ui_* tool. Returns current status (pending | running | completed | failed) and result when available. Params: task_id (from ui_agent_ask response). Read scope sufficient.
# Available on Free tier
# In Claude:
Use the ui_agent_status tool. Poll the status of a browser agent task dispatched by ui_agent_ask or any ui_* tool.generate_storefront_logoreadGenerate a storefront logo (SVG always; PNG when an image key is configured on the Carrier worker).›
generate_storefront_logoGenerate a storefront logo (SVG always; PNG when an image key is configured on the Carrier worker). Works for any authenticated Carrier MCP user — no local image-API key required. Write the SVG to public/brand/logo.svg in the storefront.
# Available on Free tier
# In Claude:
Use the generate_storefront_logo tool. Generate a storefront logo (SVG always; PNG when an image key is configured on the Carrier worker).Write tools
modify_subscriber_balancewriteUse this to adjust or set the monetary balance for an individual subscriber.›
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.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_subscriber_balance tool. Use this to adjust or set the monetary balance for an individual subscriber.modify_subscriber_statuswriteUse this to change the OCS lifecycle status of a subscriber.›
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. ⚠ Setting status to END_OF_LIFE is irreversible. The subscriber becomes read-only (OCS error 17 on subsequent mutations). Confirm before calling. Params: `iccid` (subscriber identifier), `status` (new status string, e.g. 'ACTIVE', 'SUSPENDED', 'TERMINATED', 'END_OF_LIFE'). OCS receives `{ subscriber: { iccid }, newStatus }`. `subscriber` is a SubscriberId object, never a bare ICCID string. 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.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_subscriber_status tool. Use this to change the OCS lifecycle status of a subscriber.modify_subscriber_contact_infowriteUse this to update the contact details stored on a subscriber record in OCS.›
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.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_subscriber_contact_info tool. Use this to update the contact details stored on a subscriber record in OCS.set_subscriber_traffic_restrictionswriteUse this to enable or disable individual traffic types for a subscriber: mobile data, voice calls (mobile-originated and mobile-terminated), and SMS.›
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.
# Requires write scope (Pro tier)
# In Claude:
Use the set_subscriber_traffic_restrictions tool. Use this to enable or disable individual traffic types for a subscriber: mobile data, voice calls (mobile-originated and mobile-terminated), and SMS.modify_subscriber_steering_listwriteUse 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.›
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).
# Requires write scope (Pro tier)
# In Claude:
Use the modify_subscriber_steering_list tool. Use 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.move_subscriber_range_to_accountwriteBREAKING CHANGE (2026-08-28): this tool's contract was rebuilt around account-ID ranges to match what OCS actually accepts — ICCID-pair targeting (`iccidFrom`/`iccidTo` + a single `accountId`) is gone.›
move_subscriber_range_to_accountBREAKING CHANGE (2026-08-28): this tool's contract was rebuilt around account-ID ranges to match what OCS actually accepts — ICCID-pair targeting (`iccidFrom`/`iccidTo` + a single `accountId`) is gone. Zero field names were ever shared with OCS's real `moveSubscriberRangeToAccount` shape (verified live 2026-08-24 — see packages/ocs-spec/ocs-accepted-params.json), so every prior call to this tool failed outright; nothing that used to work stops working. Use this to move a contiguous range of subscribers, identified by IMSI or ICCID, from one account to another. Cross-reseller moves lose the subscribers' packages. Params: `srcAccountId` (source account ID from `list_reseller_accounts`), `destAccount` (destination account ID), `rangeType` ('IMSI' | 'ICCID' — which identifier `rangeStart`/`rangeEnd` are expressed in), `rangeStart` (inclusive start of the range), `rangeEnd` (inclusive end of the range). Returns: OCS confirmation with the count of subscribers moved. Do NOT use this for a single subscriber move — provide identical rangeStart and rangeEnd. Always call `list_subscribers` on the range first to verify the correct subscribers are included.
# Requires write scope (Pro tier)
# In Claude:
Use the move_subscriber_range_to_account tool. BREAKING CHANGE (2026-08-28): this tool's contract was rebuilt around account-ID ranges to match what OCS actually accepts — ICCID-pair targeting (`iccidFrom`/`iccidTo` + a single `accountId`) is gone.hlr_set_bitratewriteUse this to set a hard bandwidth cap for a subscriber at the HLR (Home Location Register) level.›
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. Provide at least one of `bitrate` (bits per second) or `bitrate_string` (OCS string enum); when both are provided, `bitrate_string` is used. The wire value is only the string enum: KB_32, KB_64, KB_128, KB_256, KB_384, KB_512, KB_1024, KB_2048, KB_3072, KB_5120, KB_7680, KB_10240, KB_20480, KB_51200, KB_102400, UNLIMITED. A bits-per-second number is mapped onto that enum (256000 is KB_256, 1024000 is KB_1024). 0 is UNLIMITED. Any other number is refused before OCS. Internally resolves ICCID → IMSI via a getSingleSubscriber lookup. Params: `iccid` (subscriber identifier), `bitrate` (integer bits per second) OR `bitrate_string` (string enum from the list above). 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`.
# Requires write scope (Pro tier)
# In Claude:
Use the hlr_set_bitrate tool. Use this to set a hard bandwidth cap for a subscriber at the HLR (Home Location Register) level.assign_packagewriteAssign a one-time prepaid package to an existing subscriber using iccid + packageTemplateId.›
assign_packageAssign a one-time prepaid package to an existing subscriber using iccid + packageTemplateId. Inventory issuance uses authenticated Carrier API POST /v1/subscribers/issue-from-inventory with request_key as X-Idempotency-Key. API authorization and its durable ledger are authoritative. Keep the same key after unknown outcomes; never automatically issue with a new key. Do not send both iccid and account_for_subs. Use assign_recurring_package for auto-renew.
# Requires write scope (Pro tier)
# In Claude:
Use the assign_package tool. Assign a one-time prepaid package to an existing subscriber using iccid + packageTemplateId.assign_recurring_packagewriteUse this to assign an auto-renewing prepaid package to a subscriber.›
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), `activation_at_first_use` (boolean, optional — when true, package activates on the subscriber's first network usage rather than immediately; mutually exclusive with `start_time_utc`), `start_time_utc` (ISO 8601 UTC datetime, optional — schedules a specific activation start; mutually exclusive with `activation_at_first_use`). 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`.
# Requires write scope (Pro tier)
# In Claude:
Use the assign_recurring_package tool. Use this to assign an auto-renewing prepaid package to a subscriber.modify_package_limitswriteUse this to change the data, voice, or SMS allowance ceilings on an already-assigned subscriber 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.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_package_limits tool. Use this to change the data, voice, or SMS allowance ceilings on an already-assigned subscriber package.modify_package_expirywriteUse this to extend or shorten the expiry date of an active prepaid package on a subscriber.›
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' — absolute date), `validity_days` (integer, optional — number of days from now; passed to OCS as `newValidityDuration`; provide either `expirationDate` OR `validity_days`, not both). 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`.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_package_expiry tool. Use this to extend or shorten the expiry date of an active prepaid package on a subscriber.modify_package_statuswriteUse this to activate or deactivate a specific prepaid package on a subscriber without removing it.›
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: confirmation `{ updated: true, subsPrepaidPackageId, active, status }` where `status` is `ACTIVE` or `INACTIVE`. OCS accepts the write and returns no package body, so a null response is this confirmation rather than a missing record. 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`.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_package_status tool. Use this to activate or deactivate a specific prepaid package on a subscriber without removing it.stop_resume_recurring_packagewriteUse this to pause or restart the auto-renewal cycle of a recurring package without removing it.›
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).
# Requires write scope (Pro tier)
# In Claude:
Use the stop_resume_recurring_package tool. Use this to pause or restart the auto-renewal cycle of a recurring package without removing it.delete_subscriber_packagewriteUse this to permanently remove a single prepaid package from a subscriber.›
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.
# Requires write scope (Pro tier)
# In Claude:
Use the delete_subscriber_package tool. Use this to permanently remove a single prepaid package from a subscriber.create_package_templatewriteUse this to create a new prepaid package template in the product catalog.›
create_package_templateUse this to create a new prepaid package template in the product catalog. Templates define allowances, cost, 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). OCS accepts `prepaidpackagetemplatename`, `databyte`, `perioddays`, `locationzoneid`, `cost`, `recurring`, and `throttlingActive`. `name` maps to prepaidpackagetemplatename, `dataLimit` maps to databyte, `validityDays` maps to perioddays, and `locationZoneId` maps to locationzoneid. There is no `price` field and no `description` field. NEVER express an unlimited plan as a zero data allowance: OCS reads 0 as a literal zero, and because `throttlingThreshold1Perc` is a percentage OF THE BUNDLE, a zero bundle leaves the throttle trigger uncomputable and every storefront renders "0 MB". Describe the plan as it is sold and the OCS fields are derived for you: `unlimited: true`, `throttleAfterMb` (the full-speed window, e.g. 500 for "500 MB/day"), `throttleKbps` (the speed AFTER that window) and `perioddays` (1 for a daily bucket). The bundle ceiling is sized so the window is a whole trigger percentage and the bundle cannot be drained even at the throttled rate for the whole period, because a plan sold as unlimited must not run out. `throttleKbps` is a SPEED and must be an OCS bitrate (128, 256, 384, 512, 1024, 3072, 5120, 7680, 10240, 20480, 51200, 102400); passing megabytes here is rejected. 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.
# Requires write scope (Pro tier)
# In Claude:
Use the create_package_template tool. Use this to create a new prepaid package template in the product catalog.create_location_zonewriteUse this to create a new location zone — a named collection of countries and operators that defines where a package can be used.›
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. OCS accepts locationZoneName, tadigList (TADIG codes), and networkProfileId. Params: `zone` (JSON string). `name` is an alias of locationZoneName and `tadigs` is an alias of tadigList. ISO country codes and MCC-MNC operator ids are not TADIG codes and are refused. Use `list_network_profiles` for a networkProfileId. 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`.
# Requires write scope (Pro tier)
# In Claude:
Use the create_location_zone tool. Use this to create a new location zone — a named collection of countries and operators that defines where a package can be used.affect_subscriber_phone_numberwriteUse this to assign a phone number (MSISDN) to a subscriber.›
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.
# Requires write scope (Pro tier)
# In Claude:
Use the affect_subscriber_phone_number tool. Use this to assign a phone number (MSISDN) to a subscriber.modify_subscriber_mobile_planwriteUse this to change the mobile pricing plan assigned to a specific subscriber.›
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.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_subscriber_mobile_plan tool. Use this to change the mobile pricing plan assigned to a specific subscriber.modify_subscriber_package_active_periodwriteUse this to change the start and/or end date of a prepaid package's active period for a specific 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`.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_subscriber_package_active_period tool. Use this to change the start and/or end date of a prepaid package's active period for a specific subscriber.modify_subscriber_voip_planwriteUse this to change the VoIP pricing plan assigned to a specific subscriber.›
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.
# Requires write scope (Pro tier)
# In Claude:
Use the modify_subscriber_voip_plan tool. Use this to change the VoIP pricing plan assigned to a specific subscriber.push_steering_to_subscriberwriteUse this AFTER `modify_subscriber_steering_list` to actively push the updated OPLMN (operator preference list) to the subscriber's physical eSIM/SIM.›
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.
# Requires write scope (Pro tier)
# In Claude:
Use the push_steering_to_subscriber tool. Use this AFTER `modify_subscriber_steering_list` to actively push the updated OPLMN (operator preference list) to the subscriber's physical eSIM/SIM.change_network_profile_of_location_zonewriteUse this to attach or change the network profile on an existing location zone.›
change_network_profile_of_location_zoneUse this to attach or change the network profile on an existing location zone. A network profile defines sponsor/roaming configuration used when the zone is referenced by package templates. Params: `location_zone_id` (integer from list_detailed_location_zones), `network_profile_id` (integer from list_network_profiles). Returns: OCS confirmation of the updated zone/profile binding. Do NOT use this to create a new location zone — use `create_location_zone` (which requires networkProfileId at creation time). Do NOT use this for edit/delete of zone TADIG lists — those remain UI-agent-only (G-19).
# Requires write scope (Pro tier)
# In Claude:
Use the change_network_profile_of_location_zone tool. Use this to attach or change the network profile on an existing location zone.provision_esim_wizardwriteInteractive 3-step wizard to provision an eSIM: select subscriber, choose package template, preview (dry_run) and confirm execution.›
provision_esim_wizardInteractive 3-step wizard to provision an eSIM: select subscriber, choose package template, preview (dry_run) and confirm execution.
# Requires write scope (Pro tier)
# In Claude:
Use the provision_esim_wizard tool. Interactive 3-step wizard to provision an eSIM: select subscriber, choose package template, preview (dry_run) and confirm execution.template_zone_builder_appwriteInteractive builder for a prepaid package template or a location zone: pick a kind, configure fields, preview the exact normalised OCS payload, and confirm to create it.›
template_zone_builder_appInteractive builder for a prepaid package template or a location zone: pick a kind, configure fields, preview the exact normalised OCS payload, and confirm to create it. Returns structuredContent for the panel, so it only helps a client that can render MCP UI resources. Do NOT use this in a headless or scripted context — `create_package_template` and `create_location_zone` take the same fields directly. Managed (multi-tenant) sessions cannot confirm a create here — both writes touch a shared reseller catalogue and are refused for managed accounts by design; use this app in read/preview mode only for a managed session.
# Requires write scope (Pro tier)
# In Claude:
Use the template_zone_builder_app tool. Interactive builder for a prepaid package template or a location zone: pick a kind, configure fields, preview the exact normalised OCS payload, and confirm to create it.action_receipt_appwriteView the ledger of recent write actions (Action Receipts) with before/after summary and verification evidence, and roll one back where a rollback method was recorded.›
action_receipt_appView the ledger of recent write actions (Action Receipts) with before/after summary and verification evidence, and roll one back where a rollback method was recorded. Returns structuredContent for the panel, so it only helps a client that can render MCP UI resources. Params: `action` — 'list' (default, shows recent receipts), 'view' (one receipt, needs `receiptId`), 'record' (persist a new receipt after your own write — needs `receipt` fields), or 'rollback' (needs `receiptId`; re-invokes the recorded rollbackMethod/rollbackParams; requires 'write' scope). Do NOT use this in a headless or scripted context to page through many receipts — call `list_recent_ocs_events` for the raw OCS event ring-buffer instead; this app is for reviewing YOUR OWN recorded write actions, not general OCS event history.
# Requires write scope (Pro tier)
# In Claude:
Use the action_receipt_app tool. View the ledger of recent write actions (Action Receipts) with before/after summary and verification evidence, and roll one back where a rollback method was recorded.configure_billingwriteConfigure your billing preferences: enable/disable overages, set billing thresholds (bill shock prevention), configure notification percentages, and set hard spending caps.›
configure_billingConfigure your billing preferences: enable/disable overages, set billing thresholds (bill shock prevention), configure notification percentages, and set hard spending caps. Pro and Enterprise tiers only.
# Requires write scope (Pro tier)
# In Claude:
Use the configure_billing tool. Configure your billing preferences: enable/disable overages, set billing thresholds (bill shock prevention), configure notification percentages, and set hard spending caps.rotate_credentialswriteReplace the stored eSIMVault API token with one you supply.›
rotate_credentialsReplace the stored eSIMVault API token with one you supply. The old token stops being used the moment this returns, so anything else still holding it — CLI configs, scripts, other MCP sessions — breaks until it is updated too. This tool does not mint a token: you must already have a new one from the eSIMVault dashboard. Params: `new_token` (the replacement token, stored AES-256-GCM encrypted), `confirm` (boolean — must be true; false returns 'cancelled' and changes nothing, so use it to preview). Requires `write` scope. Do NOT use this to check whether rotation is due — that is `credential_status`, which is read-only.
# Requires write scope (Pro tier)
# In Claude:
Use the rotate_credentials tool. Replace the stored eSIMVault API token with one you supply.ui_create_steering_listwriteCreate a new, empty network steering list (OPLMN preference set) by driving the OCS web dashboard, because the OCS REST API cannot create one.›
ui_create_steering_listCreate a new, empty network steering list (OPLMN preference set) by driving the OCS web dashboard, because the OCS REST API cannot create one. Dispatches a browser agent, so the list appears asynchronously. The list starts with no operators in it: to put networks on it, call `ui_build_steering_list` afterwards with the new id. Params: `name` (name for the list), `description` (optional), `dry_run` (true previews the agent prompt and dispatches nothing). Returns: dispatch confirmation with a task id for tracking. Do NOT use this to change which operators are on an existing list — that is `ui_build_steering_list`. Do NOT use this to point a subscriber or account at a list — see `modify_subscriber_steering_list` and `ui_set_account_steering_list`.
# Requires write scope (Pro tier)
# In Claude:
Use the ui_create_steering_list tool. Create a new, empty network steering list (OPLMN preference set) by driving the OCS web dashboard, because the OCS REST API cannot create one.ui_build_steering_listwriteChange which mobile operators sit on a steering list that already exists, by driving the OCS web dashboard — the OCS REST API cannot edit list membership.›
ui_build_steering_listChange which mobile operators sit on a steering list that already exists, by driving the OCS web dashboard — the OCS REST API cannot edit list membership. Needs an id: create the list first with `ui_create_steering_list`. Params: `steering_list_id` (integer, from `list_steering_lists`), `add_operators` and `remove_operators` (arrays of MCC-MNC strings, e.g. ['20801', '26201'] — five digits, no separator), `operator_type` ('priority' to prefer them, 'excluded' to bar them; default 'priority'), `dry_run`. Returns: dispatch confirmation with a task id — the edit lands asynchronously. Do NOT use this to make a new list — that is `ui_create_steering_list`. Do NOT expect subscribers to pick the change up on their own: editing a list does not reach handsets until you call `push_steering_to_subscriber`.
# Requires write scope (Pro tier)
# In Claude:
Use the ui_build_steering_list tool. Change which mobile operators sit on a steering list that already exists, by driving the OCS web dashboard — the OCS REST API cannot edit list membership.ui_set_account_steering_listwriteAssigns or removes a steering list at the account level via the OCS web dashboard.›
ui_set_account_steering_listAssigns or removes a steering list at the account level via the OCS web dashboard. The subscriber-level counterpart `modify_subscriber_steering_list` is available via API; this account-level operation is UI-only. Params: `account_id`, `steering_list_id` (0 to remove).
# Requires write scope (Pro tier)
# In Claude:
Use the ui_set_account_steering_list tool. Assigns or removes a steering list at the account level via the OCS web dashboard.ui_request_reseller_relay_changewriteDrafts the parent-reseller/support request for reseller relay flags that are visible but read-only in the OCS portal at the current account tier.›
ui_request_reseller_relay_changeDrafts the parent-reseller/support request for reseller relay flags that are visible but read-only in the OCS portal at the current account tier. Use this for Relay Gy, calls/SMS relay, or VoIP relay instead of repeatedly attempting a disabled checkbox. The tool does not send the request and does not dispatch a browser mutation; it returns copy ready for operator approval.
# Requires write scope (Pro tier)
# In Claude:
Use the ui_request_reseller_relay_change tool. Drafts the parent-reseller/support request for reseller relay flags that are visible but read-only in the OCS portal at the current account tier.ui_create_destination_listwriteCreates a new destination list (named set of phone number prefixes for MOC call permissions) via the OCS web dashboard.›
ui_create_destination_listCreates a new destination list (named set of phone number prefixes for MOC call permissions) via the OCS web dashboard. Params: `name`, `prefixes` (array of prefix strings), `description`.
# Requires write scope (Pro tier)
# In Claude:
Use the ui_create_destination_list tool. Creates a new destination list (named set of phone number prefixes for MOC call permissions) via the OCS web dashboard.ui_edit_destination_listwriteEdits an existing destination list via the OCS web dashboard.›
ui_edit_destination_listEdits an existing destination list via the OCS web dashboard. Params: `destination_list_id`, `add_prefixes`, `remove_prefixes`, `new_name`.
# Requires write scope (Pro tier)
# In Claude:
Use the ui_edit_destination_list tool. Edits an existing destination list via the OCS web dashboard.ui_edit_location_zonewriteEdits an existing location zone via the OCS web dashboard.›
ui_edit_location_zoneEdits an existing location zone via the OCS web dashboard. `create_location_zone` is available via API; edit is UI-only. Params: `zone_id`, `new_name`, `add_countries`, `remove_countries`.
# Requires write scope (Pro tier)
# In Claude:
Use the ui_edit_location_zone tool. Edits an existing location zone via the OCS web dashboard.ui_agent_replywriteResumes a browser automation task that paused waiting for input.›
ui_agent_replyResumes a browser automation task that paused waiting for input. Use ui_agent_list_pending to find tasks waiting for input. Provide the task_id and your reply (e.g. a 2FA code, a field value, or a yes/no answer). The reply content is never recorded in audit logs — only its length is logged.
# Requires write scope (Pro tier)
# In Claude:
Use the ui_agent_reply tool. Resumes a browser automation task that paused waiting for input.stripe_connect_beginwriteStart or resume Stripe Connect onboarding for the authenticated operator.›
stripe_connect_beginStart or resume Stripe Connect onboarding for the authenticated operator. express creates a new connected account (KYC). standard returns Stripe OAuth so an already-verified Stripe business attaches without a second KYC. Stores the result in the same BILLING_DB used by Console/API.
# Requires write scope (Pro tier)
# In Claude:
Use the stripe_connect_begin tool. Start or resume Stripe Connect onboarding for the authenticated operator.stripe_connect_refundwriteRefund money to a customer on one charge in the operator's connected Stripe account.›
stripe_connect_refundRefund money to a customer on one charge in the operator's connected Stripe account. This returns real funds and Stripe cannot reverse a refund once issued. Two-step by design: call without `confirm_token` to get a token and a summary of what would be refunded, then call again with that token to execute. The token expires in 5 minutes. Params: `charge_id` (Stripe charge id, `ch_...`), `amount_cents` (optional integer in the charge's smallest currency unit — omit for a full refund), `reason` ('duplicate' | 'fraudulent' | 'requested_by_customer', optional), `confirm_token`. Returns: the refund id and status. Requires `write` scope. Do NOT use this on a payment that was authorized but not captured — cancel its PaymentIntent instead (Stripe POST /v1/payment_intents/:id/cancel). Do NOT use this to contest a chargeback — read the case with `stripe_connect_dispute_list` first, since refunding a disputed charge can cost the operator twice.
# Requires write scope (Pro tier)
# In Claude:
Use the stripe_connect_refund tool. Refund money to a customer on one charge in the operator's connected Stripe account.affiliate_joinwriteJoin the Carrier affiliate program and generate a personal referral code and link.›
affiliate_joinJoin the Carrier affiliate program and generate a personal referral code and link.
# Requires write scope (Pro tier)
# In Claude:
Use the affiliate_join tool. Join the Carrier affiliate program and generate a personal referral code and link.wallet_topup_checkoutwriteCreate a Stripe Checkout link so a human can top up the Carrier prepaid wallet by card.›
wallet_topup_checkoutCreate a Stripe Checkout link so a human can top up the Carrier prepaid wallet by card. This tool charges nothing itself: it returns a hosted URL, and the wallet is credited (pack amount + bonus) only after someone completes the payment in a browser. Params: `pack` (optional — pack id `pack_25`/`pack_50`/`pack_100`/`pack_500`/`pack_1000`/`pack_2500`/`pack_5000`, or an exact EUR-cents amount matching a catalog pack; omit to list the packs and their bonuses without creating a session). Returns: { pack_id, pack_eur_cents, bonus_eur_cents, checkout_session_id, checkout_url } — amounts in EUR cents. Do NOT use this when the wallet must be funded now with no human in the loop — use `wallet_auto_topup`, which charges the saved card immediately. Do NOT use this to move money in OCS — `modify_account_balance` and `modify_subscriber_balance` are unrelated ledgers.
# Requires write scope (Pro tier)
# In Claude:
Use the wallet_topup_checkout tool. Create a Stripe Checkout link so a human can top up the Carrier prepaid wallet by card.wallet_auto_topupwriteCharge the organisation's saved card off-session, right now, and credit the Carrier prepaid wallet with the pack.›
wallet_auto_topupCharge the organisation's saved card off-session, right now, and credit the Carrier prepaid wallet with the pack. This spends real money without any browser step or human confirmation, so only call it when the user has asked to be charged. Params: `pack_cents` (optional integer, EUR cents — must match a catalog pack; omit to use the organisation's configured auto-top-up pack). Returns on success: { org_id, charged: true, credited_eur_cents, balance_after_cents, payment_intent_id } — amounts in EUR cents. Returns { charged: false, reason } as an error when the card declines or no payment method is saved. Do NOT use this to let a human pay in a browser — use `wallet_topup_checkout`, which only returns a link. Do NOT use this to change the threshold that triggers automatic top-ups; this tool performs one charge and does not edit the configuration. Do NOT use this to credit an OCS reseller account or subscriber — see `modify_account_balance` and `modify_subscriber_balance`.
# Requires write scope (Pro tier)
# In Claude:
Use the wallet_auto_topup tool. Charge the organisation's saved card off-session, right now, and credit the Carrier prepaid wallet with the pack.greenzone_whitelist_addwriteAdd a hostname and/or IP address to the Bridge4IP Greenzone whitelist.›
greenzone_whitelist_addAdd a hostname and/or IP address to the Bridge4IP Greenzone whitelist. The Greenzone whitelist controls which hosts/IPs are exempt from data charging after a subscriber's bundle is depleted. This operates via browser automation (Kapture) against the OCS portal — no REST API exists for this surface. Provide `host` (e.g. 'example.com') and/or `ip` (e.g. '203.0.113.0/24'). At least one of host or ip must be provided. Returns Kapture step sequence for Claude Code to execute, plus updated KV state. After portal confirmation, state is persisted to KV and reconciled hourly. Requires 'write' scope and Kapture running in Sam's Chrome.
# Requires write scope (Pro tier)
# In Claude:
Use the greenzone_whitelist_add tool. Add a hostname and/or IP address to the Bridge4IP Greenzone whitelist.greenzone_whitelist_removewriteRemove a hostname and/or IP address from the Bridge4IP Greenzone whitelist.›
greenzone_whitelist_removeRemove a hostname and/or IP address from the Bridge4IP Greenzone whitelist. This operates via browser automation (Kapture) against the OCS portal. Provide `host` and/or `ip` to remove — at least one required. Returns Kapture step sequence for Claude Code to execute. KV state is updated immediately; reconciliation verifies portal within the hour. Requires 'write' scope and Kapture running in Sam's Chrome.
# Requires write scope (Pro tier)
# In Claude:
Use the greenzone_whitelist_remove tool. Remove a hostname and/or IP address from the Bridge4IP Greenzone whitelist.set_network_defaultwriteUse this to set the organisation's network default to `cheapest_available`, `all`, or `custom` (a steering list id from `list_steering_lists`, which must exist).›
set_network_defaultUse this to set the organisation's network default to `cheapest_available`, `all`, or `custom` (a steering list id from `list_steering_lists`, which must exist). This only stores the setting. It changes no SIM, writes nothing to OCS and does not migrate existing customers: it applies to NEW assignments. A single assignment can still override it with `plan_network_default`'s `simOverride`. Params: `mode` (required), `steeringListId` (required when mode is `custom`), `dry_run` (preview only). Do NOT use this to assign a list to one SIM — use `modify_subscriber_steering_list`.
# Requires write scope (Pro tier)
# In Claude:
Use the set_network_default tool. Use this to set the organisation's network default to `cheapest_available`, `all`, or `custom` (a steering list id from `list_steering_lists`, which must exist).ui_agent_askwriteSend a plain-language task to a hosted browsing agent, which drives a real browser on the open web — navigating pages, searching, extracting content, filling forms outside the OCS portal.›
ui_agent_askSend a plain-language task to a hosted browsing agent, which drives a real browser on the open web — navigating pages, searching, extracting content, filling forms outside the OCS portal. Each run costs roughly $0.20-1.00 in model spend, so treat it as the expensive last resort, not a lookup. Params: `prompt` (1-4000 chars — name the target URL and the exact data or action), `max_steps` (1-30, default 15; more steps cost more), `dry_run` (true returns only `estimated_cost_usd` and creates no session). Returns: `task_id` immediately; the work runs in the background, so poll `ui_agent_status` for the result. Requires `write` scope and a Pro or Enterprise tier. Do NOT use this to work out which Carrier tool answers a request — that is `carrier_ask`, which routes to this server's own tools and costs nothing. Do NOT use this for anything the OCS API already covers; every tool in this server is faster, free, and audited. Do NOT use this for the OCS dashboard operations that already have their own tools — see the `ui_*` tools such as `ui_create_steering_list`.
# Requires write scope (Pro tier)
# In Claude:
Use the ui_agent_ask tool. Send a plain-language task to a hosted browsing agent, which drives a real browser on the open web — navigating pages, searching, extracting content, filling forms outside the OCS portal.Admin tools
modify_account_balanceadminUse this to adjust or set the monetary balance on a reseller account.›
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.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the modify_account_balance tool. Use this to adjust or set the monetary balance on a reseller account.change_sim_statusadminUse this to change the physical SIM/eSIM card status at the SIM provider level, independent of the OCS subscriber lifecycle status.›
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 maps to OCS Affected (normal operation) and DISABLED maps to OCS Free (blocked at the network). DELETED is not a changeSimStatus value. 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'). 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 send DELETED.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the change_sim_status tool. Use this to change the physical SIM/eSIM card status at the SIM provider level, independent of the OCS subscriber lifecycle status.clean_all_packagesadminDANGEROUS: Removes ALL prepaid packages from a subscriber in a single irreversible operation.›
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.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the clean_all_packages tool. DANGEROUS: Removes ALL prepaid packages from a subscriber in a single irreversible operation.modify_template_coreadminUse this to change the core fields of an existing package template: name, data/voice/SMS limits, pricing, validity period, and location zone.›
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}). `name` maps to prepaidpackagetemplatename and `dataLimit` maps to databyte. A template id inside `changes` is ignored so the `templateId` argument wins. There is no `price` field and no `description` field. 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`.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the modify_template_core tool. Use this to change the core fields of an existing package template: name, data/voice/SMS limits, pricing, validity period, and location zone.modify_template_recurringadminUse this to change the auto-renewal configuration of a package template: periodicity (daily/weekly/monthly), occurrence count, and renewal trigger conditions.›
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}). `periodicity` maps to recurringPeriodicityType (0 daily, 1 weekly, 2 monthly) and `occurrences` maps to nbOccurrence. 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`.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the modify_template_recurring tool. Use this to change the auto-renewal configuration of a package template: periodicity (daily/weekly/monthly), occurrence count, and renewal trigger conditions.modify_template_throttlingadminUse this to change the bandwidth throttling thresholds on a package template.›
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, "throttlingThreshold1Perc": 80, "throttlingThreshold1Limit": 1024}). `firstThresholdPercent` maps to throttlingThreshold1Perc and `firstThresholdLimitKbps` maps to throttlingThreshold1Limit. `throttlingErrorAction` is an integer; continue_unthrottled is refused. 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`.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the modify_template_throttling tool. Use this to change the bandwidth throttling thresholds on a package template.send_smsadminUse this to send a mobile-terminated (MT) SMS to a subscriber.›
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 in GSM-7 encoding), `sender` (optional sender ID or phone number displayed on the device). ⚠ Messages containing non-GSM-7 characters (any emoji, é, ñ, Chinese, Arabic, Hebrew, etc.) trigger UCS-2 encoding which limits a single SMS to 70 characters instead of 160. Plan for multi-part splits accordingly. 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.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the send_sms tool. Use this to send a mobile-terminated (MT) SMS to a subscriber.reset_subscriber_gz_counteradminADMIN: Use this to reset the Green Zone (Greenzone) volume counter for a subscriber.›
reset_subscriber_gz_counterADMIN: Use this to reset the Green Zone (Greenzone) volume counter for a subscriber. The Green Zone counter tracks bytes consumed on the reseller-defined whitelist of hosts/IPs after the subscriber's bundle is depleted — NOT the Diameter Gz/Gy accounting interface. Typically used after a billing dispute or test-cycle reset. This operation is IRREVERSIBLE — volumeOnGZ is permanently zeroed. Params: `iccid` (subscriber identifier). Returns: new counter state with volumeOnGZ (bytes, normally 0 after reset), lastResetDate, lastUpdateDate. Always call `get_subscriber` with `with_gz_counter=true` first to capture the snapshot. Do NOT use this to pause data usage — use `set_subscriber_traffic_restrictions` with `dataAllowed=false` instead.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the reset_subscriber_gz_counter tool. ADMIN: Use this to reset the Green Zone (Greenzone) volume counter for a subscriber.balance_topup_formadminAdjust the OCS reseller-account balance behind one subscriber, through a form panel the user can review before it commits.›
balance_topup_formAdjust the OCS reseller-account balance behind one subscriber, through a form panel the user can review before it commits. Defaults to preview: a call that omits `preview` returns a projection and writes nothing. Only `preview: false` performs the OCS write. Params: `iccid` (subscriber identifier used to find the account), `delta` (amount to add when positive, deduct when negative), `preview` (boolean, default true). Requires `admin` scope plus recent MFA, and a client that can render UI panels. Do NOT use this in a headless or scripted context — call `modify_account_balance` directly, which takes an `accountId` and needs no panel. Do NOT use this for a subscriber's own balance — the `iccid` here only locates the account; per-subscriber money is `modify_subscriber_balance`. Do NOT use this for the Carrier prepaid wallet or MCP credits — see `wallet_topup_checkout` and `credit_balance`.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the balance_topup_form tool. Adjust the OCS reseller-account balance behind one subscriber, through a form panel the user can review before it commits.ui_agent_schedule_createadminCreates a recurring Steel agent run on a cron schedule.›
ui_agent_schedule_createCreates a recurring Steel agent run on a cron schedule. Use this to automate periodic OCS audits, fleet health checks, or any recurring browser-automation task. Minimum interval: 5 minutes (*/1, */2, */3, */4 and '* * * * *' are rejected). Requires admin scope. Returns schedule_id.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the ui_agent_schedule_create tool. Creates a recurring Steel agent run on a cron schedule.ui_agent_schedule_deleteadminPermanently deletes a Steel recurring schedule.›
ui_agent_schedule_deletePermanently deletes a Steel recurring schedule. This cannot be undone. Use ui_agent_schedule_pause to temporarily suspend instead. Requires admin scope.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the ui_agent_schedule_delete tool. Permanently deletes a Steel recurring schedule.ui_agent_schedule_pauseadminPauses an active Steel recurring schedule.›
ui_agent_schedule_pausePauses an active Steel recurring schedule. The schedule is preserved and can be resumed later with ui_agent_schedule_resume. Requires admin scope.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the ui_agent_schedule_pause tool. Pauses an active Steel recurring schedule.ui_agent_schedule_resumeadminResumes a paused Steel recurring schedule.›
ui_agent_schedule_resumeResumes a paused Steel recurring schedule. Requires admin scope.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the ui_agent_schedule_resume tool. Resumes a paused Steel recurring schedule.ui_create_accountadminCreates a new sub-account under the reseller via the OCS web dashboard.›
ui_create_accountCreates a new sub-account under the reseller via the OCS web dashboard. This operation is not available via the OCS REST API. Params: `name` (account name), `description` (optional), `initial_balance` (optional, default 0).
# Requires admin scope (Enterprise tier)
# In Claude:
Use the ui_create_account tool. Creates a new sub-account under the reseller via the OCS web dashboard.ui_delete_destination_listadminDelete a destination list — a named set of phone-number prefixes — by driving the OCS web dashboard.›
ui_delete_destination_listDelete a destination list — a named set of phone-number prefixes — by driving the OCS web dashboard. This cannot be undone, and any voice or SMS routing rule that permitted calls through this list stops permitting them. Params: `destination_list_id` (integer, from `list_destination_lists`), `dry_run` (true previews the agent prompt and dispatches nothing — use it first). Returns: dispatch confirmation with a task id; the deletion lands asynchronously. Requires `admin` scope. Do NOT use this to take a few prefixes off a list you want to keep — that is `ui_edit_destination_list`.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the ui_delete_destination_list tool. Delete a destination list — a named set of phone-number prefixes — by driving the OCS web dashboard.ui_delete_package_templateadminRemove a package template from the reseller's product catalogue for good, by driving the OCS web dashboard — the OCS REST API cannot delete a template.›
ui_delete_package_templateRemove a package template from the reseller's product catalogue for good, by driving the OCS web dashboard — the OCS REST API cannot delete a template. This is catalogue-wide: nobody can assign the template again afterwards, and it cannot be undone. It does not touch packages already sitting on subscribers. Params: `template_id` (integer, from `list_package_templates`), `dry_run` (true previews the agent prompt and dispatches nothing — use it first). Returns: dispatch confirmation with a task id; the deletion lands asynchronously. Requires `admin` scope. Do NOT use this to take a package off one subscriber — that is `delete_subscriber_package`, or `clean_all_packages` for all of theirs. Do NOT use this to stop new sales of a template while keeping it — edit it with `modify_template_core` instead.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the ui_delete_package_template tool. Remove a package template from the reseller's product catalogue for good, by driving the OCS web dashboard — the OCS REST API cannot delete a template.ui_delete_location_zoneadminDelete a location zone by driving the OCS web dashboard, because the OCS REST API can create a zone (`create_location_zone`) but not remove one.›
ui_delete_location_zoneDelete a location zone by driving the OCS web dashboard, because the OCS REST API can create a zone (`create_location_zone`) but not remove one. Deletion is permanent, and OCS refuses it while any active package template still references the zone — expect an error rather than a silent success in that case. Params: `zone_id` (integer, from `list_location_zones`), `dry_run` (true previews the agent prompt and dispatches nothing — use it first). Returns: dispatch confirmation with a task id, or the dashboard's refusal. Requires `admin` scope. Do NOT use this to drop a country from a zone you want to keep — that is `ui_edit_location_zone`.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the ui_delete_location_zone tool. Delete a location zone by driving the OCS web dashboard, because the OCS REST API can create a zone (`create_location_zone`) but not remove one.radar_review_approveadminClear a Stripe Radar fraud review so the held charge is captured and the money is taken.›
radar_review_approveClear a Stripe Radar fraud review so the held charge is captured and the money is taken. Approving overrides Radar's fraud signal, so a genuinely fraudulent charge approved here usually returns later as a chargeback plus a fee. Two-step by design: call without `confirm_token` to get a token, then call again with it to execute. Params: `review_id` (`prv_...`, from `radar_review_list`), `confirm_token`. Requires `admin` scope. Do NOT call this to turn a suspicious charge away — Stripe has no review decline; refund the charge (`stripe_connect_refund`) or cancel an uncaptured PaymentIntent. Do NOT call this to return money on a charge that already went through — that is `stripe_connect_refund`.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the radar_review_approve tool. Clear a Stripe Radar fraud review so the held charge is captured and the money is taken.radar_review_declineadminAlways refuses and calls nothing: Stripe has no endpoint to decline a Radar review (its Reviews API only lists, retrieves and approves).›
radar_review_declineAlways refuses and calls nothing: Stripe has no endpoint to decline a Radar review (its Reviews API only lists, retrieves and approves). Payments in review have usually already been processed. To turn one away, refund the charge on Carrier's platform account in Stripe itself (Dashboard, or platform-scoped POST /v1/refunds with no Stripe-Account header): `stripe_connect_refund` always acts as the operator's connected account, so it will NOT find a platform charge from this review list. or, for a payment authorized but not captured, cancel its PaymentIntent (Stripe POST /v1/payment_intents/:id/cancel); either closes the review. Params: `review_id` (`prv_...`), `confirm_token` (ignored). Requires `admin` scope. Do NOT call this expecting a charge to be blocked; nothing happens.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the radar_review_decline tool. Always refuses and calls nothing: Stripe has no endpoint to decline a Radar review (its Reviews API only lists, retrieves and approves).radar_value_list_addadminAdd one value to an existing Stripe Radar value list, changing how every future charge is scored.›
radar_value_list_addAdd one value to an existing Stripe Radar value list, changing how every future charge is scored. Whether the value ends up blocked or allowed depends entirely on which list you name in `value_list_id` — this tool does not choose, and putting a value on the allow list when you meant the block list silently lets fraud through. Confirm the list's purpose before calling. Two-step by design: call without `confirm_token` to get a token, then call again with it to execute. Params: `value_list_id` (`rsl_...`, an existing list), `value` (one email, IP address, card fingerprint, or ISO country code — one item per call), `confirm_token`. Requires `admin` scope. Do NOT use this to decide a single charge that is already under review — use `radar_review_approve` or `radar_review_decline`. Do NOT use this to create a list or a rule: only `value` is added, and rules cannot be edited through this API at all (see `radar_rule_toggle`).
# Requires admin scope (Enterprise tier)
# In Claude:
Use the radar_value_list_add tool. Add one value to an existing Stripe Radar value list, changing how every future charge is scored.radar_rule_toggleadminReturn the Stripe Dashboard steps for enabling or disabling a Radar rule.›
radar_rule_toggleReturn the Stripe Dashboard steps for enabling or disabling a Radar rule. This tool changes nothing: Stripe has no public API for rule state, so the call always succeeds and the rule stays exactly as it was. Never report the rule as toggled. Params: `rule_id` (Stripe Radar rule id), `enabled` (true for the enable instructions, false for disable). Returns: the Dashboard URL and steps for a human to follow. Requires `admin` scope. Do NOT use this when a change must actually take effect from an agent — the only Radar state reachable through this API is value-list membership, via `radar_value_list_add`.
# Requires admin scope (Enterprise tier)
# In Claude:
Use the radar_rule_toggle tool. Return the Stripe Dashboard steps for enabling or disabling a Radar rule.Prompts
5 pre-built prompts. Invoke via prompts/get in MCP or by typing the prompt name directly in Claude.
fleet_health_reportGenerate a comprehensive fleet health report: account balances, eSIM status breakdown, low-balance alerts, and utilization rates.
# In Claude:
Run the fleet_health_report prompt.subscriber_deep_diveComprehensive analysis of a single subscriber: profile, packages, usage patterns, location history, recommendations.
# In Claude:
Run the subscriber_deep_dive prompt with `iccid` <value>.revenue_optimizationAnalyse accounts and subscribers to find revenue optimization opportunities: underutilized packages, upgrade candidates, churn risks.
# In Claude:
Run the revenue_optimization prompt.coverage_analysisAnalyse network coverage, steering lists, and subscriber roaming patterns to optimise connectivity and reduce costs.
# In Claude:
Run the coverage_analysis prompt.bulk_operations_plannerPlan bulk operations safely: mass package assignments, account migrations, balance adjustments, or status changes.
# In Claude:
Run the bulk_operations_planner prompt with `operation` <value>.