MCP App Store
by KeenEthics

Overview

Integrate Morningstar's comprehensive investment data and independent research directly into your AI workflows. Through our MCP-powered connector, clients can explore cross-asset coverage, including funds, equities, and beyond, enhanced by forward-looking insights from our global analyst teams. Access trusted, unbiased intelligence to support investment decisions, due diligence, and portfolio strategy in one seamless experience.

Tools

AdvisorAssist

ChatGPT
Tool for handling queries related to the Direct Advisory Suite. Supports: - Investment Plan and Proposal creation - Client and Group management activities - Portfolio management and related functionalities Tool invocation rules (strict): - Do NOT call other tools or trigger any actions automatically. - Wait explicitly for the user to provide a clear request before proceeding. - NEVER assume the next step or preemptively create investment proposals or queries. - If the tool receives no user command, it must remain idle and refuse to proceed. - Any automatic or unsolicited calls must be flagged as a violation and halted immediately. Parameters: request: QueryRequest object containing the user query string and session_id query (str): The user query to be explicitly processed session_id (str): The session ID for the conversation thread. Pass empty string "" on the first call. On subsequent calls, pass the session_id returned from the previous response to maintain conversation context. NEVER ask the user for a session_id - always manage it automatically. Workflows: - To create a portfolio, provide holdings as a list in otherDetails (each holding has keys: 'identifier', 'marketvalue', 'quantity', 'holding_name'). identifier accepts ticker, security name, CUSIP, or ISIN — ID resolution is handled internally. Guidelines for responses: - Use concise and direct natural language strictly responding to the user query. - Do NOT add unsolicited suggestions or initiate tasks without user command. - Keep responses brief (1 to 3 sentences max). Formatting guidelines: - Use Markdown for all responses. - Use headings (##) for major sections (e.g., "Summary", "Next Steps"). - Use bullet points for lists of items. - Use tables for structured portfolio data. - Use fenced code blocks (``json ... ``) for JSON or technical outputs. - Use blockquotes for callouts: > ⚠️ Warnings > ✅ Success > ℹ️ Information

controversial_weapons_radar_methodology_skill

ChatGPT
Morningstar Sustainalytics' Controversial Weapons Radar (CWR) methodology (Version 1.1, September 2024). Use this skill only when the user asks how the methodology works. Do not use this skill when the user asks which companies are involved in controversial weapons or for a specific company's involvement data (use the data/query tools for that instead). Appropriate triggers include the six covered weapon types (anti-personnel mines/landmines, biological and chemical weapons, cluster weapons/munitions, nuclear weapons, depleted uranium, white phosphorus) and their treaty basis (Ottawa Mine-Ban Treaty, BTWC, CWC, Convention on Cluster Munitions, Tlatelolco, NPT, TPNW), the Key and/or Dedicated Criteria, Main Product Type (core weapon system, supporting system, technical/administrative support), Main Activity Type, direct vs indirect involvement, ownership thresholds (10%/50% of voting rights), Categories of Involvement, involvement additions and removals, corporate actions (M&A, spin-offs, bankruptcy), issuer feedback for removal, why CWR provides no revenue figures, the fighter-jet/delivery-platform exclusion and the nuclear-triad exception, country-level convention signature data, the quarterly update cycle, and the five-step research process. Trigger even when users describe these concepts without naming them explicitly (e.g., "how does Sustainalytics decide a company is a cluster-bomb maker?", "why is this company flagged through its parent?", "are fighter jets controversial weapons?", "how does a company get off the controversial weapons list?"). Do not trigger for questions like "which companies produce landmines?" or "is company X involved in nuclear weapons?". The original PDF is bundled in assets/ and may be served to clients on request.

controversy_ratings_methodology_skill

ChatGPT
Morningstar Sustainalytics' Controversy Ratings methodology (Version 2.0, Iteration 2, April 2026). Use this skill only when the user asks how the methodology works. Do not use this skill when the user asks for actual controversy scores, ratings, or incident data for a specific company (use the data/query tools for that instead). Appropriate triggers include controversy categories, controversy indicators, event indicators (and their descriptions), incident chains, double materiality, impact event assessment, risk event assessment, financial materiality factor, financial health risk factor, decay, severity-based weighting, Weighted Incident Chain Score (WICS), category change scenarios, methodology scope and limitations, methodological approach, research approach, company engagement, benchmarking, governance/review/market consultation, methodology revisions, Article 29b (Directive 2013/34/EU) topic mapping, EU ESG Ratings Regulation 2024/3005, ineligible incidents (e.g., contiguous territorial disputes), source eligibility, or how Sustainalytics scores ESG controversies. Trigger even when users describe these concepts without naming them explicitly (e.g., "how do you rate ESG incidents?", "explain how an oil spill turns into a controversy score", "what's the difference between impact and risk in an event", "what does Sustainalytics' weapons controversy indicator cover?"). Do not trigger for questions like "what's company X's controversy score?" or "show me incidents for Tesla". The original PDF is bundled in assets/ and may be served to clients on request.

download_file_tool

ChatGPT
Expose a skill's binary asset (e.g. a methodology PDF) as a download URL. This is the binary-file branch of skill retrieval: when a *_skill tool lists a binary reference, it instructs you to call this tool with that asset's absolute path. The file is made downloadable via the server's /files/{path} route and the URL is returned. The URL is signed and short-lived (expiry noted in the result) — share it promptly; if it has expired, call this tool again for a fresh one. Only call this with a path handed to you verbatim by a skill tool. The server serves nothing but the assets bundled with its skills; any other path is refused. Args: path: Absolute path to a skill asset, exactly as given by the skill tool that referenced it. Returns: A string containing the download URL, size, and content type

ghg_emissions_methodology_skill

ChatGPT
Morningstar Sustainalytics' Greenhouse Gas (GHG) Emissions methodology (Version 1.2, May 2026). Use this skill only when the user asks how the methodology works. Do not use this skill when the user asks for actual emissions data or scores for a specific company (use the data/query tools for that instead). Appropriate triggers include the Multi-Metric Multi-Factor (MMMF) Framework, GHG estimation engines, computation engines, carbon emissions estimation logic, subindustry segments, country factors, emissions data cleaning rules, the 80th percentile rule, fiscal year matching for emissions, related-entity treatment, restatements, Data Reporting Reliability Indicators (the 1–5 reliability scale), methodology scope and limitations, methodology governance/review/consultation, or how Sustainalytics computes/imputes/estimates company emissions. Trigger even when users describe these concepts without naming them explicitly (e.g., "how do you estimate Scope 3 for a company that doesn't report?", "what factors go into the carbon engine?", "how reliable is this emissions figure?", "is this number reported or estimated?"). Do not trigger for questions like "what are company X's emissions?" or "give me Scope 1 for Tesla". The original PDF is bundled in assets/ and may be served to clients on request.

global_standards_screening_methodology_skill

ChatGPT
Morningstar Sustainalytics' Global Standards Screening (GSS) methodology (Version 1.0, Iteration 2, effective 7 April 2026). Use this skill only when the user asks how the methodology works. Do not use this skill when the user asks for a specific company's GSS assessment, watchlist status or incident data (use the data/query tools for that instead). Appropriate triggers include the Non-compliant / Watchlist / Compliant assessment categories, UN Global Compact (UNGC) Principles screening, norms-based screening, the 99 Issue Names and their mapping to the ten UNGC Principles, OECD MNE Guidelines and UN Guiding Principles (UNGPs) referencing, the two assessment dimensions (Severity of Impact and Company Management), impact factors (scale, scope, irremediability, accountability, exceptionality, negligence, duration, systematic/systemic violations), Low/Medium/High/Severe impact levels, management confidence levels, upgrade criteria and upgrade/downgrade paths, the Controversies and Standards Oversight Committee (CSOC), the GSS Outlook (12-24 month trajectory), corporate ownership rules (50%/20% thresholds, parent/subsidiary/sibling responsibility), state-owned enterprises and the Freedom House country criteria, the Controversial Weapons Radar input under Principle 2 (including the five designated nuclear weapons states rule and the arms trade framework), sanctions issues, contiguous territorial disputes (ineligible incidents), source eligibility (two-source rule, three-year recency), engagement policy, assessment validity/withdrawal, Article 29b Directive 2013/34/EU topic mapping, EU ESG Ratings Regulation 2024/3005, or methodology governance/review/market consultation/revisions. Trigger even when users describe these concepts without naming them explicitly (e.g., "why is this company non-compliant with the Global Compact?", "how does a company get off the watchlist?", "does a parent inherit its subsidiary's violation?", "how does Sustainalytics treat state-owned companies in repressive countries?"). Do not trigger for questions like "what is company X's GSS status?" or "which companies are on the watchlist?". The original PDF is bundled in assets/ and may be served to clients on request.

mcp_server_documentation_skill

ChatGPT
Documentation for this Sustainalytics UDP MCP server itself — what the server is, the full catalogue of tools it exposes (company/ESG data query tools, methodology skill tools, file download), and how the tools are meant to be used together. Use this skill when the user asks what this server or assistant can do, what tools/datasets/skills are available, which tool fits a task, how to look up a company, find a data field, or fetch historical values, or why a result looks the way it does (empty results, entity resolution, date ranges) — or to orient yourself before choosing between tools. Call with no arguments for the overview and complete tool index; load references/data-tools.md, references/methodology-skills.md, or references/utility-tools.md for parameter-level detail. Do NOT use this skill to answer actual data questions (call the data tools themselves) or questions about how a Sustainalytics methodology works (call that methodology's own skill tool) — this skill documents the server; it contains no company data and no methodology content. The running server version is 0.1.7 — answer version questions straight from this sentence, no tool call needed.

morningstar-analyst-research-tool

ChatGPT
The Morningstar Analyst Research Tool enables users to access detailed, forward-looking research reports on individual stocks, open-end mutual funds, and ETFs. For stocks, the tool provides comprehensive analysis covering business strategy and outlook, Bulls Say/Bears Say perspectives, economic moat analysis, fair value assessment, risk and uncertainty evaluation, capital allocation analysis, and recent analyst notes and updates. For funds and ETFs, it delivers Morningstar's Medalist Pillar assessments evaluating investment strategy (Process), manager quality (People), asset manager strength (Parent), historical performance, and expense structure (Price). The tool supports research for major domiciles including the USA, Canada, Japan, Australia, France, China, Luxembourg, and many more, but is limited to the latest published report. Use this tool when you need comprehensive and up-to-date Morningstar analyst analysis on specific stocks, open-end funds, or ETFs.

morningstar-articles-tool

ChatGPT
Use this tool to answer questions about the latest general financial market news, investing themes, personal finance, and sector or asset class comparisons based on articles written by Morningstar’s editorial team. Choose this tool when you need commentary, trends, or analysis on broad markets, events, investment strategies, official Morningstar methodology, or educational content on investment concepts, specifically as covered by Morningstar from 2022 onwards. This tool is best when you need general financial explanations directly derived from Morningstars official editorial perspective. This tool provides research at a broad level and is not suitable for retrieving specific data points or detailed investment-level analysis.

morningstar-data-tool

ChatGPT
This tool is best used when you need to retrieve specific, structured quantitative metrics for individual securities, such as stocks or funds, using Morningstar’s data. It requires a valid investment ID and a datapoint ID, which can be obtained using only the Morningstar ID Lookup Tool. The tool supports querying for a growing list of datapoints (currently over ~500 datapoints), and can also provide data for select historical periods where available. Use this tool when you need precise investment-level values for a security, but note that the historical data coverage varies depending on the datapoint. If providing a date range for historical data, both start_date and end_date must be provided.

morningstar-data-visualization-tool

ChatGPT
Use this tool to render a line chart whenever the user asks to graph, chart, plot, or visualize time-series data. It accepts data as a list of row objects and returns an interactive chart.

morningstar-fund-holdings-tool

ChatGPT
Use this tool to retrieve the detailed portfolio composition of a managed investment, specifically their largest holdings and the percentage allocation to each holding. Always call this tool after morningstar-id-lookup-tool when the user asks what a fund holds, what's inside it, or to break it down — the ID lookup alone does not return holdings data. The tool allows you to specify how many top holdings to return (between 10 and 100) and can process requests for multiple funds at once, as long as you have the relevant Morningstar investment IDs. This tool is suitable for analyzing fund transparency, portfolio concentration, and understanding how assets are distributed among underlying securities. Only applicable for Exchange-Traded Funds (FE), Open End Funds (FO), Closed End Funds (FC), and Collective Investment Trusts (CZ).

morningstar-id-lookup-tool

ChatGPT
Use the Morningstar ID Lookup Tool to map investment tickers, security names, ISINs, or datapoint names to their corresponding Morningstar internal IDs. This tool is the primary way to convert investment and datapoint information into standardized identifiers required for other tools to work properly. The input to the tool must be the extracted investment tickers, investment names, or ISINs, datapoint names from the user's query. Provide at least one of: investment_identifiers or datapoints. Currently the tool only supports: Stocks (ST), Exchange-Traded Funds (FE), Open End Funds (FO), Closed End Funds (FC), and Collective Investment Trusts (CZ). The investment_type field in results indicates the matched security type. If results do not match the expected type, retry with a more specific or differently worded identifier.

morningstar-portfolio-analysis-tool

ChatGPT
Use this tool to analyze a portfolio of holdings or a fund using Morningstar X-Ray API. Accepts either a custom portfolio (stocks, ETFs, funds, or cash) with weights summing to 100%, or a single fund ID to analyze a fund's underlying holdings. Use the analysis_type parameter to select a specific slice of the analysis, such as asset allocation, equity characteristics, fixed income breakdown, stock intersection, top holdings, or returns data.

morningstar-screener-tool

ChatGPT
Find investments matching specific criteria across: Stocks, Exchange-Traded Funds, Open End Funds, Closed End Funds, Collective Investment Trusts. This tool filters investments based on quantitative attributes using simple comparison operations. All criteria provided are combined with AND logic (all must match). For complex queries requiring OR logic (e.g., rating=4 OR rating=5), make separate tool calls and combine results. Workflow: 1. Use morningstar-id-lookup-tool to get datapoint IDs 2. Call this tool with universe and list of criteria 3. For OR conditions, make multiple calls and merge results Important: Handling Datapoint Values: The morningstar-id-lookup-tool provides a list of possible values for datapoints. - If the list is complete (has_more_values=False): Use an exact match from the list. - If the list is incomplete (has_more_values=True): Use the provided values as a reference and send your best effort guess for the value. Results are automatically paginated with 200 results per page to prevent context overload. Default Sorting: - Stocks (ST), ETFs (FE), Closed-End Funds (FC), Collective Investment Trusts (CZ): Descending by Morningstar Rating - Open-End Funds (FO): Descending by Fund Size Pagination: - Results are limited to 200 per page - If total_result_count > 200, use pagination_token_next with pagination_action="next" to fetch the next page - Use pagination_token_previous with pagination_action="prev" to fetch the previous page - All other parameters (universe, criteria) must remain identical when paginating - The API returns sorted results, so pagination maintains sort order

morningstar-security-ownership-tool

ChatGPT
Use this tool to identify which funds own a security, analyze portfolio concentration, and understand changes in ownership over time. Use limit to control the number of funds returned.

product_involvement_methodology_skill

ChatGPT
Morningstar Sustainalytics' Product Involvement (PI) methodology (Version 2.1, May 2026). Use this skill only when the user asks how the methodology works. Do not use this skill when the user asks for a specific company's product involvement data, revenue percentages or screening results (use the data/query tools for that instead). Appropriate triggers include the six Involvement Themes (Energy, Environment, Defense & Military, Business Practices, Health, Values-based), the 28 Product Involvement Metrics and their 68 distinct types of involvement, Direct vs Indirect Involvement, business ownership rules (Controlling Interest >50%, Minority Interest 10-50%, Insignificant Interest <10%, Significant Ownership), Binary Involvement and the six binary activity classes, Revenue-based Involvement and the revenue ranges (0-4.9%, 5-9.9%, 10-24.9%, 25-49.9%, 50-100%), Capacity-based Involvement and the four capacity metrics, the reported/precise-estimation/midpoint-estimation hierarchy, non-mutually-exclusive revenues across metrics, the Most Significant Involvement (MSI) rule and scoring hierarchy, Multiple Involvements, the research process (company screening with the Crawler, metric identification, involvement type classification, level of involvement determination, information transfer), engagement, datapoint validity and timeframe (the 24-month rule), datapoint withdrawal, or methodology governance/review/market consultation/revisions. Trigger even when users describe these concepts without naming them explicitly (e.g., "how does Sustainalytics decide a company is involved in tobacco?", "what revenue share puts a company in the highest involvement bucket?", "does a parent inherit its subsidiary's gambling involvement?", "how are revenues estimated when a company doesn't disclose them?"). Do not trigger for questions like "what is company X's oil & gas involvement?" or "which companies have tobacco revenues above 5%?". Definitions, involvement types and inclusions/exclusions for each individual metric are covered by the companion Product Involvement Metric Guidelines skill. The original PDF is bundled in assets/ and may be served to clients on request.

product_involvement_metric_guidelines_skill

ChatGPT
Morningstar Sustainalytics' Product Involvement (PI) Metric Guidelines (client guidelines compilation, June 2026) covering all 28 Product Involvement Metrics. Use this skill when the user asks what a specific Product Involvement Metric covers or how a specific metric is defined — its definition, the business activities included or excluded, its types of involvement and Type IDs (e.g. AB1, GB3, MC5, OG7, TC5), the applicable revenue ranges or proxy per involvement type, its ESG relevance rationale, indirect involvement through ownership, or its per-metric change log. The 28 metrics are Abortion, Adult Entertainment, Alcoholic Beverages, Animal Testing, Arctic Oil & Gas Exploration, Cannabis, Contraceptives, Controversial Weapons, Fur & Specialty Leather, Gambling, Genetically Modified Plants & Seeds, Human Embryonic Stem Cells, Metallurgical Coal, Military Contracting, Nuclear Power, Oil Sands, Palm Oil, Pesticides, Pork Products, Predatory Lending, Private Prisons, Riot Control, Small Arms, Oil and Gas, Shale Energy, Thermal Coal, Tobacco Products, and Whale Meat. Trigger for questions like "what counts as gambling involvement?", "does the tobacco metric include e-cigarettes?", "which weapon types are controversial weapons?", "is trading excluded from the coal metrics?", "what is suspected involvement in animal testing?", "what does GB1 mean?". Do not use this skill when the user asks for a specific company's involvement data or screening results (use the data/query tools for that instead), and for questions about the overall Product Involvement methodology mechanics (revenue estimation hierarchy, Most Significant Involvement rule, research process, governance) prefer the companion Product Involvement Methodology skill. The original PDF is bundled in assets/ and may be served to clients on request.

sustainalytics_available_data_tool

ChatGPT
List the research product datasets available to the current user. Returns the datasets the user has permission to access, enriched with metadata from the dataset catalog. Use the returned dataset_name values in sustainalytics_data_discovery_tool to search or list fields within a dataset. sustainalytics_exact_data_tool does not take a dataset_name — it resolves each field's dataset automatically from the udp_field_id. Output schema Returns a JSON string: ``json { "datasets": [ { "dataset_name": "Controversy Product Dataset", "dataset_type": null, "research_product_id": 12, "current_data": true, "historical_data": true }, { "dataset_name": "Carbon Emissions Time Series Product Dataset", "dataset_type": "time_series", "research_product_id": 70, "current_data": true, "historical_data": true } ], "count": 4 } ` Fields: - dataset_name (string): pass this value as dataset_name in sustainalytics_data_discovery_tool. - dataset_type (string | null): null for standard datasets, "time_series" for historical time-series datasets where date ranges map to reporting years. - research_product_id (int): internal product identifier. - current_data (bool): whether the user can query current (latest) values for this dataset via sustainalytics_exact_data_tool (latest_data=true). - historical_data (bool): whether the user can query historical values for this dataset via sustainalytics_exact_data_tool (start_date/end_date). On error, returns {"error": "<message>"}`.

sustainalytics_data_discovery_tool

ChatGPT
Search UDP field definitions by name or look up a field directly by ID. Can also list every field belonging to a specific dataset. Accepts either a plain numeric udp_field_id for an exact lookup, or free-text for fuzzy name matching. Only fields from permitted datasets are returned. Use this to discover udp_field_id and dataset_name before calling sustainalytics_exact_data_tool, or to retrieve methodology for a known field. Input schema - query (string, required): Either a numeric field ID for direct lookup (e.g. "181114232399"), or free-text for fuzzy name search (e.g. "carbon emissions intensity", "ESG risk score momentum", "overall exposure subindustry"). Free-text handles partial words, typos, and keyword combinations. Leave empty ("") together with dataset_name to list every field in that dataset instead of searching by name. - max_results (int, default 20): Maximum number of matches to return. Ignored for direct ID lookup and for a full dataset listing (empty query + dataset_name), both of which return every match. - dataset_name (string | null, default null): Optional. Exact dataset name from the catalog (see sustainalytics_available_data_tool). When set, restricts matches to that dataset; combine with an empty query to enumerate all of its fields rather than searching by name. Output schema Returns a JSON string: ``json { "query": "overall exposure score subindustry", "matches": [ { "udp_field_id": 181114232399, "udp_field_name": "Overall Exposure Score Average-Subindustry", "field_description": "...", "calculation_methodology": "...", "dataset_name": "ESG Risk Rating Product Dataset", "possible_values": "0-100", "field_type": "Numerical", "score": 95.2 } ], "count": 5 } ` Match fields: - udp_field_id (int): use this in sustainalytics_exact_data_tool's field_id_list. - udp_field_name (string): human-readable field name. - field_description (string | null): description of what the field measures. - calculation_methodology (string | null): how the field value is calculated. Use this to answer questions like "what is the methodology for field X?". - dataset_name (string): the product dataset this field belongs to. Informational only — sustainalytics_exact_data_tool resolves this automatically from the udp_field_id, so you don't need to pass it. - possible_values (string | null): the domain of values this field can take (e.g. an enum list, a numeric range, or a category description), when defined for the field. Use this to interpret or validate field_value results from sustainalytics_exact_data_tool. - field_type (string | null): the field's catalog data type (e.g. "Numerical", "String", "Date", "Boolean"). This governs which operators sustainalytics_screening_tool accepts for the field — it can differ from what the value looks like (a 0-100 score can be typed as "String"), so check this rather than guessing from possible_values. - score (float): match confidence (0-100). Direct ID lookups and full dataset listings return 100 for every match. Fuzzy matches below 70 are excluded. On error, returns {"error": "<message>"}`.

sustainalytics_data_entitlement_tool

ChatGPT
The tool explains a caller's dataset entitlements: which datasets a user is subscribed to and enabled for, and the level of access to each. Every dataset this server serves, and the caller's access to each. One call, no arguments, answering for the caller behind this request. It answers three distinct questions: 1. Which datasets exist here? Every entry in datasets. The list is complete and authoritative — a dataset absent from it is not served by this server at all, and there is no wider list to check. 2. Am I entitled to a particular dataset? Read its current_data and historical_data, not its presence. Every dataset is listed; one the caller cannot read is listed with both false. Entitlement is the two booleans, never the row's absence. Do not reconstruct the caller's entitlements from field searches or dataset names in error messages. Searches can include fields the caller cannot read, and errors describe individual requests, not the complete access list. Use this tool's permission flags instead. 3. What may I do with each one? Two independent permissions per dataset: - current_data — may read current values (a call with no date range). - historical_data — may read superseded versions (a dated call that returns figures since restated). A dataset can carry one without the other. historical_data: false does not prevent current values; current_data: false does not prevent history. Reading the result correctly This tool reports permission. For a dataset whose current_data is true, a data call that returns no rows for a company means that company has no data in it — not that the caller lacks access. Never downgrade such a dataset to "unavailable" on the strength of an empty result. Where access really is missing, sustainalytics_data_tool says so: the field comes back marked not_entitled with a message naming this dataset. Using the result with the other tools Use the returned dataset_name values in sustainalytics_data_discovery_tool to search or list fields within a dataset. sustainalytics_data_tool needs no dataset_name to fetch a field — it resolves each field's dataset automatically from the udp_field_id; it takes dataset_name only to scope a field-name search. Output schema Returns a JSON string: ``json { "datasets": [ { "dataset_name": "Controversy Product Dataset", "dataset_type": null, "research_product_id": 12, "current_data": true, "historical_data": true }, { "dataset_name": "Carbon Product Dataset", "dataset_type": null, "research_product_id": 19, "current_data": false, "historical_data": false }, { "dataset_name": "Carbon Emissions Time Series Product Dataset", "dataset_type": "time_series", "research_product_id": 70, "current_data": true, "historical_data": true } ], "count": 4 } ` Fields: - dataset_name (string): pass this value as dataset_name in sustainalytics_data_discovery_tool. - dataset_type (string | null): null for standard datasets, "time_series" for historical time-series datasets where date ranges map to reporting years. - research_product_id (int): internal product identifier. - current_data (bool): whether the user can query current values for this dataset via sustainalytics_data_tool. That covers a call with no date range, and for a time-series dataset also a date range answered with the final version of each fiscal year, since those are current values. - historical_data (bool): whether the user can query superseded values for this dataset via sustainalytics_data_tool — a standard dataset with a date range, or a time-series date range answered with every revision. Access is gated on reading superseded versions, not on supplying dates. On error, returns {"error": "<message>"}`.

sustainalytics_data_tool

ChatGPT
Retrieve Sustainalytics research and data for companies, and resolve companies to their entity IDs. Use this tool for every company lookup and every data retrieval. To find out which fields or datasets exist, or to read a field's methodology, use sustainalytics_data_discovery_tool and sustainalytics_data_entitlement_tool; to find which companies match criteria across the whole universe, use sustainalytics_screening_tool. You do not need to know which dataset a field belongs to. Identifying the companies: company A list of companies, each given as any of: - an entity ID — a numeric Sustainalytics entity ID, e.g. 1007903183. Pass an entity ID only if this server returned it earlier in the conversation or the user gave it to you. NEVER guess an entity ID or recall one from memory: entity IDs are not predictable, and a wrong one returns another company's data. If you have a company name but no entity ID from this server, pass the name. - an identifier — ticker, ISIN, LEI or similar, e.g. "AAPL", "US0378331005". - a name — full or partial, e.g. "Microsoft". Every term is looked up in the company index, which confirms it and returns the company's entity ID and name. An entity ID or identifier resolves to one company; a free-text name returns up to five candidates ranked by similarity. Entity IDs and identifiers are more reliable than names — if a name finds nothing or stays ambiguous, retry it as a ticker or ISIN before concluding the company is not covered. Once an earlier call has given you entity IDs, pass those IDs rather than searching for the names again. Maximum 10 per call. More returns an error and no data; split larger requests into batches of 10 or fewer. A bare string or number is treated as a one-item list. Company selection A name that matches several companies must be settled before any data is fetched. On clients that support form elicitation (MCP 2026-07-28 or later), the tool asks the user to choose one candidate per ambiguous term, in a single form; declining or cancelling stops the lookup with no data. On other clients the tool returns the candidates (up to five per term, best first) and a message, with no data for any company in the call: ask the user which one they meant — never assume the first candidate is right — then retry with a unique identifier or the confirmed entity ID. Entity IDs and identifiers never trigger selection. Choosing the data: fields Pass either: - Field IDs — numeric udp_field_id values, e.g. [181110101499, 181111161799], as returned by sustainalytics_data_discovery_tool or an earlier call. An unknown ID fails the call and names it. Pass a field ID only if this server returned it or the user gave it to you. Never construct a field ID from a numeric pattern — IDs in one range can belong to different datasets, so an ID built by adjusting the digits of another one is not the neighbouring field and may be an unrelated measure in an unrelated dataset. Never recall one from memory either. Use the IDs returned by discovery. - Search strings — plain-language descriptions, e.g. ["ESG Risk Rating score", "scope 1 emissions"]. Each string is matched against field names by fuzzy search on its own, returning up to max_field_results fields per string. Do not mix the two in one call: a list with both field IDs and search text is rejected with an error. Use two calls instead. To search within one part of the catalogue, set dataset_name, using a value from sustainalytics_data_entitlement_tool: the search then covers that dataset only. It is ignored for field IDs. Fuzzy search can return a related but different field — for example a momentum score when you asked for a risk score. Check each udp_field_name in fields.matched_fields and use only the fields that answer the question. If none does, find the right field with sustainalytics_data_discovery_tool and pass its ID. Omit fields to identify companies only — resolve names to entity IDs, or confirm which companies a list of entity IDs refers to — without retrieving data. Do not invent…

sustainalytics_download_file_tool

ChatGPT
Expose a skill's binary asset (e.g. a methodology PDF) as a download URL. This is the binary-file branch of methodology document retrieval: open the document's overview with sustainalytics_methodology_docs_tool (or a *_skill tool); when it lists a binary reference, it prints the exact call to make here with that asset's path. The file is made downloadable via the server's /files/{path} route and the URL is returned. The URL is signed and short-lived (expiry noted in the result) — share it promptly; if it has expired, call this tool again for a fresh one. Only call this with a path handed to you verbatim by sustainalytics_methodology_docs_tool or a skill tool. The server serves nothing but the assets bundled with its skills; any other path is refused. Args: path: The asset's path exactly as given by the overview that referenced it, of the form <document>/assets/<file>. Returns: A string containing the download URL, size, and content type

sustainalytics_exact_data_tool

ChatGPT
Retrieve field values for one or more entities across UDP product datasets. ALWAYS use this tool whenever you already hold both entity_id(s) and udp_field_id(s) — this is the tool for that shape of input, however the IDs were obtained (a prior sustainalytics_data_discovery_tool call, a prior call to this tool, IDs supplied directly by the user, etc.). Do not re-run discovery or fall back to sustainalytics_general_data_tool once you hold numeric IDs; go straight to this tool. You do not need to know which dataset a field belongs to: pass the udp_field_id values directly and the tool resolves each one to its dataset from the field definitions and queries the right tables. Input schema - entity_id_list (list[int], required): Sustainalytics entity IDs to query, e.g. [1015763786, 1013270112]. Duplicates are allowed but do not produce duplicate rows. - field_id_list (list[int], required): udp_field_id values to retrieve (bigint IDs), e.g. [181111161799, 182018442199, 181114232399]. Each ID's dataset is resolved automatically; unknown IDs raise an error naming which ones were not recognized. Call sustainalytics_data_discovery_tool if you need to look up field IDs by name first. - latest_data (bool, default true): When true and no date range is given, returns only the current snapshot. Ignored (set to false) when start_date/end_date are provided. - start_date (string | null, default null): ISO-8601 date, e.g. "2024-01-01". Must be paired with end_date. Triggers a historical Athena query. - end_date (string | null, default null): ISO-8601 date, e.g. "2025-12-31". Must be paired with start_date. Routing logic | latest_data | start_date/end_date | Engine | |-------------|---------------------|--------| | true | not provided | Aurora | | (any) | provided | Athena | Output schema Returns a JSON string: ``json { "rows": [ { "entity_id": 1015763786, "udp_field_id": 181111161799, "udp_field_group_id": null, "valid_from": "2025-08-30", "valid_to": null, "field_value": "Some text or numeric value", "is_latest": true, "udp_field_name": "Analyst View - Overall Management Narrative" } ], "count": 31 } ` Row fields: - entity_id (int): the queried entity. - udp_field_id (int): numeric field identifier. - udp_field_group_id (int | null): set for grouped/sub-rows, null otherwise. - valid_from (string): date the value became effective. - valid_to (string | null): null means still current. - field_value (string | null): the data point value. - is_latest (bool): true marks the current value for that field. When querying historical data, rows with is_latest=false are still valid results — they show the value as it stood during that period, before being superseded. For time-series datasets, one row per fiscal year has is_latest=true, since each year's value is independently current. - udp_field_name (string | null): human-readable field name (best-effort). On error, returns {"error": "<message>"}`.

sustainalytics_general_data_tool

ChatGPT
All-in-one entry point for looking up companies and querying Sustainalytics data about them. ALWAYS use this tool to resolve a company to its entity ID(s) — by full or partial name, ISIN, ticker, or other identifier. NEVER guess, assume, or recall an entity_id from memory or from earlier in the conversation; entity IDs are not predictable and a wrong guess silently returns data for a different company. If you have a company name or identifier but not a verified entity_id, you MUST call this tool first. (Only use sustainalytics_exact_data_tool directly when you already hold an entity_id that THIS tool returned earlier in the same session.) Two modes, driven by whether fields is supplied: 1. Company search only — omit fields entirely. The tool resolves each name or identifier to its Sustainalytics entity ID and name, and stops there. Use this whenever the user only wants to identify a company, confirm coverage, or obtain an entity ID. Do NOT invent a field query just to fill the parameter. 2. Company search + data — supply fields with a plain-language description of the data point(s) wanted. The tool resolves the companies, matches your description against the research field catalogue, and returns the values. Batch lookups company accepts a list, so several companies are resolved in a single call. Pass every name/identifier the user mentioned at once rather than calling the tool repeatedly. Terms may be mixed freely — names alongside identifiers — and each is resolved independently. An identifier term (ISIN, ticker, LEI, ...) resolves to a single match; a free-text name term returns up to five candidate matches ranked by similarity. Results are grouped by the input term (see company.matches[].input), so you can always tell which company each match came from. When fields is also supplied, the data query covers every resolved entity together. Steps performed internally 1. Resolves each company name/identifier to its entity ID. Accepts full names ("Apple Inc"), partial names ("Apple"), ISINs ("US0378331005"), tickers ("AAPL"), and other identifier types. TIP: identifier resolution is more reliable than free-text names — if a name returns no match, retry that term with the ticker or ISIN before concluding the company is not covered. 2. (only when `fields` is given) Searches the field catalogue using fuzzy matching to find the relevant udp_field_id(s) and dataset(s). 3. (only when `fields` is given) Fetches the actual values for every resolved company. Input schema - company (list[string], required): One or more company names (full or partial), ISINs, tickers, or other identifiers, e.g. ["AAPL"] or ["Apple Inc", "Microsoft", "US0378331005"]. A bare string is accepted and treated as a single-item list. - fields (string | null, default null): Optional. Plain-language description of the data you want, e.g. "ESG Risk Rating Score", "carbon emissions scope 1 2 3", "overall exposure score subindustry". Matched against field definitions using fuzzy search. Leave unset for a pure company search. - latest_data (bool, default true): Return only the current values. Set to false together with a date range for historical data. - start_date (string | null, default null): ISO-8601 date for a historical range, e.g. "2024-01-01". Must be paired with end_date. - end_date (string | null, default null): ISO-8601 date for a historical range, e.g. "2025-12-31". Must be paired with start_date. - max_field_results (int, default 5): Maximum number of field matches to include. Raise this when you need several related fields (e.g. all emission scopes) in one call. Output schema Always returns a JSON string with a consistent structure containing company, fields, and data keys — even when no results are found: ```json { "company": { "search_term": ["US0378331005", "Microsoft"], "matches": [ { "input": "US0378331005", "matches": [ {"entity_id": 1007903183, "name": "Apple, Inc."} ] }, { "input": "Microsoft", "matches": [ {"entity_id": 1008030982, "name":…

sustainalytics_methodology_docs_tool

ChatGPT
The Morningstar Sustainalytics methodology docs tool provides methodology for the data and research covered by its published documents, and context for frequently asked questions about Sustainalytics offerings addressed by those documents. Morningstar Sustainalytics' library of reference documents: the methodology documents (controversy ratings, GHG emissions, product involvement, global standards screening, controversial weapons radar, impact frameworks, …), the client guidelines (the product-involvement metric guidelines, one page per involvement area) and whatever the methodology team publishes next. This is the authoritative text on how Sustainalytics researches, assesses, rates and screens. Use it whenever the user asks how a Sustainalytics methodology or assessment works, what an indicator, category, metric or term means, or what the methodology says — including when the concept is described without being named ("how does an oil spill become a controversy score?", "how do you estimate Scope 3 for a company that doesn't report?"). Not for a company's own data, scores or involvement: those are the data tools' job. Three levels: call with no arguments for the index of documents; document='<identifier>' for one document's overview and the list of its reference files; document='<identifier>', reference='<path>' for one reference file. Original PDFs are listed in the overview as binary assets to pass to sustainalytics_download_file_tool. The running server version is 2.0.0 — answer version questions straight from this sentence, no tool call needed.

sustainalytics_screening_tool

ChatGPT
Screen the full universe of covered entities against a filter, 10 matches at a time. Two modes, driven by which argument you pass: - Start a new screen: pass filter, omit run_id. - Get the next page of an existing screen: pass run_id alone (each call with the same run_id returns the next page — there is no going back to an earlier page). ALWAYS call sustainalytics_data_discovery_tool first to resolve each field you want to screen on to a udp_field_id. If discovery returns more than one plausible match, present the choices to the user and confirm before building a filter — never guess a field_id. Filter language filter is a JSON tree of leaf conditions and and/or/not groups: ``json { "op": "and", "conditions": [ {"field_id": 181114232399, "operator": "between", "value": [0, 50]}, {"op": "or", "conditions": [ {"field_id": 181111161799, "operator": "in", "value": ["A", "B"]}, {"op": "not", "conditions": [ {"field_id": 181120009911, "operator": "eq", "value": "Excluded"} ]} ]} ] } ` A bare leaf {"field_id": ..., "operator": ..., "value": ...} is also a valid top-level filter on its own (no group needed for a single condition). - Group nodes: {"op": "and" | "or" | "not", "conditions": [...]}. not takes exactly one child (a leaf or a group) — wrap several conditions in an and/or first if you want to negate a combination. - Leaf nodes: {"field_id": <int>, "operator": <str>, "value": <any>}. - Allowed operators depend on the field's catalog type, not on what the value looks like — a field storing 0-100 scores as String type does NOT support between even though the values look numeric: - **String** fields: eq, ne, in, not_in - **Number** fields: eq, ne, in, not_in, between - **Date** fields: eq, ne, between (dates as "YYYY-MM-DD") - in/not_in take a non-empty list; between takes a 2-element [min, max] list; eq/ne take a single scalar. Two kinds of problems 1. **A field you can't access** (unknown, inactive, or not permitted) is dropped from the filter with a warning — the rest of the screen still runs. If every referenced field is dropped this way, the screen returns zero results with a warning instead of silently matching everyone. 2. **A filter incompatible with a field's type** (wrong operator, or a value that can't match the type — e.g. text for a Number field) is a hard failure: the tool raises an error describing every problem found and **executes nothing**. Fix the filter and retry. A field's catalog possible_values (from sustainalytics_data_discovery_tool) is also checked on a best-effort basis when it parses as a clean numeric range or a short enumerated list — a value outside it produces a soft warning (the screen still runs) since possible_values is free text and not every field's format can be parsed reliably. Scope Screens the is_latest = true (current) data only, across whichever of your permitted datasets support current-data queries. Fields with no current value for a given entity are treated as "no data for this condition" for that entity — never assumed to pass or fail. Time-series datasets (e.g. Carbon Emissions Time Series Product Dataset) are included: they publish one is_latest = true row per (entity, fiscal year), since each year's value is independently current. A filter on a time-series field is evaluated against each entity's MOST RECENT fiscal year only — determined per company across the whole dataset (every field that entity reports shares the same "current" year), not per individual field. If a field has no row for an entity in that year (e.g. it lags behind the entity's other fields), that entity counts as "no data for this condition" rather than matching on an older year. Use sustainalytics_exact_data_tool afterward to see the entity's full fiscal-year history for a field. Input schema - **filter** (object | null): the filter tree above. Required to start a new screen; omit when paging with run_id. - **run_id** (string | null`): the run to continue paging. Omit to start a new screen. Provid…

morningstar-analyst-research-tool

Claude

morningstar-articles-tool

Claude

morningstar-data-tool

Claude

morningstar-fund-holdings-tool

Claude

morningstar-id-lookup-tool

Claude

morningstar-screener-tool

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps