Korean Law MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Korean Law MCP민법 제750조 관련 판례를 찾고 인용을 검증해줘"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Korean Law MCP
법제처 42개 API를 10개 도구로. 법령·판례·행정규칙·자치법규·조약·해석례(국세청 포함) 조회와 AI 답변의 인용 검증을 AI 어시스턴트나 터미널에서 바로 사용.
법제처 Open API 기반 MCP 서버 + CLI. Claude Desktop, Cursor, Windsurf, Zed, Claude.ai 등에서 바로 사용 가능.
바로 쓰기: Claude.ai 커넥터에 https://mcp.gomdori.app/law?oc=본인키 한 줄, Claude Code는 플러그인 두 줄 → 설치 및 사용법
VS Code·Cursor는 버튼 한 번으로 연결됩니다(키 없이 공용 한도로 동작, 본인 키는 주소 끝에 ?oc=본인키).
쓸모 있었다면 GitHub ⭐ 하나 눌러주세요. 다른 사람이 이 도구를 찾는 데 도움이 됩니다.

▶ 클릭하면 유튜브에서 재생됩니다.
AI에 연결하기
Claude에 연결하기 | ChatGPT에 연결하기 |
|
|
최근 업데이트
현재 버전 v4.15.14. 수치는 모두 CHANGELOG의 실측 기록에서 옮김.
버전 | 주요 변경 | 변화 |
4.15.14 | 보안: 의존성 취약점 정리 — 하위 kordoc 4.24.8(zod 4), zod 4.6.7, 개발 도구·하위 의존성 수정판 |
|
4.15.13 | Claude Code 플러그인이 로컬 npx 대신 공개 서버( | 설치 없음 |
4.15.12 | 도구 사이 안내(예: 여러 법령 감시는 | 같은 질문 4개에서 고르는 도구 동일 |
4.15.11 | 노출 도구 10개에 사람용 제목( | 제목 0개 → 10개 |
4.15.10 | 국세청 법령해석 본문 조회: 검색 결과의 | 목록·링크만 → 본문까지 |
이전 버전 전체 내역은 CHANGELOG.md 참조. 대표 이정표:
v4.14.1: 조문 1개 조회 3.1초 → 0.24초(13배), 인용 15건 검증 ✓0 → ✓15
v4.13.0: 준법 등록부 감시
search_law98회 호출 →search_law_bulk1~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을 쓰는 비개발자·법률 실무자에게 자주 발생). 둘 중 하나로 해결:
HTTPS로 강제 우회 (가장 간단, 추천): 아래 한 줄 실행 후 다시
/plugin install. 설치 후에도 그대로 둬도 무방 (HTTPS clone이 항상 동작)git config --global url."https://github.com/".insteadOf "git@github.com:"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개만 가능).
claude.ai 로그인 → 왼쪽 사이드바 하단 본인 이름 → 설정(Settings) → 커넥터(Connectors)
커스텀 커넥터 추가 → 이름
korean-law(아무거나 OK), URL은 아래 주소 (honggildong을 0단계에서 발급받은 본인 인증키로 교체)https://mcp.gomdori.app/law?oc=honggildong추가 → 커넥터 구성(Configure)에서 모든 도구를 항상 사용(Always allow)으로 설정 (매번 승인 불필요, 중요)
채팅에서 "근로기준법 제74조 알려줘" 입력
커넥터 URL을 수정하려면 삭제 후 다시 추가. 프로필 선택 불필요(10개 도구가 42개 API 전체 커버), 기존
?profile=lite&oc=...주소도 그대로 작동.
방법 3: AI 데스크톱 앱에서 사용 (설치 없음)
Claude Desktop, Cursor, Windsurf 같은 데스크톱 앱을 쓰고 있다면, 설정 파일에 아래 내용을 추가하세요.
설정 파일 위치 찾기:
앱 이름 | Windows | Mac |
Claude Desktop |
|
|
Cursor | 프로젝트 폴더 안 | 프로젝트 폴더 안 |
Windsurf | 프로젝트 폴더 안 | 프로젝트 폴더 안 |
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-mcpAI 앱 설정 파일에 아래 내용을 추가합니다 (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에 포함 | 주소 끝에 | 웹 클라이언트에서 가장 간편 |
HTTP 헤더 |
| 프로그래밍으로 연동할 때 |
환경변수 |
| 로컬 설치(방법 4, 5) |
도구 파라미터 |
| 특정 요청만 다른 키 쓸 때 |
키 없이 공개 서버(
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:8080setx 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 조약 원문 + 세율 별표 + 조세심판원 판결 |
"건축법 허가 절차" | 법률→시행령→시행규칙 근거 + 수수료·서식 + 훈령·예규·고시 + 조례 특칙 + 유권해석 |
"건축법 영향도 분석" | 하위법령 + 영향받는 전국 자치법규 + 관련 행정규칙 |
"국민건강보험법 위임입법" | "시행령으로 정한다" 조항 중 아직 시행령이 없는 것 |
"주차 조례 상위법 적합성" | 헌재 위헌 결정 + 행정심판 취소 사례 + 상위법 근거 대조 |
"근로기준법 개정이력 타임라인" | 신구대조표 + 조문별 개정 이력 + 판례·해석례 시간순 정리 |
모든 결과 끝에 **"이어서 할 수 있는 조회"**가 제안됨.
검증·분석 기능
기능 | 이렇게 물으면 | 하는 일 |
| AI가 쓴 법률 답변 붙여넣기 | 인용 조문·판례를 법제처 DB와 대조: 실존 ✓ / 없음 ✗(존재 범위 제시) / 제목 불일치 |
| "2007다27670 아직 유효해?" | 그 사건번호를 인용한 후속 판례를 본문검색으로 역추적, 전원합의체 판결의 변경·폐기 선언("…변경하기로 한다") 감지 |
| "2023.5.10 당시 도로교통법 제44조" | 기준일 시행 버전(MST) 특정 → 그 시점 조문 → 현행 비교 → 이후 개정 부칙의 적용례·경과조치 발췌. 옛 법령명·고시도 처리 |
| "민법 제103조 인용한 판례" | 판례·헌재·해석례·행정심판·자치법규 역방향 탐색 + 인용 법령 정방향 + mermaid 그래프 |
| "개인정보보호법 2020-01-01 vs 2025-11-01" | 두 시점 본문을 조문 단위로 diff: 추가(+)·삭제(-)·변경(△) |
| "전세금 못 받았어" | 상황진단 → 권리·구제수단 → 신청기관·기한 → 필요서류·양식 → 함정·주의, 5단계 안내 |
| "광진구 주차장 조례" | 조례 제1조(목적)에서 근거 상위법 추출 → 상위법 현행 시행일과 조례 시행일 대조 → 정비 검토 대상 표시 |
verify_citations 실제 결과 예시:
"민법 제750조 … 근로기준법 제60조 제1항 … 상법 제401조의2 제7항 … 형법 제9999조"
✓ 민법 제750조(불법행위의 내용) 실존
✓ 근로기준법 제60조(연차 유급휴가) 제1항 실존
✗ 상법 제401조의2 — 제7항 없음 (최대 제2항)
✗ 형법 제9999조 — 해당 조문 없음 (존재 범위: 제1조~제372조)자주 쓰는 옵션
하고 싶은 일 | 호출 |
부칙(시행일·경과조치) 보기 |
|
특정 날짜 기준 본문 |
|
그날 시행 중이던 별표 |
|
판례명·본문검색 병행 |
|
긴 행정규칙의 일부만 |
|
법령 여러 건 변경 감시 |
|
판례 전문(축약 해제) |
|
도구 구조 (10개)
노출 도구는 10개. chain_* 8개는 legal_research의 task로, 분석 기능 4개는 legal_analysis의 mode로 통합. 나머지 전문 도구는 discover_tools → execute_tool로 접근하며, 기존 도구명 직접 호출도 하위호환으로 동작.
구분 | 도구 | 설명 |
리서치 (1) |
| 다단계 법령 리서치: |
정밀분석 (1) |
| 검증·분석: |
법령 (3) |
| 법령 검색 → lawId, MST 획득 |
| 조문 전문 조회 ( | |
| 별표/서식 조회 (금액표·요율표·별지서식, | |
자치법규 (1) |
| 조례 정비 레이더: 근거 상위법 개정 자동 대조 |
통합 (2) |
| 21개 도메인 통합 검색 (판례·헌재·조세심판·관세·국세청·고용노동부 해석·공정위·노동위·산재보험재심사·고용보험심사·해석례·행심·개인정보위·권익위·소청심사·학칙·공사공단·공공기관·조약·영문법령) |
| 21개 도메인 전문 조회 | |
메타 (2) |
| 전문 도구 검색 (용어·별표·이력·비교 등) |
| 전문 도구 프록시 실행 |
legal_research task 8종 (구 chain_*)
task | 설명 | 시나리오 확장 |
| 종합 리서치 (AI검색→법령→판례→해석) |
|
| 법체계 분석 (3단비교, 위임구조) |
|
| 처분 근거 확인 (허가·인가·처분) |
|
| 쟁송 대비 (불복·소송·심판) |
|
| 개정 추적 (신구대조, 연혁) |
|
| 조례 비교 (상위법→전국 조례) |
|
| 절차·비용·서식 안내 |
|
| 계약서·약관 리스크 분석 ( | — |
legal_analysis mode 4종
mode | 설명 | 필수 파라미터 |
| LLM 환각 방지: 인용 조문·판례 실존 + 조문 제목 일치 검증 |
|
| 판례 생사 확인: 후속 인용 역추적 + 변경·폐기 감지 (한국형 Citator) |
|
| 행위시법 판단: 시점 적용 버전 + 부칙 경과규정 발췌. 옛 법령명·행정규칙(고시)도 |
|
| 조문 영향 그래프: 인용 판례·해석·자치법규 역방향 탐색 + mermaid |
|
전체 도구 상세는 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-JSpdfjs-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 경고는 실제 도달 가능한 서버 경로와 구분해 평가합니다.
문서
docs/API.md — 도구 레퍼런스
docs/ARCHITECTURE.md — 시스템 설계
docs/DEVELOPMENT.md — 개발 가이드
CHANGELOG.md: 버전별 변경 내역
자주 묻는 질문
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)는 법제처에서 각자 발급받아야 하며, 발급받은 본인만 사용할 수
있습니다.
라이선스
제3자 구현 참조 및 데이터 출처 고지는 NOTICE를 참조하세요.
Made by 류주임 @ 광진구청 AI동호회 AI.Do
Available Tools
10 toolsdiscover_tools전문 도구 찾기ARead-onlyIdempotent
Korean-law-mcp — [메타] 전문도구(조세심판·관세·헌재·행심·공정위·개인정보위·노동위·학칙·조약·영문법령·용어 등 80+개) 카테고리 검색. 도구 이름과 설명을 돌려준다
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | 찾고 싶은 도구의 의도 또는 카테고리 (예: '공정위', '조약', '용어', '헌재') |
TDQS
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.
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.
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.
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.
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.
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전문 도구 실행CRead-onlyIdempotent
Korean-law-mcp — [메타] 전문도구를 이름(tool_name)과 인자(params)로 실행
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes | 도구에 전달할 파라미터 객체 | |
| tool_name | Yes | 실행할 전문도구 이름 |
TDQS
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.
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.
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.
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.
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.
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별표·서식 조회ARead-onlyIdempotent
Korean-law-mcp — [별표] 별표/서식 조회. lawName+'별표N'으로 내용 추출. 금액/기준은 별표에 있는 경우 많음. date(기준일)를 주면 그날 시행 중이던 버전의 별표 — 건축허가·착공·처분 시점의 설치기준·과태료표 등 과거 기준이 필요할 때(제명이 바뀐 법령도 옛 버전까지, 별표 번호가 시점마다 달라 query로 별표명을 주는 편이 안전).
| Name | Required | Description | Default |
|---|---|---|---|
| jo | No | 위임 조문 (예: '제38조', '38'). 조문 동반 질의('관세법 제38조 별표2')의 조문 맥락 — 별표명의 '(제38조 관련)' 표기와 대조해 좁히고, 응답에 위임 관계를 표기 | |
| knd | No | 1=별표, 2=서식, 3=부칙별표, 4=부칙서식, 5=전체 | |
| date | No | 기준일 (예: '2015-06-01'). 지정 시 그날 시행 중이던 법령 버전의 별표를 조회 — 건축허가·착공·처분·위반 시점 기준이 필요할 때. 제명이 바뀐 법령도 옛 버전까지 찾는다. 별표 번호는 시점마다 다를 수 있으니 query(별표명)로 좁히는 것이 안전. 미지정 시 현행 | |
| query | No | 별표명으로 좁히기 (예: '운전면허 취소·정지', '과태료'). 번호를 모를 때 사용. 1건으로 좁혀지면 그 별표 본문을 바로 추출 | |
| bylSeq | No | 별표번호 (예: '000300'). 지정 시 해당 별표 파일을 다운로드하여 텍스트로 추출 | |
| annexNo | No | 별표 번호 (예: '4', '별표4', '제4호'). bylSeq 대체 입력 | |
| lawName | Yes | 법령명 (예: '관세법'). 별표를 바로 지정하려면 '... 별표4' 또는 '... 별표1의2'처럼 함께 입력 가능 |
TDQS
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.
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.
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.
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.
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.
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판례·결정례 본문 조회BRead-onlyIdempotent
Korean-law-mcp — [통합조회] 21개 도메인 전문 조회. domain+id. full=false(기본) 시 본문 계단식 축약
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 일련번호/ID (search 결과에서 획득. nts는 본문조회ID(ntstDcmId)) | |
| full | No | true=본문 전문 그대로. 미지정=이유/전문 섹션 계단식 축약 (판시·요지·주문은 항상 full) | |
| domain | Yes | 도메인 선택 (enum 값 참조) | |
| options | No | 도메인별 옵션. treaty:{chrClsCd:'010202'(한)/'010203'(영)} english_law:{mst,lawName} prec/constitutional/admin_appeal/interpretation:{caseName} |
TDQS
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.
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.
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.
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.
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.
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법령 조문 조회ARead-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 에 그 날짜를 넣으면 그날 시행 중이던 버전으로 자동 보정한다(제명이 바뀌기 전 버전 포함).
| Name | Required | Description | Default |
|---|---|---|---|
| jo | No | 조문 번호. 자연어 표기 권장 — '제38조'·'제148조의2'를 그대로 넣으면 서버가 변환한다. 6자리 JO 코드 직접 지정 시 조번호 4자리 zero-pad + 의X 2자리: 제38조→003800, 제10조의2→001002, 제234조의2→023402(234002 아님). '부칙' 이면 부칙 원문(최근 공포부터) | |
| mst | No | 법령일련번호 (MST) | |
| efYd | No | 기준일 또는 시행일자 (YYYYMMDD). 시행일이면 그 버전, 시행일이 아닌 날짜(건축허가일·사건일 같은 조회 기준일)면 그날 시행 중이던 버전으로 자동 보정한다(제명이 바뀌기 전 버전 포함). 현행 본문은 efYd 없이 조회한다. 시행예정본은 그 시행일을 넣는다. | |
| lawId | No | 법령ID |
TDQS
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.
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.
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.
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.
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.
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.
legal_analysis인용 검증·법령 분석ARead-onlyIdempotent
Korean-law-mcp — [정밀분석] 검증·분석 4종 통합. mode: verify_citations=텍스트 속 법령 조문·판례 인용('민법 제750조', '대법원 2013다61381' 등)이 실존하는지 법제처 DB 교차검증, LLM 환각 방지 — 판례는 실존불가/미확인 구분(text 필수) | cite_check=판례 생사 확인 — 사건번호로 후속 인용 역추적+변경·폐기 감지, 한국형 Citator(caseNumber 필수) | applicable_law=사건 시점에 시행되던 법령 버전+그 시점 조문+부칙 경과조치, 행위시법 판단(lawName+date 필수, jo 선택). 제명이 바뀐 법령은 옛 이름 시절 버전으로 특정. 법령이 아니면 행정규칙(고시·훈령 — 예: '스프링클러설비의 화재안전기준', 'NFTC 103')의 기준일 시행 버전 | impact_map=한 조문을 인용한 판례·헌재·해석례·행심·조례 역방향 그래프+mermaid(lawName+jo 필수, jo는 '제103조'·'103조'·JO 6자리 코드 '010300' 모두 수용)
| Name | Required | Description | Default |
|---|---|---|---|
| jo | No | [impact_map 필수, applicable_law 선택] 조문 번호 — 자연어 표기('제103조', '제10조의2')와 6자리 JO 코드('010300', '001002') 모두 수용 | |
| date | No | [applicable_law 필수] 기준일 — 행위·계약·처분 시점 (예: '2023-05-10', '20230510') | |
| mode | Yes | 분석 유형 (도구 설명의 mode 표 참조) | |
| text | No | [verify_citations 필수] 검증할 법률 텍스트 (LLM 답변/계약서 등 조문 인용 포함 문자열) | |
| display | No | [cite_check] 후속 인용 판례 최대 표시 수 (기본 20) | |
| lawName | No | [applicable_law·impact_map 필수] 법령명 (예: '민법', '도로교통법'). applicable_law는 약칭·옛 법령명과 행정규칙명(고시 — 예: '스프링클러설비의 화재안전기준', 'NFTC 103')도 받는다 | |
| deepScan | No | [cite_check] 후속 인용 상위 판례 본문 정밀 스캔 (기본 true, false면 빠르지만 변경·폐기 감지 생략) | |
| caseNumber | No | [cite_check 필수] 사건번호 (예: '2013다61381', 문장 포함 가능) | |
| maxCitations | No | [verify_citations] 검증할 최대 인용 개수 (기본 15, 많을수록 느림) | |
| includeMermaid | No | [impact_map] mermaid 그래프 코드 출력 (기본 true) | |
| includeOrdinances | No | [impact_map] 자치법규 인용 검색 포함 (기본 true, false면 전국 조례 팬아웃 생략) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description discloses operational tradeoffs the schema does not: maxCitations means '많을수록 느림', and deepScan=false is '빠르지만 변경·폐기 감지 생략', and includeOrdinances=false skips the nationwide ordinance fan-out. It also explains the epistemic output distinction for citations (실존불가 vs 미확인), which is exactly the kind of behavioral context an agent needs to interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The leading purpose sentence is front-loaded, but the mode breakdown is a single dense pipe-delimited run-on mixing purpose, required params, examples, and edge cases in one breath, making it harder to scan than a structured list would be. The volume is defensible for a four-mode tool, yet the formatting costs readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All four modes are covered with required inputs, accepted formats, and defaults, which is strong for an 11-parameter multiplexed tool with no output schema. The only gap is that return shapes are only hinted at (mermaid graph, citator status) rather than characterized, and there is no note on failure behavior when a cited provision cannot be resolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema alone already justifies a 3; the description goes further by tying each parameter to its mode and explaining why (e.g., applicable_law resolves renaming laws to their old-name versions and handles administrative rules like 'NFTC 103'). The mode-to-parameter mapping table in prose adds navigational value beyond the flat per-property schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (Korean statutory/case-law citations) and enumerates four distinct operations with concrete examples like '민법 제750조' and '대법원 2013다61381', so an agent knows exactly what each mode does. It frames the tool as the '[정밀분석] integrated 4-mode' option, which implicitly separates it from lookup siblings such as get_law_text or search_decisions, but it never names those siblings directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each mode carries its own trigger condition and required inputs (verify_citations needs text, cite_check needs caseNumber, applicable_law needs lawName+date, impact_map needs lawName+jo), and one use case is spelled out explicitly ('LLM 환각 방지'). What is missing is guidance on when to prefer legal_research or search_law over these modes, so selection against siblings is still inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
legal_research법령 종합 리서치ARead-onlyIdempotent
Korean-law-mcp — [⛓리서치] 다단계 법령 리서치 통합 — 여러 API를 병렬로 엮는 복합 질문 전용. task: full_research=도메인·법령명 불명확한 자연어 질문 폴백(기본값, 예 '음주운전 처벌 기준') | law_system=법률·시행령·시행규칙 3단+위임+별표(예 '관세법 체계') | action_basis=처분·허가의 법적 근거+해석례+판례+행심(예 '영업정지 근거') | dispute_prep=불복·소송 준비, 판례+심판례+도메인 결정례(예 '과세처분 불복') | amendment_track=개정 이력+신구대조+연혁(예 '2023년 개정 뭐 바뀜') | ordinance_compare=조례 전국 비교+상위법 적합성(예 '서울시 주차 조례') | procedure_detail=절차·수수료·별표서식(예 '건축허가 절차') | document_review=계약서·약관 조항 리스크+근거법령(text 필수). scenario(선택): 확장 시나리오 — time_travel(두 시점 본문 diff)·timeline·penalty·action_plan·delegation·impact·compliance·customs·manual. 미지정 시 쿼리에서 자동 감지되며, task별 호환 조합은 scenario 파라미터 설명 참조.
| Name | Required | Description | Default |
|---|---|---|---|
| mst | No | [amendment_track] 법령일련번호 (알고 있으면) | |
| task | No | 리서치 유형 (도구 설명의 task 표 참조). 미지정 시 full_research | full_research |
| text | No | [document_review 전용·필수] 검토할 계약서/약관 전문 텍스트 | |
| lawId | No | [amendment_track] 법령ID (알고 있으면) | |
| query | No | 자연어 질문/법령명/키워드 (예: '음주운전 처벌 기준', '관세법 체계'). document_review 외 모든 task에서 필수 | |
| domain | No | [dispute_prep] 전문 분야 (tax=조세심판, labor=노동위, privacy=개인정보위, competition=공정위). 미지정 시 자동 감지 | |
| toDate | No | [time_travel] 비교 종료 시점 YYYYMMDD | |
| articles | No | [law_system] 함께 조회할 조문 번호 (예: ['제38조']) | |
| fromDate | No | [time_travel] 비교 시작 시점 YYYYMMDD | |
| scenario | No | 확장 시나리오. 미지정 시 쿼리에서 자동 감지. task별 호환: law_system=delegation·impact | action_basis=penalty | amendment_track=timeline·time_travel | ordinance_compare=compliance | full_research=customs·action_plan | procedure_detail=manual | |
| parentLaw | No | [ordinance_compare] 상위 법령명. 미지정 시 자동 검색 | |
| maxClauses | No | [document_review] 최대 분석 조항 수 (기본 15) | |
| includeHistory | No | [amendment_track] 조문별 개정 이력(제정 시점부터 전건)까지 포함. 기본 false — 이 섹션이 응답 상한을 먼저 소진해 신구대조표가 잘린다 (#158) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered. The description adds genuinely behavioral context: it fans out to multiple APIs in parallel and auto-detects scenario from the query when unspecified, which tells the agent to expect higher latency and broader output. It does not warn about response-size limits in the description body itself (the #158 truncation caveat lives only in the includeHistory parameter).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core distinction — complex parallel research only — is front-loaded before the enumeration, which is the right ordering. The pipe-delimited task/scenario list is dense but information-bearing rather than padded; it is long, though, and the scenario guidance spills into a second clause that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter aggregator with no required params, the description does the hard work of explaining which task/scenario combinations are legal and coherent. With no output schema, the return shape (what sections a full_research vs. amendment_track response contains) is left entirely unspecified — the one meaningful gap for a tool that merges many sources.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter is already tagged with its governing task, so the schema carries most of the load. The description still adds value by supplying the per-task examples that the task enum's own description explicitly defers to ('도구 설명의 task 표 참조') — without the description the enum would be much less interpretable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (다단계 법령 리서치 통합) and immediately constrains scope to '복합 질문 전용' — questions that require stitching multiple APIs in parallel. The eight enumerated tasks with concrete example queries make it unmistakable that this is the orchestrator, not a single-lookup sibling like search_law or get_law_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The task table is effectively a routing guide: each task names a question shape and an example, and it declares full_research as the fallback for unclear natural-language queries. Scenario compatibility per task is spelled out in the enum description. What's missing is an explicit statement of the negative case — that simple single-law lookups should go to the lighter siblings instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ordinance_radar조례 정비 레이더ARead-onlyIdempotent
Korean-law-mcp — [자치법규] 조례 정비 레이더 — 조례가 인용한 근거 상위법령(법률/시행령/시행규칙)을 본문에서 추출하고, 각 상위법의 현행 시행일과 조례 시행일을 대조해 '상위법이 조례 시행 이후 개정됨 → 정비 검토 대상'을 자동 플래그. 조례 담당 공무원의 상위법 개정 추적·조례 정비 판단용. ordinSeq(또는 id)나 ordinanceName 중 하나 지정.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ordinSeq 별칭 — 힌트가 id=로 안내하는 경우 대응 | |
| query | No | ordinanceName 별칭 — 자연어 조례명으로 검색 | |
| ordinSeq | No | 자치법규 일련번호 (ordinSeq) | |
| ordinanceName | No | 자치법규명 — 지정 시 검색 후 첫 결과 사용 (예: '서울특별시 광진구 주차장 설치 및 관리 조례') |
TDQS
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.
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.
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.
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.
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.
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판례·결정례 검색ARead-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'.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 페이지 (기본1) | |
| sort | No | 정렬: lasc/ldes/dasc/ddes/nasc/ndes | |
| query | No | 검색 키워드 | |
| domain | Yes | 도메인 선택 (enum 값 참조) | |
| display | No | 결과 수 (기본20) | |
| options | No | 도메인별 옵션. 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
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.
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.
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.
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.
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.
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법령 검색ARead-onlyIdempotent
Korean-law-mcp — [법령검색] 법령명·조례명·행정규칙명 키워드검색 → lawId, mst 획득. 지자체 조례·규칙(자치법규), 훈령·예규·고시(행정규칙)도 검색 — 0건 시 자치법규/행정규칙으로 자동 폴백(예: '광진구 복무조례', '외국환거래규정'). 약칭 자동변환. 제명변경·시행예정 개정 자동 병기. 폐지된 법령·행정규칙은 폐지 사실과 후속(통합) 규정을 자동 안내. 법령·조례·행정규칙 조회 전 식별자 확보용.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 검색할 법령명 (예: '관세법', 'fta특례법', '화관법') | |
| display | No | 최대 결과 개수 (기본 50 — 짧은 법령명 정확매칭 누락 방지) |
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v4.15.14- First observed
discover_tools - First observed
execute_tool - First observed
get_annexes - First observed
get_decision_text - First observed
get_law_text - First observed
legal_analysis - First observed
legal_research - First observed
ordinance_radar - First observed
search_decisions - First observed
search_law
TDQS
Scored across 10 tools
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.
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.
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.
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
Related MCP Connectors
Korean law: statutes, precedents, ordinances, treaties and citation verification (법제처 API).
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
- find-refOAuthcom.find-ref
Korean accounting standards, audit, tax and legal sources and rulings, with citation checks
Korean statutes, precedents, local business-district stats and public procurement for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseNot gradedqualityCmaintenanceProvides 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 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search and retrieve Korean laws, regulations, administrative rules, legal interpretations, and precedents via official APIs for legal review workflows.1MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to query and analyze Korean law, including statutes, precedents, and ordinances, with citation verification and impact analysis.101,627 npmMIT

