Skip to main content
Glama

Search bank and credit card signup bonuses

search_bonuses
Read-only

Use when a user wants to find a US bank account, savings, credit card or brokerage signup bonus, or asks which offers are worth opening. Returns matching offers sorted by bonus value, highest first — except when balance_transfer is true, which sorts by intro window instead.

Input Schema

NameRequiredDescriptionDefault
limitNoMax results to return.
queryNoKeyword matched against bank/issuer, product name and the offer's requirement text, e.g. 'Chase', 'Sapphire' or 'balance transfer'.
stateNo2-letter US state code, e.g. 'TX'. Nationwide offers always match; regional offers match only their states.
bonus_typeNoRestrict to bank account, credit card, savings or brokerage signup bonuses.
balance_transferNoSet true to return only cards whose issuer states a 0% or intro rate on transferred balances. Results come back ordered by the length of that intro window, cheapest transfer fee first as the tie-break — NOT by bonus value, because these cards carry no signup bonus.
min_bonus_amount_usdNoMinimum bonus value in USD. For credit cards this is the estimated USD value of the points/miles bonus.
direct_deposit_requiredNoFilter on whether the bonus requires a qualifying direct deposit.

Output Schema

NameRequiredDescriptionDefault
bonusesYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / balance_transfer
      Added value: +{
      +  "description": "Set true to return only cards whose issuer states a 0% or intro rate on transferred balances. Results come back ordered by the length of that intro window, cheapest transfer fee first as the tie-break — NOT by bonus value, because these cards carry no signup bonus.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Keyword matched against bank/issuer and product name, e.g. 'Chase' or 'Sapphire'."New value: +"Keyword matched against bank/issuer, product name and the offer's requirement text, e.g. 'Chase', 'Sapphire' or 'balance transfer'."
  2. Changed5 schema fields changed
    • addedOutput schema / properties / bonuses / items / properties / bt_fee_min_usd
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / bonuses / items / properties / bt_fee_pct
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / bonuses / items / properties / bt_intro_apr_pct
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / bonuses / items / properties / bt_intro_months
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / bonuses / items / required
      Previous value: -[
      -  "id",
      -  "bank_or_issuer",
      -  "product_name",
      -  "bonus_type",
      -  "bonus_amount_usd",
      -  "bonus_max_usd",
      -  "bonus_points",
      -  "annual_fee_usd",
      -  "requirements",
      -  "min_deposit_usd",
      -  "direct_deposit_required",
      -  "expiry_date",
      -  "states_available",
      -  "application_url",
      -  "source_url",
      -  "last_verified_date",
      -  "offer_history",
      -  "verification",
      -  "status",
      -  "eligibility",
      -  "sponsored",
      -  "apply_url",
      -  "disclosure_url"
      -]New value: +[
      +  "id",
      +  "bank_or_issuer",
      +  "product_name",
      +  "bonus_type",
      +  "bonus_amount_usd",
      +  "bonus_max_usd",
      +  "bonus_points",
      +  "annual_fee_usd",
      +  "bt_intro_apr_pct",
      +  "bt_intro_months",
      +  "bt_fee_pct",
      +  "bt_fee_min_usd",
      +  "requirements",
      +  "min_deposit_usd",
      +  "direct_deposit_required",
      +  "expiry_date",
      +  "states_available",
      +  "application_url",
      +  "source_url",
      +  "last_verified_date",
      +  "offer_history",
      +  "verification",
      +  "status",
      +  "eligibility",
      +  "sponsored",
      +  "apply_url",
      +  "disclosure_url"
      +]
  3. Changed3 schema fields changed
    • changedInput schema / properties / bonus_type / description
      Previous value: -"Restrict to bank account bonuses, credit card signup bonuses, or savings account bonuses."New value: +"Restrict to bank account, credit card, savings or brokerage signup bonuses."
    • changedInput schema / properties / bonus_type / enum
      Previous value: -[
      -  "bank_account",
      -  "credit_card",
      -  "savings"
      -]New value: +[
      +  "bank_account",
      +  "credit_card",
      +  "savings",
      +  "brokerage"
      +]
    • changedOutput schema / properties / bonuses / items / properties / bonus_type / enum
      Previous value: -[
      -  "bank_account",
      -  "credit_card",
      -  "savings"
      -]New value: +[
      +  "bank_account",
      +  "credit_card",
      +  "savings",
      +  "brokerage"
      +]
  4. First observed

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), so the bar is lower. The description still adds real behavioral value by disclosing the default sort order (bonus value, highest first) and the balance_transfer exception that re-sorts by intro window.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first front-loads the usage trigger, the second front-loads the default return ordering before the exception. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return fields need no explanation, and the description covers the one non-obvious output trait (result ordering). With 0 required parameters and full schema coverage, an agent has everything needed to call it, though sibling routing remains unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters are already documented in the schema, including the balance_transfer ordering rule and the direct-deposit filter. The description restates the balance_transfer sorting behavior but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('find a US bank account, savings, credit card or brokerage signup bonus') plus the user intent it serves ('which offers are worth opening'). It is clearly distinguishable from a generic search, but it never contrasts itself with siblings like compare_bonuses, expiring_soon or get_bonus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger condition ('Use when a user wants to find...') rather than leaving usage implied. However, it names no exclusions or alternatives, so an agent still has to infer when compare_bonuses or expiring_soon is the better pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.