Skip to main content
Glama

korean-tax-mcp — Korea Tax Law MCP (한국 세법)

데모: 조사 쟁점 근거 조회 — 비상장주식 저가양도 부당행위계산, 2024년 기준 조문 3단·통칙·집행기준·해석·판례·승패 비교

PyPI MCP Registry License: MIT Built with Upstage Solar Pro 4 · English

0.7.0부터 Solar Pro 4가 코드를 쓰고 CodeSolar가 리뷰, Claude가 테스트로 교차 검증합니다. 도구 23개, 상세는 CHANGELOG.

Korea tax law for AI agents — statutes as in force on any date, NTS rulings and court decisions, basic rules, treaties. English


세법 쟁점을 AI에 물으면, 그 시점의 조문과 국세청 해석·판례를 문서번호와 함께 가져옵니다.

작동 방식

flowchart LR
  Q["AI의 요청<br/>법령·조문·기준일·키워드"] --> V["시행본 고르기<br/>기준일에 시행 중인 판"]
  V --> P["조문 정리<br/>항·호 분리, 단서 표시"]
  P --> L["위임 연결<br/>법→시행령→시행규칙"]
  Q --> S["해석·판례 검색<br/>문서번호·요지"]
  Q --> C["대조·판정<br/>원문과 글자 비교"]
  V -.-> A1[("법제처 Open API")]
  L -.-> A1
  S -.-> A2[("국세법령정보시스템")]
  P --> R["결과<br/>원문·시행일·문서번호·링크"]
  L --> R
  S --> R
  C --> R
  1. 조문 — 법제처에서 기준일에 시행 중이던 판을 골라 원문을 주고, 단서 구절과 위임 조문(법→시행령→시행규칙)을 함께 붙입니다. 기준일을 안 주면 오늘 기준입니다.

  2. 해석·판례 — 국세법령정보시스템에서 질의회신·판례·심판례·통칙·집행기준을 문서번호·링크로 찾습니다.

  3. 그 해 기준 — 세목별 기준일(사업연도 말일, 양도일 등)의 조문·해석을 모으고 현행과 바뀐 점을 표시합니다.

  4. 대조 — 진술·보기를 원문과 글자 단위로 비교해 다른 숫자·단서를 표시합니다.

판단과 결론은 사용자의 AI와 전문가 몫입니다. 이 서버는 근거를 가져옵니다.

Related MCP server: Korean Law MCP Server

이렇게 물어보세요

  • "2023년 12월 31일 기준 법인세법 시행규칙 제43조 원문"

  • "법인세법 제52조를 인용한 최근 질의회신·판례 보여줘"

  • "2019 사업연도 기준으로 법인세법 제52조 관련 조문·통칙·해석 정리해줘"

  • "'경조금은 건당 10만원까지 증빙 없이 손금'이라는 말, 2026 시행령 제41조 원문과 맞아?"

  • "미국 시민권자 대표이사, 작년 국내 체류 200일, 가족은 미국 — 거주자야?"

설치

claude mcp add korean-tax -- uvx korean-tax-mcp
{
  "mcpServers": {
    "korean-tax": {
      "command": "uvx",
      "args": ["korean-tax-mcp"],
      "env": { "LAW_OC": "법제처 OC(선택)", "UPSTAGE_API_KEY": "Upstage 키(선택)" }
    }
  }
}

키

쓰는 곳

없음

해석·판례·통칙·집행기준·사례집·조약·서식·책자 검색, 승패 비교, 거주자 판정

LAW_OC (open.law.go.kr 무료)

조문 조회·찾기·개정 이력, 그 해 기준 묶음, 진술·보기 대조, 인용 검증(조문)

UPSTAGE_API_KEY (선택)

사실관계 대조·승패 요약·영문 번역을 Solar가 수행. 없으면 사용자 AI가 수행

KOREAN_TAX_MCP_SOLAR_BASE_URL (선택)

망분리 환경에서 기관 내부 Solar 사용

데이터 전송 안내 — 기본 동작은 법제처·국세청 공개 API만 호출하며, AI 판단·요약·번역(사실관계 대조, 승패 요약, 영문 번역)은 사용자 AI가 수행합니다. Upstage로 전송되는 내용은 없습니다. 선택: UPSTAGE_API_KEY를 설정하면 Solar가 대조·요약·번역을 수행하며, 이때 입력 내용이 Upstage API(api.upstage.ai)로 전송되니 개인정보 등 민감정보는 넣지 마세요. 망분리 환경에서는 KOREAN_TAX_MCP_SOLAR_BASE_URL로 기관 내부 Solar에 연결하면 외부 전송 없이 사용할 수 있습니다.

도구 (23개)

묶음

도구

하는 일

조문

law_article

기준일 시행본 원문, 목차, 위임 조문, 단서 구절

find_article

조문 번호를 모를 때 키워드로 찾기

article_history

언제 바뀌었는지, 시행 예정 개정

해석·판례

search_tax_rulings

질의회신·판례·심판례 검색

get_tax_ruling

문서 본문 전문

rulings_by_article

특정 조문을 인용한 해석·판례

basic_rules

국세 기본통칙 전문

execution_standards

세법집행기준 항목·쪽·링크

casebook_search

2025 세법해석 사례집(96건)

그 해 기준·검증

research_issue

세목별 기준일의 조문·통칙·해석 묶음, 현행 대비 변경

timing_rules

시기 규칙표 — 납세의무 성립·손익 귀속·소득별 수입시기·부가 공급시기

verify_citations

초안 속 문서번호·조문이 실제로 있는지

대조·판정

verify_statement

한 문장을 원문과 글자 대조

judge_options

보기 여러 개를 조문과 한 번에 대조

compare_outcomes

같은 쟁점의 납세자 승·패 결정 나란히

compare_with_case

우리 사실관계와 해석·판례 비교(지지·반대·구별)

조약·거주자

tax_treaty

조세조약 96개국 조문(국·영문)

treaty_withholding_rates

배당·이자·사용료 제한세율

residency_check

거주자·비거주자 3단계 판정(규칙)

residency_report

판정 검토 보고서(Solar)

문서·서식

search_forms

별표·서식

search_nts_publications

국세청 발간책자 본문

search_local_documents

내 PC PDF 검색(KOREAN_TAX_MCP_DOCS)

모든 도구는 lang="en"으로 영어 결과를 받을 수 있습니다.

면책

이 도구의 결과는 세무 자문이 아닙니다. 세법 근거를 찾아 보여 주는 참고 자료이며, 실제 신고·세무조사·불복 판단은 세무사·회계사·변호사 등 전문가에게 확인하세요. 해석·판례·조문은 원문 링크로 확인하세요.

이 도구는 세무사법 제2조의 세무대리(세무조정계산서 작성, 신고·불복 대리, 세무상담 등)를 수행하지 않으며, 그 업무는 세무사와 등록한 공인회계사·변호사만 할 수 있습니다(세무사법 제20조). 공개된 법령·해석·결정례 원문을 찾아 보여 주는 소프트웨어이고, 데모 화면의 "조사 쟁점 근거 조회" 같은 사례도 자료 조회·정리 기능의 시연일 뿐 사실관계 판단이나 대응 전략 제시가 아닙니다. 사실관계 판단과 대응은 세무 전문가(세무사·회계사·변호사)와 함께 확인해 주세요.

AI 사용 고지

  • 조회·검색·거주자 규칙 판정(search_tax_rulings, get_tax_ruling, law_article, residency_check 등)은 코드로 동작합니다 — 생성형 AI가 개입하지 않습니다.

  • 생성형 AI가 작성하는 결과: 사실관계 대조(compare_with_case), 승패 요약(compare_outcomes explain=True), 영문 번역(lang="en"), 거주자 판정 보고서(residency_report)는 생성형 AI(기본: 사용자 AI, 선택: Upstage Solar Pro 4)가 작성합니다.

  • Solar가 작성한 결과(mode: "solar_cloud" 또는 "solar_onprem")에는 결과에 AI 생성 표시 필드가 함께 반환됩니다. 이 표시의 문구는 AI 기본법 제31조에 따른 것입니다.

  • 사용자 AI(mode: "host_ai")가 판단하는 경우는 결과에 AI 생성 표시가 붙지 않으며, 대신 안내 문구에 "판단 결과를 사용자에게 보여 줄 때 AI 생성임을 표시하세요"가 포함됩니다. 실제 표시는 사용자 측 AI 도구에서 수행하세요.

유의

  • 해석·판례는 회신·선고 당시 법 기준입니다. 적용 연도 조문(law_article의 as_of)과 대조하세요.

  • 국세법령정보시스템 공개 조회를 1일 캐시, 0.5초 간격으로 사용합니다. 집행기준은 항목·쪽·링크까지만 제공합니다.

  • 일반 법령 전반은 korean-law-mcp와 함께 쓰면 좋습니다.

평가 방법

Solar Pro 4가 이 MCP 서버들을 도구로 써서 세법 객관식 문항을 푸는 종합 평가는 eval/ 폴더를 참고한다. 도구 하나하나의 정확도는 bench/에서 측정한다.

출처 · 라이선스

국세청 국세법령정보시스템 · 법제처 국가법령정보 공동활용 · 국세청 「2025 세법해석 사례집」

MIT © 2026 Upstage · Created by Mia(윤승미)

Available Tools

23 tools
article_historyA
Read-onlyIdempotent

When did this article change, and will an upcoming amendment change it? 조문 개정 이력과 시행 예정 개정. 언제: "이 조문 언제 바뀌었나", "곧 바뀌나" — 사업연도별 적용 조문이 다른지 판단할 때. 특정 날짜 원문은 law_article(as_of). 반환: {법령, 조, 연혁: [{시행일, 공포일, 제개정, 상태(연혁/현행/시행예정), 이 조 변경(바뀜/그대로)}], 요약, 주의}. 읽기 전용. 법제처 공식 API — LAW_OC 필요.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
lastNo비교할 최근 시행본 수 2~20 (시행예정 포함)
articleYes조문 번호. '제52조' 또는 '제28조의2' 형식
law_nameYes법령 정식 명칭. 예: '법인세법', '법인세법 시행규칙'

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so '읽기 전용' is largely redundant. The description does, however, add real behavioral context beyond annotations: the LAW_OC credential requirement (an auth prerequisite the annotations don't cover) and an explicit return shape. It stops short of pagination/rate-limit notes, so a 4 rather than 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-loads the core question, then usage, then return shape, then access constraints — a sensible order with little waste. Minor redundancy ('읽기 전용' duplicating readOnlyHint) and bilingual mixing cost it a point but not much else.

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

Completeness4/5

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

There is no output schema, so the inline return structure ({법령, 조, 연혁[...], 요약, 주의}) is genuinely load-bearing and lets an agent interpret results. Combined with the auth prerequisite and the sibling routing, an agent has enough to call it correctly; only deeper detail on the history array semantics is missing.

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 effectively 100% (article format, last 2-20 range, lang behavior, law_name examples are all in the schema), so the baseline is 3. The description adds no parameter-level meaning beyond what the schema already documents; it focuses on purpose and return shape instead.

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?

The opening sentence states a specific verb+resource: it returns an article's amendment history and any upcoming (not-yet-effective) amendments. It also distinguishes itself from the sibling law_article by noting that raw text at a specific date belongs there. An agent can tell what this tool does and what it is not without opening the schema.

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

Usage Guidelines5/5

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

The '언제' line gives explicit trigger questions ('when did this article change', 'will it change soon') and names the decision context (whether applicable articles differ by business year). It names the alternative explicitly: law_article(as_of) for dated original text. Both when-to-use and the routing condition are present.

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

basic_rulesA
Read-onlyIdempotent

Get NTS Basic Rules (국세 기본통칙) full text by article or keyword. 국세 기본통칙 전문(최신 고시본). 언제: 조문의 국세청 공식 해석 기준이 필요할 때. 실무 집행 기준 목록은 execution_standards, 개별 사안 해석은 rulings_by_article. 반환: {법령, 기준(고시 연도), 통칙: [{통칙(번호·제목), 본문}], 링크}. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
articleNo법 조문('제52조'). 주면 그 조에 딸린 통칙 전부, 생략하면 전체에서 keyword로 검색
keywordNo통칙 제목·본문 검색어 (선택)
law_nameYes세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the safety profile is covered. The description goes beyond that with genuinely new operational context: no API key required, source is the public NTS tax-law portal, and identical requests are cached for one day. The '읽기 전용' restatement is redundant but doesn't hurt.

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

Conciseness5/5

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

Front-loads the core purpose, then uses compact labeled sections (언제/반환/behavior) so each line carries distinct information. Dense but no filler sentences.

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

Completeness5/5

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

No output schema exists, and the description supplies the return shape ({법령, 기준, 통칙[], 링크}), plus access and caching constraints. Combined with full schema coverage and rich annotations, an agent has everything needed to call it 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 description coverage is 100%, so the schema already explains lang, article, keyword, and law_name in detail. The description's 'by article or keyword' summarizes the parameter behavior but adds no syntax or format detail beyond the schema, so baseline 3 applies.

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 scope: retrieves the full text of NTS Basic Rules by article or keyword. It names sibling tools (execution_standards, rulings_by_article) so an agent can separate this from adjacent lookup tools without opening any schema.

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

Usage Guidelines5/5

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

The '언제' line gives an explicit trigger condition (need the NTS official interpretation for an article) and routes two distinct alternatives: enforcement-standard lists go to execution_standards, case-specific interpretations to rulings_by_article. When-to-use and alternatives are both covered.

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

compare_outcomesA
Read-onlyIdempotent

Win/loss side by side for one issue: taxpayer-won vs lost decisions with both sides' arguments and the deciding reasoning. 같은 쟁점의 조세심판·심사·이의·법원 판결을 납세자 승(인용·취소)/일부 인용/패(기각)로 나누고, 건마다 납세자 주장·과세관청 의견·결정 이유(판단 끝부분)를 나란히. 언제: 불복·조사 대응에서 '이긴 쪽은 무엇을 입증했고 진 쪽은 무엇이 부족했나'를 볼 때. 이긴 사례만 걸러 보지 않는다(양쪽을 같이). 결과 판정은 본문 주문(主文)·결론 문장을 규칙으로 읽음(모델 추정 아님). 주장·이유는 본문에서 잘라 온 발췌. 반환: {쟁점, 집계, 납세자 승(인용·취소), 일부 인용, 납세자 패(기각), 각하·기타, 갈린 지점?(explain), mode?, 주의}. explain=True: Solar 설정이 없으면 mode="host_ai" — 갈린 지점에 사용자 AI용 판단 안내(발췌는 위 목록). 설정 시 Solar 요약(mode=solar_cloud/solar_onprem). 읽기 전용. 국세법령정보시스템 조회, 약 5~10초.

NameRequiredDescriptionDefault
nNo본문까지 읽을 결정·판결 수(4~20). 많을수록 느림(건당 약 0.5초)
taxNo세목 필터 (선택)
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
issueYes쟁점 한 문장. 예: '특정 임원만을 위한 퇴직금 지급규정에 따른 퇴직금의 손금산입 여부'
explainNoTrue면 '승패를 가른 지점' 정리. 기본은 사용자 AI용 판단 안내 반환(전송 없음), Solar 설정 시 Solar가 요약

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations (readOnly/idempotent/openWorld/destructive=false), it discloses that outcome verdicts are read from the 본문 주문·결론 by rule and not model-inferred, that arguments/reasons are cut excerpts from the body, the explain-mode behavior (host_ai vs solar_cloud/onprem), and a latency of roughly 5–10 seconds. That is rich behavioral context, though it doesn't discuss failure modes or result limits beyond the n cap.

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?

The purpose is front-loaded and the body is information-dense with labeled sections (언제 / 결과 판정 / 반환 / explain). It is bilingual and the two language blocks largely mirror each other, which adds length, but for a Korean-first tool this is largely functional rather than filler.

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

Completeness4/5

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

There is no output schema, so the description carries the return-value burden and does so by enumerating the return shape (쟁점, 집계, 납세자 승/일부 인용/패, 각하·기타, 갈린 지점?, mode?, 주의). Combined with the mode and latency disclosures, an agent has nearly everything needed to call it correctly; missing only explicit limits on result volume beyond n.

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 100%, so the schema already documents n, tax, lang, issue and explain, giving a baseline of 3. The description adds a little on explain's mode-dependent behavior but does not add format or syntax meaning beyond what the schema text already provides.

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 and resource: it splits decisions on one issue into taxpayer-won / partial / lost and lays out both sides' arguments plus the deciding reasoning ('납세자 승(인용·취소)/일부 인용/패(기각)'). It is concrete about what is produced, but it never names or distinguishes a sibling like compare_with_case or research_issue, so an agent must infer the boundary from the schemas.

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?

It gives explicit context: use it in 불복·조사 대응 when you want to see what the winning side proved and what the losing side lacked, with the explicit constraint not to filter only winning cases (both sides must be shown). This is useful when-to-use guidance, though no alternative tool is named as a fallback.

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

compare_with_caseA
Read-only

Check your facts and argument against rulings: supports / contradicts / distinguish. 사실관계·논리를 해석·판례와 대조해 항목마다 지지·반대·구별 필요를 판정. 언제: 주장의 근거와 반대 사례를 한 번에 점검할 때(의견서·불복 검토). 단순 검색은 search_tax_rulings. 기본(mode="host_ai"): Solar 설정이 없으면 후보 문서의 원문 발췌(제목·요지, 문서번호, 링크)와 판단 안내를 반환 — 판정은 사용자 AI가 수행, Upstage로 전송 없음. 반환(host_ai): {mode, 사실관계, 우리 논리, 후보: [{문서번호, 구분, 일자, 제목, 요지, 링크}], 판단 안내, 주의}. 선택(Solar): UPSTAGE_API_KEY(클라우드, 입력이 api.upstage.ai로 전송) 또는 KOREAN_TAX_MCP_SOLAR_BASE_URL(망분리 온프렘 Solar) 설정 시 반환: {mode, 해석: [{문서번호, 구분, 관계, 이유, 사실관계 차이, 링크}], 요약, 주의}. 문서번호는 검색 결과에 있는 것만. 약 10초. 읽기 전용.

NameRequiredDescriptionDefault
taxNo세목 필터 (선택)
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
factsYes사실관계: 누가·언제·무엇을·얼마 (최대 1500자 사용)
our_viewYes우리 주장: 과세 논리 또는 납세자 주장 한두 문장

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses two operating modes (host_ai vs Solar), the exact return shape of each, the data-privacy consequence (no transmission by default; input sent to api.upstage.ai only when UPSTAGE_API_KEY/on-prem base URL is set), ~10s latency, and the constraint that document numbers come only from search results. That is substantive context the readOnly/openWorld annotations cannot convey.

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-loads purpose, then when-to-use, then a compact breakdown of default vs Solar return shapes. It is longer than typical and the Korean/English duplication adds bulk, but every section earns its place for a configuration-dependent tool.

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

Completeness4/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 carries the return-value burden and delivers both return shapes, latency, data-flow caveats and the '주의' field. It is nearly complete, leaving only the unexplained mode selector that is not reflected in the input schema.

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 100%, so tax, lang, facts and our_view are already documented, making 3 the baseline. The description explains output modes driven by configuration rather than adding syntax or constraints for the actual parameters, and it references a 'mode="host_ai"' setting that does not exist in the schema, which adds mild ambiguity rather than parameter clarity.

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: compare facts/argument against rulings, producing supports/contradicts/distinguish verdicts. It explicitly names the sibling search_tax_rulings as the alternative, so an agent can distinguish this tool without opening the schema.

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

Usage Guidelines5/5

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

'언제: 주장의 근거와 반대 사례를 한 번에 점검할 때' gives the exact scenario (opinion letters, appeal reviews), and '단순 검색은 search_tax_rulings' rules out the alternative. Both when-to-use and the exclusion are explicit.

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

execution_standardsA
Read-onlyIdempotent

List Tax Execution Standards (세법집행기준) items with page numbers. 세법집행기준 항목(최신 발간본). 언제: 조문별 집행 기준이 있는지·몇 쪽인지 확인할 때. 본문은 책자(PDF)라 제공하지 않으므로 통칙 본문이 필요하면 basic_rules. 반환: {법령, 기준(발간 연도), 항목: [{항목(번호·제목), 쪽}], 링크, 주의}. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
articleNo법 조문('제52조'). 주면 그 조의 집행기준 항목만
keywordNo항목 제목 검색어 (선택)
law_nameYes세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'. 소득세는 '소득세법'

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/openWorld/destructive, so the description adds value by disclosing that no API key is required for the public 국세법령정보시스템 lookup and that identical requests are cached for one day. It does not describe pagination or result-size limits, so it falls short of 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-loads the one-line purpose, then cleanly segments 언제 / 반환 / behavioral notes. Every sentence earns its place, though the mixed bilingual phrasing makes it slightly denser than necessary.

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

Completeness5/5

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

With no output schema available, the description compensates by spelling out the return shape ({법령, 기준, 항목:[{항목, 쪽}], 링크, 주의}), which tells the agent exactly what it will receive. Combined with the usage routing and access notes, nothing needed to call it correctly is missing.

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 100%, and each parameter (lang, article, keyword, law_name) already carries a detailed description including an enum and examples, so the baseline is 3. The tool description adds no parameter-level meaning beyond what the schema states.

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 ('List Tax Execution Standards items with page numbers') plus a bilingual gloss of the resource name. It establishes scope (items + page numbers) and distinguishes itself implicitly from full-text tools by noting the body is a PDF booklet.

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

Usage Guidelines5/5

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

The '언제' line gives an explicit trigger (checking whether a per-article standard exists and on which page), and it names the alternative — 'basic_rules' — for when the agent needs the 통칙 body text. This is exactly the when/when-not/alternative structure the dimension rewards.

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

find_articleA
Read-onlyIdempotent

Find statute articles by keyword — first step when you don't know the article number. 키워드로 조문 위치를 찾는다.

언제: 쟁점 키워드는 있는데 조문 번호를 모를 때 first step. 예: '압류금지 생계비계좌' → 국세징수법 제41조. 반환: [{법령, 조, 제목, 적용 시행일, 일치 문장: 키워드가 든 문장 1~2개(각 200자 이내)}], 다음 단계: law_article(law_name, 조, keyword=...)로 해당 항만 조회. 결과 길이 4,000자 이내. 읽기 전용. 법제처 공식 API — LAW_OC 필요, 없으면 오류.

NameRequiredDescriptionDefault
nNo반환 건수(1~20)
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
as_ofNo기준일 YYYYMMDD. 생략하면 오늘
keywordYes찾을 키워드(공백으로 여러 단어). 예: '압류금지 생계비계좌'
law_nameNo법령명(정식 명칭). 생략하면 주요 세법 전부(국세기본법·징수법·소득세법·법인세법·부가가치세법·상속세및증여세법·조세특례제한법·국제조세조정법 + 각 시행령)에서 조회

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/open-world safety, and the description goes further with genuinely new operational facts: an authentication requirement (LAW_OC needed, otherwise error) and a hard output cap of 4,000 characters. It also sketches the return record shape, which matters because no output schema exists.

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 purpose, then cleanly labeled sections (언제 / 반환 / 다음 단계) that a scanning agent can parse. The English and Korean halves restate each other, so some text is duplicative rather than additive, which keeps it short of a 5.

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

Completeness5/5

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

For a 5-parameter search tool with no output schema, the description supplies everything an agent needs: trigger condition, example query, return field list, result-size ceiling, auth prerequisite, and the next tool to call. Nothing required to invoke it correctly is missing.

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

Parameters5/5

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

Schema description coverage is 100%, so the schema already documents n, lang, as_of, keyword, and law_name (including the default search scope). The description adds only a usage example for keyword and the shape of the law_article follow-up call, so the baseline of 3 is the right level.

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 ('Find statute articles by keyword') plus the scope of the lookup. It explicitly positions itself against the sibling law_article by stage ('first step when you don't know the article number'), so an agent can tell which tool to reach for 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 Guidelines5/5

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

Gives an explicit trigger condition ('쟁점 키워드는 있는데 조문 번호를 모를 때'), a concrete example mapping a keyword to a statute article, and the follow-up step with the exact tool and arguments ('law_article(law_name, 조, keyword=...)'). When-to-use and the alternative are both spelled out.

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

get_tax_rulingA
Read-onlyIdempotent

Get the full text of one ruling or decision. 해석·판례 1건의 본문 전문. 언제: 검색 결과 중 인용·요약할 문서를 정한 뒤. 요지만으로 판단하지 말고 본문을 읽을 때 사용. 반환: {문서번호, 제목, 요지, 등록일, 관련조문[], 본문(질의회신: 사실관계·질의·회신 / 판례: 주문·이유, 최대 2만 자), 링크}. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
idYessearch_tax_rulings·rulings_by_article 결과의 id (숫자 12~20자리)
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive traits, but the description adds genuinely new behavioral facts: public access with no API key and a 1-day cache for identical requests. It also discloses return shape and a 20,000-character body cap, which the annotations do not provide.

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-loads purpose, then labels and sequences 'when', 'return', and behavioral notes so the agent can scan quickly. The Korean/English duplication doubles the raw length, but each block is purposeful and no sentence is filler.

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

Completeness5/5

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

For a simple two-parameter fetch with no output schema, the description carries the return-value burden itself, enumerating fields and body structure including the length cap. Combined with the auth and caching notes, nothing needed to call it correctly is missing.

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 100%, so both the required 'id' (sourced from search results) and the 'lang' enum are fully documented in the schema itself. The description adds nothing about parameter syntax or format, so the baseline 3 applies.

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 ('Get the full text') and a precise resource ('one ruling or decision'), so it is unmistakably a single-document fetch rather than a search. This cleanly separates it from siblings like search_tax_rulings and rulings_by_article without opening any 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?

The '언제' line gives explicit context: use after picking a document to cite/summarize from search results, and don't judge from the summary alone. It implies the search-then-fetch workflow but does not name the search sibling or state when-not to use it, so it falls short of full routing guidance.

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

judge_optionsA
Read-onlyIdempotent

보기·주장 여러 개를 조문 1~5개와 한 번에 글자 대조해 보기마다 가장 맞는 조와 판정을 표로 돌려준다.

언제: 여러 보기(객관식 보기·고객 진술·주장 문장)를 특정 조문(15개)과 한 번에 대조할 때. 보기마다 verify_statement를 따로 부르지 않고 한 번 호출로 처리. 입력: statements(문자열 리스트 → id ①②③④⑤ 순서, 5개 초과 시 1,2,3… / {'id','text'} 리스트 → id 그대로), law_name(정식 법령명), articles('제112조' 등 15개), as_of(기준일, 생략 시 오늘), also_decree(기본 False — True면 각 조의 하위 위임 조문 중 law.links에서 원문인용이 확인된 것 최대 3개도 후보 조에 추가). 처리: law.version → law._full_units로 각 조 단위 수집 → claims.judge(보기마다 모든 후보 조에 compare 실행, 겹침 최대 조 채택, 동률이면 신호 있는 쪽). 반환: {법령, 시행본, 후보조(실제 대조한 조 목록), 보기별:[{id, 조, 판정, 근거:{위치,원문}, 대조, 단서, 겹침, 사유?}], 요약:{모순,구절 다름,차이 없음,판단 필요 — 각 id 목록}, 주의}. 판정: 숫자·양태·반대말·시점 신호 있으면 '모순', 신호 없이 구절이 다르면 '구절 다름'(같은 뜻인지 직접 판단), 다른 구절 없고 겹침 0.5 이상 '차이 없음', 없으면 '판단 필요'. 단, 준 조문과 겹침이 0.3 미만이면 신호가 있어도 '모순' 대신 '판단 필요'(사유: '겹침 낮음 — 다른 조문일 수 있음') — 준 조문과 무관한 보기에서 우연한 숫자·반대말 신호가 모순으로 나가는 것을 막음. 읽기 전용. 법제처 API 필요(LAW_OC). 조문 문구는 시행본 원문 그대로 — 지어내지 않는다. '판단 필요'는 글자 대조 결과일 뿐 법적 판단이 아님 — 원문으로 확인.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
as_ofNo기준일 YYYYMMDD. 생략하면 오늘
articlesYes대조할 조문 1~5개. '제112조'·'제28조의2' 형식
law_nameYes세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'
statementsYes보기·진술 문장들. 문자열 리스트(id는 ①②③④⑤ 순서), {'id','text'} 리스트(id 그대로), 또는 ①~⑤·ㄱ~ㄹ 번호가 든 문장 하나(자동 분리)
also_decreeNoTrue면 각 조의 law.links 하위 위임 조문 중 원문인용이 확인된 것(최대 3개)도 후보 조에 추가

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly/idempotent/non-destructive/openWorld), and the description adds substantial non-obvious context: the 법제처 API (LAW_OC) credential requirement, a guarantee that article text is verbatim from the in-force version and never fabricated, the verdict-classification rules, the 0.3-overlap guard that downgrades '모순' to '판단 필요', and the caveat that '판단 필요' is a textual-comparison result rather than legal advice.

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?

The definition is long but front-loaded with the purpose and organized under clear labels (언제/입력/처리/반환/판정), so it is scannable rather than rambling. The '처리' section exposes internal pipeline steps (law.version → law._full_units → claims.judge) that are the least essential part for a caller, but the rest of the sentences each carry actionable information.

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

Completeness5/5

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

With no output schema available, the description carries the full burden of describing the return shape (법령/시행본/후보조/보기별 fields/요약/주의) and it does so in detail, alongside the verdict taxonomy and the reading caveat. For a 6-parameter, multi-step judgment tool, nothing an agent needs to call and interpret it correctly is missing.

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 100% and the description's '입력' section largely mirrors the schema text (statement id ordering, articles format, as_of default, also_decree candidate expansion), so it adds little meaning beyond what the structured fields already state. Baseline 3 applies when the schema does the heavy lifting.

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?

The first sentence states a specific verb, resource and scope: batch character-level comparison of multiple statements/claims against 1–5 articles, returning a per-statement table of best-matching article and verdict. It also explicitly distinguishes itself from the sibling verify_statement ('보기마다 verify_statement를 따로 부르지 않고 한 번 호출로 처리'), so an agent can route between them 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 Guidelines5/5

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

The '언제' section gives an explicit trigger condition (multiple options/statements to compare against a specific 1–5 articles at once) and names the alternative approach (calling verify_statement per statement), including why this tool replaces that pattern. No inference is required to decide when to use it.

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

law_articleA
Read-onlyIdempotent

Get statute text as in force on a date, with optional Act → Decree → Rule chain. 조문 원문(기준일 시행본)과 3단 위임.

사실관계에 사업연도·귀속연도·과세기간이 있으면 as_of에 그 기간 말일을 넣는다(생략하면 오늘 시행본). 언제: 세액·요건 판단처럼 사실 발생 시점의 법령이 필요할 때. 해석·판례는 회신 당시 법 기준이므로 이 도구로 적용 연도 조문과 대조. 조문 번호를 모르면 find_article로 먼저 찾는다. 긴 조문(4,000자 초과)은 keyword(키워드가 든 항만) 또는 paragraph(특정 항)로 필요한 항만 조회 — 둘 다 없으면 항 목록과 안내 반환. 결과의 '연결'에 상위·하위 조문 위치가 있으니 그 조를 law_article로 이어서 조회. 반환: {법령, 조, 적용 시행일, 적용 기준일, 본문, 링크, 반환 범위, 연결, 읽기 주의(돌려준 본문의 단서·우선·제외 구절 원문, 최대 3개), 기준일 안내?, 최근 개정?, 다시 조회?} 또는 {위임체계: [{단계, 법령, 조, 적용 시행일, 본문}]} (+ 기본통칙·집행기준). 읽기 전용. 법제처 공식 API — 환경변수 LAW_OC(무료) 필요, 없으면 발급 안내 오류.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
as_ofNo기준일 YYYYMMDD. 사실관계에 사업연도·귀속연도·과세기간이 있으면 그 기간 말일을 넣는다(생략하면 오늘 시행본). 거래처·거래일처럼 특정 날짜가 필요하면 그 날짜
articleYes조문 번호. '제52조' 또는 '제28조의2' 형식. '제52조 제1항'처럼 항을 함께 줄 수 있음
keywordNo키워드가 들어간 항(①②…/제1항…)만 반환. 긴 조문(4,000자 초과)에서 항 번호 모를 때 사용
law_nameYes법령 정식 명칭. 예: '법인세법', '법인세법 시행령', '법인세법 시행규칙'
paragraphNo원하는 항만 지정. '①'·'1'·'제1항'·'②' 등. 호 지정: '②2호'·'제2항 제2호', 여러 항: '2,3'·'②,③'·'제2항, 제3항'. 그 항만 반환
with_rulesNoTrue면 그 조의 기본통칙 전문과 집행기준 항목도 함께
with_delegationNoTrue면 법률 조문에 연결된 시행령·시행규칙 위임 조문 전부(3단)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent, but the description adds what they don't: a required LAW_OC environment variable with a specific failure mode ('없으면 발급 안내 오류'), the long-article truncation fallback, and a full enumeration of the return envelope including '읽기 주의', '기준일 안내?' and the delegation-chain alternative shape. That is substantive behavioral disclosure, not restatement.

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 front-loaded with the one-line purpose, then uses labeled segments (언제, 반환) that scan well. It is dense but nearly every clause carries operational value; the main waste is the as_of advice appearing in both the description and the schema's as_of field.

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

Completeness5/5

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

With 8 parameters and no output schema, the description carries the return-shape burden and does so: it enumerates the keys of the normal response, the delegation-chain variant, and the caveats field. Nothing an agent needs to call this correctly or interpret the result appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds selection strategy beyond the schema: put the period-end date in as_of when the facts contain a fiscal/imputation year or tax period, and choose keyword vs paragraph based on whether the paragraph number is known. The as_of guidance is partly duplicated from the schema field text, limiting it to a 4.

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?

The opening sentence names a specific verb and resource ('Get statute text as in force on a date') plus the optional Act → Decree → Rule chain, which is a scope claim no sibling makes. The Korean subtitle repeats the same precise scope (조문 원문 + 3단 위임), so the agent can distinguish it from find_article (article lookup) and article_history.

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

Usage Guidelines5/5

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

It states when to use it ('세액·요건 판단처럼 사실 발생 시점의 법령이 필요할 때'), how it relates to rulings/interpretations (compare against the law in force at the year in question), and routes to the alternative explicitly ('조문 번호를 모르면 find_article로 먼저 찾는다'). It also gives an intra-tool decision rule: for articles over 4,000 characters use keyword or paragraph, otherwise get the paragraph list.

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

research_issueA
Read-onlyIdempotent

Bundle everything that applied to an issue at a past date. 그 해 기준 묶음 조회 — 사실 발생 시점의 조문(3단)·기본통칙·집행기준·그 조문을 인용한 해석·판례를 한 번에. 언제: 세무조사·불복처럼 특정 사업연도에 적용되는 근거를 정리할 때. 시점 판단을 코드로 고정한다 — 기준일(법인·소득·부가는 사업연도·과세기간 종료일, 양도는 양도일, 상속은 상속개시일, 증여는 증여일, 원천은 지급일), 기준일 조문과 현행 조문의 변경 여부, 해석·판례마다 등록일 당시 조문이 기준일 조문과 같은지. 반환: {기준일, 기준일 근거, 그 해 조문(3단), 현행과 비교, 기본통칙[], 집행기준[], 해석·판례[{…, 기준일 조문과}], 시기 규칙[]?, 주의}. 읽기 전용. 조문 부분은 LAW_OC 필요(없으면 해석·통칙만 반환). 10~30초.

NameRequiredDescriptionDefault
nNo해석·판례 종류별 최대 건수 1~20
taxNo세목. 부가세 과세기간 판단과 해석 필터에 사용 (선택)
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
eventNo사건 기준 세목. 양도=양도일(잔금일), 상속=상속개시일, 증여=증여일(등기 대상은 등기접수일), 원천=지급일. 주면 period는 날짜여야 함
periodYes사실이 속한 시점: '2023'(사업연도·과세기간), '2023-1'(부가 1기), '2023-12-31'(날짜)
articleYes조문 번호. '제52조' 또는 '제28조의2' 형식
law_nameYes세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'
registeredNo양도: 소유권이전등기 접수일 YYYY-MM-DD (잔금일보다 빠르면 이 날이 양도일, 선택)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, openWorld, idempotent, non-destructive. The description adds valuable behavioral details beyond annotations: it requires LAW_OC for the article portion (otherwise only interpretations/rulings are returned), notes a 10–30 second latency, and describes the return structure including timing rules and caveats. This is meaningful supplementary transparency.

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?

The description is front-loaded with the core purpose, then provides when-to-use, return structure, dependency, and latency. It is dense but every sentence conveys information necessary for a complex, multi-output tool. The bilingual repetition adds slight length but no wasted content.

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

Completeness4/5

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

Given the tool's complexity (8 params, composite output, no output schema), the description is largely complete: it covers purpose, usage context, return format, external dependency, and latency. It does not detail error handling or the '주의' field's semantics, but these are minor gaps for an experienced agent.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds semantic meaning by explaining how period is interpreted for different tax types and events (e.g., corporate/income/VAT use fiscal period end; transfer uses transfer date, inheritance uses death date, etc.) and ties event to date requirement. This exceeds the schema's individual param descriptions.

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 and resource: 'Bundle everything that applied to an issue at a past date.' It then enumerates the bundled components (article at past date, basic rules, execution standards, interpretations, cases), making the composite nature clear. It does not explicitly contrast with siblings like law_article or basic_rules, but the bundle concept distinguishes it.

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?

It gives a clear usage context: '언제: 세무조사·불복처럼 특정 사업연도에 적용되는 근거를 정리할 때' (when organizing the basis applicable to a specific fiscal year for tax audits/appeals). No when-not or explicit alternatives are provided, so it falls short of a 5, but the context is clear.

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

residency_checkA
Read-onlyIdempotent

비거주자·거주자 3단계 판정 (규칙 기반, 외부 호출 없이 동작).

언제: 판정 입력 데이터로 거주자·비거주자·이중거주자·조세조약 tie-break 결과를 즉시 확인할 때. 판단은 코드 규칙 기반 — Solar 키 없어도 동작. AI 판단 기본은 사용자 AI(호스트)가 수행 — 판정 코드는 고정. 반환: {입력, 법리, 1단계(소득세법), 2단계(이중거주자), 3단계(조세조약 tie-break), 최종 판정, 유사 판례 top3, 판단이 갈리는 지점·추가 확인 사항, 주의}. 읽기 전용, 외부 호출 없음(tax_treaty는 선택 호출, 실패 시 mock 안내 첨부).

판단 순서: (1) 소득세법 §1의2·시행령 §2(①③④)·§3·§4 → 주소/거소/파견 특례 → 거주자·비거주자·판단 보류 (2) 이중거주자 여부 (증명책임: 납세의무자, 대법원 2006두3964) (3) 조세조약 tie-break (항구적 주거 → 중대한 이해관계 중심지 → 일상적 거소 → 국적 → 상호합의)

  • 상대국이 주어지면 tax_treaty(country, keyword='거주자')로 조약 거주자 조문 번호·tie-break 원문 일부를 첨부한다. (오프라인/모의 환경에서는 treaty_country만 있으면 조약 체결국임을 전제하고 mock tie-break 원문을 첨부한다.)

  • rules.md의 유사 판례(사실관계 키워드 매칭 상위 3건, 판결요지 요약)를 첨부한다.

  • rules.md 6-4절(찾지 못함/추정) 판례는 인용하지 않는다.

  • 법리: 국내 생활관계만으로 판단(국내외 비교 아님, 대법원 92누11695)을 결과에 명시한다.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
notesNo추가 참고사항.
asset_descNo국내 자산 요약 (예: '서울 아파트 자가(부부 공동명의), 국내 증권사 주식, 성남 상가 임대').
exit_datesNo출국 날짜 목록(YYYY-MM-DD). entry_dates와 1:1 대응.
entry_datesNo입국 날짜 목록(YYYY-MM-DD). 제공 시 입국 다음날~출국일로 체류일수 자동 계산.
family_descNo국내 가족 상황 설명 (예: '배우자·자녀 2명 서울 거주, 자녀 국내 학교 재학').
nationalityNo국적 (조약 tie-break 4단계). 미입력 시 4단계 보류 → 판정 보류.미입력
dispatch_descNo파견/현지채용 상세 (예: 'S국 현지법인에 2018년 파견' 또는 '미국 현지법인에 퇴직 후 Senior Director로 신규 채용').
judgment_yearYes판정 대상 연도 (소득 지급 연도). 예: 2026
habitual_abodeNo일상적 거소.판단 보류
permanent_homeNo항구적 주거 소재. 단기체류용이 아닌 계속 사용 가능한 주거 (소유·임차 무관).없음
treaty_countryNo상대국 이름(한글). 예: '미국', '일본', '사우디아라비아'. 모르면 빈 문자열.
domestic_assetsNo국내 부동산·예금·사업용 자산 등 국내 소재 자산이 있는지 여부.
family_in_koreaNo국내에 생계를 같이하는 가족이 있는지 여부.
overseas_job_descNo해외 근무 형태 종합 설명.
domestic_stay_daysNo직전연도(판정 연도-1) 국내 체류일수. 직접 입력값. entry_dates를 제공하면 자동 계산이 우선.
job_needs_183_daysNo국내 183일 이상 거주를 통상 필요로 하는 직업인지 여부 (시행령 §2③1).
foreign_nationalityNo외국 국적이 있는지 여부.
permanent_home_descNo항구적 주거 상세 (예: '국내: 서울 아파트 자가(부부 공동), 국외: S국 아파트 임차(실사용 낮음)').
temporary_exit_daysNo관광·질병 치료 등 명백히 일시적인 출국 기간 합계(일). 시행령 §4②에 따라 국내 거소로 간주.
temporary_exit_reasonNo일시적 출국 사유 (예: '관광 5일, 치료 3일').
economic_activity_descNo경제활동 요약 (예: '국내 A건설 자문·임원 근로소득, 국내 C컨설팅 사업, 국내 B법인 배당').
local_hire_not_dispatchNo해외 현지법인에 '파견'이 아니라 퇴직 후 현지 채용된 경우 (§3 미적용, 대법원 2010두15056 구조).
foreign_nationality_descNo외국 국적·영주권 상세 (예: '미국 국적, 2015년 미국 영주권 취득').
public_official_overseasNo공무원으로서 국외 근무 중인지 여부 (시행령 §3 특례 적용 대상).
center_of_vital_interestsNo중대한 이해관계의 중심지(판례상 양국 사업규모·소득규모·체류일수 등 비교).판단 보류
domestic_business_activityNo국내 사업·경영 활동, 국내 사업자등록, 국내 근로소득 등 국내 경제활동 유무.
treaty_country_is_residentNo상대국 국내법상 거주자로 취급되는지 여부.
foreign_permanent_residencyNo외국 영주권 또는 그에 준하는 장기체류자격을 얻었는지 여부 (시행령 §2④).
dispatched_by_korean_companyNo내국법인(100% 출자 현지법인 포함) 파견 여부 (시행령 §3 특례 적용 대상).
treaty_country_resident_descNo상대국 거주자 근거 (예: '미국 영주권자로서 미국 세법 거주지 테스트 충족').

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent/non-destructive, but the description adds substantial context: rules-based with no Solar key required, host AI performs the judgment, tax_treaty is an optional external call that degrades to mock text, and it enumerates the full return payload. This tells the agent exactly how the tool behaves under failure and offline conditions — well beyond the annotations.

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?

Content is front-loaded (purpose, then when, then return shape, then the ordered steps) and each block is scannable. Minor waste: the 'no external calls' claim is restated ('외부 호출 없이 동작' at the top and '읽기 전용, 외부 호출 없음' later), and the mock-oriented parenthetical is somewhat verbose.

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

Completeness5/5

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

For a 31-parameter tool with no output schema, the description carries the missing structural burden: it enumerates the return object (input, legal basis, each of the three steps, final determination, top-3 precedents, divergence points, cautions) and spells out the legal source sequence and citation exclusions. Nothing essential for calling it correctly appears to be missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning by mapping parameters to the tie-break sequence (항구적 주거 → 중대한 이해관계 중심지 → 일상적 거소 → 국적 → 상호합의) and by explaining that tax_treaty(country, keyword='거주자') is invoked when a counterparty country is supplied. That interpretive layer on top of the schema's field labels is useful.

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?

The first line states a specific verb+resource: a rule-based 3-step resident/non-resident/dual-resident determination, and immediately scopes it as deterministic ('규칙 기반, 외부 호출 없이 동작'). It is distinguishable from judgement-heavy siblings such as residency_report because it declares the logic is fixed code, not host-AI inference.

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?

'언제:' gives an explicit trigger — when you have judgment input data and want the resident/non-resident/dual-resident/tie-break result immediately. It also clarifies the division of labor (host AI does the substantive judgment; the code is fixed). It stops short of naming an alternative sibling (e.g. residency_report) or when NOT to use it, so it is clear but not fully routable.

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

residency_reportA
Read-onlyIdempotent

residency_check 결과 + rules.md를 Solar Pro 4에 넣어 판정 검토 보고서(마크다운) 작성.

언제: residency_check 결과를 더 상세한 서술형 판정 검토 보고서(report_template.md 형식)로 만들 때. Solar 선택 구조(기존 korean-tax-mcp와 동일): UPSTAGE_API_KEY(클라우드) 또는 KOREAN_TAX_MCP_SOLAR_BASE_URL(온프렘) 설정 시 Solar가 보고서 작성, 키 없으면 친절한 안내 + residency_check 결과만 반환. 결론: 보고서 결론은 residency_check 결과를 바꾸지 못함(Solar는 서술만, 판정은 코드). 읽기 전용, 외부 호출: tax_treaty·rules.md 읽기·Solar 호출(키 있을 때만).

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
notesNo추가 참고사항.
asset_descNo국내 자산 요약.
exit_datesNo출국 날짜 목록(YYYY-MM-DD).
entry_datesNo입국 날짜 목록(YYYY-MM-DD).
family_descNo국내 가족 상황.
nationalityNo국적. 미입력 시 4단계 보류 → 판정 보류.미입력
dispatch_descNo파견/현지채용 상세.
judgment_yearYes판정 대상 연도. residency_check와 동일.
habitual_abodeNo일상적 거소.판단 보류
permanent_homeNo항구적 주거.없음
treaty_countryNo상대국 이름(한글).
domestic_assetsNo국내 자산 유무.
family_in_koreaNo국내 생계 가족 유무.
overseas_job_descNo해외 근무 형태.
domestic_stay_daysNo직전연도 국내 체류일수.
job_needs_183_daysNo183일 거주 필요 직업 여부.
foreign_nationalityNo외국 국적 유무.
permanent_home_descNo항구적 주거 상세.
temporary_exit_daysNo일시 출국 기간 합계(일).
temporary_exit_reasonNo일시 출국 사유.
economic_activity_descNo경제활동 요약.
local_hire_not_dispatchNo현지 채용(§3 미적용) 여부.
foreign_nationality_descNo외국 국적·영주권 상세.
public_official_overseasNo공무원 국외 근무 여부.
center_of_vital_interestsNo중대한 이해관계 중심지.판단 보류
domestic_business_activityNo국내 경제활동 유무.
treaty_country_is_residentNo상대국 거주자 여부.
foreign_permanent_residencyNo외국 영주권 유무.
dispatched_by_korean_companyNo내국법인 파견 여부.
treaty_country_resident_descNo상대국 거주자 근거.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations (readOnly/idempotent/openWorld), it discloses real behavioral traits: Solar selection via UPSTAGE_API_KEY (cloud) or KOREAN_TAX_MCP_SOLAR_BASE_URL (on-prem), a graceful fallback that returns only the residency_check result when no key exists, that the report conclusion cannot override the code-based judgment, and the external reads (tax_treaty, rules.md) plus the Solar call. This is well beyond what structured fields convey.

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 purpose, then cleanly labeled '언제:' and '결론:' sections; every line carries information. Slightly dense but no filler sentences.

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

Completeness4/5

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

For a 31-param, no-output-schema tool it covers purpose, trigger, auth/fallback behavior, and the non-authoritative nature of the output. The only mild gap is a brief note on what the returned markdown contains, but the format reference (report_template.md) largely covers that.

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 100% across 31 params, so the schema already documents each field and its enums. The description adds only that inputs mirror residency_check results; it gives no additional syntax, format, or interaction detail, so the baseline 3 applies.

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 names the exact inputs (residency_check 결과 + rules.md via Solar Pro 4). It also explicitly distinguishes itself from the sibling residency_check by noting the report only narrates while the judgment stays in code, so an agent can separate the two without opening a 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?

'언제:' gives an explicit trigger — when you want a detailed narrative review report in report_template.md format from a residency_check result. It implies the alternative (call residency_check directly for the judgment) but never names a 'do not use for X' exclusion, so routing guidance is clear but not fully complete.

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

rulings_by_articleA
Read-onlyIdempotent

List rulings and decisions that cite a specific statute article. 특정 조문을 관련 법령으로 인용한 해석·판례 모음. 언제: 조문을 알고 그 조문의 실무 해석을 모을 때(예: 법인세법 제52조 → 부당행위계산). 키워드만 있으면 search_tax_rulings. 반환: {법령, 조, 결과: [{구분, 문서번호, 제목, 요지, 세목, 일자, id, 링크}]}. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
nNo종류별 최대 건수 1~30
taxNo세목 필터 (선택)
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
sortNo정확도=검색 점수순(기본), 최신=등록일 내림차순정확도
kindsNo해석·판례 중 선택. 생략하면 둘 다
articleYes조문 번호. '제52조' 또는 '제28조의2' 형식
keywordNo결과를 좁힐 추가 키워드 (선택)
law_nameYes세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so '읽기 전용' is largely a restatement. However, the description adds genuinely new behavioral context: a public 국세법령정보시스템 lookup requiring no API key, and a 1-day cache for identical requests. The return shape is also disclosed. Missing only rate-limit/error behavior.

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

Conciseness5/5

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

Front-loaded purpose, then when-to-use, return shape, and behavioral notes in that order. Four short labeled blocks (언제/반환/behavior) with no filler; the example earns its place by disambiguating article citation.

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

Completeness5/5

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

No output schema exists, but the description supplies the return structure {법령, 조, 결과:[...]}. Combined with rich annotations and fully documented parameters, an agent has everything needed to call it 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 description coverage is 100%, so the schema already documents all 8 parameters with format hints, enums, and defaults. The description reinforces the law_name+article combination via its example but adds little syntax or format detail beyond what the schema provides, warranting the baseline 3.

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 ('List') and resource ('rulings and decisions that cite a specific statute article') in both English and Korean. It explicitly differentiates from the sibling search_tax_rulings, so an agent can choose between them 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 Guidelines5/5

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

The '언제' line gives explicit when-to-use guidance with a concrete example (법인세법 제52조 → 부당행위계산) and names the alternative condition ('키워드만 있으면 search_tax_rulings'). Both the selection condition and the fallback are stated.

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

search_formsA
Read-onlyIdempotent

Search statutory annexes (rate and useful-life tables) and official tax forms. 세법 별표·서식 검색. 언제: 세율표·기준내용연수표·상각률표 같은 별표나, 신고서·명세서·통지서 서식을 찾을 때. 조문 본문은 law_article. 반환: {결과: [{구분(별표/서식), 이름, 법령, 세법, 시행일, 내용(서식 안 글 600자), 링크}]}. 같은 서식은 최신 시행본만. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
nNo결과 수 1~20
kindNo별표(세율표·내용연수표 등)만 또는 서식(신고서·명세서)만. 생략하면 둘 다
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
queryYes별표·서식 이름에 들어가는 말. 예: '소득금액변동통지서', '국제거래명세서', '기준내용연수', '상각률표'

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world, non-destructive. The description adds non-obvious behavior: no API key required for the public NTS query, 1-day caching of identical requests, and dedup to the latest effective version of duplicate forms. It stops short of describing pagination or failure modes, so not a full 5.

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

Conciseness5/5

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

Front-loaded English summary followed by clearly labeled sections (언제 / 반환). Every sentence earns its place and the return shape is compactly specified.

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

Completeness5/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 supplies the return structure itself, and the usage section routes the agent correctly. For a 4-param filtered search tool, nothing needed to call it correctly is missing.

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 100%, so the schema already documents n, kind, lang, and query. The description only echoes query semantics ('별표·서식 이름에 들어가는 말') already captured in the schema, adding no syntax or formatting detail. Baseline 3 is correct.

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 (Search) and resource (statutory annexes and official tax forms), scoping it to rate/useful-life tables and forms. It explicitly contrasts with the sibling law_article ('조문 본문은 law_article'), so an agent can distinguish it without opening a schema.

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

Usage Guidelines5/5

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

The '언제' section names concrete triggers (rate tables, useful-life tables, depreciation tables, report/statement/notice forms) and the explicit exclusion sent to law_article. When-to-use and the alternative are both stated, leaving nothing to inference.

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

search_local_documentsA
Read-onlyIdempotent

Search PDFs you downloaded yourself, page by page — e.g. the OECD Transfer Pricing Guidelines. 내 PC의 PDF(예: OECD 이전가격 지침) 쪽 단위 검색. 언제: 저작권상 재배포할 수 없는 자료(OECD 지침 등)를 각자 받아 근거로 쓸 때. 문서는 이 패키지에 들어 있지 않음. 설정: 환경변수 KOREAN_TAX_MCP_DOCS에 PDF 폴더 경로, PDF 읽기용 pypdf 필요(uvx --with pypdf korean-tax-mcp). 반환: {결과: [{파일, 쪽, 점수, 발췌}], 색인}. 읽기 전용, 외부 호출 없음. 첫 호출 때 색인(파일이 크면 수십 초).

NameRequiredDescriptionDefault
kNo결과 수 1~10
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
queryYes찾을 내용. 영어·한국어·문단 번호(예: '2.14', 'comparability analysis', '무형자산')

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/openWorldHint/destructiveHint, so the safety profile is covered (and '읽기 전용, 외부 호출 없음' merely repeats it). The description adds genuinely new behavior: required env var KOREAN_TAX_MCP_DOCS, a pypdf dependency with the uvx invocation, and first-call index construction that can take tens of seconds on large files.

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 purpose, then cleanly labeled sections (언제 / 설정 / 반환). The bilingual duplication doubles the length, but for a Korean tax tool that is functional rather than padding, and each section carries distinct information.

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

Completeness5/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 takes on the return-value burden and delivers it ({결과: [{파일, 쪽, 점수, 발췌}], 색인}), plus setup prerequisites and index-building latency. Everything an agent needs to call this correctly and set expectations is present.

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 100%, so query (with multilingual and paragraph-number examples), k (1-10), and lang (en/ko semantics) are already fully documented in the schema. The description only implies page-level granularity and adds nothing about parameter syntax beyond the schema, so the baseline 3 applies.

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 concrete verb and resource ('Search PDFs you downloaded yourself, page by page') plus the scope ('문서는 이 패키지에 들어 있지 않음'), making it unmistakable against sibling tools that query built-in corpora (search_tax_rulings, law_article, casebook_search). An agent can tell this is a local-file search, not a server-side corpus lookup, without opening any 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?

The '언제' section gives an explicit usage condition: use it for copyright-restricted material like OECD guidelines that cannot be redistributed. It supplies clear context for selecting the tool, but names no alternative sibling and states no when-not-to-use case.

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

search_nts_publicationsA
Read-onlyIdempotent

Full-text search inside NTS official guidebooks and reports (transfer pricing, APA reports, overseas business guides, filing guides). 국세청 발간책자 본문 검색. 언제: 국세청이 공식 책자로 낸 실무 안내(이전가격·APA 연차보고서·해외진출기업 세무 가이드·신고 안내 등)의 설명이 필요할 때. 반환: {결과: [{책자, 발간일, 분야, 담당, 발췌, 링크}]}. 책자 원문은 국세법령정보시스템 전자도서관에서. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
nNo결과 수 1~20
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
queryYes찾을 내용. 예: '이전가격 정상가격 산출방법', '해외현지법인 명세서 제출', 'APA'

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/destructive=false, but the description adds non-obvious context: no API key required (공개 조회, 키 불필요), a 1-day cache for identical requests, and where the original full text lives. These are real operational facts not present in structured fields.

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

Conciseness5/5

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

Bilingual content is tightly organized with explicit 언제/반환 labels, front-loading purpose and use-case before return format and operational notes. Every line (search scope, when, return shape, cache/auth) earns its place with no filler.

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

Completeness4/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 supplies the return shape {결과: [{책자, 발간일, 분야, 담당, 발췌, 링크}]} plus auth and caching behavior, which is complete for a read-only search tool. Naming a differentiating sibling would have made it fully airtight.

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 100%, so the schema already documents n, lang, and query thoroughly (including examples and enum behavior). The description reinforces the return shape but adds no syntax or format detail beyond the schema, 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?

States a specific verb (full-text search) and resource (NTS official guidebooks/reports), and enumerates the covered publication types (transfer pricing, APA reports, overseas business guides, filing guides). This distinguishes it from generic siblings like search_tax_rulings or casebook_search, though it does not explicitly name a competing tool.

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?

The '언제:' line gives clear context for when to use it – when practical guidance from NTS official booklets is needed – with concrete examples of the covered material. It stops short of naming alternatives or stating when NOT to use it, so it does not reach a 5.

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

search_tax_rulingsA
Read-onlyIdempotent

Search Korean tax rulings and decisions by keyword. 국세청 해석(질의회신·과세기준자문·사전답변)과 판례(법원·조세심판·이의·심사)를 키워드로 찾는다. 언제: 쟁점은 있는데 조문을 모를 때 첫 단계로. 조문을 알면 rulings_by_article, 사례집 요약만 필요하면 casebook_search. 반환: {결과: [{구분, 문서번호, 제목, 요지(400자), 세목, 일자, id, 링크}], 주의}. 본문은 get_tax_ruling(id). 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
nNo종류별 최대 건수 1~30
taxNo세목 필터. 생략하면 전체
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
sortNo정확도=검색 점수순(기본), 최신=등록일 내림차순정확도
kindsNo해석=질의회신·과세기준자문·사전답변, 판례=법원·조세심판·이의·심사. 생략하면 둘 다
queryYes쟁점 키워드. 예: '업무무관 가지급금 인정이자', '폐업자 세금계산서 매입세액'
sinceNo등록일 시작 YYYYMMDD (선택)
untilNo등록일 끝 YYYYMMDD (선택)

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/openWorld/idempotent annotations, the description discloses that no API key is required, that identical requests are cached for one day, and that full text requires a follow-up get_tax_ruling(id) call. Auth, caching and follow-up behavior are exactly the traits annotations cannot express.

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-loads the purpose, then uses labeled sections (언제 / 반환 / constraints), which is easy to scan. The Korean/English mix and the inline enumeration of subtypes make it slightly dense, but virtually every clause carries information the agent needs.

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

Completeness5/5

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

There is no output schema, so the description supplies the return shape itself (구분, 문서번호, 제목, 요지 400자, 세목, 일자, id, 링크 plus 주의) and routes to get_tax_ruling for body text. Combined with the auth/caching notes, an agent has everything needed to call and consume the result 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 description coverage is 100%, so all eight parameters (n, tax, lang, sort, kinds, query, since, until) are already documented in the schema, including enum meanings and defaults. The description adds only a general notion of keyword search, so the baseline 3 applies with no extra semantic content.

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 (search) and resource (Korean tax rulings and decisions), then enumerates the exact document subtypes covered (질의회신·과세기준자문·사전답변 as 해석, 법원·조세심판·이의·심사 as 판례). An agent can distinguish this from rulings_by_article and casebook_search without opening any schema.

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

Usage Guidelines5/5

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

Explicit '언제' section names the triggering condition (issue known, statute unknown → first step) and names the two alternatives with the condition that selects each: rulings_by_article if the article is known, casebook_search if only summaries are needed. Nothing is left to inference.

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

tax_treatyA
Read-onlyIdempotent

Read Korea's bilateral tax treaties (96 countries) article by article, Korean or English. 한국의 조세조약 조문(국문·영문). 언제: 비거주자 원천징수 제한세율, 고정사업장, 거주자 판정 등 국제거래 쟁점. 국내법 조문은 law_article, 국제조세 해석은 search_tax_rulings(tax='국조'). 반환: {국가, 발효일, 조문: [{조, 제목, 영문 제목, 본문}], 링크} — 조문 번호는 조약마다 다르니 keyword로 찾는 게 정확. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
articleNo조문. 예: '제10조', '의정서'. 조약마다 번호 체계가 다르므로 주제로 찾을 땐 keyword 사용
countryYes체약국 이름(한글). 예: '미국', '중국', '일본', '베트남'. 모르면 아무 이름이나 넣으면 체결국 목록을 돌려줌
englishNoTrue면 영문 본문
keywordNo조문 제목·본문 검색어. 예: '배당', '고정사업장', '이자', 'dividends'

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, the description discloses that it is a public NTS lookup requiring no key and that identical requests are cached for one day. It also gives the return shape, adding real operational context.

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 purpose and organized under clear semantics (when / return / behavior) markers. The bilingual duplication inflates length, but each segment carries non-redundant content.

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

Completeness5/5

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

For a read tool with no output schema, the description covers purpose, when-to-use, alternatives, return structure, caching, and auth requirements. An agent has everything needed to select and invoke it correctly.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds genuine guidance: article numbering varies per treaty so keyword lookup is more reliable, and an unknown country name returns the contracting-state list. This meaningfully supplements the schema.

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?

Names a specific verb (read) and resource (Korea's bilateral tax treaties, 96 countries) with the article-by-article scope and language options. It also explicitly demarcates itself from siblings by pointing to law_article for domestic statutes and search_tax_rulings(tax='국조') for international tax interpretation.

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

Usage Guidelines5/5

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

The '언제' section lists concrete triggering scenarios (non-resident withholding limited rates, permanent establishment, residency determination) and routes the agent to explicit alternatives with the condition that selects them. Nothing is left to inference.

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

timing_rulesA
Read-onlyIdempotent

Timing rules table — tax liability establishment, profit/loss attribution business year, income receipt timing, VAT supply timing, with statutory basis.

시기 규칙표 — 납세의무 성립·손익 귀속사업연도·소득별 수입시기·부가 공급시기를 조문 근거와 함께. 언제: 사실관계의 날짜가 어느 사업연도·과세기간·공급시기에 속하는지 정할 때(예: 12월 인도·1월 대금, 선발급 세금계산서, 인정상여 귀속). 반환: {규칙: [{세목, 구분, 항목, 시기, 예외?(있으면), 근거}], 확인 시행본, 주의}. tax를 주면 세목 키 포함, tax 없이 부르면 공통 규칙과 세목별 건수. 읽기 전용. data/timing_rules.json 기반, 외부 호출 없음.

NameRequiredDescriptionDefault
taxNo세목 필터. '법인'·'소득'·'부가'·'양도'·'상증'·'국기'·'종부' 중 하나. 생략하면 공통 규칙과 세목별 건수
kindNo구분 필터. 예: '손익 귀속', '재화 공급시기', '용역 공급시기', '공급시기 특례', '근로소득 수입시기', '납세의무 성립'
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
keywordNo항목·시기·예외 중 어디에든 포함된 글자 필터 (선택)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real context: it is read-only, backed by data/timing_rules.json, and makes no external calls. It also discloses the response shape and the tax-present vs tax-absent branching, which the annotations cannot convey. Minor internal tension: it advertises Solar translation when lang='en' while also stating no external calls.

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?

Labeled blocks (언제 / 반환) front-load the use case and the return contract, so an agent can scan it quickly. The only waste is the full Korean-English duplication of every line, which roughly doubles length without adding information.

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

Completeness4/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 steps in to describe the return object (규칙 array with 세목/구분/항목/시기/예외/근거, plus 시행본 and 주의), which is what an agent needs to consume results. Combined with read-only and data-source disclosure, only the lang/Solar translation path is left slightly underspecified.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the description goes beyond it by explaining the branch semantics: passing tax yields tax-keyed rules, omitting it returns common rules plus per-tax counts. It does not clarify kind or keyword behavior beyond the schema's own text.

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?

Names the resource precisely (timing rules table) and enumerates the four rule families it covers: tax liability establishment, P/L business-year attribution, income receipt timing, and VAT supply timing, all with statutory basis. That is enough to separate it from law_article or basic_rules, though it never explicitly contrasts itself with those siblings.

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?

The "언제" block states the triggering condition and backs it with three concrete scenarios (December delivery/January payment, advance-issued tax invoice, deemed bonus attribution), which is unusually actionable. It stops short of naming an alternative tool or a when-not case, so it earns 4 rather than 5.

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

treaty_withholding_ratesA
Read-onlyIdempotent

Treaty withholding tax caps on dividends, interest and royalties for a country, with the clause text. 조세조약 원천징수 제한세율(배당·이자·사용료). 언제: "미국 법인에 배당하면 몇 %?" 같은 질문. 세율과 지분 요건을 조약 원문에서 뽑고 근거 조항((a)·(b)…)을 함께 준다. 조문 전체는 tax_treaty. 반환: {국가, 발효일, 제한세율: [{소득, 조문, 세율: [{세율(%), 근거}], 요건·기타: [{지분요건(%), 근거}], 개정 문서 언급, 주의}], 주의, 링크}. 자동 추출이라 개정 의정서·교환각서가 조문을 바꿨으면 '개정 문서 언급'에 표시 — 적용 전 확인. 지방소득세 등 국내법은 별도. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
incomeNo소득 종류. 생략하면 셋 다
countryYes체약국 이름(한글). 예: '미국', '중국', '일본', '싱가포르'

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the auto-extraction limitation and that amendments/exchange of notes are flagged in the 개정 문서 언급 field and must be verified before applying, plus a 1-day response cache, no API key required, and a public source (국세법령정보시스템). readOnlyHint is echoed but the caveat, caching and provenance context are net-new information.

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

Conciseness5/5

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

Front-loaded with a one-line English purpose, then clearly labeled blocks for when-to-use, return shape and caveats. Every sentence carries a constraint or routing fact; nothing is padded.

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

Completeness5/5

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

There is no output schema, but the description inlines the return structure (국가, 발효일, 제한세율 with per-income rates and 요건, plus 주의 and 링크), and adds the amendment and domestic-law caveats. An agent has everything needed to call it and interpret the response.

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 100%: lang, income and country are all documented in the schema, including the default of all three income types and the requirement for a Korean country name. The description adds no syntax or format detail beyond what the schema already carries, so the baseline 3 applies.

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 resource and scope: treaty withholding caps on dividends, interest and royalties with clause text, plus a one-line example question it answers. It explicitly carves out the boundary against the sibling tax_treaty ("조문 전체는 tax_treaty"), so an agent can distinguish the two 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 Guidelines5/5

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

Has an explicit 언제 (when) section keyed to a real question type ("미국 법인에 배당하면 몇 %?"), names the alternative tool for full article text, and rules out domestic taxes such as local income tax ("지방소득세 등 국내법은 별도"). When-to-use, when-not-to-use, and the alternative are all present.

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

verify_citationsA
Read-onlyIdempotent

Check that cited rulings, decisions and statute articles actually exist. 인용 검증 — 초안의 문서번호·조문이 실제로 있는지 확인. 언제: AI나 사람이 쓴 초안을 내보내기 전. 지어낸 문서번호·없는 조문을 걸러낸다. 반환: {문서번호: [{인용, 결과(확인/국세청 DB 미확인/조회 실패), 문서번호, 제목, 일자, 링크, 비슷한 번호}], 조문: [{인용, 결과, 적용 시행일}], 요약, 주의}. '확인'은 존재만 뜻함 — 내용 일치는 get_tax_ruling·law_article 본문으로 확인. 읽기 전용. 조문 확인은 LAW_OC 필요.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
textYes보고서·의견서·답변 초안 (해석·판례 문서번호와 '법인세법 제52조' 같은 조문 인용이 들어간 글, 최대 2만 자)
as_ofNo조문 존재를 확인할 기준일 YYYYMMDD. 생략하면 오늘

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds genuinely new behavioral context: it states the tool is 읽기 전용, that statute checking requires LAW_OC, and that '확인' means existence only (not content match). The one gap is that it doesn't warn about unverified/failed lookups beyond naming the 결과 values.

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-loads the English purpose statement, then uses compact labeled sections (언제 / 반환) so an agent can scan quickly. The enumerated return keys are dense but each carries meaning; there is little waste.

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

Completeness4/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 correctly takes on the burden of describing the return shape (문서번호/조문/요약/주의) and the caveat about existence vs. content. Auth prerequisite (LAW_OC) and the existence-only semantic are covered, leaving little an agent needs that is missing.

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 100%, so the schema already documents text, lang and as_of fully. The description adds no syntax or format detail for these parameters, so the baseline 3 applies; its detail is spent on return values rather than inputs.

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: 'Check that cited rulings, decisions and statute articles actually exist.' It also explicitly scopes itself against content-matching siblings, noting that '확인'은 존재만 뜻함 and that content verification belongs to get_tax_ruling·law_article. An agent can distinguish it from verify_statement and law_article without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('언제: AI나 사람이 쓴 초안을 내보내기 전') and the goal it serves (filtering fabricated document numbers and non-existent articles). It also names the alternative tools for the adjacent task of content matching, so the when/when-not boundary is clear.

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

verify_statementA
Read-onlyIdempotent

진술·주장을 조문 원문과 글자 수준에서 대조해 모순 신호(숫자·양태·반대말·시점)와 단서 누락을 돌려준다.

언제: 보기 문장·주장·고객 진술이 특정 조문과 맞는지 확인할 때. 조문을 읽고도 놓치는 차이를 표로 보여 준다 — 법적 판단을 대신하지 않는다. 반환: {법령, 조, 시행본, 판정('모순'|'구절 다름'|'차이 없음'|'판단 필요'), 근거:{위치, 원문}, 대조:[{종류,진술,조문}], 단서:[...], 겹침, 주의}.

  • 판정: 숫자·양태·반대말·시점 신호 하나라도 있으면 '모순', 신호는 없지만 진술과 원문 구절이 다르면 '구절 다름'(대조에 진술·조문 구절을 원문 그대로 — 같은 뜻인지는 직접 판단), 다른 구절도 없고 겹침 0.5 이상 '차이 없음', 겹침 0.5 미만 '판단 필요'. 읽기 전용. 법제처 API 필요(LAW_OC). 조문 문구는 시행본 원문 그대로 — 지어내지 않는다.

NameRequiredDescriptionDefault
langNoOutput language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'ko
as_ofNo기준일 YYYYMMDD. 생략하면 오늘
articleYes조문 번호. '제112조' 또는 '제21조' 형식
law_nameYes정식 법령명. 예: '국세징수법', '소득세법', '법인세법', '국세기본법'
paragraphNo특정 항만 대조. '②'·'제2항'·'2' 등. 주면 그 항·하위 단위만 대조
statementYes대조할 진술·한 문장·주장. 예: '관할 세무서장은 체납자가 2회 체납하고 체납액이 2천만원인 경우 사업의 정지 또는 허가등의 취소를 요구할 수 있다.'

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, but the description adds value: the LAW_OC API dependency, an explicit no-fabrication guarantee ('지어내지 않는다'), and the rule logic that triggers each verdict. These are behavioral traits the annotations cannot express.

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?

Purpose and usage are front-loaded in two short lines, and the return block is dense but justified since there is no output schema. The verdict-rule sentence is long and nested, costing some readability, but no sentence is wasted.

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

Completeness5/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 fully carries the return contract: the verdict enum, the signal-based rule, the 0.5 overlap threshold, and the shape of 대조/단서 arrays. Combined with API and read-only notes, an agent has everything needed to invoke and interpret it.

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 100%, so all six parameters are already documented in the schema; the description adds no per-parameter syntax or format detail (e.g., how paragraph '②' interacts with article). Baseline 3 applies when the schema does the heavy lifting.

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 precise verb (글자 수준 대조) and resource (조문 원문), plus the exact output signal ('모순 신호(숫자·양태·반대말·시점)와 단서 누락'). An agent can immediately tell this is a statement-vs-statute comparison tool, not a search or lookup tool, distinguishing it from siblings like law_article or find_article.

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?

The '언제' line gives explicit context ('보기 문장·주장·고객 진술이 특정 조문과 맞는지 확인할 때') and an exclusion ('법적 판단을 대신하지 않는다'). It does not name a sibling alternative (e.g., verify_citations) or say when NOT to use it versus those, so it falls short of a 5.

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. 2 tool updatesv0.11.1
    • Changedlaw_article1 field changed
      • changedInput schema / properties / as_of / description
        Previous value: -"기준일 YYYYMMDD. 그날 시행 중이던 연혁본. 생략하면 오늘"New value: +"기준일 YYYYMMDD. 사실관계에 사업연도·귀속연도·과세기간이 있으면 그 기간 말일을 넣는다(생략하면 오늘 시행본). 거래처·거래일처럼 특정 날짜가 필요하면 그 날짜"
    • Addedtiming_rules
  2. 1 tool updatev0.11.0
    • Changedlaw_article1 field changed
      • changedInput schema / properties / paragraph / description
        Previous value: -"원하는 항만 지정. '①'·'1'·'제1항'·'②' 등. 그 항만 반환"New value: +"원하는 항만 지정. '①'·'1'·'제1항'·'②' 등. 호 지정: '②2호'·'제2항 제2호', 여러 항: '2,3'·'②,③'·'제2항, 제3항'. 그 항만 반환"
  3. 22 tool updatesv0.9.1
    • Addedarticle_history
    • Changedbasic_rules1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Changedcasebook_search1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Addedcompare_outcomes
    • Changedcompare_with_case1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Changedexecution_standards1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Addedfind_article
    • Changedget_tax_ruling1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Addedjudge_options
    • Changedlaw_article4 fields changed
      • changedInput schema / properties / article / description
        Previous value: -"조문 번호. '제52조' 또는 '제28조의2' 형식"New value: +"조문 번호. '제52조' 또는 '제28조의2' 형식. '제52조 제1항'처럼 항을 함께 줄 수 있음"
      • addedInput schema / properties / keyword
        Added value: +{
        +  "default": "",
        +  "description": "키워드가 들어간 항(①②…/제1항…)만 반환. 긴 조문(4,000자 초과)에서 항 번호 모를 때 사용",
        +  "title": "Keyword",
        +  "type": "string"
        +}
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
      • addedInput schema / properties / paragraph
        Added value: +{
        +  "default": "",
        +  "description": "원하는 항만 지정. '①'·'1'·'제1항'·'②' 등. 그 항만 반환",
        +  "title": "Paragraph",
        +  "type": "string"
        +}
    • Changedresearch_issue3 fields changed
      • addedInput schema / properties / event
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "양도",
        +        "상속",
        +        "증여",
        +        "원천"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "사건 기준 세목. 양도=양도일(잔금일), 상속=상속개시일, 증여=증여일(등기 대상은 등기접수일), 원천=지급일. 주면 period는 날짜여야 함",
        +  "title": "Event"
        +}
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
      • addedInput schema / properties / registered
        Added value: +{
        +  "default": "",
        +  "description": "양도: 소유권이전등기 접수일 YYYY-MM-DD (잔금일보다 빠르면 이 날이 양도일, 선택)",
        +  "title": "Registered",
        +  "type": "string"
        +}
    • Addedresidency_check
    • Addedresidency_report
    • Changedrulings_by_article3 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
      • changedInput schema / properties / sort / default
        Previous value: -"최신"New value: +"정확도"
      • changedInput schema / properties / sort / description
        Previous value: -"정렬"New value: +"정확도=검색 점수순(기본), 최신=등록일 내림차순"
    • Addedsearch_forms
    • Changedsearch_local_documents1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Changedsearch_nts_publications1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Changedsearch_tax_rulings3 fields changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
      • changedInput schema / properties / sort / default
        Previous value: -"최신"New value: +"정확도"
      • changedInput schema / properties / sort / description
        Previous value: -"최신=등록일 내림차순, 정확도=검색 점수순"New value: +"정확도=검색 점수순(기본), 최신=등록일 내림차순"
    • Changedtax_treaty1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Addedtreaty_withholding_rates
    • Changedverify_citations1 field changed
      • changedInput schema / properties / lang / description
        Previous value: -"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'"New value: +"Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), other Korean texts returned with a host_ai_translate instruction (your AI translates); Solar machine translation only when UPSTAGE_API_KEY or on-prem Solar is configured. 기본 'ko'"
    • Addedverify_statement
  4. 13 tool updatesv0.4.0
    • Changedbasic_rules4 fields changed
      • addedInput schema / properties / article / description
        Added value: +"법 조문('제52조'). 주면 그 조에 딸린 통칙 전부, 생략하면 전체에서 keyword로 검색"
      • addedInput schema / properties / keyword / description
        Added value: +"통칙 제목·본문 검색어 (선택)"
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "ko",
        +  "description": "Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'",
        +  "enum": [
        +    "ko",
        +    "en"
        +  ],
        +  "title": "Lang",
        +  "type": "string"
        +}
      • addedInput schema / properties / law_name / description
        Added value: +"세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'"
    • Changedcasebook_search7 fields changed
      • changedInput schema / properties / area / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "법인",
        +      "부가",
        +      "소득",
        +      "상증",
        +      "양도",
        +      "국기",
        +      "국조",
        +      "종부"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / area / description
        Added value: +"분야 필터 (선택)"
      • addedInput schema / properties / k / description
        Added value: +"결과 수 1~10"
      • addedInput schema / properties / k / maximum
        Added value: +10
      • addedInput schema / properties / k / minimum
        Added value: +1
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "ko",
        +  "description": "Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'",
        +  "enum": [
        +    "ko",
        +    "en"
        +  ],
        +  "title": "Lang",
        +  "type": "string"
        +}
      • addedInput schema / properties / query / description
        Added value: +"쟁점 문장이나 키워드"
    • Changedcompare_with_case5 fields changed
      • addedInput schema / properties / facts / description
        Added value: +"사실관계: 누가·언제·무엇을·얼마 (최대 1500자 사용)"
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "ko",
        +  "description": "Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'",
        +  "enum": [
        +    "ko",
        +    "en"
        +  ],
        +  "title": "Lang",
        +  "type": "string"
        +}
      • addedInput schema / properties / our_view / description
        Added value: +"우리 주장: 과세 논리 또는 납세자 주장 한두 문장"
      • changedInput schema / properties / tax / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "법인",
        +      "부가",
        +      "소득",
        +      "양도",
        +      "상증",
        +      "국기",
        +      "국징",
        +      "조특",
        +      "국조",
        +      "종부"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / tax / description
        Added value: +"세목 필터 (선택)"
    • Changedexecution_standards4 fields changed
      • addedInput schema / properties / article / description
        Added value: +"법 조문('제52조'). 주면 그 조의 집행기준 항목만"
      • addedInput schema / properties / keyword / description
        Added value: +"항목 제목 검색어 (선택)"
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "ko",
        +  "description": "Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'",
        +  "enum": [
        +    "ko",
        +    "en"
        +  ],
        +  "title": "Lang",
        +  "type": "string"
        +}
      • addedInput schema / properties / law_name / description
        Added value: +"세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'. 소득세는 '소득세법'"
    • Changedget_tax_ruling2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"search_tax_rulings·rulings_by_article 결과의 id (숫자 12~20자리)"
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "ko",
        +  "description": "Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'",
        +  "enum": [
        +    "ko",
        +    "en"
        +  ],
        +  "title": "Lang",
        +  "type": "string"
        +}
    • Changedlaw_article6 fields changed
      • addedInput schema / properties / article / description
        Added value: +"조문 번호. '제52조' 또는 '제28조의2' 형식"
      • addedInput schema / properties / as_of / description
        Added value: +"기준일 YYYYMMDD. 그날 시행 중이던 연혁본. 생략하면 오늘"
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "ko",
        +  "description": "Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'",
        +  "enum": [
        +    "ko",
        +    "en"
        +  ],
        +  "title": "Lang",
        +  "type": "string"
        +}
      • addedInput schema / properties / law_name / description
        Added value: +"법령 정식 명칭. 예: '법인세법', '법인세법 시행령', '법인세법 시행규칙'"
      • addedInput schema / properties / with_delegation / description
        Added value: +"True면 법률 조문에 연결된 시행령·시행규칙 위임 조문 전부(3단)"
      • addedInput schema / properties / with_rules / description
        Added value: +"True면 그 조의 기본통칙 전문과 집행기준 항목도 함께"
    • Addedresearch_issue
    • Changedrulings_by_article13 fields changed
      • addedInput schema / properties / article / description
        Added value: +"조문 번호. '제52조' 또는 '제28조의2' 형식"
      • addedInput schema / properties / keyword / description
        Added value: +"결과를 좁힐 추가 키워드 (선택)"
      • changedInput schema / properties / kinds / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "해석",
        +        "판례"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / kinds / description
        Added value: +"해석·판례 중 선택. 생략하면 둘 다"
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "ko",
        +  "description": "Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'",
        +  "enum": [
        +    "ko",
        +    "en"
        +  ],
        +  "title": "Lang",
        +  "type": "string"
        +}
      • addedInput schema / properties / law_name / description
        Added value: +"세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'"
      • addedInput schema / properties / n / description
        Added value: +"종류별 최대 건수 1~30"
      • addedInput schema / properties / n / maximum
        Added value: +30
      • addedInput schema / properties / n / minimum
        Added value: +1
      • addedInput schema / properties / sort / description
        Added value: +"정렬"
      • addedInput schema / properties / sort / enum
        Added value: +[
        +  "최신",
        +  "정확도"
        +]
      • changedInput schema / properties / tax / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "법인",
        +      "부가",
        +      "소득",
        +      "양도",
        +      "상증",
        +      "국기",
        +      "국징",
        +      "조특",
        +      "국조",
        +      "종부"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / tax / description
        Added value: +"세목 필터 (선택)"
    • Addedsearch_local_documents
    • Addedsearch_nts_publications
    • Changedsearch_tax_rulings13 fields changed
      • changedInput schema / properties / kinds / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "enum": [
        +        "해석",
        +        "판례"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / kinds / description
        Added value: +"해석=질의회신·과세기준자문·사전답변, 판례=법원·조세심판·이의·심사. 생략하면 둘 다"
      • addedInput schema / properties / lang
        Added value: +{
        +  "default": "ko",
        +  "description": "Output language. 'en': English keys and labels, official English texts where available (tax treaties, statutes), titles/summaries machine-translated by Upstage Solar when UPSTAGE_API_KEY is set. 기본 'ko'",
        +  "enum": [
        +    "ko",
        +    "en"
        +  ],
        +  "title": "Lang",
        +  "type": "string"
        +}
      • addedInput schema / properties / n / description
        Added value: +"종류별 최대 건수 1~30"
      • addedInput schema / properties / n / maximum
        Added value: +30
      • addedInput schema / properties / n / minimum
        Added value: +1
      • addedInput schema / properties / query / description
        Added value: +"쟁점 키워드. 예: '업무무관 가지급금 인정이자', '폐업자 세금계산서 매입세액'"
      • addedInput schema / properties / since / description
        Added value: +"등록일 시작 YYYYMMDD (선택)"
      • addedInput schema / properties / sort / description
        Added value: +"최신=등록일 내림차순, 정확도=검색 점수순"
      • addedInput schema / properties / sort / enum
        Added value: +[
        +  "최신",
        +  "정확도"
        +]
      • changedInput schema / properties / tax / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "법인",
        +      "부가",
        +      "소득",
        +      "양도",
        +      "상증",
        +      "국기",
        +      "국징",
        +      "조특",
        +      "국조",
        +      "종부"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / tax / description
        Added value: +"세목 필터. 생략하면 전체"
      • addedInput schema / properties / until / description
        Added value: +"등록일 끝 YYYYMMDD (선택)"
    • Addedtax_treaty
    • Addedverify_citations
  5. 8 tool updatesv0.1.1
    • First observedbasic_rules
    • First observedcasebook_search
    • First observedcompare_with_case
    • First observedexecution_standards
    • First observedget_tax_ruling
    • First observedlaw_article
    • First observedrulings_by_article
    • First observedsearch_tax_rulings

TDQS

A4.2/5.0

Scored across 23 tools

Disambiguation4/5

Most tools target a clearly distinct source or action (statute text vs. article history vs. rulings search vs. treaty vs. forms), and each description includes an explicit "when to use" section that cross-references the alternative tool. A few pairs remain genuinely easy to confuse—compare_outcomes vs. compare_with_case, verify_statement vs. judge_options (single vs. batch), and search_tax_rulings vs. casebook_search vs. rulings_by_article—though the descriptions do draw the distinctions for a careful agent.

Naming Consistency4/5

All names are uniformly snake_case with no case-style mixing, and the majority follow a verb_noun or noun_action pattern (search_tax_rulings, get_tax_ruling, find_article, verify_citations, compare_outcomes, judge_options). The deviation is a handful of bare noun names (law_article, basic_rules, timing_rules, tax_treaty, execution_standards) and inverted forms (casebook_search), which is readable but not a single predictable convention.

Tool Count4/5

23 tools is at the heavy end, but each maps to a genuinely separate data source (statutes, decrees, rulings, casebook, execution standards, treaties, forms, publications, local PDFs) rather than redundant wrappers. The server's scope—Korean tax law research end to end—justifies the breadth, though an agent has a lot to sort through on first use.

Completeness5/5

The lifecycle is unusually well covered: locate article by keyword (find_article), read in-force text at a date with delegation chain (law_article), check amendment history (article_history), pull official interpretations (basic_rules, execution_standards, rulings_by_article, search_tax_rulings, get_tax_ruling), and validate outputs (verify_statement, judge_options, verify_citations). Specialized workflows (residency_check/residency_report, treaty_withholding_rates, timing_rules, compare_outcomes) close the usual dead ends for a read-only legal-research domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables AI systems to search, retrieve, and analyze Korean legal information from the National Law Information API (law.go.kr), including laws, administrative rules, English translations, and law-ordinance linkages.
    26
    2
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables real-time search and analysis of Korean laws, legal precedents, and administrative rules through the National Law Information Center Open API, allowing AI agents to access official legal information for contract review, compliance, and legal research.
    75
    -
  • 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
    D
    maintenance
    Enables AI assistants to query and analyze Korean law, including statutes, precedents, and ordinances, with citation verification and impact analysis.
    10
    1,627 npm
    MIT