lawmadi-os
Verify Korean legal citations against law.go.kr: precedents, statutes, bar-exam answers.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"lawmadi-os": {
"url": "https://lawmadi-os-v60-938146962157.asia-northeast3.run.app/mcp"
}
}
}Remote endpoints
https://lawmadi-os-v60-938146962157.asia-northeast3.run.app/mcpstreamable-httphttps://lawmadi.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (19)
โชask(query, lang, idempotency_key, client_tag)
[KEY REQUIRED ยท 2 credits] ํ๊ตญ ๋ฒ๋ฅ ์ง๋ฌธ์ ๋ตํฉ๋๋ค. 60๋ช ์ ์ ๋ฌธ ๋ฆฌ๋ ์ค ํ ๋ช ์๊ฒ ์๋ ๋ฐฐ์ ํ๊ณ , ์ธ์ฉํ ์กฐ๋ฌธ์ law.go.kr์์ ์ค์๊ฐ ๊ฒ์ฆํ ๋ถ์์ ๋๋ ค์ค๋๋ค. ํ๊ตญ์ดยท์์ด ๋ชจ๋ ์ง์ํฉ๋๋ค. / Ask a Korean legal question. Routes to 1 of 60 specialist AI legal leaders and returns a statute-verified analysis (real-time law.go.kr check). Korean and English.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Legal question in Korean or English (max 2000 chars)."
},
"lang": {
"type": "string",
"enum": [
"ko",
"en",
""
],
"description": "Response language. Auto-detected if omitted."
},
"idempotency_key": {
"type": "string",
"description": "์ ํ. ์ฌ์๋ ์์ ํค(8~64์, ์์ซ์ยท_-.). ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด **๋ ๋ฒ ๊ณผ๊ธ๋์ง ์๊ณ ** ๋ณด๊ด๋ ๋ต๋ณ์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค(24์๊ฐ). ํ์์์ยท์ฐ๊ฒฐ ๋๊น์ผ๋ก ์๋ต์ ๋ชป ๋ฐ์์ ๋ ๊ฐ์ ํค๋ก ์ฌ์๋ํ์ธ์. / Optional retry-safe key (8-64 chars). Retrying with the same key is never charged twice and replays the stored answer for 24h."
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"query"
]
}โชask_expert(query, lang, idempotency_key, client_tag)
[KEY REQUIRED ยท 3 credits ยท PRO plan only] ์ ๋ฌธ๊ฐ ๋ชจ๋ ๋ฒ๋ฅ ๋ถ์ โ ์ ์ฒด ๊ฒ์ฆ ํ์ดํ๋ผ์ธ์ ๋๋ ค ๋ ๊น์ด ์ธ์ฉ๋ ๋ต๋ณ์ ๋ง๋ญ๋๋ค. `ask`๋ณด๋ค ๋๋ฆฝ๋๋ค. **Pro ์๊ธ์ ์ ์ฉ์ ๋๋ค**(Pro ํฌ๋ ๋ง ํฉ ๊ตฌ๋งค ์ ํ์ฑํ). ์์ก๋ง์ผ๋ก๋ ์ด๋ฆฌ์ง ์์ผ๋ฉฐ, Pro๊ฐ ์๋๋ฉด 2ํฌ๋ ๋ง์ ์ฐจ๊ฐํ์ง ์๊ณ ๊ฑฐ์ ํฉ๋๋ค โ ๊ทธ ๊ฒฝ์ฐ `ask`(1ํฌ๋ ๋ง)๋ฅผ ์ฐ์ธ์. / Expert mode legal analysis โ runs the full verification pipeline for a more detailed, deeply-cited answer. Slower than `ask`. **Pro plan only** (unlocked by buying the Pro credit pack); a positive balance alone is not enough. Non-Pro callers are refused without being charged โ use `ask` (1 credit) instead.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Legal question in Korean or English (max 2000 chars)."
},
"lang": {
"type": "string",
"enum": [
"ko",
"en",
""
],
"description": "Response language. Auto-detected if omitted."
},
"idempotency_key": {
"type": "string",
"description": "์ ํ. ์ฌ์๋ ์์ ํค(8~64์, ์์ซ์ยท_-.). ๊ฐ์ ํค๋ก ๋ค์ ๋ถ๋ฅด๋ฉด **๋ ๋ฒ ๊ณผ๊ธ๋์ง ์๊ณ ** ๋ณด๊ด๋ ๋ต๋ณ์ ๊ทธ๋๋ก ๋๋ ค์ค๋๋ค(24์๊ฐ). ์ ๋ฌธ๊ฐ ๋ต๋ณ์ 2ํฌ๋ ๋ง์ด๋ผ ํ์์์ ์ ์ด ํค๊ฐ ํนํ ์ค์ํฉ๋๋ค. / Optional retry-safe key (8-64 chars). Retrying with the same key is never charged twice and replays the stored answer for 24h."
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"query"
]
}๐ขsearch(q, limit, client_tag)
[KEY REQUIRED ยท no credits, 60/day] law.go.kr์์ **๋ฒ๋ น๋ช **์ผ๋ก ํ๊ตญ ๋ฒ๋ น์ ๊ฒ์ํฉ๋๋ค(์กฐ๋ฌธ ๋ณธ๋ฌธยทํ๋ก๋ ๊ฒ์ํ์ง ์์ต๋๋ค). ํ๋ก๋ `lookup_precedent`, ์กฐ๋ฌธ์ `lookup_statute`, ์๋ฌด ํ ์คํธ์ ์ธ์ฉ ๊ฒ์ฆ์ `verify_citations` ๋ฅผ ์ฐ์ญ์์ค. ์ ๋ ฅ ์: '์ฃผํ์๋์ฐจ๋ณดํธ๋ฒ', '๊ทผ๋ก๊ธฐ์ค๋ฒ'. / Search Korean statutes by **law name** on law.go.kr (it does not search article text or case law). Use `lookup_precedent` for cases, `lookup_statute` for articles, `verify_citations` to check citations in arbitrary text.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Search query (min 2 chars). Example: '๊ทผ๋ก๊ธฐ์ค๋ฒ'."
},
"limit": {
"type": "integer",
"description": "Max results (1-100, default 10)."
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"q"
]
}๐ขget_leaders
[KEY REQUIRED ยท no credits, 60/day] 60๋ช ์ด์์ ์ ๋ฌธ ๋ฆฌ๋ ๋ชฉ๋ก์ ์ด๋ฆยท์ ๋ฌธ ๋ถ์ผ์ ํจ๊ป ๋๋ ค์ค๋๋ค. / List all 60+ specialist legal leaders with their names and specialties.
Input Schema
{
"type": "object",
"properties": {}
}๐ขchat_leader(leader_id, query, confirm, history, client_tag)
[KEY REQUIRED ยท 1 credit] ํน์ ๋ฆฌ๋์ 1:1๋ก ๋ํํฉ๋๋ค. get_leaders์์ ์ป์ leader_id(์: 'L01', 'L32', 'CCO')๋ฅผ ๋๊ธฐ์ธ์. 1ํ๋น 1ํฌ๋ ๋ง์ด ์ฐจ๊ฐ๋ฉ๋๋ค(ask ์ ๊ฐ์ ์ ์์ฝ โ ๋ต๋ณ์ด ์คํจํ๋ฉด ํ๋ถ). / Chat 1:1 with a specific legal leader. Provide the leader_id (e.g. 'L01', 'L32', 'CCO') from get_leaders. Each call costs 1 credit, reserved up front like `ask` and refunded if no answer is delivered. Pass `history` when continuing a conversation โ otherwise the leader asks the same follow-up questions again.
Input Schema
{
"type": "object",
"properties": {
"leader_id": {
"type": "string",
"description": "Leader identifier (e.g. 'L01'). See get_leaders."
},
"query": {
"type": "string",
"description": "Question to ask the leader (max 2000 chars)."
},
"confirm": {
"type": "boolean",
"description": "Deprecated (2026-09-27): leader chat now costs 1 credit per call with no separate free allowance, so no confirmation step is needed. Accepted and ignored for backward compatibility."
},
"history": {
"type": "array",
"description": "์ด์ ๋ํ. ์ด๊ฒ์ ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ๋งค ํธ์ถ์ **์ฒซ ๋ํ**๋ก ๋ณด๊ณ ๊ฐ์ ๊ฒ์ ๋ ๋๋ฌป์ต๋๋ค โ ๋ฆฌ๋๊ฐ ๋ฌผ์ด๋ณธ ๋ค ๋ต์ ์ค ๋๋ ๊ทธ ๋ ํด์ ๋ฐ๋์ ํจ๊ป ๋๊ธฐ์ธ์. ์ต๊ทผ 20ํด๊น์ง ๋ฐ์๋ฉ๋๋ค. / Prior turns. Without this the server treats every call as a fresh conversation and asks the same questions again โ when you answer a leader's follow-up, send those turns here. Up to 20 recent turns are used.",
"items": {
"type": "object",
"properties": {
"role": {
"type": "string",
"enum": [
"user",
"assistant"
]
},
"content": {
"type": "string"
}
},
"required": [
"role",
"content"
]
}
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"leader_id",
"query"
]
}โชsuggest_questions(query)
[KEY REQUIRED ยท no credits, 20/day] ์ฃผ์ด์ง ์ง์์ ์ด์ด์ง ๋งํ ๋ฒ๋ฅ ํ์ ์ง๋ฌธ์ ์์ฑํฉ๋๋ค. / Generate relevant follow-up legal questions for a given query.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Current user question (max 500 chars)."
}
},
"required": [
"query"
]
}โชlookup_precedent(case_no, client_tag)
[NO KEY ยท preview depth, 1/day] ์ฌ๊ฑด๋ฒํธ๋ก ํ๊ตญ ํ๋ก๋ฅผ ์กฐํํฉ๋๋ค. ๋จผ์ ๊ฒ์ฆ ์์ฐ(17,626๊ฑด, ์ ๋ถ law.go.kr ๋ณธ๋ฌธ ๋์กฐ ์๋ฃ)์ ๋ณด๊ณ , ์์ผ๋ฉด law.go.kr **์ ๋ณธ ์์ธ**(๋๋ฒ์ ํ๋กยทํ์ฌ๊ฒฐ์ ๋ก ์ ์)์์ ์ค์ฌ๋ฅผ ํ์ธํ ๋ค ๋ณธ๋ฌธ์ ์ง์ ๋ฐ์์ต๋๋ค. ์๋ต์ source ํ๋๊ฐ ๊ทผ๊ฑฐ์ ๊ฐ๋๋ฅผ ๊ฐ๋ฆ ๋๋ค โ corpus ๋ ๋ณธ๋ฌธ๊น์ง ๋์กฐ๋ ๊ฒ์ด๊ณ , authoritative_index ๋ ์ ๋ณธ์์ ์ค์ฌ๋ฅผ ํ์ธํ๊ณ ๋ณธ๋ฌธ์ ๊ทธ ์๋ฆฌ์์ ๋ฐ์์จ ๊ฒ์ ๋๋ค. ๋ฒ์ยท์ ๊ณ ์ผยท์ฌ๊ฑด๋ช ยทํ์์ฌํญยทํ๊ฒฐ์์งยท์ฐธ์กฐ์กฐ๋ฌธ๊ณผ law.go.kr ์๋ฌธ ์ง๊ฒฐ ๋งํฌ๋ฅผ ๋๋ ค์ค๋๋ค. LLM์ ๋ถ๋ฅด์ง ์๋ ๊ฒฐ์ ๋ก ์ ์กฐํ๋ผ ํ ๋ฃจ์๋ค์ด์ ์ด ์์ต๋๋ค. ์ ๋ ฅ ์: '2020๋3050', '๋๋ฒ์ 2024. 4. 16. ์ ๊ณ 2020๋3050 ํ๊ฒฐ', '2016ํ๋ง90'. / Look up a Korean court case by docket number in Lawmadi's verified-asset corpus (17,626 precedents, each confirmed against law.go.kr). Returns court, decision date, case name, holding, summary, referenced articles and a direct law.go.kr full-text link. Deterministic โ no LLM, no hallucination. Callable **without an API key** at preview depth (metadata + law.go.kr link + first 200 chars of the holding); a key unlocks the full holding, summary and referenced articles. / ํค ์์ด๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊น์ด๋ก ์กฐํ๋ฉ๋๋ค โ ํ์์ฌํญ ์ ๋ฌธยทํ๊ฒฐ์์งยท์ฐธ์กฐ์กฐ๋ฌธ์ ํค ๋ฐ๊ธ ํ ์ ๊ณต๋ฉ๋๋ค.
Input Schema
{
"type": "object",
"properties": {
"case_no": {
"type": "string",
"description": "Docket number or full citation. Example: '2020๋3050'."
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"case_no"
]
}โชlookup_statute(reference, client_tag)
[NO KEY ยท preview depth, 1/day] ํ๊ตญ ๋ฒ๋ น ์กฐ๋ฌธ์ ์กฐํํฉ๋๋ค. ๋จผ์ ๊ฒ์ฆ ์์ฐ(31,548๊ฐ ์กฐ๋ฌธ, ๋ณธ๋ฌธ ํฌํจ)์ ๋ณด๊ณ , ์์ผ๋ฉด law.go.kr **์ ๋ณธ ์์ธ**(ํํ ๋ฒ๋ น ์ ์)์ผ๋ก ๊ทธ ์กฐ๋ฌธ์ด ์ค์ฌํ๋์ง ํ์ ํฉ๋๋ค. ์ ๋ณธ ์์ธ ๊ฒฝ๋ก๋ ๋ณธ๋ฌธ์ ๊ฐ๊ณ ์์ง ์์ผ๋ฏ๋ก ์ค์ฌ ์ฌ๋ถ์ law.go.kr ๋งํฌ๋ง ๋๋ ค์ค๋๋ค โ ๋ณธ๋ฌธ์ ์ง์ด๋ด์ง ์์ต๋๋ค. ๊ทธ ๋ฒ๋ น์ ๊ฒฐ๋ฒ ์์ด ์๋ ๊ฒฝ์ฐ์๋ **์๋ค๋ ๊ฒ๋** ๋งํฉ๋๋ค(absent=true). LLM ๋ฏธํธ์ถยท๊ฒฐ์ ๋ก . ์ ๋ ฅ ์: '๋ฏผ๋ฒ ์ 750์กฐ', 'ํ๋ฒ ์ 307์กฐ ์ 1ํญ'. / Look up a Korean statute article in Lawmadi's verified-asset corpus (31,548 articles). Returns the article title, body text and law.go.kr link. Deterministic โ no LLM. Callable **without an API key** at preview depth (title + law.go.kr link + first 200 chars of the body); a key unlocks the full article body. / ํค ์์ด๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊น์ด๋ก ์กฐํ๋ฉ๋๋ค โ ์กฐ๋ฌธ ๋ณธ๋ฌธ ์ ๋ฌธ์ ํค ๋ฐ๊ธ ํ ์ ๊ณต๋ฉ๋๋ค.
Input Schema
{
"type": "object",
"properties": {
"reference": {
"type": "string",
"description": "Statute reference. Example: '๋ฏผ๋ฒ ์ 750์กฐ'."
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"reference"
]
}๐กverify_citations(text, client_tag)
[KEY REQUIRED ยท 1 credit] ์๋ฌด ํ ์คํธ์ ๋ด๊ธด ํ๊ตญ ๋ฒ๋ฅ ์ธ์ฉ์ ๊ฒ์ฆํฉ๋๋ค โ ๋ค๋ฅธ LLM์ด ์ด ๋ต๋ณ๋ ๋ฉ๋๋ค. ์กฐ๋ฌธ๊ณผ ์ฌ๊ฑด๋ฒํธ๋ฅผ ์ ๋ถ ์ถ์ถํด ๊ฒ์ฆ ์์ฐ๊ณผ ๋์กฐํ๊ณ , ์ธ์ฉ๋ณ ์ํ(verified_in_corpus ๋ณธ๋ฌธ๊น์ง ๋์กฐ / verified_in_index ์ ๋ณธ ์์ธ์์ ์ค์ฌ ํ์ธ / absent_in_index ๊ทธ ๋ฒ๋ น์ ๊ฒฐ๋ฒ ์์ด ์๋๋ฐ ์ด ์กฐ๋ฌธ์ด ์์ / not_in_corpus ๋ฎ์ง ๋ชปํจ)๋ฅผ ์ถ์ฒ ๋งํฌ์ ํจ๊ป ๋๋ ค์ค๋๋ค. 1ํ์ ํฌ๋ ๋ง 1๊ฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. LLM ๋ฏธํธ์ถยท๊ฒฐ์ ๋ก . ์ฃผ์: not_in_corpus๋ '์ด ์ฝํผ์ค์ ์๋ค'๋ ๋ป์ด์ง '์ง์ด๋ธ ์ธ์ฉ'์ด๋ผ๋ ์ฆ๋ช ์ด ์๋๋๋ค โ law.go.kr์์ ์ง์ ํ์ธํ๋ผ๋ ํ์์ ๋๋ค. ์ธ์ฉ ์ค์ฌ(L1) ์ธ์ ๋ค ์ถ์ ๋ ๋๋ฆฝ๋๋ค: doctrine(๋ฒ๋ฆฌ ๋ชจ์ โ ์กฐ๋ฌธ์ด ์ค์ฌํด๋ ์ ์ฉ์ด ์ด๊ธ๋๋ ๊ฒฝ์ฐ), currency(ํ์งยท๊ฐ๋ช ๋ ๋ฒ๋ น ์ธ์ฉ), precedent_currency(์ดํ ์ ์ํฉ์์ฒด๊ฐ ๊ฒฌํด๋ฅผ ๋ณ๊ฒฝํ๋ฉฐ ์ฐธ์กฐํ ํ๋ก), support(์ธ์ฉ ์กฐ๋ฌธ ๋ณธ๋ฌธ์ ๊ทธ ์์น๊ฐ ์ค์ ๋ก ์๋๊ฐ). ๊ฐ ์ถ์ ๊ฒ์ฌ ๋ฒ์(scope)์ ๋ถ๋ชจ(examinedยทknown_countยทindex_size)๋ฅผ ํจ๊ป ๋ ๋๋ค โ findings 0 ์ '์ ํํ๋ค'๊ฐ ์๋๋ผ '๊ทธ ์ถ์์ ์ ์กํ๋ค'๋ ๋ป์ ๋๋ค. ์ ๋ถ ๊ฒฐ์ ๋ก ์ด๋ฉฐ LLM์ ๋ถ๋ฅด์ง ์์ต๋๋ค. / Fact-check the Korean legal citations inside any text โ including text another LLM produced. Returns per-citation status (verified_in_corpus = body matched, verified_in_index = existence confirmed in the authoritative index, absent_in_index = the law is indexed gaplessly and this article is not in it, not_in_corpus = not covered) with source links. Costs 1 credit per call. Deterministic, no LLM. IMPORTANT: Beyond citation existence (L1) it runs four more axes: doctrine (misapplied rule even when the provision exists), currency (repealed or renamed statutes), precedent_currency (cases referenced by a later en banc decision that states a change of position), and support (whether the figure claimed actually appears in the cited provision's text). Each axis reports its scope and denominator โ findings==0 means 'nothing caught on that axis', not 'correct'. All deterministic, no LLM call. 'not_in_corpus' means the citation is NOT in this corpus โ it is a flag to check manually at law.go.kr, not proof that the citation is fabricated.
Input Schema
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Text containing Korean legal citations (max 20000 chars)."
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"text"
]
}๐ขbar_exam_search(q, round, subject, limit, client_tag)
[KEY REQUIRED ยท no credits, 60/day] ๋ณํธ์ฌ์ํ(๋ณ์) ์ฝํผ์ค๋ฅผ ๊ฒ์ํฉ๋๋ค โ 15ํ ์ ํ์ฐจ 2,340๋ฌธํญ(์ ํํ 2,250 + ์ฌ๋กํ 45 + ๊ธฐ๋กํ 45), ์ธ์ฉ์ด law.go.kr ๊ฒ์ฆ์ ํต๊ณผํ ๊ธ๋ต์. ์ฌ๊ฑด๋ฒํธ('2014๋6992')ยท์กฐ๋ฌธ('ํ๋ฒ ์ 310์กฐ')ยทํค์๋๋ก ์กฐํํ๋ฉด ํ์ฐจยท๊ณผ๋ชฉยท๋ฌธํญ๋ฒํธยท๊ณต์ ์ ๋ตยท์ง๋ฌธยท์ธ์ฉ ์กฐ๋ฌธ/ํ๋ก์ ๋งํฌ๋ฅผ ๋๋ ค์ค๋๋ค. / Search the Korean bar exam (๋ณํธ์ฌ์ํ) corpus โ all 15 rounds, 2,340 questions (2,250 MCQ + 45 case-type + 45 record-type) with gold-standard answers whose citations passed law.go.kr verification.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Docket, statute article or keyword."
},
"round": {
"type": "integer",
"description": "Filter by exam round 1-15 (optional)."
},
"subject": {
"type": "string",
"description": "Filter by subject: ๊ณต๋ฒ / ๋ฏผ์ฌ๋ฒ / ํ์ฌ๋ฒ (optional)."
},
"limit": {
"type": "integer",
"description": "Max results (1-20, default 5)."
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"q"
]
}๐ขget_exam_answer(round, subject, format, no)
[KEY REQUIRED ยท 3/day free, then 1 credit each] ๋ณํธ์ฌ์ํ ๋ฌธํญ ํ๋๋ฅผ ๊ธ๋ต์ ์ ๋ฌธ๊ณผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. ์ ํํ: round+subject+no โ ๊ณต์ ์ง๋ฌธยท์ ํ์ง 5๊ฐยท๋ฒ๋ฌด๋ถ ์ ๋ตยทํด์คยท์ ํ์ง๋ณ ๋ ธํธยท์ธ์ฉ ์กฐ๋ฌธ/ํ๋ก. ์ฌ๋กํยท๊ธฐ๋กํ: round+subject+format โ ์๋ฉด ์ข ๋ฅยท๋ชฉ์ฐจยท๋ต์ ๋ณธ๋ฌธ. ๋ชจ๋ ์ธ์ฉ์ ๊ฒ์ ์ law.go.kr ๊ฒ์ฆ์ ํต๊ณผํ์ต๋๋ค. ํธ์ถ๋น 1๋ฌธํญ โ ์ด ์ฝํผ์ค๋ ๋๋ ์ถ์ถ ๋์์ด ์๋๋๋ค. / Fetch ONE bar-exam question with its full gold answer. MCQ (์ ํํ): pass round + subject + no. Essay (์ฌ๋กํ) and record-type (๊ธฐ๋กํ): pass round + subject + format. Every citation passed law.go.kr verification before publishing. One item per call โ this corpus is proprietary and not available for bulk export.
Input Schema
{
"type": "object",
"properties": {
"round": {
"type": "integer",
"description": "Exam round 1-15 (์ Nํ)."
},
"subject": {
"type": "string",
"description": "๊ณต๋ฒ ยท ๋ฏผ์ฌ๋ฒ ยท ํ์ฌ๋ฒ (์ ํ๊ณผ๋ชฉ๋ช
๋ ๊ฐ๋ฅ)."
},
"format": {
"type": "string",
"enum": [
"์ ํํ",
"์ฌ๋กํ",
"๊ธฐ๋กํ"
],
"description": "Default ์ ํํ when `no` is given."
},
"no": {
"type": "integer",
"description": "Question number (์ ํํ only)."
}
},
"required": [
"round",
"subject"
]
}๐กget_daily_content(stream, date)
[KEY REQUIRED ยท no credits, 60/day] ๋ฐํ๋ ๋ฐ์ผ๋ฆฌ ์ฝํ ์ธ ํ ํธ์ ์ ์ฒด ๋ ์ฝ๋ ํํ๋ก ๊ฐ์ ธ์ต๋๋ค: ์ค๋์ ๋ฒ๋ฅ ์์(daily โ ๊ฒ์ฆ ์กฐ๋ฌธ ๋ชฉ๋ก๊ณผ FAQ ํฌํจ), ์ ๋ต ์นผ๋ผ(strategy)ยท๊ธฐ์ ์นผ๋ผ(tech, ๋ผ์ด๋ธ ํ์ธ๋ ์ฐธ๊ณ ์๋ฃ ํฌํจ), ๋ฆฌ๊ฑธํ ํฌ ๋ด์ค(news, ์ถ์ฒ ๋๋ฉ์ธ ํฌํจ), ์ํ ํ๋ก ๊ฐ์๋ ธํธ(bar), ์ค๋์ ํ๋ก(precedent โ ๊ฒ์ฆ ํ๋ก ๋ ์ฝ๋ ์ฒจ๋ถ). ๋ ์ง๋ฅผ ์ฃผ๊ฑฐ๋, ์๋ตํ๋ฉด ํด๋น ์คํธ๋ฆผ์ ์ต์ ํธ. / Fetch one published daily post in full-record form. Pass a date, or omit it for the latest post in that stream.
Input Schema
{
"type": "object",
"properties": {
"stream": {
"type": "string",
"enum": [
"daily",
"strategy",
"tech",
"news",
"bar",
"precedent"
],
"description": "Content stream."
},
"date": {
"type": "string",
"description": "YYYY-MM-DD. Omit for the latest post."
}
},
"required": [
"stream"
]
}๐ขlist_document_types
[KEY REQUIRED ยท no credits, 60/day] ๋ฒ๋ง๋๊ฐ ์ด์์ ์ธ ์ ์๋ ๋ฒ๋ฅ ๋ฌธ์ ์ข ๋ฅ๋ฅผ ํ๊ตญ์ดยท์์ด ๋ผ๋ฒจ๊ณผ ํจ๊ป ๋์ดํฉ๋๋ค(๊ณ ์์ฅยท์์ฅยท๋ด์ฉ์ฆ๋ช ยท๋ต๋ณ์ยทํ์์ยทํฉ์์ยท๋ฒ๋ฅ ์๊ฒฌ์ ๋ฑ). / List the legal document types Lawmadi can draft, with Korean and English labels.
Input Schema
{
"type": "object",
"properties": {}
}๐ขgenerate_document(doc_type, context, lang, extra_instructions, client_tag)
[KEY REQUIRED ยท 2 credits] ์ฌ์ฉ์์ ์ฌ์ค๊ด๊ณ๋ก ํ๊ตญ ๋ฒ๋ฅ ๋ฌธ์ ์ด์์ ์์ฑํฉ๋๋ค(๊ณ ์์ฅยท์์ฅยท๋ด์ฉ์ฆ๋ช ยท๋ต๋ณ์ยทํฉ์์ยท๋ฒ๋ฅ ์๊ฒฌ์ ๋ฑ). ์ด์์ ๋ชจ๋ ์กฐ๋ฌธยทํ๋ก ์ธ์ฉ์ `ask`์ ๋์ผํ fail-closed law.go.kr ๊ฒ์ฆ์ ๊ฑฐ์นฉ๋๋ค. ์ ํจํ doc_type ํค๋ list_document_types๋ก ๋จผ์ ํ์ธํ์ธ์. / Draft a Korean legal document from the user's facts. Every statute/precedent citation in the draft goes through the same fail-closed law.go.kr verification as `ask`. Use list_document_types first for valid doc_type keys.
Input Schema
{
"type": "object",
"properties": {
"doc_type": {
"type": "string",
"description": "Document type key from list_document_types (e.g. 'complaint')."
},
"context": {
"type": "string",
"description": "The user's facts/situation the document must be built from."
},
"lang": {
"type": "string",
"enum": [
"ko",
"en",
""
],
"description": "Default ko. 'en' returns the Korean original (the version to file with Korean courts/police) followed by an English translation for reference."
},
"extra_instructions": {
"type": "string",
"description": "Optional extra drafting instructions."
},
"client_tag": {
"type": "string",
"description": "์ ํ. client_tag: ํธ์ถ์ ์๋ณ์ฉ, **์๋ต์ ์ํฅ ์์**(8~64์, ์์ซ์ยท_-.). ์๋ฒ ๋ก๊ทธ์๋ง ๋จ์ ํธ์ถ์ ๊ณจ๋ผ ์ธ๋ ๋ฐ ์๋๋ค. ํ์์ด ์ด๊ธ๋๋ฉด ๋ฌด์ํฉ๋๋ค โ ๊ฑฐ์ ํ์ง ์์ต๋๋ค. ์ง์ ๋ณธ๋ฌธ์ ์์ง ๋ง์ธ์: ๋ณธ๋ฌธ์ ๋ฃ์ผ๋ฉด ์ง๋ฌธ์ ์ผ๋ถ๊ฐ ๋์ด ๋ถ๋ฅ์ ๊ฒ์ฆ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋๋ค. / Optional caller label (8-64 chars). Logged only; never affects the response. Invalid values are ignored, not rejected. Do not put it in the query text โ there it becomes part of the question."
}
},
"required": [
"doc_type",
"context"
]
}๐ขsearch_legal_forms(query, knd, limit)
[KEY REQUIRED ยท no credits, 60/day] law.go.kr์ด ์ ๊ณตํ๋ ๋ฒ์ ์์ยท๋ณํ๋ฅผ ๊ฒ์ํฉ๋๋ค โ ์: ํน์ ๋ฒ๋ฅ ์ ๋ฐ๋ฅธ ์ ์ฒญ์ ์์. / Search official Korean statutory forms and appendix tables (๋ณํยท์์) served by law.go.kr.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Form name or statute name. ๋ฒ๋ น๋ช
์ผ๋ก ์ฐพ์ ๋๋ **์ํ๊ท์นยท๊ท์น**์ด ์ ์ค๋ฅ ์ด ๋์ต๋๋ค(์์์ ๋๊ฐ ๊ฑฐ๊ธฐ ์์ต๋๋ค). ์๋ฒ๊ฐ ๋ณํ์์๋ช
โ ํด๋น๋ฒ๋ น ์์ผ๋ก ๋ ๋ฒ์๋ฅผ ๋ชจ๋ ์๋ํฉ๋๋ค. / Form or statute name; enforcement rules (์ํ๊ท์น) usually hold the forms."
},
"knd": {
"type": "string",
"enum": [
"",
"1",
"2",
"3",
"4",
"5"
],
"description": "Kind of appendix, **not** a search scope: 1 ๋ณํ ยท 2 ์์ ยท 3 ๋ณ์ง ยท 4 ๋ณ๋ ยท 5 ๋ถ๋ก (blank = all). ๊ฒ์๋ฒ์๋ ์๋ฒ๊ฐ ์ ํฉ๋๋ค."
},
"limit": {
"type": "integer",
"description": "Max results (1-100, default 20)."
}
},
"required": [
"query"
]
}๐ขfind_village_lawyer(region, limit)
[KEY REQUIRED ยท no credits, 60/day] ๋ฒ๋ฌด๋ถ '๋ง์๋ณํธ์ฌ'๋ฅผ ์ง์ญ์ผ๋ก ์ฐพ์ต๋๋ค โ ๋ฌด๋ฃ ๋ฒ๋ฅ ์๋ด ์ฐ๋ฝ์ฒ์ ๋๋ค. ์ยท๋, ์ยท๊ตฐยท๊ตฌ, ์ยท๋ฉด ์ด๋ฆ์ผ๋ก ๊ฒ์ํ์ธ์(์: '๊ฐ์ ๊ฐ๋ฆ', '๊ณ ์ฑ๊ตฐ', '์๋'). **์ด ์ฌ์ ์ ๋ณํธ์ฌ๊ฐ ์๋ ์ยท๋ฉด์ ๋์์ผ๋ก ํ๋ฏ๋ก ์์ธยท๋ถ์ฐ ๋ฑ ํน๋ณ์ยท๊ด์ญ์์ ๊ตฌ(ๅ)๋ ์๋ก๋์ด ์์ง ์์ต๋๋ค** โ ๊ฒฐ๊ณผ๊ฐ 0๊ฑด์ด๋ฉด ์๋ต์ coverage ํญ๋ชฉ์์ ์๋ก๋ ์ยท๋๋ฅผ ํ์ธํ์ธ์. ๊ณต๊ณต๋ฐ์ดํฐ ๊ธฐ๋ฐ, LLM ๋ฏธํธ์ถ. / Find the Ministry of Justice ๋ง์๋ณํธ์ฌ (village lawyer) assigned to a Korean locality โ a free legal-consultation contact point. The programme covers rural ์ยท๋ฉด without a resident lawyer, so districts of Seoul and other metropolitan cities are not listed; an empty result returns the covered provinces. Public data, no LLM.
Input Schema
{
"type": "object",
"properties": {
"region": {
"type": "string",
"description": "Region name. Example: '๊ฐ๋ฆ์'."
},
"limit": {
"type": "integer",
"description": "Max results (1-50, default 10)."
}
},
"required": [
"region"
]
}๐ขget_pricing(lang)
[NO KEY NEEDED] ์ด์ฉ ๋ฐฉ๋ฒ๊ณผ ๋น์ฉ์ ๋๋ ค์ค๋๋ค โ ๊ฐ์ ์ ์ฐจ, API ํค ๋ฐ๊ธ์ฒ, ๋ฌด๋ฃ ์ ๊ณต๋, ํฌ๋ ๋ง ํฉ ๊ฐ๊ฒฉ(KRW/USD), ํฌ๋ ๋ง 1๊ฐ๋ก ๋ฌด์์ ํ ์ ์๋์ง, ๊ฒฐ์ ๋งํฌ. **์ธ์ฆ ์์ด ํธ์ถํ ์ ์์ต๋๋ค** โ ์ฒ์ ๋ฐฉ๋ฌธํ AI ์์ด์ ํธ๋ ์ด ๋๊ตฌ๋ก ์ ๊ทผ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์. / How to get access and what it costs. Returns the sign-up flow, where to issue an API key, the free allowance, credit-pack prices (KRW/USD), what one credit buys, and direct checkout links. **Callable without authentication** โ an AI agent arriving for the first time should call this to learn how to obtain access.
Input Schema
{
"type": "object",
"properties": {
"lang": {
"type": "string",
"enum": [
"ko",
"en",
""
],
"description": "Default en."
}
}
}๐ขget_account
[KEY REQUIRED] ์ฌ์ฉ ์ค์ธ API ํค์ ๊ณ์ ์ํ โ ๋จ์ ํฌ๋ ๋ง, ํ๋, ์ถฉ์ ๋งํฌ. ๊ณผ๊ธ ๋๊ตฌ๋ฅผ ๊ธธ๊ฒ ์ฐ๊ธฐ ์ ์ ํธ์ถํด, ์์ ๋์ค ์์ก์ด ๋จ์ด์ง๋ ๋์ ๋ฏธ๋ฆฌ ์ถฉ์ ํ์ธ์. / Your account status for the API key in use โ remaining credits, plan, and a top-up link. Call this before a long run of metered queries so you can purchase in advance instead of hitting an exhausted balance mid-task.
Input Schema
{
"type": "object",
"properties": {}
}๐กlatest_content(stream, limit)
[KEY REQUIRED ยท no credits, 60/day] ๋ฒ๋ง๋์ ์ต์ ๋ฐ์ผ๋ฆฌ ๋ฒ๋ฅ ์ฝํ ์ธ โ ์ค๋์ ๋ฒ๋ฅ ์์(daily), ์ ๋ต ์นผ๋ผ(strategy), ๊ธฐ์ ์นผ๋ผ(tech), ๋ฆฌ๊ฑธํ ํฌ ๋ด์ค(news), ์ํ ํ๋ก ๊ฐ์๋ ธํธ(bar), ์ค๋์ ํ๋ก(precedent). ๋ชจ๋ ํธ์ ๋ฐํ ๊ฒ์ดํธ๋ฅผ ํต๊ณผํ์ต๋๋ค(์กฐ๋ฌธยทํ๋ก ์ธ์ฉ law.go.kr ๊ฒ์ฆ, ์ถ์ฒ ๋ผ์ด๋ธ ํ์ธ). / Get Lawmadi's latest daily legal content. Every post passed its publishing gate (statute/precedent citations verified against law.go.kr, sources live-checked).
Input Schema
{
"type": "object",
"properties": {
"stream": {
"type": "string",
"enum": [
"",
"daily",
"strategy",
"tech",
"news",
"bar",
"precedent"
],
"description": "Single stream, or blank for the latest of each."
},
"limit": {
"type": "integer",
"description": "Posts per stream (1-20, default 5)."
}
}
}Community
Evidence