Skip to main content
Glama
rabqatab

LexLink

by rabqatab

🌐 Read this in other languages: English | 한국어 (Korean)

Kakao PlayMCP 10 3rd Prize MCP Python

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

Quick Start

1. Install Dependencies

uv sync

2. Configure Your OC Identifier

Option A: Environment Variable (Recommended)

# Set OC in your environment
export OC=your_id_here

Option 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 serve

Available 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 jo parameter. Some laws have 400+ articles and responses can exceed 1MB without jo.

# 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 jo parameter. Some laws have 400+ articles and responses can exceed 1MB without jo.

# 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"
)

Tip: All *_service tools in Phase 3 support a sections="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 "민법" → 상법, 의료법, 소송촉진법

Category

Tools

자치법규 (Local Ordinances)

ordin_search, ordin_service, ordinLsCon_search

조약 (Treaties)

trty_search, trty_service

법령정보 지식베이스 (Knowledge Base)

lstrm_ai_search, dlytrm_search, lstrm_rlt_search, dlytrm_rlt_search, lstrm_rlt_jo_search, jo_rlt_lstrm_search, ls_rlt_search

위원회 결정문 (Committee Decisions)

committee_search, committee_service

중앙부처 1차 해석 (Ministry Interpretations)

cgm_expc_search, cgm_expc_service

특별행정심판 (Special Appeals)

special_decc_search, special_decc_service

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

chain_full_research

Complete legal research: statutes + precedent analysis + interpretations

chain_amendment_track

Revision history + article-level diff across amendments

chain_dispute_prep

All case law sources across 4 databases (판례, 헌재결정례, 법령해석례, 행정심판례)

chain_law_system

Full law hierarchy: delegation tree + admin rules + ordinances

cache_stats

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

aiSearch, aiRltLs_search

"음주운전 처벌", "이혼 재산분할"

📋 Specific law/article

eflaw_search, law_search

"형법 제148조의2", "민법 상속편"

⚖️ Case law

prec_search, detc_search

"대법원 2023다12345"

🔗 Related laws

aiRltLs_search

"민법과 관련된 법률"

Configuration

Environment Variables

Variable

Default

Description

OC

(required)

law.go.kr API identifier (email local part)

LEXLINK_BASE_URL

http://www.law.go.kr

API base URL

LEXLINK_TIMEOUT

60

HTTP request timeout in seconds

SLIM_RESPONSE

(unset)

Set true to remove redundant raw XML when parsed data exists (for PlayMCP)

TRANSPORT

sse

Transport type: sse or http

OC Priority

When resolving the OC identifier:

  1. Tool argument (highest priority) - oc parameter in tool call

  2. Environment variable - OC env var (set via .env or HTTP header middleware)

Usage Examples

# 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:

  1. law_search(query="민법", display=50, type="XML") → Find Civil Code ID

  2. law_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:

  1. prec_search(query="담보권", curt="대법원", display=50, type="XML") → Search Supreme Court precedents

  2. prec_service(id="228541", type="XML") → Retrieve top precedent details

Result: LLM summarizes key precedents with case numbers, dates, and holdings related to security interests.


User Query: "How does the Labor Standards Act handle overtime, and are there relevant court precedents?"

Tool Calls:

  1. eflaw_search(query="근로기준법", display=50, type="XML") → Find Labor Standards Act

  2. eflaw_service(id="001234", jo="005000", type="XML") → Retrieve Article 50 (overtime provisions)

  3. prec_search(query="근로기준법 연장근로", display=30, type="XML") → Search overtime precedents

  4. prec_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:

  1. detc_search(query="벌금", display=50, type="XML") → Search Constitutional Court decisions

  2. detc_service(id="58386", type="XML") → Retrieve decision full text

  3. law_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:

  1. admrul_search(query="학교", display=50, type="XML") → Search school-related administrative rules

  2. admrul_service(id="62505", type="XML") → Retrieve rule content

  3. expc_search(query="학교", display=30, type="XML") → Search legal interpretations

  4. expc_service(id="334617", type="XML") → Retrieve interpretation details

Result: LLM provides overview of administrative framework for schools with official agency interpretations.


User Query: "I'm researching rental housing disputes. Show me the relevant law, court precedents, and administrative appeal decisions."

Tool Calls:

  1. eflaw_search(query="주택임대차보호법", display=50, type="XML") → Find Housing Lease Protection Act

  2. eflaw_service(id="002876", type="XML") → Retrieve full law text

  3. prec_search(query="주택임대차", display=50, type="XML") → Search housing lease precedents

  4. prec_service(id="156789", type="XML") → Retrieve key precedent

  5. decc_search(query="주택임대차", display=30, type="XML") → Search administrative appeal decisions

  6. decc_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:

  1. eflaw_search(query="건축법", display=50, type="XML") → Find Building Act, get MST

  2. article_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:

  1. 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.


User Query: "What laws are related to the Civil Code?"

Tool Calls:

  1. 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

  1. AI Tools for Vague Queries: Use aiSearch or aiRltLs_search FIRST when user intent is unclear or conversational

  2. Search First, Then Retrieve: Always search to find IDs before calling service tools

  3. Use display=50-100 for Law Searches: Ensures exact matches are found due to relevance ranking

  4. Combine Phases: Mix Phase 1 (laws), Phase 2 (administrative rules), Phase 3 (precedents), and Phase 5 (AI search) for complete research

  5. Type Parameter: Default is type="JSON"; specify type="XML" if your pipeline requires XML

  6. Article 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 file

Running 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 e2e

Adding 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:

  1. Follow the pattern established in src/lexlink/server.py

  2. Use ctx: Context = None parameter for MCP logging/progress

  3. Use generic parser functions (extract_items_list, update_items_list)

  4. Add semantic validation tests

Tool Implementation Pattern:

  • Each tool is a decorated function with MCP schema

  • Uses ctx: Context = None parameter for MCP context

  • 2-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/sse

Production Setup:

Internet → Nginx (port 80) → LexLink (port 8000)

PlayMCP Registration:

Field

Value

MCP Endpoint

http://YOUR_SERVER_IP/sse (no port!)

Authentication

Key/Token (Header: OC)

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.jsonl

Troubleshooting

"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 60s

Server won't start after updating dependencies

Solution: Re-sync dependencies:

uv sync --reinstall

Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Write tests for new functionality

  4. Ensure all tests pass (uv run pytest)

  5. Commit changes (git commit -m 'Add amazing feature')

  6. Push to branch (git push origin feature/amazing-feature)

  7. 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


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 30min

  • Added law name/abbreviation resolution (resolver.py): 52 seed aliases + dynamic learning

  • Added 5 Phase 9 chain tools: chain_full_research, chain_amendment_track, chain_dispute_prep, chain_law_system, cache_stats

  • Inspired 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 tools

  • Refactored shared logic into _helpers.py

  • See CHANGELOG.md for full details

v1.5.0 - 2026-02-28

Refactor: Remove Smithery Dependency

  • Removed smithery package and 8 transitive dependencies

  • Simplified OC resolution to 2-tier (tool arg > env var)

  • Added stdio_server.py entry point for stdio transport

  • See CHANGELOG.md for full details

For the full changelog (v1.0.0 – v2.1.0), see CHANGELOG.md.


Powered by MCP

Available Tools

26 tools
admrul_serviceA
Read-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")
ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
lidNo
lmNo
ocNo
typeNoXML

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

aiSearchA
Read-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 (도주차량 운전자의 가중처벌)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
searchNo
displayNo
pageNo
ocNo
typeNoXML

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_citationA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
mstYes
law_nameYes
articleYes
article_branchNo
ocNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_serviceA
Read-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")
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
lmNo
ocNo
typeNoXML

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_serviceA
Read-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")

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
lmNo
ocNo
typeNoXML

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

eflaw_josubA
Read-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")
ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
mstNo
ef_ydNo
joNo
hangNo
hoNo
mokNo
ocNo
typeNoXML

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_serviceA
Read-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")
ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
mstNo
ef_ydNo
joNo
chr_cls_cdNo
ocNo
typeNoXML

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_serviceA
Read-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")
ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
mstNo
lmNo
ldNo
lnNo
ocNo
typeNoXML

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_serviceA
Read-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")
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
lmNo
ocNo
typeNoXML

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_josubA
Read-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")
ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
mstNo
joNo
hangNo
hoNo
mokNo
ocNo
typeNoXML

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_serviceA
Read-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")
ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
mstNo
lmNo
ldNo
lnNo
joNo
langNo
ocNo
typeNoXML

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

lsDelegated_serviceA
Read-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")

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
mstNo
ocNo
typeNoXML

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_serviceA
Read-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")

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
lmNo
ocNo
typeNoXML

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

A3.7/5.0
Disambiguation3/5

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 Consistency2/5

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.

Tool Count2/5

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.

Completeness4/5

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

ActivityStale
ResponsivenessResponsive

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

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables 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.
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    10
    5
    MIT

Latest Blog Posts

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