Korean Law MCP
법제처 41개 API를 16개 도구로. 법령, 판례, 행정규칙, 자치법규, 조약, 해석례 + LLM 환각 방지 인용 검증을 AI 어시스턴트나 터미널에서 바로 사용.

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

v3.5 — AI 법률 답변의 환각을 잡아내다
LLM이 지어낸 가짜 조문을 실시간으로 탐지. 법제처 공식 DB로 모든 인용을 교차검증.
"민법 제750조에 따라 불법행위 손해배상을 청구하고,
근로기준법 제60조 제1항은 연차유급휴가를 규정하며,
상법 제401조의2 제7항에 따라 이사 책임을 물을 수 있고,
형법 제9999조는 가중처벌을 정한다"
→ verify_citations 한 번으로 (실제 법제처 API 교차검증 결과):
- ✓ 민법 제750조(불법행위의 내용) 실존
- ✓ 근로기준법 제60조(연차 유급휴가) 제1항 실존
- ✗ 상법 제401조의2 — 제7항 없음 (최대 제2항)
- ✗ 형법 제9999조 — 해당 조문 없음 (존재 범위: 제1조~제372조)
ChatGPT·Claude가 쓴 법률 답변을 그대로 믿지 마세요. 법률 AI 서비스, 로펌, 학생, 계약서 검토에서 신뢰도 체크 필수.
v3.2.0+ — 자연어로 복합 분석
사용법은 똑같습니다. 그냥 자연어로 물어보세요. AI가 질문을 알아듣고, 필요한 분석을 자동으로 추가해줍니다.
과태료 받았는데, 감경 가능할까?
"식품위생법 영업정지 과태료 감경 가능?"
→ 위반 유형별 처분 기준표 (1차·2차·3차 금액) + 벌칙 조항 원문 + 실제로 감경된 행정심판 사례 + 해당 조항 개정 이력까지 한 번에 나옵니다.
이 물건 수입하려는데, 법적으로 뭘 확인해야 하지?
"수입 통관 FTA 적용 확인"
→ 관세법 + 관세청 유권해석 + FTA 조약 원문 + 세율 별표 + 관세 분쟁 시 조세심판원 판결까지. 예전에는 법제처·관세청·조세심판원·외교부 4곳을 따로 뒤져야 했습니다.
건축허가 처리, 어디서부터 시작하지?
"건축법 허가 절차"
→ 법적 근거 (법률→시행령→시행규칙) + 수수료·서식 + 관련 훈령·예규·고시 + 우리 지자체 조례 특칙 + 유권해석까지 원스톱.
법 하나 고치면 뭐가 같이 바뀌어야 하지?
"건축법 영향도 분석"
→ 하위법령(시행령·시행규칙) + 전국 자치법규 중 영향받는 것 + 관련 행정규칙 목록이 나옵니다.
이 법의 위임 사항, 다 만들어졌나?
"국민건강보험법 위임입법"
→ "시행령으로 정한다"고 돼 있는 조항 중 아직 시행령이 안 만들어진 것을 찾아줍니다.
이 조례, 상위법에 어긋나지 않나?
"주차 조례 상위법 적합성"
→ 헌법재판소 위헌 결정 + 행정심판 취소 사례 중 비슷한 조례 관련 건을 검색하고, 상위법 근거를 대조합니다.
이 조문, 언제 바뀌었고 판례는 어떻게 달라졌지?
"근로기준법 개정이력 타임라인"
→ 신구대조표 + 조문별 개정 이력 + 해당 법령의 판례·해석례를 시간순으로 묶어줍니다.
사용법 변경 없음. 기존처럼 자연어로 물어보면 됩니다. 질문에 따라 AI가 알아서 추가 분석을 붙입니다.
모든 결과 끝에 **"이어서 할 수 있는 조회"**가 제안됩니다. 복사해서 바로 이어가세요.
v3.2.1~v3.5.4 변경 이력
v3.5.4 — 실사용 피드백 반영: NOT_FOUND 명시 시그널 전면 도입
사용자 피드백: "실사용하면 자꾸 답변 못 찾고 AI가 지맘대로 답변함. 못 찾으면 리턴값을 명확하게."
근본 원인: 일부 도구가 조회 실패 시 isError 플래그를 세팅하지 않거나 "없습니다"만 반환 → LLM이 실패 감지 못하고 창작 답변 생성.
[NOT_FOUND] / [HALLUCINATION_DETECTED] 머신 파싱 마커 전면 도입 — 모든 실패 응답에 기계적으로 감지 가능한 프리픽스 + "⚠️ LLM은 추측/생성 금지" 경고문 표준화
verify_citations — failCount > 0일 때 isError: true 설정. 환각 검출됐는데 "검증 성공"으로 오인되던 심각한 버그 수정
annex.ts / law-text.ts / article-detail.ts 등 10+개 파일 — isError: true 누락 수정
- 체인 도구 부분 실패 투명화 —
chains.ts의 silent-drop 패턴 제거. 실패한 섹션도 [NOT_FOUND / FAILED] 마커와 사유를 명시 노출 (80자 → 200자 확장)
- 신규 헬퍼
notFoundResponse(message, suggestions?)로 일관성 확보
v3.5.3 — verify_citations 실증 검증 후 3개 치명 버그 수정
실제 법제처 API로 5건 테스트 → false negative 3건 발견 → 근본 원인 수정:
- "민법" → "난민법" 부분매칭 오매칭 — 기존
chains.ts의 findLaws/scoreLawRelevance가 이미 해결해둔 로직인데 verify_citations가 재사용하지 않고 자체 로직으로 중복 구현했던 것. 공용 모듈 lib/law-search.ts로 추출하여 양쪽 재사용 (중복 제거)
- 원숫자(①②③…) 항번호 파싱 실패 — 법제처 API가
항번호를 "① " 형태로 리턴하는데 기존 parseInt(raw.replace(/[^\d]/g, ""))가 유니코드 원숫자를 제거해 NaN. 근로기준법 제60조 제1항이 실존함에도 "최대 제0항" 오판정 → lib/article-parser.ts에 parseHangNumber() 원숫자 매핑 유틸 추가
- 짧은 법령명 검색 누락 — 법제처 lawSearch API가
display=20에서 "상법"을 결과 34번째로 리턴. apiClient.searchLaw에 display 파라미터 추가, verify_citations는 searchDisplay=100으로 호출
검증 후 5/5 정확 판정 (위 예시 결과가 그 출력).
v3.5.2 — kordoc 2.3.0 → 2.4.0 업데이트 (별표/서식 파싱 엔진)
v3.5.1 — lite/full 프로필 체계 제거 (V3_EXPOSED 16개 고정 노출 도입 후 실질 미사용). tool-profiles.ts에서 LITE_TOOLS/parseProfile/filterToolsByProfile 제거, 헬스 엔드포인트 거짓 profiles 필드 → 정확한 tools: { exposed: 16, total: 92 } 로 교체. Breaking change 아님 (?profile=lite도 이미 무시되던 값)
v3.5.0 — Killer feature: verify_citations 인용 검증 + Critical 핫픽스 + 보안 강화
verify_citations 신규 — LLM 환각 방지. 사용자 텍스트에서 조문 인용 정규식 추출 + 직전 30자 lookback으로 법령명 역추적 + 법제처 DB 병렬 교차검증. 결과: ✓(실존) / ✗(없음, 존재 범위 제시) / ⚠(법령명 불명확)
- Critical 핫픽스 — v3.4.0
full 파라미터가 12개 도메인(tax_tribunal, customs, ftc, pipc, nlrc, acr, treaty, interpretation 등)에서 스키마에 필드가 없어 묵묵히 무시되던 문제 수정. unified-decisions.ts가 하위 핸들러 응답을 받은 뒤 compactLongSections() 후처리로 계단식 축약 일괄 적용
- 보안 High 2건 —
fetch-with-retry.ts 타임아웃/네트워크 에러에 API 키 포함 URL이 로그로 유출되던 문제 → maskSensitiveUrl()로 OC=*** 마스킹. trust proxy true → TRUST_PROXY 환경변수(기본 1), X-Forwarded-For 스푸핑 rate limit 우회 차단
- 품질 3건 —
decision-compact.ts 날짜 정규식 경계 가드, TAIL 경계 ". " 오탐 제거, stripRepeatedSummary 종료점 정확 탐지
- UX — 체인 8개 description 구체화(LLM이 체인 선택 가능), 검색 결과 "💡 다음: get_law_text(...)" 힌트,
search_law 약칭/오타 확장 자동 재시도, query-router 패턴 5개 추가, discover_tools 별칭 매칭 27개