Unified REST API + MCP server for Korean public data (weather, exchange rates, holidays, transport, stocks)
Server defines 6 tools with basic schemas and descriptions. All tools have names starting with action verbs (get_*), which is good. However, descriptions are generic and lack LLM-optimization guidance. Most critically, 4 of 6 tools have EMPTY input schemas (no properties defined), violating the schema requirement. Parameter descriptions are minimal or absent. No output schemas documented. Error handling returns raw error text without recovery guidance. This is a typical community server with foundational structure but significant quality gaps.
Get all KRW exchange rates for major currencies.
Get KRW exchange rate for a specific currency. Returns how much 1 unit of the target currency costs in KRW.
Get current weather and 3-day forecast for a Korean city. Supported cities: Seoul, Busan, Jeju, Incheon, Daegu, Daejeon, Gwangju, Ulsan, Suwon, and more.
Get Korean public holidays for a given year.
Get Korean stock market summary with KOSPI and KOSDAQ index data.
Get current Seoul public transport status including subway and bus operating status, line info, and service intervals.
Four tools have empty input schemas (no properties). get_all_exchange_rates, get_seoul_transport_status, and get_korean_stock_market define inputSchema as {type: 'object', properties: {}} with no fields. This violates the schema requirement and prevents LLMs from understanding what data these tools accept or return.
No output schemas documented. Tool descriptions do not specify what fields or structure the response contains. LLMs cannot plan downstream tool calls or extract required data without knowing the response shape.
Descriptions are generic and lack LLM-optimization. Most descriptions are 50-65 characters and do not explain WHEN to use the tool, what it returns, or dependencies. Baseline for A+ tools is 194 chars with clear context. Example: 'Get KRW exchange rate for a specific currency' does not explain what 'specific currency' means or what the response format is.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
Error handling returns raw error text without recovery guidance. When a tool fails, the response is {isError: true, content: [{type: 'text', text: 'Error: <message>'}]}. This does not tell the LLM whether to retry, ask the user, or try an alternative tool. No error classification or actionable next steps.
Parameter descriptions are minimal or missing. The 'city' parameter in get_korea_weather says 'Korean city name (e.g., Seoul, Busan, Jeju)' but does not specify supported cities, format constraints, or what happens if an unsupported city is passed. The 'year' parameter in get_korean_holidays lacks range validation hints (2000-2100 is in the description but not in schema constraints).