Regional Input-Output (RIO) economic-impact analysis as a cross-platform MCP server (Bank of Korea regional IO tables)
Seven tools with complete schemas and descriptions, but several critical gaps limit production readiness. All tools have input schemas with proper types and descriptions (baseline: 100% of A+ tools). Tool descriptions average ~180 chars, within the 10 - 1024 baseline. However, output schemas are undocumented (no return type specs visible), parameter descriptions lack constraint details (e.g., valid sector codes, spending ranges), and error handling is absent. rio_compute_event has a complex nested event_spec parameter with underdocumented dependencies (visitor_groups vs n_outsider precedence is mentioned in description but not formalized). No tool declares permissions, audit trails, or recovery guidance. Naming is clear and verb-forward (rio_list_*, rio_compute_*, rio_load_*, rio_check_*, rio_render_*), following the verb_noun convention well.
Check whether BOK has published a newer regional IO base year. Polls the BOK publication list; falls back to known years offline. Returns the latest published year, whether it is newer than ``cached_year``, and the manual-download URL (downloads are not automated).
Compute induced effects for sector-level spending. ``spending``: list of {sector_code, amount_mw, vendor_in_region_share?}. The in-region capture share (default 1.0) scales the spending base before the induced coefficients further split each effect in/out of region. Returns per-line effects and a totals summary (production/value-added/employment, each in-region/out-of-region).
Compute the combined effect of an economic event. ``event_spec`` keys: * ``policy_spending``: list of {sector_code, amount_mw, vendor_in_region_share?} * ``event_type`` (opt, default "festival"): preset for participant parameters — "festival" (26p17) or "forum_mice" (MICE/국제행사: purpose_weight 1.0, on-site channel off by default to avoid double counting organizer-paid catering). * ``visitor_groups`` (opt): list of {label, n, profile?, purpose_weight?, per_capita_won?, event_site_sector?, monthly_weight?} — heterogeneous groups (e.g. domestic vs foreign attendees) each riding their own unit-cost profile (see rio_list_profiles). Takes precedence over ``n_outsider``. * ``n_outsider``: outside-visitor count (legacy single-track channel) * ``per_capita_won`` (opt), ``event_site_sector`` (opt) — on-site consumption * ``purpose_weight`` (opt), ``monthly_weight`` (opt) — ancillary stay * ``include_stay`` (opt, default True) Returns separate summaries for the policy-expenditure channel (reliable, homogeneous) and the participant channel (variable), kept apart per the 26p17 methodology, plus a combined total (and per-group summaries when visitor_groups is used).
Output schemas undocumented. Tools return dicts with no documented field structure (e.g., rio_compute_effects returns {region, table_year, lines, totals} but field types and nested structures are not specified). LLMs cannot plan downstream calls or extract data reliably.
Parameter constraints missing. spending array items lack min/max for amount_mw, vendor_in_region_share lacks explicit 0-1 range in description, sector_code has no format/pattern guidance. LLMs cannot validate inputs before calling.
No error handling or recovery guidance. Tools do not document failure modes (e.g., what if sector_code is invalid? What if xlsx_path does not exist?). No actionable error messages or retry strategies visible.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
List coefficient tables available (cached or bundled).
List bundled stay-spending consumption profiles (visitor-type unit-cost tables: e.g. jeju_domestic_leisure for festivals, jeju_domestic_visitor / jeju_foreign_visitor for MICE/forum attendees). Each entry names its data source; details in data/reference/profiles/<name>/SOURCE.md.
Extract induced coefficients from a BOK workbook and cache them. The region/year must have a layout registered in engine/regions.py (currently 제주 2020 중분류). Add others there with their subtotal rows.
Render a standardized markdown effect table. ``preset='interim'`` shows production-induction only; ``preset='final'`` shows production + value-added + employment together. ``results`` is the six-key totals dict from rio_compute_effects/rio_compute_event.
rio_compute_event parameter dependencies underdocumented. visitor_groups takes precedence over n_outsider, but this is buried in the description. No formal mutual-exclusivity or dependency declaration. LLMs may pass both, causing ambiguous behavior.
No permission declarations or audit trail guidance. Tools modify state (rio_load_base_table writes to cache) but do not declare required scopes or log who called what. Compliance and debugging are hindered.