Skip to main content
Glama

EU Annual Reports API (ESEF): XBRL financial statements

esef_annual_reports
Read-onlyIdempotent

Get normalized key financials from the official ESEF annual reports of European listed companies, by LEI, company name, country or fiscal year: revenue, EBIT, EBITDA, net income, EPS, dividends, balance sheet and cash flows, plus margins, return on equity and revenue growth versus the prior year. Every number comes with the exact XBRL fact it was taken from and a link to the annual report viewer, so you can audit any value in one click. For equity analysts, finance apps and AI agents that need comparable numbers for European listed companies.

Price: $0.05 per filing-processed.

Input Schema

NameRequiredDescriptionDefault
leisNoLegal Entity Identifiers (20 letters/digits), e.g. ["724500Y6DUVHQD6OXN27"] for ASML: the most precise lookup, any country
periodToNoFiscal year ending on or before this date, YYYY-MM-DD, e.g. "2024-12-31"
countriesNoFiling countries as ISO 3166 alpha-2 codes, e.g. ["NL", "BE", "FR"]; also SE, DK, FI, NO, IT, ES, GB and others
maxFilingsNoMaximum annual reports, newest fiscal period first, e.g. 1 for a company's latest report
periodFromNoFiscal year ending on or after this date, YYYY-MM-DD, e.g. "2024-01-01"
companyNameNoCase-insensitive part of the registered company name, e.g. "heineken" or "lvmh"; can match several companies, so check `company_name` in the output
includeRawFactsNotrue = also output every tagged XBRL fact of each report as its own row (record_type = "fact"), charged per fact row

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-schema behavior: pricing at $0.05 per 'filing-processed', per-fact-row charging for includeRawFacts, and provenance (every number carries the exact XBRL fact plus a viewer link), which tells the agent results are auditable. It does not disclose result-size or truncation behavior beyond the maxFilings cap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core verb and resource, then metrics, then provenance, then pricing – a sensible priority order. Some filler is present ('so you can audit any value in one click', the audience sentence) that restates rather than informs, but nothing is seriously bloated.

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

Completeness4/5

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

A read-only, all-optional-parameter query tool with full schema coverage and no output schema. The description compensates for the missing output schema by naming the returned metrics and the fact/record_type structure exposed via includeRawFacts, and it covers pricing. Only gap is fetch limits and result volume, which are partially handled by the maxFilings schema field.

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?

With 100% schema description coverage the baseline is 3, but the description adds cost semantics the schema lacks: includeRawFacts produces one row per tagged fact and is 'charged per fact row', which materially affects how an agent should set that flag. It also reinforces the LEI-first lookup strategy ('the most precise lookup, any country') that the schema only hints at.

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?

States a specific verb and resource ('Get normalized key financials from the official ESEF annual reports of European listed companies') and enumerates the lookup keys (LEI, company name, country, fiscal year) plus the metrics returned (revenue, EBIT, EBITDA, net income, EPS, margins, ROE, growth). The geographic scope ('European listed companies') implicitly separates it from the sibling sec_company_financials, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the audience line ('equity analysts, finance apps and AI agents that need comparable numbers for European listed companies') and by the statement that LEI is 'the most precise lookup, any country', which is really schema text. There is no explicit when-not guidance and no named alternative such as sec_company_financials for US issuers or company_accounts for national filings, so the routing decision is left to inference.

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.