← MSCI ConnectorCONTENT HISTORY

Update to MSCI Connector

Snapshot Sep 30, 2026 · 22:51 UTC · version 8.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": "composition",
  "description": "Use this skill for what sits inside an MSCI index: constituents and holdings, constituent weights, top-N holdings, country/region/sector/industry breakdowns, constituent counts, index concentration, and whether a given security is a member of a named index. Trigger for \"top 10 holdings\", \"sector breakdown\", \"country weights\", \"how many stocks are in it\", \"how much of X is Y\", \"which index holds this stock\", even if the user never says MSCI.",
  "included_files": [],
  "skill_md_contents": "---\nname: composition\ndescription: >-\n  Use this skill for what sits inside an MSCI index: constituents and holdings, constituent weights, top-N holdings, country/region/sector/industry breakdowns, constituent counts, index concentration, and whether a given security is a member of a named index. Trigger for \"top 10 holdings\", \"sector breakdown\", \"country weights\", \"how many stocks are in it\", \"how much of X is Y\", \"which index holds this stock\", even if the user never says MSCI.\n---\n\n# Index composition and constituents\n\nUse the MSCI Index app to describe an index's internal structure at a stated date. Composition is a point-in-time snapshot: it answers what is in the index and at what weight, not how the index performed and not why the rule exists.\n\n## Output\n\nLead with the requested rows or figure. Identify the index as `<name> (<msci_index_code>)` and state the fetched date. When a list is paginated, state how many rows are shown versus available. Never present a partial page as the full index.\n\n## Workflow\n\n1. Resolve the index with `search_index_indexes`. Never guess an MSCI index code. Resolve several independent indexes in parallel.\n2. Discover the exact datapoints with `search_index_datapoints`. Do not compose ids from naming patterns. Typical search concepts:\n   - constituents and constituent weights\n   - constituent identifiers (ISIN, ticker, security code)\n   - country, region, sector, and industry-group weights\n   - number of securities / constituent count\n   - adjusted and unadjusted market capitalisation\n3. Prefer a **native breakdown datapoint** when discovery returns one. Sector, country, and industry-group weights are published, not derived — expect families such as `equity_index.sector_weight.*` (sector name, GICS closing weight, number of securities), `equity_index.country_weight.*`, and `equity_index.industry_group_weight.*`. Confirm the exact ids through discovery. Only aggregate constituent rows client-side when the catalog has no published breakdown, and say the figure was derived by aggregation.\n4. These breakdowns are **list-cardinality but range-capable**. They paginate under `fetch_index_data`, and `fetch_index_timeseries` does serve them, returning `list_tables`. Respect the returned `range_window`: daily frequency is capped at roughly 30 days, so use `frequency=monthly` for longer histories rather than looping point-in-time calls.\n5. Route on the returned flags: `supports_single_day=true` → `fetch_index_data`; `supports_range=true` with a date range → `fetch_index_timeseries`.\n6. For top/bottom holdings, pass `order_by` (typically `closing_weight`) with `order_direction`, plus `page` and `page_size`. Do not sort a single page client-side and call it the top N of the index.\n7. When requesting parallel list datapoints from the same dataset, keep rows aligned by the shared `msci_security_code` so weights stay paired with their own identifiers.\n8. Read `strict_gate`, `range_window`, and `constraints.notes` before fetching.\n\n## Membership questions\n\nFor \"which index holds this security\" or \"is this stock in the index\":\n\n1. Resolve the security with `search_index_securities`. Do not infer a country filter from suffixes such as `(US)`, `ADR`, `CDI`, or `ADS`.\n2. For a **named** index, confirm membership from that index's constituent list or from the documented membership/eligibility flag, and state which basis was used.\n3. For an **open-ended** \"which indexes hold this\", there is no exhaustive reverse lookup across every MSCI index. There is a **bounded** one: the `security.index_inclusion_monitor.weight_in_*` family covers the major standard families (World, ACWI, ACWI IMI, EM, EM IMI, World IMI, EM Small Cap and siblings) and returns a per-family weight for a resolved security code. Use it for the major families, then say plainly that the answer covers those families and the indexes checked, not every MSCI index.\n4. Inclusion-monitor data is published only for the latest applicable monitor (T+6). A requested date is pinned to that monitor date and the response says so — report the pinned date, not the date you asked for. Any value from this family carries a mandatory disclaimer in `constraints.notes`; reproduce it verbatim.\n\n## Concentration\n\n- Derive top-N concentration from returned weights, state N, and state the date.\n- Say whether the weights are closing weights or another documented basis.\n- Do not describe concentration as a risk measure. It is a weight statistic.\n\n## Interpretation\n\n- Never assume composition from an index name. An index containing \"World\" or \"Asia\" does not imply a country list.\n- Index-level aggregates are not constituent medians.\n- Weights are point-in-time and move with prices, corporate events, and reviews.\n- Preserve units exactly as returned; if market cap arrives in USD millions, label it or convert with an explicit label.\n\n## Handoff\n\n- Performance, returns, valuation multiples, and factor scores → `benchmark`.\n- Why a constituent qualifies, or the rule behind a weight cap → `methodology`.\n- What changed at a review, or a proforma constituent list → `index-changes`.\n- Comparing composition across several indexes → `compare`.\n\n## Guardrails\n\n- Never double-convert a weight. Check the datapoint description for the decimal-versus-percentage statement before formatting, and align with `benchmark`: weights format as percentages unless the description states the value is already a decimal fraction.\n- Never guess an index code, a datapoint id, or a constituent list.\n- Do not claim a complete constituent list when only one page was fetched, or when entitlements may have filtered the result.\n- If a requested date snaps, report both the requested and fetched date.\n- Absence of a security from a returned page is not proof it is not in the index.\n"
}

SHA-256: d1145475f20c748683105a70475f97b48a6acf8dee28fc0aafad32072fa80188