Korean Law MCP
법제처 42개 API를 10개 도구로. 법령, 판례, 행정규칙, 자치법규, 조약, 해석례(국세청 포함) + LLM 환각 방지 인용 검증(법령·판례, 실존+내용) + 조문 영향 그래프 + 시점 비교 자동 diff + 이럴 땐 이렇게 — 5단계 안내 + 판례 생사 확인(Citator) + 행위시법 판단 + 조례 정비 레이더 + 폐지 법령 후속 규정 안내를 AI 어시스턴트나 터미널에서 바로 사용.
법제처 Open API 기반 MCP 서버 + CLI. Claude Desktop, Cursor, Windsurf, Zed, Claude.ai 등에서 바로 사용 가능.
▶ 클릭하면 유튜브에서 재생됩니다.
AI에 연결하기
Claude에 연결하기 ChatGPT에 연결하기
v4.12.0 — 이슈 62건 통합 배치 + "없다고 잘못 말하던" 경로 차단
법률 자문 3축(법적 정합성·토큰 효율·응답 성능)을 실측해 등록 이슈 62건(#88~#149)을 한 번에 해결한 배치(#150, @humdrum00001010)와, 머지 전 도메인별 리뷰에서 찾은 결함 31건의 후속 수리. 테스트 196 → 701.
자료가 있는데 "없다"고 답하던 경로를 막았다. 이 서버에서 가장 나쁜 실패는 느린 게 아니라 실재하는 법령·판례를 부존재로 단정하는 것이다.
-
판례 조회에서 일시 장애(503·네트워크 오류) 직후의 빈 응답 한 번을 부존재로 확정하던 판정을 관측 이력 기준으로 교체
-
법제처 점검·안티봇 페이지를 받았을 때 실재 판례를
[NOT_FOUND]로 단정하던 HTML 폴백 경로 차단 — 이제 기구 고장과 자료 부존재를 구분한다 -
별표 조회에서 HTML 응답이 조용히 빈 목록이 되고 "법제처 DB에 없습니다"로 굳던 경로 차단
응답이 멈추거나 끊기지 않는다.
-
체인 자문에 45초 데드라인(
MCP_CHAIN_DEADLINE_MS) — 만료되면 받은 갈래까지 조립해 부분 결과를 돌려주고 못 받은 자리는 마커로 남긴다. 업스트림이 느릴 때 MCP 클라이언트 타임아웃(60초)에 걸려 통째로 날리던 것이 사라졌다 -
2MiB 초과 본문에서 300초 무한 정지 → 13ms 명시 에러(v4.11.0 회귀 수정)
-
판례 미스 조회 12.5초 → 2.2초, 체계도 히트 10.611.6초 → 6.38.3초
-
8.5k자 질의의 라우팅 476ms, 적대적 입력에서 최대 45.9초 걸리던 정규식 제거
인용 검증이 더 정확해졌다.
-
verify_citations가 법령+판례 2축으로 확장 — 실존 불가와 미확인을 구분해 표기한다 -
impact_map이 조번호에 더해 법령명까지 대조 — 형법 제1조 질의에 군형법 제1조가 섞이던 것 차단. 판정이 애매하면 버리지 않고 보류한다(위헌심판의 "구 OO법" 인용 포함) -
cite_check가 판시사항을 배열·객체 형태로 받아도 읽는다(종전에는 조용히 실패)
별표·검색. 100건 창 밖의 별표에 도달(도로교통법 시행규칙 263건 중 별표28 본문 확인), 별표 1의2를 별표 1로 조용히 바꿔 주던 오선택 차단, discover_tools 응답 65% 감축(정답 잔존 10/10).
사용자 가시 변경 2건: 날짜 표기가 2024.1.5. → 2024.01.05로 통일(빈 시행일은 N/A), discover_tools 응답이 포인터·랭킹 형식으로 바뀌었다.
v4.11.0 — 요청·릴리스 경계 하드닝
한 번의 요청이 업스트림 호출 수백 건으로 증폭되거나, 클라이언트가 끊은 뒤에도 서버가 계속 일하던 구조를 정리했다.
-
요청 단위 실행 예산: 재시도·안티봇 hop까지 같은 예산에서 차감(
MCP_MAX_UPSTREAM_REQUESTS기본 48) -
취소 전파: HTTP 연결 끊김·MCP 취소 신호가 도구·체인·업스트림 fetch·백오프 대기까지 도달
-
패키징 검증: 소스 없는 산출물·
exports대상 부재를 게시 전에 차단
⚠️ Breaking: HTTP 바인드 기본값이 0.0.0.0 → 127.0.0.1, TRUST_PROXY 기본값이 1 → false(허용값도 1~10 정수만), get_batch_articles 입력 상한(법령 20개·법령당 조문 50개·요청당 100개). 자세한 마이그레이션은 CHANGELOG 참조.
v4.10.0 — 폐지된 법령을 찾을 때 후속 규정을 알려준다
폐지된 법령명으로 검색하면 0건만 돌아오던 것을, 연혁을 추적해 폐지 사유와 후속 통합 규정을 안내하도록 바꿨다. 법령·행정규칙 양쪽 모두 지원한다. "지금은 없는 법"을 묻는 질문이 막다른 길로 끝나지 않는다.
v4.9.7 — 공용 키 사용자의 429 폭증 해소 (폴백 쿼터 토큰버킷화)
법제처 키 없이 공개 서버(mcp.gomdori.app/law)를 쓰는 사용자가 429를 반복해서 맞던 문제. 서버 키 폴백 쿼터는 무키 사용자 전원이 공유하는 전역 한도인데, 고정창(fixed window) 방식이라 창 초반 몇 명이 소진하면 나머지 사용자가 남은 창 내내 차단됐다. 실측(2026-08-12 프로덕션)에서 무키 요청 3건 중 2건이 즉시 429였다.
-
토큰버킷으로 교체 (
src/lib/rate-limit.ts): 연속 리필이라 소진 후에도 몇 초 뒤 다시 통과한다. 평균 처리율은 그대로 두고 버스트만 흡수 — 한 대화 턴에 도구를 여러 번 부르는 MCP 사용 패턴에 맞다 -
Retry-After헤더 + 대기 초 안내: 429 본문이retry in Ns를 포함하고, IP 한도 초과 응답도 JSON-RPC 형식으로 통일(기존{error}평문은 MCP 클라이언트가 파싱하지 못했다) -
FALLBACK_DAILY_CAP신설: 분당 한도를 풀어도 하루 총량은 묶어 서버 키의 법제처 quota를 보호. 0이면 비활성(기본) -
공개 서버 설정도 분당
30 → 120으로 완화하고 일일 캡43,200(종전 분당 한도의 24시간 이론 총량)을 걸었다 — 총량은 유지, 버스트만 4배 완화
자체 법제처 키를 헤더(apikey)로 넘기는 사용자는 이 게이트를 타지 않는다(무료 발급: https://open.law.go.kr).
v4.9.0 — 인용 검증이 조용히 건너뛰던 표기 3종 해소
verify_citations를 환각 게이트로 파이프라인에 걸어 쓸 때 가장 위험한 실패는 "검증 실패"가 아니라 검증 미가동이다. 법령명을 못 뽑으면 조문 실존 검증에 진입조차 못 하는데 출력은 경고(⚠)로만 보여서, 같은 텍스트에 없는 조문이 섞여 있어도 ✗가 나오지 않는다. 사용자에겐 "통과"로 읽힌다. 표기 3종을 실사용 제보로 확인해 막았다.
「노인장기요양보험법」 제38조제1항 및 같은 법 시행규칙 제30조
before ⚠ 0 실존 / 2 확인필요 — '119긴급신고의 관리 및 운영에 관한 법률 시행규칙'으로만 매칭
after ✓ 노인장기요양보험법 제38조(재가 및 시설 급여비용의 청구 및 지급 등) 제1항 실존
✓ 노인장기요양보험법 시행규칙 제30조(장기요양급여비용의 청구 등) 실존
└ 같은 텍스트의 제999조 → ✗ NOT_FOUND (존재 범위: 제1조~제44조) — 환각 게이트 가동
-
「법령명」 제N조에서 추출 실패 (#69, @BW-YU):LAW_NAME_REGEX가$앵커로 법령명 종단을 찾는데 표준 인용 표기의 닫는 낫표가 lookback 끝에 남아 앵커가 안 걸렸다(후행 공백만 제거하고 있었음) -
가운뎃점 표기 차이 (#69, @BW-YU): 법제처 공식 제명은 한글 가운뎃점
ㆍ(U+318D)인데 실무 문서·판결문·LLM 출력은 라틴 중점·(U+00B7)가 보통이라, 표기만 다른 같은 법이 불일치로 떨어졌다.·ㆍ‧•・5종 흡수 — 무관 법령 차단(민법→난민법)은 유지 -
같은 법 시행규칙조응 미해소 (#70, @gonnarun): 「A법」 제N조 및 같은 법 시행규칙 제M조 는 법제처 조문·관공서 서식의 표준 표기다. ① 후보 축약이 접미사 단독 후보(시행규칙)를 만들어 무관 법령을 물어오고 ② 선행 법령명이 승계되지 않았다. 직전 법령명을 승계하되 선행 법령명이 없거나 빈 줄로 문단이 바뀌면 승계하지 않는다 — 무관 법령을 근거로 판정하는 게 더 나쁜 오답이다. 후보가 0개면 검색을 시도하지 않고⚠ 법령명 불명확으로 떨어진다(검색 0건을✗ NOT_FOUND로 낙인하면 '법령명 미상'이 '환각'으로 오보된다)
+ v4.8.0 — 외부 기여 PR 5건 (#63~#67)
행위시법 판단·연혁 파싱·검색 리졸버·재시도·폐지 법령 처리 정확도 개선.
-
분리시행 법령의 적용 버전 오특정 (#64): 조항별 시행일이 나뉘는 법령(중대재해처벌법 50인 미만 유예 등)에서
applicable_law가 잘못된 버전을 "기준일 시행 중"으로 특정하던 것 -
findLaws기본 조회 20이 관련도 정렬을 굶김 (#66): 정확매칭이 앞 20건에 없어 무관 부분매칭 1위를 신뢰하던 문제 → 100건 + 무관 1위 차단 가드 -
폐지 법령을 '환각'으로 오탐 (#67): 폐지 법령 인용을
⌛ REPEALED로 분리 보고(존재≠생존) -
연혁 페이징 조기종료·제21항+ 미지원 (#65), DRF 간헐 404 재시도 (#63)
v4.7.0 — 조례 정비 레이더 (ordinance_radar)
"상위법 바뀌었는데, 우리 조례는 아직 그대로 아닌가?" — 조례 담당 공무원이 매년 반복하는 상위법 개정 추적을 한 번의 호출로.
korean-law "광진구 주차장 조례" → ordinance_radar(ordinanceName="...")
📡 조례 정비 레이더
조례: 서울특별시 광진구 주차장 설치 및 관리 조례 (시행 20260227)
근거 상위법령 3건 대조:
⚠️ 주차장법 — 현행 시행 20260603 (조례보다 약 4개월 뒤 개정 → 정비 검토 대상)
✅ 주차장법 시행령 — 현행 시행 20250817 (조례 시행 시점까지 반영)
⚠️ 주차장법 시행규칙 — 현행 시행 20260331 (조례보다 약 1개월 뒤 개정 → 정비 검토 대상)
-
근거법 자동 추출: 조례 제1조(목적)의 「」 인용에서 근거 법률·시행령·시행규칙을 추출 ("같은 법 시행령" 축약 표현도 해석). 본문 전체가 아닌 목적 조문만 스캔해 별표의 무관 인용(감면대상 정의의 공직선거법 등) 과잉경보를 배제
-
개정 대조: 각 상위법의 현행 시행일 vs 조례 시행일을 대조해 정비 검토 대상을 자동 플래그, 후속 확인용 MST 동봉
-
법제처 자치법규 연계 API(lnkOrd)는 커버리지가 낮아 미사용 — 조례 본문 표준 표기 파싱으로 대체
+ v4.7.1~4.7.4 — 검색 정확도·인용 검증 패치
-
v4.7.4:
search_law오법령 반환 차단 — 「인공지능 발전과 신뢰 기반 조성 등에 관한 기본법」의 통칭 "인공지능법"이 정식 제명의 부분문자열이 아니라 검색 0건 → 확장쿼리("AI법")에 법제처가 검색어를 무시한 무관 법령 50건을 반환하던 문제. 약칭 등록 +hasRelatedHit가드(쿼리와 포함관계인 결과가 없으면 채택하지 않음) -
v4.7.2:
verify_citations가 수식어 앞 법령명("절도죄는 형법 제329조…")에서PARTIAL_VERIFIED로 저하돼 환각을 놓치던 문제 수정 (#55) + hono 보안 패치(HIGH 5건 해소, #54) -
v4.7.1:
legal_research가scenario값을task에 잘못 받아도 재배치해 툴콜 실패 제거 +ordinance_radarquery별칭 추가 (PlayMCP 심사 피드백)
+ v4.6.1~4.6.6 — 운영 안정화 묶음
-
v4.6.6: 핸드셰이크(initialize/tools/list)를 rate limit에서 제외 — claude.ai 공유 egress IP가 429를 맞아 "간헐적 도구 못 찾음"이 되던 근본원인 해결 +
get_ordinanceid 별칭 수용 +get_article_history날짜 미지정 시 전체기간 자동적용 -
v4.6.5/4.6.4: MCP 등록 심사 대응 — ToolAnnotations
destructiveHint추가, 한글 title 제거 -
v4.6.3:
search_law자치법규 자동 폴백 — 조례·지역명 쿼리 0건 시 search_ordinance 자동 시도 -
v4.6.2: 폴백 쿼터 게이트를 tools/call만 적용 — 핸드셰이크 429 차단 해제
-
v4.7.0 보안·운영 패치 동봉: JSON-RPC 배치의 tools/call을 개수만큼 rate limit·폴백 쿼터에 계수(배치 증폭 차단, 요청당 상한 20 —
MCP_MAX_BATCH_CALLS) + graceful shutdown idle 연결 정리(clean exit) +get_article_historylawName 정확매칭 우선(가나다순 오매칭 방지)
v4.6.0 — 인용 검증 강화(내용까지) + 클라우드 안티봇 우회
-
verify_citations내용 검증: 조문 실존 확인에 더해,민법 제750조(계약해제)처럼 존재하는 조문에 엉뚱한 제목을 붙인 내용 환각을[CONTENT_MISMATCH]로 탐지. 기존엔 제750조만 실존하면 통과했으나, 이제 인용한 조문 제목이 실제와 일치하는지 대조합니다(LexDiffcitation-content-matcher이식 — 정규화 후 공통 substring + 문자 bigram Jaccard).legal_analysis(mode=verify_citations)에도 동일 적용 -
law.go.kr JS 안티봇 우회: 클라우드 IP(GCP/AWS/Fly)에서 법제처가 API 데이터 대신
location.assignJS 리다이렉트 페이지를 반환할 때, 난독화 URL을 파싱해 토큰 URL로 자동 우회(최대 3홉, 토큰 URL 404 시 원본 재시도). 로컬/등록 IP에선 no-op —Referer주입(v4.0.9)으로도 안 뚫리는 클라우드 환경의 방어층
v4.5.0 — 시행예정 법령 감지 (제명변경 오판 방지)
search_law가 시행예정(target=eflaw) 보조검색을 수행해 결과에 병기합니다.
-
제명변경 예정: 「데이터기반행정 활성화에 관한 법률」→「인공지능 및 데이터 기반 행정 활성화에 관한 법률」(2026-08-28 시행)처럼 공포~시행 사이의 제명변경을 신·구 명칭 매핑으로 표시 — 신명칭 검색 시 "정확매칭 없음"만 떠서 LLM이 "법령 없음"으로 오판하던 문제 해결
-
개정 시행예정: 검색된 현행 법령에 시행 대기 중인 개정이 있으면 시행일·공포번호와 시행예정본 MST 안내
-
미시행 신규 법령: 공포됐지만 아직 시행 전이라 현행 검색 0건인 법령을 별도 안내 (효력 없음 경고 포함)
v4.4.1–4.4.3 — 안정성 패치
-
v4.4.3:
zod를^4로 고정 — 신규 설치가 zod 3.x를 해석해listTools첫 호출에서z.toJSONSchema is not a function으로 크래시하던 문제 해결 -
v4.4.2:
get_annexes행정규칙 별표/서식 조회 복구 — 응답 키admrulbyl우선 파싱 + "...시행세칙" 자동 판별 + 동일 bylSeq 별표/서식 충돌 분리 (#50/#49/#51) -
v4.4.1: 광고 스키마
required버그 수정 —.default()필드(legal_research.task·search_law.display)가 필수 입력으로 노출되던 문제(io:"input"명시) +legal_analysis비용 옵션 패스스루 + 비호환 scenario 경고 노트
v4.4.0 — 노출 도구 통폐합 19개 → 9개 (컨텍스트 52% 감축)
MCP 클라이언트가 매 세션 읽는 도구 목록(ListTools)을 ~15.1KB → ~7.2KB로 줄였습니다.
-
chain_*8개 →legal_research하나로 (task파라미터: full_research·law_system·action_basis·dispute_prep·amendment_track·ordinance_compare·procedure_detail·document_review) -
킬러피처 4개(
verify_citations·cite_check·applicable_law·impact_map) →legal_analysis하나로 (mode파라미터) -
하위호환: 기존 도구명 직접 호출·
execute_tool경유 모두 그대로 동작. 광고 목록에서만 빠짐
v4.3 — 판례 생사 확인 + 행위시법 판단
"이 판례 아직 유효한가?" + "사건 시점엔 어떤 법이 적용되나?" — 법률 실무에서 가장 위험한 두 실수를 잡는다.
1. cite_check — 판례 생사 확인 (한국형 Shepard's Citator)
"2007다27670 아직 유효해?"
→ 그 사건번호를 인용한 후속 판례를 본문검색으로 역추적 + 전원합의체 후속 판결 본문 정밀 스캔 → 변경·폐기 선언 감지:
📊 판정: ❌ 변경·폐기 신호 감지 — 2018다248626(판례 변경 선언, 저촉 범위 변경)
맥락: "…2008년 전원합의체 판결은 이 판결의 견해와 배치되는 범위에서 변경하기로 한다…"
판결문이 사건번호 대신 "(이하 '2008년 전원합의체 판결'이라 한다)" 별칭으로


