Exposes 4 tools to any MCP-compatible client for executive market research: fetch macroeconomic indicators from World Bank, import/export flows from UN Comtrade, compose research workplans, and generate HTML+PDF reports.
Server exposes 4 tools with complete input schemas and descriptions. Naming follows verb_noun convention (get_*, search_*, generate_*). Descriptions are present and substantive (100-250 chars), exceeding the 10-char minimum. However, output schemas are not documented, LLMs cannot predict return structure. Error handling is minimal; tools fail silently or return generic error dicts without recovery guidance. Parameters lack enums where appropriate (e.g., 'flow' accepts 'M'|'X' but is free-form string). No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. generate_report is a WRITE operation but lacks confirmation/dry-run pattern.
Render the executive market research deliverable (HTML + PDF).
Fetch macroeconomic indicators from the World Bank Open Data API.
Fetch import/export flows from UN Comtrade public preview API.
Compose a structured research workplan for a product+country combination. If a sector preset matches (or is given via `sector`), this returns the relevant HS codes, specialised sources, and pre-defined interview questions. Does NOT execute web searches itself - that is Claude's job when running the parent skill.
Output schemas not documented. LLMs cannot predict return structure or plan downstream calls. get_country_macro returns dict with 'indicators' keyed by code, but this is inferred from code, not declared in schema.
generate_report is a destructive WRITE operation (renders files to disk) but lacks tool annotations (destructiveHint), confirmation step, or dry-run mode. Agents may invoke it unintentionally.
Parameter 'flow' in get_trade_data accepts 'M'|'X' but is defined as free-form string, not enum. LLMs may hallucinate invalid values like 'import' or 'export'.
Error handling is minimal. API failures (World Bank, Comtrade timeouts) return generic error dicts without recovery guidance. LLMs cannot determine if retry is safe or if user action is needed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
get_trade_data returns all rows without pagination or result limit. UN Comtrade can return 500+ rows per period; no cap or cursor mechanism documented.