Skip to main content
Glama
jflamb

FDIC BankFind MCP Server

by jflamb

Search Institution Locations / Branches

fdic_search_locations
Read-onlyIdempotent

Search for branch locations of FDIC-insured financial institutions by state, city, institution, or service type to find addresses, coordinates, and establishment details.

Instructions

Search for branch locations of FDIC-insured financial institutions.

Returns branch/office data including address, city, state, coordinates, branch type, and establishment date.

Common filter examples:

  • All branches of a bank: CERT:3511

  • By state: STALP:TX (two-letter state code)

  • By city: CITY:"Austin"

  • Main offices only: BRNUM:0

  • By county: COUNTY:"Travis"

  • Active branches only: ENDEFYMD:[9999-01-01 TO *] (sentinel date 9999-12-31 means still open)

  • By metro area (CBSA): CBSA_METRO_NAME:"New York-Newark-Jersey City"

Branch service types (BRSERTYP): 11 = Full service brick and mortar 12 = Full service retail 21 = Limited service administrative 22 = Limited service military 23 = Limited service drive-through 24 = Limited service loan production 25 = Limited service consumer/trust 26 = Limited service Internet/mobile 29 = Limited service other

Key returned fields:

  • CERT: FDIC Certificate Number

  • UNINAME: Institution name

  • NAMEFULL: Full branch name

  • ADDRESS, CITY, STALP (two-letter state code), ZIP: Branch address

  • COUNTY: County name

  • BRNUM: Branch number (0 = main office)

  • BRSERTYP: Branch service type code (see above)

  • LATITUDE, LONGITUDE: Geographic coordinates

  • ESTYMD: Branch established date (YYYY-MM-DD)

  • ENDEFYMD: Branch end date (9999-12-31 if still active)

Args:

  • cert (number, optional): Filter by institution CERT number

  • filters (string, optional): Additional ElasticSearch query filters

  • fields (string, optional): Comma-separated field names

  • limit (number): Records to return (default: 20)

  • offset (number): Pagination offset (default: 0)

  • sort_by (string, optional): Field to sort by

  • sort_order ('ASC'|'DESC'): Sort direction (default: 'ASC')

Prefer concise human-readable summaries or tables when answering users. Structured fields are available for totals, pagination, and branch location records.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filtersNoFDIC 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"
fieldsNoComma-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
limitNoMaximum number of records to return (1-10000, default: 20)
offsetNoNumber of records to skip for pagination (default: 0)
sort_byNoField name to sort results by. Example: ASSET, NAME, FAILDATE
sort_orderNoSort direction: ASC (ascending) or DESC (descending)ASC
certNoFilter by FDIC Certificate Number to get all branches of a specific institution

Implementation Reference

  • The handler function for the fdic_search_locations tool, which queries the FDIC locations endpoint and formats the response.
    async ({ cert, ...params }) => {
      try {
        const response = await queryEndpoint(ENDPOINTS.LOCATIONS, {
          ...params,
          filters: buildFilterString({
            cert,
            rawFilters: params.filters,
            rawFiltersPosition: "last",
          }),
        });
        const records = extractRecords(response);
        const pagination = buildPaginationInfo(
          response.meta.total,
          params.offset ?? 0,
          records.length,
        );
        const output = { ...pagination, locations: records };
        const text = truncateIfNeeded(
          formatSearchResultText("locations", records, pagination, [
            "CERT",
            "UNINAME",
            "NAMEFULL",
            "CITY",
            "STALP",
            "BRNUM",
          ]),
          CHARACTER_LIMIT,
          "Request fewer fields, narrow your filters, or paginate with limit/offset.",
        );
        return {
          content: [{ type: "text", text }],
          structuredContent: output,
        };
      } catch (err) {
        return formatToolError(err);
      }
    },
  • The registration of the fdic_search_locations tool within the registerLocationTools function.
    export function registerLocationTools(server: McpServer): void {
      server.registerTool(
        "fdic_search_locations",
        {
          title: "Search Institution Locations / Branches",
          description: `Search for branch locations of FDIC-insured financial institutions.
    
    Returns branch/office data including address, city, state, coordinates, branch type, and establishment date.
    
    Common filter examples:
      - All branches of a bank: CERT:3511
      - By state: STALP:TX (two-letter state code)
      - By city: CITY:"Austin"
      - Main offices only: BRNUM:0
      - By county: COUNTY:"Travis"
      - Active branches only: ENDEFYMD:[9999-01-01 TO *]  (sentinel date 9999-12-31 means still open)
      - By metro area (CBSA): CBSA_METRO_NAME:"New York-Newark-Jersey City"
    
    Branch service types (BRSERTYP):
      11 = Full service brick and mortar
      12 = Full service retail
      21 = Limited service administrative
      22 = Limited service military
      23 = Limited service drive-through
      24 = Limited service loan production
      25 = Limited service consumer/trust
      26 = Limited service Internet/mobile
      29 = Limited service other
    
    Key returned fields:
      - CERT: FDIC Certificate Number
      - UNINAME: Institution name
      - NAMEFULL: Full branch name
      - ADDRESS, CITY, STALP (two-letter state code), ZIP: Branch address
      - COUNTY: County name
      - BRNUM: Branch number (0 = main office)
      - BRSERTYP: Branch service type code (see above)
      - LATITUDE, LONGITUDE: Geographic coordinates
      - ESTYMD: Branch established date (YYYY-MM-DD)
      - ENDEFYMD: Branch end date (9999-12-31 if still active)
    
    Args:
      - cert (number, optional): Filter by institution CERT number
      - filters (string, optional): Additional ElasticSearch query filters
      - fields (string, optional): Comma-separated field names
      - limit (number): Records to return (default: 20)
      - offset (number): Pagination offset (default: 0)
      - sort_by (string, optional): Field to sort by
      - sort_order ('ASC'|'DESC'): Sort direction (default: 'ASC')
    
    Prefer concise human-readable summaries or tables when answering users. Structured fields are available for totals, pagination, and branch location records.`,
          inputSchema: LocationQuerySchema,
          annotations: {
            readOnlyHint: true,
            destructiveHint: false,
            idempotentHint: true,
            openWorldHint: true,
          },
        },
        async ({ cert, ...params }) => {
          try {
            const response = await queryEndpoint(ENDPOINTS.LOCATIONS, {
              ...params,
              filters: buildFilterString({
                cert,
                rawFilters: params.filters,
                rawFiltersPosition: "last",
              }),
            });
            const records = extractRecords(response);
            const pagination = buildPaginationInfo(
              response.meta.total,
              params.offset ?? 0,
              records.length,
            );
            const output = { ...pagination, locations: records };
            const text = truncateIfNeeded(
              formatSearchResultText("locations", records, pagination, [
                "CERT",
                "UNINAME",
                "NAMEFULL",
                "CITY",
                "STALP",
                "BRNUM",
              ]),
              CHARACTER_LIMIT,
              "Request fewer fields, narrow your filters, or paginate with limit/offset.",
            );
            return {
              content: [{ type: "text", text }],
              structuredContent: output,
            };
          } catch (err) {
            return formatToolError(err);
          }
        },
      );
  • The input schema definition for the fdic_search_locations tool, extending CommonQuerySchema with a 'cert' field.
    const LocationQuerySchema = CommonQuerySchema.extend({
      cert: z
        .number()
        .int()
        .positive()
        .optional()
        .describe(
          "Filter by FDIC Certificate Number to get all branches of a specific institution",
        ),
    });
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, and idempotentHint=true, covering safety and behavior. The description adds valuable context beyond this: it explains branch service type codes, active branch filtering using sentinel dates, and recommends 'concise human-readable summaries or tables' for output formatting. No contradictions with annotations exist.

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?

The description is well-structured and front-loaded: it starts with the core purpose, lists returned data, provides practical filter examples, explains key fields and codes, and ends with parameter guidance. Every sentence adds value, with no redundant or wasted information, making it efficient for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, no output schema) and rich annotations, the description is highly complete. It covers purpose, usage examples, data semantics, and behavioral details like active branch filtering and output formatting recommendations. This compensates well for the lack of output schema and provides comprehensive guidance for effective tool use.

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 description coverage is 100%, so the schema fully documents all 7 parameters. The description adds semantic context: it provides filter examples (e.g., 'CERT:3511' for cert parameter), explains branch-specific fields like BRNUM and BRSERTYP, and clarifies data formats (e.g., 'two-letter state code'). This enhances understanding beyond the schema's technical specifications.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Search for branch locations of FDIC-insured financial institutions.' It specifies the verb ('Search') and resource ('branch locations'), and distinguishes itself from siblings like fdic_search_institutions by focusing specifically on branches rather than institutions.

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 provides clear context for when to use this tool through filter examples (e.g., 'All branches of a bank: CERT:3511') and key returned fields. However, it doesn't explicitly state when to use this tool versus alternatives like fdic_search_institutions or fdic_get_institution, which could help differentiate further.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jflamb/fdic-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server