Korean Law MCP
๋ฒ์ ์ฒ 42๊ฐ API๋ฅผ 9๊ฐ ๋๊ตฌ๋ก. ๋ฒ๋ น, ํ๋ก, ํ์ ๊ท์น, ์์น๋ฒ๊ท, ์กฐ์ฝ, ํด์๋ก(๊ตญ์ธ์ฒญ ํฌํจ) + LLM ํ๊ฐ ๋ฐฉ์ง ์ธ์ฉ ๊ฒ์ฆ + ์กฐ๋ฌธ ์ํฅ ๊ทธ๋ํ + ์์ ๋น๊ต ์๋ diff + ์ด๋ด ๋ ์ด๋ ๊ฒ โ 5๋จ๊ณ ์๋ด + ํ๋ก ์์ฌ ํ์ธ(Citator) + ํ์์๋ฒ ํ๋จ์ AI ์ด์์คํดํธ๋ ํฐ๋ฏธ๋์์ ๋ฐ๋ก ์ฌ์ฉ.

๋ฒ์ ์ฒ Open API ๊ธฐ๋ฐ MCP ์๋ฒ + CLI. Claude Desktop, Cursor, Windsurf, Zed, Claude.ai ๋ฑ์์ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ.
English

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๋
์ ์ํฉ์์ฒด ํ๊ฒฐ'์ด๋ผ ํ๋ค)" ๋ณ์นญ์ผ๋ก ๋ณ๊ฒฝ ์ ์ธํ๋ ๊ดํ๊น์ง ์ถ์ . ๋ณ๊ฒฝ๋ ํ๋ก๋ฅผ ์ด์์๋ ๊ฒ์ฒ๋ผ ์ธ์ฉํ๋ ์ฌ๊ณ ๋ฅผ ์ฐจ๋จํ๋ค. ๋ฌด๋ฃ ๋๊ตฌ ์ค ์ ์ผ.
2. applicable_law โ ํ์์๋ฒ ํ๋จ + ๋ถ์น ๊ฒฝ๊ณผ๊ท์
"2023.5.10 ๋น์ ๋๋ก๊ตํต๋ฒ ์ 44์กฐ"
โ ๊ธฐ์ค์ผ์ ์ํ ์ค์ด๋ ๋ฒ์ (MST) ํน์ โ ๊ทธ ์์ ์กฐ๋ฌธ ๋ณธ๋ฌธ โ ํํ๊ณผ ๋น๊ต โ ์ดํ ๊ฐ์ ๋ถ์น์ ์ ์ฉ๋กยท๊ฒฝ๊ณผ์กฐ์น ์๋ ๋ฐ์ท + ํ์์๋ฒ(ํ๋ฒ ยง1)ยท์ ์ฌ์ฒ๋ถ ์๋ฐํ์์๋ฒ(ํ์ ๊ธฐ๋ณธ๋ฒ ยง14โข) ๋ฒ๋ฆฌ ์๋ด. LLM์ด ํํ๋ฒ์ผ๋ก ์ค๋ตํ๋ ๊ฒ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ฐฉ์ง.
v4.0 โ 3๊ฐ ํฌ๋ฌ ๊ธฐ๋ฅ ๋์ ์ถ๊ฐ
์กฐ๋ฌธ ์ํฅ ๊ทธ๋ํ + ์์ ๋น๊ต + ๋จ๊ณ๋ณ ์๋ด. ๋ฒ๋ฌดํยท์ฐ๊ตฌ์ยท์ค์์์๊ฐ ๋งค๋ด์ผ๋ก ๋ฉฐ์น ๊ฑธ๋ฆฌ๋ ์์
์ด ํ ๋ฒ์.
1. impact_map โ ์กฐ๋ฌธ ํ ์ค์ ํ๊ธํจ๊ณผ ๊ทธ๋ํ
"๋ฏผ๋ฒ ์ 103์กฐ ์ธ์ฉํ ํ๋ก"
โ ๋๋ฒ์ ํ๋กยทํ์ฌ ๊ฒฐ์ ยท๋ฒ๋ นํด์ยทํ์ ์ฌํยท์์น๋ฒ๊ท๋ฅผ ์ญ๋ฐฉํฅ ํ์ + ์กฐ๋ฌธ์ด ์ธ์ฉํ ๋ค๋ฅธ ๋ฒ๋ น(์ ๋ฐฉํฅ) + mermaid ๊ทธ๋ํ ์ฝ๋ ์๋ ์์ฑ. claude.ai์์ ๋ฐ๋ก ์๊ฐํ.
graph LR
๋ฏผ๋ฒ_์ 103์กฐ["โ๏ธ ๋ฏผ๋ฒ ์ 103์กฐ"] --> P["๐ ๋๋ฒ์ ํ๋ก"]
๋ฏผ๋ฒ_์ 103์กฐ --> C["โ๏ธ ํ์ฌ ๊ฒฐ์ "]
๋ฏผ๋ฒ_์ 103์กฐ --> O["๐๏ธ ์์น๋ฒ๊ท"]
2. time_travel โ ๋ ์์ ๋ณธ๋ฌธ ์๋ diff
"๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ 2020-01-01 vs 2025-11-01"
โ ์์์ ๋ ์์ ์ ์ํ ์ค์ด์๋ ๋ณธ๋ฌธ์ ์๋์ผ๋ก ๊ฐ์ ธ์ ์กฐ๋ฌธ ๋จ์ ์๋ diff: ์ถ๊ฐ(+) / ์ญ์ (-) / ๋ณ๊ฒฝ(โณ) ๋ถ๋ฅ + ๋ณ๊ฒฝ ์ ํ ๋ณธ๋ฌธ + ์์ ๋ณํ๋.
3. action_plan โ ์ด๋ด ๋ ์ด๋ ๊ฒ, 5๋จ๊ณ ์๋ด
"์ ์ธ๊ธ ๋ชป ๋ฐ์์ด"
โ STEP 1 ์ํฉ์ง๋จ(์ฃผํ์๋์ฐจ๋ณดํธ๋ฒ ์๋ ์๋ณ) โ STEP 2 ๊ถ๋ฆฌ/๊ตฌ์ ์๋จ(ํ๋ก) โ STEP 3 ์ ์ฒญ๊ธฐ๊ด/๊ธฐํ(ํ์ ๊ท์น+ํด์) โ STEP 4 ํ์์๋ฅ/์์(๋ณํ) โ STEP 5 ํจ์ /์ฃผ์(์ํจยท๋ฒ๋ฅ ๊ตฌ์กฐ๊ณต๋จ). ํ์ ๋งํฌ ๊ทธ๋๋ก โ ์คํ ๊ฐ๋ฅํ ๋จ๊ณ๋ก ๋ณํ.
+ v4.2.0 โ ๋ฒ๋ น ํํ์ฑ ๊ฐ๋ (๊ฐ์ ์ ๋ฒ๋ น ์ค๋ต ๋ฐฉ์ง)
search_law ๊ฒฐ๊ณผ์ [ํํ] / โ ๏ธ[์ฐํ-๊ณผ๊ฑฐ๋ฒ์ ] ๋ผ๋ฒจ + ์ํ์ผ ํ๊ธฐ(ํํ ์ฐ์ ์ ๋ ฌ), get_law_text ๋ณธ๋ฌธ ํค๋์ ์กฐํ๊ธฐ์ค์ผ vs ์ํ์ผ ๋น๊ต ๋ผ๋ฒจ(์ํ ์์ ยทefYd ๊ณผ๊ฑฐ ์กฐํ ๊ฒฝ๊ณ )๊ณผ ๊ตฌ ๋ฒ๋ น๋ช
("(๊ตฌ ๋ฒ๋ น๋ช
: ํ์ฌ์๋ฐฉ, ์๋ฐฉ์์ค ์ค์นใ์ ์ง ๋ฐ ์์ ๊ด๋ฆฌ์ ๊ดํ ๋ฒ๋ฅ โฆ)") ํ๊ธฐ. LLM์ด ๋ถ๋ฒยท๊ฐ์ ๋ ๋ฒ๋ น์ ํ์ต๋ฐ์ดํฐ ์ ์ ๋ฒ์ ๊ณผ ํผ๋ํ์ง ์๋๋ก ๋๊ตฌ ์ถ๋ ฅ ๋จ๊ณ์์ ์ฐจ๋จ.
+ v4.1.0 โ ํ๋ก ๊ฒ์ ๊ตฌ์กฐํ + ์์ธ ์ฆ๊ฑฐ ์๋ ์ฐ๊ฒฐ
ํ๋ก ๊ฒ์์ ๊ณตํต ๊ตฌ์กฐํ core(searchPrecedentsStructured)๋ก ํตํฉ. ๊ธด ์์ฐ์ด/๊ฐ๋
ํ ์ง์๋ฅผ compact query๋ก ๋ณด์ ํ๊ณ , ์ฌ๊ฑด๋ฒํธโ์ ๋ชฉโ๋ณธ๋ฌธ๊ฒ์ ์์ผ๋ก ํด๋ฐฑ. ์์ ํ๋ก๋ฅผ get_precedent_text์ ์๋ ์ฐ๊ฒฐ(๊ธฐ๋ณธ 2๊ฑด/์ต๋ 5๊ฑด)ํด ๊ทผ๊ฑฐ ๋ณธ๋ฌธ์ ํจ๊ป ์ ๊ณตํ๋ฉฐ, search_decisions(domain="precedent", options.includeText=true)๋ก opt-in. ๋ค๊ฑด ์์ธ์กฐํ ํฉ์ฐ ์ ๋ท ํ๋ก๊ฐ ์๋ฆฌ๋ ๋ฌธ์ ๋ ๊ฑด๋น ๋ณธ๋ฌธ ์์ฐ ๋ฐฐ๋ถ์ผ๋ก ํด๊ฒฐ. (์ธ๋ถ PR #46 + ํ์ ์ต์ ํ)
+ v4.0.9 โ ๋ฒ์ ์ฒ API Referer ํค๋ ์๋ ์ฃผ์
๋ฒ์ ์ฒ OPEN API๊ฐ Referer ํค๋ ์๋ ์์ฒญ์ OC ํค ์ ํจ ์ฌ๋ถ์ ๋ฌด๊ดํ๊ฒ ๊ฑฐ๋ถ("์ฌ์ฉ์ ์ ๋ณด ๊ฒ์ฆ ์คํจ")ํ๋ ๋ฌธ์ ๋์. law.go.kr ๊ณ์ด ํธ์คํธ ํธ์ถ ์ ๊ธฐ๋ณธ Referer๋ฅผ ์๋ ์ฃผ์
ํ๋ค(LAW_REFERER๋ก override). IP/๋๋ฉ์ธ ๋ฑ๋ก ๋ฌธ์ ๋ก ์ค์ธ๋๊ธฐ ์ฌ์ด ์ฆ์์ ์ค์ ๊ทผ๋ณธ ์์ธ์ด์์ โ IP ๋ฑ๋ก์ ํ๋๋ฐ๋ ๋ชจ๋ ๊ฒ์์ด ์คํจํ๋ ์ผ์ด์ค๋ฅผ ํด๊ฒฐ. (์ธ๋ถ PR #45)
+ v4.0.8 โ ๋ฒ์ ์ฒ ๋น/HTML ์๋ต ์๋ ์ฌ์๋
๋ฒ์ ์ฒ OPEN API๊ฐ ๊ฐํ์ ์ผ๋ก 200 ์ํ์ ๋น ๋ณธ๋ฌธ์ด๋ HTML ์ ๊ฒ ํ์ด์ง๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ๋์. ์ด ๊ฒฝ์ฐ XML ํ์๊ฐ missing root element๋ก ํฐ์ง๋ฉฐ "๋๋ค ์ ๋๋ค" ์ฆ์์ด ๋ฐ์ํ์. fetchWithRetry๊ฐ ๋น/HTML ์๋ต์ ์ผ์ ์ฅ์ ๋ก ๊ฐ์ฃผํด ์๋ ์ฌ์๋(exponential backoff)ํ๊ณ , ์ฌ์๋ ์์ง ํ์๋ ๋น ์๋ต์ด๋ฉด search_law๊ฐ missing root element ๋์ ๋ช
ํํ ์๋ด ๋ฉ์์ง๋ฅผ ๋ฐํํ๋๋ก ์์ . (IP ๋ฑ๋กยทOC ํค์ ๋ฌด๊ดํ ์ธ๋ถ ์๋ต ๋ถ์์ ์ด์)
+ v4.0.7 โ ๊ตญ์ธ์ฒญ ํ๋ก ๋ณธ๋ฌธ fallback
๋ฒ์ ์ฒ JSON API์ ๋ณธ๋ฌธ์ด ๋น์ด ์ค๋ ํ๋ก๋ฅผ ๊ตญ์ธ์ฒญ taxlaw.nts.go.kr์์ HTML๋ก ์๋ ๋ณด๊ฐ. JSON ์คํจยทํ์ฑ ์คํจยท๋ณธ๋ฌธ ๋๋ฝ ์ธ ๊ฒฝ์ฐ ๋ชจ๋ fallback์ผ๋ก ์ง์
ํ๋ฉฐ ์์ ํ๊ฒ ํ์๋จ. ์ฌ๋ด๋ง/SSL inspection ํ๊ฒฝ์ฉ LAW_EXTERNAL_HTTPS_PROXY(์ ํ)ยทLAW_EXTERNAL_TLS_REJECT_UNAUTHORIZED(์ง๋จ์ฉ) ์ง์ โ ์์ธํ ์ค์ ์ ์๋ "๊ตญ์ธ์ฒญ ํ๋ก ์๋ฒ TLS/ํ๋ก์ ์ค์ " ์น์
์ฐธ์กฐ. (์ธ๋ถ PR #44)
+ v4.0.6 โ ๋ฒ์ ์ฒ API ํ๋กํ ์ฝ ์ค์ + ํ๋ก ์ฌ๊ฒ์ ๊ฐ์
ํ์๋ง/์ธ์ฆ์ ๋ฌธ์ ํ๊ฒฝ์ ์ํด LAW_API_PROTOCOL=http ์ต์
์ถ๊ฐ(๊ธฐ๋ณธ https). ํ๋ก ์ฌ๊ฒ์ ํค์๋ ํ๋ณด ์์ฑ ๊ฐ์ ์ผ๋ก ๋งค์นญ๋ฅ ํฅ์. (์ธ๋ถ PR #41/#42)
+ v4.0.5 โ ์์กด์ฑ ์ทจ์ฝ์ ์ผ๊ด ํจ์น (Security)
npm audit High 4๊ฑด(@xmldom/xmldom 5๊ฑด์ XML injection + DoS, @hono/node-server ๊ฒฝ๋ก ์ฐํ, express-rate-limit IPv6 ์ฐํ, fast-uri path traversal) ์ผ๊ด ํจ์น. ๋ชจ๋ semver-major ๋ณ๊ฒฝ ์๋ patch/minor ์
๋ฐ์ดํธ. npm audit โ 0 vulnerabilities. ์ฝ๋ ๋ณ๊ฒฝ 0๊ฑด. ์์ธํ GHSA ๋ชฉ๋ก์ CHANGELOG ์ฐธ์กฐ.