← MorningstarCONTENT HISTORY

Update to Morningstar

Snapshot Sep 30, 2026 · 22:50 UTC · version 6.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "medalist-rating-analyzer",
  "description": "Analyzes a fund's Morningstar Medalist Rating using live Morningstar MCP data, including pillar scores, rating history, and analyst research. Use when asked to rate, analyze, or look up a specific fund by ticker, name, or Morningstar ID.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 512
    },
    {
      "relative_path": "assets/icon.png",
      "size_in_bytes": 16548
    },
    {
      "relative_path": "references/follow-up-questions.md",
      "size_in_bytes": 1802
    },
    {
      "relative_path": "references/full-workflow.md",
      "size_in_bytes": 19323
    },
    {
      "relative_path": "references/historical-rating-questions.md",
      "size_in_bytes": 4588
    },
    {
      "relative_path": "references/normalized-data.md",
      "size_in_bytes": 4531
    },
    {
      "relative_path": "references/pillar-input-questions.md",
      "size_in_bytes": 1329
    },
    {
      "relative_path": "references/pillar_data_query_reference.md",
      "size_in_bytes": 1798
    },
    {
      "relative_path": "references/pillar_rating_input_data.md",
      "size_in_bytes": 7283
    },
    {
      "relative_path": "scripts/__init__.py",
      "size_in_bytes": 225
    },
    {
      "relative_path": "scripts/data_normalizer.py",
      "size_in_bytes": 30864
    },
    {
      "relative_path": "scripts/formatter.py",
      "size_in_bytes": 40533
    },
    {
      "relative_path": "scripts/pillar_data_query.py",
      "size_in_bytes": 2668
    }
  ],
  "skill_md_contents": "---\nname: medalist-rating-analyzer\ndescription: Analyzes a fund's Morningstar Medalist Rating using live Morningstar MCP data, including pillar scores, rating history, and analyst research. Use when asked to rate, analyze, or look up a specific fund by ticker, name, or Morningstar ID.\n---\n\n# Medalist Rating Analyzer\n\nAnalyzes Morningstar Medalist Ratings using the **Morningstar MCP server**.\nIncludes only two steps:\n\n1. **Search** — resolve a fund name or ticker to a `morningstar_id`\n2. **Fetch** — call the MCP server once to get all research/rating data for that fund\n\nDo not call MCP tools if you have already fetched the same data for the same `morningstar_id` in the same session — keep it in context and answer all follow-up questions from that data.\nDo not expose Morningstar internal data id values (e.g., `MMR01`) in your final answers — those are for your internal use only when reasoning about which data to pull and how to answer.\nDo not expose internal routing/decision logic for choosing a rating formula. Keep that reasoning private unless the user explicitly asks methodology details.\n\n---\n\n## Plugin Domain Rules\n\nMorningstar domain rules for this skill:\n\n- For fund lookups by name/ticker, call `morningstar:morningstar-id-lookup-tool` first.\n- When calling `morningstar:morningstar-id-lookup-tool`, pass only the fund identifier text (ticker, exact Morningstar ID, or fund name), not the full user sentence.\n- If the user provides a direct Morningstar ID, skip lookup and proceed directly to the fetch workflow with that ID.\n- When MCP-backed formatter output contains a \"Disclosure\" section with separator lines (────), you MUST reproduce that disclosure text EXACTLY AS PROVIDED in the tool output, word-for-word, without paraphrasing, summarizing, or omitting any sentences. **If it appears more than once in the formatter output, reproduce it that many times, in the same positions — never collapse repeated occurrences into one.** The disclosure text is legally required and must be complete and verbatim.\n- **Disclosure handling — never add manually.** `fmt.full_report()` and `fmt.fund_header()` handle all disclosure placement automatically based on `data[\"disclosure_type\"]`. Do NOT write or append a disclosure block yourself anywhere in the response. If you find yourself typing the disclosure text, stop — that means the formatter already placed it.\n- If the needed fund data is already provided in session context, answer follow-up questions about the same fund directly and do not call Morningstar MCP data tools again unless the user asks about a different fund.\n- When presenting historical pillar score output from `morningstar:morningstar-data-tool`, do NOT omit any rating type labels (e.g. `Analyst Assigned`, `Algorithmic`, `Quantitative`). The type labels must appear in your response exactly as they appear in the tool output.\n- For comparison requests, fetch each fund, then synthesize a comparison.\n- Never invent fund data; rely on tool output and provided context.\n- Show complete relevant tool-backed output; do not provide empty sections.\n- Avoid fenced code blocks in user-facing answers; write formulas as plain text.\n- If a tool explicitly returns an MCP-service-unavailable error, respond exactly: \"Sorry, the Morningstar MCP service is not available at this moment. Please try again later.\"\n- Do not infer MCP outage from user text or model assumptions; only use the outage response when a tool call indicates service unavailability.\n\n### Routing logic for fund-specific methodology questions\n\n- Keep formula-routing logic internal unless the user explicitly asks for methodology details.\n- This is a deterministic decision, not a judgment call — never re-derive it by reasoning over the flags in prose. Call `select_formula(domicile_country, is_index_fund, is_australian_superannuation_fund)` from `scripts/data_normalizer.py` (also exported as `scripts.select_formula`) and use its return value directly: `\"Active\"`, `\"Passive\"`, `\"Superannuation\"`, or `\"clarification_needed\"`.\n- Use routing flag values injected in the current-fund context block (domicile_country, is_index_fund, is_australian_superannuation_fund) — these come directly from the data tool. Do NOT infer or default missing values before passing them to `select_formula`.\n- If the result is `\"clarification_needed\"`, follow the clarification instruction in the routing flags block (`Formatter.routing_flags()` in `scripts/formatter.py`) — that is the single canonical source for the exact clarification wording.\n\n---\n\n## Data Source — Morningstar APIs\n\nData comes from Morningstar MCP.\n\nThree MCP tools are used:\n\n| Tool | Purpose |\n|------|---------|\n| `morningstar:morningstar-id-lookup-tool` | Resolve ticker / name → `morningstar_id` |\n| `morningstar:morningstar-analyst-research-tool` | Fetch analyst research, pillar narratives, and Medalist Rating |\n| `morningstar:morningstar-data-tool` | Supplement with structured datapoints (current rating/pillars, fees, historical overall + pillar timelines) |\n\n**If the MCP server is unreachable, inform the user.**\n\n---\n\n## Reference Files\n\nRead only the reference required for the request. Every reference below is one hop from this file.\n\n| Situation | Read |\n|-----------|------|\n| A new fund, a different fund, or no current-fund `data` in session | [references/full-workflow.md](references/full-workflow.md) — lookup, fetch, normalization, current snapshot, and pre-response workflow |\n| A standard question about a fetched fund: full report, current rating, price/fees, a current pillar, or fund identity | [references/follow-up-questions.md](references/follow-up-questions.md) — formatter routing and follow-up examples |\n| A historical rating/pillar question, a date-bounded question, or an explanation of a rating change | [references/historical-rating-questions.md](references/historical-rating-questions.md) — history IDs, date filtering, and change-explanation rules |\n| How a current Parent, People, or Process pillar is calculated | [references/pillar-input-questions.md](references/pillar-input-questions.md) — the input-data retrieval workflow |\n| The precise shape or ownership of a normalized `data` field | [references/normalized-data.md](references/normalized-data.md) — complete `data` schema |\n| The input datapoint-ID table or `get_pillar_data_id` usage details | [references/pillar_rating_input_data.md](references/pillar_rating_input_data.md) or [references/pillar_data_query_reference.md](references/pillar_data_query_reference.md) |\n\nFor a general Medalist Rating methodology question that is not tied to a specific fund, use `morningstar:morningstar-articles-tool` with `content_filter: \"methodology\"`; do not load a fund workflow reference.\n\nExecutable code lives in `scripts/` (`data_normalizer.py`, `formatter.py`, `pillar_data_query.py`) — import and call these, don't read them as documentation; the reference files above are the documentation.\n"
}

SHA-256: 2ac19945617b148c10de9df9704b2e0547f34c1a340376791c922b2daa01ec57