Skip to main content
Glama

lookup_lei

Read-onlyIdempotent

Look up a Legal Entity Identifier (LEI) via GLEIF — the global standard for entity identification. Returns legal name, registered address, status, parent + ultimate parent relationships, and child entities (subsidiaries). Also supports reverse lookup from a national company number to LEI across 15 countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Tier note (reverse mode only): NL and DE use paid upstream registries — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoNational company ID. Required when mode='reverse'.
leiNo20-character ISO 17442 Legal Entity Identifier. Required when mode='lei'.
modeYes'lei' = look up by LEI directly. 'reverse' = look up LEI from national company number.
countryNoISO 3166-1 alpha-2 country code, lowercase. Required when mode='reverse'.
include_relationshipsNoIf true, also fetch parent and child entities. Only applies when mode='lei'.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
leiNo20-character ISO 17442 identifier (mode='lei').
countNomode='reverse': number of LEI records found.
foundNomode='reverse': whether any LEI exists for the national ID.
sourceNo
statusNoEntity status, e.g. ACTIVE / INACTIVE.
recordsNomode='reverse': matching LEI records (same shape as a mode='lei' result).
fetchedAtNo
legalFormNoISO 20275 entity legal form code.
legalNameNoRegistered legal name (mode='lei').
jurisdictionNo
legalAddressNo
registeredAsNoNational registry identifier.
registrationNoGLEIF registration metadata (initial, lastUpdate, status ISSUED/LAPSED/..., nextRenewal).
relationshipsNoOnly present when include_relationships=true.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changed
    • addedOutput schema / properties / count
      Added value: +{
      +  "description": "mode='reverse': number of LEI records found.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / fetchedAt
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / found
      Added value: +{
      +  "description": "mode='reverse': whether any LEI exists for the national ID.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / headquarters_address
      Removed value: -{
      -  "additionalProperties": true,
      -  "type": "object"
      -}
    • addedOutput schema / properties / jurisdiction
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / legalAddress
      Added value: +{
      +  "additionalProperties": true,
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / legalForm
      Added value: +{
      +  "description": "ISO 20275 entity legal form code.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / legalName
      Added value: +{
      +  "description": "Registered legal name (mode='lei').",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / legal_address
      Removed value: -{
      -  "additionalProperties": true,
      -  "type": "object"
      -}
    • removedOutput schema / properties / legal_name
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / lei / description
      Previous value: -"20-character ISO 17442 identifier."New value: +"20-character ISO 17442 identifier (mode='lei')."
    • changedOutput schema / properties / lei / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / records
      Added value: +{
      +  "description": "mode='reverse': matching LEI records (same shape as a mode='lei' result).",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / registeredAs
      Added value: +{
      +  "description": "National registry identifier.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / registration / description
      Previous value: -"GLEIF registration metadata (initial date, last update, status)."New value: +"GLEIF registration metadata (initial, lastUpdate, status ISSUED/LAPSED/..., nextRenewal)."
    • changedOutput schema / properties / registration / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • addedOutput schema / properties / relationships / properties / children / additionalProperties
      Added value: +true
    • changedOutput schema / properties / relationships / properties / children / description
      Previous value: -"Known subsidiary LEI records."New value: +"Paginated subsidiaries: {total, page, totalPages, children: [LEI records]}."
    • removedOutput schema / properties / relationships / properties / children / items
      Removed value: -{
      -  "additionalProperties": true,
      -  "type": "object"
      -}
    • changedOutput schema / properties / relationships / properties / children / type
      Previous value: -"array"New value: +[
      +  "object",
      +  "null"
      +]
    • changedOutput schema / properties / relationships / properties / parent / description
      Previous value: -"Direct parent LEI record or null."New value: +"{directParent, ultimateParent, isUltimate}; directParent/ultimateParent are null for a top-level entity."
    • changedOutput schema / properties / relationships / properties / parent / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • changedOutput schema / properties / relationships / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • addedOutput schema / properties / source
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / status / description
      Previous value: -"ISSUED / LAPSED / RETIRED / etc."New value: +"Entity status, e.g. ACTIVE / INACTIVE."
    • changedOutput schema / properties / status / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses the returned data shape and adds a concrete failure mode: NL and DE require paid upstream registries, and free-tier keys get HTTP 402 'upgrade_required' with a do-not-retry instruction. This is exactly the kind of behavioral context annotations do not carry.

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 three sentences, front-loaded with the core purpose and return values, then reverse mode, then the critical error caveat. No filler or redundant restatement of the schema.

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 an output schema and rich annotations, the description covers purpose, modes, country coverage, return fields, and the one environment-specific error behavior. An agent has enough to invoke it correctly and know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description does not need to explain each parameter. It reinforces the mode/country relationship and relationship-fetching behavior, but adds no parameter-level detail beyond what the schema already provides; baseline 3 is appropriate.

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 opens with a specific verb and resource ('Look up a Legal Entity Identifier (LEI) via GLEIF') and immediately lists what it returns. It also covers the reverse lookup mode, which distinguishes it from sibling company-lookup tools even without naming them.

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?

It clearly states the two lookup modes and the 15 supported reverse-lookup countries, so an agent knows when the tool applies. It also gives an explicit do-not-retry rule for HTTP 402 in NL/DE, but it does not name sibling alternatives or state when another tool should be chosen.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.