findEntity
ChatGPTFind entity ID or multiple IDs from user-provided names or identifiers of organizations, Structured Finance deals or tranches, or find by criteria (including sector, region, size, or rating group). Default to the data parameter for names, natural-language criteria, and any identifier provided. Pass data verbatim; do not append or rewrite keywords. If the search target is known to be a Structured Finance deal ID, deal name, or tranche, set entityType to deals_and_programs. Priority: any request for a list of companies is a criteria search that this tool resolves, including ranked and superlative ones — "top 10 European airline companies", "largest US banks by revenue", "European airlines", "Baa-rated German utilities". Call findEntity for these and build the answer only from the entities it returns; an LLM's own knowledge of which companies belong in such a list is not a substitute and must not be used to produce, supplement, or reorder one. Pass the request verbatim in data with its ranking and count qualifiers intact ("top 10", "largest", "by revenue") — they are the only signal the query layer gets about how to sort and limit, and dropping them returns an unranked set. When the search produced a ranking, each entity carries a 1-based rank and the response carries sortedBy naming what it was ranked on; present the entities in rank order and state that basis, since "top" alone does not say by what. Do not re-sort a ranked set by your own judgment of which companies matter more. If fewer entities are returned than were asked for, report the shortfall rather than filling it in. When the request names how many entities to return (e.g. "give me 6 auto companies", "top 15 US tech companies", "list 200 European banks"), also pass that number as numberOfResults, even when it is smaller than the default of 100. This is in addition to leaving the count in data, not instead of it. Only omit numberOfResults when no quantity is requested. Constraint: findEntity must be invoked exactly once per user query, regardless of how many entities need to be resolved. Combine all entity names into a single data parameter value. Multiple sequential findEntity calls for the same query are not permitted and will degrade performance.
getEntityBeneficiaryOwners
ChatGPTFor a given entity ID, retrieve Beneficial Owners (BO) - all entities or persons that hold direct or indirect ownership/control. An optional ownership threshold can be specified (10/10%, 10/50%, or 25/25%); when omitted the legacy EVA beneficial owners dataset is used. BO information includes: BO name, country, distance (from given entity) and type (corporate, individual, etc.) BO Status (this field summarizes the situation within ownership database on beneficial owners and other ultimate beneficiaries computed for the given entity.) * Direct and total ownership percentage. Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
getEntityBranches
ChatGPTRetrieve for a given entity the list of its branches (operating locations that are not separate legal entities): Branch name Branch BvD ID Branch country Branch city The branch BvD ID identifies the branch itself in Moody's company data system, and is a reference for lookups there only. It is not an entityId and cannot be passed to other tools: branches are not separate legal entities and carry no orgId, so an entityId built from one resolves to nothing rather than failing loudly. The column is omitted entirely when no branch in the result has an ID. Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
getEntityFinancials_v2
ChatGPTRetrieve detailed financial statements, key indicators, and financial ratios for entity IDs to analyze: Income statement (revenue, expenses, net income) Balance sheet (assets, liabilities, equity) Cash flow statement (operating, investing, financing activities) Key indicators and financial ratios (profitability, leverage, coverage and return metrics), via the key_indicators and all_ratios sections Historical performance trends and financial profile evolution Requests for a financial ratio or key metric are valid uses of this tool, not only requests for raw financial statement line items. This tool returns the latest available financials. getCreditOpinion returns the financials as published in a Moody's research report at its publication date; prefer this tool unless the user explicitly wants the figures as they appeared in that report. For non-banking entities, fetches from two sources in parallel, selecting whichever has the most recently updated data, defaulting to the most recent 5 years. Falls back to a secondary source (prior 3 years) if both are unavailable. For Financial Institutions (Banks), returns banking-specific data, defaulting to the prior 5 years. For adjusted financials, uses the primary source only. When no filterCriteria or prompt is provided, returns key indicators only. Pass filterCriteria {} to return all sections and account names for the most recent 5 years. Optional prompt (e.g. "total assets and net income for last 3 years in EUR") or filterCriteria can be used alone or combined to narrow results. When both are supplied, filterCriteria wins on all fields except accountNames for banking entities, where LLM-resolved names from the prompt take priority. Set reportingBasis when the user names a reporting basis: "reported" for as-filed figures, "adjusted" for Moody's adjusted figures. Omit it to return both. Applies to the Moody's source only; banking entities ignore it. Per-source filter support: Moody's: periods, currencies, sections, accountNames, scale, reportingBasis * Banks: periods (incl. LQ/LQ-1), currency (first value used), scale, accountNames, sections; no half-year/LTM/YTD Interim periods (half-year, quarterly, LTM, YTD) refer to the calendar year, not the entity's fiscal year. Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
getEntityPeers
ChatGPTRetrieve peer entities for a given entity ID. When peers are requested but no specific number is provided, the tool defaults to 5 peers per entity. Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
getEntityProfile
ChatGPTFor a given entity ID, retrieve firmographic information about the entity, including: Legal company name, previous company name(s) and name change date(s), and alternative/ "also known as" (AKA) names Contact information (registered address, telephone number and website) Identifiers (Trade register number, VAT, LEI, Local National Identifiers) Legal information (legal form, status, date of incorporation) Standard Industry classifications (NACE, NAICS and US SIC), business description Number of employees Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
getEntitySegmentFinancials
ChatGPTGet segment financials to answer questions about an entity's revenue, profit, and asset breakdown by segment (geographical, product, business, etc.). Data is sourced from the Moody's segment data tab API (industry, business, and geographic breakdowns). By default, returns the most recent 5 fiscal years of annual (YE) data. Not all companies have segment data; some report only a subset of account lines. Period filtering uses filterCriteria (aligned with getEntityFinancials_v2): - Specific years: filterCriteria: { periods: ["2024", "2023"] } - Specific quarters: filterCriteria: { periods: ["Q1 2024", "2024Q3"] } - Half-years: filterCriteria: { periods: ["H1 2024"] } - Relative quarters: filterCriteria: { periods: ["LQ", "LQ-1"] } (LQ is the most recent quarter available in the entity's data, LQ-1 the next, etc.) - Mixed: filterCriteria: { periods: ["Q1 2025", "2024", "H1 2024"] } - Annual only: filterCriteria: { excludeInterimData: true } (default when omitted) - Include interim: filterCriteria: { excludeInterimData: false } (with or without periods) LTM and YTD are not supported. Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
getEntityShareholders
ChatGPTRetrieve for a given entity details about its shareholders (owners at the first / direct level): Shareholder name, BVD ID, country and type (corporate, individual, etc.) Direct and total ownership percentage held by each shareholder in the entity * Information date and source Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
getEntitySubsidiaries
ChatGPTRetrieve subsidiaries for a given entity, including: Aggregate information for the searched entity (direct subsidiary count, corporate group size, key subsidiaries) Subsidiary details such as legal name, location, entity type, and ownership percentages Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
getEntityUltimateOwners
ChatGPTFor a given entity ID, retrieve the Global Ultimate Owner (GUO) — the entities or persons at the top of the ownership chain who control the company through an ownership stake meeting the minimum threshold. The minimum ownership threshold defaults to 50.01% and can be lowered to 25.01%. GUO information includes: GUO name, BVD ID, country and type (corporate, individual, etc.) Direct and total ownership percentage * Information date and source Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
searchCompanyFilings
ChatGPTSearch company filings and earnings call materials: annual (e.g. 10-K/20-F), interim (e.g. 10-Q/6-K), or earnings_call_transcript. You may combine multiple filing types as separate entries. A non-empty query string is required to search document content. Search returns semantic chunks from upstream; citation URLs come from the AIDI endpoint. Optional reportYears (four-digit strings, e.g. "2025") and optional reportQuarters ("Q1"–"Q4") scope the search. For earnings call types, these are fiscal year and quarter (available from 2020 onward). reportQuarters applies to interim and earnings call types and must be combined with reportYears; it is ignored for annual filings and when no reportYears is provided. When either is omitted, the latest available report is returned. results is always an array. When documents are still ingesting upstream, you get one row per requested entity with the same fields as getCompanyFilings for an ingesting response (title, text, status, message, metadata), plus entityId, and the polling guidance in text / message. When the search returns no hits for an entity, you get one not_found row per such entity with that same shape as getCompanyFilings when no filing exists (entityId, title, text, status, message, empty metadata). If the tool reports that filings are being ingested, that indicates ingestion is in progress, not a generic error—the files are typically ready in approximately 3 minutes. For MCP servers and clients: when you receive that ingestion-in-progress message, keep calling this tool with the same inputs every 30 seconds until it returns a normal successful result, then stop polling. When multiple filing types are requested (e.g. annual and interim together), each upstream search runs as a separate HTTP call to the filings service. Note: This tool requires entity ID(s) in the Base64URL-encoded entityId produced by the findEntity tool. If the input to this tool does not include a valid entity ID from the findEntity tool, you must first call the findEntity tool to search for and obtain the appropriate Base64URL-encoded entityId(s). findEntity must be called at most once per user query — if multiple entities need to be resolved, include all entity names in a single findEntity call rather than making separate calls for each entity.
searchNews
ChatGPTSearch for news articles using entity IDs, keywords, or both (at least one required). Track developments, identify trends, and monitor narratives for entities or topics. Important — subjectCodes and searchType: If you pass subjectCodes and at least one value resolves to a news taxonomy ID, the run is always keyword-only (Boolean subject filter). Any requested hybrid or semantic searchType is overridden for that call; omit subjectCodes when you must keep hybrid or semantic. A warning is logged when a non-keyword searchType was requested and overridden. Time Period: Specify dateRange (exact dates) or timeRange (preset like past7days). dateRange overrides timeRange. Default: past30days. Time period is helpful when you want to search for news articles that are within a specific time period. timeFilterField: Which date field time range filters apply to. received_date: filter by when the article was ingested. publication_date: filter by when the article was published. Default: publication_date. sortBy: Specifies the field by which the client wants articles to be sorted. Independent of timeFilterField. Options: relevancy (default; sends no sort_by, so the news provider applies its own default ordering, newest first), recency (newest by publication date), received_date, or publication_date. Entity importance (optional): Per entity, mention vs significance sets the minimum entity-article relevance. The minimum is applied by the keyword search only; with searchType hybrid or semantic, results can also include articles tagged with the entity that score below it. Use searchType keyword when every result must meet the minimum. Subject codes (optional): subjectCodes narrows results to validated news taxonomy IDs; only pass when the user explicitly asked for specific subjects—do not invent codes. If every code is invalid after validation, the tool returns no news (no widening to the default subject universe). When codes resolve, searchType is forced to keyword (see important note above). Relaxed retry: if a search using subjectCodes or importance returns no articles, it is retried once with those filters dropped. Results in that case are broader than requested, so do not present them as satisfying the subject or relevance constraint. Usage Patterns: Entity-specific: Search news for specific entities. If entity IDs are not provided, call the findEntity tool first to obtain the required entity IDs. Topic-based: Search by query/keywords only without entity IDs for general news on any topic. * Combined: Use both to filter entity news by keywords.