Skip to main content
Glama
jflamb

FDIC BankFind MCP Server

by jflamb

Compare Peer Health (CAMELS Rankings)

fdic_compare_peer_health
Read-onlyIdempotent

Compare CAMELS-style health scores across FDIC-insured institutions by explicit list, state, or asset range. Optionally highlight a subject institution's ranking.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
certNoSubject institution CERT to highlight in the ranking. Optional.
certsNoExplicit list of CERTs to compare (max 50).
limitNoMax institutions to return in the response.
stateNoTwo-letter state code to select all active institutions (e.g., "WY").
repdteNoReport Date (YYYYMMDD). Defaults to the most recent quarter.
sort_byNoSort results by composite or a specific CAMELS component rating.composite
asset_maxNoMaximum total assets ($thousands) for peer selection.
asset_minNoMinimum total assets ($thousands) for peer selection.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
modelYes
proxyNo
metricsYes
sort_byYes
report_dateYes
deprecationsYes
institutionsYes
peer_contextYes
subject_certYes
subject_rankYes
proxy_summaryYes
returned_countYes
official_statusYes
total_institutionsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changedv3.0.1
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / properties / cert / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / certs / items / maximum
      Added value: +9007199254740991
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / institutions / items / properties / cert / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / institutions / items / properties / cert / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / institutions / items / properties / component_ratings / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / peer_context / anyOf
      Previous 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"
      +  }
      +]
    • changedOutput schema / properties / proxy_summary / anyOf
      Previous 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"
      +  }
      +]
    • addedOutput schema / properties / returned_count / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / returned_count / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / subject_cert / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / subject_rank / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / total_institutions / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / total_institutions / minimum
      Added value: +-9007199254740991
  2. Addedv1.26.0

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.