doctorSIM
Server Details
Buy travel eSIMs, top up prepaid phones in 200+ countries and send digital gift cards. Live catalog and prices, carrier lookup, guest checkout by payment link (no API key), optional OAuth for PRO accounts.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 23 tools
Most tools target distinct resources, but create_esim_order and preview_esim_order are explicit aliases of create_order and preview_order, creating two viable paths for the same eSIM workflow. search_products also partially overlaps with the more specific operator/gift-card catalog tools. Descriptions help resolve these, but an agent can still misselect.
Nearly all tools use consistent snake_case with clear verb_noun or get_/list_/create_/preview_/search_ prefixes. The main deviation is guest_order_lookup, which puts the verb-like term at the end, but overall naming is predictable.
The server covers a broad domain: travel eSIMs, top-ups, gift cards, operator catalogs, orders, balance, and webhooks. Twenty-three tools is on the heavy side, and the aliases inflate the count, but the breadth of verticals makes it broadly reasonable.
Core lifecycle coverage is strong: discovery, preview, create, status, guest lookup, and order listing for eSIM, top-up, and gift card flows. Minor gaps remain, such as no cancel/refund operations and only list_webhooks without create/delete management, but most agent workflows are covered.
Available Tools
23 toolscreate_esim_orderAInspect
Alias of create_order with type=esim (kept for existing connectors). Guest / consumer: call without Authorization as soon as the plan is chosen — preview is optional. Show the buyer only payment_link and order_id when one exists. Never display checkout_hash (machine id for get_order_status). Buyer types email on the doctorsim.com checkout page and receives the eSIM by email after payment — do not promise an in-chat QR for guests. PRO OAuth: preview first, then create — debits prepaid credits and returns order_id, status, credits_used. Pass a unique idempotency_key per create. If the result lacks order_id, call list_orders / get_order_status — never re-create. Confirmation is emailed to the titular account when one is linked. Sandbox keys create a fake eSIM order (sandbox_esim_{id}, no credit debit, no ticket).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| currency | No | ||
| catalog_id | Yes | ||
| price_token | Yes | ||
| checkout_mode | No | Optional. Omit for the default doctorsim.com hash payment_link. stripe_link returns a Stripe Checkout Session URL when agentic_stripe_link is ON. | |
| idempotency_key | No | Required for safe retries. 1-128 printable ASCII. Same key + same account returns the original order (no second charge). Use a NEW key for each distinct SKU / denomination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| type | No | topup | giftcard | esim |
| status | No | |
| payment | No | Nested gateway / provider receipt details. Never the sole success signal. |
| currency | No | |
| order_id | No | Show this to the buyer when present (PRO credit checkout, or after payment). |
| expires_at | No | |
| environment | No | production | sandbox |
| credits_used | No | Decimal amount, normally a string, e.g. "21.98" |
| payment_link | No | The only URL to show the buyer. Guest / consumer pay on doctorsim.com. |
| show_to_user | Yes | Fields the assistant may show the buyer. |
| checkout_hash | No | Machine identifier for get_order_status. Never show or read aloud. |
| checkout_mode | No | credits (PRO credit checkout) | payment_link (guest / consumer pays on doctorsim.com) | stripe_link (opt-in Stripe Checkout Session URL when requested and agentic_stripe_link is ON). |
| checkout_hash_usage | No | machine_only |
| assistant_instruction | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses that PRO creates debit prepaid credits, return order_id/status/credits_used, email confirmation behavior, sandbox fake-order behavior, and checkout display constraints. It also explains idempotency safety and discourages promising an in-chat QR for guests.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loads the alias and guest/PRO workflow, and most sentences carry operational value. A slightly clearer structural separation between usage, output display, and retry guidance would improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a financial order-creation tool, it covers guest vs PRO flows, preview behavior, idempotency, error recovery, sandbox behavior, and customer-facing output constraints. With an output schema available, it does not need to restate return structures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, and the description does not explain the critical required catalog_id or price_token parameters, nor lang/currency usage. It adds some practical context for idempotency_key, but does not compensate for the undocumented required inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific create action for an eSIM order and explains it is an alias of create_order with type=esim. This clearly distinguishes it from sibling preview/order-status tools while acknowledging its legacy connector role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing: guests can call without Authorization after choosing a plan with optional preview, while PRO OAuth users should preview first then create. It also names fallback siblings list_orders/get_order_status when order_id is missing and warns never to re-create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_esim_topupAInspect
Create an eSIM top-up for a titular-owned ICCID. Body: catalog_id + price_token from get_esim_topup_plans. Consumer OAuth returns payment_link; PRO debits catalog retail_eur from credits and returns order_id + credits_used. Insufficient wallet is INSUFFICIENT_CREDITS with no debit. Idempotency-Key replay does not double-debit. Fulfilment is is_topup (no new QR). Requires OAuth orders:write.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| iccid | Yes | ICCID digits of the original eSIM line | |
| currency | No | ||
| catalog_id | Yes | catalog_id from get_esim_topup_plans | |
| price_token | Yes | Signed price_token from get_esim_topup_plans | |
| idempotency_key | No | Replay the same create for 24h |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| type | No | topup | giftcard | esim |
| status | No | |
| payment | No | Nested gateway / provider receipt details. Never the sole success signal. |
| currency | No | |
| order_id | No | Show this to the buyer when present (PRO credit checkout, or after payment). |
| expires_at | No | |
| environment | No | production | sandbox |
| credits_used | No | Decimal amount, normally a string, e.g. "21.98" |
| payment_link | No | The only URL to show the buyer. Guest / consumer pay on doctorsim.com. |
| show_to_user | Yes | Fields the assistant may show the buyer. |
| checkout_hash | No | Machine identifier for get_order_status. Never show or read aloud. |
| checkout_mode | No | credits (PRO credit checkout) | payment_link (guest / consumer pays on doctorsim.com) | stripe_link (opt-in Stripe Checkout Session URL when requested and agentic_stripe_link is ON). |
| checkout_hash_usage | No | machine_only |
| assistant_instruction | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the two distinct account paths (Consumer returns payment_link; PRO debits retail_eur and returns order_id/credits_used), the insufficient-wallet behavior (INSUFFICIENT_CREDITS with no debit), and idempotency semantics (replay does not double-debit). These are the exact traits an agent needs before committing a priced, credit-consuming operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and nearly every sentence carries operational signal; no filler. It is telegraphic and dense ('Fulfilment is is_topup (no new QR)'), which is efficient but slightly reduces scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is arguably redundant, but the description covers auth, error mode, idempotency, and fulfilment type for a financially consequential mutation. It omits edge cases such as an expired price_token or a non-titular ICCID mismatch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 67% schema coverage the schema already documents iccid, catalog_id, price_token and idempotency_key; the description adds provenance constraints on catalog_id/price_token and the no-double-debit meaning of the key. The lang and currency enums remain unexplained in both places, which is the only real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an eSIM top-up for a titular-owned ICCID') and implicitly separates itself from create_esim_order / create_order via 'Fulfilment is is_topup (no new QR)'. An agent can distinguish top-up of an existing line from a new order without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the precondition (ICCID must be titular-owned), the upstream dependency (catalog_id + price_token from get_esim_topup_plans), and the auth requirement (OAuth orders:write). It stops short of an explicit exclusion naming create_esim_order for new lines, so the alternative routing is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_orderAInspect
Place the order — one tool for every vertical; type is inferred from price_token / catalog_id. Send price_token only for gift cards (no phone, no country_id). Success always returns order_id, status, and (PRO credits) credits_used — never treat raw payment-gateway text as confirmation. Guest / consumer: call as soon as the product is chosen (preview optional). Show the buyer only payment_link and order_id when one exists. Never display checkout_hash. Guest products are emailed after the buyer pays on doctorsim.com. OAuth PRO: preview first, then create — same body as preview. Multi-SKU (e.g. three gift cards): N create_order calls with a DISTINCT idempotency_key each. If a response lacks order_id, call list_orders / get_order_status — never re-create on ambiguous success. Offer account linking only if the user asks for PRO credits or saved settings.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| type | No | Order vertical. Optional — inferred from price_token (top-up / gift card rate token vs eSIM token) or catalog_id. Set esim for travel eSIM. | |
| phone | No | Recipient E.164 phone number. Required for mobile/airtime top-ups. Do NOT provide for gift cards or eSIM (digitally delivered) — omit it. | |
| currency | No | Travel eSIM only: display currency. | |
| sms_text | No | Custom SMS text (max 140 chars). Only used when sms_notification=true. If omitted, a default localized message is sent. | |
| catalog_id | No | Travel eSIM only: catalog_id from get_esim_plans (with its price_token). | |
| country_id | No | Do NOT send when using price_token — destination is encoded in the token. If you must send it, copy id_country from get_countries or product search (Spain=34). Never invent a number. | |
| operator_id | No | Optional. Omit when using price_token. If sent, must be id_operator from rates/search. | |
| price_token | Yes | token from get_operator_rates (top-up / gift card) or price_token from get_esim_plans (travel eSIM) | |
| checkout_mode | No | Optional. Omit for the default doctorsim.com hash payment_link (D-1). stripe_link returns a Stripe Checkout Session URL when agentic_stripe_link is ON; otherwise STRIPE_LINK_DISABLED (no silent fallback). PRO credits always win over stripe_link. Same checkout_hash for get_order_status. Minting a Shared Payment Token via Stripe Link Agents is a different rail — do not send stripe_link for that. | |
| idempotency_key | No | Required for safe retries. 1-128 printable ASCII. Same key + same account returns the original order (no second charge). Use a NEW key for each distinct SKU / denomination. Also accepted as HTTP Idempotency-Key. | |
| sms_notification | No | Top-up only: send an SMS to the recipient (adds a fixed 0.99 EUR fee). Ignored for gift cards and eSIM. |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | No | |
| type | No | topup | giftcard | esim |
| status | No | |
| payment | No | Nested gateway / provider receipt details. Never the sole success signal. |
| currency | No | |
| order_id | No | Show this to the buyer when present (PRO credit checkout, or after payment). |
| expires_at | No | |
| environment | No | production | sandbox |
| credits_used | No | Decimal amount, normally a string, e.g. "21.98" |
| payment_link | No | The only URL to show the buyer. Guest / consumer pay on doctorsim.com. |
| show_to_user | Yes | Fields the assistant may show the buyer. |
| checkout_hash | No | Machine identifier for get_order_status. Never show or read aloud. |
| checkout_mode | No | credits (PRO credit checkout) | payment_link (guest / consumer pays on doctorsim.com) | stripe_link (opt-in Stripe Checkout Session URL when requested and agentic_stripe_link is ON). |
| checkout_hash_usage | No | machine_only |
| assistant_instruction | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-readOnly, non-destructive, closed-world; the description adds substantial behavior beyond that — idempotency semantics (same key returns the original order, no second charge), what success returns (order_id, status, credits_used), payment-rail rules (PRO credits beat stripe_link, STRIPE_LINK_DISABLED has no silent fallback), and explicit display prohibitions (never show checkout_hash, only payment_link/order_id). This is exactly the mutation-context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and routing rule, then layered with operational constraints. It is dense and slightly sprawling in the middle (payment-gateway warning, display rules, account linking), but nearly every clause carries a decision the agent must make.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with an output schema, this covers the remaining gaps: vertical inference, guest vs PRO flow, retry/ambiguity handling, multi-SKU behavior, and display constraints. Nothing essential to calling it correctly is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 92%, so the baseline is 3. The description still adds real value on top: price_token only for gift cards with no phone and no country_id, and a distinct idempotency_key per SKU — cross-field constraints the schema documents per-property but not jointly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Place the order') and immediately clarifies scope: one tool covering every vertical, with `type` inferred from price_token/catalog_id. An agent can tell what it does and how vertical routing works without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-call guidance: guest/consumer calls as soon as the product is chosen (preview optional), OAuth PRO must preview first with the same body. It also covers multi-SKU (N calls, distinct idempotency keys) and the ambiguity fallback to list_orders/get_order_status. It stops short of naming the sibling tools it overlaps with (create_esim_order, create_esim_topup, preview_order), so the agent must infer why those exist alongside this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceARead-onlyInspect
PRO accounts only (requires balance:read OAuth scope). Returns the authenticated PRO user prepaid credit balance in EUR. Requires linking a doctorSIM account — do NOT call for guest checkout flows.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| balance | Yes | Decimal amount, normally a string, e.g. "21.98" |
| currency | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a read-only, non-destructive, closed-world operation, so the description earns credit for the extras it adds: the required OAuth scope (balance:read), the account-linking precondition, and the EUR denomination. It stops short of saying what happens when preconditions fail (error shape or empty result), which would round out the behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The eligibility constraint and the negative guardrail are front-loaded before the softer prerequisite detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and it covers auth scope plus the account-linking requirement. The only meaningful gap is failure behavior when the caller is not PRO or has no linked account, which matters given the explicit guest-flow warning.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing for the description to clarify. The description correctly spends no words on argument semantics and instead invests in preconditions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the authenticated PRO user prepaid credit balance in EUR') and scopes it to a named audience. This is clearly distinguishable from siblings like guest_order_lookup or list_orders, which deal with orders rather than account balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit eligibility ('PRO accounts only'), an explicit exclusion ('do NOT call for guest checkout flows'), and the prerequisite (linking a doctorSIM account). An agent has everything needed to decide whether to call this or fall back to another path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_countriesARead-onlyInspect
List countries available for top-up, travel eSIM, and gift card services.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only, non-destructive annotations already establish the safety profile. The description adds useful scope by naming the three service lines, but it does not disclose pagination, filtering, or return-shape details; an output schema exists, so return values need not be described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the verb and resource. No words are wasted, and the service categories are stated compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, an output schema, and annotations covering read-only behavior, the description is largely complete. It states the tool's scope but leaves a small gap by not clarifying how this country list differs from the eSIM-destination and operator-rate siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. There are no parameter semantics to explain, and the description correctly does not invent any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb and resource: 'List countries available for top-up, travel eSIM, and gift card services.' It distinguishes the tool's scope from purely eSIM-focused siblings, but it does not explicitly contrast with get_esim_destinations or get_operator_rates, which also return geographic coverage data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the service categories mentioned, but there is no explicit guidance on when to choose this tool over get_esim_destinations, get_operator_rates, or get_giftcard_brands. The agent must infer that this is the broad country-list tool rather than a service-specific lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_esim_destinationsBRead-onlyInspect
List travel eSIM destinations (countries and regional/global coverage) with starting prices. country_iso is ISO-2 (es) or a region slug (eu, ww, as). Use it for get_esim_plans.
| Name | Required | Description | Default |
|---|---|---|---|
| coverage_type | No | Optional filter: COUNTRY, REGIONAL, or GLOBAL |
Output Schema
| Name | Required | Description |
|---|---|---|
| destinations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds that results include starting prices and both country and regional/global coverage, which is moderate additional context. It does not explain pagination, price currency, or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded: purpose and output content come first. But the entire second sentence is spent on a parameter that is not in the schema, so part of this brevity is wasted and misleading rather than efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, read-only annotations, and a single fully described parameter, most of the burden is handled elsewhere. Still, the description leaves unclear what the tool actually returns per destination and how the nonexistent country_iso relates to the real coverage_type filter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single coverage_type parameter, so the baseline is 3. But the description instead documents a 'country_iso' parameter that does not exist in the schema, which actively misleads about how to call the tool rather than supplementing the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb and resource are specific ('List travel eSIM destinations'), and it distinguishes itself from the get_esim_plans sibling by noting that results carry starting prices. However, the scope is muddied because it describes a country_iso input that this tool does not accept.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Use it for get_esim_plans' implies this tool is the discovery step before fetching plans, which is useful routing. But the phrasing is vague and never states when not to use it or how coverage_type filtering changes the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_esim_lineARead-onlyInspect
Look up remaining data for a titular-owned eSIM by ICCID (from a fulfilled get_order_status). The line is the same on every device. Requires OAuth. Refreshes from the provider only when the last check is older than five minutes. Also returns nested consumption (cron snapshot: activated, unlimited, data_remaining_gb, days_left).
| Name | Required | Description | Default |
|---|---|---|---|
| iccid | Yes | ICCID digits from a fulfilled eSIM order | |
| refresh | No | Accepted for compatibility. Provider refresh still runs only when last check is older than five minutes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| iccid | No | |
| status | No | |
| data_gb | No | |
| order_id | No | Identifier (integer or numeric string). |
| plan_name | No | |
| catalog_id | No | Identifier (integer or numeric string). |
| consumption | No | Cron snapshot for native My eSIMs. unlimited=true means data_remaining_gb is null. days_left is null until activated. |
| country_iso | No | |
| balance_unit | No | |
| topups_count | No | |
| coverage_type | No | |
| balance_amount | No | |
| topup_available | No | |
| balance_checked_at | No | |
| balance_expiration | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive, closed-world profile, so the bar is lower, and the description still adds real behavior: OAuth requirement, a five-minute provider-refresh throttle, and the fact that the line is identical across devices. It doesn't explain error or not-found behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with the core lookup and key constraint front-loaded; no wasted framing. A few phrases ('titular-owned', the parenthetical snapshot list) are slightly jargon-heavy but still informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema, this covers everything an agent needs: source of the ICCID, auth requirement, refresh semantics, and even a preview of the nested consumption payload. Nothing material is left out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are already documented, so the baseline is 3. The description echoes the refresh throttle and the ICCID provenance but adds no format or syntax detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (look up) and resource (remaining data for an eSIM line) keyed by ICCID, and explicitly anchors it to get_order_status as the upstream source. That anchoring distinguishes it from the sibling get_order_status and from the plan/order tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says where the ICCID must come from (a fulfilled get_order_status) and that OAuth is required, which is genuine usage context. It does not name an explicit when-not-to-use case or a competing alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_esim_plan_detailBRead-onlyInspect
Full detail for one eSIM plan by catalog_id, including price_token and unlimited (boolean).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| catalog_id | Yes | catalog_id from get_esim_plans |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| data_gb | No | |
| currency | No | |
| unlimited | No | |
| catalog_id | No | Identifier (integer or numeric string). |
| retail_eur | No | Decimal amount, normally a string, e.g. "21.98" |
| retail_usd | No | Decimal amount, normally a string, e.g. "21.98" |
| country_iso | No | |
| item_number | No | |
| price_token | No | |
| country_name | No | |
| coverage_type | No | |
| validity_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only that the response is the 'full detail' and mentions two fields (price_token, unlimited), which is thin given an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. The trailing mention of price_token and unlimited is slightly wasteful since an output schema already describes the return shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, non-destructive lookup with annotations and an output schema, the description covers the essentials. The unlabeled localization parameter (lang) and any error behavior for an unknown catalog_id are left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: catalog_id is already documented in the schema as coming from get_esim_plans, and the description simply restates that keying. The lang parameter (enum en/es) is undocumented in both places, so the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (fetch full detail) on a specific resource (one eSIM plan) keyed by catalog_id, which implicitly contrasts with the bulk get_esim_plans sibling. It stops short of naming the sibling explicitly, so an agent must infer the single-vs-list distinction from the wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'by catalog_id' phrasing implies this is called after listing plans to drill into one entry, but no when-to-use or when-not-to-use guidance is stated and no alternative is named. Usage is inferable rather than instructed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_esim_plansARead-onlyInspect
List publishable travel eSIM plans for a destination. country_iso is matched strictly: ISO-2 (es) returns that country only — not eu/ww regional or global plans. Use region slugs (eu, ww, as) for regional/global coverage. Each plan includes catalog_id, price_token, and unlimited (boolean). Optional data_type filters unlimited or limited plans; omit or all returns both.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| currency | No | ||
| data_type | No | Optional. Filter by data allowance. Omit or all returns both unlimited and limited plans. | |
| country_iso | No | ISO-2 from get_esim_destinations (e.g. es). Strict match — es does not include eu/ww. Regions: eu, ww, as. | |
| coverage_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| plans | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false and non-destructive, so the safety profile is covered. The description adds non-obvious behavior beyond that: the strict matching rule that silently excludes regional plans, and the default-inclusive filter semantics — both are things an agent would otherwise get wrong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four front-loaded sentences with the matching pitfall placed early, where it matters most. The sentence enumerating catalog_id, price_token, and unlimited is partially redundant given an output schema exists, but it is short enough not to be a real cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations and an output schema carry much of the burden, and the description covers the highest-risk parameter well. However, for a 5-parameter filtering tool with three enum parameters, leaving coverage_type undocumented and lang/currency undefined is a noticeable gap an agent cannot resolve from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 40%, so the description must compensate and only partly does. It thoroughly explains country_iso's strict-match behavior and the data_type default ('omit or all returns both'), but lang, currency, and coverage_type receive no mention anywhere — coverage_type in particular is a bare string with no enum and no explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('List publishable travel eSIM plans for a destination') and scopes the result set with 'publishable'. It implicitly separates itself from get_esim_plan_detail and get_esim_topup_plans via the list-vs-detail distinction, but never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable routing logic: use ISO-2 for a single country, region slugs (eu, ww, as) for regional or global coverage, and clarify that 'es' will not return EU/global plans. That is a real usage rule most tools lack, though no alternative tool is named for the detail-heavy case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_esim_topup_plansARead-onlyInspect
List the exact doctorsim.com top-up packs for a titular-owned eSIM ICCID (same order as Mi Cuenta). No custom amount. Each plan includes catalog_id and a signed price_token on catalog retail_eur (the same amount PRO credits debit). PRO accounts receive checkout_mode=credits. Requires OAuth orders:read.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Plan titles language | |
| iccid | Yes | ICCID digits of the original eSIM line | |
| currency | No | Display currency for price_token |
Output Schema
| Name | Required | Description |
|---|---|---|
| iccid | No | |
| plans | No | |
| parent | No | |
| topup_available | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description goes further by disclosing the OAuth scope 'orders:read' and that the signed price_token is bound to catalog retail_eur, the same amount PRO credits debit. That is real behavioral context an agent cannot get from the structured fields, though it doesn't cover failure modes or what happens for non-PRO accounts beyond the credits hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four compact sentences, purpose front-loaded, with the ownership constraint and auth requirement following. No filler; every clause (no custom amount, price_token semantics, PRO checkout_mode, OAuth scope) carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return structure needn't be spelled out, and the description still flags the salient returned fields (catalog_id, signed price_token, checkout_mode). Combined with the auth scope and ownership constraint, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning: 'titular-owned' narrows which ICCID is valid (ownership constraint not in the schema's 'original eSIM line'), and it ties price_token to retail_eur, clarifying what the currency parameter actually affects. The lang parameter is left to its enum-only schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the exact doctorsim.com top-up packs') scoped to a titular-owned eSIM ICCID, which separates it from the generic plan-listing siblings like get_esim_plans and from the purchasing tool create_esim_topup. The '(same order as Mi Cuenta)' note pins down the exact catalog view the agent will get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'No custom amount' implicitly excludes custom top-ups, and the ICCID requirement implies it is a pre-purchase lookup for an existing line. However, it never explicitly says when to use this instead of get_esim_plans, get_esim_plan_detail, or when to follow with create_esim_topup, so routing must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_giftcard_brand_productsARead-onlyInspect
Gift card denominations for a brand (id_operator from get_giftcard_brands) with token (use as price_token), service fee, and total per price point. Then preview_order / create_order with price_token only — never send a phone for gift cards.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Filter denominations by name/description | |
| lang | No | ||
| brand_id | Yes | Brand id_operator from get_giftcard_brands |
Output Schema
| Name | Required | Description |
|---|---|---|
| rates | No | |
| id_operator | No | Identifier (integer or numeric string). |
| country_name | No | |
| operator_name | No | |
| iso_short_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral value beyond that: the quota-token flow and the constraint against passing a phone number. It does not cover rate limits or pagination, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler, front-loaded with what the tool returns before the downstream workflow. Every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, yet the description still summarizes them usefully and completes the picture with the follow-up call pattern and the phone-number restriction. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description reinforces the two important linkages: brand_id comes from get_giftcard_brands, and the returned token is the price_token used downstream. It leaves q and lang unaddressed, though those are self-documenting in the schema (lang has an enum, q has its own description).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the exact resource (gift card denominations for a brand) and enumerates the return fields — token, service fee, total per price point — so an agent knows precisely what it gets. It is clearly distinguishable from the sibling get_giftcard_brands, which supplies the brand list rather than denominations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to source the brand argument from get_giftcard_brands (id_operator) and to chain into preview_order / create_order using price_token only. It also states a hard exclusion: never send a phone for gift cards. This is exactly the when/how/when-not guidance the dimension rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_giftcard_brandsARead-onlyInspect
List gift card brands (gaming, streaming, retail) for a country — no phone number involved. Each brand is an id_operator; pass it to get_giftcard_brand_products for denominations and price tokens. Paginated: pass cursor=meta.cursor when meta.has_more is true.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Brand keyword (e.g. netflix, amazon) | |
| lang | No | ||
| limit | No | Results per page (default 50, max 100) | |
| cursor | No | Pagination cursor from a previous response meta.cursor (omit on first page) | |
| country | Yes | iso_short_code (es, mx) or numeric id_country |
Output Schema
| Name | Required | Description |
|---|---|---|
| products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavior the annotations don't: pagination semantics tied to meta.cursor and meta.has_more, and the fact that each result row is an id_operator rather than a self-contained brand.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with purpose, then the downstream handoff, then pagination mechanics. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not required, and the description still flags the two fields an agent actually needs from the response (meta.cursor, meta.has_more). For a paginated read-only list tool this is nearly complete; only minor gaps remain around the uncaptioned lang enum and country format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema coverage the baseline is 3, and the description earns above that by explaining the pagination loop concretely ('pass cursor=meta.cursor when meta.has_more is true') and by defining what the returned identifier means. It does not clarify the country format or lang values, but the schema covers country and the enum is self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List gift card brands') with the scope ('for a country') and the categorical content (gaming, streaming, retail). It also explicitly differentiates itself from the sibling get_giftcard_brand_products by naming it as the next step, so an agent can route correctly without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context ('no phone number involved') and an explicit handoff ('pass it to get_giftcard_brand_products for denominations and price tokens'). It does not state when-not-to-use or position itself against search_products, so it stops short of the 5 bar, but the next-step guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operator_ratesARead-onlyInspect
Get live pricing for an operator. Each rate has product_name, description (bundle/data details), and token for preview_order/create_order. Use operator_id from get_operator_service_types for the chosen type (bundle vs airtime vs data). Pass q to search descriptions (e.g. q="5GB whatsapp"). Rate totals are indicative — call preview_order for the authoritative breakdown before the user confirms.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Keyword search on product name and description (e.g. "5GB", "whatsapp", "datos"). Use after the user specifies bundle/data features. | |
| lang | No | ||
| operator_id | Yes | id_operator for the selected service type | |
| service_type | No | Filter by topup_type ID from get_operator_service_types (e.g. bundle=6, data=5) |
Output Schema
| Name | Required | Description |
|---|---|---|
| rates | No | |
| id_operator | No | Identifier (integer or numeric string). |
| country_name | No | |
| operator_name | No | |
| iso_short_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds important behavioral context: rates include product_name, description, and a token; totals are indicative; and preview_order must be called for the authoritative breakdown. This goes beyond the safety profile and tells the agent how to interpret and act on the results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides tightly scoped guidance. Every sentence adds actionable information; there is no restatement of the tool name or schema fields without added value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be fully explained. Still, the description usefully mentions the rate fields and token semantics, the indicative-total caveat, and the preview_order dependency, making the definition complete for correct invocation and downstream workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so baseline is 3. The description adds useful meaning for operator_id (comes from get_operator_service_types) and q (keyword search on descriptions with an example), though the lang parameter remains unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get live pricing for an operator.' It clearly distinguishes this tool from sibling operations by noting that returned tokens feed preview_order/create_order and that preview_order is required for authoritative totals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use operator_id from get_operator_service_types for the chosen service type, recommends q for description searches with an example, and directs the agent to call preview_order before user confirmation. These are clear when-to-use and when-to-defer instructions involving named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operatorsARead-onlyInspect
List mobile operators for a country (uses id_country from get_countries). Use when carrier lookup failed or the user already knows the operator.
| Name | Required | Description | Default |
|---|---|---|---|
| country_id | Yes | id_country from get_countries |
Output Schema
| Name | Required | Description |
|---|---|---|
| operators | Yes | Operators keyed by id_operator (empty array when the country has none). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety and closed-world nature are covered structurally. The description adds only the country_id provenance dependency; it says nothing about coverage gaps (country with no operators) or pagination, and an output schema exists so return shape needn't be explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, purpose front-loaded, with the dependency and usage trigger packed in without filler. Nothing here is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with full schema coverage, an output schema, and annotations carrying the safety profile, the description covers purpose, prerequisite source, and usage trigger. Only edge-case behavior (empty results, whether the list is filtered by country availability) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is already documented as 'id_country from get_countries'. The description merely restates that provenance, adding no syntax, format, or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List mobile operators for a country') and ties the scope to a sibling input ('uses id_country from get_countries'), so an agent can distinguish it from get_countries and the rate/service-type siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('use when carrier lookup failed or the user already knows the operator'), which implicitly positions lookup_carrier as the fallback path. It doesn't name that sibling outright or state a when-not-to-use case, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operator_service_typesARead-onlyInspect
After carrier lookup, list what recharge types are available for an operator: airtime (saldo), bundles, mobile data, etc. Each type has its own id_operator — use that id for get_operator_rates. Ask the user: "Do you want airtime, bundles, or data?" then call rates with the matching service type.
| Name | Required | Description | Default |
|---|---|---|---|
| operator_id | Yes | id_operator from lookup_carrier or get_operators (parent/airtime operator) |
Output Schema
| Name | Required | Description |
|---|---|---|
| service_types | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a read-only, non-destructive, closed-world lookup, so the description needn't restate safety. It adds meaningful behavioral context by explaining the downstream sequencing and the crucial nuance that each returned service type carries its own id_operator for rate lookup. It doesn't discuss caching or output formatting, but the output schema covers return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and sequencing are front-loaded, and the description is short enough to scan. However, the final sentence repeats the get_operator_rates routing already implied by the preceding sentence about each type's own id_operator, adding mild redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with an output schema, the description covers the essential preconditions, downstream routing, and the key id_operator nuance. It is nearly complete, with only minor room for elaboration about the return shape or error cases, which the output schema largely handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is already fully documented in the schema as the id_operator from lookup_carrier or get_operators. The description reinforces that operator_id is the parent/airtime operator identifier and warns that returned service types have their own id_operator, but the parameter itself is not elaborated beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list available recharge/service types for an operator after carrier lookup. It explicitly distinguishes the result from sibling tools by explaining that each service type has its own id_operator and that get_operator_rates should be called with the matching id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit precondition ('After carrier lookup'), names the follow-up tool (get_operator_rates), and even prescribes the user-facing question to disambiguate airtime, bundles, or data. The workflow from lookup to service-type selection to rates is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_statusARead-onlyInspect
Check order or checkout status. Guests: pass payment_link (preferred) or checkout_hash from create_order — no login; the hash is unguessable. Do not pass a sequential order_id without OAuth (IDs are enumerable). Do not ask the buyer for the hash or show it. OAuth / PRO: pass order_id (sandbox orders: sandbox_… id). If create_order timed out before returning order_id, pass its idempotency_key instead — never re-create. Fulfilled eSIM orders include iccid, lpa_string, install_url, a hosted qr_code_url PNG, remaining balance_amount (provider refresh only when last check is older than five minutes), and nested consumption (cron snapshot: activated, unlimited, data_remaining_gb, days_left). Fulfilled gift cards may include redemption_code or redemption_url.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | No | Sequential ticket ID. Always requires OAuth / API key. Do not use for guest checkout. | |
| payment_link | No | Checkout URL from create_order. Preferred guest status key — no login. Do not show the embedded hash to the buyer. | |
| checkout_hash | No | Machine identifier from create_order (32–64 hex). No login. Do not show to the buyer. Prefer payment_link. | |
| idempotency_key | No | OAuth / API key only. The idempotency_key sent to create_order when the create timed out before returning order_id. Finds that order without creating anything (24h, same account). |
Output Schema
| Name | Required | Description |
|---|---|---|
| iccid | No | |
| status | No | |
| order_id | No | Identifier (integer or numeric string). |
| lpa_string | No | |
| consumption | No | Cron snapshot for native My eSIMs. unlimited=true means data_remaining_gb is null. days_left is null until activated. |
| install_url | No | |
| qr_code_url | No | |
| balance_unit | No | |
| payment_link | No | |
| show_to_user | No | Fields the assistant may show the buyer. |
| checkout_hash | No | Machine identifier. Never show or read aloud. |
| balance_amount | No | |
| redemption_url | No | |
| delivery_status | No | |
| redemption_code | No | |
| balance_checked_at | No | |
| balance_expiration | No | |
| checkout_hash_usage | No | machine_only |
| assistant_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnly/non-destructive already declared by annotations, the description still adds substantial context: IDs are enumerable without OAuth, the hash is unguessable, idempotency recovery is scoped to 24h on the same account, and provider refresh is throttled when the last check is under five minutes old. Those are behavioral traits no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then callers, then recovery path, then return payload; sentences are dense and mostly load-bearing. It runs long and the return-value enumeration overlaps with the existing output schema, which slightly dilutes focus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four optional params, full schema coverage, an output schema, and read-only annotations, the description covers everything an agent needs: which key to use, what happens on timeout, and what a fulfilled eSIM/gift card response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond it by explaining precedence (payment_link over checkout_hash), the OAuth constraint on order_id, and the timeout-recovery workflow where idempotency_key substitutes for a missing order_id. It doesn't add format specifics but adds real decision logic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Check order or checkout status') and immediately segments the operation by caller identity (guest vs OAuth/PRO). It clearly signals this is a status-read tool distinct from create/preview siblings, though it never acknowledges the sibling 'guest_order_lookup', which could be a competing path for the same guest use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states which identifier to pass per caller type, marks payment_link as '(preferred)', and gives concrete prohibitions: don't pass sequential order_id without OAuth, don't ask the buyer for the hash, never re-create after a timeout. This is near-complete when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guest_order_lookupARead-onlyInspect
Guest order status when checkout_hash is gone. Pass the buyer email and the user-visible ticket (order_id). No login. Wrong email or wrong ticket both return generic ORDER_NOT_FOUND. Prefer get_order_status with payment_link when the hash is still known. Sequential GET /orders/{id} still requires OAuth.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| Yes | Checkout / titular email for the order. | ||
| order_id | Yes | User-visible ticket number shown to the buyer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| iccid | No | |
| status | No | |
| order_id | No | Identifier (integer or numeric string). |
| lpa_string | No | |
| consumption | No | Cron snapshot for native My eSIMs. unlimited=true means data_remaining_gb is null. days_left is null until activated. |
| install_url | No | |
| qr_code_url | No | |
| balance_unit | No | |
| payment_link | No | |
| show_to_user | No | Fields the assistant may show the buyer. |
| checkout_hash | No | Machine identifier. Never show or read aloud. |
| balance_amount | No | |
| redemption_url | No | |
| delivery_status | No | |
| redemption_code | No | |
| balance_checked_at | No | |
| balance_expiration | No | |
| checkout_hash_usage | No | machine_only |
| assistant_instruction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a safe read operation, but the description adds meaningful context beyond them: no login is required, both invalid email and invalid ticket return the same generic ORDER_NOT_FOUND error, and a different endpoint still requires OAuth. These details materially help an agent understand auth and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core purpose and followed by usage guidance and behavioral notes. Every sentence contributes useful information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need no explanation. Annotations cover safety, and the description covers the remaining critical concerns: authentication, error behavior, and when to prefer the sibling tool. The only minor omission is the optional lang parameter, but that is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description reinforces the meaning of the required parameters (buyer email and user-visible ticket/order_id), but the schema already documents both. With only 67% schema description coverage, the optional 'lang' parameter (enum en/es) is left unexplained in both schema and description, so the description does not fully compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Guest order status') and a precise fallback condition ('when checkout_hash is gone'), which clearly distinguishes it from get_order_status. An agent can identify the tool's purpose without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the preferred alternative ('Prefer get_order_status with payment_link when the hash is still known') and states the no-login condition. It also clarifies that wrong email or ticket both return a generic error, setting expectations for failure modes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersARead-onlyInspect
List completed or refunded orders for the authenticated user. Requires OAuth — not available for guest checkout. type=esim includes iccid, install_url, and hosted qr_code_url on fulfilled rows. balance_amount is "per order basis" on the list (no provider call). Decode nested consumption for days left / remaining data / unlimited (cron snapshot).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| delivery_status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| orders | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly; the description adds real value beyond them — OAuth requirement, no provider call for balance_amount, and what type=esim rows include (iccid, install_url, qr_code_url). Doesn't cover rate limits or pagination, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and auth constraint; sentences are dense but mostly earn their place. The final 'decode nested consumption' sentence is somewhat cryptic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, yet two of three parameters (limit, delivery_status) remain undocumented in both schema and description. Adequate for the main use case but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It explains type=esim enrichment and the balance_amount/list semantics, but leaves the topup/giftcard enum values, limit, and delivery_status undocumented. Partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — list completed or refunded orders for the authenticated user — and the OAuth/guest-checkout constraint implicitly distinguishes it from guest_order_lookup and get_order_status. Clear, though it doesn't name siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies the condition (authenticated user, no guest checkout), which routes guest flows to guest_order_lookup. Lacks explicit exclusion wording or direct sibling naming, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksARead-onlyInspect
PRO accounts only (requires webhooks:read OAuth scope). Lists registered webhook subscriptions. Requires OAuth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| webhooks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds what annotations cannot: the account tier and OAuth scope prerequisites needed before the call will succeed. It doesn't mention pagination or result limits, but the output schema covers return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the hardest constraint (PRO-only, scope required). 'Requires OAuth' partially repeats the scope mention, a small redundancy, but nothing is wasted beyond that.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument read tool with full annotations and an output schema, the description covers the main remaining risk: auth and tier prerequisites. It could note pagination behavior or empty-list semantics, but nothing critical for correct invocation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. No parameter claims are missing or misleading.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Lists registered webhook subscriptions'), so an agent can immediately tell this is a webhook-enumeration read. It doesn't need sibling differentiation because no other sibling touches webhooks, but it also doesn't disambiguate beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states eligibility constraints (PRO account, webhooks:read OAuth scope) that gate usage, which is genuinely useful routing information. However, it never states when to call this versus other listing tools or any exclusions, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_carrierARead-onlyInspect
Identify the mobile carrier (operator) and country from a phone number in E.164 format (e.g. +522221231231). ALWAYS call this FIRST when the user provides a phone number for a top-up. Returns id_operator and id_country for the next steps. If lookup fails, ask the user which carrier/network the number uses.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| phone | Yes | Recipient phone in E.164 format, including country code (e.g. +522221231231) |
Output Schema
| Name | Required | Description |
|---|---|---|
| img | No | |
| phone | No | |
| id_country | No | Identifier (integer or numeric string). |
| topup_type | No | |
| id_operator | No | Identifier (integer or numeric string). |
| country_name | No | |
| operator_name | No | |
| iso_short_code | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: it returns id_operator and id_country for downstream steps and tells the agent to ask the user on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short sentences with no wasted text. The primary instruction to call it first for phone-number top-ups is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description does not need to fully explain return values, though it helpfully names id_operator and id_country. The only meaningful gap is that lang is not explained anywhere, despite being an enum parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The required phone parameter is documented in the schema with E.164 format and an example, and the description reinforces that format. However, the lang parameter is an enum with no description in the schema or the tool description, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: identify the mobile carrier and country from a phone number. It also distinguishes this lookup from sibling listing tools like get_operators and get_countries by tying it directly to a phone-number input and top-up flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit sequencing guidance: ALWAYS call this FIRST when the user provides a phone number for a top-up. It also specifies a fallback action if lookup fails, asking the user which carrier/network the number uses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_esim_orderARead-onlyInspect
Alias of preview_order with type=esim (kept for existing connectors). Guest can call this without Authorization (same as preview_order). Preview a travel eSIM order without placing it (no credits deducted). Returns unlimited (boolean), data_gb, and checkout_mode (credits for PRO, payment_link for guest / consumer OAuth). Sandbox keys (test_*) use the sandbox catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| currency | No | ||
| catalog_id | Yes | ||
| price_token | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data_gb | No | |
| pricing | No | |
| unlimited | No | |
| catalog_id | No | Identifier (integer or numeric string). |
| order_type | No | esim |
| environment | No | sandbox | production |
| price_token | No | |
| checkout_mode | No | credits (PRO credit checkout) | payment_link (guest / consumer pays on doctorsim.com) | stripe_link (opt-in Stripe Checkout Session URL when requested and agentic_stripe_link is ON). |
| current_balance_eur | No | Decimal amount, normally a string, e.g. "21.98" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations, it discloses that no credits are deducted, that guests can call it without Authorization, and that sandbox keys (test_*) route to the sandbox catalog. These are non-obvious behavioral traits an agent could not infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the alias relationship and preconditions in short, purposeful sentences. Slightly dense with parentheticals, but every sentence carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Auth, cost, and sandbox behavior are covered well, and an output schema exists so return values need not be restated. However, with 0% schema description coverage, the description leaves all four input parameters unexplained, which is a material gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description explains none of the four parameters (catalog_id, price_token, lang, currency). The mention of return fields (data_gb, checkout_mode, unlimited) does not inform input semantics, leaving required catalog_id/price_token meaning undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Preview a travel eSIM order without placing it') and explicitly frames itself as an alias of preview_order scoped to type=esim. An agent can distinguish it from preview_order and from the mutation sibling create_esim_order without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: callable by guests without Authorization, no credits deducted, and the 'kept for existing connectors' note implies new callers should prefer preview_order with type=esim. It stops short of an explicit when-not/alternative statement, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_orderARead-onlyInspect
Returns the price breakdown WITHOUT placing an order — one tool for every vertical (top-up, travel eSIM, gift card; type is inferred from price_token / catalog_id). Required for PRO credits (shows the debit before create_order). Optional for guest / consumer payment_link — guests can skip preview and create immediately. Guest checkout_mode=payment_link; OAuth PRO checkout_mode=credits. Travel eSIM also returns unlimited and data_gb.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| type | No | Order vertical. Optional — inferred from price_token (top-up / gift card rate token vs eSIM token) or catalog_id. Set esim for travel eSIM. | |
| phone | No | Recipient E.164 phone number. Required for mobile/airtime top-ups. Do NOT provide for gift cards or eSIM (digitally delivered) — omit it. | |
| currency | No | Travel eSIM only: display currency. | |
| sms_text | No | Custom SMS text (optional) | |
| catalog_id | No | Travel eSIM only: catalog_id from get_esim_plans (with its price_token). | |
| country_id | No | Do NOT send when using price_token — destination is encoded in the token. If you must send it, copy id_country from get_countries or product search (Spain=34). Never invent a number. | |
| operator_id | No | Optional. Omit when using price_token. If sent, must be id_operator from rates/search. | |
| price_token | Yes | token from get_operator_rates (top-up / gift card) or price_token from get_esim_plans (travel eSIM) | |
| sms_notification | No | Top-up only: include the 0.99 EUR SMS fee in the breakdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | No | topup | giftcard | esim |
| data_gb | No | Travel eSIM only. |
| pricing | No | |
| unlimited | No | Travel eSIM only. |
| catalog_id | No | Travel eSIM only. |
| environment | No | production | sandbox |
| checkout_mode | No | PRO=credits (shows credit applied). Consumer=payment_link (user pays on doctorsim.com after create_order). |
| currency_basis | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with that ('WITHOUT placing an order'). Beyond the annotations it adds real context: it surfaces the credit debit that a subsequent create_order would incur, and notes the extra travel-eSIM return fields (unlimited, data_gb). It stops short of stating error/expiry behavior for an invalid or stale price_token, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key constraint ('WITHOUT placing an order') is front-loaded and the whole thing is a handful of tight sentences with no filler. It is dense with parentheticals and enum-like asides, which slightly taxes parsing, but every sentence carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be spelled out, and the description covers the workflow gating, both auth personas, all three verticals and the eSIM-specific extras. What it omits — behavior on expired/invalid tokens or partial failures — is secondary but would help for a tool whose only required input is an opaque token.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 90%, so the baseline is 3; the description earns a bump by explaining that vertical type is inferred from price_token/catalog_id so the type param is often unnecessary, which is a semantic shortcut the schema only partially conveys. It does not add much on the other nine parameters, which the schema already documents well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a precise verb+resource ('Returns the price breakdown') and immediately scopes it ('WITHOUT placing an order'), which separates it from create_order and the other write siblings. It also declares it covers every vertical (top-up, travel eSIM, gift card), so an agent knows this single tool spans cases it might otherwise split across siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit conditional routing: required for PRO credits because it shows the debit before create_order, optional for guest/consumer payment_link where guests can create immediately. It ties the decision to concrete states (checkout_mode=payment_link vs credits) rather than leaving the agent to infer, and names the follow-up tool (create_order).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsARead-onlyInspect
Browse the country catalog by operator/brand name (gift cards, gaming, etc.). For mobile top-ups with a phone number, use lookup_carrier first, then get_operator_service_types and get_operator_rates — NOT this tool alone. When operator_id AND q are both set, searches live rate descriptions (bundles/data) for that operator instead of catalog names. Paginated: pass cursor=meta.cursor when meta.has_more is true.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Catalog keyword (operator/brand/service type name) OR, with operator_id, bundle/data description search (e.g. "5GB whatsapp") | |
| lang | No | ||
| limit | No | Results per page (default 50, max 100) | |
| cursor | No | Pagination cursor from a previous response meta.cursor (omit on first page) | |
| country | Yes | iso_short_code (es, mx) or numeric id_country | |
| operator_id | No | Filter by id_operator; with q, enables rate description search | |
| service_type | No | Filter by topup_type ID (from get_operator_service_types) |
Output Schema
| Name | Required | Description |
|---|---|---|
| products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, destructive=false and closed-world, so safety is covered. The description adds real behavioral context beyond them: pagination is driven by meta.has_more and cursor=meta.cursor, and the q+operator_id combination silently switches from name search to live rate-description search. It doesn't mention result ordering or rate limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with purpose, then the anti-pattern with named alternatives, then the mode switch, then pagination. No filler and each sentence changes how the agent would call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description needn't document returns, and it covers the two things most likely to cause a bad call: picking this tool for top-ups and mishandling the q+operator_id mode. Minor gap: it doesn't clarify whether service_type or lang still apply in rate-description mode, leaving some parameter interaction to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the baseline is 3; the description earns above that by explaining the non-obvious interaction where q changes meaning when operator_id is present (catalog names vs bundle/data descriptions) and by tying cursor to meta.cursor. Other parameters (limit, lang, service_type) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Browse the country catalog by operator/brand name') and scopes the content types (gift cards, gaming). It also explicitly separates itself from the mobile top-up flow, so an agent can distinguish it from get_operators, get_operator_rates and the esim siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the exclusions and the alternatives in sequence: for phone-number top-ups use lookup_carrier, then get_operator_service_types and get_operator_rates, 'NOT this tool alone'. It also explains the alternate search mode (operator_id + q) so the agent knows which invocation path to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
23 tool updates
- First observed
create_esim_order - First observed
create_esim_topup - First observed
create_order - First observed
get_balance - First observed
get_countries - First observed
get_esim_destinations - First observed
get_esim_line - First observed
get_esim_plan_detail - First observed
get_esim_plans - First observed
get_esim_topup_plans - First observed
get_giftcard_brand_products - First observed
get_giftcard_brands - First observed
get_operator_rates - First observed
get_operator_service_types - First observed
get_operators - First observed
get_order_status - First observed
guest_order_lookup - First observed
list_orders - First observed
list_webhooks - First observed
lookup_carrier - First observed
preview_esim_order - First observed
preview_order - First observed
search_products
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePerplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.2Apache 2.0
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs113 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1618 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.