Lexguard MCP
์ผ๋ฐ์ธ๋ค์ด AI๋ฅผ ํตํด ๋ฒ๋ฅ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์กฐํํ ์ ์๋ MCP ์๋ฒ. ๋ฒ๋ น ๊ฒ์, ์กฐ๋ฌธ ์กฐํ, ํ๋ก ๊ฒ์ ๋ฑ 159๊ฐ API ์ง์.
Ask AI about Lexguard MCP
Powered by Claude ยท Grounded in docs
I know everything about Lexguard MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
โ๏ธ LexGuard MCP (๋ฒ์ค๋ง๋ฆฌ)
ํ๊ตญ ๋ฒ๋ นยทํ๋กยท๋ฒ๋ นํด์์ AI๊ฐ ์ดํดํ๊ธฐ ์ฌ์ด ํํ๋ก ์ฐ๊ฒฐํ๋ MCP ์๋ฒ
๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ(Open Law) ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ๋ฒ๋ นยท์กฐ๋ฌธยทํ๋กยท๋ฒ๋ นํด์ยทํ์ ์ฌํยทํ์ฌ๊ฒฐ์ ์ ํ๋์ ์ง๋ฌธ ํ๋ฆ์ผ๋ก ์ ๊ณตํฉ๋๋ค.
- MCP Endpoint: https://lexguard-mcp.onrender.com/mcp
- Health Check: https://lexguard-mcp.onrender.com/health
- GitHub: https://github.com/SeoNaRu/lexguard-mcp
๋น ๋ฅธ ์ฐ๊ฒฐ (๋ณต๋ถ)
์๊ฒฉ MCP๋ง ์ธ ๋๋ ์๋ JSON์ ํด๋ผ์ด์ธํธ ์ค์ ์ ๊ทธ๋๋ก ๋ฃ์ ์ ์์ต๋๋ค.
- Cursor:
examples/cursor-mcp.remote.json๋ด์ฉ์.cursor/mcp.json๋ฑ์ ๋ณํฉ - Claude Desktop:
examples/claude-desktop-mcp.remote.jsonโclaude_desktop_config.json์mcpServers์ ๋ณํฉ
ํ ์ค ๋ก์ปฌ ์คํ (Docker): ์ ์ฅ์ ๋ฃจํธ์์ docker compose up --build ํ MCP URL์ http://localhost:9099/mcp ์
๋๋ค. (API ํค: LAW_API_KEY=๋ฐ๊ธํค docker compose up --build)
๋ง์ผํ๋ ์ด์คยทํฌ๋กค๋ฌ์ฉ ์ ์ ๋ฉํ: mcp/manifest.json ยท ํ๋กฌํํธ ์์ธ prompts/ ยท ๋ฆฌ์์ค URI ์๋ด resources/README.md ยท Cursor ๊ฐ๋ฐ ์คํฌ .cursor/skills/lexguard-mcp-dev/SKILL.md
Why LexGuard?
๋ฒ์ ํ์ํ ๋๋ง๋ค ๋ฉ๊ณ ์ด๋ ต๊ฒ ๋๊ปด์ง๋๋ค. ๋์ ๋น์ฉ, ๋ฏ์ ์ฉ์ด, ์ด๋์๋ถํฐ ์ฐพ์์ผ ํ ์ง ๋ชจ๋ฅด๋ ๊ตฌ์กฐ.
LexGuard MCP(๋ฒ์ค๋ง๋ฆฌ) ๋ ์ด ๋ฌธ์ ์์ ์ถ๋ฐํ์ต๋๋ค.
- ์ฌ์ฉ์๋ ์ฌ๋์ ๋ง๋ก ์ง๋ฌธํ๊ณ
- AI๋ ์ง๋ฌธ ์๋๋ฅผ ๋ถ์ํ ๋ค
- ๊ณต์ ๋ฒ๋ นยทํ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทผ๊ฑฐ๋ก ์ค๋ง๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๋จ์ด๋ ๋ฒ๋ฅ ์๋ฌธ์ ๋์ ํ์ง ์์ต๋๋ค. ๋ค๋ง, ๋ฒ์ ์ฒ์ ๋ง์ฃผํ๋ ์๊ฐ์ ๋ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
Core Features
| ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|
| 18๊ฐ MCP ๋๊ตฌ | ํตํฉ QA๋ถํฐ ๋ถ์ฒ๋ณ ํด์ยท๋ฒ๋ น์ด๋ ฅยท๋ณํ์์ยท์ฐ๊ณ ์กฐํ๊น์ง ์ ์์ญ ์ปค๋ฒ |
| ํตํฉ ๋ฒ๋ฅ QA | ๋ฒ๋ นยทํ๋กยท๋ฒ๋ นํด์ยทํ์ ์ฌํยทํ์ฌ๊ฒฐ์ ๋ณ๋ ฌ ์ข ํฉ ํ์ |
| ์กฐ๋ฌธ ์ ๋ฐ ์กฐํ | ๋ฒ๋ น๋ช + ์กฐ๋ฌธ๋ฒํธ๋ก ํน์ ์กฐํญ ์ง์ ์กฐํ |
| ๋ฌธ์ยท๊ณ์ฝ์ ๋ถ์ | ๊ณ์ฝ์ยท์ฝ๊ด ๋ถ์ฌ๋ฃ๊ธฐ๋ง์ผ๋ก ์กฐํญ๋ณ ๋ฒ์ ์ด์ ์๋ ๊ฐ์ง |
| ํ๋ก ๋ฒํธ ์ง์ ๊ฐ์ง | 2023๋ค12345, 2021ํ๋ง123 ํ์ ์๋ ์ธ์ ํ ์ฆ์ ๊ฒ์ |
| ๋๋ฉ์ธ ์๋ ๋ถ๋ฅ | ๋ ธ๋ยท๊ฐ์ธ์ ๋ณดยท๋ถ๋์ฐยท์๋น์ยท์ธ๊ธยท๊ธ์ต ๋ฑ 13๊ฐ ๋ฒ๋ฅ ๋๋ฉ์ธ |
| ์์ฐ์ด ์๊ฐ ์กฐ๊ฑด | "์ต๊ทผ 3๋ ", "2023๋ ์ดํ" ๋ฑ ์์ฐ์ด ์๊ฐ ํํ ์๋ ํ์ฑ |
| Reranker ํ์ดํ๋ผ์ธ | ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ฟผ๋ฆฌ ์ ํฉ๋(BM25 + Keyword Hybrid) ๊ธฐ์ค์ผ๋ก ์ฌ์ ๋ ฌ |
| ๋ณ๋ ฌ ๊ฒ์ | asyncio.gather ๊ธฐ๋ฐ ๋ฉํฐ API ๋์ ํธ์ถ๋ก ์๋ต ์๋ ์ต์ํ |
| Rate Limiting | IP๋น 60 req/min ์ ํ์ผ๋ก ๋จ์ฉ ๋ฐฉ์ง |
MCP Tools
legal_qa_tool โ ๋ฒ์ฉ ๋ฒ๋ฅ QA
๋ชจ๋ ๋ฒ๋ฅ ์ง๋ฌธ์ ๋จ์ผ ์ง์ ์ ์ ๋๋ค. ์ง๋ฌธ ํ๋๋ก ๋ฒ๋ นยทํ๋กยทํด์ยท์์ํ ๊ฒฐ์ ๋ก๋ฅผ ๋ณ๋ ฌ ํ์ํ๊ณ ์ข ํฉํฉ๋๋ค. ์ถ์ฒ๊ฐ ํ์ ๋ ๊ฒ์(ํ๋ก๋ง, ํด์๋ง ๋ฑ)์ ๊ฐ ์ ์ฉ ํด์ ๊ฒํ ํ ์ ์์ต๋๋ค.
Capabilities
- 13๊ฐ ๋๋ฉ์ธ ์๋ ๋ถ๋ฅ
- ์ง๋ฌธ ์๋(Intent) ๋ค์ค ๊ฐ์ง ๋ฐ ์ฐ์ ์์ ์ ๋ ฌ
- ๋ฒ๋ น โ ํ๋ก โ ํด์ โ ์์ํ ๋ณ๋ ฌ ํ์
- ์์ฐ์ด ์๊ฐ ์กฐ๊ฑด ํํฐ๋ง (
date_from/date_to์๋ ๋ณํ)
Input Schema
| ํ๋ผ๋ฏธํฐ | ํ์ | ํ์ | ์ค๋ช |
|---|---|---|---|
query | string | โ | ์ฌ์ฉ์์ ๋ฒ๋ฅ ์ง๋ฌธ |
max_results_per_type | integer | โ | ํ์ ๋น ์ต๋ ๊ฒฐ๊ณผ ์ (๊ธฐ๋ณธ๊ฐ: 3, ์ต๋: 10) |
Example Prompts
ํ๋ฆฌ๋์์ธ๋ฐ ๊ทผ๋ก์์ฑ ์ธ์ ๋ ํ๋ก ์๋์?
์ต๊ทผ 3๋
๋ถ๋นํด๊ณ ํ๋ก ์๋ ค์ค
๊ฐ์ธ์ ๋ณด ์ ์ถ๋๋๋ฐ ๋ฒ์ ์ผ๋ก ์ด๋ป๊ฒ ๋๋์?
2023๋ค12345 ํ๋ก ์ฐพ์์ค
law_article_tool โ ๋ฒ๋ น ์กฐ๋ฌธ ์ ๋ฐ ์กฐํ
๋ฒ๋ น๋ช
๊ณผ ์กฐ๋ฌธ๋ฒํธ๋ฅผ ์๊ณ ์์ ๋ ํน์ ์กฐํญ์ ์ง์ ์กฐํํฉ๋๋ค. legal_qa_tool์ด "ํ์"์ด๋ผ๋ฉด, ์ด ํด์ "์ ํํ ์กฐํ"์
๋๋ค.
Input Schema
| ํ๋ผ๋ฏธํฐ | ํ์ | ํ์ | ์ค๋ช |
|---|---|---|---|
law_name | string | โ | ๋ฒ๋ น๋ช (์: ๊ทผ๋ก๊ธฐ์ค๋ฒ, ๋ฏผ๋ฒ) |
article_number | string | โ | ์กฐ๋ฌธ ๋ฒํธ (์: 50, 2). ์๋ต ์ ๋ฒ๋ น ๊ฐ์ ๋ฐํ |
hang | string | โ | ํญ ๋ฒํธ (์: 1, 2) |
ho | string | โ | ํธ ๋ฒํธ (์: 1, 2) |
mok | string | โ | ๋ชฉ ๋ฒํธ (์: ๊ฐ, ๋) |
Example Prompts
๊ทผ๋ก๊ธฐ์ค๋ฒ ์ 50์กฐ ๋ด์ฉ ์๋ ค์ค
๋ฏผ๋ฒ ์ 750์กฐ 3ํญ์ด ๋ญ์ผ?
๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ ์ 17์กฐ
law_comparison_tool โ ๋ฒ๋ น ์ ๊ตฌยท์ฐํยท3๋จ ๋น๊ต
๋ฒ๋ น๋ช
์ ๊ธฐ์ค์ผ๋ก ์ ๊ตฌ๋ฒ ๋๋น, ์ฐํ, 3๋จ ๋น๊ต ๊ฒฐ๊ณผ๋ฅผ ์กฐํํฉ๋๋ค. ์กฐ๋ฌธ ์๋ฌธ ์กฐํ๋ law_article_tool, ์ผ๋ฐ ์ง๋ฌธ์ legal_qa_tool์ ์ฌ์ฉํ์ธ์.
Input Schema
| ํ๋ผ๋ฏธํฐ | ํ์ | ํ์ | ์ค๋ช |
|---|---|---|---|
law_name | string | โ | ๋ฒ๋ น๋ช (์: ํ๋ฒ, ๋ฏผ๋ฒ) |
compare_type | string | โ | ์ ๊ตฌ๋ฒ ยท ์ฐํ ยท 3๋จ๋น๊ต (๊ธฐ๋ณธ๊ฐ: ์ ๊ตฌ๋ฒ) |
Example Prompts
๊ทผ๋ก๊ธฐ์ค๋ฒ ์ ๊ตฌ๋ฒ ๋น๊ต ๋ณด์ฌ์ค
๋ฏผ๋ฒ ์ฐํ ์กฐํ
document_issue_tool โ ๊ณ์ฝ์ยท์ฝ๊ด ๋ถ์
๋ฌธ์๋ฅผ ๋ถ์ฌ๋ฃ์ผ๋ฉด ์กฐํญ ๋จ์๋ก ๋ฒ์ ์ด์๋ฅผ ์ถ์ถํ๊ณ , ๊ด๋ จ ๋ฒ๋ นยทํ๋ก๋ฅผ ์๋ ๊ฒ์ํฉ๋๋ค.
Input Schema
| ํ๋ผ๋ฏธํฐ | ํ์ | ํ์ | ์ค๋ช |
|---|---|---|---|
document_text | string | โ | ๊ณ์ฝ์ยท์ฝ๊ด ์ ๋ฌธ |
auto_search | boolean | โ | ์กฐํญ๋ณ ์๋ ๋ฒ๋ น ๊ฒ์ ์ฌ๋ถ (๊ธฐ๋ณธ๊ฐ: true) |
max_clauses | integer | โ | ๋ถ์ํ ์ต๋ ์กฐํญ ์ (๊ธฐ๋ณธ๊ฐ: 3) |
max_results_per_type | integer | โ | ํ์ ๋น ์ต๋ ๊ฒฐ๊ณผ ์ (๊ธฐ๋ณธ๊ฐ: 3) |
Supported Document Types
laborโ ๊ทผ๋ก๊ณ์ฝ์ / ์ฉ์ญ๊ณ์ฝ์leaseโ ์๋์ฐจ ๊ณ์ฝ์termsโ ์ด์ฉ์ฝ๊ด
Example Prompts
์ด ํ๋ฆฌ๋์ ๊ณ์ฝ์ ๋ฌธ์ ์๋์ง ๋ด์ค
์๋ ์๋์ฐจ ๊ณ์ฝ์์์ ๋ถ๋ฆฌํ ์กฐํญ ์ฐพ์์ค
health โ ์๋ฒ ์ํ ํ์ธ
MCP ์๋ฒ ๋์ ์ฌ๋ถ, API Key ์ค์ ์ํ, ํ๊ฒฝ ๋ณ์๋ฅผ ํ์ธํฉ๋๋ค.
์ ์ฉ ๊ฒ์ ํด (์ถ์ฒ ํ์ )
ํตํฉ ๊ฒ์(legal_qa_tool) ๋์ ํน์ ๋ฐ์ดํฐ๋ง ์ฐพ์ ๋ ์ฌ์ฉํฉ๋๋ค.
| ํด ์ด๋ฆ | ์ฉ๋ | ์ฃผ์ ์ ๋ ฅ |
|---|---|---|
precedent_lookup_tool | ํ๋ก๋ง | keyword ๋๋ case_number |
interpretation_tool | ๋ฒ๋ นํด์ยท์ ๊ถํด์ ๋ฑ | query, ์ ํ agency |
administrative_appeal_tool | ํ์ ์ฌํ ์ฌ๊ฒฐ๋ง | query, ์ ํ ๊ธฐ๊ฐ |
constitutional_decision_tool | ํ๋ฒ์ฌํ์ ๊ฒฐ์ ๋ง | query, ์ ํ ๊ธฐ๊ฐ |
committee_decision_tool | ๋ ๋ฆฝ์์ํ ๋ฑ ๊ฒฐ์ ๋ฌธ | committee_type, query |
special_administrative_appeal_tool | ํน๋ณํ์ ์ฌํ์ ์ฌ๊ฒฐ | tribunal_type, query |
local_ordinance_tool | ์์น๋ฒ๊ท(์กฐ๋ก ๋ฑ)๋ง | query ๋๋ local_government ์ค ํ๋ ์ด์ |
administrative_rule_tool | ํ์ ๊ท์น๋ง | query ๋๋ agency ์ค ํ๋ ์ด์ |
ํ์ฅ ์กฐํ ํด
๋ฒ๋ น ๋ถ๊ฐ ์ ๋ณด, ์ด๋ ฅ, ์์, ์ฐ๊ณ ๋ฑ ์ฌํ ์กฐํ๊ฐ ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
ministry_interpretation_tool โ ๋ถ์ฒ๋ณ ๋ฒ๋ นํด์
39๊ฐ ๋ถ์ฒ ์ ์ฉ ๋ฒ๋ นํด์(์ง์ํ์ ) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฒ์ํฉ๋๋ค. interpretation_tool์ด ํตํฉ ๊ฒ์์ด๋ผ๋ฉด, ์ด ํด์ ํน์ ๋ถ์ฒ ํด์๋ง ์ง์ ์กฐํํฉ๋๋ค.
| ํ๋ผ๋ฏธํฐ | ํ์ | ์ค๋ช |
|---|---|---|
query | string | ๊ฒ์ ํค์๋ |
agency | string | ๋ถ์ฒ๋ช
(์: ๊ณ ์ฉ๋
ธ๋๋ถ, ๊ตญ์ธ์ฒญ, ๋ณด๊ฑด๋ณต์ง๋ถ) |
page / per_page | integer | ํ์ด์ง ์ค์ |
์ง์ ๋ถ์ฒ: ๊ณ ์ฉ๋ ธ๋๋ถ, ๊ตญํ ๊ตํต๋ถ, ๊ธฐํ์ฌ์ ๋ถ, ๊ตญ์ธ์ฒญ, ๊ด์ธ์ฒญ, ๊ต์ก๋ถ, ๋ณด๊ฑด๋ณต์ง๋ถ, ๋ฒ๋ฌด๋ถ, ๋ฒ์ ์ฒ, ์ํ์์ฝํ์์ ์ฒ, ๊ฒฝ์ฐฐ์ฒญ, ์๋ฐฉ์ฒญ, ํด์๊ฒฝ์ฐฐ์ฒญ ์ธ 39๊ฐ ๊ธฐ๊ด
law_history_tool โ ๋ฒ๋ นยท์กฐ๋ฌธ ๋ณ๊ฒฝ์ด๋ ฅ
๋ฒ๋ น์ด ์ธ์ ์ด๋ป๊ฒ ๊ฐ์ ๋์๋์ง ์ถ์ ํฉ๋๋ค.
search_type ๊ฐ | ์ค๋ช |
|---|---|
law_change | ๋ฒ๋ น ๋ณ๊ฒฝ์ด๋ ฅ ๋ชฉ๋ก |
article_change | ์ผ์๋ณ ์กฐ๋ฌธ ๊ฐ์ ์ด๋ ฅ ๋ชฉ๋ก |
article_detail | ํน์ ์กฐ๋ฌธ์ ๊ฐ์ ์ด๋ ฅ ์์ธ (law_id ํ์) |
Example Prompts
๊ทผ๋ก๊ธฐ์ค๋ฒ ๊ฐ์ ์ด๋ ฅ ์๋ ค์ค
๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ ์ 17์กฐ ์กฐ๋ฌธ ๊ฐ์ ๋ด์ญ
law_info_tool โ ๋ฒ๋ น ๋ถ๊ฐ ์ ๋ณด
์๋ฌธ๋ฒ๋ น, ๊ตญ์ ์กฐ์ฝ, ๋ฒ๋ น ์ฒด๊ณ๋, ํ๋๋ณด๊ธฐ, ์ฝ์นญ ๋ฑ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
info_type ๊ฐ | ์ค๋ช |
|---|---|
english_law | ์๋ฌธ๋ฒ๋ น |
treaty | ๊ตญ์ ์กฐ์ฝ |
structure | ๋ฒ๋ น ์ฒด๊ณ๋ |
oneview | ํ๋๋ณด๊ธฐ(๋ฒ๋ น ์์ฝ) |
abbreviation | ๋ฒ๋ น๋ช ์ฝ์นญ |
deleted | ์ญ์ ๋ ๋ฒ๋ นยท์กฐ๋ฌธ ์ด๋ ฅ |
law_form_tool โ ๋ณํ์์ ๊ฒ์
๋ฒ๋ นยทํ์ ๊ท์นยท์์น๋ฒ๊ท์ ๋ณํ์์์ ์์๋ช ๋๋ ๊ด๋ จ ๋ฒ๋ น๋ช ์ผ๋ก ๊ฒ์ํฉ๋๋ค.
form_type ๊ฐ | ์ค๋ช |
|---|---|
law | ๋ฒ๋ น ๋ณํ์์ |
admin_rule | ํ์ ๊ท์น ๋ณํ์์ |
ordinance | ์์น๋ฒ๊ท ๋ณํ์์ |
law_link_tool โ ๋ฒ๋ น-์์น๋ฒ๊ท ์ฐ๊ณ ์กฐํ
ํน์ ๋ฒ๋ น์ ์ฐ๊ณ๋ ์กฐ๋ก ๋ชฉ๋ก, ์๊ด๋ถ์ฒ๋ณยท์ง์์ฒด๋ณ ์ฐ๊ณ ํํฉ์ ํ์ธํฉ๋๋ค.
link_type ๊ฐ | ์ค๋ช |
|---|---|
law_to_ordinance | ๋ฒ๋ น-์์น๋ฒ๊ท ์ฐ๊ณ ๋ชฉ๋ก |
ordinance_articles | ์ฐ๊ณ ๋ฒ๋ น๋ณ ์กฐ๋ก ์กฐ๋ฌธ ๋ชฉ๋ก |
by_department | ์ฐ๊ณ ๋ฒ๋ น ์๊ด๋ถ์ฒ๋ณ ๋ชฉ๋ก |
linked_ordinance | ์ฐ๊ณ ์กฐ๋ก ๋ชฉ๋ก |
law_linked_ordinance | ์ฐ๊ณ ๋ฒ๋ น๋ณ ์กฐ๋ก ๋ชฉ๋ก |
by_region | ์ฐ๊ณ ์กฐ๋ก ์ง์์ฒด๋ณ ๋ชฉ๋ก |
MCP Prompts
prompts/list ๋ฐ prompts/get ์๋ํฌ์ธํธ๋ฅผ ์ง์ํฉ๋๋ค.
| Prompt ์ด๋ฆ | ์ค๋ช |
|---|---|
legal_basis_answer | ๊ด๋ จ ๋ฒ๋ น ์กฐ๋ฌธ ๋ฒํธ์ ํ๋ก ์์ง๋ฅผ ํฌํจํ ๋ต๋ณ ์์ฒญ |
precedent_summary | ํ๋ก๋ฅผ ์ฌ์ค๊ด๊ณ / ์์ / ํ๋จ์์ง๋ก ์์ฝ |
contract_risk_check | ๋ฒ์ฉ ๊ณ์ฝยท์ฝ๊ด ์ํ ์กฐํญ ์ ๊ฒ. ๊ทผ๋กยท์ฉ์ญ ์ ์ฉ ๊ณ ๋ฐ๋ ๊ฒํ ๋ labor_contract_review ๋๋ document_issue_tool(๋ฌธ์๊ฐ labor๋ก ๋ถ๋ฅ๋ ๋)์ ์ฌ์ฉํ์ธ์. |
labor_contract_review | ๊ทผ๋กยท์ฉ์ญ ๊ณ์ฝ์ ์กฐํญ๋ณ ์กฐ๋ฌธยท์ํ๋ยท์์ ๋ฐฉํฅ ๊ฒํ (B ํ์ ) |
legal_qa | ํน์ ์ํฉ์ ๋ํ ๋ฒ๋ฅ ์ ๊ด์ ์ค๋ช |
MCP Resources
resources/list ๋ฐ resources/read ์๋ํฌ์ธํธ๋ฅผ ์ง์ํฉ๋๋ค.
URI Scheme
| ํ์ | ์ค๋ช | ์์ |
|---|---|---|
law://{๋ฒ๋ น๋ช
} | ๋ฒ๋ น ๋ณธ๋ฌธ ์กฐํ | law://๊ทผ๋ก๊ธฐ์ค๋ฒ |
case://{๊ฒ์์ด} | ํ๋ก ๊ฒ์ (์์ 5๊ฑด) | case://๋ถ๋นํด๊ณ |
interpret://{๊ฒ์์ด} | ๋ฒ๋ นํด์ ๊ฒ์ (์์ 5๊ฑด) | interpret://๊ทผ๋ก์์ฑ |
Featured Resources (๊ธฐ๋ณธ ์ ๊ณต)
๊ทผ๋ก๊ธฐ์ค๋ฒ, ๋ฏผ๋ฒ, ํ๋ฒ, ๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ, ์๋ฒ, ๊ตญ๊ฐ๊ณต๋ฌด์๋ฒ, ํ์ ์์ก๋ฒ ๋ฑ ์ฃผ์ ๋ฒ๋ น์ ์ฆ์ ์กฐํํ ์ ์์ต๋๋ค.
Installation
Method 1. Local (Python)
git clone https://github.com/SeoNaRu/lexguard-mcp
cd lexguard-mcp
pip install -r requirements.txt
cp .env.example .env # LAW_API_KEY ์ค์
python -m src.main
Method 2. Docker Compose (๊ถ์ฅ ยท ํ ์ค์ ๊ฐ๊น๊ฒ)
git clone https://github.com/SeoNaRu/lexguard-mcp
cd lexguard-mcp
cp .env.example .env # LAW_API_KEY ํธ์ง
docker compose up --build
๋ธ๋ผ์ฐ์ /ํด๋ผ์ด์ธํธ MCP URL: http://localhost:9099/mcp ยท ํฌ์ค: http://localhost:9099/health
Method 3. Docker (run๋ง)
docker build -t lexguard-mcp .
docker run -p 9099:9099 -e LAW_API_KEY=your_key lexguard-mcp
Method 4. Remote MCP (ํธ์คํ URL)
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"lexguard-mcp": {
"url": "https://lexguard-mcp.onrender.com/mcp"
}
}
}
Cursor (.cursor/mcp.json)
examples/cursor-mcp.remote.json ํ์ผ๊ณผ ๋์ผ:
{
"mcpServers": {
"lexguard-mcp": {
"url": "https://lexguard-mcp.onrender.com/mcp"
}
}
}
API Key ๋ฐ๊ธ
๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ Open API ํค๊ฐ ํ์ํฉ๋๋ค.
- https://open.law.go.kr ํ์๊ฐ์
- API ํ์ฉ ์ ์ฒญ
.env์LAW_API_KEY=๋ฐ๊ธ๋ฐ์ํค์ค์
DRF scheme ์ ํ
lexguard-mcp๋ ๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ DRF URL์ host/path๋ฅผ ๊ณ ์ ํ ์ฑ, scheme๋ง .env๋ก ์ ํํ ์ ์์ต๋๋ค.
LAW_GO_KR_DRF_SCHEME=https
- ํ์ฉ๊ฐ:
http,https - ๊ธฐ๋ณธ๊ฐ:
https - ์ ํ๋ ๊ธฐ์
๋ง/๋ฐฉํ๋ฒฝ ํ๊ฒฝ์์๋ ๊ณต์ ๊ฐ์ด๋ ์์์ ๋ง์ถ
http://www.law.go.kr/DRF/...๊ฒฝ๋ก๊ฐ ํ์ํ ์ ์์ต๋๋ค.
์ด ์ค์ ์ https ํ๋์ฝ๋ฉ์ด ์ผ๋ฐ ํ๊ฒฝ์์ ์ฐ์ฐํ ๊ฐ๋ ค์ง ์ ์์๋ ์ ๋ณต URL-generation ๋ฌธ์ ๋ฅผ ์ด์ํ๊ฒฝ๋ณ๋ก ์กฐ์ ํ๊ธฐ ์ํ ์ต์
์
๋๋ค.
Architecture
Client (Cursor / Claude)
โ JSON-RPC 2.0 over SSE
โผ
FastAPI (/mcp POST)
โ Rate Limiting (slowapi, 60 req/min/IP)
โผ
MCP Routes (tools/call ยท prompts/get ยท resources/read)
โ
โผ
Services (SmartSearchService ยท SituationGuidanceService)
โ asyncio.gather (๋ณ๋ ฌ ๋ฉํฐ API ํธ์ถ)
โผ
Repositories (Law ยท Precedent ยท Interpretation ยท Appeal ยท Constitutional โฆ)
โ httpx (๋๊ธฐ/๋น๋๊ธฐ HTTP ํด๋ผ์ด์ธํธ)
โ TTLCache (๊ฒ์ ๊ฒฐ๊ณผ 30๋ถ / ์คํจ 5๋ถ)
โ Exponential Backoff Retry
โผ
๊ตญ๊ฐ๋ฒ๋ น์ ๋ณด์ผํฐ DRF API (159๊ฐ ์ํธ๋ฆฌ / 88๊ฐ unique target)
๊ฒ์ ํ์ดํ๋ผ์ธ
์ง๋ฌธ ์
๋ ฅ
โ ํ๋ก ๋ฒํธ ํจํด ์กฐ๊ธฐ ๊ฐ์ง (2023๋ค12345 / 2021ํ๋ง123)
โ ๋๋ฉ์ธ ๋ถ๋ฅ + ์๋(Intent) ๋ถ์
โ ์๊ฐ ์กฐ๊ฑด ํ์ฑ
โ asyncio.gather ๋ณ๋ ฌ API ํธ์ถ
โ Reranker (BM25 + Keyword Hybrid ์ฌ์ ๋ ฌ)
โ ์๋ต ํฌ๋งคํ
์ฃผ์ ๊ธฐ์ ์คํ
| ๊ตฌ๋ถ | ์ฌ์ฉ ๊ธฐ์ |
|---|---|
| Web Framework | FastAPI + Uvicorn |
| MCP Transport | Streamable HTTP (SSE) |
| HTTP Client | httpx (sync + async) |
| Cache | cachetools TTLCache |
| Rate Limiting | slowapi |
| Search Ranking | BM25 + Keyword Hybrid Reranker |
| CI/CD | GitHub Actions (Python 3.11 / 3.12) |
| Testing | pytest + pytest-asyncio |
Development
# ํ
์คํธ ์คํ
pytest tests/ -v
# ๋ฆฐํธ
ruff check src/
# ๋ก์ปฌ ์๋ฒ (์๋ ์ฌ๋ก๋)
RELOAD=true python -m src.main
License
์ ๋ฌธ์ ์ ์ฅ์ ๋ฃจํธ์ LICENSE ํ์ผ์ ๋ฐ๋ฆ
๋๋ค.
- ์ฌ์ฉ: MIT์ ๋์ผํ๊ฒ ์ฐ๊ตฌยท๊ฐ์ธยท์์ ์ ์ด์ฉ, ์์ ยท๋ฐฐํฌยท์ฌํ๋งค๊น์ง ํ์ฉ๋ฉ๋๋ค.
- ํ๋งคยท์ ๋ฃ ์ ๊ณต ์: ์ด ์ํํธ์จ์ด๋ฅผ ๋จ๋ ์ผ๋ก ํ๋งคํ๊ฑฐ๋, ์ ํยท์๋น์ค์ ํฌํจํด ํ๋งคํ๋ ๊ฒฝ์ฐ ์ ์๊ถ ํ์์ ๋ณธ ๋ผ์ด์ ์ค ๋ฌธ๊ตฌ๋ฅผ ์ต์ข ์ด์ฉ์์๊ฒ ์ ๋ฌ๋๋ ์๋ฃ(๋ฌธ์, ํฌ๋ ๋งยท๋ผ์ด์ ์ค ํ๋ฉด, ํจํค์ง ๋ฉํ๋ฐ์ดํฐ ๋ฑ)์ ํฌํจํด์ผ ํฉ๋๋ค.
๋ณธ ์๋ด๋ ์์ฝ์ด๋ฉฐ ๋ฒ์ ํจ๋ ฅ์ LICENSE ์๋ฌธ์ด ์ฐ์ ํฉ๋๋ค.
Contribution
Issues & PRs are always welcome. ๋ฒ๋ฅ ๋๋ฉ์ธ ๋ฐ์ดํฐ, ๊ฒ์ ํ์ง ๊ฐ์ , ์๋ก์ด MCP ํด ์์ด๋์ด ๋ชจ๋ ํ์ํฉ๋๋ค.
LexGuard MCP โ ๋ฒ๋ฅ ์ ๋ณด์ ์ค๋ง๋ฆฌ๋ฅผ ์ฐพ์๋๋ฆฝ๋๋ค. ๋ฒ์ ์ด๋ ต์ง๋ง, ์ฒซ ์ค๋ง๋ฆฌ๋ ์ฌ์์ง ์ ์์ต๋๋ค.
