Skip to main content
Glama
switchwize

SwitchWize MCP

Official

High-Yield Savings Rates

get_top_hysa_rates
Read-onlyIdempotent

Returns ranked high-yield savings rates from an editor-approved snapshot, with freshness and source attribution; if no approved snapshot exists, it returns no ranked rates.

Instructions

Return top high-yield savings rates with freshness and attribution. Answers only from the editor-approved snapshot; before its first release it returns no ranked rates and says so (approval_status: not_yet_approved). approvedOnly makes the requirement explicit. detail=full adds every listed account marked verified or tracked, best picks, movers, history and a headline summary.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo
detailNosummary (default) adds list_counts. full (savings) adds the complete shared build: accounts (verified and tracked, each marked), best_picks, movers, history and summary. rates stays verified-only either way.
approvedOnlyNoRequire an editor-approved HYSA snapshot. The default tool already answers only from the approved release; before its first release it returns no ranked rates (approval_status: not_yet_approved).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNo
asOfNo
toolNo
countNo
errorNo
ratesNo
termsNo
sourceNo
categoryNo
rate_typeNo
dataStatusNo
attributionNo
emptyReasonNo
generatedAtYes
schemaVersionYes
sourceDetailsNo
methodologyUrlNo
freshnessStatusNo
attributionDetailsNo
supportedCategoriesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv0.3.0
    • addedInput schema / properties / approvedOnly
      Added value: +{
      +  "description": "Require an editor-approved HYSA snapshot. The default tool already answers only from the approved release; before its first release it returns no ranked rates (approval_status: not_yet_approved).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / detail
      Added value: +{
      +  "description": "summary (default) adds list_counts. full (savings) adds the complete shared build: accounts (verified and tracked, each marked), best_picks, movers, history and summary. rates stays verified-only either way.",
      +  "enum": [
      +    "summary",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "attribution": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "category",
      +        "count",
      +        "freshnessStatus",
      +        "rates"
      +      ]
      +    },
      +    {
      +      "properties": {
      +        "attribution": {
      +          "additionalProperties": true,
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "tool",
      +        "error",
      +        "attribution"
      +      ]
      +    }
      +  ],
      +  "properties": {
      +    "asOf": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "attribution": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "additionalProperties": true,
      +          "type": "object"
      +        }
      +      ]
      +    },
      +    "attributionDetails": {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    "category": {
      +      "type": "string"
      +    },
      +    "count": {
      +      "type": "number"
      +    },
      +    "dataStatus": {
      +      "enum": [
      +        "available",
      +        "no_observations",
      +        "no_eligible_rates",
      +        "source_error",
      +        "unavailable",
      +        "stale",
      +        "conflicted"
      +      ],
      +      "type": "string"
      +    },
      +    "emptyReason": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "error": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "code": {
      +          "type": "string"
      +        },
      +        "message": {
      +          "type": "string"
      +        },
      +        "retryable": {
      +          "type": "boolean"
      +        },
      +        "suggestions": {
      +          "items": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "additionalProperties": true,
      +                "type": "object"
      +              }
      +            ]
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "message"
      +      ],
      +      "type": "object"
      +    },
      +    "freshnessStatus": {
      +      "enum": [
      +        "fresh",
      +        "aging",
      +        "stale",
      +        "unavailable"
      +      ],
      +      "type": "string"
      +    },
      +    "generatedAt": {
      +      "type": "string"
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "methodologyUrl": {
      +      "type": "string"
      +    },
      +    "rate_type": {
      +      "enum": [
      +        "APY",
      +        "APR"
      +      ],
      +      "type": "string"
      +    },
      +    "rates": {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "schemaVersion": {
      +      "type": "string"
      +    },
      +    "source": {
      +      "type": "string"
      +    },
      +    "sourceDetails": {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    "supportedCategories": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "terms": {
      +      "type": "string"
      +    },
      +    "tool": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "schemaVersion",
      +    "generatedAt"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

A3.7/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly, idempotent, openWorld), yet the description discloses the non-obvious behavioral gate: results come solely from the editor-approved snapshot, and before first release it returns no ranked rates with approval_status: not_yet_approved. It also enumerates what detail=full unlocks. This is meaningful context an agent could not infer from structured fields.

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

Conciseness4/5

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

Four front-loaded sentences with the core purpose first and the edge-case behavior second. The sentence 'approvedOnly makes the requirement explicit' is largely redundant with the preceding clause and the schema description, a minor waste.

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-format detail is rightly omitted, and the description covers the important exception path (pre-approval empty result) plus detail modes and attribution. Only the undocumented limit parameter and the absence of sibling routing keep it from being fully complete.

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 coverage is 67% (detail and approvedOnly are documented; limit is not), so the schema already carries most parameter meaning. The description largely restates the schema's detail/approvedOnly text, adding only minor framing, and leaves limit's 1-25 bounded meaning unexplained.

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?

States a specific verb and resource ('Return top high-yield savings rates') and adds scope qualifiers (freshness, attribution, editor-approved snapshot). It is clearly distinguishable from the generic sibling get_top_rates by the HYSA focus, though it never names that sibling explicitly.

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

Usage Guidelines2/5

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

No when-to-use or when-not-to-use guidance relative to the many siblings (get_top_rates, get_rate_freshness, get_bank_gap). The description explains parameter-driven behavior but never tells an agent which of the competing rate tools to pick in a given situation.

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