Fdic Banks Mcp Server

io.github.cyanheads由 GitHub 帳號 cyanheads 發布v0.3.0更新於 Oct 29, 2026

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

已驗證Streamable HTTP可網頁執行金融資料與分析

概覽

AI 產生的概覽

檢索 FDIC 承保銀行,回傳 Call Report 財務資料、同業排名、倒閉與併購歷史,以及分行存款市占。

可以做什麼
  • 依名稱、CERT、地區、規模、牌照類別或控股公司尋找銀行與儲蓄機構,包含已關閉與已倒閉者
  • 讀取單一機構的季度 Call Report 財務、結構變更歷史,以及某一季的同業百分位與排名
  • 依州、資產區間或指標門檻跨季度篩選多家銀行,並檢索 1934 年以來的倒閉與援助交易
  • 依機構或依州、郡、市、郵遞區號、MSA 檢視分行存款與市占
  • 以唯讀 DuckDB SQL 描述與查詢暫存結果表,並列出指標、代碼與資料涵蓋範圍參考表
適用情境
適合需要權威美國銀行監理資料的情境:剖析某家銀行、與同業標竿比較、依財務門檻篩選銀行,或研究倒閉、併購與地方存款市場。
執行需求
可使用託管 HTTP 端點,或透過 npx 在本機執行(需 Node.js;原始碼建置需 Bun 1.4+ 或 Node.js 24+)。不需 API 金鑰或帳號,FDIC BankFind API 為公開服務。需能連線 api.fdic.gov。選用環境變數可調整限流、快取與資料框有效期、傳輸方式、連接埠與驗證模式。
安裝前請注意
對公開 FDIC 資料為唯讀,但託管執行個體的所有呼叫端共用同一個 FDIC 請求限流器與同一個資料框工作區,暫存表對其他呼叫端可見,且該處不提供列表功能。資料框 SQL 僅限 SELECT,但 register_as 與 dataframe_drop 會改變暫存狀態;drop 預設關閉,需以變數啟用。機構與交易對手名稱屬登錄資料,並非指令。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Fdic Banks Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.cyanheads%2Ffdic-banks-mcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "fdic-banks": {
      "type": "http",
      "url": "https://fdic-banks.caseyjhand.com/mcp"
    }
  }
}

README

@cyanheads/fdic-banks-mcp-server

Search FDIC-insured banks, Call Report financials, peer rankings, failures, mergers, deposit share via MCP. STDIO or Streamable HTTP.

11 Tools


Overview

Every FDIC-insured bank and savings institution, open, merged, or failed, from the FDIC BankFind Suite API. Read quarterly Call Report financials back to 1984, rank a bank against peers, screen many at once, search failures since 1934, trace a bank's mergers, renames, and charter changes, and map branch deposits and market share. Credit unions are NCUA-insured and not included. No API key required.

Tools

ToolDescription
fdic_search_institutionsFind institutions by name, CERT, location, size, charter class, or holding company; returns the CERT every other tool takes
fdic_get_institution_financialsOne institution's quarterly Call Report history, most recent first, with its profile
fdic_get_institution_historyOne institution's structure-change events, newest first: mergers, failures, branch purchases, renames, relocations, and charter changes, with the other institution named
fdic_compare_peersOne institution against a peer group for one quarter: peer median, quartiles, range, percentile, and rank per metric
fdic_query_financialsMulti-bank, multi-quarter Call Report panel filtered by CERTs, state, asset range, and metric thresholds
fdic_search_failuresBank failures and assistance transactions since 1934, with totals, per-method subtotals, and optional grouping
fdic_get_depositsSummary of Deposits: an institution's branches and state market share, or a market ranked by deposits with HHI
fdic_list_referenceMetric catalog, charter classes, failure methods, structure-change codes, insurance funds, peer asset bands, and dataset coverage
fdic_dataframe_describeList staged dataframes, or describe one by name: provenance, columns, and units
fdic_dataframe_queryRun one read-only DuckDB SELECT across staged dataframes
fdic_dataframe_dropDrop a staged dataframe before its TTL; off unless FDIC_DATAFRAME_DROP_ENABLED=true

Dataframe workflow

  1. fdic_query_financials and fdic_get_deposits return one page of rows at a time (limit, offset); while rows remain, next_offset names the next page. At offset 0, when the full result is larger than limit, they also stage it as a df_XXXXX_XXXXX table and name it in the dataset field; later pages never stage.
  2. Pass that name to fdic_dataframe_describe for the table's columns, units, and basis.
  3. Query it with fdic_dataframe_query: joins, aggregates, window functions, and CTEs across every staged table. register_as saves a result as a new table.
  4. Tables expire after FDIC_DATASET_TTL_SECONDS (default 24 hours). The live tables hold 1,000,000 rows together, and the oldest are dropped past that.

Staging runs on DuckDB and is on by default; CANVAS_PROVIDER_TYPE=none turns it off. The Claude Desktop .mcpb bundle ships without DuckDB's native binding and sets CANVAS_PROVIDER_TYPE=none, so there the two producers return their rows a page at a time, continued with offset and next_offset, the dataframe tools report that dataframes are off, and every other tool works normally.

Capability reference

fdic_search_institutions tool

  • Filters: name (up to 100 characters; every word must match a current, former, or trade name), certs (first 50 unique), state, city, bank_classes, min_assets / max_assets (thousands of US dollars), holding_company_rssd
  • status is active, inactive, or any; it defaults to any when name or certs is given and active otherwise, and status_filter reports the value applied
  • Up to 100 per page (default 20), paged with offset / next_offset. Records carry active, successor_cert for merged or failed banks, holding_company.rssd, and matched_on; CERTs with no record land in missing_certs

fdic_get_institution_financials tool

  • cert required; up to 25 metrics (default: a 15-metric health set); quarters accepts 1–10,000 and queries at most 200 (default 8), bounded by from_date / to_date as 2025-03-31, 20250331, or 2025Q1
  • Rows run most recent first, each a values map of metric → number, null when not reported; metric_definitions gives each metric's FDIC field, unit, and basis
  • quarters_available counts the quarters in the window; an unknown CERT fails as cert_not_found

fdic_get_institution_history tool

  • cert required; event_types (omitted = every type but branch) selects from merger, failure_or_assistance, branch_purchase, name_change, relocation, charter_change, opening, closing, other, and branch (branch-level openings, closings, sales, and relocations); from_date / to_date (YYYY-MM-DD, inclusive) bound the effective date
  • Events run newest first. Each carries effective_date, event_type, change_code, change_description, and role (subject, outgoing, survivor, buyer, seller), plus counterparty (CERT and name of the other institution), changes (former and new values of name, address, city, state, class, chartering agency, regulator), branch (the office, on branch events), and transaction_number (shared by the rows of one deal) where FDIC recorded them. A merger or failure appears once, whichever side the CERT was on
  • limit (default 50, no maximum) and offset page the list; total, next_offset, and event_types_filter report the match; data_as_of is the history index build time. Mergers start in 1969 and failures in 1970; an unknown CERT fails as cert_not_found

fdic_compare_peers tool

  • cert required; report_date defaults to the latest published quarter (report_date_defaulted); up to 20 metrics
  • Peer group: peer_asset_band (same by default, any, under_100m, 100m_1b, 1b_10b, 10b_250b, over_250b) plus an optional peer_state, or peer_certs (first 200 unique); peer_certs can't be combined with the band or state (conflicting_peer_filters)
  • Each comparison returns value, peer_median, peer_p25 / peer_p75, peer_min / peer_max, percentile, and rank of rank_of, over the peer_count_with_value peers that reported the metric; peer_cohort_incomplete marks a peer group only partly processed

fdic_query_financials tool

  • Filters: up to 100 certs, state, min_assets / max_assets, up to 5 metric_filters (metric with min and/or max), and up to 30 metrics; from_date / to_date default to the latest published quarter
  • limit (default 50) rows per page, ordered by sort_by / sort_order, continued with offset / next_offset; at offset 0 a larger panel is also staged whole as a dataframe
  • The panel is capped at FDIC_PANEL_MAX_ROWS (default 50,000), keeping the newest quarters; total_matching, rows_fetched, and panel_truncated report what was left out

fdic_search_failures tool

  • Filters: name, certs (first 50 unique; most events before 1977 carry none), state, from_date / to_date (YYYY-MM-DD), methods, min_assets; resolution is failure by default, or assistance or all
  • summary totals every matching event with a by_method breakdown; group_by (year, state, method, insurance_fund) adds groups
  • total_assets_missing_count, total_deposits_missing_count, and estimated_loss_missing_count count unreported amounts, and a total is null when no match has a recorded amount. sort by date, loss, or assets; up to 200 per page (default 25)

fdic_get_deposits tool

  • cert alone returns the institution's branches and deposit share in each state (mode: "institution"); a geography (state, county, city, zip, msa_code) ranks every institution in that market with hhi (market); both together give institution_in_market. county and city require state
  • year from 1994 on, defaulting to the latest survey (year_defaulted); deposits are domestic branch deposits as of June 30, in thousands of US dollars
  • limit (default 25) rows per page, continued with offset / next_offset; at offset 0 a larger set is also staged as a dataframe, and total_rows gives the full count

fdic_list_reference tool

  • One topic per call: metrics, bank_classes, failure_methods, change_codes, insurance_funds, peer_asset_bands, or coverage
  • metrics lists all 49 metric names with FDIC field, unit, basis, caveat, and in_default_set; change_codes lists the 41 FDIC structure-change codes with their event_type and level (institution, branch, or both); served from built-in tables with no request to FDIC

fdic_dataframe_describe tool

  • name (a df_XXXXX_XXXXX from a dataset field) returns that table's source tool, parameters, row count, expiry, column_schema, and column_units
  • Without name, lists live tables newest first, 50 per page, paged with offset / next_offset; over HTTP with MCP_AUTH_MODE=none listing is off and fails as listing_unavailable
  • Fails as canvas_unavailable when dataframe staging is off

fdic_dataframe_query tool

  • One SELECT per call, up to 20,000 characters; writes, DDL, file-reading functions, and system catalogs are rejected with typed reasons (non_select_statement, denied_function, system_catalog_access, and others)
  • row_limit accepts 1–1,000,000 (default 1,000) and executes at most 10,000; row_count_capped reports when more rows matched. preview sets the inline row count
  • register_as saves the result as a new dataframe, or fails as register_as_too_large past 1,000,000 rows; BIGINT results such as COUNT(*) come back as strings

fdic_dataframe_drop tool

  • name of a staged dataframe; returns dropped: true, or dropped: false when nothing by that name was staged
  • Disabled unless FDIC_DATAFRAME_DROP_ENABLED=true; otherwise tables expire on their TTL

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

FDIC-specific:

  • Reads five BankFind datasets: institutions (every insured charter, active and inactive), quarterly Call Report financials from 1984, failures and assistance transactions from 1934, structure-change history (mergers from 1969, failures from 1970), and the annual Summary of Deposits from 1994
  • Paced requests (FDIC_RATE_LIMIT_RPS, at most four in flight) with a response cache and a cooldown after an FDIC 429, retried honoring Retry-After; each call has a 45-second budget (55 seconds for a panel, or a history read that includes branch)
  • A curated catalog of 49 Call Report metrics with FDIC field code, unit, and basis; _ytd metrics accumulate from January 1, and unsuffixed income and return metrics cover a single quarter
  • Handles BankFind's quirks: case-sensitive code values, string-typed report dates, absence sentinels, and ratios reported as 0 when a bank did not report them
  • Array inputs are deduplicated in order and capped at 1,000 items; empty certs, peer_certs, bank_classes, methods, and event_types are rejected

Agent-friendly output:

  • Every data response carries data_as_of, metric_definitions, and report_date_defaulted / year_defaulted when the server picked the period
  • Unreported metrics come back null; nothing is filled in
  • Typed errors with recovery text that names the next call (cert_not_found, conflicting_peer_filters, no_report_for_period); rate-limit errors (pacer_shed, upstream_rate_limited) carry retryAfter
  • processed_certs / deferred_certs and processed_metrics / deferred_metrics separate what was queried from what to pass in a new call
  • Publishes the fdic-banks-guide agent skill (root skills/: identifier chains, gates, multi-step workflows), served to MCP clients as skill://fdic-banks-guide/SKILL.md and shipped in the npm package, Docker image, and .mcpb bundle

Getting started

Connect to the hosted instance, no install:

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

Every caller of the hosted instance shares one FDIC request pacer and one dataframe workspace, so fdic_dataframe_describe takes a table's exact name there; listing is off.

Or run it locally:

sh
claude mcp add fdic-banks-mcp-server -- npx -y @cyanheads/fdic-banks-mcp-server

For other clients, add this to the MCP config file:

json
{  "mcpServers": {    "fdic-banks-mcp-server": {      "command": "npx",      "args": ["-y", "@cyanheads/fdic-banks-mcp-server"]    }  }}

No API key or account is needed: the FDIC BankFind Suite API is public. For Docker or a source build, see Running the server.

Configuration

VariableDescriptionDefault
FDIC_RATE_LIMIT_RPSMaximum request starts per second to api.fdic.gov (1–15), shared by every caller of the process.8
FDIC_CACHE_TTL_SECONDSLifetime of the in-process FDIC response cache, in seconds; 0 disables caching.3600
FDIC_PANEL_MAX_ROWSRow cap for one fdic_query_financials panel (1,000–200,000); the newest quarters are kept when it binds.50000
FDIC_DATASET_TTL_SECONDSLifetime of each staged dataframe, in seconds (minimum 60).86400
FDIC_DATAFRAME_DROP_ENABLEDSet true to enable fdic_dataframe_drop.false
CANVAS_PROVIDER_TYPEDataframe engine: duckdb, or none to turn staging and the dataframe tools off. The server sets duckdb when unset or empty; the Claude Desktop bundle sets none.duckdb
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_HTTP_PORTHTTP server port.3010
MCP_SESSION_MODEHTTP session mode: stateless, stateful, or auto.stateless
MCP_AUTH_MODEAuthentication: none, jwt, or oauth.none
MCP_LOG_LEVELLog level (debug, info, warning, error, etc.).info
LOGS_DIRDirectory for log files (Node.js only).<app-root>/logs
STORAGE_PROVIDER_TYPEStorage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1.in-memory
OTEL_ENABLEDEnable OpenTelemetry.false

See .env.example for the full list of optional overrides.

Running the server

Local development

Requires Bun v1.4.0 or higher (or Node.js v24+).

  • Clone and install:

    sh
    git clone https://github.com/cyanheads/fdic-banks-mcp-server.gitcd fdic-banks-mcp-server && bun installcp .env.example .env   # every variable is optional; edit to override a default
  • Build and run the production version:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:http   # http://localhost:3010/mcp# orbun run start:stdio
  • Run checks and tests:

    sh
    bun run devcheck  # Lints, formats, type-checks, and morebun run test      # Runs the test suite

Docker

sh
docker run --rm -p 3010:3010 ghcr.io/cyanheads/fdic-banks-mcp-server:latest

The image defaults to HTTP transport on port 3010, stateless session mode, and logs to /var/log/fdic-banks-mcp-server. To run it over stdio from an MCP client, use "command": "docker" with "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/fdic-banks-mcp-server:latest"].

Project structure

DirectoryPurpose
src/index.tscreateApp() entry point: registers the tools, sets the server instructions, and starts the FDIC service and canvas bridge.
src/configServer-specific environment variable parsing and validation with Zod.
src/mcp-server/toolsTool definitions (*.tool.ts), shared input schemas, and markdown helpers. Eleven tools.
src/services/fdicFDIC BankFind client (request pacer, response cache, query builder, normalization), the metric catalog, and the reference tables.
src/services/canvas-bridgeAdapter to the framework's DataCanvas: df_<id> table names, per-table TTL, and provenance.
tests/Unit and integration tests, mirroring the src/ structure.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for logging, ctx.state for storage
  • Register new tools in buildToolDefinitions() in src/mcp-server/tools/definitions/index.ts
  • Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

This project is licensed under the Apache 2.0 License. See the LICENSE file for details.

來源:README.md,提交 925807e

工具

10

fdic_search_institutions

Search FDIC-insured institutions

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.

輸入參數citynamesortcertslimitstateoffsetstatusmax_assetsmin_assetsbank_classesholding_company_rssd

fdic_get_institution_financials

Get institution quarterly financials

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.

輸入參數cert必填metricsto_datequartersfrom_date

fdic_get_institution_history

Get institution structure-change history

Get one institution's structure-change history by CERT, newest first: the mergers it absorbed or was absorbed in, failures and assisted takeovers, branch purchases and sales, renames, relocations, charter and regulator changes, openings, and closings, each with its effective date, FDIC change code, the institution's role, and the other institution's CERT and name. A merger or failure appears once, from whichever side the CERT was on. Branch-level openings, closings, sales, and relocations are left out unless event_types includes branch. Merger records start in 1969 and failure records in 1970.

輸入參數cert必填limitoffsetto_datefrom_dateevent_types

fdic_compare_peers

Compare an institution with its peers

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.

輸入參數cert必填metricspeer_certspeer_statereport_datepeer_asset_band

fdic_query_financials

Query a multi-bank financial panel

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.

輸入參數certslimitstateoffsetmetricssort_byto_datefrom_datemax_assetsmin_assetssort_ordermetric_filters

fdic_search_failures

Search FDIC bank failures

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.

輸入參數namesortcertslimitstateoffsetmethodsto_dategroup_byfrom_datemin_assetsresolution

fdic_get_deposits

Get Summary of Deposits branches and market share

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. Branches and rankings come a page at a time, continued with offset; at offset 0 a set larger than the page is also staged as a dataframe for fdic_dataframe_query. Defaults to the latest survey year. Dollar amounts are in thousands.

輸入參數zipcertcityyearlimitstatecountyoffsetmsa_code

fdic_list_reference

List FDIC reference vocabulary

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, the structure-change codes fdic_get_institution_history reports and the event type each maps to, insurance funds, the asset bands fdic_compare_peers uses, and the years each dataset covers. Served from built-in tables; no request to FDIC.

輸入參數topic必填

fdic_dataframe_describe

Describe staged dataframes

Describe the df_<id> dataframes that fdic_query_financials and fdic_get_deposits staged when a result at offset 0 was larger than one page, 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.

輸入參數nameoffset

fdic_dataframe_query

Query staged dataframes with SQL

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.

輸入參數sql必填previewrow_limitregister_as

版本歷史

4
  1. v0.3.0最新Oct 29, 2026
  2. v0.2.0Oct 16, 2026
  3. v0.1.3Oct 9, 2026
  4. v0.1.2Sep 27, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分