MCP server for Korean case law, statutes and sentencing data
Four specialized legal research tools with strong domain-specific descriptions in Korean. All tools have detailed, LLM-optimized descriptions (150-400 chars) explaining WHAT, WHEN, and HOW to use them. Input schemas are present with types and descriptions for all parameters. However, output schemas are not documented in the visible code, only input schemas are defined. Tool names are action-oriented (search, lookup, analysis, dive). Parameters are well-constrained with enums and format guidance. Error handling guidance is embedded in descriptions but not formalized in response structures. Security is appropriate (read-only tools, no credentials exposed).
단건 판결·결정 본문 추출(외부 sub-agent 위임) — precedent_search preview가 부족할 때 case id로 호출하면 question에 답하는 500자 내외 생성 요약을 반환. summary는 직접인용이 아니며 text_truncated=true이면 not_in_text도 전체 원문 부재를 확정하지 못합니다. Args: case_id=precedent_search 결과 id. question=공개 판례에서 추출할 쟁점·항목만(사용자 이름·주소·연락처·계정·사적 첨부사실 등 개인정보 금지). url만 인용 링크로 쓰고 생성 요약인 summary 는 원문 직접인용으로 쓰지 마세요.
판례 검색 — query 또는 case_number 중 하나는 필수. 사건번호로 정확 조회하거나 사실관계 키워드로 유사 판례 검색. 매치는 짧은 preview와 그 출처를 알리는 preview_kind를 반환합니다. 본문 확인이 필요하면 가장 관련된 id로 precedent_dive를 이어 호출하세요. 민·형사·행정·가사 분쟁 질의의 기본 도구이며, 주장·전망의 근거를 유사 판례의 실제 결과로 뒷받침할 때 씁니다. Args: query=사실관계·죄명·법조 키워드(명사 어간 여러 개; 2자 죄명도 지원; 사건번호 제외). case_number=특정 사건번호로 바로 찾을 때(예 '2010다89012'; '대법원 … 선고 2010다89012 판결'이면 사건번호 부분만). court_level='1심'|'2심'|'대법원'|'헌재'. court_name=법원명·지역 부분매칭(예 '부산','특허법원'). year_from/year_to=사건년도 범위. url만 인용 링크로 씁니다. preview_kind 이름에 '원문'이 있는 것만 직접인용하고 요약 계열은 바꿔 쓰세요.
양형 — 죄명 하나로 판단에 필요한 것을 한 응답에: 법정형, 형법 §56 처단형 계산방법, 대법원 양형기준의 범죄유형별 권고 형량범위, 양형인자, 집행유예 참작사유, 근거 조문 원문, 1심 실선고 분포와 비교판례. 형량·구형·양형 의견을 볼 때 결론 전에 죄명만으로 부르고, 유형·양형인자가 정해지면 계산 인자를 더해 다시 부르세요 — 두 번째 응답은 그 사건의 처단형·권고형·선고 가능 범위·집행유예만 싣고 기준 본문을 반복하지 않습니다. 조항·분기가 여럿이면 되묻지 않고 후보 정량을 전부 싣습니다. 권고범위는 공식 기준의 '범위'이지 예측이 아니고 실선고 분포는 표본의 관측입니다. 죄명은 판결문 표기로 한 번에 하나씩(형법 '특수상해', 특별법 '도로교통법위반(음주운전)'). 법률명만 주면('스토킹처벌법위반') 그 법률의 죄명 후보를 돌려줍니다. 경합 사안은 죄명별로 각각 호출하고 죄명별 분포를 합산·평균해 경합범 분포로 만들지 마세요. Args: charge=죄명 하나(숫자·ID 불가). offense_date=행위 일자(예 '2013.7.30') 지정 시 행위시 조문·정량. statute_choice·branch_key·reference_choice·sg_category_id=후보가 여럿일 때 좁히는 값. is_attempted·is_accessory·is_solicitor=미수·방조·교사. statutory_modifications=형법 §56 가중·감경 list(예 [{"kind": "누범_가중"}]). guideline_type=응답 목록의 따옴표 안 유형 명칭 그대로. guideline_factors=특별양형인자 dict — key 는 special_act_aggravators·special_act_mitigators·special_actor_aggravators·special_actor_mitigators 넷뿐. probation_factors=집행유예 참작사유 dict — key 는 major_positive·major_negative·general_positive·general_negative 넷뿐. 값은 응답의 해당 그룹 아래 문장 그대로 넣고, 이 여덟 밖의 key 는 계산 없이 되돌아옵니다. sentence_months·fine_amount=검증할 선고형. act_count=같은 죄명의 별개 행위 수(2 이상이면 경합범 가중). reference_year=비교 판례 기준 연도. 판례·조문 url만 인용 링크로 쓰세요.
Output schemas not documented. Tool descriptions explain what is returned (preview, url, text_kind, etc.) but no formal response schema is visible in code. LLMs cannot plan downstream operations without knowing return structure.
sentencing_analysis has 16 parameters with complex interdependencies (statute_choice, branch_key, reference_choice, sg_category_id all used to 'narrow' candidates). Descriptions state '후보가 여럿일 때' but do not explain when each is required or how they interact. Undocumented parameter relationships cause silent misuse.
statute_lookup accepts both integer and string for statute_id (union type) with a warning about prefix removal. The description is dense and assumes domain knowledge ('접두사를 떼면 같은 번호의 다른 법령이 조회됩니다'). LLMs may not understand when to use integer vs string or what prefix removal means.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | 2026-07-28+ | v2 |
법령·행정규칙 조회 — 법령의 요건·효과·기간·절차가 답의 뼈대가 되는 국면의 기본 도구이며, 죄명·법조 식별 후 조문 본문 확인에도 씁니다. 조문은 개정되므로 현행 본문은 이 도구만 압니다. 법률·대통령령·부령·규칙과 행정규칙(고시·훈령·예규)을 한 번에 검색합니다 — 종류를 가리는 인자는 없고 관련도 순으로 함께 나오며 각 결과에 종류가 붙습니다. 자주 쓰는 법령은 quick-access id로 바로 호출(statute_id+articles): 헌법 468·민법 584·상법 583·민사소송법 581·형법 578·형사소송법 574·행정기본법 4953·행정절차법 437·행정소송법 386·헌법재판소법 3629. query 또는 statute_id가 필수. 그 외는 two-step — ① query=법령명으로 후보 id를 받고 ② statute_id+articles로 본문 호출(조문 번호는 법령마다 달라 법령을 먼저 확정). Args: query=법령명·행정규칙명 또는 본문 키워드(id 모를 때). statute_id=검색이 준 식별자를 글자 그대로 — 법령은 정수(예 584; 위 목록 밖은 추측 금지 — 574는 형사소송법), 행정규칙은 'admrul-18060'. **접두사를 떼면 같은 번호의 다른 법령이 조회됩니다.** articles=조문 번호 list[str] 최대 8개('347'/'제347조'=본조+가지, '347의2'=가지만, 범위 ['3','4','5']; 미지정 시 outline; 8개 초과는 앞 8개만 조회하고 나머지를 message로 알림 — 나눠 재호출). limit=검색 모드 최대 결과 수(기본 10·최대 50). offense_date=행위 일자(예 '2013.7.30') 지정 시 행위시점 조문, 미지정 시 현행. url만 인용 링크로 쓰고, `text_kind: 공식 … 원문`인 조문·행정규칙 본문만 직접인용하세요.
precedent_dive delegates to external sub-agent (build_dive_subagent) but tool description does not explain failure modes, latency, or when the sub-agent is unavailable. Response includes text_truncated flag but no guidance on what to do if true.
All tools are read-only but only precedent_search and statute_lookup explicitly document this in descriptions. sentencing_analysis and precedent_dive do not state they are read-only, forcing LLMs to infer safety from context.