FDIC BankFind MCP Server
This server is an MCP interface to the FDIC BankFind Suite API, letting LLM clients search banking data and run multi-bank financial analysis workflows.
Search FDIC-insured institutions by name, state, CERT, asset size, charter class, or regulatory status
Retrieve detailed institution profiles by certificate number
Search failed bank records and get failure details (date, resolution, cost, acquirer)
Search branch/office locations and filter by geography or branch type
Search institution history, including mergers, name changes, and charter conversions
Search quarterly Call Report financials, annual financial summaries, and Summary of Deposits (SOD) branch deposit data
Search quarterly demographics and market-structure data
Compare bank snapshots across time, ranking growth, profitability, and efficiency changes
Build peer groups and rank an institution against peers on key financial metrics
Run CAMELS-style health assessments for single banks or peer groups
Detect early-warning risk signals such as capital erosion, credit deterioration, and funding stress
Analyze credit concentration, funding profile, securities portfolio, and UBPR-equivalent ratios
Map franchise footprint across MSAs and compute deposit market share with HHI concentration
Profile holding companies and aggregate their FDIC-insured subsidiaries
Provide regional economic context using FRED data
Generate QBP Lite data bundles for chart-ready reports
Use citation-friendly search and fetch tools for institutions, failures, branches, and schema docs
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FDIC BankFind MCP ServerFind active banks in North Carolina with assets over $1 billion"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FDIC BankFind MCP Server
fdic-mcp-server is an MCP (Model Context Protocol) server for the FDIC BankFind Suite API. It gives LLM hosts a clean way to search FDIC-insured institutions, retrieve public banking records, and run common multi-bank analysis workflows without custom FDIC API plumbing.
It is useful when you want an MCP-compatible client to answer questions about banks, failures, branches, quarterly financials, deposit data, or peer performance using a stable tool surface and machine-readable responses.
Table Of Contents
Related MCP server: fdic
Project Status
Active development. The server is usable today and the tool surface is covered by tests, but the project is still evolving as client support and analysis workflows improve.
Why This Project Exists
The FDIC BankFind Suite API is public and useful, but it is not packaged for MCP clients out of the box. This project solves that by:
exposing BankFind datasets as MCP tools
preserving both human-readable and machine-readable responses
adding server-side analysis helpers for multi-bank comparison workflows
supporting both local stdio hosts and remote HTTP hosts
Documentation
Public user docs:
Repo reference docs:
Project and release info:
Installation
Prerequisites:
Node.js 20 or later
npm
Run directly without a global install:
npx fdic-mcp-serverInstall globally:
npm install -g fdic-mcp-server
fdic-mcp-serverInstall from GitHub Packages:
npm install -g @jflamb/fdic-mcp-server --registry=https://npm.pkg.github.com
fdic-mcp-serverInstall from source:
git clone https://github.com/jflamb/fdic-mcp-server.git
cd fdic-mcp-server
npm install
npm run buildUsage
Hosting
The project-operated public endpoint and website chatbot are retired. Install the server locally or operate your own HTTP deployment. GitHub Pages remains the documentation site. Remote-only clients require a reachable HTTPS endpoint supplied by you or your operator.
Run Locally
Stdio transport:
node dist/index.jsHTTP transport:
TRANSPORT=http PORT=3000 node dist/index.jsThe HTTP MCP endpoint is http://127.0.0.1:3000/mcp by default.
Notes:
Local HTTP runs bind to
127.0.0.1by default. SetHOSTif you intentionally want a different bind address.Browser-origin requests are checked against
ALLOWED_ORIGINS. If unset, the server allows the local defaults forlocalhostand127.0.0.1on the configured port, plus non-browser requests with noOriginheader.HTTP requests are stateless by default and support MCP
2026-07-28. Each request carries its own protocol metadata; noMCP-Session-Idor instance affinity is required. SDK compatibility handling also serves older clients.ALLOWED_HOSTSaccepts comma-separated hostnames (without schemes or ports). Defaults arelocalhost,127.0.0.1, and[::1]. Add your endpoint hostname for remote deployments; settingHOSTalone does not authorize a hostname.Requests are limited to 100 KiB. Progress updates stream on the originating POST response. Standalone GET streams and DELETE session teardown are no longer supported.
See self-hosting and migration notes for deployment controls and SDK integration changes.
Container builds use PORT=8080 by default for self-hosted containers.
Set FDIC_MAX_RESPONSE_BYTES to override the upstream FDIC response-size guard. The default is 5242880 bytes (5 MiB).
Minimal MCP Configuration
{
"mcpServers": {
"fdic": {
"command": "npx",
"args": ["-y", "fdic-mcp-server"]
}
}
}If you are running from a local clone instead of the published package:
{
"mcpServers": {
"fdic": {
"command": "node",
"args": ["/path/to/fdic-mcp-server/dist/index.js"]
}
}
}Client-specific setup details are in docs/clients.md.
Usage Examples
Find active banks in North Carolina with assets over $1 billion:
filters: STNAME:"North Carolina" AND ACTIVE:1 AND ASSET:[1000000 TO *]Get the 10 costliest bank failures since January 1, 2000:
filters: FAILDATE:[2000-01-01 TO *]
sort_by: COST
sort_order: DESC
limit: 10Compare North Carolina banks between two quarterly report dates:
state: North Carolina
start_repdte: 20211231
end_repdte: 20250630
sort_by: asset_growth
sort_order: DESC
(fdic_compare_bank_snapshots)Build a peer group for a specific bank:
cert: 29846
repdte: 20241231
(fdic_peer_group_analysis)More examples are in docs/usage-examples.md.
Available Tools
Tool | Description |
| ChatGPT-compatible citation search across institutions, failures, branches, and schema docs |
| Fetch full citation text for a result returned by |
| Search FDIC-insured banks and savings institutions |
| Get details for a specific institution by CERT number |
| Search failed bank records |
| Get failure details for a specific institution |
| Search branch and office locations |
| Search structural change events such as mergers and name changes |
| Search quarterly Call Report financial data |
| Search annual financial summary data |
| Search Summary of Deposits branch-level deposit data |
| Search quarterly demographics and market-structure data |
| Compare two reporting snapshots across banks and rank growth and profitability changes |
| Build a peer group and rank an institution against peers on financial metrics |
| Run a CAMELS-style health assessment for a single institution |
| Render a ChatGPT bank deep-dive dashboard for a single institution |
| Run a UBPR-equivalent ratio analysis (ROA, ROE, NIM, efficiency, capital, liquidity, growth) |
| Rank a group of institutions by CAMELS-style health scores |
| Scan institutions for early warning risk indicators |
| Analyze loan portfolio composition and CRE/construction concentration relative to capital |
| Analyze deposit composition, wholesale funding reliance, and funding risk signals |
| Analyze securities portfolio size, MBS concentration, and interest rate exposure |
| Map branch and deposit distribution across MSA markets using SOD data |
| Rank institutions by deposit market share in an MSA or city market and compute HHI |
| Profile a holding company and its FDIC-insured subsidiaries with aggregated metrics |
| Provide regional economic context (unemployment, interest rate environment) for a bank's market |
Server-side analysis helpers:
fdic_compare_bank_snapshotsbatches roster lookup, financial snapshots, and optional demographics snapshots inside the MCP serverfdic_peer_group_analysisbuilds a peer group from asset size, charter class, and geography criteria and then ranks an institution against peersfdic_analyze_bank_healthreturns a fullpublic_camels_proxy_v1proxy assessment;fdic_compare_peer_healthreturns per-institution summary scores with a full proxy for the subject;fdic_detect_risk_signalsuses the proxy engine to generate per-institution risk signals — all are analytical proxies, not official regulatory CAMELS ratings
Claude Code Skills
This repository includes a Claude Code slash command that chains multiple FDIC MCP tools into a structured analysis workflow.
Skill | Command | Description |
Bank Deep Dive |
| Comprehensive single-institution analysis report covering health assessment, financial performance, peer benchmarking, credit concentration, funding profile, securities portfolio, franchise footprint, and economic context. Accepts a bank name or CERT number with an optional report date. |
Skills are defined in .claude/commands/ and are available to any Claude Code session with this MCP server configured. See docs/usage-examples.md for a usage example.
Data Notes
Monetary values are generally reported in thousands of dollars.
CERTis the stable FDIC institution identifier.Financial and demographics datasets are quarterly and use
REPDTEinYYYYMMDD.Summary data is annual and uses
YEAR.SOD data is annual branch-level data as of June 30.
Do not mix quarterly financial data and annual branch data without stating the date basis.
Support
Use the GitHub issue tracker for bugs, documentation problems, and feature requests: https://github.com/jflamb/fdic-mcp-server/issues
The main support docs are:
Contributing
Contributor guidance lives in CONTRIBUTING.md.
For local validation, run:
npm run typecheck
npm test
npm run buildReleases are published automatically from validated main commits by semantic-release. Do not manually edit the package version or create release tags by hand. GitHub Releases is the authoritative release record for published versions.
License
This project is licensed under the MIT License.
Available Tools
29 toolsfdic_analyze_bank_healthAnalyze Bank Health (CAMELS-Style)ARead-onlyIdempotent
Produce a CAMELS-style analytical assessment for a single FDIC-insured institution using the public off-site proxy model.
Scores five components — Capital (C), Asset Quality (A), Earnings (E), Liquidity (L), Sensitivity (S) — using published FDIC financial data and derives a weighted composite rating (1=Strong to 5=Unsatisfactory), plus a proxy model overall band (1.0–4.0 scale).
Output includes:
Composite and component ratings with individual metric scores
Proxy model overall assessment band with capital classification
Management overlay assessment (inferred from public data patterns)
Trend analysis across prior quarters for key metrics
Risk signals flagging critical and warning-level concerns
Structured JSON for programmatic consumption (legacy + proxy fields)
NOTE: Management (M) is omitted from component scoring — cannot be assessed from public data. Sensitivity (S) uses proxy metrics (NIM trend, securities concentration). This is a public off-site analytical proxy, not an official CAMELS rating.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number of the institution to analyze. | |
| repdte | No | Report Date (YYYYMMDD). Defaults to the most recent quarter likely to have published data. | |
| quarters | No | Number of prior quarters to fetch for trend analysis (default 8). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint=false), the description discloses that this is a public off-site proxy, not an official CAMELS rating, that Management (M) is omitted because it cannot be assessed from public data, and that Sensitivity uses proxy metrics. These caveats are crucial for setting expectations and are not present in annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with bullet points, front-loading the main purpose and then listing outputs and caveats. Every sentence adds value—there is no filler. It could be slightly trimmed, but the length is justified given the analytical complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description appropriately lists the key outputs (composite ratings, risk signals, structured JSON) and clearly states limitations (proxy model, no M component). This is complete for an agent to decide whether to invoke the tool and to interpret the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all three parameters (cert, repdte, quarters) with 100% coverage, so the description adds minimal new meaning. It does mention that quarters is for 'trend analysis' and that repdte defaults to the most recent quarter, which slightly reinforces the schema. This meets the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Produce') and resource ('CAMELS-style analytical assessment') and details the five components (C, A, E, L, S) plus composite rating. This clearly distinguishes it from generic fetch tools and even from other analytic tools like fdic_detect_risk_signals or fdic_show_bank_deep_dive by naming the proprietary proxy model and scoring output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states it applies to a single FDIC-insured institution and specifies the analytical approach (CAMELS-style proxy). It implicitly signals that it is the right choice when a comprehensive, component-wise health assessment is needed, but it does not explicitly list alternatives or conditions when not to use it. Still, the context is strong enough for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_analyze_credit_concentrationAnalyze Credit ConcentrationARead-onlyIdempotent
Analyze loan portfolio composition and credit concentration risk for an FDIC-insured institution. Computes CRE concentration relative to capital (per 2006 interagency guidance), loan-type breakdown, and flags concentration risks.
Output includes:
Loan portfolio composition (CRE, C&I, consumer, residential, agricultural shares)
CRE and construction concentration relative to total capital
Loan-to-asset ratio
Concentration risk signals based on interagency guidance thresholds
Structured JSON for programmatic consumption
NOTE: This is an analytical tool based on public financial data.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number | |
| repdte | No | Report date (YYYYMMDD). Defaults to most recent quarter. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior, so the description only needs to add context beyond that. It adds value by noting that the tool is analytical, relies on public financial data, applies 2006 interagency guidance thresholds, and returns structured JSON plus computed risk signals. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by a well-structured bulleted list of outputs, and closes with a relevant data-source note. Every section earns its place and no unnecessary filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an analysis tool of this complexity, the description covers the purpose, methodology, guidance basis, data source, and output contents. The input schema documents the required certificate and optional report date, and the output schema handles return-value details, so nothing essential is missing for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the schema already documents 'cert' as the FDIC Certificate Number and 'repdte' as the report date with a default. The description does not meaningfully elaborate on either parameter beyond the schema, but it does reinforce the analytical context in which the institution certificate is used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs—'Analyze', 'Computes', 'flags'—and names a precise resource: loan portfolio composition and credit concentration risk for an FDIC-insured institution. It is clearly distinct from sibling analytical tools because none of them is focused specifically on credit concentration, and the listed outputs make its scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes when to use it: when analyzing loan portfolio composition, CRE concentration relative to capital, or concentration risk signals. It does not explicitly name alternatives or state when not to use it, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_analyze_funding_profileAnalyze Funding ProfileARead-onlyIdempotent
Analyze deposit composition, wholesale funding reliance, and funding risk for an FDIC-insured institution.
Output includes:
Deposit composition (core, brokered, foreign deposit shares)
Wholesale funding reliance and FHLB advances relative to assets
Cash ratio for near-term liquidity
Funding risk signals based on supervisory thresholds
Structured JSON for programmatic consumption
NOTE: This is an analytical tool based on public financial data.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number | |
| repdte | No | Report date (YYYYMMDD). Defaults to most recent quarter. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and non-destructive behavior, lowering the burden on the description. The description adds useful context by stating this is an analytical tool based on public financial data and that it produces derived risk signals based on supervisory thresholds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, followed by a scannable bulleted output list and a brief note about data provenance. Every line contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and complete parameter schema, the description covers the essential context: what the tool analyzes, what it returns, and that it uses public data. Minor gaps like explicit threshold caveats or data vintage are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so cert and repdte are already fully documented. The description does not add further parameter-level meaning, but it also does not need to; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Analyze') with a clear resource ('funding profile') and enumerates concrete outputs such as deposit composition, wholesale funding reliance, and FHLB advances. This differentiates it from sibling analysis tools like fdic_analyze_securities_portfolio or fdic_analyze_credit_concentration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when funding composition and funding risk are the focus, but it does not explicitly state when to choose this over sibling analytical tools. No exclusions or alternative routing are provided, so the usage context is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_analyze_securities_portfolioAnalyze Securities PortfolioARead-onlyIdempotent
Analyze securities portfolio size, composition, and concentration risk for an FDIC-insured institution.
Output includes:
Securities relative to total assets and capital
MBS concentration within the securities portfolio
AFS/HTM breakdown (when available)
Risk signals for portfolio concentration and interest rate exposure
Structured JSON for programmatic consumption
NOTE: This is an analytical tool based on public financial data. AFS/HTM breakdown is not currently available from the FDIC API.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number | |
| repdte | No | Report date (YYYYMMDD). Defaults to most recent quarter. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context by stating it is based on public financial data and explicitly noting that AFS/HTM breakdown is not currently available from the FDIC API. This limitation is useful beyond what annotations convey, enhancing transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear lead sentence, a concise bullet list of outputs, and a NOTE for the limitation. It is front-loaded with purpose and avoids fluff. The bullet list is slightly lengthy but each item adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (as indicated by context), the description need not detail return values. It covers the tool's purpose, scope, and a key limitation. It does not mention error cases or prerequisites, but for a read-only analytical tool with clear annotations, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage—both parameters (cert and repdte) have descriptions. The description does not add any parameter-specific meaning beyond what the schema provides, such as format details or dependencies. Baseline 3 is appropriate since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes securities portfolio size, composition, and concentration risk for FDIC-insured institutions. It enumerates specific outputs (relative to assets/capital, MBS concentration, AFS/HTM breakdown, risk signals), distinguishing it from sibling analysis tools like credit concentration or funding profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its specific focus on securities portfolios, but it does not explicitly mention when to use this tool versus alternatives. There is no statement of 'use when...' or 'not for...' or mention of sibling tools. The NOTE about AFS/HTM unavailability provides a minor limitation, but no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_compare_bank_snapshotsCompare Bank Snapshot TrendsARead-onlyIdempotent
Compare FDIC reporting snapshots across a set of institutions and rank the results by growth, profitability, or efficiency changes.
This tool is designed for heavier analytical prompts that would otherwise require many separate MCP calls. It batches institution roster lookup, financial snapshots, optional office-count snapshots, and can also fetch a quarterly time series inside the server.
Good uses:
Identify North Carolina banks with the strongest asset growth from 2021 to 2025
Compare whether deposit growth came with branch expansion or profitability improvement
Rank a specific cert list by ROA, ROE, asset-per-office, or deposit-to-asset changes
Pull a quarterly trend series and highlight inflection points, streaks, and structural shifts
Inputs:
state or certs: choose a geographic roster or provide a direct comparison set
start_repdte, end_repdte: Report Dates (REPDTE) in YYYYMMDD format — must be quarter-end dates (0331, 0630, 0930, 1231)
analysis_mode: snapshot or timeseries
institution_filters: optional extra institution filter when building the roster
active_only: default true
include_demographics: default true, adds office-count comparisons when available
sort_by: ranking field (default: asset_growth). All options: asset_growth, asset_growth_pct, dep_growth, dep_growth_pct, netinc_change, netinc_change_pct, roa_change, roe_change, offices_change, assets_per_office_change, deposits_per_office_change, deposits_to_assets_change
sort_order: ASC or DESC
limit: maximum ranked results to return
Returns concise comparison text plus structured deltas, derived metrics, and insight tags for each institution.
| Name | Required | Description | Default |
|---|---|---|---|
| certs | No | Optional list of FDIC certificate numbers to compare directly. Max 100. | |
| limit | No | Maximum number of ranked comparisons to return. | |
| state | No | State name for the institution roster filter. Example: "North Carolina" | |
| sort_by | No | Comparison field used to rank institutions. Valid options: asset_growth, asset_growth_pct, dep_growth, dep_growth_pct, netinc_change, netinc_change_pct, roa_change, roe_change, offices_change, assets_per_office_change, deposits_per_office_change, deposits_to_assets_change. | asset_growth |
| end_repdte | No | Ending Report Date (REPDTE) in YYYYMMDD format. Must be a quarter-end date: March 31 (0331), June 30 (0630), September 30 (0930), or December 31 (1231). Must be later than start_repdte. Example: 20251231 for Q4 2025. If omitted, defaults to the most recent quarter-end date with published data (~90-day lag). | |
| sort_order | No | Sort direction for the ranked comparisons. | DESC |
| active_only | No | Limit the comparison set to currently active institutions. | |
| start_repdte | No | Starting Report Date (REPDTE) in YYYYMMDD format. Must be a quarter-end date: March 31 (0331), June 30 (0630), September 30 (0930), or December 31 (1231). Example: 20210331 for Q1 2021. If omitted, defaults to the same quarter one year before end_repdte. | |
| analysis_mode | No | Use snapshot for two-point comparison or timeseries for quarterly trend analysis across the date range. | snapshot |
| institution_filters | No | Additional institution-level filter used when building the comparison set. Example: BKCLASS:N or CITY:"Charlotte" | |
| include_demographics | No | Include office-count changes from the demographics dataset when available. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations clearly indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to re-state that this is a safe read operation. The description adds valuable context beyond annotations, such as the ability to batch multiple operations (roster lookup, financial snapshots, office-count snapshots, and time series) internally, the exact date format and quarter-end restriction for repdte, and the fact that it returns 'concise comparison text plus structured deltas, derived metrics, and insight tags.' It does not mention potential performance implications or detailed error scenarios, but given the annotations cover safety, a score of 4 is justified. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately lengthy but well-structured with clear sections: an overview, 'Good uses,' and 'Inputs' bullet list. The most distinguishing feature (batching and ranking) is front-loaded in the first sentence, and the examples are concise and illustrative. Each sentence serves a purpose, though the parameter list repeats some schema details (like sort_by options) that are already in the schema, which adds slight redundancy. Overall, it is efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete given the complexity and available structured data. The output schema exists, so the description does not need to explain return values in detail, but it does mention 'concise comparison text plus structured deltas, derived metrics, and insight tags,' which gives a high-level preview. All parameters are described in the schema, and the description covers the high-level workflow, use cases, and parameter relationships. For an 11-parameter tool with an output schema and annotations, nothing critical for an agent to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all 11 parameters are documented with descriptions, defaults, and enums. The description adds significant value by grouping inputs (e.g., 'state or certs' as roster sources), explaining the date format and quarter-end requirement in more natural language, and listing all sort_by options with their defaults. It also clarifies the meaning of 'include_demographics' and 'analysis_mode' with examples. While the schema already covers the details, the description enhances comprehension by synthesizing the parameters into use-case logic, so a score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('compare' and 'rank') and a resource ('FDIC reporting snapshots'), and explicitly mentions multiple dimensions (growth, profitability, efficiency) and ranking functionality. It names sibling tools it is not, such as fdic_peer_group_analysis and fdic_analyze_bank_health, and differentiates itself by highlighting that it batches multiple operations into a single call. This makes it distinguishable from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit 'Good uses' with four concrete examples, clearly stating when to use this tool (e.g., 'Identify North Carolina banks with the strongest asset growth from 2021 to 2025') and contrasts it implicitly with alternatives by noting it is for 'heavier analytical prompts that would otherwise require many separate MCP calls.' It also gives parameter guidance (e.g., 'state or certs: choose a geographic roster or provide a direct comparison set') and clarifies that it batches operations that sibling search tools do individually. No negative usage cases are listed, but the examples and batching rationale provide very clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_compare_peer_healthCompare Peer Health (CAMELS Rankings)ARead-onlyIdempotent
Compare CAMELS-style health scores across a group of FDIC-insured institutions.
Three usage modes:
Explicit list: provide certs (up to 50) for a specific comparison set
State-wide scan: provide state to compare all active institutions in that state
Asset-based: provide asset_min/asset_max to compare institutions by size
Optionally provide cert to highlight a subject institution's position in the ranking.
Output: structuredContent includes {model, official_status, report_date, institutions, metrics, peer_context, proxy_summary, proxy, deprecations}. Institutions include proxy scores and name_source. When a subject cert is provided, metrics[] is the preferred subject-vs-peer array for new UI bindings and proxy_summary is a flattened subject proxy. peer_context.subject_percentiles is deprecated, remains for backward compatibility, and is targeted for removal only in a future coordinated major release. Auto-peer selection derives asset bands from report-date financials and broadens the cohort if fewer than 10 peers match.
NOTE: Public off-site analytical proxy — not official supervisory ratings.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | Subject institution CERT to highlight in the ranking. Optional. | |
| certs | No | Explicit list of CERTs to compare (max 50). | |
| limit | No | Max institutions to return in the response. | |
| state | No | Two-letter state code to select all active institutions (e.g., "WY"). | |
| repdte | No | Report Date (YYYYMMDD). Defaults to the most recent quarter. | |
| sort_by | No | Sort results by composite or a specific CAMELS component rating. | composite |
| asset_max | No | Maximum total assets ($thousands) for peer selection. | |
| asset_min | No | Minimum total assets ($thousands) for peer selection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| model | Yes | |
| proxy | No | |
| metrics | Yes | |
| sort_by | Yes | |
| report_date | Yes | |
| deprecations | Yes | |
| institutions | Yes | |
| peer_context | Yes | |
| subject_cert | Yes | |
| subject_rank | Yes | |
| proxy_summary | Yes | |
| returned_count | Yes | |
| official_status | Yes | |
| total_institutions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by warning that the output is a 'Public off-site analytical proxy — not official supervisory ratings,' disclosing the deprecation of peer_context.subject_percentiles and its planned future removal, and explaining auto-peer cohort broadening when fewer than 10 peers match. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: purpose in the opening sentence, a clear 'Three usage modes' block, then output/deprecation notes, and finally the proxy caveat. The length is appropriate for the tool's complexity and every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all usage modes, subject highlighting, output shape, deprecated fields, auto-peer behavior, and the non-official nature of the scores. It does not explicitly state that at least one of certs, state, or asset_min/asset_max is required, nor whether the modes are mutually exclusive, which is a notable gap given that the schema marks all parameters optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover all 8 parameters, so the baseline is 3; the description adds a useful mode-based organization tying certs, state, and asset_min/asset_max to distinct comparison strategies. Much of the cert/state wording overlaps the schema, but the mode framing and asset-size clarification add genuine meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Compare CAMELS-style health scores across a group of FDIC-insured institutions,' and the three usage modes plus optional subject-cert add further scope. It does not explicitly name or exclude sibling tools like fdic_peer_group_analysis or fdic_analyze_bank_health, so differentiation is left partly to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly defines when to use each parameter group: explicit cert list, state-wide scan, and asset-based selection, and explains the optional cert for highlighting a subject. It does not state when to prefer this tool over sibling comparison/analysis tools, nor does it say that at least one mode must be supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_detect_risk_signalsDetect Risk Signals (Early Warning)ARead-onlyIdempotent
Scan FDIC-insured institutions for early warning risk signals using the public_camels_proxy_v1 analytical engine.
Standardized signal codes with severity levels:
Critical: capital_undercapitalized (PCA breach), earnings_loss (ROA < 0), reserve_coverage_low (< 50%)
Warning: capital_buffer_erosion, credit_deterioration, credit_deterioration_trending, earnings_pressure, margin_compression, funding_stress, funding_ltd_stretched, rate_risk_proxy_elevated, wholesale_funding_elevated
Info: merger_distorted_trend, stale_reporting_period
Three scan modes:
State-wide: provide state to scan all active institutions
Explicit list: provide certs (up to 50)
Asset-based: provide asset_min/asset_max
Output: Per-institution risk signals ranked by severity count. The proxy engine drives signal generation internally; the output is signal-shaped, not assessment-shaped.
NOTE: Public off-site analytical proxy — not official supervisory ratings.
| Name | Required | Description | Default |
|---|---|---|---|
| certs | No | Specific CERTs to scan (max 50). | |
| limit | No | Max flagged institutions to return. | |
| state | No | Scan all active institutions in this state. | |
| repdte | No | Report Date (YYYYMMDD). Defaults to the most recent quarter. | |
| quarters | No | Prior quarters to fetch for trend analysis (default 4). | |
| asset_max | No | Maximum total assets ($thousands) filter. | |
| asset_min | No | Minimum total assets ($thousands) filter. | |
| min_severity | No | Minimum severity level to include in results (default: warning). | warning |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. The description adds valuable context about the output shape ('signal-shaped, not assessment-shaped') and the proxy nature ('Public off-site analytical proxy — not official supervisory ratings'), which informs the agent about the tool's limitations beyond what annotations capture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with lists and clear sections. It front-loads the purpose and then details signal codes and modes. The length is justified by the complexity of the tool, and each section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (as indicated), the description does not need to explain return values. It covers the tool's purpose, modes, signal codes, severity levels, and limitations. It is complete for an agent to call the tool correctly, though it could potentially add more explicit exclusions relative to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already described. The description adds meaningful usage patterns by mapping modes to parameters (e.g., state for state-wide, certs for explicit list, asset_min/asset_max for asset-based) and clarifies the min_severity enum levels. This goes beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: scanning FDIC-insured institutions for early warning risk signals using a specific engine. It differentiates from siblings by focusing on 'risk signals' and mentions the proxy engine, which distinguishes it from other analysis tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on how to use the three scan modes (state-wide, explicit list, asset-based) and which parameters to provide for each. It also implies a distinction from full assessments via 'signal-shaped, not assessment-shaped', though it does not name specific sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_fetchFetch FDIC BankFind ResultARead-onlyIdempotent
Use this when the model needs the full citation text for a result returned by search. Pass the search result id (e.g. 'institution:3511', 'failure:1234', 'branch:', 'schema:institutions').
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Retrieval item id, such as institution:<CERT>, failure:<CERT>, branch:<UNINUM>, or schema:<endpoint>. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, covering safety. The description adds that it returns the full citation text and specifies the id format, giving useful behavioral context beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and provides concrete examples. It is concise, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description covers when to use it, what it does, and the input format. It adequately sets expectations without missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already describes the 'id' parameter with examples. The description repeats these examples, adding minimal value beyond the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the full citation text for a search result, with specific examples of id formats (e.g., 'institution:3511'). It distinguishes itself from the search sibling tools by focusing on retrieval of existing results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when the model needs the full citation text for a result returned by search', providing a clear trigger condition. It doesn't mention alternatives or exclusions, but the context implies it complements the search tools rather than replacing them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_franchise_footprintInstitution Franchise FootprintARead-onlyIdempotent
Analyze the geographic franchise footprint of an FDIC-insured institution using Summary of Deposits (SOD) data.
Shows how an institution's branches and deposits are distributed across metropolitan statistical areas (MSAs), providing a market-by-market breakdown of branch count, deposit totals, and percentage of the institution's total deposits.
Output includes:
Total branch count, deposits, and market count
Market-by-market breakdown sorted by deposits
Structured JSON for programmatic consumption
Branches outside MSAs are grouped under "Non-MSA / Rural".
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number | |
| year | No | SOD report year. Defaults to most recent. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful behavioral details beyond annotations: results are sorted by deposits, totals are included, and branches outside MSAs are grouped under 'Non-MSA / Rural'. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: a clear lead sentence, focused output bullets, and a useful non-MSA caveat. The bullet about 'Structured JSON for programmatic consumption' is slightly redundant given the output schema, but the overall length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, strong annotations, and only two parameters, the description is nearly complete for invocation. It covers scope, grouping behavior, and outputs. The main gap—explicit alternative routing—is already penalized under usage guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, including the meaning of cert and the year default, so the baseline is 3. The description adds contextual framing ('FDIC-insured institution', SOD data) but no new parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Analyze the geographic franchise footprint') and a named data source (Summary of Deposits). It defines a unique deliverable—market-by-market branch and deposit breakdown across MSAs—that distinguishes it from sibling financial-analysis tools like fdic_market_share_analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: given an FDIC-insured institution, analyze its footprint. However, there is no explicit when-to-use or when-not-to-use guidance, and it does not name alternatives or conditions that would route an agent to a different sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_get_institutionGet Institution by Certificate NumberARead-onlyIdempotent
Use this when the user knows an exact FDIC Certificate Number and needs one institution profile. To discover a CERT first, call fdic_search_institutions or fdic_search.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number — the unique identifier for an institution | |
| fields | No | Comma-separated list of fields to return |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it returns a single institution profile, which is a useful behavioral trait beyond annotations, but it does not detail error handling or response specifics. Given annotations cover the main behaviors, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundancy. The primary use case is stated first, and the alternative routing is added efficiently. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-record getter, the description covers when to use it, how to discover the needed identifier, and the expected result type (one profile). With an output schema present and annotations covering safety, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (cert and fields), so the schema already provides full meaning. The description does not add parameter-specific details beyond what the schema states, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieve one institution profile when the user knows an exact FDIC Certificate Number. It names the resource (institution profile) and the key identifier (cert), and distinguishes it from search tools by directing users to discovery tools first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool (when the user knows an exact CERT) and when not to (to discover a CERT first, call fdic_search_institutions or fdic_search). This provides clear routing and alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_get_institution_failureGet Failure Details by Certificate NumberARead-onlyIdempotent
Use this when the user knows the CERT of a failed institution and needs its specific failure record. Returns failure details (date, resolution type, estimated DIF cost in the COST field, acquirer); responds with found: false if the institution did not fail.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number — the unique identifier for an institution | |
| fields | No | Comma-separated list of fields to return |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral details beyond those annotations: the specific returned failure fields (date, resolution type, DIF cost in COST field, acquirer) and the `found: false` response for non-failed institutions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler. The usage trigger is front-loaded, followed by a concise list of returned data and the not-found behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-ID lookup with a rich output schema and safety annotations, the description covers the essential usage trigger, key return fields, and no-result behavior. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well documented. The description adds modest semantic context by linking CERT to a failed institution and noting the COST output field, but it doesn't add meaning beyond the schema for the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('get'), a specific resource ('failure record'), and the key required identifier (CERT). It clearly distinguishes this from general institution or search tools by limiting scope to failed institutions' specific failure records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: when the user knows the CERT and needs a specific failure record. It does not explicitly name an alternative like 'use fdic_search_failures when the CERT is unknown,' so it falls just short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_holding_company_profileHolding Company ProfileBRead-onlyIdempotent
Profile a bank holding company by grouping its FDIC-insured subsidiaries and aggregating financial metrics. Look up by holding company name or by any subsidiary's CERT number.
Output includes:
Consolidated summary with total assets, deposits, and asset-weighted ROA/equity ratio
List of all FDIC-insured subsidiaries with individual metrics
Structured JSON for programmatic consumption
NOTE: This is an analytical tool based on public financial data.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | CERT of any subsidiary — looks up its holding company, then profiles the entire HC. | |
| hc_name | No | Holding company name (e.g., "JPMORGAN CHASE & CO"). Uses NAMEHCR field. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior; the description adds that this is an analytical tool based on public financial data and that it produces consolidated subsidiary metrics. It is consistent and mildly useful, but it does not disclose edge cases such as no-match or missing-parameter behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the output bullets make the structure readable. The 'Structured JSON' bullet and the public-data note add only modest value, so it is concise enough but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return shape and the annotations cover safety, so the description does not need to repeat those. It lacks an explicit statement that at least one lookup parameter should be supplied and what happens if both or neither are provided, which is a real invocation gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already carries the cert and hc_name descriptions. The description restates the two lookup modes and the NAMEHCR field detail already present in the schema, adding no new semantic meaning beyond emphasizing the lookup paths.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: profile a bank holding company by grouping its FDIC-insured subsidiaries and aggregating financial metrics. This clearly distinguishes it from institution-level FDIC tools, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes how to look up a holding company (by hc_name or by subsidiary CERT) and what output to expect, so the basic use context is evident. It does not state when to prefer this over sibling tools like fdic_get_institution or fdic_peer_group_analysis, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_peer_group_analysisPeer Group AnalysisARead-onlyIdempotent
Build a peer group for an FDIC-insured institution and rank it against peers on financial and efficiency metrics at a single report date.
Three usage modes:
Subject-driven: provide cert and repdte — auto-derives peer criteria from the subject's asset size and charter class
Explicit criteria: provide repdte plus asset_min/asset_max, charter_classes, state, or raw_filter
Subject with overrides: provide cert plus explicit criteria to override auto-derived defaults
Metrics ranked (fixed order):
Total Assets, Total Deposits, ROA, ROE, Net Interest Margin
Equity Capital Ratio, Efficiency Ratio, Loan-to-Deposit Ratio
Deposits-to-Assets Ratio, Non-Interest Income Share
Rankings use competition rank (1, 2, 2, 4). Rank, denominator, and percentile all use the same comparison set: matched peers plus the subject institution.
Output includes:
Subject rankings and percentiles (when cert provided)
Peer group medians
Peer list with CERTs (pass to fdic_compare_bank_snapshots for trend analysis)
Metric definitions with directionality metadata
Override precedence: cert derives defaults, then explicit params override them.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | Subject institution CERT number. When provided, auto-derives peer criteria and ranks this bank against peers. | |
| limit | No | Max peer records returned in the response. All matched peers are used for ranking regardless of this limit. | |
| state | No | Two-letter state code (e.g., "NC", "TX"). | |
| repdte | No | Report Date (REPDTE) in YYYYMMDD format. FDIC data is published quarterly on: March 31, June 30, September 30, and December 31. Example: 20231231 for Q4 2023. If omitted, defaults to the most recent quarter-end date likely to have published data (~90-day lag). | |
| asset_max | No | Maximum total assets ($thousands) for peer selection. Defaults to 200% of subject's report-date assets when cert is provided. | |
| asset_min | No | Minimum total assets ($thousands) for peer selection. Defaults to 50% of subject's report-date assets when cert is provided. | |
| raw_filter | No | Advanced: raw ElasticSearch query string appended to peer selection criteria with AND. | |
| active_only | No | Limit to institutions where ACTIVE:1 (currently operating, FDIC-insured). | |
| extra_fields | No | Additional FDIC field names to include as raw values in the response. Does not affect peer selection. | |
| charter_classes | No | Charter class codes to include (e.g., ["N", "SM"]). Defaults to the subject's charter class when cert is provided. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, and the description does not contradict any of these. Beyond that, it adds rich behavioral context: ranking uses competition rank (1, 2, 2, 4), the comparison set is 'matched peers plus the subject institution,' and the limit parameter affects only returned peer count while all matched peers are used for ranking. This transparency exceeds what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but meticulously structured with clear sections: purpose, usage modes, metrics, ranking methodology, output contents, and override precedence. Every sentence contributes new information—there is no fluff. It is front-loaded with the primary purpose, and technical details are logically organized for easy scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 10 parameters, three usage modes, and a ranking algorithm, the description is exceptionally complete. It covers all parameter defaults, the ranking method, the output schema (subject rankings, peer medians, peer list, metric definitions), and even explains the relationship to a sibling tool. An agent has all the information needed to invoke the tool correctly in any mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3, but the description adds significant value by explaining parameter interdependencies. It specifies that asset_min/asset_max default to 50%/200% of the subject's report-date assets when cert is provided, that charter_classes defaults to the subject's charter class, and that the three usage modes map to different parameter combinations. This goes far beyond the schema's isolated field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific statement: 'Build a peer group for an FDIC-insured institution and rank it against peers on financial and efficiency metrics at a single report date.' It immediately distinguishes itself from sibling tools like fdic_compare_bank_snapshots and fdic_analyze_bank_health by focusing on peer group construction and ranking. The purpose is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly enumerates three usage modes (subject-driven, explicit criteria, subject with overrides) and explains when each is appropriate. It also provides routing guidance by stating that the peer list with CERTs can be 'pass[ed] to fdic_compare_bank_snapshots for trend analysis,' which directly addresses alternatives. The override precedence is clearly documented.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_qbp_lite_dataGenerate QBP Lite Data BundleARead-onlyIdempotent
Build chart-ready data for a concise QBP Lite report from reproducible public BankFind quarterly financials. Includes executive snapshot metrics, trend series, community-bank comparison data, source notes, and explicit exclusions for non-public or non-BankFind QBP items.
| Name | Required | Description | Default |
|---|---|---|---|
| repdte | No | Quarter-end Report Date (REPDTE) in YYYYMMDD format. If omitted, the tool searches backward from the latest likely published quarter until data is found. | |
| trend_quarters | No | Number of quarterly observations to return for trend charts, including the current quarter. Default 20 quarters. | |
| include_community_banks | No | Include a compact community-bank-vs-industry comparison using the public community-bank flag. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, and idempotent behavior, so the description need not repeat safety. It adds meaningful behavioral context: it builds chart-ready data, includes explicit exclusions, and implies a specific structure. It could disclose more about how it aggregates or formats data, but given strong annotations, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that lists key outputs and exclusions without padding. Every element serves a purpose, and the structure leads with the primary action and outcome.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is an output schema (though not shown), the description need not detail return values. It covers the purpose, key inclusions, and exclusions, and the parameter info is in the schema. A minor gap is lack of examples or notes on data lag, but overall it is complete for a report-builder tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents repdte, trend_quarters, and include_community_banks. The description adds context, like the default trend_quarters and the community-bank flag use, but does not add new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds chart-ready data for a QBP Lite report from public BankFind quarterly financials. It enumerates the output components (executive snapshot metrics, trend series, community-bank comparison, source notes) and explicitly excludes non-public or non-BankFind items. This distinguishes it from sibling tools that handle raw searches or deep dives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it is for generating a concise QBP Lite report from public data, and the exclusion of non-public items hints it is not for proprietary metrics. However, it does not explicitly contrast with sibling tools like fdic_analyze_bank_health or fdic_ubpr_analysis, nor does it state when to use this vs a raw fdic_fetch. The context is clear enough for a similar-use case, but lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_regional_contextRegional Economic ContextARead-onlyIdempotent
Overlay macro/regional economic data on a bank's geographic context. Uses FRED (Federal Reserve Economic Data) for state unemployment, national unemployment, and federal funds rate. Provides trend analysis and narrative context for bank performance assessment. Gracefully degrades if FRED API is unavailable.
Output includes:
State and national unemployment rates with trend analysis
Federal funds rate and rate environment classification
Narrative assessment of macro conditions for bank performance
Structured JSON for programmatic consumption
NOTE: Requires FRED_API_KEY environment variable for reliable data access. Degrades gracefully without it.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | FDIC Certificate Number — auto-detects state from institution record. | |
| state | No | Two-letter state abbreviation (e.g., TX). Alternative to cert-based lookup. | |
| repdte | No | Reference report date (YYYYMMDD). FRED data fetched for 2 years before this date. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds valuable behavioral context beyond annotations: it depends on the FRED API, requires FRED_API_KEY for reliable data, degrades gracefully without it, and returns narrative plus structured JSON. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence, bulleted output list, and a separate note about environment requirements. Minor redundancy exists: 'gracefully degrades' appears twice, once in the first paragraph and again in the NOTE, but overall it is organized and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and safety annotations covering side-effect behavior, the description covers the main outputs, external dependency, and degradation behavior. A minor gap is that it does not explain what happens when neither cert nor state is provided, or which input should be preferred for a bank-level look-up versus a state-level analysis.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents cert, state, and repdte thoroughly, including the auto-detection from cert and the 2-year lookback. The description does not add parameter-specific meaning beyond what the schema provides; it mostly describes output content rather than parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Overlay macro/regional economic data') and a clear resource (FRED data for unemployment and federal funds rate). It is clear what the tool produces, though it does not explicitly differentiate itself from sibling analytical tools like fdic_peer_group_analysis or fdic_market_share_analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through 'for bank performance assessment' and the focus on geographic/economic context, but there is no explicit when-to-use/when-not-to-use guidance or reference to alternatives. An agent must infer that this tool is for macro overlay rather than institution-level financial analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_searchSearch FDIC BankFindARead-onlyIdempotent
Use this when the model needs citation-friendly FDIC BankFind search results for institutions, failed banks, branches, or schema documentation. Returns up to 8 results with id, title, and source URL.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language search query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive Introducing the 8-result cap and returned fields is useful, but the description does not add caveats such as external data variability, pagination limits, or source reliability beyond what annotations and the output schema already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the when-to-use guidance, then gives the result shape, making it easy to scan and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, rich annotations, and presence of an output schema, the description is almost complete for correct invocation. The only notable gap is that it does not explain how fdic_search relates to the many specialized sibling search tools, which could lead to suboptimal tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, query, and the schema already describes it as a natural-language search query with 100% coverage. The description adds no additional meaning that the schema does not already provide, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches FDIC BankFind for specified categories (institutions, failed banks, branches, or schema documentation) and emphasizes citation-friendly results with id, title, and source URL. This distinguishes it from data-heavy siblings like fdic_search_financials, though it does not explicitly contrast it with specialized searches such as fdic_search_institutions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit trigger: use this when citation-friendly BankFind search results are needed. It does not, however, list exclusions or recommend alternatives among the many specialized sibling tools, so it stops short of top marks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_search_demographicsSearch Institution Demographics DataARead-onlyIdempotent
Use this when the user wants quarterly demographic and market-structure attributes (office counts, metro classification, county/territory codes, geographic reference data) for FDIC-insured institutions. Filter by CERT and/or REPDTE. See fdic://schemas/demographics for the full field catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | Filter by FDIC Certificate Number | |
| limit | No | Maximum number of records to return (1-10000, default: 20) | |
| fields | No | Comma-separated list of FDIC field names to return. Leave empty to return all fields. Field names are ALL_CAPS (e.g., NAME, CERT, ASSET, DEP, STALP). Example: NAME,CERT,ASSET,DEP,STALP | |
| offset | No | Number of records to skip for pagination (default: 0) | |
| repdte | No | Filter by Report Date (REPDTE) in YYYYMMDD format (quarter-end: 0331, 0630, 0930, 1231). | |
| filters | No | FDIC API filter using ElasticSearch query string syntax. Combine conditions with AND/OR, use quotes for multi-word values, and [min TO max] for ranges (* = unbounded). Common fields: NAME (institution name), STNAME (state name), STALP (two-letter state code), CERT (certificate number), ASSET (total assets in $thousands), ACTIVE (1=active, 0=inactive). Examples: STNAME:"California", ACTIVE:1 AND ASSET:[1000000 TO *], NAME:"Chase" | |
| sort_by | No | Field name to sort results by. Example: ASSET, NAME, FAILDATE | |
| sort_order | No | Sort direction: ASC (ascending) or DESC (descending) | ASC |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| has_more | Yes | |
| truncated | No | |
| next_offset | No | |
| demographics | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, non-destructive, and open-world. The description adds that the data is quarterly demographics/market-structure, which is useful, but it does not disclose pagination behavior, result limits, or other operational traits; with annotations covering the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: the when-to-use trigger, filter guidance, and schema pointer are all front-loaded and purposeful. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with a full parameter schema and output schema, the description gives the domain context and filter entry points needed to call it correctly. It could be more explicit about how this differs from location-adjacent siblings, but overall nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters are already documented in the input schema. The description only reinforces 'Filter by CERT and/or REPDTE' and points to a field catalog, adding no need for compensation beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific purpose—'quarterly demographic and market-structure attributes'—with concrete examples (office counts, metro classification, county/territory codes) and the target resource (FDIC-insured institutions). This makes it easy to distinguish from siblings like fdic_search_financials or fdic_search_failures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with an explicit 'Use this when' trigger and tells the agent which filters to use (CERT and/or REPDTE). It does not name sibling alternatives or state when not to use it, so it misses the 'when-not/alternatives' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_search_failuresSearch Bank FailuresARead-onlyIdempotent
Use this when the user wants details on failed FDIC-insured institutions filtered by name, state, date range, resolution type, estimated loss, or DIF cost. The failures field for estimated loss (DIF cost) is COST; for highest-cost failures use sort_by: COST and sort_order: DESC. Do not use ESTIMATED_LOSS. Returns failure records with pagination; see fdic://schemas/failures for the full field catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (1-10000, default: 20) | |
| fields | No | Comma-separated list of FDIC field names to return. Leave empty to return all fields. Field names are ALL_CAPS (e.g., NAME, CERT, ASSET, DEP, STALP). Example: NAME,CERT,ASSET,DEP,STALP | |
| offset | No | Number of records to skip for pagination (default: 0) | |
| filters | No | FDIC API filter using ElasticSearch query string syntax. Combine conditions with AND/OR, use quotes for multi-word values, and [min TO max] for ranges (* = unbounded). Common fields: NAME (institution name), STNAME (state name), STALP (two-letter state code), CERT (certificate number), ASSET (total assets in $thousands), ACTIVE (1=active, 0=inactive). Examples: STNAME:"California", ACTIVE:1 AND ASSET:[1000000 TO *], NAME:"Chase" | |
| sort_by | No | Field name to sort results by. Example: ASSET, NAME, FAILDATE | |
| sort_order | No | Sort direction: ASC (ascending) or DESC (descending) | ASC |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| failures | Yes | |
| has_more | Yes | |
| truncated | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior; the description adds value beyond those by disclosing pagination and by flagging the COST-vs-ESTIMATED_LOSS naming trap. This is meaningful behavioral context the annotations and schema do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, all informative and front-loaded with the use case. The field caveat is compact, the 'do not use ESTIMATED_LOSS' warning is explicit, and the closing schema pointer avoids unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema parameter coverage, annotations, and an output schema, the description fills the remaining gaps: pagination behavior, the loss-field naming caveat, and a pointer to the full field catalog. No critical information needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description earns a 4 by adding a critical field-alias clarification (COST for DIF cost) and by explaining how to request highest-cost failures with sort_by and sort_order, which the schema does not fully convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (search) on a specific resource (failed FDIC-insured institutions) and enumerates the main filter dimensions. The word 'failed' distinguishes it from sibling tools like fdic_search_institutions without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit 'Use this when...' for the target case. It does not mention when-not-to-use or name alternative tools, but the usage context is clear enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_search_financialsSearch Institution Financial DataARead-onlyIdempotent
Use this when the user wants quarterly Call Report data (balance sheet, income, capital, performance ratios) for FDIC-insured institutions. Filter by CERT and/or REPDTE plus optional ElasticSearch filters. See fdic://schemas/financials for the full 1,100+ field catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | Filter by FDIC Certificate Number to get financials for a specific institution | |
| limit | No | Maximum number of records to return (1-10000, default: 20) | |
| fields | No | Comma-separated list of FDIC field names to return. Leave empty to return all fields. Field names are ALL_CAPS (e.g., NAME, CERT, ASSET, DEP, STALP). Example: NAME,CERT,ASSET,DEP,STALP | |
| offset | No | Number of records to skip for pagination (default: 0) | |
| repdte | No | Filter by Report Date (REPDTE) in YYYYMMDD format (quarter-end: 0331, 0630, 0930, 1231). If omitted, returns all available dates (sorted most recent first). | |
| filters | No | FDIC API filter using ElasticSearch query string syntax. Combine conditions with AND/OR, use quotes for multi-word values, and [min TO max] for ranges (* = unbounded). Common fields: NAME (institution name), STNAME (state name), STALP (two-letter state code), CERT (certificate number), ASSET (total assets in $thousands), ACTIVE (1=active, 0=inactive). Examples: STNAME:"California", ACTIVE:1 AND ASSET:[1000000 TO *], NAME:"Chase" | |
| sort_by | No | Field name to sort results by. Example: ASSET, NAME, FAILDATE | |
| sort_order | No | Sort direction: DESC (descending, default for most recent first) or ASC (ascending) | DESC |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| has_more | Yes | |
| truncated | No | |
| financials | Yes | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds context about the data type and points to the field catalog (fdic://schemas/financials), which is useful. It does not add details about rate limits, pagination behavior beyond schema, or response format, but since annotations carry the main behavioral burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the purpose (quarterly Call Report data), and the second gives filtering guidance and a pointer to the full field catalog. Every word earns its place; it is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (so return values are defined) and the input schema covers all 8 parameters with descriptions, the description adds enough context: the data type, primary filters, and a reference to the extensive field catalog. It does not mention default sorting or pagination, but those are covered in the parameter descriptions. The tool is relatively complex, yet the description, combined with schema, provides adequate guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning every parameter has a description in the input schema. The tool description mentions CERT and REPDTE as filters, but this merely restates what the schema already documents. It does not add syntax details, relationships between parameters, or compensate for any gaps because there are none. Thus baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool provides quarterly Call Report data (balance sheet, income, capital, performance ratios) for FDIC-insured institutions, which clearly distinguishes it from sibling tools like fdic_search_summary (summary data), fdic_search_demographics (demographics), and fdic_search_institutions (institution info). It also names the primary filters (CERT and REPDTE), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description begins with 'Use this when the user wants quarterly Call Report data', which gives clear context for when to invoke it. However, it does not explicitly mention alternatives or exclusions, even though many sibling tools exist. It could say 'for summary data use fdic_search_summary' etc., but the absence of explicit when-not guidance keeps it at a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_search_historySearch Institution History / Structure ChangesARead-onlyIdempotent
Use this when the user wants structural-change events (mergers, acquisitions, name changes, charter conversions, failures) for FDIC-insured institutions, filtered by CERT, type, change code, date range, or state. See fdic://schemas/history for the full field catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | Filter by FDIC Certificate Number to get history for a specific institution | |
| limit | No | Maximum number of records to return (1-10000, default: 20) | |
| fields | No | Comma-separated list of FDIC field names to return. Leave empty to return all fields. Field names are ALL_CAPS (e.g., NAME, CERT, ASSET, DEP, STALP). Example: NAME,CERT,ASSET,DEP,STALP | |
| offset | No | Number of records to skip for pagination (default: 0) | |
| filters | No | FDIC API filter using ElasticSearch query string syntax. Combine conditions with AND/OR, use quotes for multi-word values, and [min TO max] for ranges (* = unbounded). Common fields: NAME (institution name), STNAME (state name), STALP (two-letter state code), CERT (certificate number), ASSET (total assets in $thousands), ACTIVE (1=active, 0=inactive). Examples: STNAME:"California", ACTIVE:1 AND ASSET:[1000000 TO *], NAME:"Chase" | |
| sort_by | No | Field name to sort results by. Example: ASSET, NAME, FAILDATE | |
| sort_order | No | Sort direction: ASC (ascending) or DESC (descending) | ASC |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| events | Yes | |
| offset | Yes | |
| has_more | Yes | |
| truncated | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering safety. The description adds domain context (event types) but no behavioral details like pagination behavior, rate limits, or result format. Since annotations cover safety, the description's additional value is limited, though it does mention filtering options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states when to use and what it does; the second points to a schema reference. No redundancy, front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description covers purpose and usage adequately. It references a full field catalog, which is helpful. It does not explain pagination or error handling, but those are in schema. Missing a note that this is historical data only, but that is implied by 'history'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented. The description adds a high-level summary of filterable dimensions but does not explain parameter syntax or semantics beyond what the schema already provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves structural-change events (mergers, acquisitions, name changes, etc.) for FDIC-insured institutions, which distinguishes it from sibling tools like fdic_search_institutions (general search) or fdic_search_financials (financial data). The verb 'search' and resource 'history' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'Use this when the user wants structural-change events' and lists filtering dimensions (CERT, type, change code, date range, state). While it does not mention alternatives or exclusions, the purpose is clear enough to route correctly. A slight gap: no direct statement about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_search_institutionsSearch FDIC InstitutionsARead-onlyIdempotent
Use this when the user needs FDIC-insured institution search results by name, state, CERT, asset size, charter class, or regulatory status. Returns institution profile rows with pagination; use fdic://schemas/institutions for the full field catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of records to return (1-10000, default: 20) | |
| fields | No | Comma-separated list of FDIC field names to return. Leave empty to return all fields. Field names are ALL_CAPS (e.g., NAME, CERT, ASSET, DEP, STALP). Example: NAME,CERT,ASSET,DEP,STALP | |
| offset | No | Number of records to skip for pagination (default: 0) | |
| filters | No | FDIC API filter using ElasticSearch query string syntax. Combine conditions with AND/OR, use quotes for multi-word values, and [min TO max] for ranges (* = unbounded). Common fields: NAME (institution name), STNAME (state name), STALP (two-letter state code), CERT (certificate number), ASSET (total assets in $thousands), ACTIVE (1=active, 0=inactive). Examples: STNAME:"California", ACTIVE:1 AND ASSET:[1000000 TO *], NAME:"Chase" | |
| sort_by | No | Field name to sort results by. Example: ASSET, NAME, FAILDATE | |
| sort_order | No | Sort direction: ASC (ascending) or DESC (descending) | ASC |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| has_more | Yes | |
| truncated | No | |
| next_offset | No | |
| institutions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, openWorld, idempotent, non-destructive). The description adds useful behavioral context: returns 'institution profile rows with pagination' and directs to the field catalog. It doesn't disclose response envelope details or any subtle API behaviors, but the annotations lower the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The primary use case is front-loaded, and the pointer to the field catalog replaces a long list of fields. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, rich annotations, and 100% parameter schema coverage, the description only needs to add the searchable dimension and pagination behavior—both are present. Nothing essential is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all 6 parameters. The description's mentions of search dimensions (name, state, CERT, asset size) largely repeat the schema's examples (NAME, STNAME, CERT, ASSET) without adding new meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource ('FDIC-insured institution search results') and enumerates the search dimensions (name, state, CERT, asset size, charter class, regulatory status). It clearly distinguishes this from sibling search tools focused on financials, failures, or locations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear when-to-use condition ('Use this when the user needs FDIC-insured institution search results...'). However, given the large sibling family (fdic_search_financials, fdic_search_failures, fdic_search_locations), it doesn't explicitly name alternatives or exclusion conditions, leaving some routing ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_search_locationsSearch Institution Locations / BranchesARead-onlyIdempotent
Use this when the user wants branch/office locations for FDIC-insured institutions, filtered by CERT, state, city, county, metro area, or branch type. Returns address, coordinates, branch number, and service-type rows; see fdic://schemas/locations for the full field catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | Filter by FDIC Certificate Number to get all branches of a specific institution | |
| limit | No | Maximum number of records to return (1-10000, default: 20) | |
| fields | No | Comma-separated list of FDIC field names to return. Leave empty to return all fields. Field names are ALL_CAPS (e.g., NAME, CERT, ASSET, DEP, STALP). Example: NAME,CERT,ASSET,DEP,STALP | |
| offset | No | Number of records to skip for pagination (default: 0) | |
| filters | No | FDIC API filter using ElasticSearch query string syntax. Combine conditions with AND/OR, use quotes for multi-word values, and [min TO max] for ranges (* = unbounded). Common fields: NAME (institution name), STNAME (state name), STALP (two-letter state code), CERT (certificate number), ASSET (total assets in $thousands), ACTIVE (1=active, 0=inactive). Examples: STNAME:"California", ACTIVE:1 AND ASSET:[1000000 TO *], NAME:"Chase" | |
| sort_by | No | Field name to sort results by. Example: ASSET, NAME, FAILDATE | |
| sort_order | No | Sort direction: ASC (ascending) or DESC (descending) | ASC |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| has_more | Yes | |
| locations | Yes | |
| truncated | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations by naming the returned content categories: address, coordinates, branch number, and service-type rows, plus a pointer to the full field catalog.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the key usage condition, and contains no filler. Every clause either refines the tool's scope, describes the output, or points to authoritative schema documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with detailed input schemas, rich annotations, and an output schema, the description is complete. It covers when to use the tool, what it returns, and how to get full field details, so an agent has enough to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the bar for adding value is moderate. The description still adds meaning by naming additional filter dimensions such as city, county, metro area, and branch type that are not explicitly listed in the filters parameter examples, helping the agent understand the breadth of the filters string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for branch/office locations of FDIC-insured institutions and lists filter dimensions. It is specific about the resource type, but it does not explicitly distinguish itself from sibling tools like fdic_search_sod or fdic_search_institutions, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening 'Use this when the user wants branch/office locations...' gives clear, actionable guidance for when to select this tool. It does not mention alternatives or when-not-to-use scenarios, but the when condition is explicit and direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_search_sodSearch Summary of Deposits (SOD)ARead-onlyIdempotent
Use this when the user wants annual branch-level deposit data (SOD, as of June 30 each year) — branch deposits, MSAs, geographic distribution. Filter by CERT and/or year. See fdic://schemas/sod for the full field catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | Filter by FDIC Certificate Number | |
| year | No | Filter by specific year (1994-present). SOD data is annual. | |
| limit | No | Maximum number of records to return (1-10000, default: 20) | |
| fields | No | Comma-separated list of FDIC field names to return. Leave empty to return all fields. Field names are ALL_CAPS (e.g., NAME, CERT, ASSET, DEP, STALP). Example: NAME,CERT,ASSET,DEP,STALP | |
| offset | No | Number of records to skip for pagination (default: 0) | |
| filters | No | FDIC API filter using ElasticSearch query string syntax. Combine conditions with AND/OR, use quotes for multi-word values, and [min TO max] for ranges (* = unbounded). Common fields: NAME (institution name), STNAME (state name), STALP (two-letter state code), CERT (certificate number), ASSET (total assets in $thousands), ACTIVE (1=active, 0=inactive). Examples: STNAME:"California", ACTIVE:1 AND ASSET:[1000000 TO *], NAME:"Chase" | |
| sort_by | No | Field name to sort results by. Example: ASSET, NAME, FAILDATE | |
| sort_order | No | Sort direction: ASC (ascending) or DESC (descending) | ASC |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| deposits | Yes | |
| has_more | Yes | |
| truncated | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, so the bar for additional disclosure is lower. The description adds the annual June 30 as-of context but does not disclose rate limits, pagination, or output behavior beyond what schema/annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences with no filler. The use-case trigger and core data characteristics lead, followed by a useful pointer to the full field catalog.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 8-parameter tool, the combination of rich schema descriptions, annotations, output schema, and the field-catalog pointer covers what an agent needs. The description additionally orients the agent to data vintage and branch-level granularity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% and every parameter has a meaningful description, so the baseline is 3. The description's 'Filter by CERT and/or year' mostly restates schema information, though it points to fdic://schemas/sod for the field catalog.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear use-case trigger ('Use this when the user wants...') and identifies the exact resource: annual branch-level Summary of Deposits data as of June 30. It further specifies content (branch deposits, MSAs, geographic distribution), which distinguishes it from FDIC financials, institutions, and failures siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states an explicit condition for when to use the tool (SOD/branch-deposit requests) and how to narrow it (CERT and/or year). It does not explicitly list when-not-to-use or point to alternative sibling tools, but the trigger is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_search_summarySearch Annual Financial Summary DataARead-onlyIdempotent
Use this when the user wants annual financial-summary snapshots (assets, deposits, ROA, ROE, offices) for FDIC-insured institutions, filtered by CERT and/or year. See fdic://schemas/summary for the full field catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | No | Filter by FDIC Certificate Number | |
| year | No | Filter by specific year (e.g., 2022) | |
| limit | No | Maximum number of records to return (1-10000, default: 20) | |
| fields | No | Comma-separated list of FDIC field names to return. Leave empty to return all fields. Field names are ALL_CAPS (e.g., NAME, CERT, ASSET, DEP, STALP). Example: NAME,CERT,ASSET,DEP,STALP | |
| offset | No | Number of records to skip for pagination (default: 0) | |
| filters | No | FDIC API filter using ElasticSearch query string syntax. Combine conditions with AND/OR, use quotes for multi-word values, and [min TO max] for ranges (* = unbounded). Common fields: NAME (institution name), STNAME (state name), STALP (two-letter state code), CERT (certificate number), ASSET (total assets in $thousands), ACTIVE (1=active, 0=inactive). Examples: STNAME:"California", ACTIVE:1 AND ASSET:[1000000 TO *], NAME:"Chase" | |
| sort_by | No | Field name to sort results by. Example: ASSET, NAME, FAILDATE | |
| sort_order | No | Sort direction: ASC (ascending) or DESC (descending) | ASC |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| summary | Yes | |
| has_more | Yes | |
| truncated | No | |
| next_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds useful context about the data scope and points to a full field catalog (fdic://schemas/summary), but does not disclose behaviors like pagination defaults or result limits beyond what the schema already provides. With annotations in place, this is adequate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the tool's use case, and ends with a useful pointer to the full field schema. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, 100% parameter coverage, and strong annotations, the description covers the core purpose and main filter dimensions. It does not disambiguate from the similarly named fdic_search_financials, which is the main gap for an otherwise complete tool definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a hint that results are 'filtered by CERT and/or year', which aligns with the schema, but it provides no additional meaning for limit, offset, fields, filters, sort_by, or sort_order beyond their already-detailed schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('search'), a specific resource ('annual financial-summary snapshots'), and the key data fields (assets, deposits, ROA, ROE, offices). It does not explicitly contrast itself with the sibling fdic_search_financials, which could be confused, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description opens with 'Use this when...' and clearly specifies the conditions (annual financial-summary snapshots, filtered by CERT/year). It provides solid when-to-use context but gives no when-not-to-use guidance or explicit alternative tools, such as pointing to fdic_search_financials for quarterly data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_show_bank_deep_diveShow Bank Deep Dive DashboardARead-onlyIdempotent
Use this when the user wants a scannable single-institution dashboard with identity, public financial metrics, risk signals, and source links. ChatGPT renders an interactive widget; Claude and other MCP clients render the same data as a Markdown table.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number of the institution to render. | |
| repdte | No | Quarter-end report date in YYYYMMDD format. Defaults to the most recent likely published quarter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| metrics | Yes | |
| sources | Yes | |
| warnings | Yes | |
| assessment | Yes | |
| institution | Yes | |
| risk_signals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world hints. The description adds useful behavioral context by explaining that ChatGPT renders an interactive widget while Claude and other clients render Markdown, and it clarifies the dashboard's content categories. It does not go deeper into data freshness, error behavior, or source-specific caveats, so it provides moderate but not rich transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The primary usage guidance is front-loaded, followed by the client-specific rendering caveat that an agent needs to set expectations correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with two parameters, an output schema, and safety-relevant annotations, the description provides enough context to invoke it correctly and describe the result. It could be slightly stronger by noting how this dashboard differs from sibling institution-level tools, but nothing critical is missing for basic correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes both parameters: cert as the FDIC Certificate Number and repdte as an optional YYYYMMDD report date with a default. The description adds no additional parameter meaning beyond implying a single-institution scope, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific use case: rendering a scannable single-institution dashboard with identity, financial metrics, risk signals, and source links. It clearly names the resource and output format, but does not explicitly distinguish this from siblings like fdic_get_institution or fdic_search_institutions, leaving some differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening phrase 'Use this when the user wants...' gives clear context for when the tool is appropriate, and the content list (identity, metrics, risk signals, source links) helps an agent select it. However, it does not state when not to use it or name alternatives, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic_ubpr_analysisUBPR-Equivalent Ratio AnalysisARead-onlyIdempotent
Compute UBPR-equivalent ratio analysis for an FDIC-insured institution. Includes summary ratios (ROA, ROE, NIM, efficiency), loan mix, capital adequacy, liquidity metrics, and year-over-year growth rates. Ratios are computed from Call Report data and are UBPR-equivalent, not official FFIEC UBPR output.
Output includes:
Summary ratios: ROA, ROE, NIM, efficiency ratio, pretax ROA
Loan mix: real estate, commercial, consumer, agricultural shares
Capital adequacy: Tier 1 leverage, Tier 1 risk-based, equity ratio
Liquidity: loan-to-deposit, core deposit ratio, brokered deposits, cash ratio
Year-over-year growth: assets, loans, deposits
Structured JSON for programmatic consumption
NOTE: This is an analytical tool based on public financial data.
| Name | Required | Description | Default |
|---|---|---|---|
| cert | Yes | FDIC Certificate Number | |
| repdte | No | Report date (YYYYMMDD). Defaults to most recent quarter. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral value beyond that: the caveat that ratios are 'UBPR-equivalent, not official FFIEC UBPR output' and the disclosure that it is an analytical tool based on public financial data. It also previews the output categories. No contradiction with annotations — 'Compute...analysis' aligns with read-only, non-destructive semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, followed by a structured bulleted list of outputs and a one-line note. Efficient overall, though there is some redundancy: the opening 'Includes summary ratios (ROA, ROE, NIM, efficiency), loan mix, capital adequacy, liquidity metrics, and year-over-year growth rates' partially repeats the more detailed bullet list below it. Minor waste but the added specificity justifies most of the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return-value structure is covered there; the description still usefully enumerates the output categories. Both parameters are documented in the schema. The main missing element is usage guidance relative to siblings (also reflected in the usage_guidelines score), but for the analytical scope, data-source caveats, and output preview, the description is largely complete. The default repdte behavior is already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both 'cert' (FDIC Certificate Number) and 'repdte' (Report date YYYYMMDD, defaults to most recent quarter) are documented in the schema. Per baseline, when the schema carries full weight, a 3 is appropriate. The description adds nothing about parameter formats or the default behavior beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Compute') and a well-defined resource ('UBPR-equivalent ratio analysis for an FDIC-insured institution'). The description enumerates exact ratio categories (ROA, ROE, NIM, loan mix, capital adequacy, liquidity, growth), making it clearly distinguishable from sibling tools like fdic_analyze_bank_health or fdic_peer_group_analysis. The explicit 'UBPR-equivalent, not official FFIEC UBPR output' qualifier sharpens the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool produces but gives no guidance on when to choose it over the ~26 sibling analytical tools (e.g., fdic_analyze_bank_health, fdic_analyze_funding_profile, fdic_analyze_credit_concentration). The note that it's 'analytical' and based on 'public financial data' implies context but provides no explicit when-to-use or when-not-to-use direction, nor names any alternative. Given the crowded sibling space, this is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch FDIC BankFind ResultARead-onlyIdempotent
Use this when the model needs the full citation text for a result returned by search. Pass the search result id (e.g. 'institution:3511', 'failure:1234', 'branch:', 'schema:institutions').
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Retrieval item id, such as institution:<CERT>, failure:<CERT>, branch:<UNINUM>, or schema:<endpoint>. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds no additional behavioral context such as rate limits, authentication needs, or edge cases. It is not contradictory, but it does not enrich beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with a clear when-to-use directive and concrete id examples. Every word earns its place, and the key guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only, idempotent tool with an output schema, this is nearly complete. It explains what to pass and when to call it. The only gap is the lack of explicit differentiation from the similarly named sibling 'fdic_fetch'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and includes the same id format examples as the description. The description reinforces the expected id syntax but does not add meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource ('full citation text for a result returned by search') and distinguishes this from search tools. It does not explicitly distinguish itself from the sibling 'fdic_fetch', which creates minor ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit trigger condition: use when the model needs the full citation text from a search result. It does not list exclusions or alternatives, but the condition is specific enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch FDIC BankFindARead-onlyIdempotent
Use this when the model needs citation-friendly FDIC BankFind search results for institutions, failed banks, branches, or schema documentation. Returns up to 8 results with id, title, and source URL.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language search query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, which cover safety and side-effect behavior. The description adds value by specifying the result count limit ('up to 8 results') and the fields returned ('id, title, and source URL'), which is behavioral context not in annotations. No contradiction with annotations; the description emphasizes it is a read-only search, consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the purpose and context, and every sentence adds useful information. No fluff or repetition of schema details. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter, a simple safety profile (annotations), and an output schema that likely describes the result structure, the description is sufficient. It specifies the output format (id, title, URL) and result limit, which is complete for an agent to call it correctly. No additional complexity requires more detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, as the 'query' parameter is well-described in the schema with 'Natural-language search query.' The description adds minimal value beyond that, only implying the search is natural-language. Since coverage is high, the baseline is 3, and the description doesn't need to add more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search'), a specific resource ('FDIC BankFind'), and the types of results ('institutions, failed banks, branches, or schema documentation'). It also mentions the purpose ('citation-friendly') which distinguishes it from generic search tools. This clearly differentiates it from siblings like 'fetch' or the many analysis tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this when the model needs citation-friendly FDIC BankFind search results', which gives a clear context for use. However, it does not explicitly state when not to use it or mention alternatives like 'fetch' or the specific search siblings (e.g., fdic_search_institutions). The guidance is decent but lacks explicit exclusions or comparisons to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
29 tool updates
v3.0.1- Changed
fdic_analyze_bank_health4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_analyze_credit_concentration4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_analyze_funding_profile4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_analyze_securities_portfolio4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_compare_bank_snapshots4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / certs / items / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_compare_peer_health16 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / certs / items / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / institutions / items / properties / cert / maximumAdded value: +9007199254740991 - added
Output schema / properties / institutions / items / properties / cert / minimumAdded value: +-9007199254740991 - added
Output schema / properties / institutions / items / properties / component_ratings / propertyNamesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / peer_context / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "broadening_steps": { - "items": { - "type": "string" - }, - "type": "array" - }, - "peer_count": { - "type": "integer" - }, - "peer_definition": { - "type": "string" - }, - "subject_percentiles": { - "additionalProperties": { - "additionalProperties": false, - "properties": { - "is_outlier": { - "type": "boolean" - }, - "outlier_direction": { - "enum": [ - "high", - "low" - ], - "type": "string" - }, - "peer_count": { - "type": "integer" - }, - "peer_mean": { - "type": "number" - }, - "peer_median": { - "type": "number" - }, - "robust_z_score": { - "type": "number" - }, - "subject_percentile": { - "type": "number" - }, - "subject_value": { - "type": "number" - } - }, - "required": [ - "peer_count", - "peer_median", - "peer_mean", - "subject_value", - "subject_percentile", - "robust_z_score", - "is_outlier" - ], - "type": "object" - }, - "type": "object" - }, - "subject_rank": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "weighted_peer_averages": { - "additionalProperties": { - "type": "number" - }, - "type": "object" - } - }, - "required": [ - "peer_count", - "peer_definition", - "broadening_steps", - "subject_rank", - "subject_percentiles", - "weighted_peer_averages" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "broadening_steps": { + "items": { + "type": "string" + }, + "type": "array" + }, + "peer_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "peer_definition": { + "type": "string" + }, + "subject_percentiles": { + "additionalProperties": { + "additionalProperties": false, + "properties": { + "is_outlier": { + "type": "boolean" + }, + "outlier_direction": { + "enum": [ + "high", + "low" + ], + "type": "string" + }, + "peer_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "peer_mean": { + "type": "number" + }, + "peer_median": { + "type": "number" + }, + "robust_z_score": { + "type": "number" + }, + "subject_percentile": { + "type": "number" + }, + "subject_value": { + "type": "number" + } + }, + "required": [ + "peer_count", + "peer_median", + "peer_mean", + "subject_value", + "subject_percentile", + "robust_z_score", + "is_outlier" + ], + "type": "object" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "subject_rank": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "weighted_peer_averages": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "peer_count", + "peer_definition", + "broadening_steps", + "subject_rank", + "subject_percentiles", + "weighted_peer_averages" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / proxy_summary / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "band": { - "type": "string" - }, - "capital_classification": { - "additionalProperties": false, - "properties": { - "binding_constraint": { - "type": [ - "string", - "null" - ] - }, - "category": { - "type": "string" - }, - "label": { - "type": "string" - }, - "ratios_used": { - "additionalProperties": { - "type": [ - "number", - "null" - ] - }, - "type": "object" - } - }, - "required": [ - "category", - "label", - "binding_constraint", - "ratios_used" - ], - "type": "object" - }, - "components": { - "items": { - "additionalProperties": false, - "properties": { - "flags": { - "items": { - "type": "string" - }, - "type": "array" - }, - "label": { - "type": "string" - }, - "legacy_label": { - "type": "string" - }, - "legacy_rating": { - "type": "number" - }, - "name": { - "type": "string" - }, - "score": { - "type": "number" - } - }, - "required": [ - "name", - "label", - "score", - "legacy_rating", - "legacy_label", - "flags" - ], - "type": "object" - }, - "type": "array" - }, - "data_quality": { - "additionalProperties": false, - "properties": { - "gaps": { - "items": { - "type": "string" - }, - "type": "array" - }, - "gaps_count": { - "type": "integer" - }, - "report_date": { - "type": "string" - }, - "staleness": { - "type": "string" - } - }, - "required": [ - "report_date", - "staleness", - "gaps_count", - "gaps" - ], - "type": "object" - }, - "management_overlay": { - "additionalProperties": false, - "properties": { - "caps_band": { - "type": "boolean" - }, - "level": { - "type": "string" - }, - "reason_codes": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "level", - "caps_band", - "reason_codes" - ], - "type": "object" - }, - "model": { - "const": "public_camels_proxy_v1", - "type": "string" - }, - "official_status": { - "const": "public off-site proxy, not official CAMELS", - "type": "string" - }, - "risk_signal_count": { - "type": "integer" - }, - "risk_signal_severities": { - "additionalProperties": { - "type": "integer" - }, - "type": "object" - }, - "score": { - "type": "number" - }, - "trend_count": { - "type": "integer" - } - }, - "required": [ - "model", - "official_status", - "score", - "band", - "components", - "capital_classification", - "management_overlay", - "risk_signal_count", - "risk_signal_severities", - "trend_count", - "data_quality" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "band": { + "type": "string" + }, + "capital_classification": { + "additionalProperties": false, + "properties": { + "binding_constraint": { + "type": [ + "string", + "null" + ] + }, + "category": { + "type": "string" + }, + "label": { + "type": "string" + }, + "ratios_used": { + "additionalProperties": { + "type": [ + "number", + "null" + ] + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "category", + "label", + "binding_constraint", + "ratios_used" + ], + "type": "object" + }, + "components": { + "items": { + "additionalProperties": false, + "properties": { + "flags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "label": { + "type": "string" + }, + "legacy_label": { + "type": "string" + }, + "legacy_rating": { + "type": "number" + }, + "name": { + "type": "string" + }, + "score": { + "type": "number" + } + }, + "required": [ + "name", + "label", + "score", + "legacy_rating", + "legacy_label", + "flags" + ], + "type": "object" + }, + "type": "array" + }, + "data_quality": { + "additionalProperties": false, + "properties": { + "gaps": { + "items": { + "type": "string" + }, + "type": "array" + }, + "gaps_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "report_date": { + "type": "string" + }, + "staleness": { + "type": "string" + } + }, + "required": [ + "report_date", + "staleness", + "gaps_count", + "gaps" + ], + "type": "object" + }, + "management_overlay": { + "additionalProperties": false, + "properties": { + "caps_band": { + "type": "boolean" + }, + "level": { + "type": "string" + }, + "reason_codes": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "level", + "caps_band", + "reason_codes" + ], + "type": "object" + }, + "model": { + "const": "public_camels_proxy_v1", + "type": "string" + }, + "official_status": { + "const": "public off-site proxy, not official CAMELS", + "type": "string" + }, + "risk_signal_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "risk_signal_severities": { + "additionalProperties": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "score": { + "type": "number" + }, + "trend_count": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "model", + "official_status", + "score", + "band", + "components", + "capital_classification", + "management_overlay", + "risk_signal_count", + "risk_signal_severities", + "trend_count", + "data_quality" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / returned_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / returned_count / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / subject_cert / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Output schema / properties / subject_rank / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - added
Output schema / properties / total_institutions / maximumAdded value: +9007199254740991 - added
Output schema / properties / total_institutions / minimumAdded value: +-9007199254740991
- Changed
fdic_detect_risk_signals4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / certs / items / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_fetch3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / metadata / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
fdic_franchise_footprint5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / year / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_get_institution4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_get_institution_failure4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_holding_company_profile4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_market_share_analysis6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / msa / maximumAdded value: +9007199254740991 - added
Input schema / properties / year / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_peer_group_analysis4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_qbp_lite_data3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_regional_context4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fdic_search2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
fdic_search_demographics13 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / demographics / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / next_offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
fdic_search_failures12 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / failures / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / next_offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
fdic_search_financials15 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / count / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / financials / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / financials / items / properties / CERT / maximumAdded value: +9007199254740991 - added
Output schema / properties / financials / items / properties / CERT / minimumAdded value: +-9007199254740991 - added
Output schema / properties / next_offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / next_offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
fdic_search_history13 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / events / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / next_offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
fdic_search_institutions12 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / institutions / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / next_offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
fdic_search_locations13 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / locations / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / next_offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
fdic_search_sod14 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / year / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / deposits / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / next_offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
fdic_search_summary14 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / year / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / next_offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / next_offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / offset / maximumAdded value: +9007199254740991 - added
Output schema / properties / offset / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / items / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
fdic_show_bank_deep_dive5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / institution / properties / cert / maximumAdded value: +9007199254740991 - added
Output schema / properties / institution / properties / cert / minimumAdded value: +-9007199254740991
- Changed
fdic_ubpr_analysis4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / cert / maximumAdded value: +9007199254740991 - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
fetch3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / metadata / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
search2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
1 tool update
v1.22.0- Added
fdic_detect_risk_signals
1 tool update
v1.10.2- Removed
fdic_detect_risk_signals
1 tool update
v1.23.1- Added
fdic_detect_risk_signals
1 tool update
v1.14.0- Removed
fdic_detect_risk_signals
1 tool update
v1.7.3- Added
fdic_detect_risk_signals
1 tool update
v1.4.4- Removed
fdic_detect_risk_signals
1 tool update
v1.2.11- Added
fdic_detect_risk_signals
1 tool update
v1.2.5- Removed
fdic_detect_risk_signals
TDQS
Scored across 29 tools
The server contains exact duplicate pairs: 'search'/'fdic_search' and 'fetch'/'fdic_fetch' have identical purposes and descriptions. Additionally, many analytical tools (fdic_analyze_bank_health, fdic_analyze_credit_concentration, fdic_ubpr_analysis, fdic_qbp_lite_data) overlap in the financial metrics they expose, making it hard for an agent to select the right one.
Most tools follow a consistent 'fdic_<verb>_<domain>' pattern (fdic_search_institutions, fdic_get_institution), which is readable. However, the unprefixed 'search' and 'fetch' tools break the pattern, and mixing 'search', 'get', 'compare', 'analyze', 'detect', 'show', and standalone nouns like 'fdic_ubpr_analysis' creates noticeable inconsistency.
With 29 tools, this server exceeds the threshold for a well-scoped tool set. Several tools could be consolidated, especially the duplicate fetch/search pairs and the proliferation of single-institution analytical tools that all draw from the same underlying financial data.
The tool set covers the major FDIC BankFind domains well: institutions, failures, branches/locations, history, financials, deposits, demographics, and advanced analytics. Minor gaps exist, such as no direct financial-data fetch by CERT without using a search-style tool, but the overall read-only domain coverage is strong.
Maintenance
Related MCP Connectors
FDIC MCP — FDIC BankFind Suite API (free, no auth)
Bank financials, branch locations, deposit data, and failure history from FDIC
Access US federal award, recipient, agency, and spending analytics data from USAspending.gov.
Citable US facts w/ curated query templates: SEC financials, bank call reports, nonprofits. No key.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables querying and exploring FCC Open Data datasets via Socrata SoQL, including dataset search, metadata retrieval, and data querying.242 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables access to quarterly Call Report financials, bank health metrics, failed bank lists, branch maps, and supervisory designations for every US FDIC-insured bank, with no authentication required.256 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables querying US bank regulatory filings at line-item level: search institutions, retrieve labeled call reports, track specific items over time, compare banks, and inspect data coverage and code meanings, with amounts normalized to whole dollars.247 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables querying HMDA mortgage application data from the CFPB/FFIEC public API, including lender activity, geographic breakdowns, individual loan records, and lender rankings by county.457 npmMIT