lawyer-mcp
This server provides MCP tools to search Korean court auction cases and general court cases by case number.
auction_case_search: Look up a full auction case (including ongoing, withdrawn, and closed cases) by court and case number, returning case info, property list, parties, and addresses.
auction_search_by_case: Search for currently auctioning properties (with sale dates) under a given auction case number; returns a list of property summaries.
auction_item_detail: Get detailed information about a specific auction property (appraisal value, minimum bid, schedule) by case number and optional item number.
case_search_captcha: Start a general civil/family case search request and receive a CAPTCHA image to be read manually.
case_search_submit: Complete the general case search by submitting the CAPTCHA text, returning case details, hearing dates, submissions, parties, and agents.
The server is semi-automatic for general case searches (requires human CAPTCHA entry), while auction searches are fully automatic.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lawyer-mcpSearch auction case 2025타경602 in 순천지원"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
법원 경매/사건검색 MCP 서버 (lawyer-mcp)
법원 사이트에서 사건번호로 검색하는 MCP 서버입니다. Playwright(헤드리스 브라우저)로 WebSquare 기반 정부 사이트를 조작합니다.
제공 툴
툴 | 대상 사이트 | 설명 |
| 경매사건검색 | 법원+사건번호로 사건 전체 조회(미종국/취하 포함) |
| 물건상세검색 | 사건번호로 진행 중 매각물건 목록 검색 |
| 물건상세검색 | 진행 물건 상세(감정가/최저가/기일 내역) |
| 나의 사건검색 | 1단계 — CAPTCHA 이미지 반환 |
| 나의 사건검색 | 2단계 — CAPTCHA 입력 후 조회 |
경매 사건번호 조회는
auction_case_search를 우선 사용하세요. 날짜 필터가 없어 진행 중·미종국·취하·종국 사건까지 바로 나오며, 사건 기본정보·물건목록·당사자·목록(소재지)을 함께 돌려줍니다.auction_search_by_case/auction_item_detail는 매각기일이 잡힌 '진행 중 매각물건'만 다루므로, 진행물건이 없는 사건은 빈 결과가 됩니다. (지원 법원명은 짧은 이름 — 예:광주지방법원 순천지원→순천지원)
나의 사건검색은 CAPTCHA(자동입력 방지문자) 때문에 반자동입니다. 1단계에서 받은 이미지를 사람이 읽고, 2단계에 그 값을 넣어야 조회됩니다. CAPTCHA 자동 우회는 시도하지 않습니다.
조회 실패 처리: 당사자명 불일치·사건 없음·CAPTCHA 오류 시 법원 사이트가 띄우는 경고창 문구(예:
사건이 존재하지 않습니다.)를 그대로 에러로 반환합니다. 경고창 없이 검색 폼으로 되돌아온 경우도조회 결과를 찾을 수 없습니다에러로 처리합니다.
Related MCP server: law-search-mcp
설치
1) 저장소 클론
git clone https://github.com/kingtousick/HwangsLawyerMCP.git
cd HwangsLawyerMCP2) Python 환경 준비
Python 3.10+ 이 필요합니다. 아래 중 하나로 의존성과 브라우저(Chromium)를 설치하세요.
방법 A — uv (권장)
# uv 가 없으면 먼저 설치
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# (새 터미널을 연 뒤) 클론한 폴더에서:
uv sync
uv run playwright install chromium방법 B — python.org 설치본
https://www.python.org/downloads/ 에서 3.12 설치 (설치 시 Add to PATH 체크)
클론한 폴더에서:
python -m venv .venv .\.venv\Scripts\Activate.ps1 pip install -e . playwright install chromium
실행 / 동작 확인
# uv 사용 시
uv run lawyer-mcp
# venv 사용 시
lawyer-mcp서버는 stdio MCP 트랜스포트로 동작하므로 직접 실행하면 입력 대기 상태가 됩니다(정상).
MCP 인스펙터로 테스트
uv run mcp dev src/lawyer_mcp/server.pyClaude Code 에 등록
아래 설정에서 <REPO_DIR> 은 클론한 폴더의 절대경로로 바꿔주세요.
(예: C:\Users\alice\HwangsLawyerMCP, /home/alice/HwangsLawyerMCP)
%USERPROFILE%\.claude.json 또는 프로젝트 .mcp.json 의 mcpServers 에 추가:
{
"mcpServers": {
"lawyer": {
"command": "uv",
"args": ["--directory", "<REPO_DIR>", "run", "lawyer-mcp"]
}
}
}JSON 에 Windows 경로를 넣을 때는 역슬래시를 두 번(
C:\\Users\\alice\\...) 쓰거나 슬래시(C:/Users/alice/...)를 사용하세요.
또는 CLI 로 — 클론한 폴더 안에서 실행하면 절대경로를 직접 쓰지 않아도 됩니다:
# PowerShell (클론한 폴더에서)
claude mcp add lawyer -- uv --directory $PWD run lawyer-mcp# bash/zsh (클론한 폴더에서)
claude mcp add lawyer -- uv --directory "$PWD" run lawyer-mcp사용 예시
아래 반환값은 구조를 보여주기 위한 예시입니다. 실제 값이 아닙니다.
1. 경매 사건 조회 — 완전 자동
경매 사이트는 CAPTCHA 가 없어 한 번의 요청으로 끝납니다.
💬
순천지원 2024타경12345 경매 사건 조회해줘
auction_case_search 가 호출됩니다.
{ "case_no": "2024타경12345", "court": "순천지원" }{
"court": "순천지원",
"case_no": "2024타경12345",
"case_name": "부동산임의경매",
"filed_date": "2024.03.11",
"department": "경매1계",
"claim_amount": "150,000,000원",
"final_result": null,
"parties_summary": "채권자 ○○은행 / 채무자 김OO",
"items": [
{
"물건번호": "1",
"용도": "아파트",
"감정평가액": "280,000,000원",
"물건상태": "유찰(1회)"
}
],
"listings": [
{ "소재지": "전남 순천시 ○○동 123 ○○아파트 101동 1004호" }
],
"parties": [
{ "구분": "채권자", "이름": "○○은행" },
{ "구분": "채무자", "이름": "김OO" }
]
}final_result 가 null 이면 미종국(진행 중)입니다. 사건을 찾지 못하면 None 을 돌려줍니다.
2. 나의 사건검색 — CAPTCHA 2단계
민사·가사·제소전화해 등 일반 사건은 자동입력 방지문자 때문에 두 단계로 나뉩니다. 당사자명이 필수이며, 사건번호와 정확히 일치해야 조회됩니다.
[1단계] case_search_captcha
{
"court": "광주지방법원 순천지원",
"case_no": "2024가단12345",
"party_name": "홍길동"
}{
"session_id": "a1b2c3d4e5f6",
"captcha_image_path": "<REPO_DIR>/.captcha/captcha_a1b2c3d4e5f6.png",
"message": "저장된 CAPTCHA 이미지를 열어 표시된 문자를 읽고, case_search_submit 툴에 session_id 와 함께 입력하세요. (세션 유효시간 600초)"
}[2단계] 이미지의 문자를 읽어 case_search_submit 에 전달합니다.
{ "session_id": "a1b2c3d4e5f6", "captcha_text": "123456" }{
"court": "광주지방법원 순천지원",
"case_no": "2024가단12345",
"case_name": "[전자]대여금",
"department": "민사1단독",
"filed_date": "2024.03.11",
"final_result": null,
"parties_summary": "원고 김OO / 피고 홍OO",
"basic_info": {
"원고소가": "30,000,000원",
"수리구분": "제소",
"인지액": "140,000원"
},
"hearings": [
{
"일자": "2024.09.05",
"시각": "14:10",
"기일구분": "변론기일",
"기일장소": "제100호 법정",
"결과": "속행"
},
{
"일자": "2024.10.17",
"시각": "14:00",
"기일구분": "판결선고기일",
"기일장소": "제100호 법정",
"결과": ""
}
],
"submissions": [
{ "일자": "2024.08.28", "내용": "원고 소송대리인 준비서면 제출" }
],
"parties": [
{ "구분": "원고", "이름": "1. 김OO" },
{ "구분": "피고", "이름": "1. 홍OO" }
],
"agents": [
{ "구분": "원고 소송대리인", "이름": "변호사 김OO" }
]
}당사자 이름은 법원 사이트가 이미 마스킹해서 내려줍니다(
홍OO). 이 서버가 가공하는 게 아닙니다.
CAPTCHA 자동 입력
LAWYER_MCP_CAPTCHA_DIR 을 MCP 클라이언트가 읽을 수 있는 폴더로 지정하면,
클라이언트 쪽 모델이 이미지를 직접 읽어 2단계까지 한 번에 진행할 수 있습니다.
{
"mcpServers": {
"lawyer": {
"command": "uv",
"args": ["--directory", "<REPO_DIR>", "run", "lawyer-mcp"],
"env": { "LAWYER_MCP_CAPTCHA_DIR": "<클라이언트가 접근 가능한 폴더>" }
}
}
}3. 조회 실패
법원 사이트가 띄우는 경고창 문구를 그대로 전달합니다.
조회 실패: 자동입력 방지문자가 일치하지 않습니다.
(사건번호·당사자명·자동입력 방지문자를 확인하세요)경고창 없이 검색 폼으로 되돌아온 경우(당사자명 불일치 등)는 이렇게 나옵니다.
조회 결과를 찾을 수 없습니다. 사건번호와 당사자명이 정확한지 확인하세요.
(당사자명이 일치하지 않거나 해당 사건이 없을 수 있습니다.)환경 변수
변수 | 기본값 | 설명 |
|
|
|
|
| CAPTCHA 이미지 저장 경로 |
|
| 나의 사건검색 세션 유효시간(초) |
LAWYER_MCP_CAPTCHA_DIR은 MCP 클라이언트가 읽을 수 있는 폴더로 지정하면 클라이언트 쪽 모델이 이미지를 직접 읽어 CAPTCHA 를 입력할 수 있습니다.
CAPTCHA 이미지는 자동 정리됩니다.
case_search_submit이 끝나면 해당 이미지를 지우고, 조회를 중단해 버려진 세션은 TTL 이 지난 뒤 다음 호출 때 컨텍스트·이미지가 함께 정리됩니다. 세션 없이 남은captcha_*.png도 1시간이 지나면 걷어냅니다(그 폴더의 다른 파일은 건드리지 않습니다).
검증/탐침 스크립트 전용 (scripts/)
변수 | 기본값 | 설명 |
| 저장소 루트 | 스크린샷·DOM 덤프 등 산출물 저장 경로 |
|
| 검증에 쓸 법원명 |
|
| 검증에 쓸 사건번호 |
|
| 검증에 쓸 당사자명 |
scripts/의 검증 스크립트는 실제 사건으로 조회해야 의미가 있습니다. 실사건 정보는 저장소에 커밋하지 말고 위 환경변수로 주입하세요.$env:LAWYER_MCP_TEST_COURT = "○○지방법원" $env:LAWYER_MCP_TEST_CASE_NO = "24가단12345" $env:LAWYER_MCP_TEST_PARTY = "홍길동" uv run python scripts/verify_full.py
법원명 표기 주의(나의 사건검색): 시·군법원은 단축명(
여수시법원), 지방법원 본원·지원은 풀네임(광주지방법원 순천지원)이어야 select 옵션과 매칭됩니다. 경매 사이트는 지원을 단축명(순천지원)으로 받으니 서로 다릅니다.
출력 인코딩
scripts/_common.py 가 임포트 시점에 stdout/stderr 를 UTF-8 로 재설정합니다.
Windows 기본 콘솔 인코딩(cp949)에서 한글이 깨지거나, 결과를 파일로 리다이렉트했을 때
cp949 로 기록되는 문제를 막기 위한 것으로, PYTHONIOENCODING 을 따로 지정하지 않아도 됩니다.
uv run python scripts/verify_full.py > result.txt # result.txt 는 UTF-8셀렉터 검증 상태
모듈 | 대상 | 폼 입력 | 결과 파싱 |
|
| ✅ 검증 완료(2026-06) | ✅ 검증 완료(2026-06, 실사건 조회) |
|
| ✅ 검증 완료(2026-06) | ✅ 검증 완료(2026-06, 실사건 조회) |
scourt.py는 실제 사건으로 폼 입력 → CAPTCHA → 결과 파싱까지 전 구간 검증을 마쳤습니다. (기본정보·기일내역·제출서류·당사자·대리인 그리드 모두 정상 추출) 재검증:scripts/verify_full.py,scripts/probe_scourt.py
courtauction.py도 실제 사건으로 전 구간 검증을 마쳤습니다.
경매사건검색(
case_search): 법원+사건번호 → 기본정보·물건목록·당사자·목록 추출 검증(예:2025타경602순천지원, 당사자 16명). 무결과는None.물건상세검색(
search_by_case/item_detail): 결과 그리드 '물건 1건 = 행 2줄' 구조, 물건상세는 소재지 링크 클릭 시 같은 페이지 인라인 렌더, 기일내역 파싱까지 검증. 무결과·범위 밖 연도 등 예외도 명확한 에러/빈 결과로 처리. 재검증:scripts/verify_case_search.py,scripts/verify_auction.py,scripts/probe_case_*.py,scripts/probe_auction*.py
정부 사이트는 WebSquare 내부 ID 기반이라, 실제 페이지를 열어 element id 를 확인해야 합니다.
# 브라우저를 띄운 채 실제 DOM 확인
$env:LAWYER_MCP_HEADLESS = "0"
uv run mcp dev src/lawyer_mcp/server.py개발자도구(F12)로 입력칸/버튼/결과 테이블의 실제 id 를 확인한 뒤
각 파일 상단의 _SEL_* 상수를 교체하세요. 사이트 개편 시에도 이 부분만 손보면 됩니다.
주의 / 한계
법원 사이트의 이용약관과 robots 정책을 준수하고, 과도한 요청을 피하세요.
전자소송(ecfs)의 사건 상세는 공동인증서 로그인이 필요해 이 서버 범위에 넣지 않았습니다.
사이트 구조 변경 시 셀렉터 업데이트가 필요합니다.
Available Tools
5 toolsauction_case_searchA
법원경매 '사건'을 사건번호로 조회한다(경매사건검색).
날짜 필터가 없어 진행 중·미종국·취하·종국 사건까지 바로 조회된다. 사건 기본정보·물건목록·당사자·목록(소재지)을 함께 반환한다. 특정 사건번호 조회에는 auction_search_by_case 보다 이 툴을 우선 사용한다.
Args: case_no: 사건번호 (예: '2025타경602'). court: 법원명. 지원은 짧은 이름(예: '순천지원'), 본원은 '서울중앙지방법원'.
Returns: 사건 종합 정보. 사건을 찾지 못하면 None.
| Name | Required | Description | Default |
|---|---|---|---|
| court | Yes | ||
| case_no | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses no date filter behavior and the comprehensive return data (basic info, property list, parties, location). Also mentions returning None if not found. Being a read-only lookup, no further behavioral details are critically missing, though authentication needs are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with separate sections for purpose, behavioral traits, args, and returns. Every sentence adds information without redundancy, and it is concise for the amount of detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with 2 parameters and an output schema, the description covers purpose, usage guidance, parameter details, return behavior, and when it cannot find results. It is sufficiently complete given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, description fully explains both parameters: 'case_no' with a format example, 'court' with naming conventions for branch vs main court. This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool's purpose: query court auction cases by case number. It distinguishes from sibling tool 'auction_search_by_case' by explicitly recommending this tool for specific case number lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states preference over 'auction_search_by_case' and notes the absence of date filtering, implying it returns all statuses. However, it lacks explicit exclusions or alternative usage scenarios beyond the single sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auction_item_detailA
법원경매 물건의 상세 정보(감정가/최저가/기일 내역)를 조회한다.
Args: case_no: 사건번호 (예: '2024타경12345'). item_no: 물건번호 (선택). 미지정 시 첫 번째 물건. court: 관할 법원명 (선택).
Returns: 물건 상세 정보. 없으면 None.
| Name | Required | Description | Default |
|---|---|---|---|
| court | No | ||
| case_no | Yes | ||
| item_no | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only mentions returning None if no data, but fails to disclose read-only nature, permissions, side effects, or error handling. This is insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured with Args and Returns sections. It is front-loaded with the purpose. Minor redundancy exists between the first sentence and the Args section, but overall it is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and moderate complexity, the description covers parameter purpose and return behavior (None if missing). However, it lacks information on potential errors, rate limits, or authentication requirements, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully explains each parameter in Korean, including an example format for case_no and default behavior for item_no. This adds significant meaning beyond the schema names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves detailed information of a court auction item, including specific fields like appraised value and minimum price. This distinguishes it from sibling tools which are likely case search or captcha handling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool vs alternatives, nor does it mention prerequisites or when not to use it. Users are left to infer usage context from parameter descriptions alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auction_search_by_caseA
법원경매 '진행 중 매각물건'을 사건번호로 검색한다(물건상세검색).
매각기일이 설정된 부동산 물건만 나온다. 미종국/취하 등 진행물건이 없는 사건은 빈 리스트가 된다(그 경우 auction_case_search 를 사용).
Args: case_no: 사건번호 (예: '2024타경12345'). court: 관할 법원명 (선택, 예: '서울중앙지방법원').
Returns: 물건 요약 정보 리스트. 결과가 없으면 빈 리스트.
| Name | Required | Description | Default |
|---|---|---|---|
| court | No | ||
| case_no | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals key behaviors: only items with a sale date are returned, empty list means no ongoing items (not an error), and the return type is a list of item summaries. Though it does not mention authentication or read-only nature, those are implied and the description is sufficient for this simple tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, consisting of a few lines that efficiently convey purpose, usage guidance, parameter details, and return value. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, simple list return) and the existence of an output schema, the description covers all necessary aspects: what it does, when to use it, parameters with examples, and return format. It is fully complete for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by providing clear Korean descriptions for both parameters: case_no with example '2024타경12345' and court with example '서울중앙지방법원', along with optionality. This fully covers the meaning and format beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb '검색한다' (search), the resource '법원경매 진행 중 매각물건' (court auction ongoing sale items), and the search key '사건번호' (case number). It explicitly distinguishes from the sibling tool auction_case_search by stating the condition under which that tool should be used instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool: to find ongoing items with a sale date set. It also explicitly states when not to use it (when there are no ongoing items, resulting in an empty list) and directs the agent to the alternative tool auction_case_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
case_search_captchaA
[1단계] 나의 사건검색을 시작하고 CAPTCHA 이미지를 반환한다.
CAPTCHA 는 자동 인식할 수 없으므로, 반환된 이미지 파일을 사용자가 직접 읽고 case_search_submit 으로 값을 전달해야 한다.
Args: court: 법원명 (예: '여수시법원'). 사이트 select 옵션과 정확히 일치해야 함. case_no: 사건번호 (예: '25자10010'). 사건구분은 여기서 자동 파싱. party_name: 당사자명. ssgo 사건검색은 당사자명이 필수입력이다.
Returns: session_id 와 captcha_image_path 를 담은 객체.
| Name | Required | Description | Default |
|---|---|---|---|
| court | Yes | ||
| case_no | Yes | ||
| party_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behavior: it returns a CAPTCHA image and creates a session_id. It also notes that automatic recognition is not feasible. However, it does not mention if the operation is read-only or any side effects beyond session creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a step label, clear sections for arguments and returns. A bit verbose with Korean but front-loads the purpose efficiently. Minor redundancy in repeating parameter names could be condensed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return object (session_id, captcha_image_path). It covers the tool's role in the workflow and parameter requirements. Missing error cases or prerequisites, but overall sufficient for a tool with three required params.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must provide meaning. It does so with examples ('여수시법원', '25자10010'), constraints (exact match for court, required for party_name in ssgo), and explanations (case_no auto-parses case type). This adds critical value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific role: step 1 of a case search, returning a CAPTCHA image. It explicitly distinguishes from the sibling tool 'case_search_submit' which handles submission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the sequential dependency with 'case_search_submit' and warns that CAPTCHA cannot be auto-recognized, guiding the user to read the image. It does not explicitly state when not to use, but the context implies it's only for initializing a search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
case_search_submitA
[2단계] CAPTCHA 값을 입력해 사건 조회를 완료한다.
Args: session_id: case_search_captcha 가 반환한 세션 ID. captcha_text: 사용자가 이미지에서 읽은 문자.
Returns: 사건 기본정보와 진행/기일 내역.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| captcha_text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It describes input and output but does not disclose whether the operation is read-only, any potential side effects, or authentication requirements. Basic transparency is present but insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences plus an args/returns section. It efficiently conveys the purpose, parameters, and return without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 simple parameters, no output schema), the description fully covers the essential information: what it does, how to use it, and what it returns. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds crucial meaning: it explains that session_id comes from case_search_captcha and captcha_text is user-typed characters. This compensates well for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it completes a case search after CAPTCHA input, referencing the preceding tool (case_search_captcha) and specifying the return type. It distinguishes itself from siblings by being the second step in a two-phase process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly marks this as step 2, implying it should follow case_search_captcha. It provides clear context but does not explicitly state when not to use it or mention alternatives, which would be beneficial.
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.
5 tool updates
v0.1.0- First observed
auction_case_search - First observed
auction_item_detail - First observed
auction_search_by_case - First observed
case_search_captcha - First observed
case_search_submit
TDQS
Scored across 5 tools
The auction-related tools (auction_case_search, auction_search_by_case, auction_item_detail) have overlapping purposes, though descriptions try to differentiate. The captcha tools are distinct but add complexity. An agent may confuse auction_case_search and auction_search_by_case.
All tool names use snake_case and are descriptive, but the order of terms varies (e.g., auction_case_search vs. case_search_captcha). This is mostly consistent with minor deviations.
5 tools is a reasonable scope for a legal case and auction search server. It covers the core functionality without being excessive, though a few more search options could be added.
The tool set covers auction case and item details, plus a captcha-based case search. Missing are broader search capabilities (e.g., by date, party name without captcha) and update/delete operations, which are likely out of scope but still notable gaps.
Maintenance
Related MCP Connectors
Korean real estate: court auctions, 10M+ MOLIT records, subscription notice facts, loan/DSR rules
Korean business registry, corporate info, parcel tracking, validation APIs
Access Korea’s G2B procurement and Nara Market data for bid notices, awards, contracts, statistics…
Stealth scraping & search. Bypasses Cloudflare, DataDome & LinkedIn via Cyborg HITL approach.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables automated collection of apartment listing data from Naver Real Estate using Playwright browser automation with passive network response capture. Provides MCP tools to search complexes, resolve property identifiers, and extract normalized listing information including duplicate properties.-
- FlicenseAqualityDmaintenanceEnables searching and retrieving Korean Supreme Court precedents from the law.go.kr Open API, with support for keyword search and detailed judgment text.2-
- FlicenseNot gradedqualityDmaintenanceEnables searching and retrieving Korean Constitutional Court decisions using the official Open API, with search filters and full-text retrieval.-
- FlicenseNot gradedqualityBmaintenanceEnables LLM clients to ask plain-language questions about Korean public auction property data from the 온비드 OpenAPI, including normalized pricing, location, and failed-sale history.2-