Supports containerized deployment of the Korean law MCP server with Docker images and container runtime.
Uses environment variable configuration for API key management and server settings.
Provides data validation for API requests and responses in the Korean law search tools.
Implements the MCP server runtime and API integration logic using Python.
Uses TOML format for project configuration in pyproject.toml.
Parses XML responses from the National Law Information Center Open API using xml.etree.ElementTree.
๐๏ธ ํ๊ตญ ๋ฒ๋ฅ /ํ๋ก ๊ฒ์ MCP ์๋ฒ
๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ Open API๋ฅผ ํ์ฉํ ๊ณ ์ฑ๋ฅ MCP (Model Context Protocol) ์๋ฒ์ ๋๋ค.
AI ์์ด์ ํธ(Claude Desktop, Cursor ๋ฑ)๊ฐ ์ค์๊ฐ์ผ๋ก ํ๊ตญ ๋ฒ๋ น, ํ๋ก, ํ์ ๊ท์น์ ๊ฒ์ํ๊ณ ๋ถ์ํ ์ ์๋๋ก ํฉ๋๋ค.
โจ ์ฃผ์ ๊ธฐ๋ฅ
๐ ๋ฒ๋ น ๊ฒ์
ํค์๋ ๊ธฐ๋ฐ ๋ฒ๋ น ๊ฒ์: ๋ฏผ๋ฒ, ์๋ฒ, ๊ทผ๋ก๊ธฐ์ค๋ฒ ๋ฑ ๋ค์ํ ๋ฒ๋ น ๊ฒ์
๋ฒ๋ น ์์ธ ์กฐํ: ํน์ ๋ฒ๋ น์ ์ ๋ฌธ(์กฐ๋ฌธ) ๋ฐ ์์ธ ์ ๋ณด ์กฐํ
๋ฒ๋ น ๊ธฐ๋ณธ ์ ๋ณด: ์๊ด๋ถ์ฒ, ๊ณตํฌ์ผ์, ์ํ์ผ์, ๊ฐ์ ์ ๋ณด ํฌํจ
โ๏ธ ํ๋ก ๊ฒ์
ํ๋ก ํค์๋ ๊ฒ์: ์ํด๋ฐฐ์, ๊ณ์ฝ, ๋ถ๋นํด๊ณ ๋ฑ ํ๋ก ๊ฒ์
ํ๋ก ์์ธ ์กฐํ: ํ๊ฒฐ์์ง, ํ์์ฌํญ, ํ๋ก ์ ๋ฌธ ์กฐํ
๋ฒ์ ํํฐ๋ง: ๋๋ฒ์, ํ๋ฒ์ฌํ์ ๋ฑ ๋ฒ์๋ณ ํํฐ๋ง ์ง์
์ฐธ์กฐ์กฐ๋ฌธ/ํ๋ก: ๊ด๋ จ ๋ฒ๋ น ๋ฐ ์ฐธ์กฐ ํ๋ก ์ ๋ณด ์ ๊ณต
๐ ํ์ ๊ท์น ๊ฒ์
ํ์ ๊ท์น ๊ฒ์: ๊ฐ ๋ถ์ฒ์ ํ์ ๊ท์น ๊ฒ์
์๊ด๋ถ์ฒ ์ ๋ณด: ์ ์ ์ผ์, ์ํ์ผ์ ๋ฑ ์์ธ ์ ๋ณด
๐ ์ฑ๋ฅ ์ต์ ํ
์ ๋ต์ ์บ์ฑ: ๋ฒ๋ น/ํ๋ก ๋ฐ์ดํฐ๋ฅผ 24์๊ฐ ์บ์ฑํ์ฌ API ํธ์ถ ์ต์ํ
๋น ๋ฅธ ์๋ต ์๋: ์บ์ ๊ธฐ๋ฐ ์ฆ์ ์๋ต
์์ ์ ์ธ ์ด์: ์๋ฌ ํธ๋ค๋ง ๋ฐ ๋ก๊น ์์คํ
๐ฏ ํ์ฉ ์ฌ๋ก
๋ฒ๋ฅ ์ ๋ฌธ๊ฐ
๊ณ์ฝ์ ๊ฒํ : AI๊ฐ ๊ณ์ฝ์๋ฅผ ๋ถ์ํ๊ณ ๊ด๋ จ ๋ฒ๋ น ๋ฐ ํ๋ก๋ฅผ ์๋ ์ฐธ์กฐ
๋ฒ๋ฅ ์๋ฌธ: ํน์ ์ฌ์์ ๋ํ ๊ด๋ จ ๋ฒ๋ น ๋ฐ ํ๋ก๋ฅผ ์ฆ์ ์กฐํ
ํ๋ก ์ฐ๊ตฌ: ์ ์ฌ ํ๋ก๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๊ณ ๋น๊ต ๋ถ์
๊ธฐ์ ๋ฒ๋ฌดํ
๊ธฐ์ ์ปดํ๋ผ์ด์ธ์ค: ์ฌ์ ๊ด๋ จ ๋ฒ๋ น์ ์ค์๊ฐ ์กฐํ
๋ ธ๋ฌด ๊ด๋ฆฌ: ๊ทผ๋ก๊ธฐ์ค๋ฒ ๋ฑ ๋ ธ๋ ๊ด๋ จ ๋ฒ๋ น ๋ฐ ํ๋ก ๊ฒ์
์์ก ์ค๋น: ๊ด๋ จ ํ๋ก ๋ฐ ๋ฒ๋ น ์๋ ์์ง
์คํํธ์ /๊ฐ๋ฐ์
์๋น์ค ๋ฒ๋ฅ ๊ฒํ : ๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ, ์ ์์๊ฑฐ๋๋ฒ ๋ฑ ๊ด๋ จ ๋ฒ๋ น ํ์ธ
์ฝ๊ด ์์ฑ: ๊ด๋ จ ๋ฒ๋ น์ ์ฐธ์กฐํ์ฌ ์ฝ๊ด ์์ฑ
๋ฒ๋ฅ ๋ฆฌ์คํฌ ๋ถ์: AI๊ฐ ์๋น์ค ๊ธฐํ์๋ฅผ ๋ถ์ํ๊ณ ๊ด๋ จ ๋ฒ๋ฅ ๋ฆฌ์คํฌ ํ์
์ผ๋ฐ ์ฌ์ฉ์
๋ฒ๋ฅ ์๋ด: AI ์์ด์ ํธ๋ฅผ ํตํ ๊ธฐ๋ณธ์ ์ธ ๋ฒ๋ฅ ์ ๋ณด ์กฐํ
๊ถ๋ฆฌ ํ์ธ: ์๋น์ ๊ถ๋ฆฌ, ์์ฐจ๊ถ ๋ฑ ๊ด๋ จ ๋ฒ๋ น ๋ฐ ํ๋ก ๊ฒ์
๋ฏผ์ ์ค๋น: ํ์ ์ฌํ, ์์ก ์ค๋น๋ฅผ ์ํ ๋ฒ๋ฅ ์ ๋ณด ์์ง
๐ ๏ธ ๊ธฐ์ ์คํ
MCP Framework: FastMCP
Data Validation: Pydantic
HTTP Client: Requests
XML Parsing: xml.etree.ElementTree
Caching: cachetools (24์๊ฐ TTL)
Async Processing: asyncio
Environment: Python-dotenv
๐ฆ ์ค์น ๋ฐ ์ค์
1) ์์กด์ฑ ์ค์น
๐ก
uv๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:uv sync
2) API ํค ๋ฐ๊ธ
๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ Open API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ผ ํฉ๋๋ค:
ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ
๊ณต๋ํ์ฉ ์๋น์ค > Open API ๋ฉ๋ด์์ API ์ ์ฒญ
์น์ธ ํ ์ธ์ฆํค(OC) ๋ฐ๊ธ๋ฐ๊ธฐ
๐ ์ฐธ๊ณ : API ํค ๋ฐ๊ธ์ ๋ณดํต ์ฆ์ ์น์ธ๋๋ฉฐ, ๋ฌด๋ฃ๋ก ์ด์ฉ ๊ฐ๋ฅํฉ๋๋ค.
3) ํ๊ฒฝ ๋ณ์ ์ค์
ํ๋ก์ ํธ ๋ฃจํธ์ .env ํ์ผ์ ์์ฑํ๊ณ API ํค๋ฅผ ์ค์ ํฉ๋๋ค:
.env ํ์ผ ๋ด์ฉ:
4) ์๋ฒ ์คํ
๋๋ HTTP ์๋ฒ๋ก ์คํ:
๐ณ Docker ์คํ
Docker๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐํธํ๊ฒ ์คํํ ์ ์์ต๋๋ค:
๐งฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ (Tools)
1. health
์ค๋ช : ์๋น์ค ์ํ ๋ฐ API ํค ์ค์ ํ์ธ
ํ๋ผ๋ฏธํฐ: ์์
๋ฐํ: ์๋น์ค ์ํ ๊ฐ์ฒด
2. search_law_tool
์ค๋ช : ๋ฒ๋ น์ ํค์๋๋ก ๊ฒ์
ํ๋ผ๋ฏธํฐ:
query(string, ํ์): ๊ฒ์ํ ๋ฒ๋ น ํค์๋ (์: '๋ฏผ๋ฒ', '์๋ฒ')page(integer, ์ ํ): ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 1)page_size(integer, ์ ํ): ํ์ด์ง๋น ๊ฒฐ๊ณผ ์ (๊ธฐ๋ณธ๊ฐ: 10, ์ต๋: 50)
๋ฐํ: ๊ฒ์๋ ๋ฒ๋ น ๋ชฉ๋ก (๋ฒ๋ น๋ช , ์๊ด๋ถ์ฒ, ๊ณตํฌ์ผ์, ์ํ์ผ์ ๋ฑ)
์์ ์๋ต:
3. get_law_detail_tool
์ค๋ช : ํน์ ๋ฒ๋ น์ ์์ธ ์ ๋ณด ๋ฐ ์ ๋ฌธ(์กฐ๋ฌธ) ์กฐํ
ํ๋ผ๋ฏธํฐ:
law_id(string, ํ์): ๋ฒ๋ น ID (๋ฒ๋ น ๊ฒ์ ๊ฒฐ๊ณผ์์ ์ป์ ๋ฒ๋ นID)
๋ฐํ: ๋ฒ๋ น์ ์์ธ ์ ๋ณด์ ๋ชจ๋ ์กฐ๋ฌธ ๋ด์ฉ
์์ ์๋ต:
4. search_precedent_tool
์ค๋ช : ํ๋ก๋ฅผ ํค์๋๋ก ๊ฒ์
ํ๋ผ๋ฏธํฐ:
query(string, ํ์): ๊ฒ์ํ ํ๋ก ํค์๋ (์: '์ํด๋ฐฐ์', '๊ณ์ฝ')page(integer, ์ ํ): ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 1)page_size(integer, ์ ํ): ํ์ด์ง๋น ๊ฒฐ๊ณผ ์ (๊ธฐ๋ณธ๊ฐ: 10, ์ต๋: 50)court(string, ์ ํ): ๋ฒ์ ๊ตฌ๋ถ (์: '๋๋ฒ์', 'ํ๋ฒ์ฌํ์')
๋ฐํ: ๊ฒ์๋ ํ๋ก ๋ชฉ๋ก
์์ ์๋ต:
5. get_precedent_detail_tool
์ค๋ช : ํน์ ํ๋ก์ ์์ธ ์ ๋ณด ์กฐํ
ํ๋ผ๋ฏธํฐ:
precedent_id(string, ํ์): ํ๋ก ์ผ๋ จ๋ฒํธ
๋ฐํ: ํ๋ก์ ์์ธ ์ ๋ณด (ํ๊ฒฐ์์ง, ์ฐธ์กฐ์กฐ๋ฌธ, ํ๋ก ์ ๋ฌธ ๋ฑ)
์์ ์๋ต:
6. search_administrative_rule_tool
์ค๋ช : ํ์ ๊ท์น์ ํค์๋๋ก ๊ฒ์
ํ๋ผ๋ฏธํฐ:
query(string, ํ์): ๊ฒ์ํ ํ์ ๊ท์น ํค์๋page(integer, ์ ํ): ํ์ด์ง ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 1)page_size(integer, ์ ํ): ํ์ด์ง๋น ๊ฒฐ๊ณผ ์ (๊ธฐ๋ณธ๊ฐ: 10, ์ต๋: 50)
๋ฐํ: ๊ฒ์๋ ํ์ ๊ท์น ๋ชฉ๋ก
๐ก ์ฌ์ฉ ์์
Claude Desktop์์ ์ฌ์ฉ
Claude Desktop ์ค์ ํ์ผ (
claude_desktop_config.json) ์์ :
Claude Desktop ์ฌ์์
Claude์๊ฒ ์ง๋ฌธ:
"๋ฏผ๋ฒ ์ 750์กฐ์ ๋ํด ์๋ ค์ค"
"๋ถ๋นํด๊ณ ๊ด๋ จ ํ๋ก ์ฐพ์์ค"
"๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ ๊ฒ์ํด์ค"
Cursor์์ ์ฌ์ฉ
Cursor์ MCP ์ค์ ์์ ์์ ๋์ผํ๊ฒ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
๐ ํ๋ก์ ํธ ๊ตฌ์กฐ
๐ ๋ก๋๋งต
๋ฒ๋ น ๊ฐ์ ์ด๋ ฅ ์กฐํ
๋ฒ๋ น/ํ๋ก ์ ๋ฌธ PDF ๋ค์ด๋ก๋
์์ฐ์ด ๊ธฐ๋ฐ ๋ฒ๋ น ํด์
๋ฒ๋ น ๋น๊ต ๋ถ์ ๊ธฐ๋ฅ
ํ๋ก ์ ์ฌ๋ ๋ถ์
๋ฒ๋ฅ ์ฉ์ด ์ฌ์
๐ฐ ๋น์ฆ๋์ค ๋ชจ๋ธ
์ด MCP ์๋ฒ๋ ํ๋งค์ฉ ์ ํ์ผ๋ก ๊ฐ๋ฐ๋์์ต๋๋ค:
ํ๊ฒ ๊ณ ๊ฐ
๐ข ๋ฒ๋ฅ ์ฌ๋ฌด์/๋กํ: ๋ฒ๋ฅ ๋ฆฌ์์น ์๋ํ
๐ญ ๊ธฐ์ ๋ฒ๋ฌดํ: ์ปดํ๋ผ์ด์ธ์ค ๊ด๋ฆฌ
๐ ์คํํธ์ : ๋ฒ๋ฅ ๋ฆฌ์คํฌ ๋ถ์
๐ ๋ฒํ ์ฐ๊ตฌ์: ํ๋ก ์ฐ๊ตฌ ๋๊ตฌ
๊ฐ๊ฒฉ ์ฑ ์ (์ฐธ๊ณ )
Basic: 30๋ง์ (๊ธฐ๋ณธ ๊ฒ์ ๊ธฐ๋ฅ)
Pro: 100๋ง์ (AI ๋ถ์ ๊ธฐ๋ฅ ์ถ๊ฐ)
Enterprise: 200๋ง์+ (์ปค์คํฐ๋ง์ด์ง, ๊ธฐ์ ์ง์)
์ฐจ๋ณํ ํฌ์ธํธ
โ ๊ตญ๊ฐ ๊ณต์ ๋ฐ์ดํฐ ํ์ฉ
โ AI ์์ด์ ํธ ์ง์ ํตํฉ
โ ์ค์๊ฐ ์ต์ ๋ฒ๋ น/ํ๋ก ์กฐํ
โ ํ๊ตญ์ด ์๋ฒฝ ์ง์
โ ๋ณต์กํ API ์ฒ๋ฆฌ ์๋ํ
๐ ๋ผ์ด์ ์ค
MIT License
๐ค ๊ธฐ์ฌ ๋ฐ ๋ฌธ์
์ด์: GitHub Issues
๋ฌธ์: law-mcp@example.com
Made with โค๏ธ for Korean Legal Professionals
๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ Open API๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ฐ๋์์ต๋๋ค.
This server cannot be installed