olgasafonova

GLEIF MCP Server

Community olgasafonova
Updated

MCP server for GLEIF LEI (Legal Entity Identifier) database access

GLEIF MCP Server

A Model Context Protocol (MCP) server for accessing the Global Legal Entity Identifier (LEI) database via GLEIF's public API.

CIGo Report CardLicense: MIT

What this does: Gives your AI assistant the ability to look up company identities, verify legal entities, and explore corporate ownership structures using the official GLEIF database. Works with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, and other MCP-compatible tools. Ask questions in plain English; get structured answers instantly.

Use Cases

  • KYC & Onboarding: Verify counterparty identities before signing contracts
  • Compliance Checks: Validate LEIs for MiFID II, EMIR, or DORA reporting
  • Due Diligence: Research corporate ownership chains and ultimate parents
  • Financial Analysis: Cross-reference securities (ISIN) and banks (BIC/SWIFT) with their legal entities
  • Data Enrichment: Batch-process company lists to add LEI data

What is LEI?

The Legal Entity Identifier (LEI) is a 20-character alphanumeric code that uniquely identifies legal entities participating in financial transactions worldwide. It's mandated by 200+ regulations including MiFID II, EMIR, Dodd-Frank, and DORA.

LEI Format (ISO 17442):

  • Characters 1-4: LOU (Local Operating Unit) prefix
  • Characters 5-18: Entity-specific identifier
  • Characters 19-20: Check digits (mod 97 validation)

Example: HWUPKR0MPOU8FGXBT394 (Apple Inc.)

Features

Core Capabilities

  • LEI Lookup: Get full entity details by LEI code
  • Batch Lookup: Look up multiple LEIs in a single request (up to 100)
  • Entity Search: Find companies by name with fuzzy matching and pagination
  • LEI Validation: Verify format, check digits (ISO 17442), and registration status

Financial Identifiers

  • BIC/SWIFT Lookup: Find bank LEIs from BIC codes
  • ISIN Lookup: Find security issuer LEIs from ISIN codes
  • Country Browse: List entities by jurisdiction

Relationships & Compliance

  • Corporate Ownership: Parent companies, subsidiaries, ultimate parents
  • Fund Relationships: Fund managers, umbrella funds, sub-funds
  • Reporting Exceptions: Level 2 data exceptions with reasons
  • LEI Issuers: List and details of all Local Operating Units (LOUs)

Performance & Reliability

  • Fast Responses: Results are cached locally, so repeat queries return instantly
  • No API Key Needed: Works out of the box with GLEIF's public API
  • Handles Errors Gracefully: Automatic retries on timeouts or temporary failures
  • Stays Within Limits: Built-in rate limiting prevents hitting GLEIF's quotas

Installation

Download Binary

Pre-built binaries for all platforms on the releases page:

Platform Binary
macOS (Apple Silicon) gleif-mcp-server-darwin-arm64
macOS (Intel) gleif-mcp-server-darwin-amd64
Linux (x64) gleif-mcp-server-linux-amd64
Linux (ARM64) gleif-mcp-server-linux-arm64
Windows (x64) gleif-mcp-server-windows-amd64.exe
# macOS/Linux - download and make executable
chmod +x gleif-mcp-server-darwin-arm64

Build from Source

Requires Go 1.25+:

git clone https://github.com/olgasafonova/gleif-mcp-server.git
cd gleif-mcp-server
go build -o gleif-mcp-server .

Install via Go

go install github.com/olgasafonova/gleif-mcp-server@latest

AI Agent Setup

Quickest start: Using Claude Desktop? Just add the config below and restart. Using an IDE like Cursor? Same idea, different config file. Pick your tool below.

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "gleif": {
      "command": "/path/to/gleif-mcp-server"
    }
  }
}

Restart Claude Desktop after editing the config.

Claude Code (CLI)

# Add the server
claude mcp add gleif /path/to/gleif-mcp-server

# Or with scope for all projects
claude mcp add --scope user gleif /path/to/gleif-mcp-server

Cursor IDE

Add to .cursor/mcp.json in your project or ~/.cursor/mcp.json for global config:

{
  "mcpServers": {
    "gleif": {
      "command": "/path/to/gleif-mcp-server"
    }
  }
}

VS Code with Continue Extension

Add to .continue/config.json:

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "name": "gleif",
        "transport": {
          "type": "stdio",
          "command": "/path/to/gleif-mcp-server"
        }
      }
    ]
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "gleif": {
      "command": "/path/to/gleif-mcp-server"
    }
  }
}

Cline (VS Code Extension)

Add via Cline's MCP settings or in .vscode/cline_mcp_settings.json:

{
  "mcpServers": {
    "gleif": {
      "command": "/path/to/gleif-mcp-server",
      "args": []
    }
  }
}

Tools Reference

Core Lookup Tools

Tool Description Parameters
lei_lookup Get full details for a specific LEI lei (required): 20-char LEI code
validate_lei Check format, check digits, and status lei (required): LEI to validate
batch_lei_lookup Look up multiple LEIs at once leis (required): Comma-separated LEIs (max 100)

Search Tools

Tool Description Parameters
search_entity Search by company name query (required), limit (default 20), page (default 1), fuzzy (default true)
search_by_bic Find LEI from BIC/SWIFT bic (required): 8 or 11 char code
search_by_isin Find issuer LEI from ISIN isin (required): 12-char ISIN
search_by_country List entities by country country (required): ISO 2-letter code, limit (default 20)
autocomplete Entity name suggestions prefix (required): min 2 chars, limit (default 10)

Relationship Tools

Tool Description Parameters
get_relationships Get corporate/fund relationships lei (required), type: direct-parent, ultimate-parent, children, fund-manager, umbrella-fund, sub-funds

LEI Issuer Tools

Tool Description Parameters
get_lei_issuer Get details about an LOU issuer_id (required): LOU identifier
list_lei_issuers List all LOUs worldwide None

Compliance Tools

Tool Description Parameters
get_reporting_exceptions Get Level 2 reporting exceptions lei (required): LEI to check

Usage Examples

Basic LEI Lookup

Prompt: "Look up LEI HWUPKR0MPOU8FGXBT394"

Returns: Full entity details for Apple Inc. including legal name, headquarters address, jurisdiction (US-CA), entity status, registration status, managing LOU, and next renewal date.

Company Search with Pagination

Prompt: "Search for Deutsche Bank, show page 2"

Tool call:

{
  "name": "search_entity",
  "arguments": {
    "query": "Deutsche Bank",
    "limit": 20,
    "page": 2,
    "fuzzy": true
  }
}

Returns: List of matching entities with pagination info (total results, current page, has more).

Batch LEI Lookup

Prompt: "Look up these LEIs: HWUPKR0MPOU8FGXBT394, 5493006MHB84DD0ZWV18, 549300GKFG0RYRRQ1414"

Returns: Summary of all three entities with LEI, legal name, country, city, and status.

Find Bank by BIC

Prompt: "Find the LEI for BIC DEUTDEFF"

Returns: Deutsche Bank AG's LEI record with full details.

Find Security Issuer

Prompt: "Who issued ISIN US0378331005?"

Returns: Apple Inc. (the issuer of AAPL stock).

Corporate Structure

Prompt: "Who is the ultimate parent of this subsidiary?"

Tool call:

{
  "name": "get_relationships",
  "arguments": {
    "lei": "549300GKFG0RYRRQ1414",
    "type": "ultimate-parent"
  }
}

LEI Validation

Prompt: "Is LEI HWUPKR0MPOU8FGXBT394 valid?"

Returns:

{
  "lei": "HWUPKR0MPOU8FGXBT394",
  "valid": true,
  "status": "ISSUED",
  "entityStatus": "ACTIVE",
  "nextRenewal": "2025-08-15"
}

Check Reporting Exceptions

Prompt: "Why is parent info missing for this company?"

Tool call:

{
  "name": "get_reporting_exceptions",
  "arguments": {
    "lei": "5493006MHB84DD0ZWV18"
  }
}

Returns: Exception categories and reasons (e.g., NON_CONSOLIDATING, NATURAL_PERSONS).

List All LEI Issuers

Prompt: "Show me all LEI issuers"

Returns: Complete list of LOUs (Local Operating Units) with name, country, status, and number of sponsored LEIs.

Response Format

All tools return JSON with relevant fields. Example entity record:

{
  "lei": "HWUPKR0MPOU8FGXBT394",
  "legalName": "Apple Inc.",
  "country": "US",
  "city": "Cupertino",
  "status": "ACTIVE",
  "regStatus": "ISSUED"
}

Search results include pagination:

{
  "count": 20,
  "results": [...],
  "pagination": {
    "currentPage": 1,
    "perPage": 20,
    "total": 156,
    "lastPage": 8
  },
  "hasMore": true
}

Error Handling

The server returns structured errors:

Error Code Description Retryable
not_found LEI/entity not in GLEIF database No
invalid_format Invalid LEI/BIC/ISIN format No
rate_limited GLEIF API rate limit exceeded Yes
timeout Request timed out Yes
server_error GLEIF API error Depends on status
network_error Connection failed Yes

Example error response:

{
  "code": "not_found",
  "message": "LEI not found in GLEIF database",
  "statusCode": 404,
  "retryable": false
}

Architecture

gleif-mcp-server/
├── main.go                 # Entry point, MCP server setup
├── internal/gleif/
│   ├── client.go          # GLEIF API client with caching & rate limiting
│   ├── client_test.go     # Client and validation tests
│   ├── cache.go           # LRU cache with TTL
│   ├── types.go           # Data structures for API responses
│   └── errors.go          # Structured error types
└── tools/
    ├── definitions.go     # Tool metadata and parameter specs
    ├── handlers.go        # MCP tool implementations
    └── handlers_test.go   # Handler tests with mock server

Technical Details

For developers who want the specifics:

Setting Value
Cache duration 15 minutes
Cache capacity 1000 entities, 500 searches
Rate limit 50 req/min (GLEIF allows 60)
Retry strategy 3 attempts with exponential backoff
Connection pool 100 max idle, 10 per host

API Reference

This server wraps the public GLEIF API:

Troubleshooting

Server won't start

  • Check the binary has execute permissions: chmod +x gleif-mcp-server
  • Verify the path in your MCP config is absolute, not relative

"Rate limit exceeded" errors

  • The server automatically handles rate limiting with retries
  • If persistent, reduce concurrent requests or wait a few minutes

"LEI not found" for valid LEI

  • The GLEIF database updates daily; recently issued LEIs may not appear immediately
  • Verify the LEI format (exactly 20 alphanumeric characters)

Slow responses

  • First requests may be slower (cache warming)
  • GLEIF API occasionally has latency spikes; retries handle this automatically

Claude Desktop doesn't show the server

  • Restart Claude Desktop after editing config
  • Check JSON syntax in config file
  • Verify the binary path exists and is executable

Development

# Run tests
go test ./...

# Run tests with coverage
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out

# Run tests with race detector
go test -race ./...

# Build
go build -o gleif-mcp-server .

Contributing

Contributions welcome. Please open an issue first to discuss proposed changes.

License

MIT License - see LICENSE for details.

More MCP Servers

Check out my other MCP servers:

Server Description Stars
miro-mcp-server Control Miro whiteboards with AI. 76 tools for boards, diagrams, mindmaps. GitHub stars
mediawiki-mcp-server Connect AI to any MediaWiki wiki. Search, read, edit wiki content. GitHub stars
productplan-mcp-server Talk to your ProductPlan roadmaps. Query OKRs, ideas, launches. GitHub stars

Acknowledgments

MCP Server · Populars

MCP Server · New

    RelayPlane

    @relayplane/proxy

    Open source cost intelligence proxy for AI agents. Cut costs ~80% with smart model routing. Dashboard, policy engine, 11 providers. MIT licensed.

    Community RelayPlane
    civyk-official

    WinWright

    Playwright-style MCP server for Windows desktop, system, and browser automation. 110 tools for WPF, WinForms, Win32, Chrome/Edge via Model Context Protocol.

    Community civyk-official
    mavdol

    Capsule

    A secure, durable runtime for AI agents. Run untrusted code in isolated WebAssembly sandboxes.

    Community mavdol
    easyshell-ai

    EasyShell

    Lightweight server management & intelligent ops platform with Docker one-click deployment, batch script execution, web terminal, and AI-powered operations.

    Community easyshell-ai
    AVIDS2

    Memorix

    Cross-Agent Memory Bridge Persistent memory for AI coding agents across 10 IDEs (Cursor, Windsurf, Claude Code, Codex, Copilot, Kiro, Antigravity, OpenCode, Trae, Gemini CLI) via MCP. Team collaboration, auto-cleanup, mini-skills, workspace sync. Never re-explain your project again.

    Community AVIDS2