Skip to content

io.github.cyanheads/fdic-banks-mcp-server

by cyanheads · remote · local (npm) · no sign-in to list tools · v0.2.0 · published by GitHub user cyanheads

Search FDIC-insured banks, Call Report financials, peer rankings, failures, deposit market share.

Changes · 1

9 tools: 1 change things and 8 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http fdic-banks https://fdic-banks.caseyjhand.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "fdic_dataframe_query" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "fdic_dataframe_query" says "query": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

9 tools

Changes things 1Claude Code: ask
  • fdic_dataframe_queryRun one read-only SELECT (DuckDB SQL) across the df_<id> dataframes that fdic_query_financials and fdic_get_deposits staged or an earlier register_as saved; joins, aggregates, wind…1 finding

    Why it is in this group

    • The name "fdic_dataframe_query" says "query": a word for reading.
    • The description's first verb is "run": a word for a change.
    • The input takes a statement or command to run (input.sql), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "fdic_dataframe_query" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}; The name "fdic_dataframe_query" says "query": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Run one read-only SELECT (DuckDB SQL) across the df_<id> dataframes that fdic_query_financials and fdic_get_deposits staged or an earlier register_as saved; joins, aggregates, window functions, and CTEs work. Before writing SQL, pass each table name to fdic_dataframe_describe to read its columns. DOUBLE columns come back as JSON numbers and dollar columns are thousands of US dollars; BIGINT results such as COUNT(*) come back as strings, so CAST them to INTEGER or DOUBLE for arithmetic. Writes, DDL, file-reading functions, and system catalogs are rejected. register_as materializes the result as a new dataframe with a fresh TTL.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
Only reads 8Claude Code: allow
  • fdic_compare_peersCompare one institution with a peer group for one quarter: for each metric, the institution's value next to the peer median, quartiles, minimum and maximum, and its percentile and …No findings

    Why it is in this group

    • The name "fdic_compare_peers" says "compare": a word for reading.
    Description, as the server wrote it
    Compare one institution with a peer group for one quarter: for each metric, the institution's value next to the peer median, quartiles, minimum and maximum, and its percentile and rank. The default peer group is every institution in the same asset-size band that reported that quarter; narrow it to one state, widen it to all sizes, or name the peers by CERT. Dollar amounts are in thousands; ratios are percentages.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • fdic_dataframe_describeDescribe the df_<id> dataframes that fdic_query_financials and fdic_get_deposits staged when a result exceeded its inline preview, plus any that fdic_dataframe_query saved with reg…No findings

    Why it is in this group

    • The name "fdic_dataframe_describe" says "describe": a word for reading.
    Description, as the server wrote it
    Describe the df_<id> dataframes that fdic_query_financials and fdic_get_deposits staged when a result exceeded its inline preview, plus any that fdic_dataframe_query saved with register_as. Pass name (from a dataset field) for one dataframe in full: source tool, the parameters it was called with, row count, creation and expiry time, column schema, and the unit and basis of each amount, ratio, or count column (thousands of dollars, percent, or count). Read a table's columns this way before writing SQL for fdic_dataframe_query. Omit name to list the live dataframes, newest first, 50 per page, as name, source tool, row count, and expiry only. A deployment that serves HTTP without authentication, where every caller shares one canvas, does not list; there, pass the name a dataset field returned.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • fdic_get_depositsGet Summary of Deposits data (branch-level domestic deposits, annual as of June 30, 1994 onward).No findings

    Why it is in this group

    • The name "fdic_get_deposits" says "get": a word for reading.
    Description, as the server wrote it
    Get Summary of Deposits data (branch-level domestic deposits, annual as of June 30, 1994 onward). With cert only: the institution's branches and its deposit market share in each state where it has offices. With a geography (state, county, city, ZIP, or MSA code): every institution in that market ranked by deposits, with market share and the Herfindahl-Hirschman index. With both: the institution's branches in that market and its rank and share there. Defaults to the latest survey year. Dollar amounts are in thousands.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • fdic_get_institution_financialsGet one institution's quarterly Call Report financials by CERT — balance sheet, income, returns, credit quality, and capital ratios — most recent quarter first, with its name, stat…No findings

    Why it is in this group

    • The name "fdic_get_institution_financials" says "get": a word for reading.
    Description, as the server wrote it
    Get one institution's quarterly Call Report financials by CERT — balance sheet, income, returns, credit quality, and capital ratios — most recent quarter first, with its name, status, and holding company. Unsuffixed income and return metrics are single-quarter figures; _ytd metrics accumulate from January 1. Dollar amounts are in thousands. Quarterly data lands about seven weeks after quarter end; history reaches back to 1984.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • fdic_list_referenceList the vocabulary the other fdic_ tools accept and return: every financial metric name with its FDIC field, unit, and basis (single quarter, year-to-date, or point in time), bank…No findings

    Why it is in this group

    • The name "fdic_list_reference" says "list": a word for reading.
    Description, as the server wrote it
    List the vocabulary the other fdic_ tools accept and return: every financial metric name with its FDIC field, unit, and basis (single quarter, year-to-date, or point in time), bank charter classes, failure resolution methods, insurance funds, the asset bands fdic_compare_peers uses, and the years each dataset covers. Served from built-in tables; no request to FDIC.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • fdic_query_financialsPull 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 …No findings

    Why it is in this group

    • The name "fdic_query_financials" says "query": a word for reading.
    Description, as the server wrote it
    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 an inline preview sorted as requested; when the panel exceeds the preview it is staged as a dataframe for fdic_dataframe_query. With no dates it covers the latest published quarter only.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • fdic_search_failuresSearch FDIC-insured bank failures and assistance transactions since 1934 by name, CERT, headquarters state, failure date range, resolution method, or size.No findings

    Why it is in this group

    • The name "fdic_search_failures" says "search": a word for reading.
    Description, as the server wrote it
    Search FDIC-insured bank failures and assistance transactions since 1934 by name, CERT, headquarters state, failure date range, resolution method, or size. Returns each event with failure date, acquirer, total assets and deposits, and the FDIC's estimated loss to the insurance fund, plus totals over every matching event; group_by adds counts and losses per year, state, method, or fund. Searches failures only unless resolution is set to assistance or all. Dollar amounts are in thousands.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • fdic_search_institutionsFind FDIC-insured banks and savings institutions by name, CERT, location, size, charter class, or holding company — including closed, merged, and failed institutions.No findings

    Why it is in this group

    • The name "fdic_search_institutions" says "search": a word for reading.
    Description, as the server wrote it
    Find FDIC-insured banks and savings institutions by name, CERT, location, size, charter class, or holding company — including closed, merged, and failed institutions. Name matching is fuzzy, case-insensitive, and also matches former and trade names (a result says which it matched); every word must match. Returns institution records keyed by CERT, the FDIC certificate number every other fdic_ tool takes, with active status, successor CERT for merged or failed institutions, holding company, and latest reported assets and deposits. Credit unions are insured by the NCUA and are not in this data.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.2.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http fdic-banks https://fdic-banks.caseyjhand.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__fdic-banks__fdic_search_institutions",
      "mcp__fdic-banks__fdic_get_institution_financials",
      "mcp__fdic-banks__fdic_compare_peers",
      "mcp__fdic-banks__fdic_query_financials",
      "mcp__fdic-banks__fdic_search_failures",
      "mcp__fdic-banks__fdic_get_deposits",
      "mcp__fdic-banks__fdic_list_reference",
      "mcp__fdic-banks__fdic_dataframe_describe"
    ],
    "ask": [
      "mcp__fdic-banks__fdic_dataframe_query"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as fdic-banks. Review it before you use it.