LexLink
LexLink is an MCP server providing comprehensive access to Korean legal information for AI agents and LLM applications, spanning laws, administrative rules, case law, and AI-powered search.
Core Law Search & Retrieval
Search Korean laws by effective date (
eflaw_search) or announcement date (law_search) with optional date range filteringRetrieve full law text or specific articles, paragraphs, and sub-items by effective date (
eflaw_service,eflaw_josub) or announcement date (law_service,law_josub)
English-Translated Laws
Search and retrieve Korean laws translated into English (
elaw_search,elaw_service)
Administrative Rules
Search and retrieve administrative rules including 훈령, 예규, 고시, 공고, and 지침 (
admrul_search,admrul_service), including full text and annexes
Law-Ordinance Linkage
Explore linkages between national laws and local ordinances (
lnkLs_search,lnkLsOrdJo_search,lnkDep_search)Retrieve linkage statistics and delegation hierarchies (
drlaw_search,lsDelegated_service)
Case Law & Legal Research
Search and retrieve court precedents (
prec_search,prec_service), Constitutional Court decisions (detc_search,detc_service), government agency legal interpretations (expc_search,expc_service), and administrative appeal decisions (decc_search,decc_service)
Citation Extraction
Extract all internal and external legal citations from a specific law article with 100% accuracy via HTML parsing (
article_citation)
AI-Powered Semantic Search
Perform natural language semantic searches to find relevant law articles (
aiSearch)Discover semantically related laws by name or keyword (
aiRltLs_search)
Additional Features
Access cached law ID mappings via MCP resources
Proper UTF-8/Korean character support
Responses available in HTML or XML format
Configurable timeouts, actionable error messages, and flexible authentication via environment variables or tool arguments
Used in HTML parsing for article citation extraction, identifying citation types through CSS class selectors (sfon1-4 classes).
Supports environment variable configuration for API credentials and server settings through .env files.
Version control for the project repository, required for deployment workflows to Smithery and GitHub.
Enables deployment through GitHub repository integration with Smithery platform for hosting the MCP server.
Supports deployment to Kakao PlayMCP platform via HTTP/SSE server, enabling Korean legal information access through Kakao's MCP infrastructure.
Used as reverse proxy for production deployment, routing traffic from port 80 to the LexLink HTTP server for Kakao PlayMCP integration.
Provides parameter validation and type checking for all 24 MCP tools, ensuring proper data handling for Korean legal API requests.
Supports comprehensive testing framework with unit, integration, and end-to-end tests for validating tool functionality and API responses.
Core implementation language for the MCP server, requiring Python 3.10+ for all functionality.
Comprehensive documentation providing setup instructions, tool descriptions, and usage examples for the MCP server.
Displays project badges for MCP compatibility, Python version, and Smithery status in the repository.
Format for project logo image displayed in README documentation.
Configuration format for pyproject.toml file managing project dependencies and metadata.
Primary response format for Korean National Law Information API, with built-in XML parsing and validation for legal document retrieval.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@LexLinkfind the latest version of the Personal Information Protection Act"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🌐 Read this in other languages: English | 한국어 (Korean)
LexLink is an MCP (Model Context Protocol) server that exposes the Korean National Law Information API (open.law.go.kr) to AI agents and LLM applications. It enables AI systems to search, retrieve, and analyze Korean legal information through standardized MCP tools.
Features
54 MCP Tools + 2 MCP Resources for comprehensive Korean law information access
Search and retrieve Korean laws (effective date & announcement date)
Search and retrieve English-translated laws
Search and retrieve administrative rules (행정규칙)
Query specific articles, paragraphs, and sub-items
Law-ordinance linkage (법령-자치법규 연계)
Delegated law information (위임법령)
Phase 3 - Case Law & Legal Research
Court precedents (판례)
Constitutional Court decisions (헌재결정례)
Legal interpretations (법령해석례)
Administrative appeal decisions (행정심판례)
Phase 4 - Article Citation Extraction
Extract legal citations from any law article (100% accuracy)
NEW: Phase 5 - AI-Powered Search
Semantic search for natural language queries (aiSearch)
Related laws discovery (aiRltLs_search)
MCP Resources - Law ID Cache
Cached mapping of ~20 frequently-used law names to stable 법령ID codes
Template lookup by Korean name or abbreviation (
lexlink://law/{name})Dynamic caching: search results automatically populate the cache
Smart Features (inspired by korean-law-mcp):
Intelligent Caching - Per-tool TTL caching (search 1hr, articles 24hr, AI search 30min)
Law Name Resolution - Auto-resolves Korean abbreviations (자통법→자본시장과 금융투자업에 관한 법률), 52 seed aliases + dynamic learning
Chain Tools - Multi-step research workflows in one call (Phase 9)
100% Semantic Validation - All Phase 1-5 tools confirmed returning real law data
Error Handling - Actionable error messages with resolution hints
Korean Text Support - Proper UTF-8 encoding for Korean characters
Response Formats - JSON (default), HTML, or XML (multiple formats supported)
Related MCP server: Korean Law MCP Server
Project Status
🎉 Production Ready - Phase 9 Complete!
Metric | Status |
Tools Implemented | 54/54 (100%) ✅ |
Semantic Validation | 26/26 (Phase 1-5 tools) ✅ |
MCP Prompts | 9/9 (100%) ✅ |
MCP Resources | 2 (1 static + 1 template) ✅ |
API Coverage | ~28% of 191+ endpoints |
LLM Integration | ✅ Validated (Gemini) |
Code Quality | Clean, documented, tested |
Version | v2.1.0 |
Latest: v2.1.0 — 54 tools (Phase 9 added), intelligent caching (cache.py), law name resolution (resolver.py), chain tools for multi-step research workflows.
Prerequisites
Python 3.10+
law.go.kr OC identifier: Register at open.law.go.kr
Quick Start
1. Install Dependencies
uv sync2. Configure Your OC Identifier
Option A: Environment Variable (Recommended)
# Set OC in your environment
export OC=your_id_hereOption B: Pass in Tool Arguments
# Override OC in each tool call
eflaw_search(query="법령명", oc="your_id")3. Run the Server
# Stdio transport (for Claude Code, Cursor, etc.)
OC=your_oc uv run stdio
# HTTP transport (for Kakao PlayMCP)
OC=your_oc TRANSPORT=http uv run serveAvailable Tools
Phase 1: Core Law APIs (6 tools)
1. eflaw_search - Search Laws by Effective Date
Search for laws organized by effective date (시행일 기준).
eflaw_search(
query="자동차관리법", # Search keyword
display=10, # Results per page
type="XML", # Response format
ef_yd="20240101~20241231" # Optional date range
)2. law_search - Search Laws by Announcement Date
Search for laws organized by announcement date (공포일 기준).
law_search(
query="민법",
display=10,
type="XML"
)3. eflaw_service - Retrieve Law Content (Effective Date)
Get full law text and articles by effective date.
IMPORTANT: For specific article queries (e.g., "제174조"), use the
joparameter. Some laws have 400+ articles and responses can exceed 1MB withoutjo.
# Get specific article (RECOMMENDED)
eflaw_service(
mst="279823", # Law MST
jo="017400", # Article 174 (제174조)
type="XML"
)
# Get full law (WARNING: large response)
eflaw_service(
id="001823",
type="XML"
)4. law_service - Retrieve Law Content (Announcement Date)
Get full law text and articles by announcement date.
IMPORTANT: For specific article queries (e.g., "제174조"), use the
joparameter. Some laws have 400+ articles and responses can exceed 1MB withoutjo.
# Get specific article (RECOMMENDED)
law_service(
mst="279823", # Law MST
jo="017400", # Article 174 (제174조)
type="XML"
)5. eflaw_josub - Query Article/Paragraph (Effective Date)
Best tool for querying specific articles. Returns only the requested article/paragraph.
eflaw_josub(
mst="279823", # Law MST
jo="017400", # Article 174 (제174조)
type="XML"
)
# jo format: "XXXXXX" where first 4 digits = article (zero-padded), last 2 = branch (00=main)
# Examples: "017400" (제174조), "000300" (제3조), "001502" (제15조의2)6. law_josub - Query Article/Paragraph (Announcement Date)
Best tool for querying specific articles. Returns only the requested article/paragraph.
law_josub(
mst="279823", # Law MST
jo="017200", # Article 172 (제172조)
type="XML"
)Phase 2: Extended APIs (9 tools)
7. elaw_search - Search English-Translated Laws
Search for Korean laws translated to English.
elaw_search(
query="employment",
display=10,
type="XML"
)8. elaw_service - Retrieve English Law Content
Get full English-translated law text.
elaw_service(
id="009589",
type="XML"
)9. admrul_search - Search Administrative Rules
Search administrative rules (훈령, 예규, 고시, 공고, 지침).
admrul_search(
query="학교",
display=10,
type="XML"
)10. admrul_service - Retrieve Administrative Rule Content
Get full administrative rule text with annexes.
admrul_service(
id="62505",
type="XML"
)11. lnkLs_search - Search Law-Ordinance Linkage
Find laws linked to local ordinances.
lnkLs_search(
query="건축",
display=10,
type="XML"
)12. lnkLsOrdJo_search - Search Ordinance Articles by Law
Find ordinance articles linked to specific law articles.
lnkLsOrdJo_search(
knd="002118", # Law ID
display=10,
type="XML"
)13. lnkDep_search - Search Law-Ordinance Links by Ministry
Find laws linked to ordinances by government ministry.
lnkDep_search(
org="1400000", # Ministry code
display=10,
type="XML"
)14. drlaw_search - Retrieve Law-Ordinance Linkage Statistics
Get linkage statistics table (HTML format).
drlaw_search(
lid="001823", # Law ID
type="HTML"
)15. lsDelegated_service - Retrieve Delegated Law Information
Get information about delegated laws, rules, and ordinances.
lsDelegated_service(
id="001823",
type="XML"
)Phase 3: Case Law & Legal Research (8 tools - NEW!)
Tip: All
*_servicetools in Phase 3 support asections="summary"parameter to return only a brief summary instead of the full document text.
16. prec_search - Search Court Precedents
Search Korean court precedents from Supreme Court and lower courts.
prec_search(
query="담보권",
display=10,
type="XML",
curt="대법원" # Optional: Court name filter
)17. prec_service - Retrieve Court Precedent Full Text
Get complete court precedent text with case details.
prec_service(
id="228541",
type="XML"
)18. detc_search - Search Constitutional Court Decisions
Search Korean Constitutional Court decisions.
detc_search(
query="벌금",
display=10,
type="XML"
)19. detc_service - Retrieve Constitutional Court Decision Full Text
Get complete Constitutional Court decision text.
detc_service(
id="58386",
type="XML"
)20. expc_search - Search Legal Interpretations
Search legal interpretation precedents issued by government agencies.
expc_search(
query="임차",
display=10,
type="XML"
)21. expc_service - Retrieve Legal Interpretation Full Text
Get complete legal interpretation text.
expc_service(
id="334617",
type="XML"
)22. decc_search - Search Administrative Appeal Decisions
Search Korean administrative appeal decisions.
decc_search(
query="*", # Search all decisions
display=10,
type="XML"
)23. decc_service - Retrieve Administrative Appeal Decision Full Text
Get complete administrative appeal decision text.
decc_service(
id="243263",
type="XML"
)Phase 4: Article Citation Extraction (1 tool - NEW!)
24. article_citation - Extract Citations from Law Article
Extract all legal citations referenced by a specific law article.
# First, search for the law to get MST
eflaw_search(query="건축법") # Returns MST: 268611
# Then extract citations
article_citation(
mst="268611", # Law MST from search result
law_name="건축법", # Law name
article=3 # Article number (제3조)
)Response:
{
"success": true,
"law_name": "건축법",
"article": "제3조",
"citation_count": 12,
"internal_count": 4,
"external_count": 8,
"citations": [
{
"type": "external",
"target_law_name": "「국토의 계획 및 이용에 관한 법률」",
"target_article": 56,
"target_paragraph": 1
}
]
}Key Features:
100% accuracy via HTML parsing (not LLM-based)
Zero API cost (no external LLM calls)
~350ms average extraction time
Distinguishes internal vs external citations
Phase 5: AI-Powered Search (2 tools - NEW!)
25. aiSearch - AI-Powered Semantic Law Search
⭐ PREFERRED TOOL for vague or natural language queries. Use this FIRST when user's intent is unclear or conversational.
Uses intelligent/semantic search to find relevant law articles with full article text.
aiSearch(
query="뺑소니 처벌", # Natural language query
search=0, # 0: law articles, 1: appendix, 2: admin rules, 3: admin appendix
display=20, # Results per page
page=1, # Page number
type="JSON" # Response format (JSON default)
)Best for: Natural language queries like "음주운전 벌금", "이혼 재산분할", "상속 문제"
26. aiRltLs_search - AI-Powered Related Laws Search
⭐ PREFERRED TOOL for discovering related laws from vague topics. Use this when user wants to explore laws around a general subject.
Finds laws semantically related to a given law name or keyword.
aiRltLs_search(
query="민법", # Law name or keyword
search=0, # 0: law articles, 1: admin rule articles
type="JSON" # Response format (JSON default)
)Best for: Finding related laws like "민법" → 상법, 의료법, 소송촉진법
Phase 7: Extended Legal Information (18 tools)
Category | Tools |
자치법규 (Local Ordinances) |
|
조약 (Treaties) |
|
법령정보 지식베이스 (Knowledge Base) |
|
위원회 결정문 (Committee Decisions) |
|
중앙부처 1차 해석 (Ministry Interpretations) |
|
특별행정심판 (Special Appeals) |
|
Phase 9: Chain Tools (5 tools)
Inspired by korean-law-mcp, these tools run multi-step research workflows in a single call — eliminating the need for an LLM to orchestrate sequential tool calls manually.
Tool | Description |
| Complete legal research: statutes + precedent analysis + interpretations |
| Revision history + article-level diff across amendments |
| All case law sources across 4 databases (판례, 헌재결정례, 법령해석례, 행정심판례) |
| Full law hierarchy: delegation tree + admin rules + ordinances |
| Cache and resolver performance monitoring |
Tool Selection Guide
When searching Korean law, select tools based on query clarity:
Query Type | Recommended Tools | Examples |
🔍 Vague/Natural language |
| "음주운전 처벌", "이혼 재산분할" |
📋 Specific law/article |
| "형법 제148조의2", "민법 상속편" |
⚖️ Case law |
| "대법원 2023다12345" |
🔗 Related laws |
| "민법과 관련된 법률" |
Configuration
Environment Variables
Variable | Default | Description |
| (required) | law.go.kr API identifier (email local part) |
|
| API base URL |
|
| HTTP request timeout in seconds |
| (unset) | Set |
|
| Transport type: |
OC Priority
When resolving the OC identifier:
Tool argument (highest priority) -
ocparameter in tool callEnvironment variable -
OCenv var (set via .env or HTTP header middleware)
Usage Examples
Example 1: Basic Search
# Search for automobile management law
result = eflaw_search(
query="자동차관리법",
display=5,
type="XML"
)
# Returns:
{
"status": "ok",
"request_id": "uuid",
"upstream_type": "XML",
"data": {
# Law search results...
}
}Example 2: Search with Date Range
# Find laws effective in 2024
result = eflaw_search(
query="교통",
ef_yd="20240101~20241231",
type="XML"
)Example 3: Error Handling
# Missing OC parameter
result = eflaw_search(query="test")
# Returns helpful error:
{
"status": "error",
"error_code": "MISSING_OC",
"message": "OC parameter is required but not provided.",
"hints": [
"1. Tool argument: oc='your_value'",
"2. Environment variable: OC=your_value"
]
}Golden MCP Tool Trajectories
These examples demonstrate real-world conversation flows showing how LLMs interact with LexLink tools to answer legal research questions.
Trajectory 1: Basic Law Research
User Query: "What is Article 20 of the Civil Code?"
Tool Calls:
law_search(query="민법", display=50, type="XML")→ Find Civil Code IDlaw_service(id="000021", jo="002000", type="XML")→ Retrieve Article 20 text
Result: LLM provides formatted explanation of Civil Code Article 20 with full legal text and context.
Trajectory 2: Court Precedent Analysis
User Query: "Find recent Supreme Court precedents about security interests"
Tool Calls:
prec_search(query="담보권", curt="대법원", display=50, type="XML")→ Search Supreme Court precedentsprec_service(id="228541", type="XML")→ Retrieve top precedent details
Result: LLM summarizes key precedents with case numbers, dates, and holdings related to security interests.
Trajectory 3: Cross-Phase Legal Research
User Query: "How does the Labor Standards Act handle overtime, and are there relevant court precedents?"
Tool Calls:
eflaw_search(query="근로기준법", display=50, type="XML")→ Find Labor Standards Acteflaw_service(id="001234", jo="005000", type="XML")→ Retrieve Article 50 (overtime provisions)prec_search(query="근로기준법 연장근로", display=30, type="XML")→ Search overtime precedentsprec_service(id="234567", type="XML")→ Retrieve leading precedent
Result: LLM provides comprehensive analysis combining statutory text with judicial interpretation, showing how courts apply the overtime provisions.
Trajectory 4: Constitutional Review
User Query: "Has the Constitutional Court reviewed laws about fines?"
Tool Calls:
detc_search(query="벌금", display=50, type="XML")→ Search Constitutional Court decisionsdetc_service(id="58386", type="XML")→ Retrieve decision full textlaw_search(query=<law_name_from_decision>, type="XML")→ Find related law for context
Result: LLM explains Constitutional Court holdings on fine-related provisions and their impact on specific laws.
Trajectory 5: Administrative Law Research
User Query: "What administrative rules exist for schools, and are there related legal interpretations?"
Tool Calls:
admrul_search(query="학교", display=50, type="XML")→ Search school-related administrative rulesadmrul_service(id="62505", type="XML")→ Retrieve rule contentexpc_search(query="학교", display=30, type="XML")→ Search legal interpretationsexpc_service(id="334617", type="XML")→ Retrieve interpretation details
Result: LLM provides overview of administrative framework for schools with official agency interpretations.
Trajectory 6: Comprehensive Legal Analysis
User Query: "I'm researching rental housing disputes. Show me the relevant law, court precedents, and administrative appeal decisions."
Tool Calls:
eflaw_search(query="주택임대차보호법", display=50, type="XML")→ Find Housing Lease Protection Acteflaw_service(id="002876", type="XML")→ Retrieve full law textprec_search(query="주택임대차", display=50, type="XML")→ Search housing lease precedentsprec_service(id="156789", type="XML")→ Retrieve key precedentdecc_search(query="주택임대차", display=30, type="XML")→ Search administrative appeal decisionsdecc_service(id="243263", type="XML")→ Retrieve appeal decision
Result: LLM provides comprehensive legal research report covering statutory framework, judicial interpretation, and administrative precedents for rental housing disputes.
Trajectory 7: Citation Network Analysis (Phase 4)
User Query: "What laws does Article 3 of the Building Act cite?"
Tool Calls:
eflaw_search(query="건축법", display=50, type="XML")→ Find Building Act, get MSTarticle_citation(mst="268611", law_name="건축법", article=3)→ Extract all citations
Result: LLM provides complete citation analysis showing 12 citations (8 external laws, 4 internal references) including specific article and paragraph references.
Trajectory 8: AI-Powered Natural Language Search (Phase 5)
User Query: "What's the penalty for hit-and-run accidents?"
Tool Calls:
aiSearch(query="뺑소니 처벌", search=0, display=20, type="XML")→ Semantic search for hit-and-run penalties
Result: LLM receives full article text from relevant laws (특정범죄 가중처벌 등에 관한 법률 제5조의3) with complete provisions about hit-and-run penalties, enabling comprehensive answer without needing to know specific law names.
Trajectory 9: Discovering Related Laws (Phase 5)
User Query: "What laws are related to the Civil Code?"
Tool Calls:
aiRltLs_search(query="민법", search=0, type="XML")→ Find semantically related laws
Result: LLM discovers related laws like 상법 (Commercial Act), 의료법 (Medical Service Act), 소송촉진법 (Act on Special Cases Concerning Expedition of Litigation), showing connections across legal domains.
Key Patterns
AI Tools for Vague Queries: Use
aiSearchoraiRltLs_searchFIRST when user intent is unclear or conversationalSearch First, Then Retrieve: Always search to find IDs before calling service tools
Use display=50-100 for Law Searches: Ensures exact matches are found due to relevance ranking
Combine Phases: Mix Phase 1 (laws), Phase 2 (administrative rules), Phase 3 (precedents), and Phase 5 (AI search) for complete research
Type Parameter: Default is
type="JSON"; specifytype="XML"if your pipeline requires XMLArticle Numbers: Use 6-digit format (e.g., "002000" for Article 20) when querying specific articles
Development
Project Structure
lexlink-ko-mcp/
├── src/lexlink/
│ ├── server.py # Main MCP server with 54 tools
│ ├── _helpers.py # Shared helpers: run_search, run_service, TOOL_ANNOTATIONS
│ ├── cache.py # Intelligent per-tool TTL caching (~183 lines)
│ ├── resolver.py # Korean law name/abbreviation resolution (~225 lines)
│ ├── http_server.py # HTTP/SSE server for Kakao PlayMCP
│ ├── stdio_server.py # Stdio transport entry point
│ ├── params.py # Parameter resolution & mapping
│ ├── validation.py # Input validation
│ ├── parser.py # XML parsing utilities
│ ├── ranking.py # Relevance ranking
│ ├── citation.py # Article citation extraction (Phase 4)
│ ├── client.py # HTTP client for law.go.kr API
│ ├── errors.py # Error codes & responses
│ ├── raw_logger.py # PlayMCP traffic logging
│ └── log_processor.py # Log format converter
├── logs/playmcp/ # PlayMCP traffic logs (daily JSONL)
├── pyproject.toml # Project configuration
└── README.md # This fileRunning Tests
# Install test dependencies
uv sync
# Run all tests
uv run pytest
# Run with coverage
uv run pytest --cov=src/lexlink --cov-report=html
# Run specific test category
uv run pytest -m unit
uv run pytest -m integration
uv run pytest -m e2eAdding New Tools
Current Status: 54/54 tools implemented (Phase 1-9 complete). Phase 1-5 tools validated.
For implementing additional tools from the 124+ remaining APIs:
Follow the pattern established in
src/lexlink/server.pyUse
ctx: Context = Noneparameter for MCP logging/progressUse generic parser functions (
extract_items_list,update_items_list)Add semantic validation tests
Tool Implementation Pattern:
Each tool is a decorated function with MCP schema
Uses
ctx: Context = Noneparameter for MCP context2-tier OC resolution: tool arg > env var
Generic parser functions work with any XML tag
Comprehensive error handling with actionable hints
Deployment
Deploy to Kakao PlayMCP (HTTP Server)
LexLink can also be deployed as an HTTP server for platforms like Kakao PlayMCP.
Important: Kakao PlayMCP does not accept port numbers in URLs. You must use Nginx as a reverse proxy to serve on port 80.
Quick Start (Local Testing):
# Run the HTTP server
OC=your_oc uv run serve
# Server starts at: http://localhost:8000/sseProduction Setup:
Internet → Nginx (port 80) → LexLink (port 8000)PlayMCP Registration:
Field | Value |
MCP Endpoint |
|
Authentication | Key/Token (Header: |
For detailed deployment instructions (AWS EC2, Nginx, systemd, HTTPS), see docs/DEPLOYMENT_GUIDE.md.
PlayMCP Traffic Logging
LexLink includes built-in logging for PlayMCP traffic analysis. Logs are saved in dashboard-compatible JSONL format.
Log Location: logs/playmcp/YYYY-MM-DD.jsonl
Log Schema:
{
"rpc_id": "3",
"request_id": "d8ee45eb",
"session_id": "9ff9dc23431848a4901b4cb6326ba5bd",
"timestamp": "2025-12-25T05:40:23.957987",
"duration_ms": 1.52,
"method": "tools/call",
"tool_name": "aiSearch",
"params": { "arguments": {"query": "뺑소니 처벌"} },
"client": "PlayMCP",
"client_version": "2025.0.0",
"protocol_version": "2025-06-18",
"client_ip": "220.64.111.219",
"oc": "user_id",
"status": "success",
"status_code": 200,
"result": { ... }
}Features:
Daily log rotation (one file per day)
Dashboard-compatible format for filtering and analysis
Captures request/response pairs with timing
SSE streaming response parsing
Converting Old Raw Logs:
uv run python -m lexlink.log_processor input.jsonl output.jsonlTroubleshooting
"OC parameter is required" error
Solution: Set your OC identifier using one of the three methods above.
Korean characters not displaying correctly
Solution: Ensure your terminal supports UTF-8:
export PYTHONIOENCODING=utf-8"Timeout" errors
Solution: Increase timeout via environment variable:
export LEXLINK_TIMEOUT=90 # Increase from default 60sServer won't start after updating dependencies
Solution: Re-sync dependencies:
uv sync --reinstallContributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Write tests for new functionality
Ensure all tests pass (
uv run pytest)Commit changes (
git commit -m 'Add amazing feature')Push to branch (
git push origin feature/amazing-feature)Open a Pull Request
License
This project is open source. See LICENSE file for details.
Acknowledgments
law.go.kr - Korean National Law Information API
MCP - Model Context Protocol by Anthropic
korean-law-mcp - Inspiration for caching, law name resolution, and chain tools (Phase 9)
Support
Issues: GitHub Issues
law.go.kr API: Official Documentation
Changelog
v2.1.0 - 2026-03-30
New: Caching, Law Name Resolution, Chain Tools (Phase 9)
Added intelligent per-tool TTL caching (
cache.py): search 1hr, articles 24hr, AI search 30minAdded law name/abbreviation resolution (
resolver.py): 52 seed aliases + dynamic learningAdded 5 Phase 9 chain tools:
chain_full_research,chain_amendment_track,chain_dispute_prep,chain_law_system,cache_statsInspired by korean-law-mcp
See CHANGELOG.md for full details
v2.0.0 - 2026-03-30
Major Release: Phase 7 Tools, JSON Default, sections Parameter
Added 18 new Phase 7 tools (자치법규, 조약, 법령정보 지식베이스, 위원회 결정문, 중앙부처 해석, 특별행정심판)
JSON is now the default response format (was XML)
Added
sections="summary"parameter for case law service toolsRefactored shared logic into
_helpers.pySee CHANGELOG.md for full details
v1.5.0 - 2026-02-28
Refactor: Remove Smithery Dependency
Removed
smitherypackage and 8 transitive dependenciesSimplified OC resolution to 2-tier (tool arg > env var)
Added
stdio_server.pyentry point for stdio transportSee CHANGELOG.md for full details
For the full changelog (v1.0.0 – v2.1.0), see CHANGELOG.md.
Powered by MCP
Available Tools
26 toolsadmrul_searchARead-onlyIdempotent
Search administrative rules (행정규칙 목록 조회).
This tool searches Korean administrative rules including 훈령, 예규, 고시, 공고, 지침, etc. Administrative rules are detailed regulations issued by government agencies.
Args:
query: Search keyword (default "*")
display: Number of results per page (max 100, default 20). Recommend 50-100 for law searches (법령 검색) to ensure exact matches are found.
page: Page number (1-based, default 1)
oc: Optional OC override (defaults to env var)
type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API)
nw: 1=현행 (current), 2=연혁 (historical), default 1
search: 1=규칙명 (rule name), 2=본문검색 (full text), default 1
org: Ministry/department code filter
knd: Rule type - 1=훈령, 2=예규, 3=고시, 4=공고, 5=지침, 6=기타
date: Promulgation date (YYYYMMDD)
prml_yd: Promulgation date range (YYYYMMDDYYYYMMDD)
mod_yd: Modification date range (YYYYMMDDYYYYMMDD)
sort: Sort order
ctx: MCP context (injected automatically)
Returns: Search results with administrative rules list or error
Examples: Search for "학교": >>> admrul_search(query="학교", display=10, type="XML")
Search by date:
>>> admrul_search(date=20250501, type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | * | |
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| nw | No | ||
| search | No | ||
| org | No | ||
| knd | No | ||
| date | No | ||
| prml_yd | No | ||
| mod_yd | No | ||
| sort | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains response format limitations ('JSON not supported by API'), provides practical display size recommendations, clarifies date format requirements (YYYYMMDD), and explains what the search modes mean (rule name vs full text). While annotations cover read-only/idempotent safety, the description adds API-specific constraints and usage guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose statement, parameter explanations, return statement, and examples. The information is front-loaded with the core purpose first. Some parameter explanations could be slightly more concise, but overall the description efficiently conveys necessary information without wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 13-parameter search tool with no output schema, the description provides comprehensive parameter explanations, practical usage guidance, and examples. It covers format limitations, search modes, date formats, and recommendations. The main gap is lack of output structure details, but given the annotations indicate a safe read operation and the parameter coverage is excellent, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed explanations for all 13 parameters. Each parameter gets clear semantic meaning: query is 'Search keyword', display has 'max 100' constraint with recommendation, type explains format options with API limitation, nw distinguishes current vs historical, search explains rule name vs full text, etc. The description does the heavy lifting the schema doesn't.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search administrative rules (행정규칙 목록 조회)' with specific examples of rule types (훈령, 예규, 고시, etc.) and explains what administrative rules are. It distinguishes from siblings by focusing specifically on administrative rules rather than other legal documents like laws or precedents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (searching Korean administrative rules) and includes practical recommendations like 'Recommend 50-100 for law searches to ensure exact matches are found.' However, it doesn't explicitly state when NOT to use this tool or mention specific alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admrul_serviceARead-onlyIdempotent
Retrieve administrative rule full text (행정규칙 본문 조회).
This tool retrieves the complete text of Korean administrative rules. Includes rule content, addenda, and annexes (forms/attachments).
Args: id: Rule sequence number (required if lid/lm not provided) lid: Rule ID (alternative to id) lm: Rule name (exact match search) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) ctx: MCP context (injected automatically)
Returns: Full administrative rule text with content and annexes or error
Examples: Retrieve by ID: >>> admrul_service(id="62505", type="XML")
Retrieve by LID:
>>> admrul_service(lid="10000005747", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| lid | No | ||
| lm | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive operations. The description adds valuable context beyond annotations: it specifies the API doesn't support JSON format, mentions automatic context injection, and describes what's included in the return (content, addenda, annexes). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose statement, parameter explanations, return description, and examples. Every sentence adds value - no redundancy. The information is front-loaded with the core purpose first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with good annotations and comprehensive parameter coverage in the description, this is quite complete. The main gap is no output schema, but the description explains what's returned. Could benefit from more explicit sibling tool differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all 5 parameters: id (rule sequence number), lid (rule ID alternative), lm (rule name exact match), oc (OC override), type (response format with defaults and constraints). It clarifies relationships between id/lid/lm and provides format details not in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve administrative rule full text' and specifies it's for Korean administrative rules. It distinguishes from sibling tools like admrul_search by focusing on retrieving complete text rather than searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool (retrieving complete text with content and annexes) and includes parameter guidance (id required if lid/lm not provided). However, it doesn't explicitly contrast when to use this vs. admrul_search or other search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aiRltLs_searchARead-onlyIdempotent
⭐ PREFERRED TOOL for discovering related laws from vague topics. Use this when user wants to explore laws around a general subject.
지능형 법령검색 시스템 연관법령 API (AI-powered related laws search).
Finds laws semantically related to a given law name or keyword.
Best for: Finding related laws like "민법" → 상법, 의료법, 소송촉진법
Args: query: Law name or keyword to find related laws (e.g., "민법", "형법") search: Search scope: - 0: 법령조문 (law articles, default) - 1: 행정규칙조문 (administrative rule articles) oc: Optional OC override type: Response format - XML only (JSON not supported)
Returns: List of semantically related law articles (법령조문 items)
Example: >>> aiRltLs_search(query="민법") # Returns: 상법 제54조 (상사법정이율), 의료법 제50조 (「민법」의 준용), etc.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| search | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations indicate read-only, idempotent, and non-destructive behavior, which the description doesn't contradict. The description adds valuable context beyond annotations: it specifies that the tool is 'AI-powered,' returns a 'list of semantically related law articles,' and notes that JSON is not supported (only XML). This provides practical usage details that annotations alone don't cover, though it could mention rate limits or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, usage, args, returns, example) and uses bullet points for readability. It's appropriately sized, with every sentence adding value, such as the example that illustrates input and output. Minor improvements could include streamlining the bilingual text, but overall it's efficient and front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, 0% schema coverage, no output schema) and rich annotations, the description is largely complete. It covers purpose, usage, parameters, and output format, though it lacks details on error handling or pagination. The example helps clarify usage, but without an output schema, more on return structure could be beneficial. Still, it provides sufficient context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all parameters in detail. It defines 'query' as a 'law name or keyword,' 'search' with scope options (0 for law articles, 1 for administrative rules), 'oc' as an optional override, and 'type' as response format (XML only). This adds essential meaning beyond the bare schema, ensuring parameters are well-understood.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose as 'discovering related laws from vague topics' and 'finds laws semantically related to a given law name or keyword,' using specific verbs ('discovering,' 'finds') and resources ('laws,' 'law articles'). It clearly distinguishes this from sibling tools by labeling it as the '⭐ PREFERRED TOOL' for this specific use case, differentiating it from other search tools in the list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('when user wants to explore laws around a general subject') and includes a 'Best for' section with examples (e.g., '민법' → 상법, 의료법, 소송촉진법). It also implicitly suggests alternatives by noting it's the 'PREFERRED TOOL' for this task, implying other tools might exist for different scenarios, though it doesn't name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aiSearchARead-onlyIdempotent
⭐ PREFERRED TOOL for vague or natural language queries. Use this FIRST when user's intent is unclear or conversational.
지능형 법령검색 시스템 검색 API (AI-powered semantic law search).
Uses intelligent/semantic search to find relevant law articles. Returns FULL ARTICLE TEXT (조문내용) - more comprehensive than eflaw_search.
Best for: Natural language queries like "뺑소니 처벌", "음주운전 벌금"
Args: query: Search query (natural language supported, e.g., "뺑소니 처벌") search: Search scope: - 0: 법령조문 (law articles, default) - 1: 법령 별표·서식 (law appendix/forms) - 2: 행정규칙 조문 (administrative rule articles) - 3: 행정규칙 별표·서식 (administrative rule appendix/forms) display: Results per page (default 20) page: Page number (default 1) oc: Optional OC override type: Response format - XML only (JSON not supported)
Returns: AI search results with full article text (법령조문 items with 조문내용)
Example: >>> aiSearch(query="뺑소니 처벌", search=0) # Returns: 특정범죄 가중처벌 등에 관한 법률 제5조의3 (도주차량 운전자의 가중처벌)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| search | No | ||
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, indicating a safe, repeatable read operation. The description adds valuable context beyond annotations: it specifies that it 'Returns FULL ARTICLE TEXT (조문내용)' and notes 'Response format - XML only (JSON not supported),' which are important behavioral traits not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with key information: it starts with usage priority, states the purpose, details parameters with examples, and ends with a return value summary and example. Every sentence adds value, with no redundant or wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, 0% schema coverage, no output schema), the description is highly complete. It covers purpose, usage guidelines, parameter semantics, return values ('Returns FULL ARTICLE TEXT'), and format constraints ('XML only'). The example further clarifies usage. With annotations providing safety context, this description leaves minimal gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of parameter documentation. It provides clear semantics for all 6 parameters: query is described as 'Search query (natural language supported),' search has enumerated scope options with defaults, display as 'Results per page,' page as 'Page number,' oc as 'Optional OC override,' and type as 'Response format - XML only.' This compensates well for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '지능형 법령검색 시스템 검색 API (AI-powered semantic law search)' and 'Uses intelligent/semantic search to find relevant law articles.' It distinguishes itself from siblings by explicitly mentioning 'more comprehensive than eflaw_search' and being the 'PREFERRED TOOL for vague or natural language queries.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidelines: 'Use this FIRST when user's intent is unclear or conversational' and 'Best for: Natural language queries like "뺑소니 처벌", "음주운전 벌금".' It also distinguishes from alternatives by noting it's 'more comprehensive than eflaw_search,' helping the agent choose between sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
article_citationARead-onlyIdempotent
Extract citations from a law article (조문 인용 조회).
This tool extracts all legal citations referenced by a specific law article. It parses the official hyperlinked citations from law.go.kr HTML pages, providing 100% accurate citation data with zero API cost.
The tool identifies:
External citations (references to other laws)
Internal citations (references within the same law)
Article, paragraph, and item level references
Args: mst: Law MST code (법령일련번호) - get this from eflaw_search or law_search results law_name: Law name in Korean (e.g., "자본시장과 금융투자업에 관한 법률") article: Article number (조번호, e.g., 3 for 제3조) article_branch: Article branch number (조가지번호, e.g., 2 for 제37조의2, default 0) oc: Optional OC override (defaults to env var)
Returns: Citation extraction result with: - success: Whether extraction succeeded - law_id: MST code - law_name: Law name - article: Article display (e.g., "제3조" or "제37조의2") - citation_count: Total number of citations found - citations: List of citation objects with target law, article, paragraph, item - internal_count: Number of same-law citations - external_count: Number of other-law citations
Examples: Get citations from 자본시장법 제3조: >>> article_citation( ... mst="268611", ... law_name="자본시장과 금융투자업에 관한 법률", ... article=3 ... )
Get citations from 건축법 제37조의2:
>>> article_citation(
... mst="270986",
... law_name="건축법",
... article=37,
... article_branch=2
... )Workflow: 1. First use eflaw_search(query="법명") to find the law and get MST 2. Then use article_citation(mst=..., law_name=..., article=...) to get citations 3. Optionally use eflaw_service to get the full article text
| Name | Required | Description | Default |
|---|---|---|---|
| mst | Yes | ||
| law_name | Yes | ||
| article | Yes | ||
| article_branch | No | ||
| oc | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it specifies the data source ('parses official hyperlinked citations from law.go.kr HTML pages'), accuracy claims ('100% accurate citation data'), and cost implications ('zero API cost'). It also describes what types of citations are identified (external, internal, article/paragraph/item level).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose statement, what it identifies, args, returns, examples, and workflow. Most sentences earn their place by providing essential information. There's some redundancy (the Korean title '조문 인용 조회' appears twice, and the workflow section partially repeats earlier guidance), but overall it's efficiently organized with front-loaded key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 0% schema coverage, no output schema), the description provides comprehensive context. It fully explains all parameters with examples, describes the return structure in detail (including all fields like success, law_id, citations, internal_count, etc.), provides concrete usage examples, and integrates this tool into a broader workflow with sibling tools. This compensates for the lack of structured output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of explaining parameters. It provides clear semantic explanations for mst ('Law MST code - get this from eflaw_search or law_search results'), law_name ('Law name in Korean'), article ('Article number'), article_branch ('Article branch number'), and oc ('Optional OC override'). It includes examples showing how to use article_branch for special cases like '제37조의2'. The only minor gap is that oc's purpose could be more explicitly explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('extract citations'), target resource ('from a law article'), and scope ('all legal citations referenced by a specific law article'). It explicitly distinguishes this tool's function from sibling tools like eflaw_search (which finds laws) and eflaw_service (which gets article text), establishing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit workflow guidance: 'First use eflaw_search... to find the law and get MST, then use article_citation... to get citations, optionally use eflaw_service to get the full article text.' This clearly defines when to use this tool versus alternatives and establishes prerequisites, with concrete examples showing the sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decc_searchARead-onlyIdempotent
Search administrative appeal decisions (행정심판례 목록 조회).
This tool searches Korean administrative appeal decisions. Administrative appeals are decisions made by administrative tribunals on appeals against government agency dispositions.
Args:
query: Search keyword (default "*")
display: Number of results per page (max 100, default 20)
page: Page number (1-based, default 1)
oc: Optional OC override (defaults to env var)
type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API)
search: 1=사건명 (case name, default), 2=본문검색 (full text)
cls: Decision type filter (재결구분코드)
gana: Dictionary search (ga, na, da, ...)
date: Decision date (YYYYMMDD)
dpa_yd: Disposition date range (YYYYMMDDYYYYMMDD)
rsl_yd: Decision date range (YYYYMMDDYYYYMMDD)
sort: Sort order - "lasc"|"ldes"|"dasc"|"ddes"|"nasc"|"ndes"
pop_yn: Popup flag - "Y" or "N"
ctx: MCP context (injected automatically)
Returns: Search results with administrative appeal decisions list or error
Examples: Search for all decisions: >>> decc_search(type="XML")
Search by keyword:
>>> decc_search(query="과징금", display=10, type="XML")
Search by date range:
>>> decc_search(rsl_yd="20200101~20201231", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | * | |
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| search | No | ||
| cls | No | ||
| gana | No | ||
| date | No | ||
| dpa_yd | No | ||
| rsl_yd | No | ||
| sort | No | ||
| pop_yn | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety aspects. The description adds valuable behavioral context: it specifies that JSON is not supported by the API (only HTML or XML), mentions pagination behavior with page numbers, and indicates maximum result limits (max 100 per page). This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose explanation, parameter documentation, returns statement, and examples. While comprehensive, it's appropriately sized for a tool with 13 parameters. Some redundancy exists (e.g., repeating 'type="XML"' in examples), but overall it's efficiently organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex search tool with 13 parameters, 0% schema coverage, and no output schema, the description does an excellent job explaining parameters and providing examples. It covers the search domain, parameter semantics, and response format limitations. The main gap is lack of output structure details, but given the annotations cover safety and the description explains format constraints, it's mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries full burden for parameter documentation. It provides detailed explanations for all 13 parameters, including defaults, constraints (max 100 for display), format specifications (YYYYMMDD for dates), and meaning of enum-like values (search=1 vs 2, sort options). The 'Args' section comprehensively documents what each parameter does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Korean administrative appeal decisions, specifying both the verb ('searches') and resource ('administrative appeal decisions'). It distinguishes from siblings by focusing specifically on administrative appeal decisions rather than other legal documents, and provides context about what administrative appeals are.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the explanation of what administrative appeals are, but doesn't explicitly state when to use this tool versus alternatives like 'decc_service' or other search tools in the sibling list. There's no guidance on prerequisites, limitations, or comparison with similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decc_serviceARead-onlyIdempotent
Retrieve administrative appeal decision full text (행정심판례 본문 조회).
This tool retrieves the complete text of Korean administrative appeal decisions. Includes case details, disposition information, decision summary, and reasoning.
Args: id: Decision sequence number (required) lm: Decision name (optional) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) ctx: MCP context (injected automatically)
Returns: Full administrative appeal decision text with details or error
Examples: Retrieve by ID: >>> decc_service(id="243263", type="XML")
Retrieve with case name:
>>> decc_service(id="245011", lm="과징금 부과처분 취소청구", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| lm | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond annotations: it specifies that JSON format is not supported by the API (only HTML/XML), mentions automatic injection of context parameter, and describes what content is included in the return (case details, disposition, summary, reasoning).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose statement, content details, parameter explanations, return description, and examples. Every sentence adds value with zero waste. The bilingual approach (Korean/English) is efficient for clarity without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with good annotations and comprehensive parameter documentation, the description is nearly complete. It explains what the tool returns (full text with details) though without an output schema. The main gap is lack of explicit sibling tool differentiation, but otherwise covers purpose, usage, parameters, and constraints adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all 4 parameters: 'id' as required decision sequence number, 'lm' as optional decision name, 'oc' as optional override with default behavior, and 'type' as format selection with default and constraints. The examples demonstrate practical usage with both required and optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('retrieve') and resource ('administrative appeal decisions'), including Korean terminology. It distinguishes from sibling tools like 'decc_search' by focusing on full text retrieval rather than searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (retrieving complete decision text) and includes examples. However, it doesn't explicitly state when NOT to use it or compare it to alternatives like 'decc_search' for finding decisions versus retrieving them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detc_searchARead-onlyIdempotent
Search Constitutional Court decisions (헌재결정례 목록 조회).
Search Korean Constitutional Court decisions.
Args: query: Search keyword (default "*" for all) display: Number of results per page (max 100, default 20) page: Page number (1-based, default 1) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML") search: Search type (1=decision name, 2=full text, default 1) gana: Dictionary search (ga, na, da, ...) sort: Sort order - "lasc"|"ldes"|"dasc"|"ddes"|"nasc"|"ndes"|"efasc"|"efdes" date: Final date (YYYYMMDD) ed_yd: Final date range (YYYYMMDD~YYYYMMDD) nb: Case number pop_yn: Popup flag ("Y" or "N")
Returns: Search results with Constitutional Court decision list or error
Examples: Search for decisions mentioning "벌금": >>> detc_search(query="벌금", display=10)
Search by date:
>>> detc_search(date=20150210)
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | * | |
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| search | No | ||
| gana | No | ||
| sort | No | ||
| date | No | ||
| ed_yd | No | ||
| nb | No | ||
| pop_yn | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing this as a safe, repeatable read operation. The description adds valuable context about pagination (max 100 results per page), response format options (HTML/XML), and search types (decision name vs full text), which goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (description, args, returns, examples) and front-loaded purpose. While comprehensive, some parameter explanations could be more concise. Every sentence adds value, but the parameter section is lengthy due to the high parameter count.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 12 parameters, 0% schema coverage, and no output schema, the description provides excellent parameter documentation and behavioral context. The main gap is lack of output format details beyond 'search results with Constitutional Court decision list or error' - more specifics about the response structure would be helpful given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for 12 parameters, the description carries the full burden. It provides detailed explanations for all parameters including defaults, constraints (max 100 for display), format specifications (YYYYMMDD for dates), and enumerated values (sort options, search types). This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Constitutional Court decisions with the specific resource identified. It distinguishes from some siblings by specifying 'Constitutional Court decisions' rather than other legal documents, though it doesn't explicitly differentiate from all search tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through examples showing different search scenarios (keyword search, date search), but doesn't provide explicit guidance on when to use this tool versus alternatives like 'detc_service' or other search tools in the sibling list. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detc_serviceARead-onlyIdempotent
Retrieve Constitutional Court decision full text (헌재결정례 본문 조회).
Args: id: Constitutional Court decision sequence number (헌재결정례일련번호) lm: Decision name (optional) oc: Optional OC override type: Response format - "HTML" or "XML" (default "XML")
Returns: Full Constitutional Court decision text or error
Examples: >>> detc_service(id="58386")
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| lm | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing this as a safe, repeatable read operation. The description adds valuable context about what gets returned ('Full Constitutional Court decision text or error') and includes an example showing minimal required parameters, which helps the agent understand the tool's behavior beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns, examples) and efficiently conveys necessary information. While slightly longer than minimal, every sentence adds value. The bilingual terminology could be slightly condensed but doesn't significantly impact conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with good annotations and no output schema, the description provides sufficient context: clear purpose, parameter explanations, return information, and an example. The main gap is lack of explicit guidance on when to use versus sibling tools, but otherwise it's complete enough for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of explaining parameters. It provides clear explanations for all 4 parameters: 'id' as the decision sequence number, 'lm' as optional decision name, 'oc' as optional override, and 'type' specifying response format with default value. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Retrieve') and resource ('Constitutional Court decision full text'), including both English and Korean terminology. It distinguishes itself from sibling tools like 'detc_search' (which likely searches for decisions) by focusing on retrieving full text of a specific decision identified by ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the example (retrieving a specific decision by ID) and parameter descriptions, but doesn't explicitly state when to use this tool versus alternatives like 'detc_search' or other *_service tools. No explicit when-not-to-use guidance or prerequisite information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drlaw_searchARead-onlyIdempotent
Retrieve law-ordinance linkage statistics (법령-자치법규 연계현황 조회).
This tool retrieves statistical information about how national laws are linked to local ordinances. Returns HTML visualization/dashboard.
⚠️ Note: This API only supports HTML output format (no XML/JSON). Response schema is not documented by the API provider.
Args: oc: Optional OC override (defaults to env var) ctx: MCP context (injected automatically)
Returns: HTML response with linkage statistics or error
Examples: Get linkage statistics: >>> drlaw_search()
| Name | Required | Description | Default |
|---|---|---|---|
| oc | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing safety. The description adds valuable context beyond annotations: it warns about HTML-only output format, notes the response schema is undocumented, and describes what the tool returns ('HTML visualization/dashboard' with statistics or error). This provides important behavioral details not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, warning, args, returns, examples) and avoids redundancy. Every sentence adds value, though the warning about HTML-only format could be integrated more smoothly rather than as a separate warning block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (statistical retrieval with HTML output), no output schema, and rich annotations, the description is mostly complete. It covers purpose, parameters, returns, and limitations. The main gap is lack of guidance on when to use versus sibling tools, but otherwise provides sufficient context for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and only 1 parameter, the description compensates well. It explains the 'oc' parameter as an 'Optional OC override (defaults to env var)' and clarifies 'ctx' is injected automatically. This adds meaningful semantics beyond the bare schema, though it doesn't explain what 'OC' stands for or when to override it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('retrieve statistical information'), resource ('law-ordinance linkage statistics'), and output format ('HTML visualization/dashboard'). It distinguishes itself from sibling tools by focusing on linkage statistics rather than general law searches or other specialized functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when statistical information about law-ordinance linkages is needed, but provides no explicit guidance on when to use this tool versus alternatives like 'law_search' or 'lnkLs_search'. The examples section shows basic usage but doesn't address decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eflaw_josubARead-onlyIdempotent
Query specific article/paragraph by effective date (시행일 기준 조·항·호·목 조회).
BEST TOOL for querying specific articles like "제174조", "제3조" etc. This returns only the requested article/paragraph, avoiding large full-law responses.
Args: id: Law ID (either id or mst is required) mst: Law serial number (MST) ef_yd: Effective date (YYYYMMDD) - required when using mst jo: Article number in XXXXXX format. Format: first 4 digits = article number (zero-padded), last 2 digits = branch suffix (00=main). Examples: "017400" (제174조), "017200" (제172조), "000300" (제3조), "001502" (제15조의2) hang: Paragraph number (6 digits, e.g., "000100" for 제1항) ho: Item number (6 digits, e.g., "000200" for 제2호) mok: Subitem (UTF-8 encoded, e.g., "다" for 다목) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API)
Returns: Specific law section content
Examples: Query 자본시장법 제174조: >>> eflaw_josub(mst="279823", jo="017400", type="XML")
Query 건축법 제3조 제1항:
>>> eflaw_josub(mst="276925", jo="000300", hang="000100", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| mst | No | ||
| ef_yd | No | ||
| jo | No | ||
| hang | No | ||
| ho | No | ||
| mok | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond what annotations provide. While annotations indicate readOnly, idempotent, and non-destructive operations, the description reveals important API constraints: 'JSON not supported by API' and that the tool returns 'Specific law section content' rather than full documents. It also explains the tool's precision focus ('returns only the requested article/paragraph'). However, it doesn't mention rate limits, authentication needs, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally well-structured and concise. It starts with the core purpose, immediately provides usage guidance, then systematically documents parameters with clear formatting, and ends with practical examples. Every sentence adds value - there's no redundancy or fluff. The use of bold, code formatting, and clear sections makes it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 9 parameters, 0% schema coverage, no output schema, and no behavioral annotations beyond basic hints, the description provides comprehensive coverage. It explains the tool's purpose, when to use it, all parameter semantics, format requirements, dependencies between parameters, API limitations (no JSON support), and provides working examples. The only minor gap is lack of explicit return format details, but 'Specific law section content' is reasonably descriptive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of parameter documentation and excels at it. It provides detailed explanations for all 9 parameters: clarifies that 'id or mst is required', explains ef_yd is 'required when using mst', provides format specifications for jo/hang/ho/mok with examples, explains oc defaults, and clarifies type options and defaults. The examples demonstrate practical parameter usage with real values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Query specific article/paragraph by effective date' and explicitly distinguishes it from alternatives by stating 'BEST TOOL for querying specific articles like "제174조", "제3조" etc. This returns only the requested article/paragraph, avoiding large full-law responses.' It provides specific verb (query) and resource (article/paragraph) with clear differentiation from sibling tools that appear to be search or service tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides excellent usage guidance with explicit when-to-use statements: 'BEST TOOL for querying specific articles' and 'avoiding large full-law responses.' It also provides concrete examples showing how to use the tool for specific scenarios (자본시장법 제174조, 건축법 제3조 제1항). The guidance helps the agent understand this is for precise retrieval rather than broad searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eflaw_searchARead-onlyIdempotent
Search current laws by effective date (시행일 기준 현행법령 검색).
This tool searches Korean laws organized by effective date. Use this when you need to find laws that are currently in effect.
Args:
query: Search keyword (law name or content)
display: Number of results per page (max 100, default 20). Recommend 50-100 for law searches (법령 검색) to ensure exact matches are found.
page: Page number (1-based, default 1)
oc: Optional OC override (defaults to env var)
type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API)
sort: Sort order - "lasc"|"ldes"|"dasc"|"ddes"|"nasc"|"ndes"|"efasc"|"efdes"
ef_yd: Effective date range (YYYYMMDDYYYYMMDD, e.g., "2024010120241231")
org: Ministry/department code filter
knd: Law type filter
Returns: Search results with law list or error
Examples: Search for "자동차관리법": >>> eflaw_search(query="자동차관리법", display=10, type="JSON")
Search with date range:
>>> eflaw_search(
... query="자동차",
... ef_yd="20240101~20241231",
... type="JSON"
... )
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| sort | No | ||
| ef_yd | No | ||
| org | No | ||
| knd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, idempotentHint=true, destructiveHint=false, covering safety. The description adds valuable context: it notes JSON is not supported by the API (only HTML/XML), provides a recommendation for display values (50-100 for law searches), and explains the effective date range format. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose statement, usage guidance, parameter details, returns, and examples. Every sentence adds value, but it's moderately long due to parameter explanations. The front-loaded purpose and usage are clear, though some redundancy exists (e.g., repeating 'JSON not supported' in type description and examples).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 9 parameters, 0% schema coverage, no output schema, and annotations covering safety, the description is highly complete. It explains all parameters, provides usage context, examples, and API limitations. Minor gap: no details on error handling or result structure beyond 'Search results with law list or error'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full burden. It provides detailed explanations for all 9 parameters: query (search keyword), display (results per page with max and recommendation), page, oc, type (format options and JSON limitation), sort (order options), ef_yd (date range format), org, and knd. This compensates fully for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search current laws by effective date' with Korean clarification. It specifies the resource (Korean laws) and scope (organized by effective date, currently in effect). The title is null, so the description fully defines the purpose without redundancy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use this when you need to find laws that are currently in effect.' This directly tells the agent when to select this tool versus alternatives. With many sibling tools (e.g., law_search, elaw_search, drlaw_search), this clear context helps differentiate based on effective date filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eflaw_serviceARead-onlyIdempotent
Retrieve full law content by effective date (시행일 기준 법령 본문 조회).
Retrieves the complete text of a law organized by effective date.
IMPORTANT: For specific article queries (e.g., "제174조"), ALWAYS use the jo parameter.
Some laws (e.g., 자본시장법) have 400+ articles and the full response can exceed 1MB.
Using jo returns only the requested article, which is much faster and cleaner.
Args: id: Law ID (either id or mst is required) mst: Law serial number (MST/lsi_seq) ef_yd: Effective date (YYYYMMDD) - required when using mst jo: REQUIRED for specific articles. Article number in XXXXXX format. Format: first 4 digits = article number (zero-padded), last 2 digits = branch suffix (00=main). Examples: "017400" (제174조), "017200" (제172조), "000300" (제3조), "001502" (제15조의2) chr_cls_cd: Language code - "010202" (Korean, default) or "010201" (Original) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API)
Returns: Full law content or specific article content
Examples: Retrieve specific article (RECOMMENDED): >>> eflaw_service(mst="279823", jo="017400", type="XML") # 자본시장법 제174조
Retrieve full law (WARNING: large response for some laws):
>>> eflaw_service(id="1747", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| mst | No | ||
| ef_yd | No | ||
| jo | No | ||
| chr_cls_cd | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety aspects. The description adds valuable behavioral context: it warns about potential large responses (exceeding 1MB), performance implications ('much faster and cleaner' with jo parameter), and API limitations (JSON not supported). This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, important note, args, returns, examples), uses bold for critical information, and every sentence adds value. It's appropriately sized for a complex tool with many parameters and important usage considerations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, 0% schema coverage, no output schema), the description provides comprehensive context: it explains all parameters, includes critical warnings about response size, provides format examples, clarifies API limitations, and gives practical usage examples. This is complete enough for effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of explaining parameters. It provides detailed explanations for all 7 parameters: clarifies requirements (id or mst required, ef_yd required with mst), format specifics (jo parameter format with examples), defaults (chr_cls_cd, type), and purpose of each parameter. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('retrieve full law content by effective date') and resource ('law content'), with the Korean title providing additional context. It distinguishes this tool from siblings like 'eflaw_search' (which likely searches) and 'eflaw_josub' (which may handle article subdivisions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs. alternatives: it strongly recommends using the 'jo' parameter for specific article queries to avoid large responses, and warns against full retrievals for laws with many articles. This directly addresses when to use specific features of this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
elaw_searchARead-onlyIdempotent
Search English-translated Korean laws (영문법령 목록 조회).
This tool searches Korean laws that have been translated to English. Useful for international users or bilingual legal research.
Args: query: Search keyword (Korean or English, default "*") display: Number of results per page (max 100, default 20). Recommend 50-100 for law searches (법령 검색) to ensure exact matches are found. page: Page number (1-based, default 1) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) sort: Sort order - "lasc"|"ldes"|"dasc"|"ddes"|"nasc"|"ndes"|"efasc"|"efdes" ef_yd: Effective date range (YYYYMMDD~YYYYMMDD) org: Ministry/department code filter knd: Law type filter ctx: MCP context (injected automatically)
Returns: Search results with English law list or error
Examples: Search for "insurance": >>> elaw_search(query="insurance", display=10, type="XML")
Search for "가정폭력방지":
>>> elaw_search(query="가정폭력방지", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | * | |
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| sort | No | ||
| ef_yd | No | ||
| org | No | ||
| knd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety aspects. The description adds valuable behavioral context beyond annotations: it notes JSON is not supported by the API (only HTML/XML), provides a display count recommendation for better results, and mentions the context parameter is injected automatically. This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose statement, usage context, detailed args section, returns statement, and examples. The args section is comprehensive but could be more concise. Every sentence adds value, though the display recommendation could be integrated more smoothly. Good front-loading of core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters with 0% schema coverage, no output schema, and annotations covering only safety aspects, the description provides excellent completeness. It explains all parameters meaningfully, includes API limitations (JSON not supported), provides usage recommendations, shows examples, and clarifies the automatic context injection. This fully addresses the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage (titles only, no descriptions), the description carries the full burden. It provides excellent parameter semantics: explains query accepts Korean or English, display has max 100 with recommendation, page is 1-based, type format options with JSON limitation, sort order codes, effective date range format, and that org/knd are filters. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Korean laws translated to English, specifying the resource (Korean laws) and action (search). It distinguishes from siblings by focusing on English translations, unlike tools like 'law_search' or 'eflaw_search' which likely search different language versions. However, it doesn't explicitly contrast with all siblings like 'elaw_service'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('useful for international users or bilingual legal research'), indicating its target audience. It includes a specific recommendation for display count (50-100) for law searches. However, it doesn't explicitly state when NOT to use it or mention alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
elaw_serviceARead-onlyIdempotent
Retrieve English law full text (영문법령 본문 조회).
This tool retrieves the complete text of Korean laws translated to English. Useful for international legal research and cross-border understanding.
Args: id: Law ID (required if mst not provided) mst: Law master number (required if id not provided) lm: Law name (alternative search method) ld: Announcement date (YYYYMMDD) ln: Announcement number oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) ctx: MCP context (injected automatically)
Returns: Full English law text with articles or error
Examples: Retrieve by ID: >>> elaw_service(id="000744", type="XML")
Retrieve by MST:
>>> elaw_service(mst="127280", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| mst | No | ||
| lm | No | ||
| ld | No | ||
| ln | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it specifies that JSON format is 'not supported by API' (important implementation detail), mentions automatic injection of 'ctx' parameter, and indicates the tool returns either 'Full English law text with articles or error' (outcome transparency).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose statement, usage context, parameter explanations, return specification, and examples. Every sentence earns its place - no wasted words. The information is front-loaded with core purpose first, then details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter retrieval tool with good annotations but no output schema, this description is complete: it covers purpose, usage context, all parameter semantics, behavioral constraints (format limitations), and provides examples. The combination with annotations provides full context for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all 7 parameters' semantics: it clarifies required/alternative relationships ('id required if mst not provided'), provides format details ('YYYYMMDD'), explains defaults ('defaults to env var'), specifies format options with constraints ('JSON not supported by API'), and notes automatic injection. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'retrieve the complete text of Korean laws translated to English' with specific verb ('retrieve') and resource ('English law full text'). It distinguishes from sibling tools like 'elaw_search' (likely searches metadata) by specifying it retrieves full text content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Useful for international legal research and cross-border understanding.' It doesn't explicitly state when NOT to use it or name specific alternatives among siblings, but the purpose differentiation implies usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expc_searchARead-onlyIdempotent
Search legal interpretations (법령해석례 목록 조회).
This tool searches Korean legal interpretation precedents issued by government agencies in response to inquiries about how to interpret specific laws.
Args:
query: Search keyword (default "*")
display: Number of results per page (max 100, default 20). Recommend 50-100 for searches to ensure exact matches are found.
page: Page number (1-based, default 1)
oc: Optional OC override (defaults to env var)
type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API)
search: 1=법령해석례명 (interpretation name, default), 2=본문검색 (full text)
inq: Inquiry organization name
rpl: Reply organization code
gana: Dictionary-style search (ga, na, da, ...)
itmno: Item number (e.g., 13-0217 → 130217)
reg_yd: Registration date range (YYYYMMDDYYYYMMDD)
expl_yd: Interpretation date range (YYYYMMDDYYYYMMDD)
sort: Sort order - "lasc"|"ldes"|"dasc"|"ddes"|"nasc"|"ndes"
pop_yn: Popup mode - "Y" or "N"
ctx: MCP context (injected automatically)
Returns: Search results with legal interpretations list or error
Examples: Search for "임차": >>> expc_search(query="임차", display=10, type="XML")
Search by date range:
>>> expc_search(query="자동차", expl_yd="20240101~20241231", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | * | |
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| search | No | ||
| inq | No | ||
| rpl | No | ||
| gana | No | ||
| itmno | No | ||
| reg_yd | No | ||
| expl_yd | No | ||
| sort | No | ||
| pop_yn | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety aspects. The description adds valuable context beyond annotations: it specifies that JSON is not supported by the API (only HTML or XML), mentions rate limits implicitly via 'max 100' for display parameter, and provides practical recommendations like 'Recommend 50-100 for searches to ensure exact matches are found.' This adds meaningful behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns, examples). While comprehensive, every sentence earns its place by providing essential information. The front-loaded purpose statement is clear, though the parameter documentation is lengthy but necessary given the schema coverage gap.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (14 parameters, 0% schema coverage, no output schema), the description does an excellent job of providing necessary context. It explains parameters thoroughly, mentions API limitations (JSON not supported), provides practical usage examples, and clarifies return values. The main gap is lack of output format details, but overall it's quite complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of parameter documentation. It provides detailed explanations for all 14 parameters, including defaults, constraints (max 100), format specifications (YYYYMMDD~YYYYMMDD), enum values (1=법령해석례명, 2=본문검색), and practical recommendations. This adds substantial value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search legal interpretations (법령해석례 목록 조회)' and elaborates with 'This tool searches Korean legal interpretation precedents issued by government agencies in response to inquiries about how to interpret specific laws.' It specifies the exact resource (Korean legal interpretation precedents) and distinguishes from siblings by focusing on this specific type of legal material.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (searching Korean legal interpretation precedents) but doesn't explicitly state when to use this tool versus alternatives like 'expc_service' or other search tools in the sibling list. It provides examples but no explicit guidance on tool selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expc_serviceARead-onlyIdempotent
Retrieve legal interpretation full text (법령해석례 본문 조회).
This tool retrieves the complete text of a legal interpretation precedent, including the question summary, answer, and reasoning.
Args: id: Legal interpretation sequence number (required) lm: Legal interpretation name (optional) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) ctx: MCP context (injected automatically)
Returns: Full legal interpretation text with question, answer, and reasoning or error
Examples: Retrieve by ID: >>> expc_service(id="334617", type="XML")
Retrieve with name:
>>> expc_service(id="315191", lm="여성가족부 - 건강가정기본법 제35조 제2항 관련", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| lm | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds useful behavioral context beyond annotations: it specifies the content returned (question summary, answer, reasoning), format constraints (JSON not supported), and that 'ctx' is injected automatically, which helps the agent understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by clear sections for Args, Returns, and Examples. Every sentence earns its place by providing essential information without redundancy, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no output schema), the description is largely complete: it explains the purpose, parameters, return content, and provides examples. However, it lacks explicit error handling details or performance considerations, leaving minor gaps in full contextual understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed semantics for all parameters: 'id' as required sequence number, 'lm' as optional name, 'oc' as optional override with default, 'type' as format with default and constraints, and 'ctx' as automatically injected. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('retrieve', 'retrieves') and resources ('legal interpretation full text', 'complete text of a legal interpretation precedent'). It distinguishes itself from sibling tools like 'expc_search' by focusing on retrieving full text rather than searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through examples (retrieving by ID or with name) but lacks explicit guidance on when to use this tool versus alternatives like 'expc_search' or other service tools. It provides basic context but no explicit when/when-not statements or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_josubARead-onlyIdempotent
Query specific article/paragraph by announcement date (공포일 기준 조·항·호·목 조회).
BEST TOOL for querying specific articles like "제174조", "제3조" etc. This returns only the requested article/paragraph, avoiding large full-law responses.
Args: id: Law ID (either id or mst is required) mst: Law serial number (MST) jo: Article number in XXXXXX format. Format: first 4 digits = article number (zero-padded), last 2 digits = branch suffix (00=main). Examples: "017400" (제174조), "017200" (제172조), "000300" (제3조), "001502" (제15조의2) hang: Paragraph number (6 digits, e.g., "000100" for 제1항) ho: Item number (6 digits, e.g., "000200" for 제2호) mok: Subitem (UTF-8 encoded, e.g., "다" for 다목) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API)
Returns: Specific law section content
Examples: Query 자본시장법 제174조: >>> law_josub(mst="279823", jo="017400", type="XML")
Query 건축법 제3조 제1항:
>>> law_josub(mst="276925", jo="000300", hang="000100", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| mst | No | ||
| jo | No | ||
| hang | No | ||
| ho | No | ||
| mok | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety aspects. The description adds valuable context: it specifies the tool returns 'only the requested article/paragraph' (scoping behavior), notes 'JSON not supported by API' (limitation), and provides format defaults ('default "XML"'). This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns, examples) and uses bold for emphasis. It's slightly verbose but every sentence adds value: the purpose statement, parameter explanations, and examples are all necessary given the complex parameter formatting. Minor redundancy in examples keeps it practical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters, 0% schema coverage, no output schema, and complex formatting requirements, the description is highly complete. It covers purpose, usage context, all parameter semantics, behavioral notes (e.g., format limitations), and provides concrete examples. Given the annotations handle safety, this description fills all remaining gaps effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all 8 parameters. It clarifies required conditions ('either id or mst is required'), provides detailed formatting rules for jo, hang, ho, and mok with examples, explains defaults for oc and type, and notes constraints like 'JSON not supported.' This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Query specific article/paragraph by announcement date' and explicitly positions it as 'BEST TOOL for querying specific articles like "제174조", "제3조" etc.' It distinguishes from siblings by noting it 'returns only the requested article/paragraph, avoiding large full-law responses,' which differentiates it from broader search tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it states this is the 'BEST TOOL for querying specific articles' and contrasts it with 'avoiding large full-law responses,' implying alternatives like law_search or law_service for broader queries. It also includes practical examples showing when to use specific parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_searchARead-onlyIdempotent
Search current laws by announcement date (공포일 기준 현행법령 검색).
This tool searches Korean laws organized by announcement (publication) date.
Args: query: Search keyword (law name or content) display: Number of results per page (max 100, default 20). Recommend 50-100 for law searches (법령 검색) to ensure exact matches are found. page: Page number (1-based, default 1) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) sort: Sort order date: Announcement date (YYYYMMDD) org: Ministry/department code filter knd: Law type filter
Returns: Search results with law list or error
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| sort | No | ||
| date | No | ||
| org | No | ||
| knd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, idempotent, and non-destructive behavior, which the description doesn't contradict. The description adds valuable context: it specifies the API doesn't support JSON (only HTML/XML), recommends display settings for optimal results, and clarifies the date format (YYYYMMDD). This goes beyond what annotations provide about safety and idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, parameter explanations in a bullet-like format, and a returns section. It's appropriately sized for a 9-parameter tool. Minor improvements could include bolding key constraints like 'JSON not supported' for faster scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 9 parameters, 0% schema coverage, no output schema, and read-only/idempotent annotations, the description provides strong coverage. It explains all parameters, notes API format limitations, gives usage recommendations, and clarifies the date format. The main gap is lack of output format details, but given the annotations indicate safe operation, this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries full burden for parameter documentation. It successfully explains all 9 parameters: query (search keyword), display (results per page with recommendation), page (page number), oc (OC override), type (response format with constraints), sort (sort order), date (announcement date with format), org (ministry filter), and knd (law type filter). The only gap is lack of enum values for sort, org, and knd.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Korean laws by announcement date, specifying the resource (Korean laws) and scope (by announcement date). It distinguishes itself from siblings by focusing on current laws rather than administrative rules or other legal documents, though it doesn't explicitly compare to each sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching current Korean laws by announcement date, with a recommendation to use higher display values (50-100) for law searches. However, it doesn't explicitly state when to use this tool versus alternatives like 'law_service' or 'eflaw_search', nor does it provide exclusion criteria or prerequisites for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_serviceARead-onlyIdempotent
Retrieve full law content by announcement date (공포일 기준 법령 본문 조회).
Retrieves the complete text of a law organized by announcement (publication) date.
IMPORTANT: For specific article queries (e.g., "제174조"), ALWAYS use the jo parameter.
Some laws (e.g., 자본시장법) have 400+ articles and the full response can exceed 1MB.
Using jo returns only the requested article, which is much faster and cleaner.
Args: id: Law ID (either id or mst is required) mst: Law serial number (MST) lm: Law modification parameter ld: Law date parameter (YYYYMMDD) ln: Law number parameter jo: REQUIRED for specific articles. Article number in XXXXXX format. Format: first 4 digits = article number (zero-padded), last 2 digits = branch suffix (00=main). Examples: "017400" (제174조), "017200" (제172조), "000300" (제3조), "001502" (제15조의2) lang: Language - "KO" (Korean) or "ORI" (Original) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API)
Returns: Full law content or specific article content
Examples: Retrieve specific article (RECOMMENDED): >>> law_service(mst="279823", jo="017400", type="XML") # 자본시장법 제174조
Retrieve full law (WARNING: large response for some laws):
>>> law_service(id="009682", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| mst | No | ||
| lm | No | ||
| ld | No | ||
| ln | No | ||
| jo | No | ||
| lang | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering basic safety. The description adds valuable behavioral context: performance warnings ('full response can exceed 1MB'), parameter-specific behavior ('Using `jo` returns only the requested article'), and API constraints ('JSON not supported by API'). It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, important notes, args, returns, examples) and uses bold text for critical information. While comprehensive, it's appropriately sized for a complex tool with many parameters. Some redundancy exists (e.g., repeating 'Retrieve' in purpose), but overall it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, 0% schema coverage, no output schema), the description is nearly complete. It explains parameters thoroughly, provides usage examples, and covers behavioral aspects. The main gap is lack of detail on return values beyond 'Full law content or specific article content', but this is mitigated by the examples showing actual usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all 9 parameters. It clarifies requirements ('either id or mst is required'), provides detailed formatting rules for 'jo' with examples, explains defaults ('defaults to env var' for 'oc'), and specifies allowed values for 'lang' and 'type'. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve full law content by announcement date' and 'Retrieves the complete text of a law organized by announcement (publication) date.' It specifies both the verb ('retrieve') and resource ('law content'), and distinguishes itself from sibling tools like 'law_search' by focusing on full content retrieval rather than searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use specific parameters: 'IMPORTANT: For specific article queries (e.g., "제174조"), ALWAYS use the `jo` parameter.' It also warns against full retrieval for large laws and recommends article-specific queries for speed and cleaner responses, offering clear alternatives within the same tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lnkDep_searchARead-onlyIdempotent
Search law-ordinance links by ministry (연계 법령 소관부처별 목록 조회).
This tool searches local ordinances linked to laws managed by a specific government ministry or department.
Args: org: Ministry/department code (required, e.g., "1400000") display: Number of results per page (max 100, default 20). Recommend 50-100 for law searches (법령 검색) to ensure exact matches are found. page: Page number (1-based, default 1) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) sort: Sort order ctx: MCP context (injected automatically)
Returns: Search results with ministry's linked ordinances or error
Examples: Search ordinances linked to ministry 1400000: >>> lnkDep_search(org="1400000", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| org | Yes | ||
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| sort | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety aspects. The description adds valuable behavioral context beyond annotations: it specifies response format limitations ('JSON not supported by API'), provides practical recommendations ('Recommend 50-100 for law searches to ensure exact matches are found'), and notes automatic parameter injection ('ctx: MCP context (injected automatically)').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by organized sections for Args, Returns, and Examples. Every sentence earns its place by providing essential information without redundancy. The bullet-point style in the Args section enhances readability while maintaining efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, 0% schema coverage, no output schema) and the absence of output schema, the description provides complete context. It covers purpose, all parameters with semantics, behavioral constraints, format limitations, practical recommendations, and includes a concrete example. The annotations provide safety context, and the description fills all remaining gaps effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of parameter documentation and excels at it. It provides detailed semantics for all parameters: explains 'org' is a ministry/department code with example, specifies 'display' range and recommendation, clarifies 'page' is 1-based, explains 'oc' defaults to env var, details 'type' options and limitations, mentions 'sort' exists, and notes 'ctx' is automatic. This comprehensively compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('searches') and resource ('local ordinances linked to laws managed by a specific government ministry or department'). It distinguishes from siblings by focusing on ministry-specific ordinance links, unlike other tools like 'law_search' or 'eflaw_search' that appear to search different legal domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('searches local ordinances linked to laws managed by a specific government ministry or department'), but doesn't explicitly state when not to use it or name specific alternatives among the sibling tools. The example shows a typical usage scenario, which helps guide implementation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lnkLsOrdJo_searchARead-onlyIdempotent
Search ordinance articles linked to law articles (연계 법령별 조례 조문 목록 조회).
This tool searches local ordinance articles that are linked to specific national law articles. Shows which local ordinances implement or relate to specific law provisions.
Args: query: Search keyword (default "*") display: Number of results per page (max 100, default 20). Recommend 50-100 for law searches (법령 검색) to ensure exact matches are found. page: Page number (1-based, default 1) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) knd: Law type code (to filter by specific law) jo: Article number (4 digits, zero-padded). Examples: "0002" (Article 2), "0020" (Article 20), "0100" (Article 100) jobr: Branch article suffix (2 digits, zero-padded). Examples: "00" (main article), "02" (Article X-2) sort: Sort order ctx: MCP context (injected automatically)
Returns: Search results with linked ordinance articles or error
Examples: Search ordinances linked to 건축법 시행령: >>> lnkLsOrdJo_search(knd="002118", type="XML")
Search specific article (제20조):
>>> lnkLsOrdJo_search(knd="002118", jo=20, type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | * | |
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| knd | No | ||
| jo | No | ||
| jobr | No | ||
| sort | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond annotations: it reveals that JSON format is not supported by the API (only HTML/XML), provides specific display recommendations (50-100 for law searches), and explains the tool's specialized purpose. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, args, returns, examples). Every sentence adds value: the opening explains the tool's unique purpose, parameter documentation is comprehensive, and examples show practical usage. It could be slightly more concise in the parameter explanations but remains efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 9 parameters, 0% schema coverage, no output schema, and annotations covering safety aspects, the description provides excellent context. It explains the tool's specialized linkage purpose, documents all parameters thoroughly, provides format limitations, and includes practical examples. The main gap is lack of output format details, but this is partially mitigated by the type parameter documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of parameter documentation. It provides detailed explanations for all 9 parameters: query purpose, display recommendations with rationale, page numbering, type format limitations with JSON clarification, knd filtering purpose, jo formatting requirements with examples, jobr formatting with examples, sort functionality, and ctx automation. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('searches local ordinance articles that are linked to specific national law articles') and resources ('ordinance articles', 'law articles'). It distinguishes this tool from siblings by explaining it focuses on linkages between ordinances and laws, unlike generic search tools like 'law_search' or 'ord_search'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('to see which local ordinances implement or relate to specific law provisions'). It includes practical examples showing usage patterns. However, it doesn't explicitly state when NOT to use it or name specific alternative tools from the sibling list for different search needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lnkLs_searchARead-onlyIdempotent
Search laws linked to local ordinances (법령-자치법규 연계 목록 조회).
This tool searches Korean laws that have linkages to local ordinances. Useful for understanding how national laws relate to local regulations.
Args: query: Search keyword (default "*") display: Number of results per page (max 100, default 20). Recommend 50-100 for law searches (법령 검색) to ensure exact matches are found. page: Page number (1-based, default 1) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML", JSON not supported by API) sort: Sort order - "lasc"|"ldes"|"dasc"|"ddes"|"nasc"|"ndes" ctx: MCP context (injected automatically)
Returns: Search results with linked laws list or error
Examples: Search for "자동차관리법": >>> lnkLs_search(query="자동차관리법", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | * | |
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| sort | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds valuable behavioral context beyond annotations: it notes that JSON is not supported by the API (only HTML/XML), provides a recommendation for display count (50-100 for law searches), and mentions that 'ctx' is injected automatically. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: purpose statement first, usage context second, followed by detailed parameter explanations and an example. Every sentence earns its place by providing essential information without redundancy. The example is concise and illustrative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, 0% schema coverage, no output schema), the description is largely complete. It covers purpose, usage, all parameters with semantics, and includes an example. However, it doesn't detail the return structure beyond 'Search results with linked laws list or error', which could be more specific (e.g., format of results). With no output schema, this leaves some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all parameters in the 'Args' section. It adds meaning beyond the schema: default values, constraints (max 100 for display), recommendations (50-100 for law searches), format options (HTML/XML, JSON not supported), sort order details, and automatic injection of 'ctx'. The only minor gap is that 'oc' is described only as 'Optional OC override (defaults to env var)', which is somewhat vague.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'searches Korean laws that have linkages to local ordinances.' It specifies both the verb ('searches') and the resource ('laws linked to local ordinances'), and distinguishes it from siblings by focusing on law-ordinance linkages rather than general law searches (e.g., law_search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: 'Useful for understanding how national laws relate to local regulations.' This indicates when to use it (for law-ordinance linkage analysis). However, it doesn't explicitly state when not to use it or name specific alternatives among the many sibling tools, which would be needed for a score of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lsDelegated_serviceARead-onlyIdempotent
Retrieve delegated laws/rules/ordinances (위임 법령 조회).
This tool retrieves information about laws, administrative rules, and local ordinances that are delegated by a parent law. Shows the delegation hierarchy and which specific articles delegate authority.
⚠️ Note: This API does NOT support HTML format (only XML/JSON).
Args: id: Law ID (required if mst not provided) mst: Law master number (required if id not provided) oc: Optional OC override (defaults to env var) type: Response format - "XML" only (JSON not supported by API, HTML not available) ctx: MCP context (injected automatically)
Returns: Delegation hierarchy with delegated laws/rules/ordinances or error
Examples: Retrieve delegations for 초·중등교육법: >>> lsDelegated_service(id="000900", type="XML")
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| mst | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explicitly warns that 'This API does NOT support HTML format (only XML/JSON)' and clarifies that JSON is actually not supported by the API despite the mention. While annotations cover read-only/idempotent/non-destructive aspects, the description adds important API format constraints that aren't captured in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose statement, important warning, parameter explanations, return description, and example. While efficient, the parameter explanations could be slightly more concise, and the format warning appears in two places (main description and type parameter).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, 0% schema coverage, no output schema, and read-only annotations, the description provides comprehensive parameter semantics and behavioral constraints. The main gap is the lack of output format details beyond 'Delegation hierarchy with delegated laws/rules/ordinances or error' - more specifics about the structure would be helpful given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining all parameters: 'id' and 'mst' as mutually required identifiers, 'oc' as an optional override with default behavior, and 'type' with format constraints and default value. It clarifies the relationship between id and mst ('required if mst not provided'/'required if id not provided') and notes that 'ctx' is injected automatically.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve delegated laws/rules/ordinances' with specific details about what information is returned ('delegation hierarchy and which specific articles delegate authority'). It distinguishes this from siblings by focusing specifically on delegated laws rather than general law search or other legal functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool (for retrieving delegation hierarchies) and includes a specific example. However, it doesn't explicitly state when NOT to use it or name specific alternative tools from the sibling list for different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prec_searchARead-onlyIdempotent
Search court precedents (판례 목록 조회).
Search Korean court precedents from Supreme Court and lower courts.
Args: query: Search keyword (default "*" for all) display: Number of results per page (max 100, default 20) page: Page number (1-based, default 1) oc: Optional OC override (defaults to env var) type: Response format - "HTML" or "XML" (default "XML") search: Search type (1=case name, 2=full text, default 1) sort: Sort order - "lasc"|"ldes"|"dasc"|"ddes"|"nasc"|"ndes" org: Court type code (400201=Supreme Court, 400202=lower courts) curt: Court name (대법원, 서울고등법원, etc.) jo: Referenced law name (형법, 민법, etc.) gana: Dictionary search (ga, na, da, ...) date: Decision date (YYYYMMDD) prnc_yd: Decision date range (YYYYMMDD~YYYYMMDD) nb: Case number (comma-separated for multiple) dat_src_nm: Data source name (국세법령정보시스템, 근로복지공단산재판례, 대법원) pop_yn: Popup flag ("Y" or "N")
Returns: Search results with precedent list or error
Examples: Search for precedents mentioning "담보권": >>> prec_search(query="담보권", display=10)
Search Supreme Court precedents:
>>> prec_search(query="담보권", curt="대법원")
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | * | |
| display | No | ||
| page | No | ||
| oc | No | ||
| type | No | XML | |
| search | No | ||
| sort | No | ||
| org | No | ||
| curt | No | ||
| jo | No | ||
| gana | No | ||
| date | No | ||
| prnc_yd | No | ||
| nb | No | ||
| dat_src_nm | No | ||
| pop_yn | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, repeatable read operation. The description adds some behavioral context by mentioning pagination ('display: Number of results per page'), search types, and format options, but doesn't cover rate limits, authentication needs, or error handling beyond 'Returns: Search results with precedent list or error.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (description, Args, Returns, Examples). Each sentence adds value: the opening defines purpose, Args section explains parameters thoroughly, Returns states outcome, and Examples provide practical usage. Some parameter explanations could be more concise, but overall it's efficiently organized with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (16 parameters, no output schema, no annotations beyond basic hints), the description does a reasonable job but has gaps. It explains parameters well and provides examples, but lacks information about response format details, error types, pagination behavior beyond basics, and how results are structured. The absence of an output schema means the description should ideally provide more about return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage (titles only provide parameter names), the description carries the full burden of explaining parameters. It provides detailed explanations for all 16 parameters including defaults, constraints ('max 100'), formats ('YYYYMMDD'), and enumerations ('lasc|ldes|dasc|ddes|nasc|ndes', 'Y or N'). This significantly compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search court precedents (판례 목록 조회)' followed by 'Search Korean court precedents from Supreme Court and lower courts.' It specifies the verb ('search'), resource ('court precedents'), and jurisdiction ('Korean court precedents from Supreme Court and lower courts'), distinguishing it from siblings like admrul_search or law_search which search different legal resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like prec_service (which likely provides detailed precedent information) or differentiate from other search tools on the server. The examples show basic usage but lack context about when this search is preferred over other legal search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prec_serviceARead-onlyIdempotent
Retrieve court precedent full text (판례 본문 조회).
Args: id: Precedent sequence number (판례일련번호) lm: Precedent name (optional) oc: Optional OC override type: Response format - "HTML" or "XML" (default "XML")
Returns: Full precedent text with details or error
Examples: >>> prec_service(id="228541")
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| lm | No | ||
| oc | No | ||
| type | No | XML |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds useful context about the optional parameters and default response format ('XML'), which helps the agent understand how to invoke the tool effectively without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement, organized parameter explanations, return statement, and a practical example. Every sentence serves a distinct purpose without redundancy, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with good annotations and no output schema, the description provides sufficient context: purpose, parameters, return expectation, and an example. It could improve by detailing error conditions or output structure, but it's largely complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by explaining all four parameters: 'id' as the required precedent sequence number, 'lm' as optional precedent name, 'oc' as optional override, and 'type' as response format with default 'XML'. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and the resource 'court precedent full text' with the Korean translation in parentheses. It distinguishes itself from sibling tools like 'prec_search' by specifying it retrieves the full text rather than searching for precedents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when full text of a precedent is needed, but provides no explicit guidance on when to use this tool versus alternatives like 'prec_search' or other service tools. The example shows basic usage but lacks context about prerequisites or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The tools are organized into clear categories like laws, administrative rules, precedents, and interpretations, which helps distinguish them. However, there is significant overlap within categories, such as multiple search tools for laws (eflaw_search, law_search, aiSearch, aiRltLs_search) that could confuse agents about which to use first. The descriptions provide guidance (e.g., 'PREFERRED TOOL' notes), but the redundancy creates ambiguity.
Naming is inconsistent across the toolset. Some tools use snake_case (admrul_search, eflaw_service), others use camelCase (aiRltLs_search, lnkDep_search), and some mix styles (drlaw_search). There is no uniform verb_noun pattern; for example, search tools vary (search vs. service suffixes), and tools like article_citation deviate entirely. This inconsistency makes the set harder to navigate.
With 26 tools, the count is excessive for a legal search server, leading to complexity and potential confusion. While the domain (Korean legal research) is broad, many tools are redundant (e.g., eflaw_search and law_search for similar law searches) or highly specialized (e.g., drlaw_search for linkage statistics). A more streamlined set of 10-15 tools could cover the same functionality more coherently.
The toolset is highly complete for Korean legal research, covering laws, administrative rules, precedents, interpretations, English translations, and linkages. Each category typically includes search and retrieval tools (e.g., search and service pairs), providing good lifecycle coverage. Minor gaps exist, such as no tool for comparing law versions over time, but overall, the surface is comprehensive for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
Resolve, search and verify legal citations against the official sources, with provenance.
Search U.S. case law, fetch opinions, and ask matter-aware legal questions over your documents.
Korean government open data - weather, population, law search via data.go.kr
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables searching and retrieving Korean legal information including laws, court precedents, legal interpretations, and local ordinances from the Korean National Law Information Center API with intelligent search ranking.
- FlicenseNot gradedqualityDmaintenanceEnables real-time search and analysis of Korean laws, legal precedents, and administrative rules through the National Law Information Center Open API, allowing AI agents to access official legal information for contract review, compliance, and legal research.73
- FlicenseNot gradedqualityBmaintenanceEnables AI to search and retrieve South Korean legal information from the National Law Information Center. It allows users to look up specific laws, articles, and detailed legal provisions using natural language queries.128
- AlicenseAqualityDmaintenanceEnables users to search and retrieve South Korean statutes, precedents, and administrative rules via the National Law Information Center API. It supports deep legal chain analysis, legislative history tracking, and legal terminology lookups through natural language.105MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rabqatab/LexLink-ko-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server