korean-tax-mcp
Korean tax law MCP server for AI agents: read-only access to Korean tax rulings, statutes, basic rules, treaties, publications, and citation checks.
Search NTS rulings/decisions by keyword, tax type, kind, date, and sort; get full text by id.
Find rulings/decisions citing a specific statute article, e.g. Corporate Tax Act Article 52.
Read NTS Basic Rules and Tax Execution Standards items with page/link data.
Search the 2025 NTS Tax Interpretation Casebook offline.
Read statute text as in force on any date, with Act → Decree → Rule delegation chain, basic rules, and execution standards.
Compare your facts/view against rulings as supports, contradicts, or distinguish (requires Upstage key).
Research an issue for a tax year/period: bundled statutes, rules, standards, rulings, and changes vs current law.
Verify citations in a draft: check document numbers/articles exist and flag fabricated or missing ones.
Read Korea's bilateral tax treaties for 96 countries by article or keyword in Korean or English.
Full-text search NTS guidebooks and reports, including transfer pricing, APA, overseas business, and filing guides.
Search your own local PDFs, such as OECD Transfer Pricing Guidelines, page by page.
Supports English output via lang=en, with official English texts where available and translations via Upstage Solar.
Most lookups need no API key; LAW_OC is needed for statute/delegation and article checks, and UPSTAGE_API_KEY for fact comparison.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@korean-tax-mcp법인세법 제52조 관련 최근 질의회신 보여줘"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
korean-tax-mcp — Korea Tax Law MCP (한국 세법)

· English
Korea (South Korea) tax law for AI agents. Search National Tax Service rulings, court and Tax Tribunal decisions, basic rules, execution standards and Korea's tax treaties (96 countries); read statutes as in force on any past date with the Act → Decree → Rule chain; bundle everything that applied in a given tax year; and verify citations in a draft. 13 tools, read-only, no API key needed for lookups. Every tool supports lang="en" for English output (official English treaty and statute texts; machine-translated summaries via Upstage Solar). → English README
세법 쟁점을 AI에 물으면, 국세청 해석·판례·기본통칙·조문을 문서번호와 함께 가져옵니다.
이렇게 물어보세요
"법인세법 제52조를 인용한 최근 질의회신·판례 보여줘"
"폐업자에게 받은 세금계산서 매입세액 공제 — 관련 판례 본문 요약해줘"
"가지급금 인정이자 기본통칙이랑 집행기준 같이 보여줘"
"2023년 12월 31일 기준 법인세법 시행규칙 제43조 원문"
"대표이사 무상 대여, 인정이자 익금산입 논리 — 지지·반대 판례 대조해줘"
"2019 사업연도 기준으로 법인세법 제52조 관련 조문·통칙·해석 정리해줘"
"이 의견서 초안에 인용된 문서번호랑 조문 실제로 있는지 검증해줘"
"한미 조세조약에서 배당 제한세율 조문 보여줘"
"국세청 책자에서 정상가격 산출방법 설명 찾아줘"
설치 한 줄 — claude mcp add korean-tax -- uvx korean-tax-mcp
한국 세법 근거를 찾는 MCP 서버입니다. Claude·Cursor 같은 AI 도구에 붙이면 세법 쟁점을 물을 때 국세청 해석·판례·통칙·조문을 문서번호와 함께 찾아 줍니다.
국세청 질의회신·과세기준자문·사전답변, 법원 판례·조세심판·이의·심사 — 최신순 검색과 본문 전문
조문별 모음 — "법인세법 제52조를 인용한 해석·판례"
국세 기본통칙 전문, 세법집행기준 항목
시점별 조문 — 그날 시행 중이던 조문, 법률 → 시행령 → 시행규칙 위임 체계
국세청 「2025 세법해석 사례집」 96건 색인
사실관계 대조 — 우리 주장과 해석·판례가 지지·반대·구별 필요인지 (Upstage Solar)
설치
uv가 있으면 설치 없이 바로 실행됩니다.
{
"mcpServers": {
"korean-tax": {
"command": "uvx",
"args": ["korean-tax-mcp"],
"env": { "LAW_OC": "법제처 OC(선택)", "UPSTAGE_API_KEY": "Upstage 키(선택)" }
}
}
}Claude Code: claude mcp add korean-tax -- uvx korean-tax-mcp
Related MCP server: Korean Law MCP Server
키
키 | 필요한 도구 | 발급 |
없음 | 해석·판례 검색과 본문, 조문별 모음, 기본통칙, 집행기준, 사례집, 인용 검증(문서번호) | — |
|
| open.law.go.kr 무료 신청 |
|
|
도구
도구 | 하는 일 |
| 해석·판례 검색 (세목·종류·기간·최신순/정확도순) |
| 본문 전문 — 사실관계·질의·회신 / 주문·이유, 관련 조문 |
| 특정 조문을 인용한 해석·판례 |
| 국세 기본통칙 전문 (조문별) |
| 세법집행기준 항목·쪽·링크 |
| 2025 세법해석 사례집 검색 |
| 시점별 조문 원문, 3단 위임, 통칙·집행기준 함께 |
| 사실관계·논리 대조 (지지·반대·구별 필요) |
| 그 해 기준 묶음 — 사업연도·과세기간 종료일 기준 조문 3단·통칙·집행기준·해석, 현행 대비 조문 변경, 해석마다 당시 조문과 같은지 표시 |
| 조세조약 96개국 조문 (국문·영문, 키워드로 배당·고정사업장 등) |
| 국세청 발간책자 본문 검색 — 이전가격·APA 연차보고서·해외진출기업 세무 가이드 등 |
| 내 PC의 PDF 검색 — OECD 이전가격 지침처럼 각자 받은 자료를 쪽 단위로 |
| 인용 검증 — 초안의 문서번호·조문이 실제로 있는지 (지어낸 번호·없는 조문 찾기) |
함께 쓰면 좋은 MCP
일반 법령 검색·판례 전반·인용 실존 검증은 류승인 주무관님의 korean-law-mcp를 함께 붙여 쓰세요. korean-law-mcp가 법령 전반을, 이 서버가 세법 해석·판례·기본통칙·집행기준을 맡는 구성입니다.
{
"mcpServers": {
"korean-law": { "...": "korean-law-mcp 설정은 해당 저장소 README 참고" },
"korean-tax": { "command": "uvx", "args": ["korean-tax-mcp"] }
}
}유의
해석·판례는 회신·선고 당시 법 기준입니다. 적용 연도 조문(
law_article의as_of)과 대조하세요.국세법령정보시스템(taxlaw.nts.go.kr)의 공개 조회를 사용합니다. 서버 부담을 줄이려고 같은 요청은 1일 캐시, 호출 간격은 0.5초 이상입니다.
집행기준 본문은 책자(PDF)로만 제공돼 항목·쪽·링크까지만 돌려줍니다.
도구 결과는 검토 보조 자료이며 세무 자문이 아닙니다.
출처
국세청 국세법령정보시스템 · 법제처 국가법령정보 공동활용 · 국세청 「2025 세법해석 사례집」
작성 Mia(윤승미) · Upstage
라이선스
MIT
Available Tools
13 toolsbasic_rulesARead-onlyIdempotent
Get NTS Basic Rules (국세 기본통칙) full text by article or keyword. 국세 기본통칙 전문(최신 고시본). 언제: 조문의 국세청 공식 해석 기준이 필요할 때. 실무 집행 기준 목록은 execution_standards, 개별 사안 해석은 rulings_by_article. 반환: {법령, 기준(고시 연도), 통칙: [{통칙(번호·제목), 본문}], 링크}. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | 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' | ko |
| article | No | 법 조문('제52조'). 주면 그 조에 딸린 통칙 전부, 생략하면 전체에서 keyword로 검색 | |
| keyword | No | 통칙 제목·본문 검색어 (선택) | |
| law_name | Yes | 세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/destructive=false, so the safety profile is covered; the description's '읽기 전용' is partly redundant. It does add real behavioral context beyond the annotations: no API key required, public 조회 on the 국세법령정보시스템, and a 1-day cache for identical requests — useful for an agent deciding on repeat calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then cleanly sectioned into 언제 (when) and 반환 (return) blocks. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape ({법령, 기준, 통칙[{번호·제목, 본문}], 링크}) plus auth and caching behavior. Nothing an agent needs to call and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents lang, article, keyword, and law_name with examples and defaults. The description restates 'by article or keyword' but adds no syntax or format detail beyond what the schema provides; baseline 3 is appropriate 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get NTS Basic Rules full text') with two access modes (by article or keyword), and explicitly contrasts itself with two named siblings. An agent can distinguish it from execution_standards 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' clause gives the triggering condition (when the official NTS interpretation standard for a statutory article is needed) and names the alternatives with the condition that selects each: execution_standards for practical enforcement lists, rulings_by_article for case-specific interpretation. Explicit when/when-not/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
casebook_searchARead-onlyIdempotent
Search the NTS 2025 Tax Interpretation Casebook (96 curated cases). 국세청 「2025 세법해석 사례집」 쟁점 검색. 언제: 국세청이 대표 사례로 고른 해석을 빠르게 볼 때(오프라인, 즉시). 최신·전체 해석은 search_tax_rulings. 반환: {결과: [{문서번호, 회신일, 분야, 쟁점, 답변요지, 쪽, 점수, 인용}]}. 읽기 전용, 외부 호출 없음.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | 결과 수 1~10 | |
| area | No | 분야 필터 (선택) | |
| lang | No | 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' | ko |
| query | Yes | 쟁점 문장이나 키워드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, and the description partly repeats that ('읽기 전용, 외부 호출 없음'). However it adds genuinely new traits: the 'offline, instant' latency profile and, since no output schema exists, an explicit return shape showing each result carries score and citation. The repetition of annotation content keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then cleanly labeled sections for when ('언제') and return ('반환'). Every sentence carries distinct information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, scope (96 cases), when-to-use, the competing sibling, and the return structure despite there being no output schema. Combined with annotations that fully cover the safety profile, 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.
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 query, k, area, and lang (including the lang behavior and the enum values). The description adds no parameter meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search the NTS 2025 Tax Interpretation Casebook) and scopes it precisely with '96 curated cases.' It also names the sibling search_tax_rulings so the agent can distinguish this curated/offline corpus from the full/latest rulings search 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' clause gives an explicit when: quickly viewing NTS-selected representative interpretations (offline, instant). It also names the alternative ('최신·전체 해석은 search_tax_rulings') with the condition that selects it, 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.
compare_with_caseARead-only
Check your facts and argument against rulings: supports / contradicts / distinguish. 사실관계·논리를 해석·판례와 대조해 항목마다 지지·반대·구별 필요를 판정. 언제: 주장의 근거와 반대 사례를 한 번에 점검할 때(의견서·불복 검토). 단순 검색은 search_tax_rulings. 반환: {해석: [{문서번호, 구분, 관계, 이유, 사실관계 차이, 링크}], 요약, 주의}. 문서번호는 검색 결과에 있는 것만. 읽기 전용. Upstage Solar 호출 — 환경변수 UPSTAGE_API_KEY 필요(호출마다 토큰 비용), 약 10초.
| Name | Required | Description | Default |
|---|---|---|---|
| tax | No | 세목 필터 (선택) | |
| lang | No | 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' | ko |
| facts | Yes | 사실관계: 누가·언제·무엇을·얼마 (최대 1500자 사용) | |
| our_view | Yes | 우리 주장: 과세 논리 또는 납세자 주장 한두 문장 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint=false, destructiveHint=false) the description discloses that it is read-only, invokes Upstage Solar requiring the UPSTAGE_API_KEY env var, incurs token cost per call, and takes ~10 seconds. It also constrains output ('문서번호는 검색 결과에 있는 것만'), which is behavioral context the annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and labeled (purpose, 언제, 반환, cost), so it is easy to scan. The English and Korean first sentences are near-duplicates, which adds length, but every section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description supplies the return shape ({해석, 요약, 주의}), the cost/latency/API-key requirements, and the read-only nature. Nothing an agent needs 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.
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 tax, lang, facts, and our_view, including the 1500-char limit and enum values. The description adds little parameter-level meaning 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (대조/판정) and resource (해석·논리 vs 판례), and the scope is per-item adjudication into 지지/반대/구별. It explicitly contrasts itself with the sibling search_tax_rulings ('단순 검색은 search_tax_rulings'), so an agent can separate the two without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' line names the concrete trigger (점검 근거와 반대 사례를 한 번에, 의견서·불복 검토) and the alternative for plain retrieval (search_tax_rulings). Both when-to-use and when-not are given explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execution_standardsARead-onlyIdempotent
List Tax Execution Standards (세법집행기준) items with page numbers. 세법집행기준 항목(최신 발간본). 언제: 조문별 집행 기준이 있는지·몇 쪽인지 확인할 때. 본문은 책자(PDF)라 제공하지 않으므로 통칙 본문이 필요하면 basic_rules. 반환: {법령, 기준(발간 연도), 항목: [{항목(번호·제목), 쪽}], 링크, 주의}. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | 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' | ko |
| article | No | 법 조문('제52조'). 주면 그 조의 집행기준 항목만 | |
| keyword | No | 항목 제목 검색어 (선택) | |
| law_name | Yes | 세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'. 소득세는 '소득세법' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the trailing 읽기 전용 is largely redundant. The description does add genuinely new operational context beyond annotations: no API key required for the public NTS lookup and a one-day cache for identical requests.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then uses labeled 언제/반환/operational blocks that each carry distinct information. Dense but waste-free; only the 읽기 전용 phrase overlaps structured annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully specifies the return shape ({법령, 기준, 항목:[{항목, 쪽}], 링크, 주의}), plus the critical limitation that content is PDF-only. Nothing an agent needs to call or interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so law_name, article, keyword and lang are all documented in the schema itself; baseline 3 applies. The description's mention of '조문별' loosely echoes the article filter but adds no syntax, format or default guidance beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List Tax Execution Standards items with page numbers') and pins the scope to the latest published edition. It explicitly distinguishes itself from the sibling basic_rules for body text, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' line gives the exact triggering condition (checking whether an article-level standard exists and on which page), and it adds an explicit exclusion plus alternative: body text is not provided here, so use basic_rules when the 통칙 body is needed. This is textbook when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_rulingARead-onlyIdempotent
Get the full text of one ruling or decision. 해석·판례 1건의 본문 전문. 언제: 검색 결과 중 인용·요약할 문서를 정한 뒤. 요지만으로 판단하지 말고 본문을 읽을 때 사용. 반환: {문서번호, 제목, 요지, 등록일, 관련조문[], 본문(질의회신: 사실관계·질의·회신 / 판례: 주문·이유, 최대 2만 자), 링크}. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | search_tax_rulings·rulings_by_article 결과의 id (숫자 12~20자리) | |
| lang | No | 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' | ko |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds useful context beyond annotations: it states no API key is needed, that it uses the public 국세법령정보시스템, and that responses are cached for 1 day. This is solid additional behavioral detail, though return format is partially covered by the '반환' note (which is helpful since there's no output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very well-structured with front-loaded purpose, followed by clear sections for when to use (언제) and what is returned (반환), plus a brief note on behavior. Every sentence is informative and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema), the description is quite complete. It covers purpose, usage, return structure, and operational context. Minor gap: the '반환' section describes fields but not their exact data types or edge cases (e.g., missing fields), which could be helpful without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters, including the id's origin and format, and the lang enum's behavior. The description does not add parameter-level detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (full text of one ruling or decision), and clearly scopes it to retrieving a single document's body. It is easily distinguishable from sibling search/list tools like search_tax_rulings and rulings_by_article.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('after selecting a document from search results to cite or summarize') and includes a caveat ('don't judge based only on the summary – use this to read the full text'). This gives clear direction versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_articleARead-onlyIdempotent
Get statute text as in force on a date, with optional Act → Decree → Rule chain. 조문 원문(기준일 시행본)과 3단 위임. 언제: 세액·요건 판단처럼 사실 발생 시점의 법령이 필요할 때. 해석·판례는 회신 당시 법 기준이므로 이 도구로 적용 연도 조문과 대조. 반환: {법령, 조, 적용 시행일, 본문, 링크} 또는 {위임체계: [{단계, 법령, 조, 적용 시행일, 본문}]} (+ 기본통칙·집행기준). 읽기 전용. 법제처 공식 API — 환경변수 LAW_OC(무료) 필요, 없으면 발급 안내 오류.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | 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' | ko |
| as_of | No | 기준일 YYYYMMDD. 그날 시행 중이던 연혁본. 생략하면 오늘 | |
| article | Yes | 조문 번호. '제52조' 또는 '제28조의2' 형식 | |
| law_name | Yes | 법령 정식 명칭. 예: '법인세법', '법인세법 시행령', '법인세법 시행규칙' | |
| with_rules | No | True면 그 조의 기본통칙 전문과 집행기준 항목도 함께 | |
| with_delegation | No | True면 법률 조문에 연결된 시행령·시행규칙 위임 조문 전부(3단) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, and the description adds material context beyond them: the required LAW_OC environment variable, the free key requirement, and the failure/error behavior when it is missing. It also describes the return payload shapes, which no output schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then structured by 언제/반환, which is easy to scan. The bilingual English/Korean content is mildly redundant but each block serves a purpose, so it earns its length without much waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with no output schema, the description covers purpose, temporal semantics, return structure, and the auth prerequisite — everything an agent needs to invoke it correctly. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters including as_of date format and the delegation flag. The description echoes the delegation-chain concept and the as-of date framing but adds little syntax or semantics 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get statute text as in force on a date') plus a scope qualifier (optional Act → Decree → Rule chain). This clearly distinguishes it from the rulings/case/publication siblings, which retrieve interpretation or precedent rather than statute text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' section gives explicit when-to-use guidance (when the law at the time of the fact event matters, e.g., determining tax amounts or requirements) and contrasts with interpretation/precedent tools that use reply-date law. It lacks explicit sibling tool names, so it stops at clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_issueARead-onlyIdempotent
Bundle everything that applied to an issue at a past date. 그 해 기준 묶음 조회 — 사실 발생 시점의 조문(3단)·기본통칙·집행기준·그 조문을 인용한 해석·판례를 한 번에. 언제: 세무조사·불복처럼 특정 사업연도에 적용되는 근거를 정리할 때. 시점 판단을 코드로 고정한다 — 기준일(사업연도·과세기간 종료일), 기준일 조문과 현행 조문의 변경 여부, 해석·판례마다 등록일 당시 조문이 기준일 조문과 같은지. 반환: {기준일, 기준일 근거, 그 해 조문(3단), 현행과 비교, 기본통칙[], 집행기준[], 해석·판례[{…, 기준일 조문과}], 주의}. 읽기 전용. 조문 부분은 LAW_OC 필요(없으면 해석·통칙만 반환). 10~30초.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | 해석·판례 종류별 최대 건수 1~20 | |
| tax | No | 세목. 부가세 과세기간 판단과 해석 필터에 사용 (선택) | |
| lang | No | 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' | ko |
| period | Yes | 사실이 속한 시점: '2023'(사업연도·과세기간), '2023-1'(부가 1기), '2023-12-31'(날짜) | |
| article | Yes | 조문 번호. '제52조' 또는 '제28조의2' 형식 | |
| law_name | Yes | 세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds genuinely useful behavior beyond them: the LAW_OC dependency (article text is omitted and only interpretations/basic rules are returned without it) and the 10–30 second latency. The explicit "읽기 전용" restates the annotation. Dependency and latency disclosure elevate this above baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the when/return/dependency/latency facts in labeled clauses (언제, 반환). Bilingual duplication and dense Korean add length, but every clause carries distinct information and the structure is scannable. Slightly heavier than ideal but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by enumerating the response keys. It also documents the external dependency, latency, and read-only nature for a 6-parameter tool. What remains thin is error/failure behavior when LAW_OC is absent or the period is malformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline would be 3. The description adds value beyond field-level schema docs by tying the parameters into a temporal-resolution model: the reference date, whether then-vs-current article text changed, and whether each interpretation/case was registered under text matching the reference date. This conceptual framing of 'period' exceeds what the schema conveys alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Bundle everything that applied to an issue at a past date" names a specific verb (bundle/retrieve) and a well-defined resource (all authorities applicable to an article at a historical point). The Korean gloss enumerates the bundled categories (3-tier article text, 기본통칙, 집행기준, interpretations, cases), which also implicitly distinguishes it from the single-category siblings. It stops short of explicitly naming alternatives like basic_rules or casebook_search, so not quite a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"언제: 세무조사·불복처럼 특정 사업연도에 적용되는 근거를 정리할 때" gives a concrete triggering scenario (tax audit/appeal needing point-in-time authority). It explains the governing logic (fixed reference date, comparing then-vs-now article text), which is clear context. No explicit exclusions or sibling routing is provided, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rulings_by_articleARead-onlyIdempotent
List rulings and decisions that cite a specific statute article. 특정 조문을 관련 법령으로 인용한 해석·판례 모음. 언제: 조문을 알고 그 조문의 실무 해석을 모을 때(예: 법인세법 제52조 → 부당행위계산). 키워드만 있으면 search_tax_rulings. 반환: {법령, 조, 결과: [{구분, 문서번호, 제목, 요지, 세목, 일자, id, 링크}]}. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | 종류별 최대 건수 1~30 | |
| tax | No | 세목 필터 (선택) | |
| lang | No | 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' | ko |
| sort | No | 정렬 | 최신 |
| kinds | No | 해석·판례 중 선택. 생략하면 둘 다 | |
| article | Yes | 조문 번호. '제52조' 또는 '제28조의2' 형식 | |
| keyword | No | 결과를 좁힐 추가 키워드 (선택) | |
| law_name | Yes | 세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/openWorld, but the description adds material context beyond them: it confirms read-only, states no API key is needed (public 국세법령정보시스템 lookup), and discloses a 1-day cache for identical requests. That caching/auth detail is genuinely useful and not derivable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then structured into 언제 (when) and 반환 (returns) sections. Efficient and scannable, though the inline return-shape literal is dense and slightly overlaps what the schema could carry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description proactively documents the return shape ({법령, 조, 결과:[...]}), plus auth/caching behavior, giving an agent everything needed to call and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all eight parameters are already documented, including the law_name and article formats and the tax/kinds enums. The description reinforces the law_name+article pairing with an example but adds no syntax or constraints beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (rulings/decisions citing a specific statute article), and explicitly distinguishes itself from search_tax_rulings by the input condition. An agent can tell it apart from siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance ('when you know the article and want practical interpretations'), gives a concrete example (법인세법 제52조 → 부당행위계산), and routes the agent to the alternative when only keywords exist. 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.
search_local_documentsARead-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). 반환: {결과: [{파일, 쪽, 점수, 발췌}], 색인}. 읽기 전용, 외부 호출 없음. 첫 호출 때 색인(파일이 크면 수십 초).
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | 결과 수 1~10 | |
| lang | No | 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' | ko |
| query | Yes | 찾을 내용. 영어·한국어·문단 번호(예: '2.14', 'comparability analysis', '무형자산') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive, closed-world), the description discloses setup prerequisites (KOREAN_TAX_MCP_DOCS env var, pypdf dependency), a real latency characteristic (first call builds the index and can take tens of seconds on large files), the absence of external calls, and the return shape. These are exactly the operational facts an agent needs that 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded (what it does, then when, setup, return) and every section carries useful information. It is somewhat dense and the bilingual restatement in the opening line duplicates meaning, costing a little efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by spelling out the return structure ({results:[{file, page, score, excerpt}], index}) and the indexing latency. Combined with setup requirements and usage context, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, k, and lang are already fully documented in the schema (including query examples and the lang enum behavior). The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (local PDFs you downloaded yourself), plus the granularity (page by page) and a concrete example (OECD Transfer Pricing Guidelines). This clearly separates it from siblings like search_tax_rulings or search_nts_publications, which query built-in corpora rather than user-supplied local files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' (when) section gives an explicit trigger: use it for copyrighted material that cannot be redistributed and that the user must supply themselves, and warns that documents are not bundled with the package. It lacks an explicit named-alternative routing (e.g. 'for published rulings use X instead'), so it stops just 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.
search_nts_publicationsARead-onlyIdempotent
Full-text search inside NTS official guidebooks and reports (transfer pricing, APA reports, overseas business guides, filing guides). 국세청 발간책자 본문 검색. 언제: 국세청이 공식 책자로 낸 실무 안내(이전가격·APA 연차보고서·해외진출기업 세무 가이드·신고 안내 등)의 설명이 필요할 때. 반환: {결과: [{책자, 발간일, 분야, 담당, 발췌, 링크}]}. 책자 원문은 국세법령정보시스템 전자도서관에서. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | 결과 수 1~20 | |
| lang | No | 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' | ko |
| query | Yes | 찾을 내용. 예: '이전가격 정상가격 산출방법', '해외현지법인 명세서 제출', 'APA' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds genuinely new operational context: no API key required, public query, and a 1-day cache for identical requests. It stops short of richer detail (pagination, result size behavior), keeping it at a solid 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then cleanly labeled sections for when-to-use, return shape, and operational notes. Dense but not padded. The Korean/English mix is slightly redundant in the opening line but earns its place for bilingual routing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden and does so by specifying the result object fields (book, publish date, field, department, excerpt, link). Combined with the cache/key notes and 3-param schema, an agent has nearly everything needed, though result-set behavior (paging, total count) is unmentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and includes examples for the query parameter plus enum/default/max for n and lang, so the schema does the heavy lifting. The description adds no further parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: full-text search inside NTS official guidebooks and reports, with a parenthetical enumerating the covered publication types (transfer pricing, APA reports, overseas business guides, filing guides). This is concrete and scoped, though it does not explicitly contrast itself with siblings like casebook_search or search_tax_rulings, which an agent must infer from the publication-type list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' clause gives a clear trigger: use when explanation is needed from NTS's officially published practitioner guides. That is good context, but it offers no explicit exclusions or named alternatives (e.g., use casebook_search for case law), so the agent must infer the boundary against siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tax_rulingsARead-onlyIdempotent
Search Korean tax rulings and decisions by keyword. 국세청 해석(질의회신·과세기준자문·사전답변)과 판례(법원·조세심판·이의·심사)를 키워드로 찾는다. 언제: 쟁점은 있는데 조문을 모를 때 첫 단계로. 조문을 알면 rulings_by_article, 사례집 요약만 필요하면 casebook_search. 반환: {결과: [{구분, 문서번호, 제목, 요지(400자), 세목, 일자, id, 링크}], 주의}. 본문은 get_tax_ruling(id). 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | 종류별 최대 건수 1~30 | |
| tax | No | 세목 필터. 생략하면 전체 | |
| lang | No | 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' | ko |
| sort | No | 최신=등록일 내림차순, 정확도=검색 점수순 | 최신 |
| kinds | No | 해석=질의회신·과세기준자문·사전답변, 판례=법원·조세심판·이의·심사. 생략하면 둘 다 | |
| query | Yes | 쟁점 키워드. 예: '업무무관 가지급금 인정이자', '폐업자 세금계산서 매입세액' | |
| since | No | 등록일 시작 YYYYMMDD (선택) | |
| until | No | 등록일 끝 YYYYMMDD (선택) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), yet the description adds extra behavioral context: no API key required, NTS public-source query, and a 1-day cache for identical requests. It also discloses the return payload and that full text requires a separate call. That is solid added value, though return-format depth is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then uses labeled sections (언제/반환) to separate usage, return shape, and operational notes. Every line carries distinct information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description spells out the return object shape (구분, 문서번호, 제목, 요지, 세목, 일자, id, 링크) and points to get_tax_ruling(id) for full text. Combined with routing guidance and operational notes, nothing an agent needs 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.
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 documented in the schema with enum meanings and examples. The description adds no parameter-specific syntax or defaults beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) plus the exact resource — Korean tax rulings and decisions, itemizing the constituent types (해석, 판례). It explicitly distinguishes itself from siblings rulings_by_article and casebook_search, so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' (when) line gives a concrete trigger — first step when the issue exists but the statutory article is unknown — and names two alternatives with the condition that selects each (rulings_by_article when the article is known, casebook_search for summary-only needs). This is explicit when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tax_treatyARead-onlyIdempotent
Read Korea's bilateral tax treaties (96 countries) article by article, Korean or English. 한국의 조세조약 조문(국문·영문). 언제: 비거주자 원천징수 제한세율, 고정사업장, 거주자 판정 등 국제거래 쟁점. 국내법 조문은 law_article, 국제조세 해석은 search_tax_rulings(tax='국조'). 반환: {국가, 발효일, 조문: [{조, 제목, 영문 제목, 본문}], 링크} — 조문 번호는 조약마다 다르니 keyword로 찾는 게 정확. 읽기 전용. 국세법령정보시스템 공개 조회(키 불필요), 같은 요청은 1일 캐시.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | 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' | ko |
| article | No | 조문. 예: '제10조', '의정서'. 조약마다 번호 체계가 다르므로 주제로 찾을 땐 keyword 사용 | |
| country | Yes | 체약국 이름(한글). 예: '미국', '중국', '일본', '베트남'. 모르면 아무 이름이나 넣으면 체결국 목록을 돌려줌 | |
| english | No | True면 영문 본문 | |
| keyword | No | 조문 제목·본문 검색어. 예: '배당', '고정사업장', '이자', 'dividends' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, but the description adds operational context the annotations do not: no API key required, a 1-day cache on identical requests, and a warning that article numbering varies per treaty so keyword search is more reliable. These are genuinely useful beyond the structured hints, though it stops short of describing pagination or size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then cleanly labels when-to-use, return shape, and operational notes. Each section is dense and earns its place; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description supplies the return shape ({country, effective date, articles with article/title/body, link}), the required parameter, the caching behavior, and the routing alternatives. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage the baseline is 3, but the description adds real guidance: the keyword-vs-article tradeoff ('조문 번호는 조약마다 다르니 keyword로 찾는 게 정확') tells the agent which optional parameter to prefer, and it notes the country fallback that returns a treaty-party list. That is meaningfully more than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read Korea's bilateral tax treaties article by article'), with scope (96 countries, Korean/English). It also distinguishes itself from siblings by naming law_article for domestic statutes and search_tax_rulings for international-tax interpretation, so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' section gives explicit triggering scenarios (non-resident withholding limited rates, permanent establishment, residency determination) and names the exact alternatives for adjacent needs. This is textbook when-to-use and when-to-use-something-else guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_citationsARead-onlyIdempotent
Check that cited rulings, decisions and statute articles actually exist. 인용 검증 — 초안의 문서번호·조문이 실제로 있는지 확인. 언제: AI나 사람이 쓴 초안을 내보내기 전. 지어낸 문서번호·없는 조문을 걸러낸다. 반환: {문서번호: [{인용, 결과(확인/국세청 DB 미확인/조회 실패), 문서번호, 제목, 일자, 링크, 비슷한 번호}], 조문: [{인용, 결과, 적용 시행일}], 요약, 주의}. '확인'은 존재만 뜻함 — 내용 일치는 get_tax_ruling·law_article 본문으로 확인. 읽기 전용. 조문 확인은 LAW_OC 필요.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | 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' | ko |
| text | Yes | 보고서·의견서·답변 초안 (해석·판례 문서번호와 '법인세법 제52조' 같은 조문 인용이 들어간 글, 최대 2만 자) | |
| as_of | No | 조문 존재를 확인할 기준일 YYYYMMDD. 생략하면 오늘 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely non-structured context: article checks require LAW_OC, '확인' means existence only (not content match), and result codes distinguish 국세청 DB 미확인 from 조회 실패. Missing only operational details like rate limits or cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by labeled 언제/반환/주의 blocks. Every sentence earns its place: purpose, trigger, return shape, and the existence-vs-content caveat. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description compensates by sketching the return object (문서번호 array with 인용/결과/제목/일자/링크/비슷한 번호, 조문 array, 요약, 주의). Combined with the auth note and semantic caveat, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (text, lang, as_of) are already documented in the schema, including the 20,000-character limit and the YYYYMMDD format. The description adds nothing parameter-specific, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (verify/check) and resource (cited rulings, decisions, statute articles), and explicitly carves out what it does NOT do: content matching is deferred to get_tax_ruling and law_article. An agent can distinguish this from every sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' line gives an explicit trigger (before exporting AI- or human-written drafts) and the goal (filter out fabricated document numbers and nonexistent articles). It also names the alternative tools for the adjacent task of content verification, so the routing boundary is unambiguous.
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.
13 tool updates
v0.4.0- Changed
basic_rules4 fields changed- added
Input schema / properties / article / descriptionAdded value: +"법 조문('제52조'). 주면 그 조에 딸린 통칙 전부, 생략하면 전체에서 keyword로 검색" - added
Input schema / properties / keyword / descriptionAdded value: +"통칙 제목·본문 검색어 (선택)" - added
Input schema / properties / langAdded 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" +} - added
Input schema / properties / law_name / descriptionAdded value: +"세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'"
- Changed
casebook_search7 fields changed- changed
Input schema / properties / area / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "법인", + "부가", + "소득", + "상증", + "양도", + "국기", + "국조", + "종부" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / area / descriptionAdded value: +"분야 필터 (선택)" - added
Input schema / properties / k / descriptionAdded value: +"결과 수 1~10" - added
Input schema / properties / k / maximumAdded value: +10 - added
Input schema / properties / k / minimumAdded value: +1 - added
Input schema / properties / langAdded 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" +} - added
Input schema / properties / query / descriptionAdded value: +"쟁점 문장이나 키워드"
- Changed
compare_with_case5 fields changed- added
Input schema / properties / facts / descriptionAdded value: +"사실관계: 누가·언제·무엇을·얼마 (최대 1500자 사용)" - added
Input schema / properties / langAdded 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" +} - added
Input schema / properties / our_view / descriptionAdded value: +"우리 주장: 과세 논리 또는 납세자 주장 한두 문장" - changed
Input schema / properties / tax / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "법인", + "부가", + "소득", + "양도", + "상증", + "국기", + "국징", + "조특", + "국조", + "종부" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / tax / descriptionAdded value: +"세목 필터 (선택)"
- Changed
execution_standards4 fields changed- added
Input schema / properties / article / descriptionAdded value: +"법 조문('제52조'). 주면 그 조의 집행기준 항목만" - added
Input schema / properties / keyword / descriptionAdded value: +"항목 제목 검색어 (선택)" - added
Input schema / properties / langAdded 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" +} - added
Input schema / properties / law_name / descriptionAdded value: +"세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'. 소득세는 '소득세법'"
- Changed
get_tax_ruling2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"search_tax_rulings·rulings_by_article 결과의 id (숫자 12~20자리)" - added
Input schema / properties / langAdded 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" +}
- Changed
law_article6 fields changed- added
Input schema / properties / article / descriptionAdded value: +"조문 번호. '제52조' 또는 '제28조의2' 형식" - added
Input schema / properties / as_of / descriptionAdded value: +"기준일 YYYYMMDD. 그날 시행 중이던 연혁본. 생략하면 오늘" - added
Input schema / properties / langAdded 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" +} - added
Input schema / properties / law_name / descriptionAdded value: +"법령 정식 명칭. 예: '법인세법', '법인세법 시행령', '법인세법 시행규칙'" - added
Input schema / properties / with_delegation / descriptionAdded value: +"True면 법률 조문에 연결된 시행령·시행규칙 위임 조문 전부(3단)" - added
Input schema / properties / with_rules / descriptionAdded value: +"True면 그 조의 기본통칙 전문과 집행기준 항목도 함께"
- Added
research_issue - Changed
rulings_by_article13 fields changed- added
Input schema / properties / article / descriptionAdded value: +"조문 번호. '제52조' 또는 '제28조의2' 형식" - added
Input schema / properties / keyword / descriptionAdded value: +"결과를 좁힐 추가 키워드 (선택)" - changed
Input schema / properties / kinds / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "enum": [ + "해석", + "판례" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / kinds / descriptionAdded value: +"해석·판례 중 선택. 생략하면 둘 다" - added
Input schema / properties / langAdded 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" +} - added
Input schema / properties / law_name / descriptionAdded value: +"세법 이름(정식 명칭). 예: '법인세법', '부가가치세법', '소득세법', '상속세 및 증여세법', '국세기본법'" - added
Input schema / properties / n / descriptionAdded value: +"종류별 최대 건수 1~30" - added
Input schema / properties / n / maximumAdded value: +30 - added
Input schema / properties / n / minimumAdded value: +1 - added
Input schema / properties / sort / descriptionAdded value: +"정렬" - added
Input schema / properties / sort / enumAdded value: +[ + "최신", + "정확도" +] - changed
Input schema / properties / tax / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "법인", + "부가", + "소득", + "양도", + "상증", + "국기", + "국징", + "조특", + "국조", + "종부" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / tax / descriptionAdded value: +"세목 필터 (선택)"
- Added
search_local_documents - Added
search_nts_publications - Changed
search_tax_rulings13 fields changed- changed
Input schema / properties / kinds / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "enum": [ + "해석", + "판례" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / kinds / descriptionAdded value: +"해석=질의회신·과세기준자문·사전답변, 판례=법원·조세심판·이의·심사. 생략하면 둘 다" - added
Input schema / properties / langAdded 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" +} - added
Input schema / properties / n / descriptionAdded value: +"종류별 최대 건수 1~30" - added
Input schema / properties / n / maximumAdded value: +30 - added
Input schema / properties / n / minimumAdded value: +1 - added
Input schema / properties / query / descriptionAdded value: +"쟁점 키워드. 예: '업무무관 가지급금 인정이자', '폐업자 세금계산서 매입세액'" - added
Input schema / properties / since / descriptionAdded value: +"등록일 시작 YYYYMMDD (선택)" - added
Input schema / properties / sort / descriptionAdded value: +"최신=등록일 내림차순, 정확도=검색 점수순" - added
Input schema / properties / sort / enumAdded value: +[ + "최신", + "정확도" +] - changed
Input schema / properties / tax / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "법인", + "부가", + "소득", + "양도", + "상증", + "국기", + "국징", + "조특", + "국조", + "종부" + ], + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / tax / descriptionAdded value: +"세목 필터. 생략하면 전체" - added
Input schema / properties / until / descriptionAdded value: +"등록일 끝 YYYYMMDD (선택)"
- Added
tax_treaty - Added
verify_citations
8 tool updates
v0.1.1- First observed
basic_rules - First observed
casebook_search - First observed
compare_with_case - First observed
execution_standards - First observed
get_tax_ruling - First observed
law_article - First observed
rulings_by_article - First observed
search_tax_rulings
TDQS
Scored across 13 tools
Each tool has a clearly distinct role, and the descriptions explicitly state when to use one over another (e.g., search_tax_rulings vs rulings_by_article vs casebook_search). Overlaps such as basic_rules vs execution_standards are well delineated by scope and output type.
Almost all names use snake_case, which is consistent and readable. However, the set mixes verb_noun names (search_tax_rulings, get_tax_ruling, verify_citations) with noun-phrase names (basic_rules, law_article, tax_treaty), so it is not a perfectly uniform pattern.
13 tools is well within the appropriate range for a specialized tax-research server. The tools correspond to distinct research needs: rulings, statutes, treaties, official publications, citations, and bundled issue research.
The server covers the core research lifecycle from search and retrieval to citation verification and historical issue bundling. Minor gaps remain, such as no generic keyword search across statutes or tax calculation/rate tools, but the surface is strong for tax-interpretation research.
Maintenance
Related MCP Connectors
Full-text search over K-IFRS/K-GAAP standards and KASB accounting Q&A for Korean accountants
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
Search U.S. case law, fetch opinions, and ask matter-aware legal questions over your documents.
Full-text search over FSS/FSC accounting supervision documents for Korean accounting professionals
Related MCP Servers
- FlicenseAqualityCmaintenanceEnables 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.262-
- FlicenseNot gradedqualityDmaintenanceEnables 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-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search and retrieve Korean laws, regulations, administrative rules, legal interpretations, and precedents via official APIs for legal review workflows.1MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to query and analyze Korean law, including statutes, precedents, and ordinances, with citation verification and impact analysis.106,875 npmMIT