LEI Search & Company Group Structure MCP Server avatar

LEI Search & Company Group Structure MCP Server

Pricing

from $3.00 / 1,000 read operations

Go to Apify Store
LEI Search & Company Group Structure MCP Server

LEI Search & Company Group Structure MCP Server

LEI search MCP server for Claude, ChatGPT, Cursor and VS Code. 8 read-only tools find a legal entity identifier by name or register number, check up to 50 LEIs in one call, return parents and subsidiaries, resolve an ISIN or a BIC to its entity and list the changes to a record.

Pricing

from $3.00 / 1,000 read operations

Rating

0.0

(0)

Developer

MrBridge

MrBridge

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Share

🏢 LEI Search & Company Group Structure MCP Server

This MCP server gives Claude, ChatGPT, Cursor, VS Code and other MCP clients the Legal Entity Identifier (LEI) records of companies, funds, banks and public bodies worldwide. Its 8 read-only tools find an LEI from a name or a register number, read the full record, check up to 50 LEIs in one call, return the parents and subsidiaries an entity reports, resolve an ISIN or a BIC to its entity and list the changes made to a record. The data is the Global LEI Index, published by GLEIF under CC0. This server is independent: GLEIF, the Global LEI System and the LEI issuers do not provide, support or endorse it.

Ask Claude "Find the LEI of TotalEnergies SE, then tell me its ultimate parent and list its direct subsidiaries." It calls biz_search_entities with the name and the country FR, then biz_get_parents and biz_list_children with the LEI it found. You get the parent with its LEI and status, or the exception the entity reported with the reason in plain English, and the subsidiaries with country, category and status, 20 per page.

What this server exposes

This server gives an AI client eight read-only tools over the Global LEI Index, the public register of Legal Entity Identifiers that the Global Legal Entity Identifier Foundation (GLEIF) publishes under CC0. You can find an LEI from a company name, a business register number or a set of filters, with a fuzzy mode for approximate spellings. One tool reads a full LEI record: legal form, register, legal and head office addresses, renewal date, and the BIC, MIC and OpenCorporates identifiers. Another checks up to 50 LEIs in a single call. For group structures, the server returns the direct and ultimate parents of an entity (or the reason none is reported) and lists its subsidiaries. It also resolves an ISIN or a BIC to the entity behind it, lists the ISINs mapped to an issuer and shows how a record changed over time. No account or API key is needed. This is an independent service: it is not provided, supported or endorsed by GLEIF or by any LEI issuer.

Tools

ToolWhat it answersBilled event
biz_search_entitiesSearch legal entities by name or register numbertool-read
biz_get_entityGet the full LEI record of an entitytool-read
biz_check_leisCheck a batch of LEIstool-read
biz_get_parentsGet the direct and ultimate parents of an entitytool-action
biz_list_childrenList the subsidiaries of an entitytool-read
biz_find_by_identifierFind the entity behind an ISIN or a BICtool-read
biz_list_isinsList the ISINs mapped to an issuertool-read
biz_get_record_historyGet the change history of an LEI recordtool-read

Use this when you need the LEI of a company, fund or other legal entity from its name, its business register number or its country, or a list of entities matching filters (for example lapsed LEIs of funds in Luxembourg). Do not use for a known LEI (biz_get_entity), a batch of LEIs to check (biz_check_leis), or an ISIN or BIC (biz_find_by_identifier). Parameters: name (2 to 255 characters), match ("contains" legal name, default, "fulltext" any field, "fuzzy" typo tolerant), country (ISO alpha-2 of the legal address, e.g. "FR"), jurisdiction (e.g. "US-DE"), registered_as (business register number, exact), registration_status (e.g. "LAPSED"), entity_status ("ACTIVE" or "INACTIVE"), category (e.g. "FUND"). Give at least name, registered_as, country or jurisdiction. limit (1 to 50, default 10, at most 20 in detailed mode), offset, response_format ("detailed" adds addresses, other names, register number, legal form code, dates, BIC, MIC and OpenCorporates id). Data from the Global LEI Index (source GLEIF, CC0). Fuzzy matches are candidates to confirm, not proof of identity.

ParameterTypeRequiredExample
namestringno"TotalEnergies"
match"contains" or "fulltext" or "fuzzy"no"contains"
countrystringno"FR"
jurisdictionstringno"US-DE"
registered_asstringno"542051180"
registration_status"ISSUED" or "LAPSED" or "ANNULLED" or "PENDING_TRANSFER" or "PENDING_ARCHIVAL" or "DUPLICATE" or "MERGED" or "RETIRED"no"ISSUED"
entity_status"ACTIVE" or "INACTIVE"no"ACTIVE"
category"GENERAL" or "BRANCH" or "FUND" or "SOLE_PROPRIETOR" or "RESIDENT_GOVERNMENT_ENTITY" or "INTERNATIONAL_ORGANIZATION"no"FUND"
limitintegerno10
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { query, entities[], next_tools[], pagination, data_as_of, attribution }. Upstream: GLEIF. Cache: daily (1 day). Read-only.

biz_get_entity: Get the full LEI record of an entity

Use this when you have one LEI and need the entity behind it: legal name, other names, legal form, business register and number, legal and headquarters addresses, jurisdiction, category, entity and registration status, registration and renewal dates, LEI issuer, corroboration level, policy conformity flag, BIC, MIC and OpenCorporates id, and which parent, children and ISIN data exist. Do not use for finding an LEI from a name (biz_search_entities), checking many LEIs at once (biz_check_leis), or the parents and subsidiaries themselves (biz_get_parents, biz_list_children). Parameters: lei (20 characters, check digits verified first, e.g. "529900W18LQJJN6SJ336"), response_format ("concise" or "detailed" to add every other name, transliterated names, other addresses and other validation authorities). Legal form, register and LEI issuer names are looked up best effort and may be null. Data from the Global LEI Index (source GLEIF, CC0).

ParameterTypeRequiredExample
leistringyes"529900W18LQJJN6SJ336"
response_format"concise" or "detailed"no"concise"

Returns { entity, registration, identifiers, level2_links, next_tools[], data_as_of, attribution }. Upstream: GLEIF. Cache: daily (1 day). Read-only.

biz_check_leis: Check a batch of LEIs

Use this when you have a list of up to 50 LEIs (a counterparty or supplier file) and need to know which are well formed, which exist in the Global LEI Index, and their entity status, registration status (ISSUED, LAPSED, RETIRED and so on), next renewal date and policy conformity flag. Do not use for the full record of one LEI (biz_get_entity) or for finding an LEI from a name (biz_search_entities). Parameters: leis (1 to 50 strings, case, spaces and hyphens ignored, duplicates merged, e.g. ["529900W18LQJJN6SJ336"]), response_format ("concise" or "detailed" to add cache information). The format and check-digit results (ISO 17442) and the summary counts are computed by this server. Malformed LEIs cost no request. Data from the Global LEI Index (source GLEIF, CC0).

ParameterTypeRequiredExample
leisarray of stringyes["529900W18LQJJN6SJ336","984500X5JOBRID68DC59"]
response_format"concise" or "detailed"no"concise"

Returns { results[], summary, data_as_of, attribution }. Upstream: GLEIF. Cache: daily (1 day). Read-only.

biz_get_parents: Get the direct and ultimate parents of an entity

Use this when you need to know who owns or consolidates an entity according to its LEI data: the direct parent and the ultimate parent with their LEIs, names and statuses, the relationship type, status and periods, or, when no parent is reported, the reporting exception and its reason (for example NATURAL_PERSONS or NON_CONSOLIDATING) with a plain-English explanation. Do not use for subsidiaries (biz_list_children), for the full record of the parent (biz_get_entity with the parent LEI), or as a beneficial ownership register: Level 2 data covers accounting consolidation only. Parameters: lei (20 characters, e.g. "549300IUT8F6T4KV4469"), response_format ("concise" or "detailed" to add corroboration documents, renewal and validity dates). Data from the Global LEI Index (source GLEIF, CC0).

ParameterTypeRequiredExample
leistringyes"529900W18LQJJN6SJ336"
response_format"concise" or "detailed"no"concise"

Returns { entity, direct_parent, ultimate_parent, next_tools[], data_as_of, attribution }. Upstream: GLEIF. Cache: daily (1 day). Read-only.

biz_list_children: List the subsidiaries of an entity

Use this when you need the subsidiaries of a group from LEI data: the direct children (closest consolidated entities) or the ultimate children (every entity consolidated at the furthest level), with LEI, legal name, country, city, category and statuses. Do not use for the parents of an entity (biz_get_parents), for one subsidiary's full record (biz_get_entity), or for subsidiaries that report no LEI relationship: only reported accounting consolidation is covered. Parameters: lei (LEI of the parent, e.g. "5299002HNCMIUBHOMK35"), level ("direct", default, or "ultimate"), limit (1 to 100, default 20, at most 40 in detailed mode), offset, response_format ("concise" or "detailed" to add addresses, register number, legal form code, dates, BIC, MIC and OpenCorporates id). Data from the Global LEI Index (source GLEIF, CC0).

ParameterTypeRequiredExample
leistringyes"529900W18LQJJN6SJ336"
level"direct" or "ultimate"no"direct"
limitintegerno20
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { parent, level, children[], pagination, data_as_of, attribution }. Upstream: GLEIF. Cache: daily (1 day). Read-only.

biz_find_by_identifier: Find the entity behind an ISIN or a BIC

Use this when you have a security identifier (ISIN) and need its issuer, or a bank identifier (BIC or SWIFT code) and need the institution, with the LEI, legal name, country and statuses. Do not use for a company name (biz_search_entities), a known LEI (biz_get_entity), or the list of ISINs of an issuer (biz_list_isins). Parameters: exactly one of isin (12 characters, check digit verified, e.g. "US0378331005") or bic (8 or 11 characters, e.g. "DEUTDEFF", an 8-character BIC is completed with XXX), response_format ("concise" or "detailed" to add addresses, register number, dates and every BIC). ISIN coverage is limited to the ISIN-to-LEI mapping of participating numbering agencies (ANNA), mostly issues since 2019. BIC answers carry the SWIFT notice. Data from the Global LEI Index (source GLEIF, CC0).

ParameterTypeRequiredExample
isinstringno"US0378331005"
bicstringno"DEUTDEFF"
response_format"concise" or "detailed"no"concise"

Returns { identifier, entities[], next_tools[], data_as_of, attribution }. Upstream: GLEIF. Cache: daily (1 day). Read-only.

biz_list_isins: List the ISINs mapped to an issuer

Use this when you need the securities (ISINs) reported as issued by an entity, for example to measure exposure to an issuer, page by page. Do not use for the issuer of one ISIN (biz_find_by_identifier) or for prices or terms of the securities, which this server does not have. Parameters: lei (LEI of the issuer, e.g. "529900W18LQJJN6SJ336"), limit (1 to 200, default 50), offset, response_format ("concise" or "detailed" to add cache information). Coverage is the ISIN-to-LEI mapping of participating numbering agencies (ANNA), mostly issues since 2019, so a missing ISIN does not mean the entity issued none. For a sole proprietor (natural person) only the number of ISINs is given. Data from the Global LEI Index (source GLEIF, CC0).

ParameterTypeRequiredExample
leistringyes"529900W18LQJJN6SJ336"
limitintegerno50
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { issuer, isin_count, isins[], pagination, data_as_of, attribution }. Upstream: GLEIF. Cache: daily (1 day). Read-only.

biz_get_record_history: Get the change history of an LEI record

Use this when you need what changed in an LEI registration over time: legal name, addresses, register data, registration status, renewal, parent relationships or reporting exceptions, with the date and the old and new values, for KYC monitoring or an audit trail. Do not use for the current state of the record (biz_get_entity) or the current parents (biz_get_parents). Parameters: lei (20 characters, e.g. "529900W18LQJJN6SJ336"), record_type ("all" default, "LEI" entity and registration data, "RR" relationships, "REPEX" reporting exceptions), modification_type (optional: "INITIAL", "INSERT", "UPDATE" or "DELETE"), limit (1 to 100, default 25, at most 50 in detailed mode), offset, response_format ("concise" or "detailed" to add the full field path and context). Changes come in the order the source returns them. Values are cut at 200 characters. Data from the Global LEI Index (source GLEIF, CC0).

ParameterTypeRequiredExample
leistringyes"529900W18LQJJN6SJ336"
record_type"all" or "LEI" or "RR" or "REPEX"no"all"
modification_type"INITIAL" or "INSERT" or "UPDATE" or "DELETE"no"UPDATE"
limitintegerno25
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { entity, filters, changes[], pagination, data_as_of, attribution }. Upstream: GLEIF. Cache: daily (1 day). Read-only.

Connect

Endpoint (Streamable HTTP): https://mrbridge--business-identity-mcp.apify.actor/mcp

Every client authenticates with your Apify API token, found in Apify Console > Settings > API & Integrations. Clients that support custom headers send it as Authorization: Bearer <token>. The others use the ?token= URL variant, which must be treated as a secret: keep it out of commits, screenshots and shared logs.

Claude Code

$claude mcp add --transport http business-identity "https://mrbridge--business-identity-mcp.apify.actor/mcp" --header "Authorization: Bearer ${APIFY_TOKEN}"

Cursor, VS Code and other JSON configurations

{
"mcpServers": {
"business-identity": {
"type": "http",
"url": "https://mrbridge--business-identity-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer ${APIFY_TOKEN}"
}
}
}
}

claude.ai and Claude Desktop

Add a custom connector with the URL https://mrbridge--business-identity-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN and no authentication. Prefilled link (replace the token placeholder before saving): add LEI Search & Company Group Structure MCP Server to Claude.

ChatGPT (developer mode)

Settings > Apps > Create, URL https://mrbridge--business-identity-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN, authentication "No authentication". ChatGPT snapshots the tool list: after a server update, an admin has to click Refresh on the app.

OpenAI Responses API

{
"type": "mcp",
"server_label": "business_identity",
"server_url": "https://mrbridge--business-identity-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
},
"require_approval": "never"
}

Add allowed_tools to restrict the tool list. Tool calls must finish within about 60 seconds on this API, and every tool of this server answers in under 50 seconds.

Anthropic Messages API

{
"mcp_servers": [
{
"type": "url",
"url": "https://mrbridge--business-identity-mcp.apify.actor/mcp",
"name": "business-identity",
"authorization_token": "YOUR_APIFY_TOKEN"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "business-identity"
}
]
}

Send the beta header anthropic-beta: mcp-client-2025-11-20.

One-click OAuth alternative

https://mcp.apify.com/?tools=mrbridge/business-identity-mcp connects through Apify OAuth without a token. It exposes the Actor as a single tool rather than the granular tools listed above.

Cost control

Each Standby run has a spending limit (maxTotalChargeUsd). When a call uses the last of it, the result is still returned, and later calls in that run answer CHARGE_LIMIT_REACHED until the limit is raised.

Why use this server?

An LEI search page answers one name at a time. Counterparty and supplier files call for batch checks and group structures, and fund documents for the issuer behind a security code.

  • Fifty LEIs per call. biz_check_leis checks the format and check digits of each code, says which ones exist, and returns entity status, registration status, next renewal date and policy conformity flag, with summary counts.
  • Group structure in two calls. Direct and ultimate parents with relationship periods, then direct or ultimate subsidiaries, paged.
  • Misspelled names still match. The fuzzy mode of biz_search_entities finds candidates from one misspelt word.
  • Security and bank codes resolved. An ISIN leads to its issuer, a BIC to its institution, and biz_list_isins pages through the ISINs mapped to an issuer.
  • An audit trail per record. biz_get_record_history lists what changed (name, addresses, status, renewal, parent links) with dates and old and new values.
  • 🔌 Model Context Protocol over Streamable HTTP at a single endpoint, https://mrbridge--business-identity-mcp.apify.actor/mcp, for Claude, ChatGPT, Cursor, VS Code and the OpenAI and Anthropic APIs.
  • ⚡ Apify Standby mode. The first call after a quiet spell starts the server in about 5 seconds (4.7 s measured on the platform on 2026-10-05). Later calls skip that wait until the server has been idle for 5 minutes.
  • Licence notices travel with the data. Every answer carries the source, the CC0 licence, the retrieval date and the independence notice, plus the SWIFT notice whenever a BIC or a MIC is returned, so you can reuse the data correctly.

Pricing (Pay-per-Event)

EventCharged whenPrice
apify-actor-startrun start (platform default)see the Store page
tool-read (primary event)each successful read tool callsee the Store page
tool-actioneach successful call of a detailed or computed toolsee the Store page

Never charged: initialize, tools/list, pings, readiness probes, and any call that ends in an error (invalid input, not found, upstream failure, timeout, spending limit).

Platform usage comes on top of these events. This server runs in Apify Standby mode, and you also pay the platform usage of your own Standby run, billed to your Apify account like any other run: the memory set for the Standby run, for as long as the server is up, idle time included, until the run stops at its idle timeout. The Apify pay-per-event documentation says so: "For runs in Standby mode, users always pay the platform usage costs in addition to the event charges."

Limits, caveats and attribution

  • Source and attribution. Every answer carries an attribution block with the source (Global LEI Index, published by GLEIF), the CC0 licence, the GLEIF terms URL, the retrieval date and a few notices. CC0 does not require credit. The block is there so you can tell GLEIF data apart from what this server computes, such as check-digit results, summary counts, plain-English exception reasons and shortened field names.
  • No affiliation. This server is not a GLEIF service. GLEIF, the Global LEI System and the LEI issuers do not provide, support or endorse it. Only the LEI data comes from GLEIF, read through its public API.
  • BIC and MIC codes. SWIFT developed the BIC-to-LEI and MIC-to-LEI mappings and licenses them under its own agreements. Any answer that shows a BIC or a MIC carries the SWIFT notice those agreements require, word for word. The GLEIF API does not publish the version date of these tables, so the notice carries the month of retrieval, and a second notice says so. Keep the SWIFT notice with the codes when you reuse them.
  • ISINs. The ISIN-to-LEI mapping comes from ANNA, the ISIN registration authority. It covers the national numbering agencies that joined the programme, mostly for securities issued since 2019, so an issuer with no ISIN here may still have listed securities.
  • Parents and subsidiaries. Relationships are the accounting consolidation links that entities report themselves (LEI Level 2 data). They are not a register of beneficial owners. An entity can also report an exception instead of a parent, and the answer then gives the reason.
  • Sole proprietors. Records of natural persons are recognised by the SOLE_PROPRIETOR category, or by a sole-trader legal form when the category is empty. For them the server returns the LEI, legal form, country, jurisdiction, registration data and counts only. Names, addresses, register numbers, mapped identifiers (the ISIN list becomes a count) and past values are left out. A natural person whose record shows neither signal can slip through.
  • Search text. GLEIF treats a comma, a leading !, <, > or = and .. inside a filter as search operators. The server replaces them before searching, so "Facebook, Inc." is searched as "Facebook Inc.".
  • Not passed through. Some LEI records show an S&P CIQ Company ID. No redistribution licence is published for it, so the server drops it.
  • Accuracy. LEI issuers register the data from what each entity declares, and GLEIF gives no warranty on it. Treat a fuzzy name match as a candidate and confirm it against the name, address and register number.
  • Rate limit and freshness. GLEIF allows 60 requests per minute. The server keeps to 30 per minute. Records, relationships and search results are cached for one day, code lists (legal forms, registers, LEI issuers) for 30 days. GLEIF republishes its data three times a day, so a status shown here can be up to a day old.

Data terms

The LEI data returned by this server is under CC0 1.0 and the GLEIF LEI Data Terms of Use. When you reuse it:

  • Do not present your product, or this server, as provided, supported or endorsed by GLEIF or by an LEI issuer, and do not use the GLEIF name or logo in a way that suggests a link.
  • Keep the SWIFT notice with every BIC or MIC you pass on, as the BIC/LEI and MIC/LEI Mapping Table License Agreements require.
  • Label any value this server computed as yours, not as GLEIF data.

The fee for this server pays for the service (hosting, caching, checks and normalisation), not for a licence on the data.

Use cases

Counterparty file review. Paste 30 LEIs from a trade or supplier file and ask which ones are lapsed, retired or overdue for renewal. One biz_check_leis call answers for up to 50 codes.

Group mapping before a deal. "Who consolidates this entity, and which subsidiaries does the group report?" biz_get_parents gives the direct and ultimate parents, or the reported exception and its reason. biz_list_children pages through the subsidiaries, even for banking groups that report hundreds of them.

From a security to its issuer. A fund factsheet lists an ISIN. biz_find_by_identifier returns the issuer with its LEI, country and status, and biz_list_isins shows the other securities mapped to that issuer.

Name to LEI. You have a company name, maybe misspelt, or a business register number. biz_search_entities searches by exact name, full text, fuzzy match or register number, with filters on country, jurisdiction, category and status.

Monitoring changes. Before renewing a contract, ask what changed in the record over the last year. biz_get_record_history returns each change with its date and the old and new values.

Frequently asked questions

Do I need an account or API key for the LEI data?

No. The LEI data is public and needs no key. You need an Apify account with an API token, which every MCP client sends with its connection.

Two things are billed to your Apify account. First, the tool calls: $0.01 per successful call to biz_get_parents (an action) and $0.005 per successful call to any other tool (a read), so a batch check of 50 LEIs costs the same as a single lookup. These are the prices on the Apify Free plan, and the discounts of paid plans lower them. Errors, invalid input, unknown LEIs, the spending-limit refusal and protocol traffic (initialize, tool lists, pings) are never charged. Second, the platform usage of your own Standby run, on top of the events: the memory set for the run (256 MB) for as long as the server is up, idle time included, until it stops 5 minutes after your last call, plus a small start event per new run. A 10-minute review of 20 calls, 2 of them actions, comes to $0.11 in tool calls on the Free plan plus 1 to 2 cents of platform usage. Live prices for your Apify plan are on the Pricing tab, and maxTotalChargeUsd caps the event charges of one run.

Does this server meet my KYC or AML obligations?

No. It returns public LEI records to help you research an entity, and it is not a regulated screening or verification service. Checks your regulator expects, such as sanctions screening or beneficial ownership, stay your responsibility and need their own sources.

Are parents and subsidiaries the same as beneficial owners?

No. They are the accounting consolidation links that entities report with their LEI. When an entity reports no parent, the answer gives the exception it declared, for example that natural persons control it, with the reason in plain English.

How fresh is the data?

Records, relationships and search results are cached for one day, and code lists such as legal forms for 30 days. The source republishes its data three times a day, so a status can be up to a day old. Every answer gives its retrieval date.

What does the server not cover?

Entities without an LEI. ISIN links come from the participating numbering agencies and mostly cover securities issued since 2019, so an issuer with no ISIN here may still have listed securities. Sole proprietors come back without names, addresses or register numbers. VAT number checks are not included.

Why is my first call slow?

Cold start. After 5 idle minutes the server stops, and the next call waits about 5 seconds while Apify starts a new run. The parent and subsidiary tools can also take 7 to 8 seconds, because the server spaces its requests to respect the source's rate limit.

Is this server affiliated with GLEIF?

No. It is an independent service that reads the public LEI data through the GLEIF API and cites it as the source. GLEIF, the Global LEI System and the LEI issuers do not provide, support or endorse it.

Your feedback

Found a wrong record or a broken tool? Open an issue on the Issues tab and it will be looked at. More MCP servers, scrapers and data studies from the same team are on mr-bridge.com.

Changelog

  • 0.1.4: Output, dataset and key-value store schemas, as Apify asks for publication: the Output tab of a run started from the Console shows the connection details and one row per tool.
  • 0.1.3: the Input tab shows the endpoint and how to connect an AI client, and a run started from the Console outputs the connection details and the tool list
  • 0.1.2: pricing events tool-read and tool-action. biz_get_parents bills one tool-action event ($0.01 on the Apify Free plan), every other tool one tool-read event ($0.005), and paid plans pay less
  • 0.1.1: server name aligned with the Store title
  • 0.1.0: initial build (private, unpublished)