Skip to main content
Glama

airealty-lawmcp — 법제처 국가법령정보 OPEN API 위의 법령 MCP 서버

대한민국 법령·조문·별표·연혁·판례·해석례를 Claude 등 MCP 클라이언트에서 바로 찾아보는 서버입니다. 업스트림은 법제처 국가법령정보 공동활용 OPEN API(open.law.go.kr)이며, 응답은 모두 읽기 전용입니다.

연결하기 — 두 가지 방법

단계별 설치·이용 안내(Claude Code·Claude 앱·Cursor, 자기 키 설치, 한도·오류 표): USER_GUIDE.md

1. 호스팅 서버(토큰 필요) — 설치 없이 한 줄

claude mcp add --transport http airealty-law https://law.airealty.co.kr/mcp --header "Authorization: Bearer <발급받은 토큰>"

토큰은 운영자(conoc612@gmail.com)에게 요청하면 사용자별로 발급됩니다. 토큰마다 초당 2회·버스트 10회·하루 2,000회(tools/call 기준)로 제한되며, 넘으면 429 와 Retry-After 를 돌려줍니다. Claude 앱(claude.ai·Desktop)에서는 설정 → 커넥터 → 커스텀 커넥터 추가 에 같은 URL 을 넣고 요청 헤더 Authorization: Bearer <토큰> 을 지정합니다(요청 헤더 입력은 조직 Owner 에게만 보이는 베타 기능입니다).

2. 로컬 설치(자기 법제처 키) — 한도를 혼자 씁니다

  1. open.law.go.kr 가입 → OPEN API 신청(승인 1~2일) → API인증키관리 에서 인증값(OC) 복사.

  2. git clone https://github.com/conoc612-a11y/airealty-lawmcp && cd airealty-lawmcp && npm install
    claude mcp add airealty-law -e openlaw_API_KEY=<내 인증값> -- node /절대경로/airealty-lawmcp/src/index.js

    인증값은 환경변수 openlaw_API_KEY 또는 저장소 상위 폴더의 keys.env(openlaw_API_KEY=…)에서 읽고, 어디에도 출력하지 않습니다.

Related MCP server: Korean Law MCP Server

도구

코어 12(항상 노출): statute_find article_get statute_outline annex_get statute_history source_search source_get citation_audit precedent_trace contract_risk_scan research_run toolbox 카탈로그 12(toolbox 로 호출): term_lookup abbreviation_list change_feed jo_code article_refs link_build precedent_similar ordinance_link admin_rule_diff semantic_article_search english_statute article_with_cases

research_run 시나리오: rent_dispute housing_subscription redevelopment_procedure brokerage_duty zoning_check tax_on_transfer contract_check version_at statute_map amendment_watch. source_search 원천 20종 중 특별행정심판 2종은 acr_adjudication·civil_service_appeal. term_lookup 모드: define from_everyday to_everyday articles. article_get 은 format(기본 structured: 항·호 트리 + head, text: 평문만)으로 같은 본문을 두 번 싣지 않습니다.

모든 도구는 같은 봉투 {ok,total,returned,page?,items,warnings,notes,next,meta} / 오류 {ok:false,error:{code,message,retryable,hint?,candidates?}} 를 돌려주고, annotations.readOnlyHint=true 입니다.

직접 띄우기

npm install
npm test                            # 빌드 검사(tools/list ≤13KB · 코어 12 · 카탈로그 12) + 단위 테스트(모의 업스트림, 네트워크 없음)
node src/index.js                   # stdio MCP
node src/http-server.js             # Streamable HTTP 127.0.0.1:3457/mcp (POST 전용, GET/DELETE 405, /healthz)
LAWMCP_LIVE_URL=http://127.0.0.1:3457/mcp npm run test:live   # 실업스트림 B1~B11(서버 떠 있어야 함)
node tools/bench.js --out bench.json                           # cold start 5회 + B1~B11 5회

공개 호스팅(HTTP) 설정

  • 토큰은 node tools/token.js add <이름> 으로 발급(값은 그때 한 번만 출력) · revoke <이름> · list. 파일 ~/.config/airealty-lawmcp/tokens.txt 에는 이름 sha256(토큰) 만 남고, 서버가 5초마다 파일 변경을 따라가므로 재시작이 필요 없습니다.

  • 인증 강제: LAWMCP_HOST 가 루프백이 아니거나 LAWMCP_REQUIRE_AUTH=1 이거나 토큰 설정이 있는데 유효 토큰이 0개면 종료 코드 2. 토큰이 없는 서버라도 cf-connecting-ip·x-forwarded-for 가 붙은(프록시를 거친) 요청은 401 입니다. JSON-RPC 배치(배열)는 400 으로 거부합니다(한도 우회 방지).

  • 토큰 출처: LAWMCP_TOKENS_FILE(파일, 해시 또는 평문 줄) 또는 LAWMCP_TOKENS(이름:토큰,… 평문). 비교는 sha256 + timingSafeEqual, 로그에는 이름만 남깁니다.

  • 토큰별 한도(tools/call 만 셈): LAWMCP_TOKEN_RATE_PER_SEC(2) · LAWMCP_TOKEN_BURST(10) · LAWMCP_TOKEN_DAILY(2000, UTC 자정 초기화 — 일일 상한의 Retry-After 는 최대 86400초).

  • /healthz 는 토큰 없이 ok·version 만, 토큰이 있으면 캐시·업스트림·한도·예열 상태까지.

  • 브라우저 Origin 은 로컬(localhost·127.0.0.1)만 허용하며 LAWMCP_ALLOWED_ORIGINS(쉼표)로 더할 수 있습니다. 그 밖의 Origin 은 403.

  • HTTPS 는 앞단(Cloudflare Tunnel 등)에서 끝냅니다. 서버 자체는 평문 HTTP 입니다.

  • 컨테이너: docker build -t airealty-lawmcp . && docker run -e openlaw_API_KEY=… -e LAWMCP_TOKENS=me:… -p 3457:3457 airealty-lawmcp

환경변수

LAWMCP_PORT(3457) · LAWMCP_HOST(127.0.0.1) · LAWMCP_CONCURRENCY(4, 1~8) · LAWMCP_RATE_PER_SEC(5) · LAWMCP_BURST(8) — 업스트림 전체 한도 · LAWMCP_BUCKET_FILE(파일 공유 버킷) · LAWMCP_CACHE_DIR(디스크 캐시: 사전·조문 번호 색인 24h·체계도 요약 7d·판 목록 6h — 키 없음) · LAWMCP_HIERARCHY_BUDGET_MS(1200) · LAWMCP_PREWARM(기본 1: 서버가 뜬 뒤 src/prewarm.js 목록 38개 법령의 색인·체계도를 백그라운드로 채움, 0 이면 끔) · LAWMCP_DEBUG(stderr 오류 로그).

예열·만료 갱신은 drf.call(..., {background:true}) 레인으로만 나갑니다: 전경 요청이 진행 중이거나 버킷 여유가 2토큰 미만이면 기다리고, 전경 요청이 같은 키에 합류하면 바로 나갑니다. /healthz 의 prewarm·auth 에 상태가 보입니다.

구조

src/drf.js(호출·버킷·재시도·차단기·백그라운드 레인) · cache.js · diskcache.js · article_index.js(조문 번호 색인) · hierarchy_cache.js(체계도 요약) · prewarm.js · dictionary.js(법령명 사전) · resolver.js(이름 해석) · versions.js(판 선택) · articles.js(조문 구조화) · citations.js+casenos.js(인용 추출) · sources.js(원천 20종) · risk/(문서 위험 규칙·엔진) · tools/*(도구) · registry.js · stdio.js · http-server.js · auth.js(토큰·토큰별 한도).

개인정보·출처

서버는 요청 본문(검색어·문서 텍스트)을 법제처 API 호출에만 쓰고 저장하지 않습니다. 디스크 캐시에는 법령 파생물(사전·조문 번호 색인·체계도 요약·판 목록)만 남고 사용자 입력·인증값은 들어가지 않습니다. 로그에는 토큰 이름과 횟수만 남습니다. 법령정보의 저작권은 법제처에 있으며 출처는 응답의 link(www.law.go.kr 공개 주소)로 표기합니다. 상업적 이용 가능 여부는 법제처 이용안내를 따릅니다.

라이선스

MIT — LICENSE.

Available Tools

12 tools
annex_getB
Read-only
Inspect

법령의 별표·서식 목록과 본문을 가져온다. 법률 본문에 별표가 없으면 같은 계열 시행령·시행규칙의 별표·서식을 보충하고, 전체 건수와 페이지, 파일 링크를 돌려준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
mstNo법령일련번호(특정 판)
asOfNo기준일(YYYY-MM-DD, 기본 오늘)
kindNoall
nameNo법령명 또는 약칭
pageNo
partNo이어받기 번호
sizeNo
lawIdNo법령ID
annexNoNo예: 별표 1 / 1 / 서식 3
maxBytesNo응답 예산(바이트)
withTextNo
includeLowerNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=true, so the description carries the burden and does add real value: it discloses the automatic fallback to same-family 시행령/시행규칙 annexes and the shape of the response (total count, page, file links). It still omits pagination/truncation behavior (maxBytes, part).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the core action front-loaded and no wasted filler. Efficient, though it packs the fallback and return-shape information tightly without structuring them.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter tool with no output schema, the description covers the fallback logic and return fields but leaves the key identifier-selection and pagination parameters unexplained. An agent could still call it, but not confidently choose among name/lawId/mst.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

12 parameters with only 58% schema description coverage, and the description does not disambiguate the identifiers (mst vs lawId vs name), asOf, part, or maxBytes. It hints at page and file links but adds no real meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: fetches the list and body of a statute's annexes/forms (별표·서식), which is clearly distinct from article_get or statute_outline. It also states the scope of the fallback behavior. However, it never names a sibling tool to sharpen the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the resource type; there is no explicit 'use this when...' statement or comparison against article_get/statute_outline. The fallback condition (no annex in the statute body) is a useful trigger but is about internal behavior, not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

article_getB
Read-only
Inspect

법령 조문 원문을 전문으로 가져온다(여러 조 가능, articles 를 비우면 조문 번호·제목 목차만). 기준일(asOf)에 시행 중인 판을 고르고 항·호·목 구조와 개정 표시를 돌려준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
mstNo법령일련번호(특정 판)
asOfNo기준일(YYYY-MM-DD, 기본 오늘)
nameNo법령명 또는 약칭
partNo이어받기 번호
lawIdNo법령ID
formatNo트리+head | 평문structured
includeNo
articlesNo조문 표기 배열(예: ["제15조"]); 비우면 목차
maxBytesNo응답 예산(바이트)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes this is a safe read, so the bar is lower. The description adds real value beyond that: it picks the edition in force at asOf and returns 항·호·목 hierarchy plus amendment markers. It is silent, though, on pagination/truncation behavior implied by the 'part' (이어받기) and maxBytes budget parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact clauses, front-loaded with the core action, and no filler. The parenthetical about empty articles earns its place by defining a distinct output mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no output schema, the description covers purpose, version selection, and return structure, which is the essential part. It omits the paging/byte-budget story (part, maxBytes) needed to know how truncated results are continued, leaving a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so the schema already documents every parameter (including 'articles 비우면 목차', asOf, format, maxBytes). The description largely restates those semantics rather than adding new syntax or interaction rules, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb+resource are concrete: fetch the full text of statute provisions (법령 조문 원문을 전문으로 가져온다), with a stated variant when articles is empty (TOC only). This clearly separates it from a pure-outline sibling. However, it never names or routes against the actual siblings (statute_outline, statute_find), so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: passing articles yields full text, empty articles yields just the number/title TOC, and asOf selects the version. There is no explicit 'use this instead of statute_outline when…' or any exclusion against annex_get/statute_history. Adequate but leaves sibling disambiguation to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

citation_auditB
Read-only
Inspect

글 속 법령 조문·판례 인용을 뽑아 실제로 존재하는지(기준일 판), 제목·내용이 맞는지 판정한다. 법령명은 사전 일치로만 잡고, 업스트림 장애는 UNCHECKED(환각 판정 아님).

ParametersJSON Schema
NameRequiredDescriptionDefault
asOfNo기준일(YYYY-MM-DD, 기본 오늘)
textNo
citationsNo
thresholdNo
checkContentNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read, and the description adds genuinely non-obvious behavior: law names are matched only via dictionary (so a name miss is not proof of hallucination) and upstream failures yield UNCHECKED rather than a hallucination verdict. That distinction materially changes how an agent interprets results. It still omits rate limits and whether asOf affects cached data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler, and the core capability leads before the caveats. The parenthetical clarifications (UNCHECKED, dictionary match) are compact and earn their place, though the phrasing is compressed enough that the two model modes (text vs citations) never get separated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does outline the verdict space (exists / title-content mismatch / UNCHECKED), which is the most important return semantics. However, with five parameters at 20% schema coverage and no output schema, the absence of any guidance on text-vs-citations inputs, threshold, and checkContent leaves real gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% – only asOf is documented – so the description carries the burden and largely drops it. It hints at the law-name matching rule relevant to citations.law and repeats the base-date concept already in the schema, but says nothing about text vs citations, what threshold (0.5–1.0) controls, or what checkContent toggles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource pair: extract statutory/case citations from text and judge whether they actually exist and whether title/content match. That is far more specific than the bare name citation_audit, though it never names a sibling to contrast with (statute_find, precedent_trace) so the agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'audit' plus the existence/match judging makes the verify-my-citations case clear, but there is no explicit when-to-use or when-not, and no routing to the sibling lookup tools (statute_find, article_get) that an agent would otherwise consider for similar needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

contract_risk_scanA
Read-only
Inspect

계약서·약관 전문(200자 이상)을 조항별로 훑어 기간·갱신·증액·대항력·해지·위약금·수선·권리금·면책·중개·신고의 검토 신호를 근거 조문(법령·조문·시행일)과 수치·충돌·등급으로 돌려준다(위법 판정 아님).

ParametersJSON Schema
NameRequiredDescriptionDefault
asOfNo기준일(YYYY-MM-DD, 기본 오늘)
textYes
docTypeNo
maxFindingsNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this is a safe read, so the bar is lower, and the description adds real context beyond it: it discloses the shape of the return (근거 조문 with 법령·조문·시행일, plus 수치·충돌·등급) and an explicit non-goal (not a legal determination). It does not cover latency, limits, or failure behavior, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single front-loaded sentence that leads with the action and input, then the output, then the disclaimer, with no filler. The eleven-item signal enumeration makes it dense, but each item is load-bearing content rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry return-value meaning and it does describe the finding categories and evidence fields, which is adequate. It is thin on the remaining gaps an agent needs: what the 등급 scale means, how docType changes behavior, what maxFindings does, and how the 100k-character input limit interacts with the 200-character floor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only asOf is documented), so the description must compensate and does so only partially: it supplies the 200-character minimum for text, which the schema lacks, and its signal list loosely maps to docType. The docType enum values, maxFindings, and the overall text limit are never explained, leaving half the parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (훑어/scan clause-by-clause) and a specific resource (계약서·약관 전문), and enumerates the exact signal categories it returns, so its function is unambiguous. It does not explicitly name or contrast with the sibling legal-research tools (statute_find, article_get, citation_audit), but the task is distinct enough that an agent can separate it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the input constraint (full text of 200+ characters) and the scope exclusion '위법 판정 아님' (this is not a legal-violation verdict), which usefully tells the agent when the output should not be relied on. However, no alternative tool is named and no positive condition for choosing this over statute_find/precedent_trace is stated, so guidance stays implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

precedent_traceA
Read-only
Inspect

판례 한 건의 인용 관계를 본다: 참조조문·참조판례(나가는 참조), 그 사건번호를 본문에 담은 후속 판례(들어오는 인용), 관련 헌재결정, 그리고 '후속 인용 없음/인용됨/변경 가능성' 신호와 근거.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
depthNo
caseNoNo
includeNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this as a safe read, so the bar is lower. The description usefully discloses the return categories and that a status signal ('후속 인용 없음/인용됨/변경 가능성') comes with its basis, but says nothing about depth semantics, result limits, or how the const depth=1 constrains output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with a colon-enumerated breakdown of outputs; dense but every clause carries content. Slightly heavy as one sentence, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does well to describe the return structure, which is its main strength. However, for a 4-parameter tool at 0% schema description coverage, the ambiguity between 'id' and 'caseNo' and the unexplained 'depth' leave an agent without enough to construct a correct call in all cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the load. It effectively documents the three values of the 'include' parameter (outgoing/incoming/constitutional map directly to the Korean categories), but the distinction between 'id' and 'caseNo' and the role of 'depth' remain unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('판례 한 건의 인용 관계를 본다' — view the citation relationships of a single precedent) and then enumerates exactly what the trace covers: outgoing references, incoming citations, Constitutional Court decisions, and the citation-status signal. This is distinct from siblings like citation_audit or source_search, so an agent can route correctly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the enumerated outputs — you would call this to inspect a single precedent's citation network — but there is no explicit when-to-use statement, no when-not-to-use, and no named alternative among the many siblings. Adequate but leaves the agent to infer the trigger.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

research_runC
Read-only
Inspect

상담 질문 유형별 다단 조사(임대차·청약·정비사업·중개·용도지역·세금·계약서·행위시법·법체계·개정)를 묶어 단계 요약과 다음 호출을 준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
lawNo
dateNo
textNo
queryYes
budgetNoquick
articleNo
scenarioYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read operation. The description adds genuine behavioral context by stating the return shape (step summary plus the next call), which is a useful orchestration hint. It does not disclose what quick vs. standard budget changes, pagination, or limits on the 100k-char text input, so it stops short of rich disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the action first and the return behavior second, with no filler. The long parenthetical enumeration is dense but earns its place by listing the supported domains.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an orchestration tool with seven parameters, 0% schema coverage, and no output schema, the description is too thin. It explains neither the required scenario/query contract nor the optional law, date, text, article, and budget inputs, so an agent cannot reliably construct a call from the description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across seven parameters, so the description must compensate and largely does not. It paraphrases the scenario domains in Korean, loosely aligning with the scenario enum, but never mentions query, law, date, text, article, or the budget enum values quick/standard, leaving six parameters semantically opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete function: bundling multi-step research per consultation-question type and returning a step summary plus the next call. The parenthetical enumerates the ten research domains (lease, subscription, redevelopment, brokerage, zoning, tax, contract, applicable law, statute map, amendment), which makes the scope tangible. However, it never distinguishes this orchestration tool from the many granular siblings (statute_find, article_get, source_search), so an agent cannot tell why it should pick this one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of alternatives, despite eleven sibling tools that overlap heavily. The phrase '상담 질문 유형별' weakly implies it is for consultation-style multi-step questions, but nothing states the condition that selects this tool over calling the primitives directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

source_getB
Read-only
Inspect

판례·결정례·해석례·심판례·행정규칙·자치법규·조약의 본문 1건을 섹션별 전문으로 가져온다(mode=digest 는 원문 문장 발췌, keywords 는 법령명·용어 빈도). 참조조문·참조판례를 구조화해 돌려준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
modeNofull
partNo이어받기 번호
caseNoNo판례 사건번호(정확 일치)
sourceYes
maxBytesNo응답 예산(바이트)
sectionsNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint already establishes the safe-read profile, and the description adds real context beyond it: the three mode behaviors (full text vs. sentence excerpt vs. law-name/term frequency) and the fact that cross-referenced provisions and precedents are returned structured. It does not, however, disclose pagination behavior (the part continuation parameter) or output size handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the verb and resource front-loaded, and no filler. Dense but well-organized, though the parenthetical mode explanation is slightly buried mid-sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter read tool with no output schema, the description covers modes and the return of structured cross-references, which is the most important behavioral detail. It leaves notable gaps: how to obtain the id, what the 20 source values mean, and how the part/maxBytes budget interact across pages.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 43%, so the schema carries part of the load (part, caseNo, maxBytes are documented). The description usefully supplies the semantics of the mode enum values, which the schema leaves bare, but it says nothing about the 20-value source enum, the id field, or the sections array.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (가져온다/fetches) plus a precise resource (본문 1건, the full text of a single document) and enumerates the document categories it serves. It implicitly distinguishes itself from source_search by fetching one item rather than searching, but it never names a sibling, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no mention of alternatives such as source_search (to find the id) or article_get (for a single article). The mode glosses hint at selection between modes, but nothing routes the agent between this tool and its ten siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statute_findA
Read-only
Inspect

법령을 이름·키워드로 찾거나(자동완성·여러 이름 일괄 포함) 공포일 기간으로 거른다. 법령ID·MST·법종·시행일·시행예정 판과 다음 호출 예를 돌려준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNosearch
pageNo
sizeNo
kindsNo법종 필터(예: 법률)
matchNoall
namesNo여러 법령명 일괄 해석
queryNo법령명·키워드(예: 주택법)
scopeNocurrent
promulgatedToNo
promulgatedFromNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations supply only readOnlyHint=true, so the description carries the behavioral load and does disclose the returned fields (법령ID, MST, 법종, 시행일, 시행예정 판) plus the fact that it returns next-call examples. It omits pagination behavior despite page/size params and says nothing about rate limits, so it is good but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly-packed sentences that front-load the core action (find/filter) and then the return payload. No filler, though the parenthetical enumeration is dense and slightly hard to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with 0 required params, 30% schema coverage, no output schema, and only a readOnlyHint annotation, the description is thinner than the complexity warrants. It handles return values and the main search axes but leaves the mode/match/scope enums and pagination semantics for the agent to discover from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 10 parameters and only 30% schema description coverage, the description should compensate but only covers part of it: it maps loosely to query/names (name & batch) and promulgatedFrom/To (date range). It leaves mode, match, scope, kinds, page, and size entirely unelaborated, so several enum-driven behaviors remain opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (법령을 찾는다 = find statutes) and enumerates the modalities: name/keyword, autocomplete, batch names, and promulgation-date range. The purpose is unambiguous, but it never differentiates itself from likely-overlapping siblings like source_search or statute_outline, so an agent must still guess which search tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the listed search modes (autocomplete, batch names, date range) rather than stated as when-to-use conditions. There is no when-not guidance and no named alternative among the ten sibling tools, leaving routing decisions to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statute_historyB
Read-only
Inspect

법령의 시간 축: 판 목록(versions), 한 조문의 개정 이력(article_changes), 신구 대조(old_new), 두 날짜의 조문 문장 비교(compare_dates), 폐지·제명변경 추적(lineage). 기준일 판 선택 규칙으로 시행예정 판을 구분한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
mstNo법령일련번호(특정 판)
asOfNo기준일(YYYY-MM-DD, 기본 오늘)
fromNo
modeNoversions
nameNo법령명 또는 약칭
pageNo
sizeNo
dateANo
dateBNo
lawIdNo법령ID
articleNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes a safe read, and the description adds real behavioral information beyond it: the as-of date acts as a version-selection rule and can surface not-yet-in-force versions. It does not disclose pagination behavior, result size limits, or what happens when a law is resolved by name vs id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the conceptual framing front-loaded and the mode breakdown following immediately; no filler. Slightly compact given the breadth of modes, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, multi-mode tool with no output schema and only a readOnlyHint annotation, the description covers the mode axis and the as-of rule but omits the role of the paired date parameters, pagination, and identifier resolution. Adequate to call, incomplete to call confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, so the description is expected to compensate. It does a good job on the highest-value parameter by defining each mode enum value and implying asOf semantics, but eight parameters (from, to, dateA, dateB, article, page, size, mst/lawId relationships) remain undescribed, leaving ambiguity between similar date params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description frames the tool as the temporal axis of legislation and then names all five operating modes (versions, article_changes, old_new, compare_dates, lineage), so an agent knows exactly what resource it operates on. It does not name or distinguish itself from siblings such as statute_find or article_get, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mode enumeration implicitly tells the agent which mode to pick for a given task, and the closing sentence hints at the as-of reference-date rule. However, there is no explicit 'use this instead of X' routing against the sibling tools, and no statement of prerequisites, so usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statute_outlineA
Read-only
Inspect

법령의 구조를 요약한다: 목차(toc), 상하위 법령·행정규칙·자치법규 수(hierarchy), 법률→시행령→시행규칙 위임 트리(delegation), 관련 법령(related). 본문은 담지 않고 article_get 호출을 안내한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
mstNo법령일련번호(특정 판)
asOfNo기준일(YYYY-MM-DD, 기본 오늘)
nameNo법령명 또는 약칭
pageNo
sizeNo
viewNohierarchy
lawIdNo법령ID
articleNodelegation 에서 특정 조문만
delegationKindNodelegated

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, so the safety profile is covered; the description adds a valuable negative scope claim (no body text is returned) that the annotations do not provide. It says nothing about pagination behavior despite page/size parameters, which limits it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then the four view modes in compact parenthetical form, ending with the sibling hand-off. Dense but every clause carries information; the parenthetical enum glosses make it slightly heavy for a single sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, no output schema and only 56% schema description coverage, the description is expected to carry more. It adequately explains the view modes and the body-text exclusion, but leaves the identifier parameters (mst, lawId, article) and paging semantics unexplained, which an agent needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 56%, so the description should compensate more than it does. It does gloss the four view values meaningfully (목차, 상하위 법령·행정규칙·자치법규 수, 위임 트리, 관련 법령), which maps to the view enum, but mst, lawId, article, delegationKind, page and size receive no explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (법령 구조 요약) and enumerates the four output shapes (toc, hierarchy, delegation, related). It also draws an explicit boundary against the sibling article_get by saying body text is not included, so an agent can distinguish it without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to article_get when the body text is needed, which is real when-to-use guidance against an alternative. It does not say when to prefer this over statute_find or which of the four views to pick in a given situation, so it stops short of full coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

toolboxB
Read-only
Inspect

보조 도구 카탈로그(법령용어·약칭·개정피드·조문코드·조문참조·링크·유사판례·자치법규연계·행정규칙신구·의미검색·영문법령·조문+판례)를 찾고(list/describe) 실행한다(call).

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNocall 인자
nameNodescribe/call 대상 도구 이름
queryNolist 용 키워드
actionYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely new behavioral context by disclosing the three-modal structure and the set of sub-tools reachable via call. It does not explain how args are forwarded to the selected sub-tool, nor what discoverability step (describe) is needed before calling. Note a mild tension: readOnlyHint=true while call executes arbitrary sub-tools with free-form args, though the enumerated catalog tools appear read-only so this is not a hard contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that leads with the verb and resource, with the twelve sub-tool names packed into one parenthetical that earns its space by telling the agent what the catalog contains. Dense but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a dispatcher with a nested free-form args object and no output schema, an agent needs to know the call flow (describe to get a sub-tool's schema, then call with args) and what each action returns. The description names the modes and catalog but omits this workflow, so it is adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so the schema already documents args, name, and query; only action lacks a schema description. The description compensates partly by binding list/describe/call to finding vs. executing, which clarifies action semantics. It adds no detail on the free-form nested args object, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific role: a catalog dispatcher that finds (list/describe) and executes (call) auxiliary tools, and enumerates the twelve categories (legal terms, abbreviations, amendment feeds, article codes, precedents, semantic search, etc.). This makes the meta-tool nature clear. It does not, however, explicitly distinguish itself from primary siblings like statute_find or source_search, leaving the discovery-vs-direct-call relationship implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical mapping of intents to actions (list/describe for finding, call for executing) gives implied usage and the schema confirms the required action enum. But there is no explicit guidance on when to route through toolbox vs. calling a sibling tool directly, and no when-not guidance. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.1.0
    • First observedannex_get
    • First observedarticle_get
    • First observedcitation_audit
    • First observedcontract_risk_scan
    • First observedprecedent_trace
    • First observedresearch_run
    • First observedsource_get
    • First observedsource_search
    • First observedstatute_find
    • First observedstatute_history
    • First observedstatute_outline
    • First observedtoolbox

TDQS

A3.6/5.0

Scored across 12 tools

Disambiguation4/5

The tools mostly target distinct resources and actions: source search vs. source retrieval, statute finding vs. article retrieval vs. outline/history/annex, citation auditing vs. precedent tracing, and contract risk scanning. The main mild overlap is that research_run and toolbox act as orchestration/catalog layers that conceptually touch specialized tools, but their descriptions still make roles clear.

Naming Consistency4/5

All names use lowercase snake_case, and most follow a readable noun_verb pattern such as source_search, statute_find, article_get, annex_get, source_get, citation_audit, and precedent_trace. Exceptions such as statute_history, statute_outline, contract_risk_scan, and toolbox are still clear, so this is a minor deviation rather than inconsistency.

Tool Count5/5

Twelve tools is well within the ideal 3-15 range for a legal research server and each tool covers a distinct facet: search, retrieval, statute structure, amendment history, annexes, citation audit, precedent tracing, contract scanning, and orchestration. No tool appears redundant or excessive for the stated scope.

Completeness4/5

The surface broadly covers the legal research lifecycle: statute discovery, article retrieval, annexes, amendment history, source search/retrieval, citation auditing, precedent tracing, contract risk scanning, and auxiliary features via toolbox. Minor gaps such as direct legal-term definitions or amendment alerts are relegated to toolbox rather than first-class tools, but core workflows have no dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to search, retrieve, and analyze South Korean legal documents including statutes, precedents, constitutional decisions, and administrative rulings via the Ministry of Government Legislation Open API. Provides 89 specialized tools with features like legal abbreviation auto-recognition, annex extraction, and complex research chain workflows.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching and retrieving Korean statutes, precedents, and constitutional court decisions via MCP, using the National Law Information Center API.
    4,002 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search and retrieve Korean laws, regulations, administrative rules, legal interpretations, and precedents via official APIs for legal review workflows.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to query and analyze Korean law, including statutes, precedents, and ordinances, with citation verification and impact analysis.
    10
    4,002 npm
    MIT