Skip to main content
Glama
uttkarsh-26

ifsc-mcp

by uttkarsh-26

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
IFSC_MCP_HOSTNoHTTP binding host.127.0.0.1
IFSC_MCP_PATHNoHTTP binding path./mcp
IFSC_MCP_PORTNoHTTP binding port.8000
IFSC_LOG_LEVELNoDEBUG/INFO/WARNING/ERROR. Logs go to stderr.INFO
IFSC_DATASET_TTLNoBank-directory cache TTL, seconds.3600
IFSC_MAX_RETRIESNoRetries on timeout/429/5xx.2
IFSC_API_BASE_URLNoUpstream API host.https://ifsc.razorpay.com
IFSC_MCP_TRANSPORTNostdio or http.stdio
IFSC_CONNECT_TIMEOUTNoConnect timeout, seconds.5
IFSC_REQUEST_TIMEOUTNoRead timeout, seconds.10
IFSC_DATASET_BASE_URLNoBank dataset host.https://raw.githubusercontent.com/razorpay/ifsc/master/src

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
ifsc_lookupA

Retrieve full details for the single bank branch identified by an IFSC code.

Use this whenever the user supplies an IFSC. It is the only tool that confirms a branch actually exists, and the only source of the branch's address, MICR, SWIFT/bic code, contact number and per-branch settlement-rail support (RTGS, NEFT, IMPS, UPI).

Returns ok: true with: ifsc, bank, bank_code, branch, centre, address, city, district, state, iso3166, micr, contact, swift, and supports (booleans for imps/neft/rtgs/upi/swift).

Failure codes: INVALID_INPUT (not 11 chars, or not 4 letters + '0' + 6 alphanumerics), NOT_FOUND (well-formed but no such branch), UPSTREAM_TIMEOUT / UPSTREAM_UNAVAILABLE / UPSTREAM_ERROR (service trouble).

Args: ifsc: The 11-character IFSC to resolve, e.g. "SBIN0000001".

Returns: The branch record, or a structured error payload with ok: false.

Example: Ask "what is the MICR of HDFC0000001?" -> call ifsc_lookup("HDFC0000001").

ifsc_validateA

Check whether a string is structurally a valid IFSC, without any network call.

Applies the RBI/NEFC layout rules offline: exactly 11 characters, 4 leading letters for the bank code, a literal '0' as the 5th character, and 6 trailing alphanumeric branch characters.

Choose this over ifsc_lookup when you want to reject junk before spending a request, or to explain why a user-entered code is wrong. It does NOT confirm the branch exists - only ifsc_lookup does that.

Returns ok: true with: input, normalized, is_valid, bank_code, branch_code, reason and message. reason is a stable code: VALID, EMPTY, WRONG_LENGTH, INVALID_CHARACTERS, BAD_BANK_CODE, MISSING_BANK_SUBLET or BAD_BRANCH_CODE.

Args: ifsc: The candidate string to validate.

Returns: A validation report, always with ok: true - an invalid IFSC is a successful report, not an error.

Example: Ask "is HFDCC00001 a valid IFSC?" -> call ifsc_validate("HFDCC00001") and read reason == "MISSING_BANK_SUBLET".

search_branchesA

Find bank branches when you have a bank, city, state or branch name but no IFSC.

Filters are ANDed. At least one of bank_code, city, state or branch is required - an unfiltered search is rejected with INVALID_INPUT because the dataset has ~170k rows and no endpoint supports listing all of them.

Returns ok: true with: branches (each row shaped like an ifsc_lookup result), count (total matches upstream), has_next (true when more pages exist), and the echoed query.

Prefer this over bank_directory when the user wants a branch; use bank_directory when they want a bank.

Args: bank_code: 4-letter bank code filter. city: City name filter. state: ISO 3166-2 state code filter, e.g. "IN-MH". branch: Exact branch-name filter. limit: Page size, 1-100 (default 10). offset: Row offset, for pagination.

Returns: Matching branches with pagination metadata, or a structured error payload.

Example: Ask "which Kotak branches are in Gurgaon?" -> call search_branches(bank_code="KKBK", city="GURGAON", limit=5).

branch_placesA

Discover the exact district and branch-name spellings that search_branches matches on.

The branch search API matches city/district and branch verbatim, so a near-miss returns zero rows. This tool walks the same hierarchy the API uses, one level per call, and returns the accepted values at that level: bank_code alone -> states; add state -> districts; add district -> branches.

Returns ok: true with level ('states'|'districts'|'branches'), the values at that level, total found, truncated, and the echoed query.

Call this when a search returned nothing and you need to check spelling - it is cheaper than guessing several more search calls.

Args: bank_code: 4-letter bank code; required. state: ISO 3166-2 code to descend to districts, e.g. "IN-MH". district: District name to descend to branches, e.g. "MUMBAI". limit: Cap on returned values, 1-200 (default 200).

Returns: The place names valid at the requested level, or a structured error payload.

Example: Ask "which states does Kotak serve?" -> call branch_places(bank_code="KKBK").

bank_directoryA

Look up the official 4-letter bank code for a bank, or list banks by name.

Every IFSC begins with a 4-letter bank code, and this is the tool that maps "HDFC Bank" -> "HDFC". Use it before ifsc_lookup or search_branches when the user gave a bank name rather than a code.

Returns ok: true with: banks (list of {"code", "name"}), count (total matches) and source (the upstream dataset URL).

Data comes from the published razorpay/ifsc dataset and is cached, so repeated calls are cheap. This returns banks, not branches - use search_branches or ifsc_lookup for a specific branch.

Args: query: Substring filter over code and name; omit for the full list. limit: Max rows, 1-500 (default 50, or 500 with no query).

Returns: Matching bank codes and names, or a structured error payload.

Example: Ask "what is the code for Kotak Mahindra?" -> call bank_directory(query="kotak") and read banks[0]["code"].

bank_metadataA

Get bank-level facts for a 4-letter bank code: its type, MICR/IIN, and payment-rail support.

Distinguishes bank classes that share an IFSC prefix pattern - private / public / foreign / small finance / payments / co-operative - and reports whether the bank as a whole supports UPI, ACH credit/debit, NACH debit and APBS.

Choose this over bank_directory when you need capabilities or bank type rather than the name; choose bank_directory when you need to go from a bank name to its code.

Returns ok: true with: bank_code, name, bank_type, micr, iin, capability_ifsc, and capabilities (upi, ach_credit, ach_debit, nach_debit, apbs).

Args: bank_code: The 4-letter bank code, e.g. "KKBK".

Returns: Bank metadata, or a structured error payload (INVALID_INPUT for a malformed code, NOT_FOUND for a code absent from the dataset).

Example: Ask "is HDFC a private bank and does it support UPI?" -> call bank_metadata(bank_code="HDFC").

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: offline validation vs. online lookup, branch search vs. place-name discovery, bank-name-to-code mapping vs. bank-level capabilities. The descriptions explicitly guide when to prefer one over another, eliminating overlap. No two tools appear to do the same thing.

Naming Consistency3/5

Names mix conventions: ifsc_lookup and ifsc_validate use entity_action, search_branches uses verb_entity, and branch_places, bank_directory, bank_metadata use entity_noun. While all are snake_case and readable, there is no single predictable pattern. This makes the set feel slightly inconsistent despite clear individual names.

Tool Count5/5

Six tools is well-scoped for an IFSC/bank lookup service. Each tool serves a distinct, non-redundant role, covering validation, lookup, search, discovery, directory, and metadata. No tool feels extraneous or missing at this count.

Completeness5/5

The surface covers the full read-only lifecycle: offline validation, online branch resolution, filtered search with pagination, place-name discovery to aid search, bank name-to-code mapping, and bank-level capabilities. No obvious dead ends remain for typical IFSC lookups. Minor gaps like reverse MICR lookup are outside the stated domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues