Skip to main content
Glama

fdic-banks-mcp-server

Query a multi-bank financial panel

fdic_query_financials
Read-onlyIdempotent

Pull a multi-institution, multi-quarter Call Report panel — one row per institution per quarter — filtered by CERTs, headquarters state, asset range, and thresholds on any catalog metric. Use it to screen (every bank in a state with a noncurrent-loan rate above 3%) or to build a trend panel for SQL. Returns one page of the panel sorted as requested, continued with offset; at offset 0 a panel larger than the page is also staged as a dataframe for fdic_dataframe_query. With no dates it covers the latest published quarter only.

Input Schema

NameRequiredDescriptionDefault
certsNoNonempty selection, at most 1000 raw CERTs. Deduplicated before querying the first 100; deferred_certs holds the rest for another call. Omit to screen every filer.
limitNoPositive count of rows per page, sliced from the already-fetched panel at offset. At offset 0 a larger panel is also staged whole as a dataframe when this deployment stages dataframes.
stateNoHeadquarters state: two-letter code in any case or full name. Branch locations are in fdic_get_deposits.
offsetNoFetched panel rows to skip; pass next_offset from the previous page. Only offset 0 stages a dataframe.
metricsNoAt most 1000 raw metric names. Deduplicated before querying the first 30; deferred_metrics holds the rest. Sort/filter metrics are always added. Omit or pass [] for the default health set.
sort_byNoMetric to order the pages (and the staged table) by; added to metrics when absent. Omit to order by newest quarter, then CERT.
to_dateNoLatest quarter, in the same forms as from_date. Omit for the latest published quarter; beside from_date, a later quarter is cut back to it.
from_dateNoEarliest quarter: a quarter-end date (2024-03-31), the same without dashes, or a quarter label (2024Q1). Omit for to_date alone.
max_assetsNoMaximum total assets in that quarter, thousands of US dollars; applied to each quarter's report.
min_assetsNoMinimum total assets in that quarter, thousands of US dollars (1000000 = $1 billion); applied to each quarter's report.
sort_orderNodesc (default, largest first) or asc; applies to sort_by. Rows without a value sort last.desc
metric_filtersNoUp to 5 metric thresholds, all of which a row must meet. A threshold on a capital ratio or insured_deposit_share skips filers that did not report it. Each filtered metric is added to metrics.

Output Schema

NameRequiredDescriptionDefault
capNoThe limit applied to this page.
rowsNoOne page of the fetched panel in the requested order, starting at offset.
errorNoPresent when the call failed. Absent on success.
shownNoRows on this page.
noticeNoGuidance for zero matches, more pages remaining, a page past the end, a capped panel, or where the full panel is staged.
datasetNoThe staged full panel; present only at offset 0 when the panel exceeded limit and this deployment staged it as a dataframe.
truncatedNoTrue when fetched rows remain past this page (next_offset is set).
data_as_ofNoWhen FDIC last rebuilt the financials index (ISO timestamp).
next_offsetNoOffset of the next page; present while fetched rows remain past this page.
report_datesNoQuarter range as applied.
rows_fetchedNoRows fetched into the panel.
panel_row_capNoThis server's row cap for one panel.
deferred_certsNoCERTs not queried; pass these as certs (peer_certs for comparisons) in a new call.
total_matchingNoInstitution-quarter rows at FDIC matching the filters.
panel_truncatedNoTrue when total_matching exceeded the panel row cap. Whole quarters are kept newest first, so a truncated panel is missing its oldest quarters — or, when the newest quarter alone exceeds the cap, the higher-numbered CERTs of that quarter.
processed_certsNoDeduplicated CERT selection actually queried; missing CERTs are a subset of these.
deferred_metricsNoMetrics not queried; pass these as metrics in a new call.
selection_noticeNoExecution caps and how to retrieve deferred selections.
processed_metricsNoMetrics actually queried, including automatic panel sort/filter metrics.
metric_definitionsNoField, unit, and basis of each metric in rows.
report_dates_defaultedNoTrue when neither from_date nor to_date was given, so only the latest published quarter was covered.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Positive inline preview count, bounded by the already-fetched panel. A larger panel is staged whole as a dataframe when this deployment stages dataframes."New value: +"Positive count of rows per page, sliced from the already-fetched panel at offset. At offset 0 a larger panel is also staged whole as a dataframe when this deployment stages dataframes."
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Fetched panel rows to skip; pass next_offset from the previous page. Only offset 0 stages a dataframe.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedInput schema / properties / sort_by / description
      Previous value: -"Metric to order the preview (and the staged table) by; added to metrics when absent. Omit to order by newest quarter, then CERT."New value: +"Metric to order the pages (and the staged table) by; added to metrics when absent. Omit to order by newest quarter, then CERT."
    • changedOutput schema / properties / cap / description
      Previous value: -"The limit applied to the preview."New value: +"The limit applied to this page."
    • changedOutput schema / properties / dataset / description
      Previous value: -"The staged full panel; present only when the panel exceeded the preview and this deployment staged it as a dataframe."New value: +"The staged full panel; present only at offset 0 when the panel exceeded limit and this deployment staged it as a dataframe."
    • addedOutput schema / properties / next_offset
      Added value: +{
      +  "description": "Offset of the next page; present while fetched rows remain past this page.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance for zero matches, a capped panel, or where the full panel is staged."New value: +"Guidance for zero matches, more pages remaining, a page past the end, a capped panel, or where the full panel is staged."
    • changedOutput schema / properties / rows / description
      Previous value: -"Inline preview of the panel, sorted as requested."New value: +"One page of the fetched panel in the requested order, starting at offset."
    • changedOutput schema / properties / shown / description
      Previous value: -"Rows in the preview."New value: +"Rows on this page."
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when the preview holds fewer rows than were fetched."New value: +"True when fetched rows remain past this page (next_offset is set)."
  2. Changed12 schema fields changed
    • changedInput schema / properties / certs / description
      Previous value: -"Up to 100 CERTs to include; omit to screen every filer."New value: +"Nonempty selection, at most 1000 raw CERTs. Deduplicated before querying the first 100; deferred_certs holds the rest for another call. Omit to screen every filer."
    • changedInput schema / properties / certs / maxItems
      Previous value: -100New value: +1000
    • addedInput schema / properties / certs / minItems
      Added value: +1
    • changedInput schema / properties / limit / description
      Previous value: -"Rows returned inline (1–500). A panel with more rows is also staged whole as a dataframe when this deployment stages dataframes."New value: +"Positive inline preview count, bounded by the already-fetched panel. A larger panel is staged whole as a dataframe when this deployment stages dataframes."
    • changedInput schema / properties / limit / maximum
      Previous value: -500New value: +9007199254740991
    • changedInput schema / properties / metrics / description
      Previous value: -"Up to 30 metric names (fdic_list_reference topic metrics) to return. Omit for the default health set."New value: +"At most 1000 raw metric names. Deduplicated before querying the first 30; deferred_metrics holds the rest. Sort/filter metrics are always added. Omit or pass [] for the default health set."
    • changedInput schema / properties / metrics / maxItems
      Previous value: -30New value: +1000
    • addedOutput schema / properties / deferred_certs
      Added value: +{
      +  "description": "CERTs not queried; pass these as certs (peer_certs for comparisons) in a new call.",
      +  "items": {
      +    "description": "Deferred CERT.",
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / deferred_metrics
      Added value: +{
      +  "description": "Metrics not queried; pass these as metrics in a new call.",
      +  "items": {
      +    "description": "Deferred metric.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / processed_certs
      Added value: +{
      +  "description": "Deduplicated CERT selection actually queried; missing CERTs are a subset of these.",
      +  "items": {
      +    "description": "Processed CERT.",
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / processed_metrics
      Added value: +{
      +  "description": "Metrics actually queried, including automatic panel sort/filter metrics.",
      +  "items": {
      +    "description": "Processed metric.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / selection_notice
      Added value: +{
      +  "description": "Execution caps and how to retrieve deferred selections.",
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations cover read-only/idempotent/open-world, but the description adds non-obvious behavior: default date scope is latest quarter only, offset 0 stages a full dataframe, and results are paged. It doesn't detail truncation/deduplication of certs/metrics (that lives in the schema) or error behavior, so not a 5.

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

Conciseness5/5

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

Three tight sentences front-loaded with the core action, then use cases, then pagination/defaults. Every clause carries distinct information; no filler.

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?

With 12 params, an output schema, and rich annotations, the description covers scope, defaults, pagination, and the dataframe-staging side effect. It leaves some detail (deferred_certs/metrics truncation, sort tie-breaking) to the schema, which is acceptable given the output schema exists.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description adds value by recasting params in terms of intent — CERTs, HQ state, asset range, metric thresholds — and explaining the date default. The schema still carries the unit and format detail, so a 4 rather than 5.

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

Purpose5/5

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

States a specific verb and resource ('Pull a multi-institution, multi-quarter Call Report panel'), defines the row grain (one row per institution per quarter), and enumerates the filters. This clearly distinguishes it from fdic_get_institution_financials (single bank) and fdic_compare_peers.

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

Usage Guidelines5/5

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

Gives two concrete use cases ('screen every bank in a state with a noncurrent-loan rate above 3%' vs 'build a trend panel for SQL') and describes pagination continuation. It also names fdic_dataframe_query as the downstream consumer of the staged dataframe, which routes the agent beyond this tool.

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.