GotCashback
Server Details
Compare cashback rates across portals and discounted gift cards for stores in 30+ countries.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 18 tools
Every tool has a clearly distinct purpose: lookup type is encoded in the name (by_name vs by_id), resource type (cashback rates, gift cards, portals, stores, deals), and scope (public vs my). The by-name/by-id pairs are explicitly documented as alternatives for different situations, and the brand/category/store-name descriptions cross-reference each other to prevent misselection.
The naming is highly consistent: all tools use snake_case with a get_/set_/remove_/toggle_ verb prefix, and most follow a get_<resource>_by_<lookup> pattern (get_cashback_rates_by_store_name, get_portals_by_name, get_gift_cards_by_store_id). User-specific tools consistently use get_my_* for read operations.
At 18 tools the server is slightly above the typical 3-15 range, but the count is justified by the domain: stores, cashback rates, gift cards, portals, deals, countries, and user account features each need multiple entry points. No tool feels redundant, though a few could arguably be consolidated.
The tool surface covers the domain well: lookup by name, id, country, and category for rates and gift cards; portal comparison; deal discovery by brand and category; and full user workflows for profile, favorites, and alerts (list, set, remove, toggle). There are no obvious dead ends or missing operations for the stated cashback-shopping purpose.
Available Tools
18 toolsget_best_deals_by_brandBest deals for a brandARead-onlyIdempotentInspect
Finds where to buy a brand's products with the most savings: returns the matching brands and, for each, the stores carrying it ranked by best current cashback rate, then best gift card discount. Use it when the user names a product brand rather than a specific retailer — 'where is the best cashback for Adidas products?', 'cheapest place to buy Apple products with cashback'. When the user names a retailer ('Nike cashback' meaning the Nike store), call get_cashback_rates_by_store_name instead; for a type of product use get_best_deals_by_category. Returns up to 5 matching brands, best match first; empty when nothing matched. Rates reflect GotCashback's current data, refreshed several times a day. Always show each store's links to the user: best_cashback_rate.url (clickable link that activates the cashback) and gift_cards_url (where to buy the discounted gift cards).
| Name | Required | Description | Default |
|---|---|---|---|
| brand_name | Yes | The product brand name, e.g. 'Adidas', 'Dyson', 'LEGO'. Matched case-insensitively at word boundaries of the brand name and its alternate names, best match first; multi-word names fall back to matching individual words. | |
| country_code | No | Optional. Lowercase ISO 3166-1 alpha-2 country code that limits results to one country, e.g. 'us' (United States), 'ca' (Canada), 'gb' (United Kingdom — use 'gb', not 'uk'), 'de' (Germany), 'au' (Australia), 'fr' (France). Pass it when the user names a country ('in Canada', 'UK cashback'); omit it to search all supported countries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | No | Matched brands / categories (up to 5, best match first). Empty when nothing matched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly, idempotent, and non-destructive, and the description adds substantial behavior beyond that: result cap ('Returns up to 5 matching brands'), ordering ('best match first'), empty-result behavior, data freshness ('refreshed several times a day'), and a UI requirement ('Always show each store's links to the user'). This is rich, non-redundant context that meaningfully shapes how the agent presents 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 function and ranking logic, and every sentence earns its place — usage routing, return limits, freshness, and link display are all load-bearing. It is a long single paragraph, so a small deduction for scannability; breaking the usage-vs-alternative guidance into bullets would improve structure without adding words.
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 output schema exists, annotations carry the safety profile, and both parameters are fully documented in the schema, the description covers everything else an agent needs: sibling routing for retailer/category cases, ranking order, match cap, empty results, data recency, and required user-facing output. There are no missing behavioral or routing details.
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%; the schema already documents brand_name matching semantics and country_code format, defaults, and examples thoroughly. The description adds query examples ('Adidas', 'Apple') and implies brand_name is the central parameter, but does not need to compensate since the schema fully documents both parameters. Baseline 3 is appropriate.
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: 'Finds where to buy a brand's products with the most savings' and even specifies the ranking logic (cashback rate, then gift card discount). It explicitly names sibling tools it is not ('call get_cashback_rates_by_store_name instead; ... use get_best_deals_by_category'), so an agent can disambiguate without opening 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?
The description gives an explicit trigger condition ('Use it when the user names a product brand rather than a specific retailer'), concrete query examples ('where is the best cashback for Adidas products?'), and explicit when-not-to-use routing with named alternatives for both the retailer case and the product-type case. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_best_deals_by_categoryBest deals for a categoryARead-onlyIdempotentInspect
Finds where to buy products from a shopping category with the most savings: returns the matching categories and, for each, the stores in it ranked by best current cashback rate, then best gift card discount. Use it when the user names a type of product or a category rather than a store or brand — 'where can I buy dog food with the biggest discount?', 'best cashback for electronics', 'travel booking sites with cashback'. For a specific retailer use get_cashback_rates_by_store_name; for a product brand use get_best_deals_by_brand. Returns up to 5 matching categories, best match first; empty when nothing matched. Rates reflect GotCashback's current data, refreshed several times a day. Always show each store's links to the user: best_cashback_rate.url (clickable link that activates the cashback) and gift_cards_url (where to buy the discounted gift cards).
| Name | Required | Description | Default |
|---|---|---|---|
| country_code | No | Optional. Lowercase ISO 3166-1 alpha-2 country code that limits results to one country, e.g. 'us' (United States), 'ca' (Canada), 'gb' (United Kingdom — use 'gb', not 'uk'), 'de' (Germany), 'au' (Australia), 'fr' (France). Pass it when the user names a country ('in Canada', 'UK cashback'); omit it to search all supported countries. | |
| category_name | Yes | The shopping category or product type, e.g. 'Pet Supplies', 'dog food', 'electronics', 'travel'. Matched case-insensitively at word boundaries of the category name and its alternate names, best match first; multi-word phrases fall back to matching individual words. |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | No | Matched brands / categories (up to 5, best match first). Empty when nothing matched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat safety traits. Beyond the annotations, the description adds rich behavioral context: it discloses the return cap (up to 5 categories), the ordering rule (best match first), the empty result behavior, data freshness ('refreshed several times a day'), and a mandatory display instruction for the store links, all of which materially inform an agent's expectations.
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 long but information-dense, and every sentence contributes a distinct fact (purpose, usage examples, sibling differentiation, return limit, empty behavior, freshness, display requirement). There is minor redundancy — 'best current cashback rate' appears twice and the sibling differentiation is stated both in the purpose clause and again in the usage guidance — but this does not meaningfully harm clarity.
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 2 parameters, 100% schema coverage, an output schema, and safety annotations, the description covers everything an agent needs: purpose, when to use vs. alternatives, return structure, ordering, limit, empty case, data freshness, and display obligations. No critical information 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 coverage is 100% (both parameters have descriptions), and each description adds meaning far beyond the type. category_name explains matching behavior, case-insensitivity, word-boundary matching, and multi-word fallback; country_code explains the ISO 3166-1 alpha-2 format with examples, the 'gb not uk' caveat, when to pass it (user names a country) versus omit it (search all supported countries). The descriptions genuinely help an agent construct correct calls.
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 ('Finds where to buy products') and identifies the exact resource (shopping category) and return format (matching categories with ranked stores). It also explicitly distinguishes the tool from its siblings by naming get_cashback_rates_by_store_name and get_best_deals_by_brand as alternatives, so an agent can disambiguate without opening other 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?
The description gives explicit 'when to use' guidance with concrete example queries ('where can I buy dog food with the biggest discount?', 'best cashback for electronics', 'travel booking sites with cashback'). It also provides an explicit 'when not to use' rule by naming the sibling tools to use for a specific retailer or brand, covering both positive and negative selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cashback_rates_by_store_idCashback rates by store IDARead-onlyIdempotentInspect
Returns the current online and in-store cashback rates from every cashback portal for one store identified by its numeric store_id, so the user can compare every portal and see the best. Use it only when a store_id is already known from an earlier result (a store, deals, favorites or alerts response). When the user gives a store name instead, call get_cashback_rates_by_store_name directly — do not look the id up first. Returns an error when the id does not exist. Rates reflect GotCashback's current data, refreshed several times a day. Present every returned portal's rate to the user (a table with a link column, not only the best one) and always show each rate's 'url' as a clickable link — cashback is only credited when the user clicks through it.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | GotCashback's numeric store_id, taken from an earlier result (a store, cashback rate, gift card, deals, favorites or alerts response). If you only have a store name, use the by-name tool instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| store | No | A store (retailer) in one country, with its current cashback rates when returned by a cashback tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavior beyond annotations: it returns an error for nonexistent ids, rates are refreshed several times a day, and every portal's rate must be presented with clickable url links because cashback only credits on click-through. No contradiction with annotations.
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 every subsequent sentence adds necessary operational or selection detail. Although longer than minimal descriptions, the extra length is justified by the crucial display/click-through requirement and sibling routing guidance.
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 tool is simple (one parameter) and has both output schema and annotations, so the description does not need to restate return structures. It covers selection context, error behavior, data freshness, and required presentation behavior, making it complete for correct agent 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 coverage is 100%, so the schema already fully documents store_id. The description adds practical meaning by reinforcing that the id must be numeric, must come from an earlier result, and that a store-name input should route to the by-name sibling instead.
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 ('Returns'), resource ('cashback rates from every cashback portal for one store'), and scope ('one store identified by its numeric store_id'). It also explicitly distinguishes this tool from get_cashback_rates_by_store_name, making the purpose unambiguous.
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 clear when-to-use guidance: only when a store_id is already known from an earlier result. It also states the exclusion condition and alternative directly: when the user gives a store name, call get_cashback_rates_by_store_name and do not look the id up first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cashback_rates_by_store_nameCashback rates by store nameARead-onlyIdempotentInspect
Finds a store by name and returns its current cashback rates from every cashback portal that lists it — online and in-store, percentage or fixed amount, with 'up to' flags — so the user can compare every portal and see the best. This is the preferred first call for any cashback question that names a store: 'best cashback for Walmart', 'highest Nike cashback', 'cashback at Expedia', 'Walmart cashback today', 'compare Walmart cashback portals', 'Best Buy in-store cashback', 'Dell cashback in Germany'. No prior lookup is needed — do not call get_stores_by_name, get_stores_by_country or get_countries first. Returns every matching store (best match first, one entry per country), each with its 'cashback_rates'; an empty list means no match — retry with a shorter name or without country_code. Use get_cashback_rates_by_store_id only when a store_id is already known, get_gift_cards_by_store_name for gift card discounts, and get_best_deals_by_brand when the user asks where to buy a brand's products rather than about a specific store. Rates reflect GotCashback's current data, refreshed several times a day. Present every returned portal's rate to the user (a table with a link column, not only the best one) and always show each rate's 'url' as a clickable link — cashback is only credited when the user clicks through it.
| Name | Required | Description | Default |
|---|---|---|---|
| store_name | Yes | The retailer or brand name as a shopper would say it, e.g. 'Walmart', 'Nike', 'Best Buy', 'Expedia', 'Home Depot'. Matched case-insensitively at word boundaries of the store name and its known alternate names (exact name, then names starting with it, then names containing it as a word), best match first; a partial-word match (e.g. 'gap' inside 'Singapore') is only returned when nothing better exists. Pass the plain name only — no words like 'cashback', 'gift card' or a country. | |
| country_code | No | Optional. Lowercase ISO 3166-1 alpha-2 country code that limits results to one country, e.g. 'us' (United States), 'ca' (Canada), 'gb' (United Kingdom — use 'gb', not 'uk'), 'de' (Germany), 'au' (Australia), 'fr' (France). Pass it when the user names a country ('in Canada', 'UK cashback'); omit it to search all supported countries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stores | No | Matching stores (one entry per country). Empty when nothing matched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the annotations (readOnly, idempotent, non-destructive) and adds useful behavioral context. It explains data freshness ('refreshed several times a day') and instructs how to present results to ensure users click through links for cashback credit. No contradictions with the annotation metadata.
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 comprehensive yet well-organized. It front-loads the core purpose and then proceeds logically through examples, exclusions, usage guidance, and presentation rules. Each sentence adds valuable information without unnecessary repetition. The structure makes it easy for an agent to extract all necessary instructions.
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 two parameters and 100% schema coverage, the description provides complete context. It explains the output format (matching stores with cashback rates), how to handle empty results, and the presentation requirement. It also covers edge cases like partial matches and country-specific usage. All necessary operational details are included.
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?
Both parameters are fully described with detailed semantics beyond the schema. The store_name description covers matching logic, case-insensitivity, word boundaries, and partial-word fallback, with examples. The country_code description explains the format, valid examples, and when to pass it vs. omit it. This goes well beyond the basic schema definitions.
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's purpose: finding a store by name and returning cashback rates from all portals. It explicitly differentiates from sibling tools like get_cashback_rates_by_store_id and get_best_deals_by_brand, and provides concrete example queries. The primary use case (any cashback question that names a store) is unambiguous.
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 explicit when-to-use and when-not-to-use guidance. It states 'No prior lookup is needed' and names the tools to avoid calling first. It also specifies alternative tools for different scenarios (store_id, gift cards, brand product queries) and provides presentation requirements (show all rates, clickable links). This is thorough and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_countriesSupported countriesARead-onlyIdempotentInspect
Returns the countries GotCashback covers, each with the lowercase ISO 3166-1 alpha-2 'code' to pass as country_code to the other tools (the United Kingdom is 'gb'). Use it only to confirm whether a country is supported or which code to use; it is not needed before store, cashback or gift card lookups — those tools accept country_code directly and search all countries when it is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| countries | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, covering the safety profile, so the bar is lower. The description adds genuine context beyond that: the exact output format, the UK exception example, and the cross-tool contract that the returned 'code' feeds into other tools' country_code parameter. It doesn't disclose minor details like sort order or list exhaustiveness, but for a 0-param reference list these are low-stakes.
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 sentences with no waste: the first front-loads the core purpose and key format detail with an example; the second delivers usage exclusions with rationale. Every clause 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?
With 0 params, a present output schema, and safety covered by annotations, the description covers everything an agent needs to call this tool correctly: what it returns, in what format, when to use it, and why it is not a required prerequisite for sibling lookups. Nothing material is missing for a simple read-only reference tool.
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 0 parameters, so the baseline is 4 per the rubric. The description adds adjacent value by explaining that the return value's 'code' field is precisely what must be passed as country_code to sibling tools, effectively documenting the parameter contract of the entire tool family.
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 — 'Returns the countries GotCashback covers' — and goes further by specifying the output format (lowercase ISO 3166-1 alpha-2) with a concrete example ('gb' for the United Kingdom). It differentiates from its 17 siblings by positioning itself as a reference lookup for country_code rather than a deals/cashback/stores tool.
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 when to use it ('only to confirm whether a country is supported or which code to use') and when not to ('not needed before store, cashback or gift card lookups'), with the reason that those tools accept country_code directly and search all countries when omitted. This is a model of when/when-not guidance, with the alternative behavior clearly described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gift_cards_by_store_idGift card discounts by store IDARead-onlyIdempotentInspect
Returns the discounted gift cards currently on sale for one store identified by its numeric store_id, from multiple sellers, so the discounts can be compared. Use it only when a store_id is already known from an earlier result. When the user gives a store name instead, call get_gift_cards_by_store_name directly — do not look the id up first. Returns an empty list when no discounted cards are available and an error when the id does not exist. Present every returned seller's listing to the user (a table with a link column, not only the best discount) and always show each gift card's 'url' as a clickable link — that tracked link is where the user buys the card at the discounted price.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | GotCashback's numeric store_id, taken from an earlier result (a store, cashback rate, gift card, deals, favorites or alerts response). If you only have a store name, use the by-name tool instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gift_cards | No | Gift card listings from all sellers. Empty when none are available right now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral details beyond annotations: empty list behavior when no discounted cards exist, error behavior for a nonexistent id, multiple-seller comparison purpose, and the requirement to always show the tracked url as a clickable link. These are precisely the non-obvious behaviors an agent needs to invoke and present results correctly.
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 result, then covers usage conditions, edge cases, and output presentation in a compact set of sentences. Every sentence carries distinct information: result type, comparison purpose, when to use, when not to use, empty/error behavior, and required presentational format. No filler or redundancy weakens it.
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 tool is simple with one parameter, strong annotations, and a rich output schema, so the description does not need to restate return types. It covers the selection condition, the alternative tool, edge-case behavior, and user-facing presentation requirements. This is fully sufficient for correct invocation and result handling.
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 parameter description in the schema already explains that store_id is GotCashback's numeric id from an earlier result and directs name-only cases to the by-name tool. The tool description adds little parameter meaning beyond echoing 'numeric store_id' and the known-id condition, so baseline 3 is appropriate.
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 returns discounted gift cards for one store by numeric store_id and emphasizes comparison across multiple sellers. It distinguishes itself from the sibling get_gift_cards_by_store_name by explicitly naming the ID-based vs name-based route, so an agent can disambiguate 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?
The description gives explicit when-to-use guidance: only when a store_id is already known from an earlier result. It also explicitly directs the agent to call get_gift_cards_by_store_name when only a store name is available and tells it not to look up the id first, which prevents a costly mistake. Additional presentation instructions add further practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gift_cards_by_store_nameGift card discounts by store nameARead-onlyIdempotentInspect
Finds a store by name and returns the discounted gift cards currently on sale for it from multiple gift card sellers — face value, price, discount percent, digital or physical — so the user can compare every seller and see the best discount. This is the preferred first call for any gift card question that names a store: 'best gift card discount for Gap', 'where can I buy discounted Instacart gift cards', 'compare Home Depot gift card discounts', 'current Target gift card deals'. No prior lookup is needed. Returns every matching store (best match first, one entry per country), each with its 'gift_cards' list and a 'gift_cards_url' page; an empty 'gift_cards' list means no discounted cards right now. Use get_gift_cards_by_store_id only when a store_id is already known, and get_cashback_rates_by_store_name when the user asks about cashback rates instead. Present every returned seller's listing to the user (a table with a link column, not only the best discount) and always show each gift card's 'url' as a clickable link — that tracked link is where the user buys the card at the discounted price. Also mention the store's 'gift_cards_url' page.
| Name | Required | Description | Default |
|---|---|---|---|
| store_name | Yes | The retailer or brand name as a shopper would say it, e.g. 'Walmart', 'Nike', 'Best Buy', 'Expedia', 'Home Depot'. Matched case-insensitively at word boundaries of the store name and its known alternate names (exact name, then names starting with it, then names containing it as a word), best match first; a partial-word match (e.g. 'gap' inside 'Singapore') is only returned when nothing better exists. Pass the plain name only — no words like 'cashback', 'gift card' or a country. | |
| country_code | No | Optional. Lowercase ISO 3166-1 alpha-2 country code that limits results to one country, e.g. 'us' (United States), 'ca' (Canada), 'gb' (United Kingdom — use 'gb', not 'uk'), 'de' (Germany), 'au' (Australia), 'fr' (France). Pass it when the user names a country ('in Canada', 'UK cashback'); omit it to search all supported countries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stores | No | Matching stores (one entry per country). Empty when nothing matched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, but the description adds substantial behavioral details: the store-name matching algorithm (case-insensitive, word boundaries, best-match-first), the structure of results (gift_cards list, gift_cards_url), and that an empty list means no discounted cards. This exceeds what annotations provide and discloses the tool's behavior transparently, with no contradictions.
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?
Though the description is long, every sentence serves a purpose: it covers functionality, usage alternatives, matching rules, output details, presentation instructions, and edge cases. There is no redundancy or filler; the structure is dense but well-organized, making it appropriately sized for the complexity of 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?
The description is complete for the tool's context. It explains the output format and how to use it (clickable link, mention gift_cards_url), handles empty results, and clarifies the distinction from related tools. Even with an output schema present, the description provides necessary context that the schema alone does not convey.
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?
Both parameters have detailed descriptions in the schema. store_name includes matching rules and example values, and country_code specifies format, allowed values, and when to use it. The schema description coverage is 100% and the tool description reinforces parameter handling, making parameter semantics fully explicit.
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's function: finding a store by name and returning discounted gift cards from multiple sellers. It also distinguishes it from sibling tools like get_cashback_rates_by_store_name and get_gift_cards_by_store_id, making the purpose unambiguous.
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 explicitly states when to use this tool ('preferred first call for any gift card question that names a store'), when not to (use get_gift_cards_by_store_id when store_id is known), and that no prior lookup is needed. It also provides guidance on presenting results, fulfilling the usage guideline requirement thoroughly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_alertsMy alertsARead-onlyIdempotentInspect
Returns the signed-in user's cashback and gift card alerts. Use it for 'what alerts do I have?' or before changing an alert. Each alert carries store_id, alert_type ('cashback' or 'gift_card'), threshold_percent and the last notification; pass store_id and alert_type straight to set_store_alert or remove_store_alert — the values are identical. Requires OAuth sign-in with a GotCashback account and the 'alerts' scope; anonymous callers are prompted to authorize.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| alerts | No | The user's alerts, newest first. Empty when they have none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/destructive safety, and the description adds meaningful context beyond them: OAuth sign-in requirements, the 'alerts' scope, anonymous-caller authorization behavior, and the exact payload shape. This gives the agent a clear picture of side effects and prerequisites.
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 and every sentence earns its place: first the core function, then when to use it, then output fields and auth requirements. It is dense but not bloated, and the most decision-relevant information 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?
For a zero-parameter, read-only, idempotent tool with annotations and an output schema already present, the description covers everything an agent needs: purpose, usage context, return fields, downstream interoperability, and authorization prerequisites. 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?
The tool has zero parameters and an empty schema, so schema coverage is trivially 100%. The 0-parameter baseline of 4 applies, and the description's output-field details compensate for any need to understand what the no-input call returns.
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: 'Returns the signed-in user's cashback and gift card alerts.' This clearly distinguishes it from sibling tools like get_my_favorite_stores and get_my_profile, and it even names the alert_type values that scope the resource.
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 explicit use cases: 'what alerts do I have?' and 'before changing an alert.' It also names downstream sibling tools (set_store_alert, remove_store_alert) whose parameters can be filled directly from the returned values. It doesn't state exclusions, but no competing read-alerts sibling exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_favorite_storesMy favorite storesARead-onlyIdempotentInspect
Returns the signed-in user's favorite stores (with their store_id). Use it when the user asks about 'my favorites' or 'my saved stores'; pair the store_ids with get_cashback_rates_by_store_id to report current rates for them. Requires OAuth sign-in with a GotCashback account; anonymous callers are prompted to authorize. All comparison tools work without signing in. Scope: 'favorites'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| stores | No | The user's favorite stores. Empty when they have none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds useful context beyond annotations: the tool requires OAuth sign-in and anonymous callers are prompted to authorize, plus the scope is restricted to 'favorites' rather than all stores. However, it doesn't describe what happens when there are no favorites, or the exact shape of the response beyond store_id, and the 'Requires OAuth sign-in' behavior is a useful addition that partially compensates.
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 compact and well-structured: a clear opening sentence, a direct when-to-use clause, a downstream pairing instruction, and an auth note. Every sentence earns its place. It loses one point because the final annotation-style line 'Scope: favorites.' is slightly redundant with the opening sentence, and the sign-in mention could be more prominent.
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 zero-parameter read-only tool with rich annotations and an output schema, the description is largely complete. It tells the agent the resource, the access requirement, the sibling to pair with, and the boundary between signed-in and comparison tools. It could be more complete by clarifying the response when there are no favorites, but given the output schema exists and the annotation set is strong, this is a minor gap.
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?
There are zero parameters, and schema description coverage is 100%, so the input side is fully documented. With no parameters, the baseline is 4. The description adds no parameter-level specifics because none are needed; it does convey that the primary meaningful output is store_id, which aids downstream tool selection.
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 action ('Returns'), the specific resource ('the signed-in user's favorite stores'), and the key field returned ('store_id'). It distinguishes itself from siblings by explicitly framing its scope as 'my favorites' / 'my saved stores' and by noting that comparison tools work without sign-in, which separates it from the broader store and deal retrieval 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?
Provides explicit when-to-use guidance: 'Use it when the user asks about my favorites or my saved stores.' It also gives routing direction by telling the agent to pair the resulting store_ids with get_cashback_rates_by_store_id, and notes that comparison tools work without signing in, implicitly warning against using this tool when the user's request does not require the signed-in context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_profileMy profileARead-onlyIdempotentInspect
Returns the signed-in user's GotCashback profile (name, email, avatar). Use it when the user asks who they are signed in as or wants their account details. Requires OAuth sign-in with a GotCashback account; anonymous callers are prompted to authorize. All comparison tools work without signing in. Scope: 'profile'.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| profile | No | The signed-in user's GotCashback account profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, destructiveHint, and idempotentHint annotations, the description discloses the OAuth requirement and the behavior for anonymous callers ('anonymous callers are prompted to authorize'). It also mentions the 'profile' scope, adding meaningful behavioral context not present in the structured annotations.
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, each earning its place: the result, the use case, the auth behavior, and a contrast with comparison tools. Information is front-loaded and there is no 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?
Given the output schema exists and the annotations cover safety/idempotency, the description fills all remaining gaps: auth requirement, scope, and when to invoke. 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?
The tool has zero parameters and the schema is empty, so the baseline is 4. The description adds no parameter-level detail, but none is needed; the mention of OAuth scope and auth requirement is the only extra context, which is not parameter-related.
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: 'Returns the signed-in user's GotCashback profile (name, email, avatar).' It also names the exact triggering user requests, making the tool's purpose unmistakable and distinct from sibling tools like get_my_alerts or get_my_favorite_stores.
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 the tool: 'Use it when the user asks who they are signed in as or wants their account details.' It also provides a relevant exclusion by noting 'All comparison tools work without signing in,' which guides agents toward alternatives in anonymous contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portal_by_idPortal by IDARead-onlyIdempotentInspect
Returns one cashback portal by its numeric id (the 'id' from a get_portals or get_portals_by_name result) with its payout terms for that country. Use it only when the id is already known; when the user names a portal, call get_portals_by_name instead. Returns an error when the id does not exist. Each portal includes its payout terms for that country: 'sign_up_bonus' (amount and the url that grants it, null when none), 'minimum_payout' with 'minimum_payout_currency' (smallest balance paid out, null when not published, 0 means no minimum), 'payment_frequency' (how often it pays, e.g. 'On demand', 'Weekly', 'Monthly'), and 'payment_methods' (payout options, e.g. 'PayPal', 'Direct deposit', 'Check', 'Gift card'). Use these to answer questions about a portal's sign-up bonus, payout threshold, payment schedule and payment options. When mentioning a sign-up bonus, show its 'url' as a clickable link — the bonus is only credited when the user signs up through it.
| Name | Required | Description | Default |
|---|---|---|---|
| portal_id | Yes | GotCashback's numeric portal id, taken from the 'id' field of an earlier get_portals or get_portals_by_name result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| portal | No | A cashback portal in one country, with the payout terms it offers there. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the bar is lower, but the description adds substantial behavioral context beyond them: it returns an error for non-existent ids, documents null semantics ('null when none', 'null when not published', '0 means no minimum'), and exposes the critical caveat that the sign-up bonus is only credited when the user signs up through the provided url. This is exactly the kind of non-obvious behavior an agent needs to know.
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 long but dense with value: selection rule, error behavior, field semantics, and a usage caveat each earn their place, with the core purpose front-loaded. It loses a point for minor redundancy — 'with its payout terms for that country' appears twice — but is otherwise well-structured for its richness.
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 single-parameter lookup tool with an output schema, this is complete: the description covers when to use it, how to source the id, error behavior, field-by-field semantics for the result, and the special display rule for sign-up bonus urls. Nothing an agent needs to call it correctly and use its results 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 description coverage is 100%, so the baseline is 3. The schema already explains portal_id as 'GotCashback's numeric portal id, taken from the 'id' field of an earlier get_portals or get_portals_by_name result.' The description repeats this same sourcing guidance, adding no incremental meaning 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 opens with a specific verb and resource: 'Returns one cashback portal by its numeric id... with its payout terms for that country.' It adds the key distinguishing constraint (lookup by id) and explicitly differentiates from the sibling get_portals_by_name, so an agent can tell them apart without opening 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?
The description gives an explicit when and when-not: 'Use it only when the id is already known; when the user names a portal, call get_portals_by_name instead.' It also discloses the error case for non-existent ids and tells the agent how to use the returned fields to answer user questions, which is clear selection and invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portalsList cashback portalsARead-onlyIdempotentInspect
Returns the cashback portals GotCashback compares, optionally for one country, each with its payout terms. Use it to list the portals available in a country ('which cashback portals are there in Canada?') or to compare portals side by side — which pays fastest, has the lowest minimum payout, offers PayPal, or gives the biggest sign-up bonus. It does not return store rates: for 'which portal has the best cashback for [store]' call get_cashback_rates_by_store_name instead; for one named portal use get_portals_by_name. Each portal includes its payout terms for that country: 'sign_up_bonus' (amount and the url that grants it, null when none), 'minimum_payout' with 'minimum_payout_currency' (smallest balance paid out, null when not published, 0 means no minimum), 'payment_frequency' (how often it pays, e.g. 'On demand', 'Weekly', 'Monthly'), and 'payment_methods' (payout options, e.g. 'PayPal', 'Direct deposit', 'Check', 'Gift card'). Use these to answer questions about a portal's sign-up bonus, payout threshold, payment schedule and payment options. When mentioning a sign-up bonus, show its 'url' as a clickable link — the bonus is only credited when the user signs up through it.
| Name | Required | Description | Default |
|---|---|---|---|
| country_code | No | Optional. Lowercase ISO 3166-1 alpha-2 country code that limits results to one country, e.g. 'us' (United States), 'ca' (Canada), 'gb' (United Kingdom — use 'gb', not 'uk'), 'de' (Germany), 'au' (Australia), 'fr' (France). Pass it when the user names a country ('in Canada', 'UK cashback'); omit it to search all supported countries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| portals | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), and the description adds substantial context beyond it: country-scoped payout terms, the null vs 0 semantics of minimum_payout (null = not published, 0 = no minimum), and the attribution rule that sign_up_bonus.url must be rendered as a clickable link because the bonus only credits through it. No contradiction with annotations — 'Returns' is consistent with readOnlyHint=true.
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 definition is long (~200 words) but front-loaded: purpose in sentence one, usage and exclusions in sentences two and three, then field semantics and presentation rules. Every section earns its place, though there is minor redundancy between the two usage sentences ('Use it to...' and 'Use these to answer...'), which keeps it from a perfect score.
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 tool with one optional parameter, a fully documented input schema, an output schema, and safety annotations, the description covers everything else an agent needs: sibling routing, per-field semantics including edge cases, and the clickable-link presentation requirement. Nothing required to select and invoke it 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%: country_code is fully documented with format, examples, passthrough guidance, and omission semantics. The description adds only marginal context (results are country-scoped, payout terms are per-country), which does not materially improve parameter understanding, 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?
The first sentence names a specific verb ('Returns') and resource ('the cashback portals GotCashback compares') with an explicit optional country scope. It also differentiates from siblings inline: 'It does not return store rates' routes to get_cashback_rates_by_store_name, and 'for one named portal use get_portals_by_name', so an agent can distinguish it without opening other definitions.
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 concrete query triggers ('which cashback portals are there in Canada?') and comparison use cases (payout speed, minimum payout, PayPal, sign-up bonus). It states explicit exclusions with named alternatives for store-rate lookups and single-portal lookups, so when-to-use and when-not-to-use are both fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portals_by_nameSearch portals by nameARead-onlyIdempotentInspect
Searches cashback portals by name (e.g. 'Rakuten', 'TopCashback', 'Honey') and returns each match with its payout terms, one entry per country the portal operates in. Use it when the user asks about a named portal: its sign-up bonus, minimum payout, how often it pays, or which payout methods it offers. For a store's cashback rate at that portal, call get_cashback_rates_by_store_name and read the 'portal' field of each rate instead. Each portal includes its payout terms for that country: 'sign_up_bonus' (amount and the url that grants it, null when none), 'minimum_payout' with 'minimum_payout_currency' (smallest balance paid out, null when not published, 0 means no minimum), 'payment_frequency' (how often it pays, e.g. 'On demand', 'Weekly', 'Monthly'), and 'payment_methods' (payout options, e.g. 'PayPal', 'Direct deposit', 'Check', 'Gift card'). Use these to answer questions about a portal's sign-up bonus, payout threshold, payment schedule and payment options. When mentioning a sign-up bonus, show its 'url' as a clickable link — the bonus is only credited when the user signs up through it.
| Name | Required | Description | Default |
|---|---|---|---|
| portal_name | Yes | The cashback portal name as users say it, e.g. 'Rakuten', 'TopCashback', 'Honey', 'Quidco'. Matched case-insensitively at word boundaries (exact, prefix, then word), best match first; a partial-word match is only returned when nothing better exists. | |
| country_code | No | Optional. Lowercase ISO 3166-1 alpha-2 country code that limits results to one country, e.g. 'us' (United States), 'ca' (Canada), 'gb' (United Kingdom — use 'gb', not 'uk'), 'de' (Germany), 'au' (Australia), 'fr' (France). Pass it when the user names a country ('in Canada', 'UK cashback'); omit it to search all supported countries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| portals | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, and the description adds genuinely new context: one result per country of operation, null-vs-0 semantics for minimum_payout, the bonus being credited only via its specific URL, and the requirement to render that URL as a clickable link. No contradiction with annotations; it goes well beyond them.
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 core purpose is front-loaded and nearly every sentence earns its place, including field semantics and the presentation constraint. However, the sentence 'Use these to answer questions about a portal's sign-up bonus, payout threshold, payment schedule and payment options' largely restates the earlier when-to-use sentence, a minor redundancy in an otherwise tight description.
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 2-parameter search tool with 100% schema coverage, full annotations (readOnly, idempotent, non-destructive), and an output schema, the description covers result multiplicity, field-level semantics, and how to present bonuses. Nothing an agent needs to call it correctly or interpret its results 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% and both parameters already carry rich descriptions (case-insensitive word-boundary matching, best-match ordering, country-code format, 'gb' not 'uk', when to pass or omit country_code). The description adds portal examples and result-field semantics but no parameter meaning beyond the schema, so the high-coverage baseline of 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?
The description opens with a specific verb-resource pair: 'Searches cashback portals by name' with concrete examples (Rakuten, TopCashback, Honey), and states the exact output shape: 'returns each match with its payout terms, one entry per country.' It differentiates from siblings by scope (by name vs. by id vs. list-all) and explicitly contrasts with get_cashback_rates_by_store_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?
Gives explicit when-to-use conditions ('Use it when the user asks about a named portal: its sign-up bonus, minimum payout, how often it pays, or which payout methods it offers') and an explicit when-not-to-use with the named alternative ('For a store's cashback rate at that portal, call get_cashback_rates_by_store_name and read the "portal" field'). This fully routes the agent with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stores_by_countryList stores in a countryARead-onlyIdempotentInspect
Lists every store that currently has cashback offers in one country — identity, store page url and whether discounted gift cards exist ('has_gift_cards', 'gift_cards_url'), but no rates. The list can run to hundreds of stores. Use it when the user wants to browse or count what is available in a country ('which stores offer cashback in Canada?', 'what stores have gift card deals in the UK?'). Do not use it to find a particular store or its rates: get_cashback_rates_by_store_name and get_gift_cards_by_store_name accept a store name plus an optional country_code directly. Use get_countries to see the supported country codes. When presenting stores, include each store's 'url' as a clickable link (and 'gift_cards_url' when present).
| Name | Required | Description | Default |
|---|---|---|---|
| country_code | Yes | Lowercase ISO 3166-1 alpha-2 country code, e.g. 'us' (United States), 'ca' (Canada), 'gb' (United Kingdom — use 'gb', not 'uk'), 'de' (Germany), 'au' (Australia). Call get_countries to list every supported code. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stores | No | Matching stores (one entry per country). Empty when nothing matched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so no contradiction exists. The description adds useful behavioral context beyond annotations: the result can include hundreds of stores, only current cashback-offer stores are included, and gift-card presence is indicated via specific fields with no rates returned. This goes beyond what annotations alone convey.
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 usage guidance, exclusions, and presentation instructions. It is longer than minimal but each sentence carries information; the final formatting instruction is useful even if slightly beyond selection/invocation 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?
Given the rich input schema, an output schema, and annotations, the description covers scope, limitations, alternatives, country-code handling, and output presentation. There are no significant gaps that would prevent an agent from invoking this tool 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?
The input schema already fully documents country_code with format, examples, and a pointer to get_countries, so high schema coverage gives a baseline of 3. The description reinforces that a single country is used but does not add substantially new parameter-level meaning 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 uses a specific verb ('Lists') and resource ('every store that currently has cashback offers in one country'), and immediately clarifies what is excluded ('but no rates'). It also distinguishes itself from rate- and gift-card-focused siblings by naming them as alternatives. An agent can tell exactly what this tool does and does not return.
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 when-to-use scenarios with example queries and explicitly warns against using it to find a particular store or its rates, naming the correct sibling tools instead. It also routes the agent to get_countries for supported codes. This is complete usage guidance with both positive and negative selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stores_by_nameSearch stores by nameARead-onlyIdempotentInspect
Searches stores by name and returns the matching stores' identity only — store_id, name, country_code, website domain and GotCashback store page url — without cashback rates or gift cards. Use it when the user wants to know whether GotCashback covers a store, in which countries a store is listed, or when you need a store_id for the account tools (toggle_favorite_store, set_store_alert). For any question about cashback rates or gift card discounts call get_cashback_rates_by_store_name or get_gift_cards_by_store_name directly instead — they search by name themselves, so this tool is not a required first step. Returns matches best first; empty when nothing matched. When presenting stores, include each store's 'url' as a clickable link (and 'gift_cards_url' when present).
| Name | Required | Description | Default |
|---|---|---|---|
| store_name | Yes | The retailer or brand name as a shopper would say it, e.g. 'Walmart', 'Nike', 'Best Buy', 'Expedia', 'Home Depot'. Matched case-insensitively at word boundaries of the store name and its known alternate names (exact name, then names starting with it, then names containing it as a word), best match first; a partial-word match (e.g. 'gap' inside 'Singapore') is only returned when nothing better exists. Pass the plain name only — no words like 'cashback', 'gift card' or a country. | |
| country_code | No | Optional. Lowercase ISO 3166-1 alpha-2 country code that limits results to one country, e.g. 'us' (United States), 'ca' (Canada), 'gb' (United Kingdom — use 'gb', not 'uk'), 'de' (Germany), 'au' (Australia), 'fr' (France). Pass it when the user names a country ('in Canada', 'UK cashback'); omit it to search all supported countries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stores | No | Matching stores (one entry per country). Empty when nothing matched. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description adds meaningful behavior beyond those: match ordering (best first), case-insensitive word-boundary matching, empty-result behavior, and a presentation requirement (include 'url' as clickable link). These are not inferable from annotations alone.
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 information-dense with no filler. Each sentence earns its place: return scope, use cases, sibling routing, ordering, empty behavior, and link presentation. Critical routing information is front-loaded, and parameter details are left to the schema. Excellent structure.
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, idempotent search tool with a fully documented schema and an output schema present, the description covers everything needed for correct selection and invocation. It addresses scope, alternatives, result ordering, empty results, and presentation. Nothing an agent needs 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 schema fully documents store_name and country_code. The description reinforces the key semantic point that store_name should be a plain retailer name without qualifiers like 'cashback' or 'gift card', and it ties country_code usage to user mentions of a country. This adds slight value beyond the schema but not enough for 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 starts with a specific verb and resource ('Searches stores by name') and immediately narrows the scope to 'identity only' fields, explicitly excluding cashback rates and gift cards. It also names the sibling tools (get_cashback_rates_by_store_name, get_gift_cards_by_store_name) that handle those excluded areas, making differentiation explicit.
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 states clear when-to-use conditions: checking store coverage, countries, or obtaining a store_id for account tools. It also provides explicit when-not-to-use guidance by directing cashback and gift card questions to dedicated sibling tools and clarifying that this tool is not a required first step. This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_store_alertRemove a store alertADestructiveIdempotentInspect
Removes the signed-in user's alert for a store and alert type ('cashback' or 'gift_card'). Use it for 'stop alerting me about Nike cashback'. Use get_my_alerts to find the store_id and alert_type of an existing alert and pass both through unchanged. Requires OAuth sign-in with a GotCashback account and the 'alerts' scope; anonymous callers are prompted to authorize.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | GotCashback's numeric store_id, taken from an earlier result (a store, cashback rate, gift card, deals, favorites or alerts response). If you only have a store name, use the by-name tool instead. | |
| alert_type | Yes | Alert type: 'cashback' (fires on the store's best flat cash rate: 'up to' rates and airline miles, credit card and points portals are ignored) or 'gift_card' (fires on the store's best gift card discount). Use the alert_type value from get_my_alerts as-is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, openWorldHint=false. The description adds valuable behavioral context: it requires OAuth sign-in with a GotCashback account and the 'alerts' scope, and notes that anonymous callers are prompted to authorize. This is additional information beyond the annotations, clarifying authentication prerequisites and user scoping. No contradiction with annotations.
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 sentences, no fluff. The first sentence states the action and the exact store/alert types; the second provides the usage example, parameter sourcing guidance, and authentication requirements. Information is front-loaded and every clause 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?
For a mutation tool with only two parameters and no output schema, this description is complete. It covers the primary use case, parameter provenance, authentication, and alert type specificity (including edge cases like 'up to' rates and ignored portals). The destructive nature is implied by the verb 'removes' and covered by annotations, so nothing essential 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%, and both parameters are thoroughly documented in the schema, including details about alert_type semantics and store_id sourcing. The description adds only the instruction to pass both values unchanged from get_my_alerts, which is a minor reinforcement. Since schema carries the heavy lifting, the baseline of 3 is appropriate.
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 begins with a precise verb and resource: 'Removes the signed-in user's alert for a store and alert type'. It clearly identifies the target object (store alert) and scopes it to the signed-in user, distinguishing it from alert creation (set_store_alert) and alert listing (get_my_alerts). The purpose is unambiguous.
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 provides a concrete use case ('stop alerting me about Nike cashback') and explicitly instructs the agent to use get_my_alerts to retrieve the store_id and alert_type, passing them unchanged. It does not explicitly name set_store_alert as the alternative for adding alerts, but this is strongly implied by the sibling context and the removal verb. Slight gap in naming the alternative explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_store_alertSet a store alertAIdempotentInspect
Creates or updates an alert that emails the signed-in user when a store's cashback rate or gift card discount reaches the threshold percent or higher. Use it for 'alert me when Nike cashback hits 10%' or 'tell me when Target gift cards are 15% off'. Re-saving an existing alert updates its threshold and re-arms it. At most 10 active alerts per user. Needs the store_id: take it from an earlier result, or find it with get_stores_by_name (optionally with country_code). Requires OAuth sign-in with a GotCashback account and the 'alerts' scope; anonymous callers are prompted to authorize.
| Name | Required | Description | Default |
|---|---|---|---|
| store_id | Yes | GotCashback's numeric store_id, taken from an earlier result (a store, cashback rate, gift card, deals, favorites or alerts response). If you only have a store name, use the by-name tool instead. | |
| alert_type | Yes | Alert type: 'cashback' (fires on the store's best flat cash rate: 'up to' rates and airline miles, credit card and points portals are ignored) or 'gift_card' (fires on the store's best gift card discount). Use the alert_type value from get_my_alerts as-is. | |
| threshold_percent | Yes | Fire when the rate/discount reaches this percent or higher (greater than 0, at most 100), e.g. 10 for 10% |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond annotations: re-saving updates the existing alert's threshold and re-arms it, there is a 10-active-alert cap, it emails the signed-in user, and requires OAuth with the 'alerts' scope. It also clarifies that anonymous callers are prompted to authorize. This is consistent with idempotentHint=true and destructiveHint=false.
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 purpose, then examples, then behavioral constraints and prerequisites. Every sentence adds distinct information: purpose, use cases, update semantics, limit, store_id sourcing, and auth requirements. There is no filler or 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 mutation tool with no output schema, the description covers all essential calling context: what it does, how to identify the store, how re-saving behaves, the active-alert limit, and authentication requirements. An agent has enough information to decide when to invoke it and how to populate the required parameters 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?
The schema already fully describes all three parameter fields, so the baseline is 3. The description adds value by giving real-world threshold examples, explaining that re-saving updates the threshold, and providing practical store_id sourcing workflow. It does not merely repeat 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: 'Creates or updates an alert that emails the signed-in user when a store's cashback rate or gift card discount reaches the threshold percent or higher.' It also gives concrete example intents, and its semantics are clearly distinct from sibling tools like get_my_alerts and remove_store_alert.
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 usage examples, indicates where to source store_id ('take it from an earlier result, or find it with get_stores_by_name'), and states auth prerequisites. The guidance to use the by-name tool when only a name is available is a clear when-to-use/when-not-to-use distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_favorite_storeAdd or remove a favorite storeAIdempotentInspect
Adds a store to, or removes it from, the signed-in user's favorite stores. Use it for 'add Best Buy to my favorites' or 'remove Nike from my favorites'. Needs the store_id: take it from an earlier result, or find it with get_stores_by_name (optionally with country_code). Requires OAuth sign-in with a GotCashback account; anonymous callers are prompted to authorize. All comparison tools work without signing in. Scope: 'favorites'.
| Name | Required | Description | Default |
|---|---|---|---|
| favorite | Yes | true to add the store to favorites, false to remove it | |
| store_id | Yes | GotCashback's numeric store_id, taken from an earlier result (a store, cashback rate, gift card, deals, favorites or alerts response). If you only have a store name, use the by-name tool instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that this mutates user-specific state, requires OAuth sign-in, prompts anonymous callers to authorize, and scopes the operation to 'favorites'. This meaningfully supplements the idempotentHint and destructiveHint annotations without contradicting them.
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 moderately long but every sentence carries useful information: purpose, examples, parameter sourcing, auth requirements, and scope. It is front-loaded with the core semantics and avoids fluff, though a couple of phrases could be tightened.
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 two-parameter tool with no output schema, the description covers purpose, parameter provenance, authentication, scope, and alternatives. An agent has everything needed to select and invoke the tool correctly in common scenarios.
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 input schema already documents both parameters with 100% coverage, so the baseline is 3. The description adds value by explaining where store_id can come from, suggesting get_stores_by_name as a lookup path, and mentioning the optional country_code for that lookup.
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 precise operation—adding or removing a store from the signed-in user's favorite stores—with concrete example utterances for both directions. It clearly differentiates this mutation tool from read-only siblings like get_my_favorite_stores and from store-lookup 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?
The description explicitly tells the agent when to use the tool via natural language examples, and it routes store_id lookup to get_stores_by_name when only a store name is available. It also notes that comparison tools work without signing in, giving helpful context about when this tool is not needed.
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.
2 tool updates
- Changed
remove_store_alert1 field changed- changed
Input schema / properties / alert_type / descriptionPrevious value: -"Alert type: 'cashback' (fires on the store's best cashback rate) or 'gift_card' (fires on the store's best gift card discount). Use the alert_type value from get_my_alerts as-is."New value: +"Alert type: 'cashback' (fires on the store's best flat cash rate: 'up to' rates and airline miles, credit card and points portals are ignored) or 'gift_card' (fires on the store's best gift card discount). Use the alert_type value from get_my_alerts as-is."
- Changed
set_store_alert1 field changed- changed
Input schema / properties / alert_type / descriptionPrevious value: -"Alert type: 'cashback' (fires on the store's best cashback rate) or 'gift_card' (fires on the store's best gift card discount). Use the alert_type value from get_my_alerts as-is."New value: +"Alert type: 'cashback' (fires on the store's best flat cash rate: 'up to' rates and airline miles, credit card and points portals are ignored) or 'gift_card' (fires on the store's best gift card discount). Use the alert_type value from get_my_alerts as-is."
Related MCP Connectors
Cashback catalogue of 2,700+ US retailers: store search, rates, deals, tracked activation.
Find shopping deals, earn cashback, and redeem rewards across retail, dining, and travel brands.
Verified deals, store policies & a trust score for thousands of online retailers. No auth.
Verified discount & referral codes for crypto exchanges, cards and more — tested first-hand.
Related MCP Servers
- AlicenseBqualityCmaintenanceCompare parcel and letter delivery prices across 60+ carriers in 27 European countries.1MIT
- FlicenseNot gradedqualityDmaintenanceEnables searching and comparing live credit card merchant offers (cash back, points, statement credits) across Amex, Chase, Citi, PayPal, Rakuten, and Capital One from any AI agent.-
- AlicenseNot gradedqualityDmaintenanceEnables users to compare prices, track budgets, and find promotional deals across major Dutch supermarkets and drugstores. It supports automated shopping list optimization, meal planning, and price history alerts for stores like Albert Heijn, Jumbo, and Kruidvat.15MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to search, compare, and track prices across 40+ retailers in Southeast Asia and the US using MCP tools.1-
Glama MCP Gateway
Add one secure layer between your agents and this server.