Skip to main content
Glama
songh2

Korean Law MCP

by songh2

Korean Law MCP

법제처 42개 API를 10개 도구로. 법령·판례·행정규칙·자치법규·조약·해석례(국세청 포함) 조회와 AI 답변의 인용 검증을 AI 어시스턴트나 터미널에서 바로 사용.

npm version MCP 1.27 License: MIT MCP Registry

법제처 Open API 기반 MCP 서버 + CLI. Claude Desktop, Cursor, Windsurf, Zed, Claude.ai 등에서 바로 사용 가능.

English

바로 쓰기: Claude.ai 커넥터에 https://mcp.gomdori.app/law?oc=본인키 한 줄, Claude Code는 플러그인 두 줄 → 설치 및 사용법

VS Code·Cursor는 버튼 한 번으로 연결됩니다(키 없이 공용 한도로 동작, 본인 키는 주소 끝에 ?oc=본인키).

VS Code에 설치 Cursor에 설치

쓸모 있었다면 GitHub ⭐ 하나 눌러주세요. 다른 사람이 이 도구를 찾는 데 도움이 됩니다.

국가법령정보 MCP 활용하기 — 영상 보기

▶ 클릭하면 유튜브에서 재생됩니다.

AI에 연결하기

Claude에 연결하기

ChatGPT에 연결하기

Claude에 법령MCP 연결하기

GPT에 법령MCP 연결하기


최근 업데이트

현재 버전 v4.15.14. 수치는 모두 CHANGELOG의 실측 기록에서 옮김.

버전

주요 변경

변화

4.15.14

보안: 의존성 취약점 정리 — 하위 kordoc 4.24.8(zod 4), zod 4.6.7, 개발 도구·하위 의존성 수정판

npm audit 10건 → 0건

4.15.13

Claude Code 플러그인이 로컬 npx 대신 공개 서버(mcp.gomdori.app/law)에 연결, 키는 선택

설치 없음

4.15.12

도구 사이 안내(예: 여러 법령 감시는 search_law_bulk)를 도구 설명에서 서버 안내문(instructions)으로 옮김

같은 질문 4개에서 고르는 도구 동일

4.15.11

노출 도구 10개에 사람용 제목(title·annotations.title) 추가: 클라이언트 승인 창에 "법령 검색"처럼 표시

제목 0개 → 10개

4.15.10

국세청 법령해석 본문 조회: 검색 결과의 본문조회ID(ntstDcmId)로 get_decision_text(domain="nts") — 요지·회신·본문 (#178)

목록·링크만 → 본문까지

이전 버전 전체 내역은 CHANGELOG.md 참조. 대표 이정표:

  • v4.14.1: 조문 1개 조회 3.1초 → 0.24초(13배), 인용 15건 검증 ✓0 → ✓15

  • v4.13.0: 준법 등록부 감시 search_law 98회 호출 → search_law_bulk 1~2회

  • v4.4.0: 노출 도구 19개 → 9개, 도구 목록 컨텍스트 ~15.1KB → ~7.2KB (52% 감축)

  • v3.4.0: 판례·헌재·행심 응답 토큰 평균 74% 감축


Related MCP server: Korean Law MCP

왜 만들었나

대한민국에는 1,600개 이상의 현행 법률, 10,000개 이상의 행정규칙, 그리고 대법원·헌법재판소·조세심판원·관세청까지 이어지는 방대한 판례 체계가 있습니다. 이 모든 게 법제처라는 하나의 사이트에 있지만, 개발자 경험은 최악입니다.

이 프로젝트는 그 전체 법령 시스템을 10개 도구로 감싸서, AI 어시스턴트나 스크립트에서 바로 호출할 수 있게 만듭니다. 법제처를 수백 번 수동 검색하다 지친 공무원이 만들었습니다.


설치 및 사용법

공식 MCP 레지스트리 등재: io.github.chrisryugj/korean-law-mcp

0단계: API 키 발급 (무료, 1분)

**법제처 Open API 인증키(OC)**를 먼저 발급받으세요. 로컬 설치(방법 4·5)는 키가 꼭 있어야 하고, 공개 서버를 쓰는 방법(1~3)은 키 없이도 공용 한도로 동작합니다.

법제처 Open API 신청 페이지 접속 → 회원가입·로그인 → "Open API 사용 신청" → 신청서 작성 시 인증키(OC) 발급 (예: honggildong). 이 인증키를 아래 설정에서 사용.

방법 1: Claude Code 플러그인 (한 줄 설치, 가장 쉬움) ⚡

Claude Code를 쓴다면 두 줄이면 끝. API 키는 설치 중 자동으로 물어봅니다.

/plugin marketplace add chrisryugj/korean-law-mcp
/plugin install korean-law@korean-law-marketplace

설치 중 법제처 API 키를 묻습니다 (0단계에서 발급받은 honggildong 같은 키, 민감정보로 저장). 비워 두면 공용 한도로 동작합니다. 이후 Claude Code에 자연어로 질문하면("근로기준법 제74조 알려줘", "민법 제750조 판례 검증해줘") korean-law MCP 도구가 자동 호출됩니다. 새 버전은 한 줄로 최신화:

/plugin marketplace update korean-law-marketplace

플러그인은 공개 서버 https://mcp.gomdori.app/law 에 연결합니다(내 컴퓨터에 아무것도 설치하지 않음). 키는 apikey 헤더로 보냅니다. 서버를 거치지 않으려면 방법 4의 로컬 설치를 쓰세요.

Troubleshooting: Permission denied (publickey) 에러

설치 중 git@github.com: Permission denied (publickey).가 뜨면 설치기가 GitHub에 SSH로 접속했는데 SSH 키가 없는 경우 (처음 Git을 쓰는 비개발자·법률 실무자에게 자주 발생). 둘 중 하나로 해결:

  1. HTTPS로 강제 우회 (가장 간단, 추천): 아래 한 줄 실행 후 다시 /plugin install. 설치 후에도 그대로 둬도 무방 (HTTPS clone이 항상 동작)

    git config --global url."https://github.com/".insteadOf "git@github.com:"
  2. SSH 키 생성 후 등록: SSH를 자주 쓸 예정이라면

    ssh-keygen -t ed25519 -C "your-email@example.com"   # 엔터 3번
    cat ~/.ssh/id_ed25519.pub                            # 출력 복사

    복사한 공개키를 GitHub → Settings → SSH and GPG keys → New SSH key에 붙여넣기

방법 2: Claude.ai 웹에서 바로 사용 (설치 없음)

아무것도 설치하지 않고 주소 하나만 입력. Claude Pro/Max/Team/Enterprise 요금제 필요 (Free는 커넥터 1개만 가능).

  1. claude.ai 로그인 → 왼쪽 사이드바 하단 본인 이름 → 설정(Settings) → 커넥터(Connectors)

  2. 커스텀 커넥터 추가 → 이름 korean-law(아무거나 OK), URL은 아래 주소 (honggildong을 0단계에서 발급받은 본인 인증키로 교체)

    https://mcp.gomdori.app/law?oc=honggildong
  3. 추가 → 커넥터 구성(Configure)에서 모든 도구를 항상 사용(Always allow)으로 설정 (매번 승인 불필요, 중요)

  4. 채팅에서 "근로기준법 제74조 알려줘" 입력

커넥터 URL을 수정하려면 삭제 후 다시 추가. 프로필 선택 불필요(10개 도구가 42개 API 전체 커버), 기존 ?profile=lite&oc=... 주소도 그대로 작동.

방법 3: AI 데스크톱 앱에서 사용 (설치 없음)

Claude Desktop, Cursor, Windsurf 같은 데스크톱 앱을 쓰고 있다면, 설정 파일에 아래 내용을 추가하세요.

설정 파일 위치 찾기:

앱 이름

Windows

Mac

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json

~/Library/Application Support/Claude/claude_desktop_config.json

Cursor

프로젝트 폴더 안 .cursor/mcp.json

프로젝트 폴더 안 .cursor/mcp.json

Windsurf

프로젝트 폴더 안 .windsurf/mcp.json

프로젝트 폴더 안 .windsurf/mcp.json

Claude Desktop

Claude Desktop은 원격 HTTP MCP 서버를 직접 연결하지 못하므로 mcp-remote 어댑터를 통해 연결합니다. Node.js 18 이상이 필요합니다 (npx 사용을 위해).

{
  "mcpServers": {
    "korean-law": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.gomdori.app/law?oc=honggildong"
      ]
    }
  }
}

honggildong을 본인 인증키로 바꾸세요. Node.js를 설치하기 싫다면 방법 4의 로컬 설치를 사용하세요.

Cursor, Windsurf 등 (원격 HTTP 지원 클라이언트)

{
  "mcpServers": {
    "korean-law": {
      "url": "https://mcp.gomdori.app/law?oc=honggildong"
    }
  }
}

이미 다른 MCP 서버가 설정되어 있다면, "mcpServers": { ... } 안에 "korean-law": { ... } 부분만 추가하면 됩니다.

저장 후 앱을 재시작하면 법령 도구가 활성화됩니다.

방법 4: 내 컴퓨터에 직접 설치 (오프라인 가능)

인터넷 없이 쓰고 싶거나, 원격 서버를 거치지 않으려면 직접 설치할 수 있습니다.

사전 준비: Node.js 20.19 이상이 설치되어 있어야 합니다 (22.12 이상 권장).

자동 설치 (추천):

npx --ignore-scripts --omit=optional korean-law-mcp setup

설치 마법사가 API 키 입력 → AI 클라이언트 선택 → 설정 파일 자동 등록까지 한 번에 처리합니다. Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Gemini CLI, Zed, Antigravity를 지원합니다. 현재 폴더에 쓰는 설정(Claude Code .mcp.json, VS Code .vscode/mcp.json)은 git에 커밋될 수 있어 키를 평문으로 넣지 않습니다. Claude Code는 ${LAW_OC} 참조를 넣으니 셸 설정에 export LAW_OC=발급받은키를 추가하고, VS Code는 처음 실행할 때 키를 묻습니다.

수동 설치:

npm install --ignore-scripts --omit=optional -g korean-law-mcp

AI 앱 설정 파일에 아래 내용을 추가합니다 (honggildong을 본인 인증키로 바꾸세요):

{
  "mcpServers": {
    "korean-law": {
      "command": "korean-law-mcp",
      "env": {
        "LAW_OC": "honggildong"
      }
    }
  }
}

앱을 재시작하면 완료!

방법 5: 터미널(CLI)에서 직접 사용

개발자라면 터미널에서 직접 법령을 검색할 수 있습니다.

# 설치
npm install --ignore-scripts --omit=optional -g korean-law-mcp

# 인증키 설정 (honggildong을 본인 키로 바꾸세요)
export LAW_OC=honggildong        # Mac/Linux
set LAW_OC=honggildong           # Windows CMD
$env:LAW_OC="honggildong"       # Windows PowerShell

# 사용 예시
korean-law "민법 제1조"                    # 자연어로 바로 조회
korean-law search_law --query "관세법"     # 도구 직접 호출
korean-law list                            # 전체 도구 목록
korean-law list --category 판례            # 카테고리별 필터
korean-law help search_law                 # 도구별 도움말

API 키 전달 방법 정리

여러 방법으로 인증키를 전달할 수 있습니다. 위에서부터 우선 적용됩니다:

방법

사용법

언제 쓰나

URL에 포함

주소 끝에 ?oc=내키

웹 클라이언트에서 가장 간편

HTTP 헤더

apikey: 내키

프로그래밍으로 연동할 때

환경변수

LAW_OC=내키

로컬 설치(방법 4, 5)

도구 파라미터

apiKey: "내키"

특정 요청만 다른 키 쓸 때

키 없이 공개 서버(mcp.gomdori.app/law)를 쓰면 무키 사용자 전원이 공유하는 서버 키 한도를 거침. 자체 키를 넘기면 이 한도와 무관함(무료 발급: https://open.law.go.kr).

법제처 API 프로토콜 설정

법제처 API 호출은 기본 HTTPS. 사내망·폐쇄망 등 인증서 검증이 어려운 환경에서는 LAW_API_PROTOCOL=http로 HTTP 호출 가능. 허용값은 http, https이며 설정하지 않거나 다른 값이면 https. MCP 클라이언트 설정의 env 블록에 넣는 방식이 가장 명확합니다:

{
  "mcpServers": {
    "korean-law": {
      "command": "korean-law-mcp",
      "env": {
        "LAW_OC": "honggildong",
        "LAW_API_PROTOCOL": "http"
      }
    }
  }
}

터미널 환경변수나 .env 파일(LAW_OC=honggildong 다음 줄에 LAW_API_PROTOCOL=http)도 가능:

export LAW_API_PROTOCOL=http        # Mac/Linux
set LAW_API_PROTOCOL=http           # Windows CMD
$env:LAW_API_PROTOCOL="http"       # Windows PowerShell

국세청 판례 서버 TLS/프록시 설정

국세청 출처 판례 본문은 법제처 JSON 응답에 없을 때, 국세청 법령해석(nts) 본문은 항상 taxlaw.nts.go.kr을 조회합니다. 이 서버는 HTTP로 접근해도 HTTPS로 리다이렉트되므로, LAW_API_PROTOCOL=http와 별개로 Node.js 런타임이 https://taxlaw.nts.go.kr 인증서를 신뢰해야 합니다. 사내망·폐쇄망·SSL inspection 프록시 뒤에서는 브라우저로는 열려도 Node.js fetch()만 [EXTERNAL_API_ERROR] fetch failed로 실패할 수 있습니다(인증서 저장소·프록시 설정이 다름). 먼저 Node.js 기준으로 연결을 확인하세요:

node -e "fetch('https://taxlaw.nts.go.kr/qt/USEQTA002P.do?ntstDcmId=200000000000019303').then(r=>console.log(r.status,r.url)).catch(e=>console.error(e.name,e.message,e.cause))"

별도 웹 프록시를 거쳐야 한다면 프록시 주소를 설정합니다(국세청 판례 본문 fallback·국세청 법령해석 본문의 외부 HTTPS 연결에 적용). Windows 시스템 환경변수는 관리자 권한 터미널에서 setx로 등록하고, 적용 후 Windows 또는 Node.js 프로세스를 재시작하세요:

LAW_EXTERNAL_HTTPS_PROXY=http://proxy-host:8080
setx LAW_EXTERNAL_HTTPS_PROXY http://proxy-host:8080 /M

프록시 경로에서도 사내 인증서 검증 문제가 남으면, 원인 확인용으로만 이 프로젝트의 외부 HTTPS 프록시 경로에 한해 TLS 인증서 검증을 임시로 끌 수 있습니다. 운영 상시 설정으로 쓰지 마세요. 두 번째 줄은 진단 후 제거:

setx LAW_EXTERNAL_TLS_REJECT_UNAUTHORIZED 0 /M
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v LAW_EXTERNAL_TLS_REJECT_UNAUTHORIZED /f

사용 예시

기본 조회

"관세법 제38조 알려줘"
→ search_law("관세법") → MST 획득 → get_law_text(mst, jo="003800")

"화관법 최근 개정 비교"
→ "화관법" → "화학물질관리법" 자동 변환 → compare_old_new(mst)

"근로기준법 제74조 해석례"
→ search_interpretations("근로기준법 제74조") → get_interpretation_text(id)

"산업안전보건법 별표1 내용 알려줘"
→ get_annexes(lawName="산업안전보건법 별표1") → HWPX 파일 다운로드 → 표/텍스트 Markdown 변환

약칭이 다른 말과 붙어도 풀어서 검색함: 화관법 시행령 → 화학물질관리법 시행령, 중처법 제4조 책임자 → 중대재해 처벌 등에 관한 법률 제4조 책임자.

자연어로 복합 분석 (시나리오)

자연어로 물으면 질문에 맞는 추가 분석이 자동으로 붙음. 시나리오는 쿼리 키워드에서 자동 감지되거나 scenario 파라미터로 직접 지정.

이렇게 물으면

이런 결과

"식품위생법 영업정지 과태료 감경 가능?"

처분 기준표(1·2·3차 금액) + 벌칙 조항 + 감경된 행정심판 사례 + 개정 이력

"수입 통관 FTA 적용 확인"

관세법 + 관세청 유권해석 + FTA 조약 원문 + 세율 별표 + 조세심판원 판결

"건축법 허가 절차"

법률→시행령→시행규칙 근거 + 수수료·서식 + 훈령·예규·고시 + 조례 특칙 + 유권해석

"건축법 영향도 분석"

하위법령 + 영향받는 전국 자치법규 + 관련 행정규칙

"국민건강보험법 위임입법"

"시행령으로 정한다" 조항 중 아직 시행령이 없는 것

"주차 조례 상위법 적합성"

헌재 위헌 결정 + 행정심판 취소 사례 + 상위법 근거 대조

"근로기준법 개정이력 타임라인"

신구대조표 + 조문별 개정 이력 + 판례·해석례 시간순 정리

모든 결과 끝에 **"이어서 할 수 있는 조회"**가 제안됨.

검증·분석 기능

기능

이렇게 물으면

하는 일

verify_citations

AI가 쓴 법률 답변 붙여넣기

인용 조문·판례를 법제처 DB와 대조: 실존 ✓ / 없음 ✗(존재 범위 제시) / 제목 불일치 [CONTENT_MISMATCH] / 폐지 ⌛ REPEALED

cite_check

"2007다27670 아직 유효해?"

그 사건번호를 인용한 후속 판례를 본문검색으로 역추적, 전원합의체 판결의 변경·폐기 선언("…변경하기로 한다") 감지

applicable_law

"2023.5.10 당시 도로교통법 제44조"

기준일 시행 버전(MST) 특정 → 그 시점 조문 → 현행 비교 → 이후 개정 부칙의 적용례·경과조치 발췌. 옛 법령명·고시도 처리

impact_map

"민법 제103조 인용한 판례"

판례·헌재·해석례·행정심판·자치법규 역방향 탐색 + 인용 법령 정방향 + mermaid 그래프

time_travel

"개인정보보호법 2020-01-01 vs 2025-11-01"

두 시점 본문을 조문 단위로 diff: 추가(+)·삭제(-)·변경(△)

action_plan

"전세금 못 받았어"

상황진단 → 권리·구제수단 → 신청기관·기한 → 필요서류·양식 → 함정·주의, 5단계 안내

ordinance_radar

"광진구 주차장 조례"

조례 제1조(목적)에서 근거 상위법 추출 → 상위법 현행 시행일과 조례 시행일 대조 → 정비 검토 대상 표시

verify_citations 실제 결과 예시:

"민법 제750조 … 근로기준법 제60조 제1항 … 상법 제401조의2 제7항 … 형법 제9999조"

✓ 민법 제750조(불법행위의 내용) 실존
✓ 근로기준법 제60조(연차 유급휴가) 제1항 실존
✗ 상법 제401조의2 — 제7항 없음 (최대 제2항)
✗ 형법 제9999조 — 해당 조문 없음 (존재 범위: 제1조~제372조)

자주 쓰는 옵션

하고 싶은 일

호출

부칙(시행일·경과조치) 보기

get_law_text(mst, jo="부칙")

특정 날짜 기준 본문

get_law_text(mst, efYd=기준일): 시행일이 아닌 날짜(오늘·사건일)도 그날 시행 버전으로 보정

그날 시행 중이던 별표

get_annexes(lawName, date)

판례명·본문검색 병행

search_decisions(domain="precedent", options={search:"both"})

긴 행정규칙의 일부만

get_admin_rule의 jo:"제9-5조"·chapter:"제9장"·keyword:"해외직접투자"·page:2

법령 여러 건 변경 감시

execute_tool(tool_name="search_law_bulk"): 법령명 배열 + previous={법령ID: 직전 MST}이면 MST가 바뀐 법령만 반환

판례 전문(축약 해제)

get_decision_text(..., full=true)


도구 구조 (10개)

노출 도구는 10개. chain_* 8개는 legal_research의 task로, 분석 기능 4개는 legal_analysis의 mode로 통합. 나머지 전문 도구는 discover_tools → execute_tool로 접근하며, 기존 도구명 직접 호출도 하위호환으로 동작.

구분

도구

설명

리서치 (1)

legal_research

다단계 법령 리서치: task 8종 선택 (아래 표)

정밀분석 (1)

legal_analysis

검증·분석: mode 4종 선택 (아래 표)

법령 (3)

search_law

법령 검색 → lawId, MST 획득

get_law_text

조문 전문 조회 (jo="부칙"으로 부칙)

get_annexes

별표/서식 조회 (금액표·요율표·별지서식, date 로 그날 시행 버전의 별표)

자치법규 (1)

ordinance_radar

조례 정비 레이더: 근거 상위법 개정 자동 대조

통합 (2)

search_decisions

21개 도메인 통합 검색 (판례·헌재·조세심판·관세·국세청·고용노동부 해석·공정위·노동위·산재보험재심사·고용보험심사·해석례·행심·개인정보위·권익위·소청심사·학칙·공사공단·공공기관·조약·영문법령)

get_decision_text

21개 도메인 전문 조회

메타 (2)

discover_tools

전문 도구 검색 (용어·별표·이력·비교 등)

execute_tool

전문 도구 프록시 실행

task

설명

시나리오 확장

full_research (기본)

종합 리서치 (AI검색→법령→판례→해석)

customs: 관세·통관 종합 / action_plan: 이럴 땐 이렇게, 5단계 안내

law_system

법체계 분석 (3단비교, 위임구조)

delegation: 위임입법 감시 / impact: 영향도 분석

action_basis

처분 근거 확인 (허가·인가·처분)

penalty: 처분·벌칙 기준 종합

dispute_prep

쟁송 대비 (불복·소송·심판)

domain: tax/labor/privacy/competition

amendment_track

개정 추적 (신구대조, 연혁)

timeline: 시계열 타임라인 / time_travel: 두 시점 자동 diff

ordinance_compare

조례 비교 (상위법→전국 조례)

compliance: 상위법 적합성 검증

procedure_detail

절차·비용·서식 안내

manual: 공무원 처리 매뉴얼

document_review

계약서·약관 리스크 분석 (text 필수)

—

mode

설명

필수 파라미터

verify_citations

LLM 환각 방지: 인용 조문·판례 실존 + 조문 제목 일치 검증

text

cite_check

판례 생사 확인: 후속 인용 역추적 + 변경·폐기 감지 (한국형 Citator)

caseNumber

applicable_law

행위시법 판단: 시점 적용 버전 + 부칙 경과규정 발췌. 옛 법령명·행정규칙(고시)도

lawName, date

impact_map

조문 영향 그래프: 인용 판례·해석·자치법규 역방향 탐색 + mermaid

lawName, jo

전체 도구 상세는 docs/API.md 참조.


주요 특징

  • 42개 API → 10개 도구: 법령, 판례, 행정규칙, 자치법규, 헌재결정, 조세심판, 관세해석, 국세청 해석례, 조약, 학칙/공단/공공기관 규정, 법령용어

  • MCP + CLI: Claude Desktop에서도, 터미널에서도 같은 도구 사용

  • 법률 도메인 특화: 약칭 자동 인식(화관법 → 화학물질관리법), 조문번호 변환(제38조 ↔ 003800), 3단 위임 구조 시각화

  • 현행성 안내: 검색 결과에 [현행]/⚠️[연혁-과거버전] 라벨, 시행예정 개정·제명변경 병기, 폐지 법령은 폐지 사유와 후속 통합 규정 안내

  • 과거 시점 그대로: 법령ID로 버전을 이어 붙여 법령명이 바뀌기 전 시절까지 조회

  • 실패를 "없음"으로 답하지 않음: 조회 실패·점검 페이지·예산 초과는 [NOT_FOUND] 등 명시 마커로 구분

  • 별표/별지서식 본문 추출: HWPX·HWP·PDF·XLSX·DOCX 자동 변환 (kordoc 엔진)

  • 8개 체인 + 9개 시나리오: 기본 체인에 상황별 확장 분석 자동 추가 (과태료 감경, 관세 통관, 위임입법 감시 등)

  • 21개 도메인 통합 검색: search_decisions 하나로 판례·헌재·조세심판·공정위·노동위 등 즉시 접근

  • 캐시: 검색 1시간, 조문 24시간 TTL

  • 원격 엔드포인트: 설치 없이 https://mcp.gomdori.app/law로 바로 사용 (구 korean-law-mcp.fly.dev/mcp도 하위호환 유지)


HTTP·실행 경계 설정

  • HTTP 기본 바인딩은 MCP_HTTP_HOST=127.0.0.1, 프록시 신뢰 기본값은 TRUST_PROXY=false입니다. 외부 바인딩은 MCP_AUTH_TOKEN을 설정해야 하며, 의도적으로 공개할 때만 MCP_ALLOW_UNAUTHENTICATED_REMOTE=1을 명시합니다. 프록시 뒤에서는 TRUST_PROXY=1처럼 정확한 hop 수를 설정하세요.

  • 브라우저(웹) 클라이언트를 쓸 때는 ALLOWED_ORIGINS를 설정하세요. MCP 명세가 요구하는 Origin 검증(DNS rebinding 방어) 때문에, Origin 헤더가 붙은 요청은 ALLOWED_ORIGINS 화이트리스트(콤마 구분)에 있는 출처만 통과합니다. ALLOWED_ORIGINS를 비워 두면 CORS_ORIGIN이 대신 기준이 됩니다(*면 모든 출처, 아니면 그 출처 하나). 둘 다 설정하지 않으면 브라우저 요청은 모두 차단되고 시작 시 안내가 출력됩니다. ALLOWED_ORIGINS를 설정하면 CORS_ORIGIN은 출처 판정에 쓰이지 않습니다.

  • ALLOW_QUERY_API_KEY=0이면 URL 쿼리(?oc=키)로는 API 키를 전달할 수 없습니다. 쿼리 키는 프록시/엣지 액세스 로그에 평문으로 남으므로 폐쇄망이나 로그 수집 환경에서 권장합니다. 헤더(apikey·law_oc 등) 전달은 계속 동작합니다.

  • ACCESS_LOG=1이면 요청 로그를 기록합니다. 쿼리스트링의 oc= API 키 유출을 막기 위해 경로만 기록합니다.

  • RATE_LIMIT_RPM=0은 IP별 제한만 끕니다. MCP_MAX_BATCH_CALLS(기본 20), 요청 본문, upstream 시도/응답 본문, 도구 응답 제한은 계속 적용됩니다. FALLBACK_DAILY_CAP은 서버 키 폴백의 하루 총량 캡(0이면 비활성, 기본).

  • MCP_MAX_BODY_BYTES, MCP_MAX_UPSTREAM_REQUESTS(기본 48), MCP_MAX_UPSTREAM_BODY_BYTES, MCP_MAX_TOTAL_UPSTREAM_BODY_BYTES, MCP_MAX_TOOL_RESPONSE_CHARS는 시작 시 정수로 검증되며 잘못된 값은 서버 시작을 실패시킵니다. 기존 MCP_BODY_LIMIT=100kb도 호환됩니다.

  • MCP_CHAIN_DEADLINE_MS(기본 45초): 체인 한 건의 시간 한도. 만료되면 받은 갈래까지 조립한 부분 결과를 반환하고 못 받은 자리는 마커로 표시.

  • LAW_USER_AGENT·LAW_REFERER: 법제처 호출에 붙는 User-Agent·Referer 기본값을 바꿀 때만 설정.

  • get_batch_articles는 최대 20개 법령·총 100개 조문으로 제한됩니다. HTTP 연결 종료 또는 MCP 취소는 fetch, 재시도 대기, 응답 본문 읽기까지 전파됩니다. JSON-RPC 배치 항목은 예산만 공유하고 취소 신호는 서로 분리됩니다.

  • publish 전 build/를 삭제하고 실제 pack 파일과 exports를 검증합니다. kordoc는 별표 PDF/HWP 파싱에 실제 사용되므로 유지하고, 필요한 pure-JS pdfjs-dist@4.10.38만 일반 의존성으로 고정합니다. 플러그인·문서·Docker 설치는 --omit=optional --ignore-scripts로 OCR/ML/native 선택 의존성을 제외합니다. CI·게시 workflow는 개발 도구의 optional binding을 설치하되 script는 끈 상태로 검증한 뒤, production graph로 prune하고 PDF 별표 smoke test를 실행합니다. transitive scanner 경고는 실제 도달 가능한 서버 경로와 구분해 평가합니다.


문서

자주 묻는 질문

Q. Claude·ChatGPT에서 한국 법령·판례를 검색하려면? 이 MCP 서버를 연결합니다. Claude.ai는 커넥터 주소 https://mcp.gomdori.app/law?oc=본인키 하나면 되고, Claude Desktop·Cursor·Windsurf·Zed는 설치 및 사용법, ChatGPT는 연결 영상을 따르세요.

Q. 무료인가요? MIT 라이선스 오픈소스입니다. 필요한 법제처 Open API 인증키도 무료로 발급됩니다(0단계).

Q. AI가 지어낸 조문·판례를 걸러낼 수 있나요? legal_analysis(mode="verify_citations")가 답변 속 법령 조문과 판례 번호를 법제처 원문과 대조해 실존 여부와 내용 일치를 확인합니다. 판례가 아직 유효한지는 mode="cite_check"로 봅니다.

Q. 어디까지 조회되나요? 법령, 판례, 행정규칙, 자치법규(조례·규칙), 조약, 법령해석례(국세청 포함)와 별표·서식입니다. 과거 시점 법령과 폐지 법령의 후속 규정도 찾습니다.

Star History

데이터 출처

법령·판례·행정규칙·자치법규·조약·해석례 본문은 법제처 국가법령정보센터 OPEN API (https://open.law.go.kr/)에서 조회합니다. 국세청 해석례는 국세법령정보시스템을 사용합니다.

법적 효력이 필요한 판단에는 반드시 국가법령정보센터 원문을 확인하세요. 이 도구는 조회 결과를 가공·요약할 수 있습니다.

API 인증키(LAW_OC)는 법제처에서 각자 발급받아야 하며, 발급받은 본인만 사용할 수 있습니다.

라이선스

MIT

제3자 구현 참조 및 데이터 출처 고지는 NOTICE를 참조하세요.


Made by 류주임 @ 광진구청 AI동호회 AI.Do

Available Tools

10 tools
discover_tools전문 도구 찾기A
Read-onlyIdempotent

Korean-law-mcp — [메타] 전문도구(조세심판·관세·헌재·행심·공정위·개인정보위·노동위·학칙·조약·영문법령·용어 등 80+개) 카테고리 검색. 도구 이름과 설명을 돌려준다

NameRequiredDescriptionDefault
intentYes찾고 싶은 도구의 의도 또는 카테고리 (예: '공정위', '조약', '용어', '헌재')

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds the concrete payload ('도구 이름과 설명을 돌려준다') and the breadth of the index (80+), but leaves the matching behavior unexplained — whether it matches on tool names, descriptions, or both, and whether results are ranked.

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?

Two short sentences: identity and scope first, then return format. Dense but front-loaded with no filler. The category enumeration is long, though it doubles as usable query vocabulary, so it largely earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does correctly state the return content, and the single parameter is fully covered. What's missing is the workflow contract for a meta tool — that discovered tools are then invoked via execute_tool, and whether results can be refined by re-querying with different intents.

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 coverage is 100% with an example-laden intent description, so the baseline is 3. The description earns an extra point by enumerating eleven concrete query categories (조세심판, 관세, 헌재, 행심, 공정위, 개인정보위, 노동위, 학칙, 조약, 영문법령, 용어) that work directly as intent values, materially beyond the schema's four examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (category search) over a specific resource set (80+ specialized tools: 조세심판·관세·헌재·행심·공정위·개인정보위·노동위·학칙·조약·영문법령·용어) and says what it returns (tool names and descriptions). The '[메타]' tag plus the category inventory makes it distinguishable from retrieval siblings like search_law or get_law_text, though it never names a sibling explicitly.

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 'meta / discovery' framing implies you call this when you don't already know the right specialized tool, and the schema examples clarify the query style. But there is no explicit when-to-use or when-not statement, and no mention of the natural follow-up (execute_tool), which is the key routing decision an agent faces in this 10-tool set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_tool전문 도구 실행C
Read-onlyIdempotent

Korean-law-mcp — [메타] 전문도구를 이름(tool_name)과 인자(params)로 실행

NameRequiredDescriptionDefault
paramsYes도구에 전달할 파라미터 객체
tool_nameYes실행할 전문도구 이름

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. What the description fails to add is the behavior that actually matters for a dispatcher: what happens when tool_name is unknown or params don't match the target tool's schema, and what the response looks like (the sub-tool's output, presumably).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short line with no padding, which is good, but here the brevity comes at the cost of under-specification rather than discipline — the dispatch contract is not explained at all.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an open-world meta-dispatcher with a free-form nested params object and no output schema, the description should at minimum say how to discover valid tool_name values and how errors are surfaced. Neither is present, so an agent must guess before it can invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are described in the schema, so the baseline of 3 applies. The description restates the same two fields and adds nothing about the crucial constraint that the params object must conform to the signature of whichever tool tool_name selects — a nested-object semantic the schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"[메타] 전문도구를 이름(tool_name)과 인자(params)로 실행" states the verb (execute) and the resource (a specialized tool), plus the dispatch mechanism. However, it never says what a "전문도구" is in this server's context or points to discover_tools as the source of valid names, so the agent cannot map it against nine siblings on the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this dispatcher instead of calling search_law, legal_research, get_law_text, etc. directly, and no mention of discover_tools as the prerequisite for obtaining a valid tool_name. The only guidance is implicit in the word "[메타]".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_annexes별표·서식 조회A
Read-onlyIdempotent

Korean-law-mcp — [별표] 별표/서식 조회. lawName+'별표N'으로 내용 추출. 금액/기준은 별표에 있는 경우 많음. date(기준일)를 주면 그날 시행 중이던 버전의 별표 — 건축허가·착공·처분 시점의 설치기준·과태료표 등 과거 기준이 필요할 때(제명이 바뀐 법령도 옛 버전까지, 별표 번호가 시점마다 달라 query로 별표명을 주는 편이 안전).

NameRequiredDescriptionDefault
joNo위임 조문 (예: '제38조', '38'). 조문 동반 질의('관세법 제38조 별표2')의 조문 맥락 — 별표명의 '(제38조 관련)' 표기와 대조해 좁히고, 응답에 위임 관계를 표기
kndNo1=별표, 2=서식, 3=부칙별표, 4=부칙서식, 5=전체
dateNo기준일 (예: '2015-06-01'). 지정 시 그날 시행 중이던 법령 버전의 별표를 조회 — 건축허가·착공·처분·위반 시점 기준이 필요할 때. 제명이 바뀐 법령도 옛 버전까지 찾는다. 별표 번호는 시점마다 다를 수 있으니 query(별표명)로 좁히는 것이 안전. 미지정 시 현행
queryNo별표명으로 좁히기 (예: '운전면허 취소·정지', '과태료'). 번호를 모를 때 사용. 1건으로 좁혀지면 그 별표 본문을 바로 추출
bylSeqNo별표번호 (예: '000300'). 지정 시 해당 별표 파일을 다운로드하여 텍스트로 추출
annexNoNo별표 번호 (예: '4', '별표4', '제4호'). bylSeq 대체 입력
lawNameYes법령명 (예: '관세법'). 별표를 바로 지정하려면 '... 별표4' 또는 '... 별표1의2'처럼 함께 입력 가능

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds real behavioral context beyond that: it downloads the annex file and extracts text when bylSeq is given, and extracts the body directly when query narrows to a single annex. However, it never says what a multi-match response looks like versus a single-match extraction, leaving the return shape ambiguous.

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?

Purpose and the core lawName+'별표N' pattern are front-loaded, and every sentence carries usable information (amounts in annexes, retroactive lookup, query-over-number advice). It is a dense run-on block with parenthetical asides and some overlap with the schema text, which keeps it from a 5.

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?

With 7 parameters, a 100% covered schema, and full annotations, the description supplies the missing decision context: retroactive date semantics, jurisdiction/naming quirks, and narrowing strategy. There is no output schema, and the description only partially covers the return shape (file-download text vs. direct body extraction vs. presumably a list when ambiguous), so a small gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; every parameter already carries an inline description with examples (jo, knd enum, bySeq, annexNo). The description's date and query guidance largely restates what is already written in those schema fields, adding little genuinely new parameter meaning. The interaction hint that query is safer than a number when the annex number varies is the main marginal contribution.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and retrieval method: 별표/서식 (annexes/forms) of a Korean statute, extracted via lawName + '별표N'. It also notes that monetary amounts and standards often live in annexes rather than the main text, which clarifies what kind of content this tool returns. It never names the sibling get_law_text as the alternative for main-article text, so the differentiation is implicit rather than explicit.

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?

Gives clear context for the date parameter (retroactive standards at time of permit/construction/disposition, renamed statutes) and advises using query by annex name because annex numbering shifts over time. This is genuine when-to-use guidance. It stops short of stating when NOT to use it or naming a sibling to fall back on.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_decision_text판례·결정례 본문 조회B
Read-onlyIdempotent

Korean-law-mcp — [통합조회] 21개 도메인 전문 조회. domain+id. full=false(기본) 시 본문 계단식 축약

NameRequiredDescriptionDefault
idYes일련번호/ID (search 결과에서 획득. nts는 본문조회ID(ntstDcmId))
fullNotrue=본문 전문 그대로. 미지정=이유/전문 섹션 계단식 축약 (판시·요지·주문은 항상 full)
domainYes도메인 선택 (enum 값 참조)
optionsNo도메인별 옵션. treaty:{chrClsCd:'010202'(한)/'010203'(영)} english_law:{mst,lawName} prec/constitutional/admin_appeal/interpretation:{caseName}

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, non-destructive profile, but the description adds a genuinely non-obvious behavioral fact: with full=false (the default) the body is returned in cascading abbreviation rather than in full. That is the single most important thing an agent needs to know before interpreting the output. It stops short of describing response shape or per-domain differences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely short and front-loaded, which is good, but it is written as clipped fragments that require the reader to reconstruct the meaning. The 'Korean-law-mcp —' prefix is pure overhead with no informational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with a nested options object and a 21-value enum, the description covers only the domain/id pair and the full default; the domain-specific options (treaty language code, english_law mst/lawName, caseName) are left entirely to the schema. Adequate given the 100% schema coverage and existing annotations, but thin for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents id, full, domain, and the nested options object in more detail than the description does. The description's 'domain+id' and 'full=false(기본)' merely restate schema content, and the options object is never mentioned. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action and resource: full-text retrieval of decision bodies across 21 domains, keyed by domain+id. It is clear enough to act on, but it never distinguishes itself from siblings like get_law_text or search_decisions, and the telegraphic 'Korean-law-mcp —' prefix adds noise rather than clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to call this versus search_decisions (to find ids) or get_law_text (for statutes). The only hint of a workflow, obtaining the id from search results, lives in the schema, not the description. There are no exclusions or alternative routing at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_law_text법령 조문 조회A
Read-onlyIdempotent

Korean-law-mcp — [법령조회] 조문 전문 조회. mst/lawId 필수, jo로 특정 조문만 가능 — jo는 '제148조의2' 같은 자연어 조문 표기를 그대로 받는다(권장). 6자리 JO 코드를 직접 쓰려면 조번호 4자리 zero-pad + 의X 2자리: 제10조의2→001002, 제234조의2→023402(234002 아님). jo='부칙' 이면 부칙 원문(시행일·경과조치, 최근 공포부터). 과거 시점 본문은 efYd 에 그 날짜를 넣으면 그날 시행 중이던 버전으로 자동 보정한다(제명이 바뀌기 전 버전 포함).

NameRequiredDescriptionDefault
joNo조문 번호. 자연어 표기 권장 — '제38조'·'제148조의2'를 그대로 넣으면 서버가 변환한다. 6자리 JO 코드 직접 지정 시 조번호 4자리 zero-pad + 의X 2자리: 제38조→003800, 제10조의2→001002, 제234조의2→023402(234002 아님). '부칙' 이면 부칙 원문(최근 공포부터)
mstNo법령일련번호 (MST)
efYdNo기준일 또는 시행일자 (YYYYMMDD). 시행일이면 그 버전, 시행일이 아닌 날짜(건축허가일·사건일 같은 조회 기준일)면 그날 시행 중이던 버전으로 자동 보정한다(제명이 바뀌기 전 버전 포함). 현행 본문은 efYd 없이 조회한다. 시행예정본은 그 시행일을 넣는다.
lawIdNo법령ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). Beyond that, the description discloses real behavior: efYd auto-corrects to the version in force on the given date (including pre-renaming versions), jo='부칙' returns supplementary provisions from the latest promulgation, and jo accepts natural-language notation. These are meaningful behavioral details not in 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 dense but front-loaded with the core action first, then parameter-specific rules. The encoding examples (제10조의2→001002) earn their place by preventing a real error, though the paragraph is information-heavy for a single block.

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 4-param, no-output-schema retrieval tool whose schema fully documents parameters, the description covers how to specify the target law and version. It omits what the returned text looks like (structure, truncation) and the mst/lawId requirement contradicts the schema's empty required list, leaving a small gap.

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 coverage is 100%, so the baseline is 3, but the description adds value by explaining that efYd is used both for prospective effective dates and for historical lookup dates with automatic version correction, and by restating the 6-digit JO encoding rule. It also notes mst/lawId are required, which conflicts with the schema's empty required array and could confuse an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (법령 조문 전문 조회 — retrieving the full text of statute articles) and clarifies that jo narrows to a specific article. It does not explicitly differentiate itself from siblings like search_law or get_annexes, so an agent relies on the title/resource to tell them apart.

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?

It gives useful conditions for the jo parameter (natural-language notation recommended, 부칙 for supplementary provisions) and for efYd (historical version retrieval). However, it offers no guidance on when to use this tool versus search_law or get_decision_text — the usage advice is parameter-level, not tool-selection-level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ordinance_radar조례 정비 레이더A
Read-onlyIdempotent

Korean-law-mcp — [자치법규] 조례 정비 레이더 — 조례가 인용한 근거 상위법령(법률/시행령/시행규칙)을 본문에서 추출하고, 각 상위법의 현행 시행일과 조례 시행일을 대조해 '상위법이 조례 시행 이후 개정됨 → 정비 검토 대상'을 자동 플래그. 조례 담당 공무원의 상위법 개정 추적·조례 정비 판단용. ordinSeq(또는 id)나 ordinanceName 중 하나 지정.

NameRequiredDescriptionDefault
idNoordinSeq 별칭 — 힌트가 id=로 안내하는 경우 대응
queryNoordinanceName 별칭 — 자연어 조례명으로 검색
ordinSeqNo자치법규 일련번호 (ordinSeq)
ordinanceNameNo자치법규명 — 지정 시 검색 후 첫 결과 사용 (예: '서울특별시 광진구 주차장 설치 및 관리 조례')

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that the tool is read-only, idempotent, open-world, and non-destructive. Beyond that, the description explains the substantive behavior: citation extraction, effective-date comparison, and automatic flagging of possible maintenance targets. It does not describe output format or handling of missing citations, but the core behavioral logic is disclosed.

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 dense but front-loaded: it names the tool, states the extraction/comparison behavior, then gives the intended user and parameter rule. Some title duplication at the start is redundant, but the remaining text earns its place.

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?

With no output schema, the description still conveys the conceptual return value — flagged ordinance provisions whose superior law was amended after the ordinance took effect. It does not specify the exact result structure or edge-case behavior, but it covers enough for an agent to understand the tool's purpose and invocation.

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 coverage is 100%, so the baseline is 3. The description adds a meaningful constraint beyond the schema: despite all parameters being optional in the schema, the caller should specify one of ordinSeq/id or ordinanceName. It omits the query alias, but the main identifier-selection rule is useful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-and-resource combination: it extracts superior statutes cited by an ordinance and compares effective dates to flag provisions needing review. This is far more precise than the title alone, though it does not explicitly distinguish itself from sibling tools such as legal_analysis or search_law.

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?

It gives a clear use context — ordinance officials tracking amendments to superior laws and deciding whether an ordinance needs maintenance. It does not state when to use this instead of alternatives or when not to use it, so it falls short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_decisions판례·결정례 검색A
Read-onlyIdempotent

Korean-law-mcp — [통합검색] 21개 도메인(판례·해석례·헌재·행심·조세심판·관세·국세청·고용노동부 해석·공정위·개인정보위·노동위·산재보험재심사·고용보험심사·권익위·소청심사·학칙·공사공단·공공기관·조약·영문법령) 통합 검색. domain으로 선택. 판례 본문까지 필요하면 domain='precedent', options.includeText=true, options.detailLimit=N. 판례 기본은 판례명 검색이라 법리·사실관계·유사판례 탐색은 options.search='both'(판례명+본문). 세무 관련 국세청 직접 회신 해석은 domain='nts', 고용노동부 행정해석(질의회시)은 domain='moel'(본문검색 options.search=2), 산재보험 재심사 재결은 'iaciac', 고용보험 재심사 재결은 'eiac'.

NameRequiredDescriptionDefault
pageNo페이지 (기본1)
sortNo정렬: lasc/ldes/dasc/ddes/nasc/ndes
queryNo검색 키워드
domainYes도메인 선택 (enum 값 참조)
displayNo결과 수 (기본20)
optionsNo도메인별 옵션. prec:{court,caseNumber,fromDate,toDate,search(1=판례명 기본·2=본문·"both"=판례명+본문)} tax_tribunal:{cls,gana,dpaYd,rslYd} customs:{inq,rpl,gana,explYd} moel:{search(1=안건명 기본·2=본문),explYd} constitutional:{caseNumber} interpretation:{fromDate,toDate} treaty:{cls,natCd,eftYd,concYd}

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, open-world, non-destructive, so the description only needs incremental behavior. It delivers: the non-obvious default that precedent search matches case names only, and the includeText/detailLimit toggle needed for full body text. Pagination, result caps, and response shape are not described, keeping it below a 5.

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?

Front-loaded with the unified-search premise, and every subsequent sentence carries routing or mode-selection information. Deducted for re-listing all 21 domain names parenthetically, which duplicates the enum, and for a dense single block with no structure that makes the search-mode distinction easy to miss.

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 6-parameter, nested-object tool with no output schema, the description covers the hard parts: domain routing, name-vs-body search modes, and text inclusion. It leaves page/display/sort behavior and the differing result shapes across the 21 domains to the schema or the agent's discovery.

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?

Schema coverage is 100%, but the enum values are cryptic strings ('iaciac', 'eiac', 'moel'), and the description does the real work of translating them into sources. It also documents options.includeText and options.detailLimit, which appear nowhere in the schema's options description (only additionalProperties: {} allows them) — genuine value beyond structured fields.

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 opens with a specific verb+resource (통합검색) and states the exact scope: 21 named Korean legal domains in one call, with the domain parameter selecting the corpus. It also distinguishes the body-text variant ('판례 본문까지 필요하면 domain=precedent, options.includeText=true'), so an agent can tell it apart from get_decision_text without opening a schema.

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?

Strong routing guidance: it maps real-world needs to specific enum values (국세청 해석 → nts, 고용노동부 질의회시 → moel, 산재보험 재심사 → iaciac, 고용보험 재심사 → eiac) and explains that precedent search defaults to case-name lookup, so doctrinal or fact-pattern exploration needs options.search='both'. It stops short of naming sibling tools (get_decision_text, search_law) as explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_law법령 검색A
Read-onlyIdempotent

Korean-law-mcp — [법령검색] 법령명·조례명·행정규칙명 키워드검색 → lawId, mst 획득. 지자체 조례·규칙(자치법규), 훈령·예규·고시(행정규칙)도 검색 — 0건 시 자치법규/행정규칙으로 자동 폴백(예: '광진구 복무조례', '외국환거래규정'). 약칭 자동변환. 제명변경·시행예정 개정 자동 병기. 폐지된 법령·행정규칙은 폐지 사실과 후속(통합) 규정을 자동 안내. 법령·조례·행정규칙 조회 전 식별자 확보용.

NameRequiredDescriptionDefault
queryYes검색할 법령명 (예: '관세법', 'fta특례법', '화관법')
displayNo최대 결과 개수 (기본 50 — 짧은 법령명 정확매칭 누락 방지)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only and idempotent annotations, the description discloses substantive behavior: automatic fallback to local ordinances and administrative rules on zero hits, automatic abbreviation conversion, display of renamed and upcoming-amendment laws, and guidance for repealed rules including successor provisions. These are exactly the behavioral traits an agent needs before relying on results.

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 text is front-loaded with the tool purpose and then lists concrete behavioral features. It is dense and slightly overpacked into a single paragraph, but each clause contributes operational information rather than filler.

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?

There is no output schema, yet the description states the key return values (lawId, mst) and covers fallback, abbreviation conversion, amendment notation, and repealed-law guidance. For a search/discovery tool, this is complete enough for an agent to call and interpret results correctly.

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 coverage is 100%, so the baseline is 3, but the description adds real meaning to the query parameter by explaining that abbreviations are auto-converted and by giving example queries including ordinance and administrative-rule names. It does not add detail about the display parameter beyond what the schema already says.

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 states a specific verb and resource: keyword search of law names, ordinance names, and administrative rule names, returning lawId and mst. It clearly distinguishes this discovery step from retrieval siblings such as get_law_text and get_annexes by framing itself as identifier acquisition before lookup.

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?

It gives a clear usage condition: use this before retrieving laws, ordinances, or administrative rules in order to secure identifiers. It also explains fallback behavior when there are zero results, though it does not explicitly contrast itself with sibling search tools such as search_decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv4.15.14
    • First observeddiscover_tools
    • First observedexecute_tool
    • First observedget_annexes
    • First observedget_decision_text
    • First observedget_law_text
    • First observedlegal_analysis
    • First observedlegal_research
    • First observedordinance_radar
    • First observedsearch_decisions
    • First observedsearch_law

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target clearly distinct resources: statutes, ordinances/annexes, decisions, or specialized domains. The main ambiguity is between legal_research and legal_analysis, since both are broad multi-mode tools, but their task/mode descriptions and the separate search_decisions surface make selection manageable.

Naming Consistency4/5

All names use snake_case, and most follow a clear verb_noun pattern such as search_law, get_law_text, search_decisions, and get_decision_text. A few names are noun phrases or vague role labels (ordinance_radar, legal_research, legal_analysis), which is a minor deviation rather than inconsistency.

Tool Count5/5

Ten tools is well-scoped for a legal research server. The meta discover_tools/execute_tool pair appropriately exposes 80+ specialized tools without bloating the primary tool list, and each of the remaining tools covers a distinct layer of the workflow.

Completeness5/5

The surface covers statute/ordinance search, full text, annexes, decision search and retrieval across 21 domains, integrated research, precise analysis, citation verification, historical versions, and specialized tools. No obvious lifecycle gap appears for a Korean legal research server.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to search, retrieve, and analyze South Korean legal documents including statutes, precedents, constitutional decisions, and administrative rulings via the Ministry of Government Legislation Open API. Provides 89 specialized tools with features like legal abbreviation auto-recognition, annex extraction, and complex research chain workflows.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 17 tools for accessing Korean statutes, precedents, and administrative rules via the National Law Information Center API, with LLM hallucination prevention, citation verification, impact graphs, and time-travel diff.
    1,627 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search and retrieve Korean laws, regulations, administrative rules, legal interpretations, and precedents via official APIs for legal review workflows.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to query and analyze Korean law, including statutes, precedents, and ordinances, with citation verification and impact analysis.
    10
    1,627 npm
    MIT