Commerce for Agents
Server Details
Compare US mobile plans, VPNs, travel eSIMs, home internet by address, and German energy tariffs.
- Status
- Healthy
- Uptime
- 100.0% over 40 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 9 tools
The booking trio overlaps heavily: book-contract and submit-switch-request both 'file a concierge switch request ... in one call' for autonomous agents with the user's full data and authorization, appearing near-duplicate. Only start-booking (opens the form) is clearly distinguishable from them, leaving agents with ambiguous choices.
All names use kebab-case and the five comparison tools share a clean compare-<domain> pattern. Minor deviation: tariff-details is noun-based while the action tools (start-booking, submit-switch-request, book-contract) are verb-led, but the convention remains readable and predictable.
Nine tools is well-scoped for a comparison-plus-booking server. Each comparison vertical earns its place and the booking/detail tools are targeted, with no filler.
Comparison coverage is broad (broadband, eSIM, mobile, energy, VPN), but the booking/lifecycle path exists only for German energy tariffs — no booking or detail follow-through for broadband, mobile, or VPN. There is also no detail/retrieval tool parallel to tariff-details for the other domains, leaving some dead ends.
Available Tools
9 toolsbook-contractRequest Energy Contract (Concierge Switch)ADestructiveInspect
Files a concierge switch request with the complete contract data in one call. Intended for autonomous agents that already hold the user's full profile, IBAN and a standing authorization; in a conversation with a person, start-booking opens a form in which the user enters these data. Commerce for Agents stores the request encrypted and an operator submits the contract application to the provider; the user receives a confirmation email at once and the provider's contract documents later. There is no self-service checkout link. Input: the ref of the chosen offer plus the contract data. Postal code and city come from the comparison; previousProvider, previousCustomerNumber and meterNumber are printed on the last energy bill. consent: true attests that the user explicitly agreed to (1) Commerce for Agents submitting the contract on their behalf, (2) the SEPA direct-debit mandate for the given IBAN and (3) the privacy policy at commerceforagents.com/privacy, either by an explicit yes in the conversation or by a standing authorization given to the agent. The response contains nextSteps for the user.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Offer reference from a compare-tariffs result (field `ref`). | |
| iban | Yes | IBAN for the SEPA direct-debit mandate, no spaces (e.g. DE89370400440532013000). | |
| Yes | Email address — receives the booking confirmation and provider documents. | ||
| phone | No | Phone number (optional, some providers ask for it). | |
| street | Yes | Street of the supply address (Straße). | |
| consent | Yes | The user has explicitly agreed to: (1) Commerce for Agents submitting this contract on their behalf, (2) the provider's contract terms as shown by tariff-details, (3) the SEPA mandate for the given IBAN, (4) the privacy policy — and has been told the contract can be withdrawn within 14 days. True only after that agreement. | |
| language | No | Language of the conversation — used for the confirmation email. Default: "de". | |
| lastName | Yes | Last name (Nachname). | |
| birthDate | Yes | Date of birth, ISO format YYYY-MM-DD. Energy providers require it for the contract. | |
| firstName | Yes | First name (Vorname). | |
| moveInDate | No | Move-in date (Umzugsdatum), ISO YYYY-MM-DD. Required for switchType "relocation", ignored for a switch. | |
| salutation | Yes | Salutation (Anrede), required by the providers: "herr", "frau" or "divers". | |
| switchType | Yes | "switch": changing provider at the current address (Anbieterwechsel). "relocation": moving in / first contract at this address (Umzug/Neueinzug). | |
| houseNumber | Yes | House number (Hausnummer), e.g. "12a". | |
| meterNumber | No | Meter number (Zählernummer, optional — printed on the meter or the last bill). | |
| accountHolder | No | Account holder if different from the contract holder. | |
| desiredStartDate | No | Desired contract start, ISO YYYY-MM-DD. Omit for the next possible date. | |
| previousProvider | No | Current/previous energy provider. Required for switchType "switch". | |
| previousCustomerNumber | No | Customer number at the previous provider (Kundennummer, optional but speeds up the switch). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| tariff | Yes | |
| provider | Yes | |
| nextSteps | Yes | |
| requestId | Yes | |
| annualTotalEur | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses the full workflow: encrypted storage, operator submission to the provider, immediate confirmation email, and later contract documents. It also details the consent requirements, including the 14-day withdrawal notice, which is critical for a binding action.
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 every sentence earns its place. It front-loads the main action and intended audience before workflow details, and it groups parameter sources usefully without repeating every schema field.
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 high-stakes 19-parameter tool with a rich schema and output schema, the description covers preconditions, workflow, timing, consent, and response contents. Nothing essential for selecting or invoking the tool 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 the baseline is 3. The description adds meaningful context beyond the schema: postal code and city come from the comparison, previousProvider/previousCustomerNumber/meterNumber are found on the last energy bill, and consent:true attests to specific legal agreements.
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 and resource: 'Files a concierge switch request with the complete contract data in one call.' It clearly distinguishes itself from sibling start-booking by stating that book-contract is for autonomous agents, while start-booking opens a form for a person.
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 states when to use this tool (autonomous agent already holds full profile, IBAN, standing authorization) and contrasts it with start-booking for conversation-driven data entry. It also names a non-option: 'There is no self-service checkout link.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare-broadbandFind US Internet Providers at an AddressARead-onlyIdempotentInspect
For questions like “what internet providers are at my address?”, “is fiber available?”, “fast home internet near me?”, “Starlink vs cable?”, “cheapest internet at my address?”, “how much is internet here?”, or “moving to an address, what internet can I get?”, look up US fixed broadband provider availability and speed by address or coordinates. Returns FCC availability and maximum advertised speeds by census block (not building-level), ranked by low latency, then speed. Address is sent to the US Census Bureau Geocoder to identify the census block; starting prices ("from $X/mo", with conditions, source and check date) for major national and regional providers (e.g. AT&T, Verizon, T-Mobile, Spectrum, Xfinity, Optimum, Starlink). Filter by minimum download speed or technology.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude, if no address is given. | |
| lon | No | Longitude, if no address is given. | |
| address | No | US street address incl. city and state or ZIP. | |
| technology | No | Only these technologies. | |
| minDownloadMbps | No | Only providers advertising at least this download speed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description contributes real added context: results are census-block level rather than building-level (an accuracy caveat), the address is forwarded to the US Census Bureau Geocoder (a privacy/data-flow disclosure), results are ranked by low latency then speed, and prices carry conditions and a check date.
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 retrieval-friendly trigger questions, then the behavioral facts. The long enumerations of example queries and of major providers (AT&T, Verizon, T-Mobile, ...) are somewhat padded, but each clause still carries selection 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?
With no output schema present, the description carries the return-value burden and does so: it describes the shape of results (per-provider availability and max speeds, ranked, with starting prices and source/check date) plus coverage limits and the geocoding dependency. Given 0 required parameters, the 'address or coordinates' framing is the one remaining implicit point, but it is adequately signposted.
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, but the description adds meaning beyond the field text: it frames address vs coordinates as interchangeable locating inputs and explains that the address is geocoded to a census block, which justifies why a street address (not just lat/lon) is accepted. The speed and technology filters are restated rather than enriched, hence not a 5.
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 — look up US fixed broadband provider availability and speed by address or coordinates — and the domain terms (broadband, internet providers) cleanly separate it from siblings like compare-mobile-plans, compare-vpn, and compare-esims. The returned artifact (FCC availability + max advertised speeds by census block) is named explicitly, so an agent can select it without reading 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?
The opening list of sample questions (“what internet providers are at my address?”, “is fiber available?”, “Starlink vs cable?”) gives concrete triggers for invocation. It stops short of naming an alternative tool or stating when NOT to use it (e.g., non-US addresses are implicitly excluded only via 'US fixed broadband').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare-esimsCompare Travel eSIMsARead-onlyIdempotentInspect
Use this when the user needs phone data abroad: a travel eSIM, an international data plan for a trip, avoiding roaming charges, "will my phone work in Japan", the cheapest data for N days in a country, or unlimited travel data. Ranks a curated catalog of country eSIM packages (Airalo, Saily, Ubigi, Holafly, Nomad) by USD list price among packages valid for the whole trip with at least the data needed, listing each provider's cheapest package first and then the remaining packages by price, and shows price per GB and per day with a provider link. It does not check phone compatibility; the phone must be eSIM-capable and unlocked. Destinations: AU, BR, CA, CO, DE, ES, FR, GB, GR, IT, JP, KR, MX, NL, PT, TH, TR, US. Inputs: destination (country code), days, optional data_gb, unlimited and providers. No personal data is used. Keywords: travel eSIM, eSIM for Japan, cheapest eSIM, international data plan, roaming.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | Trip length in days; packages must be valid at least this long. | |
| data_gb | No | Minimum data needed in GB (default 1). Ignored when unlimited is true. | |
| providers | No | Only these providers, e.g. ["Airalo", "Saily"]. | |
| unlimited | No | true: only unlimited-data packages; false: exclude them; omitted: unlimited packages also qualify. | |
| destination | Yes | Destination country, ISO 3166-1 alpha-2 (e.g. JP, US, GB). Supported: AU, BR, CA, CO, DE, ES, FR, GB, GR, IT, JP, KR, MX, NL, PT, TH, TR, US. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | |
| basis | Yes | |
| closest | No | When nothing qualifies: the largest package that lasts the trip. |
| message | No | |
| results | Yes | |
| excluded | Yes | |
| disclosure | Yes | |
| destination | Yes | |
| catalogVerifiedOldest | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and closed-world; the description goes further by disclosing the ranking algorithm, that each result carries a provider link and price per GB/day, that no personal data is used, and the hard limitation that phone compatibility is not checked. The one remaining gap is any statement about result count, pagination, or what happens when no package matches.
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 trigger sentence is well front-loaded and the behavioral sentence earns its place, but the trailing 'Keywords: travel eSIM, eSIM for Japan, cheapest eSIM, international data plan, roaming' block duplicates the opening triggers verbatim and the supported-destination list repeats the schema's 'Supported:' list. Roughly a third of the text is redundant.
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 need not explain return values, and it still covers the safety profile indirectly, the supported destination set, the inputs, the ranking behavior, and its key limitation. An agent has everything needed to call it correctly.
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 each parameter description already carries real semantics (defaults, exclusion rules, ISO codes, unlimited interaction). The description's 'Inputs: destination, days, optional data_gb, unlimited and providers' mostly restates the schema and adds no format or edge-case detail beyond it, so baseline 3 is correct.
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 ('Ranks a curated catalog of country eSIM packages ... by USD list price') plus the exact ranking rule (cheapest package per provider first, then remaining by price) and the provider set. This clearly separates it from siblings like compare-broadband and compare-mobile-plans 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?
Opens with a rich enumeration of user intents that select this tool ('phone data abroad', 'avoiding roaming charges', 'will my phone work in Japan', 'cheapest data for N days'), and adds explicit when-not conditions: it does not check phone compatibility and the device must be eSIM-capable and unlocked. It does not name a competing sibling tool, but the trigger set and exclusions are detailed enough to route the agent confidently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare-mobile-plansCompare US Mobile Phone PlansARead-onlyIdempotentInspect
Compares and ranks US mobile phone plans, cheapest first, from a curated catalog of carrier and prepaid (MVNO) plans, each price checked on the provider's own page, by 12-month average cost per line, with any promo price shown alongside. The catalog is a selection, not the whole market; each result states how many plans and providers it covers and the oldest price-check date. Inputs: number of lines, and optionally data need, budget per line, prepaid or postpaid, must-have features and preferred network. No address or location is used, so network coverage is not checked; each result carries a coverage note. Keywords: cheapest phone plan, compare cell phone plans, cell phone plan, mobile plan comparison, switch carriers, unlimited data plan, family plan, prepaid vs postpaid.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | Number of phone lines to price. | |
| data_need | No | Minimum data: light ≥2GB, moderate ≥5GB, heavy ≥20GB, unlimited = unlimited plans only. | |
| must_haves | No | Required features: hotspot, 5g, premium_data (deprioritization-free), unlimited_data. | |
| budget_per_line | No | Max USD/month per line. | |
| preferred_network | No | Preferred underlying network, e.g. AT&T, Verizon, T-Mobile. | |
| prepaid_or_postpaid | No | Restrict to prepaid or postpaid plans; omit for both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lines | Yes | |
| plans | Yes | |
| source | Yes | |
| message | No | |
| priceNote | Yes | |
| coverageNote | Yes | |
| selectionNote | Yes | Curated selection of N plans from M providers, not the whole market. |
| catalogPlanCount | Yes | |
| oldestVerifiedDate | No | Oldest verified_date among the plans shown. |
| catalogProviderCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly/idempotent/openWorld=false) by disclosing data provenance (prices checked on the provider's own page), the comparison metric (12-month average per line with promo prices shown alongside), and the transparency guarantees each result carries (plan/provider coverage counts, oldest price-check date, coverage note). This is exactly the extra context annotations cannot supply.
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 core action and ranking method, then layers scope limits and inputs efficiently. The trailing 'Keywords:' list is retrieval-oriented padding that an agent gains little from, which keeps it from a 5.
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 read-only comparison tool with an output schema, the description covers everything an agent needs: what is compared, how it is ranked, catalog limitations, what each result reports, and the absence of location-based coverage checking. Nothing material 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 description coverage is 100%, so the schema already documents all six parameters including enums and thresholds. The description only restates the parameter list ('number of lines, and optionally data need, budget per line, prepaid or postpaid, must-have features and preferred network') without adding syntax or semantics beyond it, so the baseline 3 applies.
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 (compares and ranks), a precisely scoped resource (US carrier and MVNO phone plans), and the ranking rule (cheapest first by 12-month average cost per line). This clearly separates it from siblings like compare-broadband, compare-esims, and compare-tariffs without needing their 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 clear context on when the tool applies, including that the catalog is a curated selection rather than the whole market, and that no location is used so coverage is not checked. It does not explicitly route to or away from a sibling (e.g. tariff-details for a single plan), 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.
compare-tariffsCompare German Energy TariffsARead-onlyIdempotentInspect
Compares German electricity and gas tariffs with live market data for a postal code and an annual consumption, and returns one page of the ranked market: prices with and without bonus, monthly average, savings against the local default supplier (Grundversorgung) or the user's current contract, contract terms, price guarantee, eco status and customer ratings. Covers tariff comparison only, not general energy questions. Prices come live from the market data and can change at any time. Keywords: Stromvergleich, Gasvergleich, Stromtarif, Gastarif, Stromanbieter wechseln, Gasanbieter wechseln, Ökostrom, Strompreise, Energiekosten senken, electricity tariff, gas tariff, switch energy provider, Germany. Inputs: postalCode (5 digits) and annualConsumptionKwh. Both come from the user: the ranking is only valid for the household's actual consumption, which is printed on the last bill, and the tool has no default for it. The typical values by household size in the parameter description help a user who does not know the figure; a comparison run on a household size alone is approximate. energyType selects gas; electricity is the default. Without filters the result covers the whole market. An energy bill contains every input: postal code, annual consumption, and the reference for the savings comparison, which is the future monthly payment (Abschlag) if the bill states one, otherwise the Arbeitspreis and Grundpreis lines (see the current* parameters). The bill total belongs to the past period and may include a one-time bonus, so it is not a reference. The bill's provider, customer number and meter number are the fields the booking form asks for later. Each offer carries its complete data (prices, bonuses, contract terms, flags such as dynamic or eco, ratings, remarks); tariff-details adds the cost breakdown, energy mix and provider details. Only offers with an eco object are eco tariffs. Their eco.statement and eco.proof are legally required wording (EU EmpCo, Directive 2024/825): quote both verbatim when describing a green tariff. Offers without eco are not green, eco, renewable or climate-neutral. The ranking method, bonus handling, price guarantees and eco labels are explained at https://commerceforagents.com/comparison-basis. The response states totalResults and how to reach the rest of the ranking (page, providers, filters). Dynamic (spot-price) tariffs are included only with includeDynamicTariffs. The result renders as tariff cards with filters (eco, contract length, price guarantee, bonus handling, providers) below the message, so the list does not need repeating in text. Each offer has a ref: tariff-details shows its full conditions, and start-booking opens the booking form in which the user enters the contract data, IBAN and consent. language sets the language of the cards and their buttons.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page (1-based). The response reports totalResults; request further pages to see more of the ranking. | |
| limit | No | Tariffs per page. Default: 10, max 20. | |
| sortBy | No | Market-wide sort: "price" (first-year total, default), "rating" (customer rating, best first), "providerName". | |
| district | No | City district (Ortsteil), only needed when the response reports multiple districts for the postal code and the user's district changes the result. | |
| language | No | Language of the conversation. The widget's texts and its follow-up messages use it; omit only if unsure, then the user's interface locale is used. | |
| bonusMode | No | How one-time bonuses count in prices and ranking. "compliant" (default): only bonuses meeting consumer-protection guidelines; "all": every bonus; "none": prices without any bonus. | |
| greenOnly | No | Only eco tariffs (EU EmpCo definition): electricity from 100% renewable energy proven by guarantees of origin; gas with a declared biogas/hydrogen share. CO2-compensated ("Klimagas", "klimaneutral") tariffs are NOT eco. Default: false. | |
| providers | No | Only offers from these providers (names, e.g. ["Vattenfall", "E WIE EINFACH"]). Restricts the ranking to these providers. | |
| energyType | No | Which energy contract to compare: "electricity" (Strom) or "gas". Default: "electricity". | |
| postalCode | Yes | German postal code (Postleitzahl) — 5 digits, e.g. "10115" for Berlin. | |
| regionalOnly | No | Only regional providers / local utilities. Default: false. | |
| currentTariff | No | The user's current tariff name, if known (e.g. from the bill). | |
| goodRatingOnly | No | Only providers with good customer ratings (market operator's threshold). Default: false. | |
| includeDeposit | No | Include tariffs requiring a deposit (Kaution). Default: false. | |
| cancellationMax | No | Maximum cancellation period (Kündigungsfrist). Omit = no filter. | |
| currentProvider | No | The user's current provider, if known (e.g. from the bill). | |
| contractMonthsMax | No | Maximum initial contract duration in months (1, 3, 6, 12 or 24). Default: no limit. | |
| includePrepayment | No | Include tariffs requiring prepayment (Vorauskasse). Default: false. | |
| annualConsumptionKwh | Yes | The household's actual annual consumption in kWh, from the user or their last bill; no default. The ranking depends on it. Typical values by household size: electricity ~1500 (1 person), 2500 (2), 3500 (3), 4500 (4+); gas ~9000 (flat), ~20000 (house). | |
| currentAnnualCostEur | No | The user's ONGOING yearly cost on their current contract in EUR: current prices, one-time bonuses EXCLUDED. Not the bill total: a new-customer bonus is paid once, so the total of a bonus year understates what they pay next year. Compute Arbeitspreis × kWh / 100 + 12 × Grundpreis (post-increase prices if the bill announces one), or better: pass currentWorkingPriceCtKwh + currentBasePriceEurMonth and let the server compute it. When given, savings are computed against this instead of the default utility tariff. | |
| includeDynamicTariffs | No | Include dynamic (spot-price) tariffs whose first-year price is only a forecast. Default: false, since most German households book fixed-price tariffs. | |
| includePackageTariffs | No | Include kWh-package tariffs (Pakettarife). Default: false. | |
| maxTariffsPerProvider | No | Tariffs per provider in the ranking. Default 1 (best per provider); 0 = all tariffs of every provider. | |
| priceGuaranteeMonthsMin | No | Minimum price-guarantee duration in months. null = no filter (default). | |
| currentBasePriceEurMonth | No | Grundpreis of the user's current contract in EUR per month, gross (a yearly Grundpreis divided by 12). | |
| currentMonthlyPaymentEur | No | The FUTURE monthly payment (Abschlag) stated on the bill for the coming period, e.g. 'Ihr monatlicher Zahlbetrag beträgt zukünftig 159,00 €'. It already reflects price changes after the billing period, which the bill's Arbeitspreis/Grundpreis lines predate. Takes precedence over the price components. | |
| currentWorkingPriceCtKwh | No | Arbeitspreis of the user's current contract in ct/kWh, gross, as printed on the bill (the new price if an increase is announced). Together with currentBasePriceEurMonth the server computes the ongoing yearly cost itself — preferred over currentAnnualCostEur. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| page | Yes | |
| query | Yes | |
| tariffs | Yes | |
| coverageNote | Yes | |
| priceSpanEur | No | |
| totalResults | Yes | |
| referenceNote | No | |
| otherDistricts | No | |
| referenceTariff | No | |
| hiddenDynamicTariffs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, and the description adds real behavioral context on top: prices are live and can change at any time, the ranking is only valid for the household's actual consumption which has no default, bonuses are counted via bonusMode, dynamic tariffs are forecast-only and excluded by default, and the result renders as interactive tariff cards with filters rather than needing textual repetition. It also warns that only offers with an `eco` object are green and that eco.statement/proof must be quoted verbatim.
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 and scope are front-loaded in the first sentence, and most sentences carry actionable detail. It is nonetheless a long wall of prose for a single description, with some restatement (eco rules, bill-reference logic) and a keyword list that reads as retrieval padding rather than tool guidance, so it falls short of a 5.
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 need not be described, yet the description still covers the pieces an agent needs: required vs. optional inputs, filter defaults, paging via totalResults, and the booking follow-up fields (provider, customer number, meter number). For a 27-parameter, open-world comparison tool this is complete.
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, but the description adds cross-parameter meaning the schema cannot: it identifies which values must come from the user, explains that annualConsumptionKwh has no default and drives the ranking, and lays out the precedence of currentMonthlyPaymentEur over the Arbeitspreis/Grundpreis components for the savings baseline. It reinforces rather than repeats the schema's per-field docs.
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+scope: 'Compares German electricity and gas tariffs with live market data for a postal code and an annual consumption, and returns one page of the ranked market,' then enumerates exactly what comes back (prices with/without bonus, savings vs Grundversorgung, contract terms, eco, ratings). It explicitly distinguishes itself from siblings by naming tariff-details (cost breakdown, energy mix) and start-booking (booking form), so an agent can route 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 an explicit exclusion ('Covers tariff comparison only, not general energy questions'), names the alternatives and their conditions (tariff-details for breakdown/provider details, start-booking for the contract data/IBAN/consent step), and states that dynamic tariffs appear only with includeDynamicTariffs. It also specifies when the current* savings-reference parameters apply versus ignoring the bill total.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare-vpnCompare VPN PlansARead-onlyIdempotentInspect
Use this when the user asks which VPN to buy, wants the cheapest VPN, a VPN for streaming, torrenting or travel, a VPN for public Wi-Fi safety, an audited no-logs VPN, or wants to avoid renewal price traps. Ranks a curated catalog of US-priced (USD) VPN plans (NordVPN, Surfshark, ExpressVPN, Proton VPN, Private Internet Access, CyberGhost), cheapest first, by effective monthly cost over the preferred term including renewals, and shows the upfront price, renewal price, devices, money-back days, audited no-logs (with auditor), jurisdiction and RAM-only servers; privacy facts not confirmed on the provider's own pages are marked unconfirmed. The catalog is a selection, not the whole market; each result states the oldest price-check date. Prices are US/USD; local checkout prices may differ. Inputs, all optional: term_months (1, 12, 24 or 36), min_devices, needs (streaming, p2p; plans where the feature is unconfirmed are excluded), country (only adds a note when not US) and checkout (default false: pricing-page links; true: plan-preselected checkout links). No personal data is used. Keywords: best VPN, cheapest VPN, VPN comparison, VPN deals, no-logs VPN, VPN renewal price.
| Name | Required | Description | Default |
|---|---|---|---|
| needs | No | Required features: streaming, p2p (torrenting). | |
| country | No | Two-letter country code. Prices are always US prices in USD; for a country other than US the result says local checkout prices may differ. | |
| checkout | No | Default false: return pricing-page links. Set true to return plan-preselected provider checkout links instead. | |
| min_devices | No | Minimum simultaneous devices needed. | |
| term_months | No | Preferred subscription length in months: 1, 12, 24 or 36. |
Output Schema
| Name | Required | Description |
|---|---|---|
| plans | Yes | |
| source | Yes | |
| message | No | |
| priceNote | Yes | |
| disclosure | Yes | |
| currencyNote | Yes | |
| selectionNote | Yes | How many plans are shown, from how many providers, out of the curated catalog. |
| missingTermNote | No | Providers with no plan for the requested term. |
| unconfirmedNote | No | Providers left out of a needs filter because the feature is unconfirmed, not because it is missing. |
| oldestVerifiedDate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description discloses substantive behavioral traits: privacy facts not confirmed on provider pages are marked 'unconfirmed', each result carries its oldest price-check date, prices are US/USD with possible local checkout differences, and no personal data is used. These are exactly the caveats an agent needs to caveat its answer to the user.
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 trigger sentence is well front-loaded, but the body is a single dense run-on that repeats facts ('US-priced (USD)' vs 'Prices are US/USD') and closes with a keyword-stuffing line ('best VPN, cheapest VPN, VPN comparison...') that adds no agent-usable information. Much of the length earns its place, but the tail is 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?
For a 5-parameter, all-optional comparison tool with an output schema present, the description covers what an agent needs: input semantics, ranking logic, data provenance and currency, geographic caveats, and the unconfirmed-fact flagging policy. Return-shape details are deferred to the output schema, which is correct.
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, but the description adds real meaning: 'needs' filters out plans where the feature is unconfirmed (an exclusion rule not evident from the schema), and 'country' only adds a note when not US rather than changing prices. It restates checkout/term_months behavior already in the schema, so it stops short of a 5.
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 ('Ranks a curated catalog of US-priced (USD) VPN plans'), names the six providers in the catalog, and defines the ranking rule (cheapest first by effective monthly cost over the preferred term including renewals). This clearly distinguishes it from siblings like compare-broadband, compare-esims and compare-mobile-plans, which cover different product domains.
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 opens with an explicit trigger list ('which VPN to buy, cheapest VPN, streaming, torrenting, travel, public Wi-Fi safety, audited no-logs, avoid renewal price traps'), which maps directly onto user intents an agent will encounter. It also states scope limits: the catalog is 'a selection, not the whole market' and prices are US/USD, so the agent knows when this tool is and isn't appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start-bookingOpen Booking FormARead-onlyIdempotentInspect
Opens the booking form for one offer from a comparison, identified by its ref; the form renders below the message. Read-only: the call submits, stores and sends nothing, and takes no personal data. In the form the user enters the contract details (page 1), then the IBAN and consent (page 2), and files the request there. Messages such as 'Bitte öffne das Buchungsformular', 'ich möchte diesen Tarif', 'den nehme ich', 'book #2' or 'switch me to this', usually sent by the card's 'Jetzt buchen' button, ask for this form. language sets the language of the form. There is no self-service checkout link. Keywords: Buchungsformular, Tarif buchen, wechseln, Wechsel beauftragen, Vertrag abschließen, open booking form, book, switch, sign up.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Offer reference from a compare-tariffs result (field `ref`). No personal data. | |
| language | No | Language of the conversation; the booking form uses it. Default: de. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ref | Yes | |
| city | No | |
| tariff | Yes | |
| language | Yes | |
| provider | Yes | |
| energyType | Yes | |
| postalCode | Yes | |
| instruction | Yes | |
| monthlyAvgEur | Yes | |
| annualTotalEur | Yes | |
| providerLogoUrl | No | |
| annualConsumptionKwh | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description reinforces this by stating it 'submits, stores and sends nothing, and takes no personal data'. It adds useful behavior beyond annotations: the form renders below the message, has a two-page flow, and there is no self-service checkout link.
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 main action and read-only behavior, and the trigger examples are useful. The trailing keyword list is somewhat redundant, but overall each sentence earns its place.
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 the rich annotations, full schema coverage, and presence of an output schema, the description covers the tool's purpose, side-effect profile, trigger phrases, form flow, language behavior, and absence of a checkout link. Nothing critical is missing 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 100%, so the schema already documents both ref and language. The description adds only light reinforcement, noting ref identifies the offer and language controls the form language, but it does not materially extend 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: it 'opens the booking form for one offer from a comparison, identified by its ref'. It also clarifies the tool is read-only and that the form renders below the message, which distinguishes it from siblings like book-contract or submit-switch-request.
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 description gives strong when-to-use signals: example user messages ('book #2', 'switch me to this'), the card's 'Jetzt buchen' button, and the note that there is no self-service checkout link. It does not explicitly list alternative tools and when not to use them, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit-switch-requestSubmit Energy Switch RequestADestructiveIdempotentInspect
Files a concierge switch request for an offer from a comparison: contract data, IBAN and the consents in one call. The booking form opened by start-booking calls it; autonomous MCP clients that hold the user's complete data and authorization can call it directly. Stores the request encrypted, sends the confirmation emails and returns only masked data. An operator later submits the contract application to the provider.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Offer reference from a compare-tariffs result (field `ref`). | |
| iban | Yes | IBAN as entered in the form; spaces allowed. | |
| Yes | Email address — receives the booking confirmation and provider documents. | ||
| phone | No | Phone number (optional, some providers ask for it). | |
| street | Yes | Street of the supply address (Straße). | |
| language | No | Language of the conversation — used for the confirmation email. Default: "de". | |
| lastName | Yes | Last name (Nachname). | |
| birthDate | Yes | Date of birth, ISO format YYYY-MM-DD. Energy providers require it for the contract. | |
| firstName | Yes | First name (Vorname). | |
| moveInDate | No | Move-in date (Umzugsdatum), ISO YYYY-MM-DD. Required for switchType "relocation", ignored for a switch. | |
| salutation | Yes | Salutation (Anrede), required by the providers: "herr", "frau" or "divers". | |
| switchType | Yes | "switch": changing provider at the current address (Anbieterwechsel). "relocation": moving in / first contract at this address (Umzug/Neueinzug). | |
| houseNumber | Yes | House number (Hausnummer), e.g. "12a". | |
| meterNumber | No | Meter number (Zählernummer, optional — printed on the meter or the last bill). | |
| accountHolder | No | Account holder if different from the contract holder. | |
| authorization | Yes | The three consents the user gave in the form, with the wording versions shown to them. | |
| idempotencyKey | Yes | Random per form instance. A retry with the same key returns the first result instead of filing twice. | |
| desiredStartDate | No | Desired contract start, ISO YYYY-MM-DD. Omit for the next possible date. | |
| previousProvider | No | Current/previous energy provider. Required for switchType "switch". | |
| previousCustomerNumber | No | Customer number at the previous provider (Kundennummer, optional but speeds up the switch). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| tariff | Yes | |
| provider | Yes | |
| nextSteps | Yes | |
| requestId | Yes | |
| maskedIban | Yes | |
| annualTotalEur | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, openWorldHint=true. The description adds value by stating it 'stores the request encrypted, sends the confirmation emails and returns only masked data', and that an operator later submits the contract application. This discloses side effects (email sending) and storage behavior beyond what annotations convey. No contradiction.
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 three sentences with no fluff. The first sentence states the purpose and scope, the second gives usage context, and the third describes behavior and downstream action. Front-loaded with the core function, every sentence earns its place.
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 20 parameters, nested objects, and an output schema, the description covers the essential aspects: purpose, usage scenario, side effects, and the follow-up operator action. It does not detail the output schema (which exists) or error cases, but that's acceptable. It could mention that switchType includes relocation, but the schema covers that. Overall complete enough for an agent to call correctly.
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 every parameter already has a description. The description only summarizes the parameter groups ('contract data, IBAN and the consents in one call') which adds minimal extra meaning. Baseline 3 is appropriate; the schema carries the semantic load.
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 clearly states the tool 'files a concierge switch request for an offer from a comparison' – a specific verb (files) and resource (switch request) with context. It distinguishes itself from siblings by mentioning the relationship with start-booking and the direct-call option for autonomous clients, so an agent can tell it apart.
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 description explains when to use it: either via the booking form opened by start-booking, or directly by autonomous clients that hold complete data and authorization. This implies the requirement for authorization but doesn't explicitly list alternatives or exclusions (e.g., 'do not call without an offer ref'). It also notes the operator later submits the contract application, giving flow context. Clear enough but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tariff-detailsEnergy Tariff DetailsARead-onlyIdempotentInspect
Returns the full conditions of one tariff from a compare-tariffs result, identified by its ref: price composition, scope of the price guarantee, contract duration, renewal and cancellation terms, deposit, energy-source mix, customer ratings, and for eco tariffs the required eco statement and proof. Texts come in the requested language. Keywords: Tarifdetails, Vertragsbedingungen, Preisgarantie, Kündigungsfrist, Vertragslaufzeit, AGB, tariff conditions, contract details.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Offer reference from a compare-tariffs result (field `ref`). | |
| language | No | Language of the conversation (for the eco statement and proof texts). Default: the language of the compare-tariffs result the ref comes from. |
Output Schema
| Name | Required | Description |
|---|---|---|
| eco | No | |
| ref | Yes | |
| tariff | Yes | |
| remarks | No | |
| contract | Yes | |
| provider | Yes | |
| energyType | Yes | |
| costBreakdown | Yes | |
| energySources | No | |
| annualTotalEur | Yes | |
| customerRatings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered structurally. The description adds real context beyond that: it names the returned content categories (price composition, price-guarantee scope, renewal/cancellation terms, deposit, energy mix, ratings) and flags the eco-tariff special case. It does not discuss rate limits or error 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?
The purpose and scope are front-loaded in the first clause, and the field enumeration is compact. The trailing keyword block (German and English synonyms) is padding for search matching rather than agent guidance, which costs it a point.
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 explained, yet the description still summarizes them; combined with full annotation and parameter coverage, an agent has what it needs to call it correctly. Only minor routing detail (when not to call it, or how it pairs with book-contract/start-booking) 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?
With 100% schema description coverage, the schema already documents both `ref` (pattern, origin) and `language` (enum, default). The description's note that "texts come in the requested language" loosely reinforces the schema's narrower statement that language applies to the eco statement/proof texts – marginal added value, so the baseline 3 applies.
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 full conditions of one tariff") and pins the source ("from a compare-tariffs result, identified by its ref"), which cleanly separates it from the sibling compare-tariffs lister. It even enumerates the condition categories returned, so an agent knows exactly what this yields.
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 description makes the workflow dependency explicit: the ref must come from a compare-tariffs result, which tells the agent when this tool is callable. It gives no explicit exclusions or routing between further siblings (e.g., book-contract vs. tariff-details), so it stops just short of full when/when-not guidance.
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.
1 tool update
- Changed
compare-esims1 field changed- changed
Input schema / properties / destination / descriptionPrevious value: -"Destination country, ISO 3166-1 alpha-2 (e.g. JP, US, GB, FR, IT, ES, TH, MX)."New value: +"Destination country, ISO 3166-1 alpha-2 (e.g. JP, US, GB). Supported: AU, BR, CA, CO, DE, ES, FR, GB, GR, IT, JP, KR, MX, NL, PT, TH, TR, US."
3 tool updates
- Changed
compare-esims2 fields changed- added
Output schema / properties / closest / properties / offerTargetUrlAdded value: +{ + "description": "Where offerUrl redirects to.", + "type": "string" +} - added
Output schema / properties / results / items / properties / offerTargetUrlAdded value: +{ + "description": "Where offerUrl redirects to.", + "type": "string" +}
- Changed
compare-mobile-plans1 field changed- added
Output schema / properties / plans / items / properties / offerTargetUrlAdded value: +{ + "description": "Where offerUrl redirects to.", + "type": "string" +}
- Changed
compare-vpn1 field changed- added
Output schema / properties / plans / items / properties / offerTargetUrlAdded value: +{ + "description": "Where offerUrl redirects to.", + "type": "string" +}
1 tool update
- Changed
tariff-details1 field changed- changed
Input schema / properties / language / descriptionPrevious value: -"Language of the conversation (for the eco statement and proof texts). Default: de."New value: +"Language of the conversation (for the eco statement and proof texts). Default: the language of the compare-tariffs result the ref comes from."
1 tool update
- Added
compare-vpn
1 tool update
- Added
compare-esims
3 tool updates
- Changed
book-contract1 field changed- changed
Input schema / properties / consent / descriptionPrevious value: -"The user has explicitly agreed to: (1) Commerce for Agents submitting this contract on their behalf, (2) the provider's contract terms as shown by tariff-details, (3) the SEPA mandate for the given IBAN, (4) the privacy policy — and has been told the contract can be withdrawn within 14 days. Only true after that agreement — never assumed."New value: +"The user has explicitly agreed to: (1) Commerce for Agents submitting this contract on their behalf, (2) the provider's contract terms as shown by tariff-details, (3) the SEPA mandate for the given IBAN, (4) the privacy policy — and has been told the contract can be withdrawn within 14 days. True only after that agreement."
- Changed
compare-tariffs12 fields changed- changed
Input schema / properties / annualConsumptionKwh / descriptionPrevious value: -"Annual consumption in kWh as stated by the user (from the last bill) — never guessed. Typical values to help the user answer: electricity ~1500 (1 person), 2500 (2), 3500 (3), 4500 (4+); gas ~9000 (flat), ~20000 (house)."New value: +"The household's actual annual consumption in kWh, from the user or their last bill; no default. The ranking depends on it. Typical values by household size: electricity ~1500 (1 person), 2500 (2), 3500 (3), 4500 (4+); gas ~9000 (flat), ~20000 (house)." - changed
Input schema / properties / currentAnnualCostEur / descriptionPrevious value: -"The user's ONGOING yearly cost on their current contract in EUR: current prices, one-time bonuses EXCLUDED. Do not pass the bill total — a new-customer bonus is paid once, so the total of a bonus year understates what they pay next year. Compute Arbeitspreis × kWh / 100 + 12 × Grundpreis (post-increase prices if the bill announces one), or better: pass currentWorkingPriceCtKwh + currentBasePriceEurMonth and let the server compute it. When given, savings are computed against this instead of the default utility tariff."New value: +"The user's ONGOING yearly cost on their current contract in EUR: current prices, one-time bonuses EXCLUDED. Not the bill total: a new-customer bonus is paid once, so the total of a bonus year understates what they pay next year. Compute Arbeitspreis × kWh / 100 + 12 × Grundpreis (post-increase prices if the bill announces one), or better: pass currentWorkingPriceCtKwh + currentBasePriceEurMonth and let the server compute it. When given, savings are computed against this instead of the default utility tariff." - changed
Input schema / properties / currentMonthlyPaymentEur / descriptionPrevious value: -"The FUTURE monthly payment (Abschlag) stated on the bill for the coming period, e.g. 'Ihr monatlicher Zahlbetrag beträgt zukünftig 159,00 €'. Pass it whenever the bill states one — it already reflects price changes after the billing period, which the bill's Arbeitspreis/Grundpreis lines predate. Takes precedence over the price components."New value: +"The FUTURE monthly payment (Abschlag) stated on the bill for the coming period, e.g. 'Ihr monatlicher Zahlbetrag beträgt zukünftig 159,00 €'. It already reflects price changes after the billing period, which the bill's Arbeitspreis/Grundpreis lines predate. Takes precedence over the price components." - changed
Input schema / properties / includeDynamicTariffs / descriptionPrevious value: -"Include dynamic (spot-price) tariffs whose first-year price is only a forecast. Default: false — most German households book fixed-price tariffs. Set true if the user asks for dynamic tariffs."New value: +"Include dynamic (spot-price) tariffs whose first-year price is only a forecast. Default: false, since most German households book fixed-price tariffs." - changed
Input schema / properties / providers / descriptionPrevious value: -"Only offers from these providers (names, e.g. [\"Vattenfall\", \"E WIE EINFACH\"]). Use when the user asks about specific providers instead of scanning ranked pages."New value: +"Only offers from these providers (names, e.g. [\"Vattenfall\", \"E WIE EINFACH\"]). Restricts the ranking to these providers." - changed
Output schema / properties / query / properties / annualConsumptionKwh / descriptionPrevious value: -"Annual consumption in kWh as stated by the user (from the last bill) — never guessed. Typical values to help the user answer: electricity ~1500 (1 person), 2500 (2), 3500 (3), 4500 (4+); gas ~9000 (flat), ~20000 (house)."New value: +"The household's actual annual consumption in kWh, from the user or their last bill; no default. The ranking depends on it. Typical values by household size: electricity ~1500 (1 person), 2500 (2), 3500 (3), 4500 (4+); gas ~9000 (flat), ~20000 (house)." - changed
Output schema / properties / query / properties / currentAnnualCostEur / descriptionPrevious value: -"The user's ONGOING yearly cost on their current contract in EUR: current prices, one-time bonuses EXCLUDED. Do not pass the bill total — a new-customer bonus is paid once, so the total of a bonus year understates what they pay next year. Compute Arbeitspreis × kWh / 100 + 12 × Grundpreis (post-increase prices if the bill announces one), or better: pass currentWorkingPriceCtKwh + currentBasePriceEurMonth and let the server compute it. When given, savings are computed against this instead of the default utility tariff."New value: +"The user's ONGOING yearly cost on their current contract in EUR: current prices, one-time bonuses EXCLUDED. Not the bill total: a new-customer bonus is paid once, so the total of a bonus year understates what they pay next year. Compute Arbeitspreis × kWh / 100 + 12 × Grundpreis (post-increase prices if the bill announces one), or better: pass currentWorkingPriceCtKwh + currentBasePriceEurMonth and let the server compute it. When given, savings are computed against this instead of the default utility tariff." - changed
Output schema / properties / query / properties / currentMonthlyPaymentEur / descriptionPrevious value: -"The FUTURE monthly payment (Abschlag) stated on the bill for the coming period, e.g. 'Ihr monatlicher Zahlbetrag beträgt zukünftig 159,00 €'. Pass it whenever the bill states one — it already reflects price changes after the billing period, which the bill's Arbeitspreis/Grundpreis lines predate. Takes precedence over the price components."New value: +"The FUTURE monthly payment (Abschlag) stated on the bill for the coming period, e.g. 'Ihr monatlicher Zahlbetrag beträgt zukünftig 159,00 €'. It already reflects price changes after the billing period, which the bill's Arbeitspreis/Grundpreis lines predate. Takes precedence over the price components." - changed
Output schema / properties / query / properties / includeDynamicTariffs / descriptionPrevious value: -"Include dynamic (spot-price) tariffs whose first-year price is only a forecast. Default: false — most German households book fixed-price tariffs. Set true if the user asks for dynamic tariffs."New value: +"Include dynamic (spot-price) tariffs whose first-year price is only a forecast. Default: false, since most German households book fixed-price tariffs." - changed
Output schema / properties / query / properties / providers / descriptionPrevious value: -"Only offers from these providers (names, e.g. [\"Vattenfall\", \"E WIE EINFACH\"]). Use when the user asks about specific providers instead of scanning ranked pages."New value: +"Only offers from these providers (names, e.g. [\"Vattenfall\", \"E WIE EINFACH\"]). Restricts the ranking to these providers." - changed
Output schema / properties / tariffs / items / properties / eco / properties / proof / descriptionPrevious value: -"Proof text that belongs to the marker (guarantees of origin, or the biogas/hydrogen shares). Quote verbatim."New value: +"Proof text that belongs to the marker (guarantees of origin, or the biogas/hydrogen shares). Legally required wording (EmpCo): quote verbatim." - changed
Output schema / properties / tariffs / items / properties / eco / properties / statement / descriptionPrevious value: -"Marker text, in the request language. Quote verbatim."New value: +"Marker text in the request language. Legally required wording (EmpCo): quote verbatim."
- Changed
tariff-details2 fields changed- changed
Output schema / properties / eco / properties / proof / descriptionPrevious value: -"Proof text that belongs to the marker (guarantees of origin, or the biogas/hydrogen shares). Quote verbatim."New value: +"Proof text that belongs to the marker (guarantees of origin, or the biogas/hydrogen shares). Legally required wording (EmpCo): quote verbatim." - changed
Output schema / properties / eco / properties / statement / descriptionPrevious value: -"Marker text, in the request language. Quote verbatim."New value: +"Marker text in the request language. Legally required wording (EmpCo): quote verbatim."
7 tool updates
- Changed
book-contract1 field changed- removed
Input schema / properties / contextRemoved value: -{ - "description": "Why are you calling this tool? Briefly describe the user's goal.", - "type": "string" -}
- Changed
compare-broadband2 fields changed- removed
Input schema / properties / contextRemoved value: -{ - "description": "Why are you calling this tool? Briefly describe the user's goal.", - "type": "string" -} - removed
Input schema / requiredRemoved value: -[ - "context" -]
- Changed
compare-mobile-plans2 fields changed- removed
Input schema / properties / contextRemoved value: -{ - "description": "Why are you calling this tool? Briefly describe the user's goal.", - "type": "string" -} - removed
Input schema / requiredRemoved value: -[ - "context" -]
- Changed
compare-tariffs1 field changed- removed
Input schema / properties / contextRemoved value: -{ - "description": "Why are you calling this tool? Briefly describe the user's goal.", - "type": "string" -}
- Changed
start-booking1 field changed- removed
Input schema / properties / contextRemoved value: -{ - "description": "Why are you calling this tool? Briefly describe the user's goal.", - "type": "string" -}
- Changed
submit-switch-request1 field changed- removed
Input schema / properties / contextRemoved value: -{ - "description": "Why are you calling this tool? Briefly describe the user's goal.", - "type": "string" -}
- Changed
tariff-details2 fields changed- removed
Input schema / properties / contextRemoved value: -{ - "description": "Why are you calling this tool? Briefly describe the user's goal.", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "ref", - "context" -]New value: +[ + "ref" +]
1 tool update
- Added
compare-mobile-plans
6 tool updates
- First observed
book-contract - First observed
compare-broadband - First observed
compare-tariffs - First observed
start-booking - First observed
submit-switch-request - First observed
tariff-details
Related MCP Connectors
Neutral travel eSIM comparison: search and compare plans from many providers, ranked by price.
Travel eSIMs for 130+ countries: plan a trip, compare plans, buy, install and diagnose.
Compare prices of products in online shops and of mobile plans in Lithuania, Latvia and Estonia.
Search U.S. cell plans, compare supported costs, find wireless news, and get switching guidance.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceBrowse, compare, and purchase eSIMs for 190+ countries via AI agents. 12 tools for searching 2,300+ data plans, checking coverage, and buying eSIMs with crypto or card. No account required for browsing.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search and compare travel eSIM data plans by destination, trip length, data amount, unlimited/daily type, local phone number, local or roaming network, multi-country coverage, budget, hotspot and 5G, returning plan details plus a link to buy. Read-only with no sign-in or API key required.1MIT
- AlicenseAqualityDmaintenanceTravel eSIMs for 193 countries. Stripe + Bitcoin checkout. QR by email in 30s. No API key.472 npmMIT
- AlicenseNot gradedqualityDmaintenanceSearch and buy travel eSIMs for 200+ countries, with specialized China plans that deliver uncensored internet without a VPN. Exposes five read-only tools to search plans, check device eSIM compatibility, get plan details, get help, and generate a secure on-site checkout link.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.