MCP server for searching Korean court precedents and retrieving legal information using the Korean Law Information System API
Single tool 'search_precedents' has a complete input schema with 9 parameters, all with type definitions and descriptions in Korean. However, the tool description is minimal (16 chars in English: '대한민국 법원 판례를 검색합니다.' = 'Search Korean court precedents.'), falling below the 20-char threshold. No output schema is documented, the code shows XML/JSON parsing but does not declare what fields the LLM should expect. Parameter descriptions are present but terse (e.g., 'court_type' just says '법원종류 (대법원: 400201, 하위법원: 400202)' without explaining when to use each). No error handling guidance is visible, API failures return raw error dicts without recovery hints. The tool lacks idempotency hints, permission declarations, and audit logging. Naming is clear (verb_noun: search_precedents), but the overall definition lacks LLM-optimization and production-grade structure.
대한민국 법원 판례를 검색합니다.
Tool description is too short (16 chars). Must be 10 - 1024 chars and explain WHAT, WHEN, and any prerequisites. Current description does not guide LLM on when to use this tool vs. alternatives.
No output schema documented. Code shows XML/JSON parsing with fields like 'totalCnt', 'prec', 'court', 'caseNumber', etc., but the tool definition does not declare these to the LLM. LLM cannot plan downstream calls or extract data reliably.
Parameter descriptions are terse and in Korean. E.g., 'court_type' lists enum values (400201, 400202) but does not explain what each means or when to use them. LLM cannot infer intent from Korean text alone.
No error handling guidance. API failures return raw error dicts (e.g., {'error': 'XML 파싱 오류'}) without recovery hints. LLM does not know whether to retry, ask user, or abandon.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | <=2025-11-25 | v2 |
No pagination guidance in description. 'limit' parameter caps at 100, but tool description does not state this or explain how to iterate through large result sets.