korean-tax-calc-mcp
Korean tax calculation MCP server — 62 deterministic tools (no LLM needed for 59 of them) that compute Korean taxes and tax adjustments with cited statutory grounds, refusing to guess for unsupported years.
Corporate tax (법인세, 15 tools): computed tax, foreign tax credit, entertainment/기업업무추진비 limits, deemed interest on loans to related parties, unfair-transaction test, loss carryforward limits, minimum tax, non-business interest disallowance, business car expenses, donation limits, bad-debt allowance, thin capitalization, missing-receipt disallowance, dividend-received deduction, asset-grant reserves.
Income, withholding, capital gains, inheritance/gift (11 tools): comprehensive income tax, domestic & non-resident withholding, retirement income tax, wage income tax, daily-worker withholding, deemed-bonus year-end resettlement, special tax credits, capital gains, inheritance tax, gift tax.
VAT, penalties, assessment periods (10 tools): deemed rent, deemed input credit, common input tax allocation, simplified taxpayer tax, card-sales credit, bad-debt VAT credit, underreporting/late-payment/invoice penalties, assessment limitation periods.
Facts & ledgers → tax adjustments (14 tools): bad debt, entertainment, deemed dividends (bonus shares / capital reduction), financial income aggregation, other income, earned income gross pay, simplified VAT return, common input tax, input tax recalculation, land/building split, depreciation, retirement allowance, inventory valuation.
Tax-audit judgments (9 tools): related-party judgment, kinship check, ownership ratio, dominant shareholder, tunnelling gift (statute & NTS formulas), related provision lookup, return precheck + its input schema.
PDF table extraction (3 tools, optional Upstage AI): relations, tunnelling data, corporate return precheck.
Key traits: year tables cover 2016–2026 (VAT 2016-1H–2026-2H); every result includes intermediate calculations and statutory citations; unknown items, missing values, or unsupported years return errors instead of estimates; outputs are reference material, not tax advice, and never constitute tax representation (세무대리).
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-calc-mcp2025년 사업연도 과세표준 5억 원일 때 법인세 산출세액 계산해줘"
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-calc-mcp — Korea Tax Calculator MCP (한국 세금 계산)

· English
0.3.0부터 Solar Pro 4가 코드를 쓰고 CodeSolar가 리뷰, Claude가 테스트로 교차 검증합니다. 도구 62개, 상세는 CHANGELOG.
Korean tax calculations for AI agents — code, not guesses. English
세금 계산은 AI가 자주 틀립니다. 이 서버는 계산을 코드로 하고, 결과마다 근거 조문을 붙입니다. 연도표가 없는 해는 추정하지 않고 멈춥니다.
작동 방식
flowchart LR
Q["AI의 입력<br/>연도·금액·항목"] --> V["입력 확인<br/>모르는 항목·빠진 값 거부"]
V --> T["그해 기준값<br/>세율·한도·공제율"]
T --> E["계산<br/>조문 순서대로"]
E --> R["결과<br/>세액·세무조정·근거 조문"]
T -.->|표 없는 연도| X["멈춤<br/>추정 계산 안 함"]입력 확인 — 모르는 항목·빠진 값이 있으면 계산하지 않고 무엇이 필요한지 알려 줍니다.
그해 기준값 — 세율·한도는 코드 안 연도표(법인세·소득세 2016
2026, 부가세 2016년 1기2026년 2기), 항목별 판단 기준은facts_vocab.json(적용 기간·근거 조문 포함)에서 꺼냅니다.계산 — 조문 순서대로 계산합니다. 예: 과세표준 → 그해 세율 구간 → 산출세액.
결과 — 세액·중간 계산·항목별 판단·세무조정(소득처분)·근거 조문을 함께 돌려줍니다.
계산·판정 도구 59개는 생성형 AI 없이 내 PC에서 동작합니다. PDF 도구 3개만 UPSTAGE_API_KEY가 있을 때 Upstage를 씁니다.
Related MCP server: Korean Law MCP
이렇게 물어보세요
"2025 사업연도 과세표준 5억 법인세 산출세액은?"
"가지급금 3월 1일 2억 대여, 9월 30일 1억 회수 — 인정이자 계산해줘"
"과소신고 1천만 원을 10월 7일에 납부하면 가산세는?"
"퇴직금 1억, 근속 15년 퇴직소득세"
"기업업무추진비 원장 5건 그대로 줄게 — 2025 사업연도 세무조정 뽑아줘"
설치
claude mcp add korean-tax-calc -- uvx korean-tax-calc-mcp{ "mcpServers": { "korean-tax-calc": { "command": "uvx", "args": ["korean-tax-calc-mcp"] } } }키 없이 동작합니다. 선택: LAW_OC(세무조사 판정 도구 2개의 법제처 조문 조회), UPSTAGE_API_KEY(PDF 표 추출).
근거 조문·해석은 korean-tax-mcp와 함께 쓰면 "근거 찾기 → 계산"이 이어집니다.
도구 (62개)
묶음 | 도구 |
법인세 (15) | 산출세액 |
소득세·원천·양도·상속증여 (11) | 종합소득세 |
부가세·가산세·제척기간 (10) | 간주임대료 |
사실관계·원장 → 세무조정 (14) | 대손 조정 |
세무조사 판정 (9) | 특수관계 |
PDF 표 추출 (3) | 관계표 |
원장 그대로 입력: 세무조정 도구는 장부 항목(이름·금액·증빙·성격)을 그대로 받아 항목 판단 → 세무조정 → 소득처분까지 돌려줍니다.
쟁점 표시: 비거주자 원천징수·과소자본 결과에는 다툼이 될 수 있는 지점과 확인할 자료를 함께 붙입니다(결론은 내리지 않음).
지원 연도: 법인세 2016
2026 사업연도, 소득세 20162026 귀속연도, 부가가치세 2016년 1기~2026년 2기, 가산세·제척기간은 현행 조문. 그 밖의 연도는 오류로 멈춥니다. 지방소득세는 별도입니다.
면책 및 고지
면책: 이 도구의 결과는 세무 자문이 아닙니다. 법령·해석을 바탕으로 계산·판정 과정을 보여 주는 참고 자료이며, 실제 신고·세무조사·불복 판단은 세무사·회계사·변호사 등 전문가에게 확인하세요. 근거 조문·판례는 원문으로 확인하세요.
세무대리 아님: 이 도구는 세무사법 제2조의 세무대리(세무조정계산서 작성, 신고 대리, 세무상담 등)를 수행하지 않으며, 그 업무는 세무사와 등록한 공인회계사·변호사만 할 수 있습니다(세무사법 제20조). 법령에 적힌 산식을 코드로 옮겨 입력값에 대한 계산 과정을 보여 주는 소프트웨어이고, 입력 사실관계의 확인과 최종 판단은 세무 전문가(세무사·회계사·변호사)와 함께 해 주세요.
AI 사용 고지: 계산·판정 도구 59개는 코드로 동작하며 생성형 AI를 쓰지 않습니다. PDF 검토 도구 3개(
extract_relations,tunnelling_from_pdf,return_precheck_pdf)는 UPSTAGE_API_KEY가 있으면 생성형 AI(Upstage Solar Pro 4)로 표를 추출하며 결과에 그 사실을 표시합니다. 키가 없으면 pypdf로 로컬 텍스트 추출(host_ai 모드) 후 정리 안내에 따라 다음 도구 입력으로 직접 정리할 수 있습니다.데이터 전송: UPSTAGE_API_KEY를 설정해 PDF 도구를 사용할 때만 문서 내용이 Upstage API(api.upstage.ai)로 전송됩니다. 키 없이 사용하면(pypdf 로컬 추출) 외부 전송이 없습니다. 민감정보가 담긴 문서는 API 전송 시 넣지 마세요.
라이선스
MIT © 2026 Upstage · Created by Mia(윤승미)
Available Tools
62 toolsassessment_limitationARead-onlyIdempotent
국세 부과제척기간과 만료일(2020년 이후 부과분 기준 현행 조문). 언제: 어느 과세기간의 세금이든 부과·제척기간이 언제까지인지 역산한다. 입력: 법정신고기한(YYYY-MM-DD) → due_date, 부과 성격(일반·무신고·부정행위) → case, 역외거래 여부 → offshore, 상속세·증여세 여부 → inheritance_gift. 결과: 제척기간(년)·기산일·만료일, 근거(국세기본법 제26조의2①②④). 일반 5년(역외 7년), 무신고 7년(역외 10년), 부정행위 10년(역외 15년), 상속·증여 10년(부정 등 15년).
| Name | Required | Description | Default |
|---|---|---|---|
| case | No | 일반(과소신고 등) / 무신고 / 부정행위로 포탈·환급 | 일반 |
| due_date | Yes | 법정신고기한(YYYY-MM-DD, 부과할 수 있는 날 = 그 다음 날) | |
| offshore | No | 역외거래(국제거래 또는 국외 자산·용역 관련 거래) 여부 | |
| inheritance_gift | No | 상속세·증여세 여부 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds real value by disclosing the legal basis (국세기본법 제26조의2) and the rule matrix that determines each outcome, going 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by labeled 언제/입력/결과 sections makes it easy to scan. It is dense and the trailing rules table is somewhat redundant with the '결과' summary, but each element carries useful information.
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 burden and does so, specifying 제첨기간·기산일·만료일 and the legal basis. Everything needed to call it correctly is present.
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 parameter definitions are already complete, but the description adds meaning by mapping each param to its role (due_date, case, offshore, inheritance_gift) and tying them to the resulting limitation periods.
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: computing the national tax assessment statute of limitations and its expiration date. It is clearly distinct from the many sibling tax calculators because it targets limitation periods rather than income/VAT/penalty computation.
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 states the trigger clearly — reverse-calculate the assessment/limitation deadline for tax of any taxable period. No explicit alternatives or exclusions are named, but the use context is unambiguous among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_grant_reserveARead-onlyIdempotent
국고보조금·공사부담금·보험차익 일시상각충당금·압축기장충당금 세무조정. 언제: 국고보조금·공사부담금·보험차익으로 사업용자산을 취득·개량한 법인의 손금산입·충당금 상계·처분 계산. 입력: 사업연도 → year, 재원 구분 → kind, 수령액 → received, 자산별 내역 → assets(취득·개량가액·사용액·상각·처분·충당금 등). 결과: 손금산입 한도·충당금 설정금액·상계액·처분 익금·사용계획·미사용·기말 잔액·소득금액 순영향·세무조정·근거. 일시상각충당금·압축기장충당금 계산.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | 재원 구분 | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| assets | Yes | [{asset, cost, used?(그 자산에 쓴 보조금·공사부담금 금액, 원), depreciable, depreciation_this_year, disposed?, disposed_ratio?, book_provision?, book_reversal?}] | |
| received | Yes | 수령액(금전·현물 가액) | |
| planned_use | No | 금액(원) | |
| receipt_year | No | 수령·설정 연도 | |
| expired_unused | No | 금액(원) | |
| claim_by_return | No | 신고조정 손금산입 | |
| lost_book_value | No | 멸실·손괴 보험대상자산 장부가액 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds the calculation semantics (손금산입 한도, 상계액, 처분 익금) but no further behavioral caveats such as statutory limits or data prerequisites beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The three labeled blocks (what / 언제 / 입력 / 결과) are front-loaded and waste no words; the only weakness is that the 입력 and 결과 sections read as serialized lists rather than prioritized guidance.
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 and 9 parameters, the description usefully enumerates the returned figures (손금산입 한도, 충당금 설정금액, 상계액, 처분 익금, 소득금액 순영향, 세무조정, 근거), so an agent knows what it gets back. It is complete for calling the tool, though it does not explain how the optional fields (planned_use, expired_unused, receipt_year, claim_by_return, lost_book_value) alter the computation.
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 every parameter is already documented in the schema. The description's input mapping (사업연도→year, 재원 구분→kind, 수령액→received, 자산별 내역→assets) is a restatement that adds no syntax, format, or interaction detail for the optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific action (세무조정) applied to precisely enumerated resources (국고보조금·공사부담금·보험차익 일시상각충당금·압축기장충당금), which is unique across the ~60 sibling tax tools and lets an agent identify it 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 '언제' clause gives a concrete triggering context (a corporation that acquired/improved business assets using subsidies, public-works contributions, or insurance proceeds, needing 손금산입·충당금 상계·처분 계산). It never names an alternative tool or an exclusion, so it stops 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.
bad_debt_adjustmentARead-onlyIdempotent
대손금·대손충당금 세무조정(법인세법 제19조의2·제34조, 시행령 제19조의2·제61조). 언제: 법인세 세무조정에서 대손금 인정 여부와 대손충당금 한도·국회초과를 함께 계산할 때. 입력: 사업연도(2016~2026) → year, 중소기업 여부 → sme, 전기 대손충당금 한도초과액(원) → prior_excess, 장부상 대손충당금 {opening, offset, provision, closing}(원) → book, 장부상 설정대상 채권 전기말·당기말(원) → receivables_prev_end_book·receivables_end_book, 대손금 목록 [{kind, amount, arose_in, instrument?, months_since_default?, mortgage?}] → writeoffs, 대손실적률 소수 자릿수(기본 3) → loss_rate_digits. 결과: 판단(항목별·근거)·계산(세법상 당기 대손금·전기말·당기말 채권·실적률)·결과(한도·한도초과)·세무조정. 대손금·대손충당금 세무조정.
| Name | Required | Description | Default |
|---|---|---|---|
| sme | Yes | 중소기업 여부 | |
| book | Yes | 장부상 대손충당금 {opening: 기초, offset: 당기상계, provision: 당기설정, closing: 기말}(원) | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| writeoffs | Yes | 대손금 목록 [{kind, amount, arose_in:'전기'|'당기', instrument?:'외상매출금'|'받을어음'|'기타', months_since_default?, mortgage?:bool}] | |
| prior_excess | No | 전기 대손충당금 한도초과액(원) | |
| loss_rate_digits | No | 대손실적률 소수 자릿수(기본 3 — 넷째 자리 이하 절사) | |
| receivables_end_book | Yes | 금액(원) | |
| receivables_prev_end_book | Yes | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe-read profile (readOnly, idempotent, non-destructive, closed-world), so the description's job is to add computation context — and it does, enumerating the result sections (판단/계산/결과/세무조정). With no output schema, this return-shape disclosure is genuinely valuable; it stops short of explaining edge-case behavior or how the 판단 근거 are derived.
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 and statute, then cleanly sectioned into 언제/입력/결과. The 입력 block largely duplicates the schema field-by-field, which is somewhat redundant, but each line maps a Korean concept to its parameter name and remains skimmable.
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 an 8-parameter, nested-object computation tool with no output schema, the description supplies what structured fields cannot: the statutory basis, the invocation trigger, and the shape of the returned judgment/calculation/result blocks. Only the derivation logic and error/precondition handling are left unstated.
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 8 parameters. The description mostly restates the same parameter→name mapping, though it does add a small amount of meaning (the default 3-digit truncation rule for 대손실적률, the writeoffs item shape). Baseline 3 is correct 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?
Names a specific resource pair (대손금·대손충당금) and action (세무조정), and anchors it with the governing statutes (법인세법 제19조의2·제34조). An agent can tell what it computes. It does not, however, distinguish itself from the sibling tool 'bad_debt_allowance', which appears to overlap on the allowance half.
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 a concrete trigger: corporate tax adjustment where bad-debt recognition AND allowance limit/excess are computed together. The word '함께' implicitly signals the differentiator from an allowance-only tool, but no alternative or exclusion is named explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bad_debt_allowanceARead-onlyIdempotent
대손충당금 한도(채권잔액 × max(1%, 대손실적률))와 한도초과. 언제: 매출채권 등에 대해 대손충당금을 설정할 때 손금산입 한도를 구한다. 입력: 채권잔액(원) → receivables, 대손실적률(소수, 예: 0.02 = 2%) → loss_rate, 설정할 대손충당금(원) → set_amount, 이전 disallowed(원) → prior_disallowed. 결과: 한도·한도초과, 근거(법인세법 제34조, 시행령 제61조②). Bad debt allowance limit.
| Name | Required | Description | Default |
|---|---|---|---|
| loss_rate | Yes | 대손실적률(소수, 예: 0.02 = 2%) | |
| set_amount | Yes | 금액(원) | |
| receivables | Yes | 금액(원) | |
| prior_disallowed | No | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/idempotentHint already covering the safety profile, the description adds real behavioral value: it discloses the formula being applied and what the tool returns (한도·한도초과 and the statutory 근거). It stops short of full transparency since it does not describe output format or edge-case handling, but it carries useful extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The 언제/입력/결과 structure is front-loaded and each block earns its place; the formula leads. It is dense with terminology but not padded.
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 stateless calculation tool with rich annotations and 100% param coverage, the description is complete: it explains purpose, inputs, and outputs despite there being no output schema. Minor gap in not covering return structure or edge cases.
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 already 100%, so the baseline is 3. The description maps each parameter to its Korean meaning and reinforces the loss_rate decimal convention (0.02 = 2%), but adds little beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise computation verb+resource, going as far as giving the formula (채권잔액 × max(1%, 대손실적률)) and naming the legal basis (법인세법 제34조). It is highly specific, though it does not explicitly differentiate itself from siblings like bad_debt_adjustment or vat_bad_debt_credit.
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 when-to-use condition: calculating the deductible limit when setting a bad debt allowance on receivables. There is no when-not guidance and no alternative tools named, so it stops 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.
bundled_supply_splitARead-onlyIdempotent
토지·건물 일괄공급 안분(부가법 제29조⑨, 영 제64조①). 언제: 토지와 건물을 함께 공급하며 가액 구분이 불분명할 때 감정평가가액 → 기준시가 → 장부가액 순으로 건물 공급가액을 안분한다. 입력: 일괄 거래가액(원) → total_price, 부가세 포함 여부 → vat_included, 감정평가가액 {building, land} → appraisal, 기준시가 {building, land} → standard_value, 장부가액 {building, land} → book_value. 결과: 판단·결과(건물_공급가액·토지_가액·부가가치세)·산식·근거.
| Name | Required | Description | Default |
|---|---|---|---|
| appraisal | No | {building, land} — 감정평가가액(선택) | |
| book_value | No | {building, land} — 장부가액(선택) | |
| total_price | Yes | 금액(원) | |
| vat_included | Yes | 부가세 포함 여부 | |
| standard_value | No | {building, land} — 기준시가(선택) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a read-only, idempotent, non-destructive, closed-world computation, so the safety profile is covered. The description adds real behavioral substance beyond that: the statutory basis and the fallback ordering (감정평가가액 → 기준시가 → 장부가액) that governs the allocation logic.
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?
Uses labeled sections (언제/입력/결과), is front-loaded with purpose and statute, and every line carries 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?
No output schema exists, but the description compensates by naming the returned components (건물_공급가액·토지_가액·부가가치세, 산식, 근거). Combined with the trigger condition and statutory reference, an agent has everything needed to call this 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% and each field already carries a description (including the {building, land} structure), so the schema does the heavy lifting and baseline is 3. The description's input mapping largely restates the schema, adding only the natural-language gloss '일괄 거래가액(원)' for total_price.
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 (안분/allocation) and resource (토지·건물 일괄공급) and anchors it to statute (부가법 제29조⑨, 영 제64조①). This is immediately distinguishable from the VAT siblings like vat_common_input_allocation or simplified_vat_return.
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 condition: land and building supplied together with unclear value separation, plus the appraisal→standard value→book value priority order. It lacks named alternatives or exclusions, so it falls just short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
business_car_expenseARead-onlyIdempotent
업무용승용차 관련비용 손금불산입(업무사용비율·사적사용·미작성 시 기준비율·감가상각 연 800만 원 한도). 언제: 임원·직원이 사용하는 승용차 관련비용을 어디까지 손금으로 인정할지 계산할 때.
입력: 사업연도(20162026) → year, 유지비(유류·보험·수선 등, 원) → upkeep, 세법상 감가상각비(5년 정액, 원) → depreciation, 장부상 감가상각비(원) → booked_depreciation, 운행기록부 작성 여부 → log_kept, 업무사용비율(소수, 작성 시) → business_ratio, 보유 월수(112) → months, 부동산임대업 주업 등 특정법인 여부 → rental_corp, 법인 전용번호판 부착 여부 → plate_ok.
결과: 업무사용비율·손금불산입·감가상각 한도 등, 근거(법인세법 제27조의2, 시행령 제50조의2).
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| months | No | 보유 월수(1~12) | |
| upkeep | Yes | 유지비(유류·보험·수선 등, 원) | |
| log_kept | Yes | 운행기록부 작성 여부 | |
| plate_ok | No | 법인 전용번호판 부착(2024년 이후 요건) | |
| rental_corp | No | 부동산임대업 주업 등 특정법인 | |
| depreciation | Yes | 세법상 감가상각비(5년 정액, 원) | |
| business_ratio | No | 운행기록상 업무사용비율(소수, 작성 시, 0~1) | |
| booked_depreciation | Yes | 장부상 감가상각비(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a pure read-only, idempotent calculation, so safety is covered. The description adds value beyond that by disclosing what the result contains (업무사용비율, 손금불산입, 감가상각 한도) and the legal basis (법인세법 제27조의2, 시행령 제50조의2), which matters because there is 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?
Front-loaded with purpose, then clearly labelled 언제/입력/결과 sections. Efficient, though listing every parameter mapping is mildly redundant against a fully documented schema.
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 complex multi-input tax calculation, the description covers purpose, trigger condition, input meaning, the returned values, and the statutory basis. With no output schema, the 결과 sentence fills that gap, so an agent has everything needed to call and interpret it.
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 nine parameters. The description restates the same Korean labels and units with no new syntax or format information, so 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+resource: calculating 손금불산입 for 업무용승용차 관련비용, and enumerates the sub-cases it covers (업무사용비율, 사적사용, 미작성 시 기준비율, 감가상각 800만 원 한도). The domain is clearly orthogonal to every sibling (none address car expenses), so an agent can distinguish it 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 '언제' clause gives a clear trigger: when computing how much car expense for executives/employees is deductible. It gives context but names no exclusions or alternative tools to prefer, so it stops 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.
capital_gains_incomeRead-onlyIdempotent
토지·건물·주택의 양도차익 → 1세대1주택 비과세·고가주택 안분 → 장기보유특별공제(표1·표2) → 양도소득금액(소득세법 제89조·제92조·제95조·제97조·제103조, 시행령 제154조·제156조·제159조의3(4)·제160조·제176조의2·제163조). 언제: 부동산 양도소득금액·장기보유특별공제를 양도일 기준 공제율·고가주택 기준(2021.12.8. 전 9억원, 이후 12억원)으로 계산할 때. 입력: 자산 종류 → asset_type, 취득일·양도일 → acquisition_date·transfer_date, 양도가액·취득가액(실지거래가액) → transfer_price·acquisition_price, 자본적지출·양도비 → capital_expenditure·transfer_expenses, 등기 여부 → registered, (환산취득가액) acquisition_price=0이고 취득·양도 당시 기준시가 둘 다 있으면 환산취득가액 자동 계산(소득세법 시행령 제176조의2②2호, 제163조⑥). (주택) 1세대1주택 여부 → one_house, 비과세 요건 충족 → exempt_met, 거주기간(년) → residence_years, (주택, 1주택 아님) 다주택 중과 대상 → heavy_multi_home, 기본공제·과세표준까지 → apply_basic_deduction. 지원하지 않음(error): 분양권·조합원입주권·주식, 다주택·조정대상지역 중과, 비과세 보유기간 예외, 주거용 전환, 고가주택 일부 양도. 토지는 one_house=False, exempt_met=False 입력해도 오류 아님(주택 요건 무관). 결과: 판단(비과세·고가주택·적용 표, 환산취득가액 사용 시 필요경비 선택 근거)·결과(양도차익·과세대상 양도차익·보유·거주기간·공제율·장기보유특별공제액·양도소득금액, 선택 시 기본공제·과세표준)·산식·근거.
| Name | Required | Description | Default |
|---|---|---|---|
| one_house | No | 주택만: 양도일 현재 1세대 1주택(일시적 2주택 등 1주택으로 보는 경우 포함) 여부 | |
| asset_type | Yes | 양도자산 종류 — '토지'|'건물'(주택 아닌 건물)|'주택'(딸린 토지 포함). 그 밖의 자산은 지원하지 않음 | |
| exempt_met | No | one_house=True일 때: 1세대 1주택 비과세 요건(보유 2년 이상, 취득 당시 조정대상지역이면 거주 2년 이상) 충족 여부 | |
| registered | No | 등기 여부(False = 미등기양도자산: 비과세·장기보유특별공제·기본공제 배제) | |
| residence_end | No | 거주 종료일 YYYY-MM-DD — 생략 시 transfer_date를 사용 | |
| transfer_date | Yes | 양도일 YYYY-MM-DD(대금청산일, 2017-01-01 ~ 2026-12-31) | |
| transfer_price | Yes | 양도가액 — 양도 당시 실지거래가액(원) | |
| acquisition_tax | No | 취득세(원) — 문항 표의 '취득세'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함 | |
| residence_start | No | 거주 시작일 YYYY-MM-DD — residence_end와 함께 입력하면 거주기간(만 년수)을 도구가 계산함. residence_years와 다르면 문제로 거부 | |
| residence_years | No | one_house=True일 때: 보유기간 중 거주기간(만 년수, 1년 미만 버림) | |
| acquisition_date | Yes | 취득일 YYYY-MM-DD(대금청산일, 등기접수일이 앞서면 그날) | |
| heavy_multi_home | No | one_house=False인 주택: 다주택 중과(제104조⑦) 대상 여부. True면 지원하지 않음 | |
| holding_tax_paid | No | 보유 중 납부한 재산세·종합부동산세(원) — 필요경비에 넣지 않고 판단에서 필요경비가 아님을 명시함 | |
| acquisition_price | Yes | 취득가액 — 취득 당시 실지거래가액(원, 취득세·취득 중개수수료 등 포함, 재산세 제외, 환산취득가액 사용 시 0) | |
| transfer_expenses | No | 양도비(원, 양도 시 중개수수료 등, 없으면 0) | |
| capital_expenditure | No | 자본적지출액(원, 증명서류로 확인되는 것, 없으면 0) | |
| acquisition_brokerage | No | 취득 시 중개수수료(원) — 문항 표의 '취득시 중개수수료'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함 | |
| apply_basic_deduction | No | True면 양도소득 기본공제(연 250만원)와 과세표준까지 계산(같은 해 같은 그룹에서 이미 공제받았으면 False) | |
| transfer_standard_price | No | 환산취득가액 계산용 양도 당시 기준시가(원). acquisition_price=0일 때 acquisition_standard_price와 함께 입력 | |
| acquisition_standard_price | No | 환산취득가액 계산용 취득 당시 기준시가(원). acquisition_price=0일 때 transfer_standard_price와 함께 입력 |
common_input_taxRead-onlyIdempotent
겸영사업자 공통매입세액 안분·정산 + 공통사용재화 공급(부가법 제40조, 영 제81조제83조·제63조).
언제: 과세·면세 겸영 사업자의 예정·확정신고에서 공통매입세액 공제액과 공통사용재화 공급 시 추가 매출세액을 계산한다.
입력:
· 공급가액(예정·확정별 과세·면세), 예정 불공제액, 직전 과세기간 공급가액, 공통사용재화 공급 목록.
· 원장: ledger=[{항목, 매입세액 | 매입가액(→×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제',
과세비율(01) | 횟수:{과세,면세} | 면적:{과세,면세}}].
사용처별 처리는 어휘 공통매입세액_귀속.판단.사용처별에서 읽음.
prior_common_input_tax: 확정신고에서 ledger 사용 시 예정신고 기간의 공통매입세액. 기존 prior_nondeductible는 그대로.
결과: 판단·계산·결과(공제매입세액·추가_매출세액)·산식·근거. 계산의 실지귀속_공제는 기존 계산 키 유지.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| filing | Yes | 신고 구분('예정'|'확정') | |
| ledger | Yes | 원장형 입력 당기 매입 항목 [{항목, 매입세액 | 매입가액(×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(0~1) | 횟수:{과세,면세} | 면적:{과세,면세} | 신축건물(bool, 기본 False) — 둘 중 하나: 매입세액 또는 매입가액. 공통+신축건물+면적 있으면 예정사용면적비율 우선 적용 | |
| period | Yes | 과세기간('1기'|'2기') | |
| supplies | Yes | 공급가액 {예정:{taxable,exempt}, 확정:{taxable,exempt}} — 부가세 제외 금액, 확정신고는 전체 비율 사용. 둘 다 null이면 error | |
| new_business | No | 신규 사업 여부(기본 False) | |
| common_asset_sales | No | 공통사용재화 공급 목록 [{sale_price(공급가액), input_tax(그 재화의 매입세액 — ledger에 넣지 말고 여기만 입력, 신규 사업 아니면 직전 과세기간 비율로 안분 공제)}] | |
| prior_nondeductible | No | 예정신고 때 불공제한 공통매입세액. 없으면(null) 예정 기간 비율로 계산 | |
| prior_period_supplies | No | 직전 과세기간 {taxable, exempt} — 공통사용재화 공급 과세표준용 | |
| prior_common_input_tax | No | ledger로 확정신고할 때 예정신고 기간의 공통매입세액 |
corporate_taxARead-onlyIdempotent
법인세 산출세액(사업연도 과세표준 × 세율표, 1년 미만 사업연도 월할 환산). 언제: 법인세 신고·세무조정에서 과세표준이 정해졌을 때 산출세액을 구한다.
입력: 과세표준(과세표준, 원) → base, 사업연도(20162026) → year, 월수(112) → months.
결과: 산출세액·과세표준·사업연도·월수와 근거(법인세법 제55조①·②). Corporate income tax on a tax base for a fiscal year (rate table, prorated for short fiscal years).
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | 금액(원) | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| months | No | 사업연도 월수(1년 미만이면 1~11) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds value on top: it discloses the deterministic rate-table formula, the short-fiscal-year proration behavior, and the exact result fields with legal citation. It stops short of edge-case behavior (e.g., out-of-range years), hence not 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 computation before the when/input/result blocks, so an agent gets the essence in the first clause. The Korean-English duplication and the input mapping partially restate the schema, which is minor redundancy rather than bloat.
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 enumerating the return fields (산출세액, 과세표준, 사업연도, 월수, statutory basis). Combined with the stated trigger, inputs, and formula, an agent has enough to call it correctly; only boundary/error behavior is left unstated.
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 baseline is 3. The description goes slightly further by mapping each parameter to its business meaning (과세표준 in won, fiscal year, month count) and explaining that 'months' drives the 월할 환산 proration for fiscal years under one year — semantics the schema alone only hints at.
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 — computing corporate income tax (산출세액) — and even gives the computation rule (과세표준 × 세율표, prorated for short fiscal years) plus the statutory basis. This clearly separates it from siblings like income_tax, minimum_tax, or withholding_tax without needing to open 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 '언제' clause names a concrete trigger: when the tax base has been determined during corporate tax filing or tax adjustment. No alternative tool or when-not condition is given, but the trigger context is unambiguous for a single-purpose calculator.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_worker_withholdingARead-onlyIdempotent
일용근로자 원천징수세액((일급 − 15만 원) × 6% × (1 − 55%), 1천 원 미만 소액부징수). 언제: 일용근로자에게 일급을 지급할 때 원천징수할 세액을 계산한다. 입력: 일급(원) → daily_wage, 지급연도(2016~2026) → year. 결과: 원천징수세액, 근거(소득세법 제134조③·제129조①4호·제86조). Withholding on daily workers' wages.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | 지급연도(2016~2026) | |
| daily_wage | Yes | 일급(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, read-only, closed-world computation. The description goes further by disclosing the actual computation logic (formula, the 150,000 KRW deduction, and the sub-1,000 KRW exemption) and the legal basis returned, which is real behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the formula, then proceeds through when/input/result in an ordered, scannable structure. The trailing English gloss is mildly redundant but each section otherwise 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?
With no output schema, the description carries the return burden well, naming the result (원천징수세액) and its legal basis, and specifying inputs, range, and computation rule. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (daily_wage, year) are already documented, including the year range. The description only restates the same term-to-parameter mappings and range, adding no format or edge-case detail beyond the schema, so the baseline of 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 (계산한다 / calculates 일용근로자 원천징수세액) and even embeds the exact formula, pinning the tool to daily-worker withholding. This scope is clearly distinguishable from siblings like withholding_tax, wage_income_tax, and nonresident_withholding.
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) clause gives a clear trigger: paying a daily wage to a daily worker. It does not name alternative tools or state exclusions, but the scoping makes the applicable scenario unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deemed_bonus_resettlementARead-onlyIdempotent
소득처분 상여 연말정산 재정산(추가 원천징수세액). 언제: 법인세 소득금액 변동으로 상여 처분이 발생했을 때 해당 근로자의 연말정산을 재정산해 추가 원천징수세액을 구한다. 입력: 귀속연도 당초 총급여(원) → gross_pay, 당초 과세표준(원) → tax_base, 소득처분 상여(원) → bonus, 귀속연도(2016~2026) → year, 근로소득세액공제 외 세액공제 합계(원) → other_credits, 당초 결정세액(원, 모르면 생략) → prev_decided. 결과: 추가 원천징수세액, 근거(법인세법 제67조, 소득세법 시행령 제192조, 소득세법 제137조). Year-end resettlement after a deemed bonus (income disposition) is added to wages.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| bonus | Yes | 소득처분 상여(원) | |
| tax_base | Yes | 당초 과세표준(원) | |
| gross_pay | Yes | 귀속연도 당초 총급여(원) | |
| prev_decided | No | 당초 결정세액(원). 모르면 생략 | |
| other_credits | No | 근로소득세액공제 외 세액공제 합계(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuine value beyond them: the return is the additional withholding tax amount, it is derived from specific statutory bases (법인세법 제67조, 소득세법 시행령 제192조, 소득세법 제137조), and one input is explicitly optional. It does not, however, discuss precision/rounding or any failure modes.
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?
Purpose is front-loaded, then the 언제/입력/결과 blocks are labeled and scannable. The input block mildly duplicates the schema, but the overall package is compact and nothing reads as 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 naming the output (추가 원천징수세액) and its legal grounds. It also flags the required/optional split, so an agent has enough to call it correctly, though it omits units/rounding conventions and any dependency on the other tax figures being pre-computed.
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 six parameters are already documented in the schema, including the '모르면 생략' note on prev_decided. The description's '입력:' mapping restates the same Korean label-to-field pairs, so it adds little beyond the schema; the 3 baseline 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?
The opening phrase '소득처분 상여 연말정산 재정산(추가 원천징수세액)' names a specific verb (재정산/recompute) and resource (deemed-bonus year-end settlement), and the English gloss confirms it. It is clearly separable from sibling deemed_* tools (deemed_interest, deemed_dividend_bonus_shares) and from wage_income_tax because it targets the income-disposition bonus case specifically.
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 explicit '언제:' clause gives the trigger condition - a deemed bonus arising from a corporate-tax income adjustment. That is a clear when-to-use statement, but it never names an alternative tool or an exclusion (e.g., how it differs from wage_income_tax or deemed_dividend_bonus_shares), so it stops 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.
deemed_dividend_capital_reductionARead-onlyIdempotent
감자·주식소각·퇴사·탈퇴·해산 시 의제배당 = 받은 금전·재산가액 − 소멸 주식 취득가액. 언제: 유상감자·주식소각·퇴사·탈퇴·해산으로 주주가 대가를 받았을 때 의제배당을 계산한다. 무상주 과세 여부는 deemed_dividend_bonus_shares로 먼저 판단해 kind에 넣는다. 입력: shareholder_type — '법인' | '개인'. event — '감자' | '주식소각' | '퇴사·탈퇴' | '해산'. resolution_date — 결의일 등(YYYY-MM-DD). acquisitions — [{date, shares, kind, unit_cost?, source?}]: 유상취득은 unit_cost, 무상주_과세는 액면가액, 무상주_비과세는 0. 처분은 보유 감소. cash_received — 받은 금전(원). property_value — 금전 외 재산 시가(원). cancelled_shares — 소멸 주식 수(퇴사·탈퇴·해산은 생략 시 전부). par_value — 1주당 액면가액(무상주_과세가 있으면 필수). 결과: 의제배당금액, 단기소각주식수(결의일 전 2년 이내 비과세 무상주 — 먼저 소각, 취득가액 0; 개인은 주식발행초과금 전입분 제외), 평균단가(나머지 주식 총평균), 소멸주식 취득가액, 소각 후 1주당 장부가액, 산식, 근거. 사실이 빠지거나 맞지 않으면 'error'와 '필요 입력'을 돌려주고 계산하지 않음.
| Name | Required | Description | Default |
|---|---|---|---|
| event | Yes | 사유 — 감자(유상감자)·주식소각은 일부 소멸 가능, 퇴사·탈퇴·해산은 보유 주식 전부 소멸 | |
| par_value | No | 1주당 액면가액(원) — 무상주_과세가 있으면 필수(취득가액 = 액면가액) | |
| acquisitions | Yes | 주식 취득·처분 이력 [{date:'YYYY-MM-DD', shares, kind:'유상취득'|'무상주_과세'|'무상주_비과세'|'처분', unit_cost?(유상취득 1주당 취득가액), source?(무상주_비과세 재원: 주식발행초과금·자본준비금·재평가적립금)}] — 무상주 date는 자본전입 결의일 | |
| cash_received | Yes | 받은 금전(원) | |
| property_value | No | 받은 금전 외 재산의 가액(원) — 취득 당시 시가(주식이면 영 제14조①·소득세법 시행령 제27조① 평가액). 없으면 0 | |
| resolution_date | Yes | 감자·소각 결의일(퇴사·탈퇴는 그 날, 해산은 잔여재산가액 확정일), YYYY-MM-DD. 단기소각 2년 기간의 기준 | |
| cancelled_shares | No | 소멸(소각·감자)된 주식 수. 퇴사·탈퇴·해산은 생략하면 보유 주식 전부 | |
| shareholder_type | Yes | 주주 구분 — 법인세법 제16조·영 제14조(법인) / 소득세법 제17조·영 제27조(개인) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint=true and destructiveHint=false, so the safe-pure-computation profile is covered. The description adds real context beyond that: the exact arithmetic formula, the error contract ('사실이 빠지거나 맞지 않으면 error와 필요 입력을 돌려주고 계산하지 않음'), and the short-term cancellation rule (2-year window, 개인 excludes 주식발행초과금 전입분). It does not restate what annotations provide.
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 formula, then structured 입력:/결과: sections. It is long, but every line carries operational content (field semantics, defaults, output fields, error behavior) rather than filler. The formula-first ordering makes the purpose immediately legible.
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 burden and does so: it enumerates the result fields (의제배당금액, 단기소각주식수, 평균단가, 소멸주식 취득가액, 소각 후 1주당 장부가액, 산식, 근거) and the error shape. All 8 parameters are accounted for, so nothing needed to invoke or interpret the 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 the baseline is 3, but the description adds semantic rules the schema does not spell out: how to populate acquisitions by kind (유상취득→unit_cost, 무상주_과세→액면가액, 무상주_비과세→0, 처분→보유 감소) and the cancelled_shares omission default. That is genuine added meaning over the enum/description text.
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 computation ('의제배당 = 받은 금전·재산가액 − 소멸 주식 취득가액') with the exact triggering events (감자·주식소각·퇴사·탈퇴·해산), and explicitly names the sibling deemed_dividend_bonus_shares as the prior step for 무상주 과세 판단. An agent can distinguish this from other deemed-income tools 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 '언제:' clause gives an explicit trigger ('유상감자·주식소각·퇴사·탈퇴·해산으로 주주가 대가를 받았을 때'), and it routes the agent to deemed_dividend_bonus_shares first for 무상주 과세 판단, even stating what to pass (kind). This is a clear when-to-use plus a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deemed_interestARead-onlyIdempotent
가지급금 인정이자(적수 × 시가 이자율)와 부당행위계산 여부. 언제: 특수관계인 가지급금 이자와 부당행위 3억·5% 판정을 함께 구할 때. 입력: 가지급금 증감 [{date, amount(원, 대여 +, 회수 -)}] → movements, 사업연도 종료일(YYYY-MM-DD) → year_end, 시가 이자율(소수) → market_rate, 실제 이자율(소수) → charged_rate, 실제 받은 이자 금액(원) → received_interest, 사업연도 개시일(YYYY-MM-DD, 생략 시 year_end 기준 자동 계산) → fiscal_start. 결과: 적수·시가이자·수령이자·차액·익금산입액·부당행위 여부, 근거(법인세법 제52조, 시행령 제88조③·제89조③, 시행규칙 제43조).
| Name | Required | Description | Default |
|---|---|---|---|
| year_end | Yes | 사업연도 종료일(YYYY-MM-DD) | |
| movements | Yes | 가지급금 증감 목록 [{date:'YYYY-MM-DD', amount:원(대여 +, 회수 -)}] | |
| market_rate | No | 시가 이자율(소수, 예: 0.046 = 4.6%). 가중평균차입이자율 원칙, 예외 시 당좌대출이자율 0.046 | |
| charged_rate | No | 실제 받은 이자율(소수, 예: 0.0 = 무수익) | |
| fiscal_start | No | 사업연도 개시일(YYYY-MM-DD). 생략 시 year_end의 1년 전 다음 날 | |
| received_interest | No | 실제 받은 이자 금액(원, ge=0). 주면 charged_rate 계산 대신 이 금액을 수령이자로 사용 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds value beyond them by disclosing the computational method, the composed output set (적수·시가이자·수령이자·차액·익금산입액·부당행위 여부), and the governing statute (법인세법 제52조, 시행령 제88조③·제89조③) — genuinely new context.
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 cleanly sectioned into 목적/언제/입력/결과, so an agent can scan it quickly. The 입력 paragraph is nonetheless redundant with a fully-documented schema, slightly diluting information density.
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, and the description compensates by enumerating the returned fields, so an agent knows what it will receive. Inputs, trigger condition, and legal basis are all covered; only edge-case behavior (e.g. missing received_interest, empty movements) is left unstated.
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 defaults and anyOf-null behavior. The '입력' block largely re-maps Korean labels to the same parameter names and repeats the schema text, adding little semantic meaning beyond it.
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 computation with its formula ('적수 × 시가 이자율') plus the secondary judgment (부당행위계산 여부), which is far more than a restated name. However it never names or distinguishes the closely-related siblings (unfair_transaction, nonbusiness_interest_disallowance, thin_capitalization), leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '언제' block gives an explicit triggering condition: use when you need both the related-party 가지급금 interest and the 3억·5% unfair-transaction test together. That is clear context for selection, but no when-NOT-to-use or alternative tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depreciation_adjustmentARead-onlyIdempotent
법인세 감가상각 시부인 — 개별 자산별 상각범위액과 회사계상액 비교(법인세법 제23조, 시행령 제26조·제28조·제30조·제31조·제32조). 언제: 감가상각비 세무조정(상각부인액·시인부족액·전기 부인액 추인·감면법인 의제상각)과 세무상 미상각잔액을 구할 때. 입력: year — 사업연도(2016~2026), method — 정액법|정률법|무신고(asset_class 필요). useful_life 또는 rate — 내용연수(별표4 상각률) 또는 상각률. acquisition_cost·booked_depreciation — 기말 취득가액·당기 감가상각비. accumulated_dep_begin 또는 accumulated_dep_end — 기초 또는 기말 감가상각누계액. expensed_capex·repair_total·periodic_repair·prior_book_value — 비용 처리한 자본적 지출과 즉시상각의제 예외 판단(600만원·2019년까지 300만원 미만, 직전 장부가액 5% 미만, 3년 미만 주기 수선). prior_deemed_capex — 전기 이전 즉시상각의제 누계(정액법). prior_disallowed — 전기말 상각부인누계액(△유보면 음수). in_service_date — 기중 취득·사용개시일(월할, 1개월 미만은 1개월). fy_start·fy_end — 사업연도(12개월만 지원). tax_exempt — 법인세 면제·감면 여부. 결과: 세무조정(상각부인액 유보, 추인·감가상각의제 △유보)·상각범위액·회사계상액·기말 상각부인누계액·세무상 미상각잔액·판단·근거. 사실이 빠지거나 맞지 않으면 error와 필요 입력을 돌려주고 계산하지 않음.
| Name | Required | Description | Default |
|---|---|---|---|
| rate | No | 상각률을 직접 줄 때(소수, 예: 0.259). useful_life와 함께 주면 별표4와 같아야 함 | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| fy_end | No | 사업연도 종료일(YYYY-MM-DD), 생략하면 year-12-31 | |
| method | Yes | 신고한 상각방법. 신고하지 않았으면 '무신고'(asset_class로 법정 방법 결정) | |
| fy_start | No | 사업연도 개시일(YYYY-MM-DD), 생략하면 year-01-01 | |
| tax_exempt | No | 당기 법인세를 면제·감면받았는지(영 제30조 감가상각의제) | |
| asset_class | No | 자산 구분 — 무신고 법정 방법(영 제26조④)과 정률법 허용 여부 판단 | |
| useful_life | No | 신고내용연수(무신고면 기준내용연수, 2~60년) — 시행규칙 별표4 상각률을 고름 | |
| repair_total | No | 이 자산의 당기 수선비 지출 총액(원, 자본적+수익적). 생략하면 expensed_capex | |
| expensed_capex | No | 당기 수선비 등 비용으로 처리한 자본적 지출(원) | |
| in_service_date | No | 사업연도 중 취득해 사업에 사용한 날(YYYY-MM-DD) — 월할 상각 | |
| periodic_repair | No | 3년 미만 주기적 수선 지출 여부(영 제31조③3호) | |
| acquisition_cost | Yes | 기말 재무상태표상 취득가액(원, 자산으로 처리한 자본적 지출 포함) | |
| prior_book_value | No | 직전 사업연도말 재무상태표상 장부가액(취득가액 − 감가상각누계액, 원) — 수선비 5% 기준용 | |
| prior_disallowed | No | 전기말 상각부인누계액(유보 잔액, 원). 감가상각의제 △유보 잔액이면 음수 | |
| prior_deemed_capex | No | 전기 이전 즉시상각의제액 누계(원) — 정액법 취득가액에 가산 | |
| accumulated_dep_end | No | 기말 재무상태표상 감가상각누계액(원, 당기 감가상각비 포함) | |
| booked_depreciation | Yes | 당기 손익계산서 감가상각비(회사계상, 원) | |
| accumulated_dep_begin | No | 기초(전기말) 재무상태표상 감가상각누계액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuine behavioral context beyond them: it states that incomplete or inconsistent facts return an error with the missing inputs instead of computing, and it discloses the 12-month fiscal-year-only constraint and the 2016–2026 year range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The 언제/입력/결과 structure is well organized and front-loads purpose before inputs. The 입력 list, however, restates parameter meanings that are already fully documented in a 100%-coverage schema, adding some redundancy for a 19-parameter tool.
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, and the description compensates by enumerating the return contents (세무조정·상각범위액·회사계상액·기말 상각부인누계액·세무상 미상각잔액·판단·근거) plus the error path. For a complex 19-parameter statutory calculation, purpose, timing, inputs, outputs, and failure behavior are all covered.
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 the per-parameter descriptions already carry the baseline burden. The description still adds cross-parameter logic not obvious from the schema: method='무신고' requires asset_class, useful_life or rate is required, prior_disallowed is negative for 감가상각의제 △유보, and the 즉시상각의제 thresholds (600만원, 300만원 pre-2019, 5% book value, sub-3-year periodic repair) that tie several inputs together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line names a specific tax computation (법인세 감가상각 시부인), the exact comparison it performs (개별 자산별 상각범위액 vs 회사계상액), and the governing statutes. This clearly distinguishes it from sibling adjustment tools such as bad_debt_adjustment or entertainment_adjustment, which target entirely different tax adjustments.
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 '언제' block gives explicit conditions for use: 감가상각비 세무조정 (상각부인액·시인부족액·전기 부인액 추인·감면법인 의제상각) and 세무상 미상각잔액 산출. It provides clear context but names no exclusion conditions or alternative tools, which is a minor gap given the sibling list contains no directly competing depreciation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dividend_received_deductionARead-onlyIdempotent
내국법인 수입배당금액 익금불산입(피출자법인별 익금불산입률·지급이자 차감·세무조정). 언제: 법인세 세무조정에서 수입배당금 익금을 부인할 때. 입력: 사업연도 → year, 피출자법인 목록 → investees, 지급이자 → interest_paid, 차감 이자 → interest_excluded, 자산총액 적수 → total_assets_jeoksu. 결과: 익금불산입액의 피출자법인별 내역·세무조정·근거. 수입배당금 익금불산입 계산.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| fy_end | No | 사업연도 종료일 | |
| fy_start | No | 사업연도 개시일 | |
| investees | Yes | [{name, listed?, ratio|shares|lots, dividend, book_value_jeoksu?, exclusion?}] | |
| company_type | No | 피지배기업 구분 | 일반 |
| interest_paid | No | 금액(원) | |
| interest_excluded | No | 금액(원) | |
| total_assets_jeoksu | No | 자산총계 적수(원·일) | |
| holding_legacy_election | No | 지주회사가 종전 제18조의3 비율 선택 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds genuine behavioral context by describing the output shape ('결과: 익금불산입액의 피출자법인별 내역·세무조정·근거'), which is valuable given there is no output schema. It does not cover pagination or auth, but for a pure calculation this is largely sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then structured into 언제/입력/결과 blocks, which is easy to scan. It is compact for a 9-parameter tax tool, with no wasted 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?
For a complex 9-parameter tax-adjustment tool with no output schema, the description covers purpose, trigger, key input mapping, and the result structure. The only gap is a lack of disambiguation from the numerous sibling tax tools, but otherwise an agent has enough 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 the schema already documents all parameters including the enum for company_type and boolean election flag. The description maps some inputs to parameter names (year, investees, interest_paid, interest_excluded, total_assets_jeoksu) but adds no semantics 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: computing the income-exclusion for domestic-corporation dividends received, with per-investee exclusion rate, interest-paid deduction, and tax adjustment. This distinguishes it from broad aggregators like financial_income_aggregate, but it does not explicitly name or differentiate from close siblings such as deemed_dividend_bonus_shares or deemed_dividend_capital_reduction.
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?
It gives an explicit trigger with '언제: 법인세 세무조정에서 수입배당금 익금을 부인할 때', which is clear context for use. However, there are no when-not conditions and no routing to alternatives among the many dividend-related siblings, so usage remains implied rather than fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
donation_limitARead-onlyIdempotent
기부금 손금산입 한도(특례기부금 50%, 일반기부금 10%)와 한도초과·이월. 언제: 기부금을 손금산입할 때 한도와 한도초과액을 구한다. 입력: 기준소득(과세표준 계산 전 소득금액, 원) → base_income, 특례기부금 지출액(원) → special, 일반기부금 지출액(원) → general, 결손금(원) → carried_loss, 특례 이월액(원) → special_carry, 일반 이월액(원) → general_carry, 중소기업 여부 → sme, 사회적기업 여부 → social_enterprise, 사업연도(2016~2026) → year. 결과: 한도·한도초과·이월 손금산입, 근거(법인세법 제24조).
| Name | Required | Description | Default |
|---|---|---|---|
| sme | No | 중소기업 여부 | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| general | No | 금액(원) | |
| special | No | 금액(원) | |
| base_income | Yes | 금액(원) | |
| carried_loss | No | 금액(원) | |
| general_carry | No | 금액(원) | |
| special_carry | No | 금액(원) | |
| social_enterprise | No | 사회적기업 여부(일반한도 20% 적용) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/no-open-world, so the safety profile is covered. The description adds substantive domain behavior beyond that: the applied rates (특례 50%, 일반 10%), the carryforward handling, and the year range. It does not contradict any annotation.
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 cleanly organized into 언제/입력/결과 blocks. The parameter list is somewhat long but each mapping earns its place given the generic schema labels; no filler sentences.
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 state the results (한도·한도초과·이월 손금산입) plus the legal citation. Inputs are fully mapped. Minor gap: no note on output units or the interaction between carried_loss and the limits.
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 baseline is 3, but the schema's own descriptions are mostly generic ('금액(원)'). The description supplies the real semantics for each name (base_income=과세표준 계산 전 소득금액, special=특례기부금 지출액, carried_loss=결손금, etc.), adding genuine meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (기부금 손금산입 한도 = donation deduction limit) and enumerates the exact outputs (한도·한도초과·이월 손금산입). It also anchors the tool to a legal basis (법인세법 제24조), which clearly separates it from sibling limit tools like entertainment_limit and loss_carryforward_limit.
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?
An explicit '언제' clause states when to use it: 'compute the limit and excess when deducting donations.' This is clear contextual guidance, but no when-not conditions or named alternatives (e.g. when to prefer loss_carryforward_limit) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
earned_income_gross_payARead-onlyIdempotent
근로소득 항목별 과세·비과세를 판정하고 귀속연도를 확인해 총급여액·근로소득공제·근로소득금액을 계산한다(소득세법 제20조·제12조3호·제47조, 시행령 제11조·제12조·제17조·제17조의24·제38조·제49조).
언제: 연말정산·종합소득세 신고에서 급여·상여·수당·복리후생 급여 자료로 총급여액과 근로소득금액을 구할 때.
입력: 귀속연도(20162026) → year, 항목 목록 [{kind, amount, facts}] → items.
kind와 facts(필요한 사실):
· 급여·상여 — 다른 해 근로분이면 service_year
· 잉여금처분상여 — resolution_date(결의일 연도 귀속) / 인정상여 — service_year
· 식사대 — months, meal_provided / 자가운전보조금 — months, vehicle(본인소유|본인명의임차|기타), business_use, actual_travel_reimbursed
· 출산·보육수당 — purpose(보육: months, child_age / 출산: 2024~ within_2y_of_birth·payment_count·related_party, 그 전 months)
· 직무발명보상금 — retired(퇴직 후면 기타소득), 2024~ related_party
· 연장근로수당 — eligible_occupation, 해당 시 monthly_regular_wage·prior_year_gross(광산·일용은 mine_or_daily)
· 사택제공이익 — position / 주택자금대여이익 — sme(2024~ related_party)
· 학자금 — beneficiary(본인|가족), 본인이면 requirements_met / 실비변상여비 — actual_cost
· 단체보험료(연 한도) / 사회보험료_본인부담분_회사대납(과세) / 사회보험료_사용자부담분 — insurance
결과: 항목별(과세액·비과세액·근거·사유)·제외 항목(다른 해·다른 소득)·총급여액·비과세 합계·근로소득공제·근로소득금액.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| items | Yes | 근로소득 항목 [{kind, amount, facts}] — kind: 급여·상여·잉여금처분상여·인정상여·식사대·자가운전보조금·출산·보육수당·직무발명보상금·연장근로수당·사택제공이익·주택자금대여이익·단체보험료·학자금·실비변상여비·사회보험료_본인부담분_회사대납·사회보험료_사용자부담분. facts는 종류별 사실관계 dict(빠지면 필요한 입력을 돌려줌) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, read-only, idempotent, closed-world computation, so the safety profile is covered. The description adds real behavioral value beyond that: it discloses the fail-fast contract that missing facts cause the tool to return the required inputs, and it enumerates the result structure (per-item taxable/non-taxable, basis, reason, excluded items, totals). It does not explain handling of unsupported kinds or error surfaces.
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?
Long but tightly organized behind 언제 / 입력 / 결과 headers, with purpose front-loaded. The dense per-kind fact list is largely necessary for a tool of this complexity, though it is close to the point where detail crowds out quick scanning.
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 listing every result component. Input semantics are unusually well covered. The only shortfall is the absence of boundaries against similar siblings and of any note on limits or failure modes beyond missing facts.
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 nominally 100%, but the items array is effectively untyped in the schema; the description is the only place that enumerates each kind and the specific facts each kind requires (service_year, months, vehicle type, related_party, etc.). That is substantial meaning beyond structured fields, though value formats and defaults are still unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource chain: it 판정s taxable/non-taxable status per item and computes 총급여액·근로소득공제·근로소득금액, citing the exact statutory provisions. It is clearly distinguishable from generic income tools by scope, but it never names the closely related siblings (e.g. wage_income_tax, retirement_income_tax) to draw the boundary, so an agent could still confuse gross-pay computation with the actual tax-amount tool.
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 explicit triggering contexts (연말정산, 종합소득세 신고, when 총급여액/근로소득금액 are needed) and the input section implies the data shape required. There is no when-not guidance nor any pointer to an alternative tool for the tax amount versus the gross-pay base.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
entertainment_adjustmentRead-onlyIdempotent
기업업무추진비 세무조정 — 2023년 이전 사업연도의 "접대비"와 같은 항목(2024.1.1. 명칭 변경, 법률 19193). 접대비 문제·장부도 이 도구로 계산한다(법인세법 제25조, 시행령 제40조·제41조·제42조). 언제: 법인세 신고에서 기업업무추진비 손금불산입을 항목별로 계산할 때. 입력: · 원장: ledger=[{항목, 금액, 증빙:'없음'|'영수증 등'|'적격'(기본 '적격'), 성격?:'교제목적'|'직원단체_법인'|'직원단체_비법인'|'임직원부담'|'현물'|'경조금'|'문화', 시가?, 장부가액?, 건당기준초과?:(기본 true)}], revenue={매출액, 특수관계매출?(기본 0), 매출할인등:{일반?, 특수관계?}(기본 0)}. 증빙 허용값(어휘 기반): · 없음 — 지출 증빙이 전혀 없는 건(손금불산입·대표자상여) · 영수증 등 — 영수증 등은 있으나 적격증명서류가 아닌 건(건당 기준 초과 시 손금불산입·기타사외유출) · 적격 — 적격증명서류(세금계산서·계산서·신용카드·현금영수증) 수취 건(한도 시부인 대상) 성격 판단(어휘 기업업무추진비_포함항목.판단.성격별): · 없음·교제목적 → 포함(법 제25조①) / 직원단체_법인 → 포함(영 제40조②) / 직원단체_비법인 → 제외(복리후생비) · 임직원부담 → 제외(영 제40조①) / 현물 → 포함(max(시가, 장부가액) + 부가세, 부가세별도 기본 True, 영 제42조⑥·법 제36조①3호) / 경조금·문화 → 기존과 동일 · 사적사용 → 시부인 대상 제외, 직접 손금불산입(상여, 법인세법 제19조②·시행령 제40조①) 결과: 판단(항목별·근거)·결과(한도·한도초과)·세무조정(구분·금액·소득처분)·소득처분별_합계·손금불산입_합계·계산. 기업업무추진비 세액공제.
| Name | Required | Description | Default |
|---|---|---|---|
| sme | Yes | 중소기업 여부 | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| ledger | Yes | 원장형 입력 [{항목, 금액, 증빙:'없음'|'영수증 등'|'적격'(기본 '적격'), 성격?:'교제목적'|'직원단체_법인'|'직원단체_비법인'|'임직원부담'|'현물'|'경조금'|'문화'|'사적사용', 시가?, 장부가액?, 건당기준초과?}] — 성격별 포함·제외는 어휘 기업업무추진비_포함항목으로 판단. '사적사용'은 시부인 대상 제외, 직접 손금불산입(상여 | |
| months | No | 사업연도 월수(1~12) | |
| revenue | No | 수입금액 원장형 입력 {매출액, 특수관계매출?(기본 0), 매출할인등:{일반?, 특수관계?}(기본 0)} — 기업회계기준 매출액 기준(영 제42조①). 없으면 수입금액 0 | |
| 부가세별도 | No | 현물 접대비 평가 시 부가가치세 포함 여부(기본 True — 사업상 증여는 매출세액 포함, 영 제42조⑥·법 제36조①3호 준용) |
entertainment_limitARead-onlyIdempotent
기업업무추진비(접대비) 한도와 한도초과액. 언제: 법인세 세무조정에서 기업업무추진비 손금불산입액을 구할 때. 입력: 수입금액(일반) → general_revenue, 특수관계인 수입 → related_revenue, 중소기업 여부 → sme, 지출액(접대비) → expensed, 문화비 → culture, 사업연도 월수 → months. 결과: 한도·한도초과액(손금불산입)·근거(법인세법 제25조, 시행령 제42조). 기업업무추진비 한도와 한도초과액 계산; 접대비가 한도를 넘는가 확인할 때 쓴다.
| Name | Required | Description | Default |
|---|---|---|---|
| sme | Yes | 중소기업 여부 | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| months | No | 사업연도 월수(1~12) | |
| culture | No | 금액(원) | |
| expensed | Yes | 금액(원) | |
| general_revenue | Yes | 금액(원) | |
| related_revenue | No | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds behavior beyond that by naming the outputs (limit, excess/non-deductible, legal basis under Corporate Tax Act Art. 25 / Decree Art. 42), which matters since there is 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?
Well-structured with explicit 언제/입력/결과 (when/input/result) sections that are front-loaded and scannable. Minor redundancy in the closing sentence, which restates the purpose already given in the opening line.
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 deterministic tax-calculation tool with read-only annotations and no output schema, the description covers the trigger context, the full input mapping, and the expected outputs plus legal basis. Complete enough to invoke correctly; only the sibling distinction is absent.
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 the baseline is 3, but the description compensates for the schema's generic '금액(원)' labels by mapping Korean tax concepts to parameter names ('수입금액(일반) → general_revenue', '지출액(접대비) → expensed', etc.). This adds genuine semantic meaning over the terse schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('기업업무추진비 한도와 한도초과액 계산' / calculate the entertainment expense limit and excess). An agent can tell it computes a deduction cap, but the description never distinguishes it from the very similar sibling 'entertainment_adjustment', which appears in the same 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?
Gives explicit context through the '언제' (when) cue: during corporate tax adjustment to obtain the non-deductible entertainment amount, and to check whether entertainment exceeds the limit. Clear usage context, but no when-not condition and no pointer to the near-duplicate sibling 'entertainment_adjustment'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_relationsA
주주명부·가족관계·임원명단 PDF에서 관계표(people/family/stakes/officers)를 추출한다. 언제: 세무조사·의료법인 친족확인 등에서 PDF 문서에 있는 관계표를 도구 입력으로 정리할 때. 입력: PDF 파일 경로 → pdf_path. 결과: people·family·stakes·오 officers 추출 결과(초안) + AI 생성 표시(필요 시). related_judge에 넣기 전에 사람이 확인한다. UPSTAGE_API_KEY 없이도 pypdf 로컬 추출 후 정리 가능(기본), 키 설정 시 Document Parse + Solar Pro 4로 더 정교한 표 추출. 주주명부·가족관계·임원명단 PDF에서 관계표를 뽑는다.
| Name | Required | Description | Default |
|---|---|---|---|
| pdf_path | Yes | PDF 파일 경로 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that results are a draft (초안) marked as AI-generated, that human verification is required before related_judge, and it explains the dual execution path — local pypdf extraction by default vs. UPSTAGE_API_KEY enabling Document Parse + Solar Pro 4 for higher fidelity. It does not state failure modes or limits on malformed/complex PDFs, which keeps it 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The labeled structure (언제 / 입력 / 결과) is helpful and front-loaded, but the closing sentence restates the opening purpose verbatim, and '오 officers' contains a typo. The duplication costs real space in an otherwise tight definition.
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, and the description compensates by naming the returned sections (people/family/stakes/officers), the draft status, and the AI-generated marker. Combined with the stated dependency on UPSTAGE_API_KEY and the human-review requirement, an agent has what it needs to call this 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?
One parameter with 100% schema description coverage, so the schema already documents pdf_path. The description restates 'PDF 파일 경로 → pdf_path' without adding format, path-style, or constraint details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (추출한다) and resource (관계표: people/family/stakes/officers) plus the source document types (주주명부·가족관계·임원명단 PDF). This clearly separates it from related_judge and kinship_check, which operate on already-structured input rather than raw PDFs.
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 names concrete triggering scenarios (세무조사, 의료법인 친족확인) and the exact situation (when a relationship table exists in a PDF and must be converted to tool input). It also names the downstream handoff to related_judge and states a human must verify before that step, which is explicit sequencing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
financial_income_aggregateARead-onlyIdempotent
종합소득 합산 금융소득(이자·배당)과 Gross-up 계산(소득세법 제14조·제16조·제17조·제56조). 언제: 종합소득세 신고에서 금융소득 종합과세 대상 여부와 배당가산(Gross-up)액을 계산할 때. 입력: 귀속연도(2016~2026) → year, 금융소득 항목 목록 [{kind, amount, ...}] → items. kind 허용값(어휘 기반, 별칭 포함): · 예금이자 — 예금·적금·부금의 이자 · 비영업대금이익 — 사업이 아닌 금전 대여에서 받는 이자 · 소비대차전환이자 — 외상매출금 등 거래 대금이 소비대차로 바뀐 뒤 그 원금에서 생긴 이자 · 외상매출금지급기일연장이자 — 물품·용역 대금의 지급기일을 연장해 주고 추가로 받는 금액(사업소득) · 저축성보험차익 — 보험 만기·해지 시 받는 보험금에서 납입보험료를 뺀 차익 · 투자신탁환매이익 — 집합투자기구(투자신탁 등)로부터 받는 이익 · 파생결합사채이익 — 상법상 파생결합사채(ELB 등)에서 받는 이익 · 장내파생상품이익 — KOSPI200 선물·옵션 등 장내파생상품 거래 이익(양도소득) · 상장법인현금배당 — 상장 내국법인에서 받는 이익배당(Gross-up 대상) · 비상장법인현금배당 — 비상장 내국법인에서 받는 이익배당(Gross-up 대상) · 의제배당_잉여금자본전입 — 잉여금을 자본에 전입해 받은 무상주(재평가적립금을 일부만 전입하면 1% 토지분은 전입액 × (1% 토지 재평가차액 ÷ 재평가차액 전체)로 안분, 법인세법 시행령 제12조④, 소득세법 시행령 제27조⑤) · 인정배당 — 법인세법에 따라 배당으로 소득처분된 금액(Gross-up 대상) · 출자공동사업자배당 — 출자공동사업자로부터 받는 배당(무조건 종합과세, 2천만원 판정 제외, Gross-up 비대상) · 외국법인배당 — 외국법인으로부터 받는 배당(조건부 종합과세, Gross-up 비대상) · 환매조건부매매차익 — RP(환매조건부매매) 차익(이자소득, 조건부 종합과세) · 법원보증금이자 — 법원 공탁보증금 이자(무조건 분리과세, 금융소득 합계·합산액 제외) · 직장공제회초과반환금 — 직장공제회 초과 반환금(무조건 분리과세, 금융소득 합계·합산액 제외) 결과: 판단(항목별 이자/배당/제외·Gross-up 대상 여부)·결과(이자소득금액·배당소득금액·합산액)·계산(중간값). 금융소득 종합과세·배당가산.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| items | Yes | 금융소득 항목 [{kind, amount, ...}] — kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive. The description adds real behavioral context beyond that: per-kind treatment (which kinds are unconditionally separately taxed and therefore excluded from the 합계·합산액, e.g. 법원보증금이자, 직장공제회초과반환금), which are Gross-up 대상 vs 비대상, and the year range. It does not detail the return shape beyond category names, but the tax-treatment disclosures are substantive.
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?
Long, but front-loaded and structurally segmented into 언제/입력/결과 with a bulleted kind list. Each kind definition earns its place because the correct kind selection drives the tax treatment, though the statutory asides (e.g. the 재평가적립금 1% apportionment formula) are denser than strictly needed for invocation.
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, and the description outlines the return categories (판단·결과·계산), so an agent knows what comes back. Combined with the annotated read-only profile and full kind semantics, it is complete enough to call correctly, with only minor gaps in exact item-object fields.
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 the baseline is 3, but the description goes well beyond the schema by defining the meaning of each kind value (with aliases and statutory bases) and specifying that year maps to 귀속연도 2016–2026. It could still clarify the full shape of each item object ('{kind, amount, ...}' leaves extra fields implicit).
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: aggregating financial income (interest/dividends) and computing the dividend gross-up, anchored to named tax-law articles (소득세법 제14·16·17·56조). This is clearly distinguishable from siblings like other_income_aggregate, income_tax, and dividend_received_deduction.
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 explicitly states the triggering context: filing comprehensive income tax and needing to determine whether financial income is subject to aggregation and to compute the gross-up amount. It does not, however, name a sibling alternative or state when-not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
foreign_tax_creditARead-onlyIdempotent
법인세 외국납부세액공제(직접·간주·간접, 국가별 한도, 한도초과 이월). 언제: 국외원천소득에 외국 법인세를 낸 내국법인의 공제액·Gross-up·이월액을 구할 때.
입력:
year — 사업연도(20162026). 이월기간·손금산입방법 허용 여부가 연도별.
base — 과세표준(원). base_includes_grossup — base에 Gross-up 포함 여부.
method — '세액공제'|'손금산입'(2020년까지).
countries — 국가별 foreign_income(Gross-up 전 국외원천소득), direct_tax, deemed_tax, related_costs(대응비용), reduction_excluded,
subsidiaries(외국자회사 배당: dividend 원천징수 전, withholding_tax, received_on, ownership 소수, holding_months 배당기준일 현재, resource_dev, sub_income·sub_tax 자회사 소득금액·법인세액, participation_exempt 2023 제18조의4 적용 여부).
months — 사업연도 월수.
결과: 간접외국납부세액, Gross-up 익금산입액, 국가별 국외원천소득·공제한도·공제액·한도초과 이월액·이월배제액, 산출세액, 공제액 합계, 이월공제기간, 산식, 근거.
지분율 요건은 배당 받은 날 기준(2022년까지 25%, 2023~ 10%, 해외자원 5%). 손자회사·이월액 공제·이월결손금 안분(영 §94⑥)은 반영 안 함 — 국외원천소득에 미리 반영.
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | 각 사업연도 소득에 대한 과세표준(원). Gross-up 반영 여부는 base_includes_grossup으로 지정 | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| method | Yes | 외국납부세액 처리 방법. 손금산입은 2020 사업연도까지만(2021~ 삭제) | |
| months | No | 사업연도 월수(1~12) | |
| countries | Yes | 국가별 [{country, foreign_income, direct_tax, deemed_tax?, related_costs?, reduction_excluded?, subsidiaries?}] — foreign_income: 국외원천소득(Gross-up 전, 수입배당금은 원천징수 전 금액 포함), direct_tax: 직접외국납부세액(자회사 배당 원천징수세 제외), deemed_tax: 간주외국납부세액, related_costs: 국외원천소득대응비용, reduction_excluded: 감면·면제 대상 국외원천소득×감면비율, subsidiaries: [{name, dividend, withholding_tax?, received_on, ownership, holding_months, resource_dev, sub_income, sub_tax, participation_exempt?}] | |
| base_includes_grossup | Yes | base에 간접외국납부세액 익금산입(Gross-up)이 이미 들어 있으면 true, 아니면 false(도구가 더함) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering readOnly/idempotent/non-destructive, the description adds meaningful behavioral context beyond them: year-dependent rules (이월기간·손금산입방법 허용 여부가 연도별), the fact that 손금산입 only applies through 2020, changing ownership thresholds (25% → 10% in 2023, 5% for 자원개발), and explicit limitations of what the tool does NOT compute.
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 and organized into 입력/결과/주의 blocks, which aids scanning. It is on the long side and partially restates the country-object fields already present in the schema, but the redundancy is limited and most lines carry unique constraints.
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, and the description compensates by enumerating the return contents (간접외국납부세액, Gross-up 익금산입액, 국가별 한도·공제액·이월액, 산출세액, 이월공제기간, 산식, 근거) along with the known model limitations. 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 coverage is 100%, so baseline is 3, but the description goes further by clarifying non-obvious semantics: foreign_income is pre-Gross-up and pre-withholding, direct_tax excludes subsidiary withholding tax, holding_months is measured at 배당기준일, and participation_exempt applies from 2023 under 제18조의4.
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: 법인세 외국납부세액공제 with its scope enumerated (직접·간주·간접, 국가별 한도, 한도초과 이월). It is clearly distinguishable from siblings like corporate_tax, dividend_received_deduction, and special_tax_credit.
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 explicit trigger conditions (국외원천소득에 외국 법인세를 낸 내국법인이 공제액·Gross-up·이월액을 구할 때). It also declares out-of-scope items (손자회사, 이월액 공제, 이월결손금 안분 미반영), but does not name an alternative tool for those cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gift_taxARead-onlyIdempotent
거주자 수증자 증여세 과세가액·증여재산공제·과세표준·산출세액·납부할세액. 언제: 증여세 신고·계산 시. 입력: 증여일 → gift_date, 증여재산가액 → gift_value, 증여자 관계 → relation, 10년 내 동일 증여자 증여 → prior_gifts_same_donor, 부담부증여 인수채무 → assumed_debt, 사전증여 공제 사용량 → prior_deduction_used, 혼인·출산 공제 → marriage_birth. 결과: 과세가액·증여재산공제·과세표준·산출세액·할증세액·신고세액공제·납부할세액, 근거. 증여세 과세가액·공제·세액 계산.
| Name | Required | Description | Default |
|---|---|---|---|
| filed | No | 법정신고기한 내 신고 | |
| excluded | No | 금액(원) | |
| relation | Yes | 수증자 기준 증여자와의 관계 | |
| gift_date | Yes | 증여일(YYYY-MM-DD, 2016-01-01~2026-12-31) | |
| gift_value | Yes | 금액(원) | |
| nontaxable | No | 금액(원) | |
| assumed_debt | No | 금액(원) | |
| appraisal_fee | No | 금액(원) | |
| other_credits | No | 금액(원) | |
| marriage_birth | No | 혼인일 전후 2년·자녀 출생일부터 2년 내 직계존속 증여 | |
| generation_skip | No | 자녀 아닌 직계비속 수증 | |
| recipient_minor | No | 수증자가 미성년자 | |
| marriage_birth_used | No | 금액(원) | |
| prior_gift_tax_paid | No | 금액(원) | |
| share_appraisal_fee | No | 금액(원) | |
| prior_deduction_used | No | 금액(원) | |
| share_appraisal_count | No | 평가기관 수 | |
| prior_gifts_same_donor | No | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so the safety profile is covered. The description adds that the tool returns an intermediate computation chain including '근거' (basis), which is mildly useful, but it discloses no validations, error conditions, or edge-case behavior beyond that.
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?
It is well organized into 언제 / 입력 / 결과 sections with purpose front-loaded. The closing sentence ('증여세 과세가액·공제·세액 계산') redundantly restates the opening, but overall it is efficient and structured.
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 an 18-parameter complex tax tool with no output schema, the description compensates by enumerating the returned values (과세가액 through 납부할세액 and 근거) and covering the three required inputs. It is largely complete, though it could clarify which of the 15 optional parameters materially change the computation.
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 18 parameters. The description maps seven concepts (gift_date, gift_value, relation, prior_gifts_same_donor, assumed_debt, prior_deduction_used, marriage_birth) to fields, but this largely restates the existing schema descriptions, so the baseline of 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?
The description names a specific verb+resource: computing a resident donee's gift tax chain (과세가액·증여재산공제·과세표준·산출세액·납부할세액). An agent can tell it is a gift-tax calculation tool. It does not explicitly distinguish itself from siblings like inheritance_tax or tunnelling_gift, so it falls short of 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 the triggering context (gift tax filing/calculation). However, no alternatives or when-not conditions are named, even though siblings such as inheritance_tax and tunnelling_gift exist. This is implied usage, not explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
income_taxARead-onlyIdempotent
종합소득세 산출세액(귀속연도 세율표). 언제: 종합소득 과세표준이 정해지면 그에 대한 산출세액을 구한다(근로·사업·기타·이자·배당 등 종합과세 대상). 입력: 종합소득 과세표준(원) → base, 귀속연도(2016~2026) → year. 결과: 산출세액, 근거(소득세법 제55조). Comprehensive income tax on a tax base (year-specific rate table).
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | 종합소득 과세표준(원) | |
| year | Yes | 사업연도·귀속연도(2016~2026) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a pure, idempotent, deterministic read/compute operation, so the burden is lower. The description adds genuinely useful context beyond the annotations: it discloses the year range (2016~2026) and that the result includes the computed tax amount plus its legal basis (소득세법 제55조), reinforcing the deterministic, table-driven nature.
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?
Purpose is front-loaded, followed by a disciplined 언제/입력/결과 (when/input/result) structure that is easy to scan. The bilingual restatement is mildly redundant but each section carries distinct information rather than 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?
There is no output schema, so the description rightly covers the return (산출세액 plus legal basis). For a two-parameter deterministic calculator that is nearly complete; the only minor omission is whether the result excludes separate local income tax, which affects how the agent presents the output.
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 base as the comprehensive income tax base in KRW and year as the attribution year bounded 2016~2026. The description restates these in structured form (입력: base, year) but adds little syntax or semantic detail beyond what the schema provides, so the baseline of 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?
The description states a specific verb+resource: computing the comprehensive income tax (종합소득세 산출세액) from a tax base using a year-specific rate table. It scopes the subject matter (근로·사업·기타·이자·배당 등 종합과세 대상) and notes the legal basis (소득세법 제55조), which differentiates it from siblings like wage_income_tax, corporate_tax, and retirement_income_tax.
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?
It gives a clear precondition for use: 'when the comprehensive income tax base is determined' (종합소득 과세표준이 정해지면). However, it names no explicit alternatives or exclusion conditions against the many sibling calculators, so the agent must infer routing from the resource name rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inheritance_taxRead-onlyIdempotent
거주자 피상속인 상속세 과세가액·상속공제·과세표준·산출세액·납부할세액. 언제: 상속세 신고·계산 시. 입력: 본래 상속재산가액 → estate_value, 상속개시연도 → year, 간주상속재산 → deemed_estate, 추정상속재산 목록 → presumed_items, 비과세·불산입·공과금·장례비용·봉안비용·채무·사전증여·특별공제 등. spouse.legal_share는 '3/5' 같은 분수 문자열 또는 0.6 같은 0 초과 1 이하 소수. 결과: 과세가액·상속공제합계·과세표준·산출세액·신고세액공제·납부할세액, 공제 내역, 근거. 상속세 과세가액·공제·세액 계산.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| debts | No | 금액(원) | |
| filed | No | 법정신고기한 내 신고 | |
| minors | No | [미성년자별 19세까지 남은 연수] | |
| spouse | No | 실제 상속받은 금액·법정상속분 등. {actual(실제 상속액), legal_share('3/5' 같은 분수 문자열 또는 0.6 같은 0 초과 1 이하 소수)} | |
| seniors | No | 65세 이상 인원 | |
| children | No | 자녀 수 | |
| disabled | No | [장애인별 기대여명 연수] | |
| excluded | No | 금액(원) | |
| nontaxable | No | 금액(원) | |
| estate_value | Yes | 금액(원) | |
| funeral_cost | No | 금액(원) | |
| appraisal_fee | No | 금액(원) | |
| deemed_estate | No | 금액(원) | |
| other_credits | No | 금액(원) | |
| presumed_items | No | [{kind, window, amount, unexplained}] | |
| public_charges | No | 금액(원) | |
| gift_tax_credit | No | 금액(원) | |
| cohabiting_house | No | {value, secured_debt?} | |
| sole_spouse_heir | No | 배우자 단독상속 | |
| enshrinement_cost | No | 금액(원) | |
| prior_gifts_heirs | No | 금액(원) | |
| renounced_to_next | No | 금액(원) | |
| prior_gifts_others | No | 금액(원) | |
| share_appraisal_fee | No | 금액(원) | |
| bequest_to_non_heirs | No | 금액(원) | |
| net_financial_assets | No | 금액(원) | |
| prior_gift_deductions | No | 금액(원) | |
| share_appraisal_count | No | 평가기관 수 | |
| business_farm_deduction | No | 금액(원) | |
| generation_skip_surcharge | No | 금액(원) |
input_tax_recalculationARead-onlyIdempotent
감가상각자산 공통매입세액 재계산(부가법 제41조, 영 제83조). 언제: 감가상각자산 매입 후 면세비율이 취득 과세기간 대비 5%p 이상 변동하면 확정신고 때 납부·환급세액을 재계산한다. 입력: · 자산 종류 → asset_type, 취득 과세기간 {year, period} → acquired, 과세기간별 면세비율 목록(취득~당기, 마지막이 당기) → ratios. · 기존: 해당 재화 매입세액 총액 → input_tax. · 일괄공급 안분 연결(신규 대안): bundle={total_price, vat_included, appraisal?:{building,land}, standard_value?:{building,land}, book_value?:{building,land}}. bundle이 주어지면 내부에서 bundled_supply_split과 같은 규칙으로 건물 공급가액을 안분해 부가가치세를 input_tax로 쓴다. input_tax와 bundle 둘 다 주면 error. 결과: 이력(기간별 비율·기준비율·변동·재계산 여부·경과과세기간수·세액)·결과(당기_납부세액_가산·건물_매입세액)·판단(안분 기준)·근거.
| Name | Required | Description | Default |
|---|---|---|---|
| bundle | No | 토지·건물 일괄공급 안분 입력(input_tax 대안) {total_price, vat_included, appraisal?, standard_value?, book_value?} — bundled_supply_split과 같은 규칙으로 건물 매입세액을 구함 | |
| ratios | Yes | [{year, period, exempt_ratio}] — 취득 과세기간부터 당기까지 순서대로(마지막이 당기) | |
| acquired | Yes | {year, period} — 취득 과세기간 | |
| input_tax | No | 해당 재화 매입세액 총액(원). bundle을 주면 생략 | |
| asset_type | Yes | 자산 종류('건물·구축물'|'기타감가상각자산') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so safety is covered; the description adds genuinely new behavior: an error is raised if both input_tax and bundle are supplied, and bundle input is internally allocated using the same rules as bundled_supply_split. It also previews the returned sections (이력/결과/판단/근거), though it says nothing about permissions or performance.
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 legal basis, then organized as 언제/입력/결과 with short bullets; every line carries information. It is dense but not padded, with only mild redundancy between the bundle bullet and the bundle schema description.
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 enumerates the returned structure (history with ratio, benchmark, variance, recalculation flag, elapsed periods, tax amount; result; judgment basis; legal grounds). For a 5-parameter tool with nested objects, an agent has everything needed to call and interpret it.
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 the baseline is 3, but the description goes beyond the schema by pairing Korean field labels with parameter names, specifying that ratios must run acquisition-to-current with the last entry being the current period, and documenting the input_tax/bundle exclusivity that the schema does not state.
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 ('감가상각자산 공통매입세액 재계산') with the governing legal basis (부가법 제41조, 영 제83조), and its scope is clearly narrower than sibling allocation tools like vat_common_input_allocation or common_input_tax. An agent can distinguish it 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 '언제' section gives an explicit trigger condition: recalculation is required at the final return when the exempt ratio moves ≥5%p versus the acquisition period. It also states the alternative input path (bundle instead of input_tax) and the mutual-exclusion rule, so both when-to-use and which-input questions are answered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inventory_valuation_adjustmentARead-onlyIdempotent
재고자산 평가 세무조정(세법상 평가방법 결정·평가차 유보). 언제: 법인세 세무조정에서 재고자산 기말평가액과 장부가액 차이를 유보로 조정할 때.
입력: year — 사업연도 개시 연도(2016~2026) fy_start/fy_end — 사업연도 개시일·종료일(YYYY-MM-DD). 생략 시 year-01-01/year-12-31 new_corp — 설립(수익사업 개시) 첫 사업연도인지 (최초 신고기한: 종료일 달 말일 + 3개월) items — [{category: '제품·상품'|'반제품·재공품'|'원재료'|'저장품'|'매매목적부동산', name?(표시용), reported_method: 원가법 6종|'무신고', reported_lcm?(저가법 신고 여부), used_method: 원가법 6종, used_lcm?(저가법 평가 여부), change_report?: {method, lcm?, filed_on: YYYY-MM-DD}, book_value: int≥0, valuations: {개별법·선입선출법·...·시가: int≥0}, prior_adjustment?: int(전기 유보 잔액)}]
결과: 세무조정사항 목록, 구분별 판정·세법 방법·평가액·조정액, 익금산입·손금산입 합계, 순조정액, 계산(기한 등), 근거. 근거: 법인세법 제42조①2호·②, 시행령 제73조1호·제74조①~⑥.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| items | Yes | 재고자산 구분별 목록 (1개 이상). 각 항목: category, reported_method, used_method, book_value, valuations, change_report(선택), reported_lcm/used_lcm·name·prior_adjustment(선택) | |
| fy_end | No | 사업연도 종료일(YYYY-MM-DD). 생략 시 year-12-31 | |
| fy_start | No | 사업연도 개시일(YYYY-MM-DD). 생략 시 year-01-01 | |
| new_corp | No | 설립(수익사업 개시) 첫 사업연도 여부 — 최초 신고기한 적용 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: it is a pure calculation engine that emits adjustment-line items, per-category judgments, income/deduction totals, net adjustment amounts, and cites the governing statute (법인세법 제42조, 시행령 제73·74조).
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 purpose, then labeled sections (언제 / 입력 / 결과 / 근거) make it easy to scan. It is relatively long and the 입력 block partially restates the schema, but for a tool of this domain complexity each section carries useful information.
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 enumerating the result contents (adjustment list, per-category valuation, income/deduction totals, net, deadline computation, basis). Combined with the fully-covered input parameters and legal citations, an agent has enough to invoke and interpret it, though edge-case error behavior is unaddressed.
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 baseline would be 3, but the description genuinely enriches the parameters: it enumerates category values ('제품·상품'|'반제품·재공품'|'원재료'|'저장품'|'매매목적부동산'), the 원가법 6종/'무신고' method set, the lcm flag meaning, the change_report sub-fields, and adds the new_corp deadline rule (종료일 달 말일 + 3개월) absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a precise verb+resource: inventory-asset valuation tax adjustment (재고자산 평가 세무조정) with the sub-scope ʻdetermining the statutory valuation method and reserving the valuation difference.ʼ This is clearly distinguishable from siblings like depreciation_adjustment or bad_debt_adjustment 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?
An explicit '언제:' clause gives the trigger condition — corporate-tax adjustments where ending inventory value differs from book value and the difference is reserved. Clear context is provided, but no when-not conditions or named alternatives are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invoice_penaltyARead-onlyIdempotent
세금계산서 가산세(가공 2%·3%·4%, 미발급 2%, 지연발급 1% 등, 공급일 기준 세율 적용). 언제: 세금계산서 발급·수취 의무를 위반했을 때 가산세 금액을 구한다. 입력: 공급가액(원) → supply_amount, 가산세 유형 → kind, 공급일(YYYY-MM-DD, 세율 기준) → supplied_on. 결과: 가산세·적용 세율, 근거(부가가치세법 제60조②⑤⑥⑦, 가공은 제60조③). VAT invoice penalties by type and supply date.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | 가산세 유형 — 가공=실물 없는 발급·수취 | |
| supplied_on | No | 공급일(발급·수취일) YYYY-MM-DD — 세율 기준 연도 | |
| supply_amount | Yes | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the applicable rates, that the rate depends on the supply date, and the legal basis (부가가치세법 제60조).
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 tool's identity and rate table, then uses labeled 언제/입력/결과 sections that make it scannable. Dense but every clause carries information; no wasted 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 usefully discloses what is returned (penalty amount, applied rate, legal basis). Inputs, trigger, and output are all covered, leaving only minor gaps like rounding or multi-year handling.
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 three parameters. The description largely restates the same mapping (supply_amount, kind, supplied_on) without adding syntax or format detail beyond the schema's own '세율 기준 연도' note, so 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 (구한다/compute) and a precise resource (세금계산서 가산세) and even enumerates the penalty types and rates it handles. The scope is clearly distinct from the other penalty siblings (underreporting_penalty, late_payment_penalty), though it never explicitly names them.
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 trigger condition — when the invoice issuance/receipt obligation is violated. This is clear usage context, but there is no 'when-not' guidance and no named alternative tool to route against.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kinship_checkA
두 개인의 친족관계(혈족·인척 촌수, 배우자)와 기준일 친족 범위 해당 여부. 언제: 두 사람이 친족인지, 국세기본법·상증법상 친족 범위에 들어가는지 확인할 때. 입력: 당사자 a(이름) → a, 당사자 b(이름) → b, 기준일(YYYY-MM-DD) → on, family=[[a, b, "부모자녀"|"배우자"]] → family(related_judge와 동일 형식). 결과: 관계(촌수·배우자)·기준일·친족 범위·국기법 친족 여부·상증법 친족(사돈 포함) 여부. 두 개인의 친족관계(혈족·인척 촌수, 배우자)와 기준일 친족 범위 해당 여부를 확인한다.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | 당사자 a(이름) | |
| b | Yes | 당사자 b(이름) | |
| on | Yes | 기준일 YYYY-MM-DD | |
| family | Yes | 친족 관계 목록 [[a, b, "부모자녀"|"배우자"]]. 예: [["김갑", "김을", "부모자녀"]] — related_judge와 동일 형식 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it explains this is a query/computation returning relationship degree, reference date, kinship scope, national-tax-law kin status, and inheritance/gift kin (including in-law) status. It does not explicitly state read-only nature or any limits, but for a pure computation tool the disclosed output structure is solid behavioral context.
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?
It is well-structured with 언제/입력/결과 labels and the purpose is front-loaded. However, the closing sentence repeats the opening sentence almost verbatim, and the input list duplicates the schema, so there is some 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?
With no output schema, the description steps in to enumerate the return contents (relationship, reference date, kinship scope, 국기법/상증법 kin status), and there is no output schema to make that redundant. For a four-parameter query tool it covers purpose, inputs, and outputs adequately.
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 is 3. The description restates the family format [[a,b,"부모자녀"|"배우자"]] and its relation to related_judge, matching what the schema already documents, adding little new semantics beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: computing the kinship relationship (blood/in-law degree, spouse) between two named individuals and whether they fall within the kinship scope on a reference date. It also names the sibling related_judge as sharing the same input format, letting an agent place it among the tax-relation tools 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 '언제' clause gives explicit triggering conditions: when checking if two people are kin, or whether they fall under the Framework Act on National Taxes / Inheritance and Gift Tax Act kinship scope. It gives clear context but no when-not guidance or explicit alternatives beyond the format reference to related_judge.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
late_payment_penaltyARead-onlyIdempotent
납부지연가산세(미납 세액 × 일수 × 이율, 이율 변경일 기준 기간 안분). 언제: 세금을 법정납부기한보다 늦게 납부했을 때 일수분 가산세를 계산한다. 입력: 미납 세액(원) → unpaid_tax, 법정납부기한(YYYY-MM-DD) → due, 납부일·고지일(YYYY-MM-DD) → until. 결과: 가산세 총액, 근거(국세기본법 제47조의4, 시행령 제27조의4). Late payment penalty with daily rate split at rate-change dates.
| Name | Required | Description | Default |
|---|---|---|---|
| due | Yes | 법정납부기한(YYYY-MM-DD) | |
| until | Yes | 납부일·고지일(YYYY-MM-DD) | |
| unpaid_tax | Yes | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond the annotations: the calculation formula, that the daily rate is split at rate-change dates, the return summary (total penalty and legal basis), and the governing statute. It does not discuss edge cases or validation, but the extra calculation semantics are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the formula, then broken into when/input/result sections, and ends with a compact English summary. Every sentence contributes to selecting or invoking the tool; there is 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?
For a read-only calculation tool with no output schema, the description supplies the inputs, the calculation method, the expected output summary (total penalty and legal basis), and the legal references. It is nearly complete, though it could say more about output structure or rate-change date handling.
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 the schema already documents each parameter in Korean. The description maps input meanings to parameter names ('unpaid_tax', 'due', 'until') and restates the date formats, but adds no syntax or constraints beyond the schema. The baseline of 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?
The description states a specific verb and resource: calculating late-payment penalty (가산세) on unpaid tax for the number of days past the legal due date. It also gives the exact formula, distinguishing it from sibling penalty tools like underreporting_penalty or invoice_penalty, which cover different penalty types.
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?
It explicitly says when to use the tool: when tax is paid later than the legal due date ('세금을 법정납부기한보다 늦게 납부했을 때'). It does not name alternatives or exclusions, but the triggering condition is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loss_carryforward_limitARead-onlyIdempotent
이월결손금 공제 한도율(사업연도 개시일 기준). 언제: 이월결손금이 있을 때 해당 사업연도에 얼마까지 공제되는지 한도율을 확인한다. 입력: 사업연도(2016~2026) → year, 중소기업 등 여부 → sme. 결과: 한도율(소수)과 근거(법인세법 제13조① 단서). Limit on using loss carryforwards in a year; returns the deduction limit ratio by fiscal year start.
| Name | Required | Description | Default |
|---|---|---|---|
| sme | Yes | 중소기업 등 여부 | |
| year | Yes | 사업연도·귀속연도(2016~2026) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false, so the full safety profile is already covered. The description adds the legal basis (법인세법 제13조① 단서) and the return shape (한도율 소수 and 근거), which is useful context. However, it does not mention boundary behavior for out-of-range years or whether 'sme' affects the legal citation, so a baseline 3 is appropriate.
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?
Three tightly packed sentences front-loaded with purpose, then when, inputs, and result. Every clause earns its place; no repetition of the tool name, 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?
For a 2-parameter, read-only, no-output-schema tool, the description covers purpose, trigger condition, parameter mapping, return value (한도율 소수 + 근거), and legal citation. Annotations cover safety. 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 coverage is 100% – both year (2016–2026) and sme (중소기업 등 여부) are fully documented in the JSON schema with min/max and description. The description maps inputs to outputs ('사업연도 → year, 중소기업 등 여부 → sme') but adds no syntax or format detail beyond the schema. Baseline 3 when 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?
Clearly states the specific formula-driven metric (이월결손금 공제 한도율 based on fiscal year start) as a compound verb+resource. It is easily distinguishable from the many tax-calculation siblings (entertainment_limit, donation_limit, minimum_tax) because it names the exact tax-law provision (법인세법 제13조① 단서) and the scope (deduction limit ratio for loss carryforwards). No ambiguity about what the tool returns.
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 answers 'when': '언제: 이월결손금이 있을 때 해당 사업연도에 얼마까지 공제되는지 한도율을 확인한다.' This names the triggering condition and the question the agent should have. No alternative sibling is named, but the condition is so specific that an agent can route unambiguously.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
minimum_taxARead-onlyIdempotent
최저한세(감면 전 과세표준 × 최저한세율). 언제: 세액감면·공제를 받은 뒤에도 납부해야 할 최저한세를 확인할 때(중소기업 졸업 유예 연차 포함).
입력: 감면 전 과세표준(원) → base_before_incentives, 사업연도(20162026) → year, 중소기업 여부 → sme, 졸업 후 경과 연차(05) → grace_year.
결과: 최저한세액, 근거(조세특례제한법 제132조①). Minimum corporate tax = base before incentives × minimum tax rate.
| Name | Required | Description | Default |
|---|---|---|---|
| sme | No | 중소기업 여부 | |
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| grace_year | No | 중소기업 졸업 후 경과 연차(0=해당 없음, 0~5) | |
| base_before_incentives | Yes | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds that this is a deterministic formula-based calculation with a stated legal basis, but does not disclose behavior beyond the computation itself (no return format detail beyond '최저한세액, 근거'). Adequate against annotations that carry the safety load.
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 uses labeled sections (언제/입력/결과) so the agent can parse it at a glance. Dense but every element earns its place; the trailing English restatement is minor 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?
For a 4-parameter calculator with no output schema, the description compensates by disclosing the return values (최저한세액, 근거) and the input-to-parameter mapping. The SME/grace-year interaction is mentioned, leaving nothing critical missing for a correct call.
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 is 3. However, the description maps each parameter to the actual formula (base_before_incentives = pre-incentive tax base, grace_year = years since SME graduation, 0~5), adding semantic role beyond the schema's field labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource with the actual formula (감면 전 과세표준 × 최저한세율) and cites the statutory basis (조세특례제한법 제132조①), so the agent knows exactly what is computed. It does not explicitly contrast itself with the sibling corporate_tax, so sibling differentiation is left implicit.
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 clearly states the trigger context: checking the minimum tax still owed even after credits/deductions, including SME graduation grace years. It gives clear context but names no alternative tool or when-not condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
missing_receipt_disallowanceARead-onlyIdempotent
적격증빙 미수취 기업업무추진비 손금불산입(건당 3만 원, 경조금 20만 원 초과 + 적격증빙 없음). 언제: 접대비 등을 지출했는데 적격증빙을 받지 못한 건이 있으면 손금불산입액을 구한다. 입력: 사업연도(2016~2026) → year, 지출 건 목록 [{amount: 1회 지출액(원), qualified: 적격증빙 여부, congratulatory: 경조금 여부}] → items. 결과: 손금불산입 합계액, 근거(법인세법 제25조②, 시행령 제41조①). 적격증빙 미수취 기업업무추진비 손금불산입.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| items | Yes | [{amount: 1회 지출액(원), qualified: 적격증빙 여부, congratulatory: 경조금 여부}] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive, closed-world operation, so the safety profile is covered. The description adds real context on top: the legal basis (법인세법 제25조②, 시행령 제41조①), the statutory thresholds that drive the computation, and the fact that it returns an aggregate disallowance amount.
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?
Uses a labeled 언제/입력/결과 structure that is easy to scan and front-loads the purpose. Slightly redundant, since the opening parenthetical and the closing sentence both restate '적격증빙 미수취 기업업무추진비 손금불산입'.
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 calculation tool with no output schema, the description supplies the input mapping, the computed result (손금불산입 합계액), the legal citation, and the thresholds. Nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — year and items (including nested amount/qualified/congratulatory) are already documented in the schema. The description restates the same field meanings without adding format, unit, or edge-case guidance beyond what is structured, so the baseline of 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?
Names a precise resource and scope: computing the non-deductible amount (손금불산입) for 기업업무추진비 where no qualified receipt was obtained, including the exact thresholds (30,000 won per case, 200,000 won congratulatory). This narrows it well against related siblings like entertainment_limit and entertainment_adjustment, though it never names those siblings explicitly to make the boundary unambiguous.
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 triggering condition: use it when entertainment-type expenses were incurred without a qualified receipt. It does not state when NOT to use it or point to the adjacent entertainment_limit / entertainment_adjustment tools that cover the broader cap calculation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nonbusiness_interest_disallowanceARead-onlyIdempotent
업무무관자산·가지급금 관련 지급이자 손금불산입. 언제: 업무무관자산이나 가지급금이 있을 때 지급이자 중 얼마를 손금불산입하는지 구한다. 입력: 차입금별 [{interest: 지급이자(원), jeoksu: 차입금 적수(원·일)}] → loans, 업무무관 적수 합(원·일) → nonbusiness_jeoksu. 결과: 손금불산입 이자, 근거(법인세법 제28조①4호, 시행령 제53조). 산식: 지급이자 × min(1, 업무무관 적수 ÷ 총 차입금 적수).
| Name | Required | Description | Default |
|---|---|---|---|
| loans | Yes | 차입금별 [{interest: 지급이자(원), jeoksu: 차입금 적수(원·일)}] | |
| nonbusiness_jeoksu | Yes | 업무무관자산·가지급금 적수 합(원·일) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds substantive behavioral context beyond that: the exact formula (지급이자 × min(1, 업무무관 적수 ÷ 총 차입금 적수)) and the legal basis (법인세법 제28조①4호, 시행령 제53조).
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 tool's purpose, then cleanly labeled 언제/입력/결과 sections. Every sentence carries information: condition, inputs, output, legal citation, and formula, 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?
For a read-only calculation tool with no output schema, the description fully specifies inputs, the exact computation, the returned value (disallowed interest), and its statutory basis. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the flat per-parameter descriptions already establish a baseline of 3. The description goes further by showing how both inputs feed the formula (per-loan interest/jeoksu plus the aggregate nonbusiness_jeoksu), which adds interpretive meaning beyond the schema's field labels.
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 precise verb+resource: computing the non-deductible portion of interest paid (지급이자 손금불산입) tied to non-business assets and 가지급금. This is specific enough to separate it from siblings like deemed_interest or thin_capitalization, which address different disallowance rules.
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 clear triggering condition: when non-business assets or provisional payments exist and you need the disallowed interest amount. It does not, however, name exclusions or adjacent alternatives (e.g. deemed_interest, thin_capitalization) among the numerous sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nonresident_withholdingARead-onlyIdempotent
비거주자·외국법인 국내원천소득 원천징수(소득세법 제156조 / 법인세법 제98조). 언제: 비거주자·외국법인에 이자·배당·사용료·인적용역·기타 소득을 지급할 때 원천징수세액을 구한다. 입력: 소득 종류(이자·배당·사용료·인적용역·기타) → income_kind, 지급액(원) → amount, 수취인 구분(개인/법인) → recipient_type, 거주지국(ISO 2자 또는 국명) → residence_country, 조세조약 제한세율(소수) → treaty_rate, 채권 이자 여부 → bond_interest, 국외지배주주 가능성 → related_party. 결과: 원천징수세액·지방소득세·적용 세율·국내세율, 근거(소득세법 제156조 / 법인세법 제98조). 적용세율 = min(국내세율, 조약 제한세율), 지방소득세 10% 별도. Non-resident/foreign corporation withholding tax on Korean-source income.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | 금액(원) | |
| income_kind | Yes | 소득 종류(비거주자·외국법인 국내원천) — 이자·배당·사용료·인적용역·기타 | |
| treaty_rate | No | 조세조약 제한세율(소수, 예: 0.15 = 15%). 생략 시 국내세율 적용 | |
| bond_interest | No | 채권 이자 여부 — 이자 소득에서만 의미, 특례 적용 필요 시 별도 확인 | |
| related_party | No | 수취인이 국외지배주주일 가능성 — 이자 소득에서 과소자본 쟁점 표시 시 사용 | |
| recipient_type | Yes | 수취인 구분 — 개인(비거주자) / 법인(외국법인) | |
| residence_country | Yes | 거주지국(ISO 2자 코드 또는 국명) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real computation context: 적용세율 = min(국내세율, 조약 제한세율) and 지방소득세 10% separate. This tells the agent how the number is derived, which annotations cannot. It stops short of rate limits or edge-case caveats.
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 cleanly organized into 언제/입력/결과 blocks that an agent can scan quickly. It is somewhat long and the '입력' block duplicates schema content, costing a point.
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 describing the return contents (원천징수세액·지방소득세·적용세율·국내세율·근거) and the calculation rule. Together with 100% schema coverage this is nearly complete, though it omits treaty-rate sourcing guidance and any failure/validation behavior.
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 every parameter is already documented, and the description's '입력' list largely restates the schema's field mappings. It adds only marginal framing (e.g. bond_interest/related_party being meaningful only for interest income), which the schema also notes, so baseline 3 is right.
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 with precise scope ('비거주자·외국법인 국내원천소득 원천징수') and cites the governing law (소득세법 제156조 / 법인세법 제98조). The non-resident/foreign-corporation scope cleanly separates it from generic siblings like withholding_tax, wage_income_tax, and daily_worker_withholding without needing to name them.
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 an explicit trigger condition: when paying interest, dividends, royalties, personal services or other income to a non-resident/foreign corporation. It does not state when NOT to use it or name the alternative tool for domestic withholding, so it falls short of the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
other_income_aggregateARead-onlyIdempotent
거주자의 기타소득 항목을 원래 사실관계로 받아 ① 항목별 과세 구분(종합/분리/비과세/제외) ② 비과세·필요경비 ③ 소득금액·원천징수세액 ④ 종합소득 합산액과 기납부세액까지 계산한다(소득세법 제21조·제12조·제14조③·제127조·제129조, 시행령 제18조②·제87조). 언제: 종합소득세 신고에서 기타소득의 과세 구분·필요경비·원천징수세액·종합소득 합산액을 계산할 때. 입력: 귀속연도(2016~2026) → year, 기타소득 항목 목록 [{kind, amount, ...}] → items. kind 허용값(어휘 기반, 별칭 포함): · 산업재산권대여 — 광업권·어업권·산업재산권·산업정보 등을 양도·대여하고 받는 금품 · 일시적인적용역 — 고용관계 없이 일시적으로 제공한 강연·방송 해설·자문 등 인적용역의 대가 · 뇌물 — 뇌물로 받은 금품(몰수·추징 확정액은 forfeited로 입력, 기본 0) · 위약금·배상금 — 계약의 위약·해약으로 받는 위약금·배상금(계약금 대체분은 deposit_substituted로 입력, 기본 0, 주택입주 지체상금 제외) · 주택입주지체상금 — 주택 입주 지연으로 받는 지체상금 · 연금외수령 — 연금계좌의 세액공제분·운용수익을 연금 외의 방식으로 수령한 금액(무조건 분리과세) · 직무발명보상금_퇴직후 — 퇴직 후 사용자등으로부터 받는 직무발명보상금(같은 해 재직 중 받은 비과세액은 employment_exempt_used로 필수 입력) · 배임수재 — 배임수재로 받은 금품(무조건 종합과세, 원천징수 제외, 소득세법 제21조①24호) · 알선수재 — 알선수재로 받은 금품(무조건 종합과세, 원천징수 제외, 소득세법 제21조①24호) · 복권당첨금 — 복권당첨금(무조건 분리과세, 제14조③8호 단서·제129조, 필요경비는 actual_cost만) 결과: 판단(항목별 과세 구분·근거)·결과(종합소득 합산액·기납부세액·분리과세·비과세·선택적 분리과세 가능)·계산(항목별 소득금액·원천징수세액).
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| items | Yes | 기타소득 항목 [{kind, amount, ...}] — kind: 산업재산권대여·일시적인적용역·뇌물·위약금·배상금·주택입주지체상금·연금외수령·직무발명보상금_퇴직후 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description goes well beyond that by disclosing domain behavior: it operates on original facts (원래 사실관계), lists special treatments per category (배임수재/알선수재 unconditional comprehensive taxation with no withholding, 복권당첨금 unconditional separate taxation), and notes conditional required sub-fields.
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 a one-line summary, then structured under 입력/결과 labels with bulleted kind definitions. Length is justified by the domain complexity, though the kind list is dense and slightly repetitive with the schema's kind hint.
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 complex, schema-light tool with no output schema, the description covers the result shape (판단/결과/계산) and the input vocabulary in detail. It does not specify exact output field names, but the annotation set already carries the safety profile, so the definition is essentially complete.
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 the baseline is 3. The description substantially enriches it: it defines the full kind vocabulary with legal meaning and aliases, and documents auxiliary sub-fields (forfeited, deposit_substituted, employment_exempt_used, actual_cost) that the schema does not mention.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — it computes 기타소득 tax classification, necessary expenses, withholding, and aggregate income — and enumerates the four output dimensions. The resource (기타소득) is clearly distinguishable from sibling aggregators like financial_income_aggregate.
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?
It explicitly states the triggering context ('종합소득세 신고에서 기타소득의 과세 구분·필요경비·원천징수세액·종합소득 합산액을 계산할 때'), giving clear when-to-use guidance. It does not name alternatives or exclusions, so it stops 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.
ownership_ratioA
보유자→법인 직접·간접 보유비율(경로별 곱 합산, 순환출자 반영). 언제: 일감몰아주기·지배주주 판정에서 특정인이 법인에 얼마나 간접 보유하는지 계산할 때. 입력: 보유자(이름) → holder, 대상 법인(이름) → target, stakes=[[보유자, 법인, 지분율(0~1)]] → stakes(직접보유비율, related_judge와 동일). 결과: 직접비율·경로별 비율·합계·순환출자 여부, 근거(상증법 시행령 제34조의3②). 보유자→법인 직접·간접 보유비율을 계산한다(간접은 단계별 직접보유비율의 곱, 경로별 합산, 순환출자는 단계별 모두 반영).
| Name | Required | Description | Default |
|---|---|---|---|
| holder | Yes | 보유자(이름) | |
| stakes | Yes | 직접보유비율 목록 [[보유자, 법인, 지분율(0~1)]]. 예: [["김갑", "㈜대한", 0.30]] | |
| target | Yes | 대상 법인(이름) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the computation model (path-product summation, circular investment handled at every stage) plus the legal basis (상증법 시행령 제34조의3②). It does not describe limits, validation of inputs, or failure behavior, but for a pure calculation tool this is substantial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The 입력/결과/언제 labels make it well-structured and front-loaded, but the final sentence nearly restates the opening clause ('보유자→법인 직접·간접 보유비율을 계산한다'), duplicating content instead of adding information.
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 usefully enumerates what is returned (직접비율, 경로별 비율, 합계, 순환출자 여부, 근거 법조). With all three parameters required and covered, the definition is close to self-sufficient, though it omits any note on input validation or edge cases.
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 already 100%, so the baseline is 3, but the description adds cross-tool semantics by stating stakes='[[보유자, 법인, 지분율(0~1)]]' is identical to related_judge's input and by mapping natural-language names to holder/target. That cross-reference value goes beyond the schema's own example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('보유자→법인 직접·간접 보유비율을 계산한다') and adds the algorithmic qualifier that indirect holdings are the product of per-stage ratios summed across paths with circular investment reflected. It references related_judge but only to align input format, not to disambiguate scope, so it stops short of a full sibling distinction.
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 explicit '언제' clause names the concrete decision contexts (일감몰아주기, 지배주주 판정) where this tool is used to compute indirect ownership. It gives clear context but does not state when NOT to use it or point to alternative tools such as dominant_shareholder or related_judge.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
precheck_schemaA
신고서 사전검토 입력스키마. 언제: return_precheck·영어로 된 신고서 PDF 도구 입력 전에 어떤 키를 넣어야 하는지 확인할 때. 입력: tax=법인|부가|소득. 결과: 각 입력키의 의미·단위·필수 여부를 목록으로 반환한다.
| Name | Required | Description | Default |
|---|---|---|---|
| tax | Yes | 사전검토 세목('법인'|'부가'|'소득') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden, and it does disclose the return contract ('각 입력키의 의미·단위·필수 여부를 목록으로 반환'). It does not explicitly state that the call is side-effect-free, but for a schema-introspection tool this is minor.
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?
Three tight clauses labeled 언제/입력/결과 make the when, the input, and the output scannable with zero filler. Everything is front-loaded and each phrase 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?
With no output schema, the description must explain return values, which it does (list of meaning, unit, required-ness per key). For a one-parameter introspection tool this is complete enough for an agent 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% and the single enum parameter is already fully documented in the schema. The description merely restates 'tax=법인|부가|소득', adding no unit, format, or edge-case 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (신고서 사전검토 입력스키마) and its function, and explicitly names the sibling tools it supports (return_precheck and the English-PDF return tool). An agent can distinguish it from the dozens of tax-calculation 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?
The '언제' clause gives an explicit precondition: use it before invoking return_precheck or the English tax-return PDF tool to discover which keys are required. This is a concrete when-to-use statement tied directly to named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retirement_allowance_adjustmentARead-onlyIdempotent
퇴직급여충당금·확정급여형 퇴직연금충당금 세무조정(법인세법 제33조, 시행령 제44조의2·제60조, 시행규칙 제24조). 언제: 법인세 세무조정에서 퇴직급여충당금 한도초과, 퇴직금 지급 시 상계·부인액 추인, 퇴직연금 부담금 손금산입 한도를 함께 계산할 때. 입력: year — 사업연도(2016~2026), 추계액 적립비율은 연도표(2016년 이후 0%). allowance — 장부상 퇴직급여충당금 {opening, closing, provision?, paid_cash?, paid_pension?, other_increase?}. prior_disallowed — 기초 부인누계(유보). succeeded_disallowed — 합병 등으로 승계한 부인누계. estimate — 기말 추계액 {lump_sum, actuarial?}, 큰 금액을 씀. salary — 총급여 {total, dc_members?, not_eligible?}: 확정기여형 설정자·지급대상 아닌 자 제외. conversion_fund — 퇴직금전환금 기말잔액. pension — 확정급여형 {asset_closing, prior_deducted, book_provision?, dc_transferred_allowance?}. 결과: 세무조정(과목·조정 익금산입/손금불산입/손금산입·금액·소득처분 유보/△유보), 소득금액_순영향, 계산(세무상 잔액·한도). 입력이 모자라거나 장부 증감이 맞지 않으면 error.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| salary | No | 당기 총급여액(원) {total: 전체 임원·직원 총급여, dc_members?: 확정기여형 퇴직연금 설정자분, not_eligible?: 퇴직급여 지급대상 아닌 자(예: 규정상 1년 미만 근속자)분} — 당기 설정액이 있으면 필수 | |
| pension | No | 확정급여형 퇴직연금(원) {asset_closing: 퇴직연금운용자산 기말잔액, prior_deducted: 세무상 퇴직연금충당금 기초잔액(이미 손금산입한 부담금 누계, △유보), book_provision?: 결산에 계상한 퇴직연금충당금(신고조정이면 0), dc_transferred_allowance?: 확정기여형 전환자의 설정 전 기계상 퇴직급여충당금} — 없으면 퇴직연금 조정 생략 | |
| estimate | No | 기말 퇴직급여추계액(원) {lump_sum: 일시퇴직기준, actuarial?: 보험수리기준(영 제44조의2④1호의2 금액)} — 설정액이나 퇴직연금이 있으면 필수 | |
| allowance | Yes | 장부상 퇴직급여충당금(원) {opening: 기초, closing: 기말, provision?: 당기 설정(손비 계상), paid_cash?: 회사가 직접 지급하고 충당금과 상계, paid_pension?: 퇴직연금운용자산에서 지급하고 충당금과 상계, other_increase?: 합병·사업양수 승계 등 설정 아닌 증가} — 생략 키는 0, 기초+증가−감소=기말이어야 함 | |
| conversion_fund | No | 국민연금 퇴직금전환금 기말잔액(원) | |
| prior_disallowed | Yes | 기초 퇴직급여충당금 부인누계(유보 잔액, 원) | |
| succeeded_disallowed | No | other_increase 중 합병 등으로 승계한 부인누계(유보, 원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a pure read-only, idempotent computation (readOnlyHint/idempotentHint true), and the description does not contradict that. It goes further by disclosing output semantics (과목·조정 유형·소득처분 유보/△유보·소득금액_순영향) and failure behavior ('장부 증감이 맞지 않으면 error'), which 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with legal basis, then when, then inputs, then outputs — good scanning order for a dense 8-parameter tax tool. Some of the '입력' lines restate the schema field descriptions near-verbatim, which is wasted text at 100% coverage, but the added judgment rules justify keeping the section.
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 '결과' section must carry the return contract, and it does sketch the adjustment line items, the 유보/△유보 disposition, the net income effect, and the supporting calculation. A mutation-free calculator with validation and error conditions stated is adequately covered, though the exact response shape remains only loosely specified.
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 the baseline is 3, but the '입력' block genuinely adds decision rules: '큰 금액을 씀' for lump_sum vs actuarial, the annual-table note that the accrual ratio is 0% after 2016, and exclusion of DC members and non-eligible employees from salary. These are selection rules not stated in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource combination (퇴직급여충당금·확정급여형 퇴직연금충당금 세무조정) and anchors it to the governing statute (법인세법 제33조, 시행령 제44조의2·제60조). An agent can distinguish this from the sibling retirement_income_tax, which concerns taxation of retirement income rather than the corporate-tax reserve adjustment.
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?
An explicit '언제' block enumerates the three concrete scenarios (한도초과, 상계·부인액 추인, 퇴직연금 부담금 손금산입 한도) that call for this tool. It never names a sibling as an alternative or states when not to use it, so it stops 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.
retirement_income_taxARead-onlyIdempotent
퇴직소득세(근속연수공제·환산급여 방식). 언제: 퇴직금(퇴직급여)을 지급할 때 퇴직소득세를 계산한다. 입력: 퇴직소득금액(퇴직급여, 비과세 제외, 원) → income, 근속연수(1~60년) → years_of_service. 결과: 퇴직소득세, 근거(소득세법 제48조·제55조②). Retirement income tax (근속연수공제·환산급여 방식).
| Name | Required | Description | Default |
|---|---|---|---|
| income | Yes | 퇴직소득금액(퇴직급여, 비과세 제외, 원) | |
| years_of_service | Yes | 근속연수(1~60년) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond that: the statutory basis (소득세법 제48조·제55조②), the deduction method, and the fact that the output is the tax amount plus rationale. It is a pure calculation, so little more behavior remains to disclose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The 언제/입력/결과 structure is front-loaded and easy to scan, with the key purpose stated first. Slight redundancy from the parenthetical method repeated and the trailing English restatement of the title costs it a point.
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 stating the result is 퇴직소득세 plus its legal 근거. For a two-parameter, annotation-covered calculation tool this is essentially complete, lacking only edge-case notes (e.g., years beyond 60).
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%, and the description's input line largely restates the schema fields (income, years_of_service) including the 1~60 range already present in the schema. It adds the '비과세 제외' caveat, but otherwise the schema does the heavy lifting, so 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?
The description names a specific verb+resource (계산한다 / 퇴직소득세) and identifies the computation method (근속연수공제·환산급여 방식), which distinguishes it from siblings like wage_income_tax and income_tax. An agent can tell this computes severance-pay income tax 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 '언제' clause explicitly states the triggering condition — calculating tax when severance pay is paid out. That is clear usage context, but no alternative sibling is named or excluded, so it stops 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.
return_precheckA
신고서 사전검토(조사 착수 전 오류 의심 목록). 언제: 세무조사 착수 전에 신고서 값으로 오류 의심 항목을 미리 점검할 때. 입력: data={입력키: 값}, tax=법인|부가|소득(생략 시 전체) — 입력키는 precheck_schema로 먼저 확인. 결과: 오류 의심·이상 없음·자료 부족·사실 확인 필요.
| Name | Required | Description | Default |
|---|---|---|---|
| tax | No | 세목('법인'|'부가'|'소득'), 생략 시 전체 | |
| data | Yes | 신고서 입력키·값 사전(dictionary). 입력키는 precheck_schema로 확인 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It usefully enumerates the outcome states (오류 의심 / 이상 없음 / 자료 부족 / 사실 확인 필요), which is real behavioral disclosure given no output schema. But it says nothing about permissions, whether the call is read-only, side effects, or 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?
The 언제/입력/결과 labeling front-loads purpose, trigger, input, and output in a handful of clauses with zero filler. Every phrase maps to something an agent needs to act on.
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 summarizing the possible result categories, and it covers the dependency on precheck_schema. What is missing is any note on input shape limits or error behavior for an invalid data dictionary, but for a 2-parameter screening tool this is close to sufficient.
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 already 100%, so a 3 is the baseline, but the description adds meaning by framing data as a {input_key: value} dictionary whose keys must be validated against precheck_schema first, and by restating that omitting tax covers all tax types. That workflow context goes beyond the schema text.
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 pair ('신고서 사전검토' / pre-investigation suspected-error list) and scopes it to before a tax investigation begins. It is distinguishable from precheck_schema (which it explicitly defers to for input keys) and from return_precheck_pdf, though the PDF sibling is never named.
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 condition: use before a tax investigation starts to screen return values for suspected errors. It also tells the agent to resolve input keys via precheck_schema first. No explicit when-not or named alternative tool, so it stops 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.
return_precheck_pdfA
법인세 신고서 PDF(별지 1·3·50호) → 표 추출 → 사전검토(오류 의심 목록). 언제: 법인세 신고서 PDF에서 값을 추출해 return_precheck 입력으로 정리할 때. 입력: PDF 파일 경로 → pdf_path. 결과: 오류 의심·이상 없음·자료 부족·사실 확인 필요 목록 + 서식 간 대사·세액 체인 재계산 + AI 생성 표시(필요 시). UPSTAGE_API_KEY 없이도 pypdf 로컬 추출 후 return_precheck 입력으로 정리 가능(기본), 키 설정 시 Document Parse + Solar Pro 4로 더 정교한 표 추출. 법인세 신고서 PDF에서 표를 추출해 사전검토한다.
| Name | Required | Description | Default |
|---|---|---|---|
| pdf_path | Yes | PDF 파일 경로 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the output list categories (오류 의심/이상 없음/자료 부족/사실 확인 필요), inter-form reconciliation and tax-chain recalculation, AI-generated marking, and critically the dual backend behavior — local pypdf extraction by default versus Document Parse + Solar Pro 4 when UPSTAGE_API_KEY is set. Auth dependency and fallback behavior are explicitly surfaced.
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 purpose and clearly sectioned (언제 / 입력 / 결과). It loses a point because the closing sentence ('법인세 신고서 PDF에서 표를 추출해 사전검토한다') merely repeats the opening instead of adding information.
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 appropriately enumerates what is returned, and it explains the environment/key contingency affecting extraction quality. An agent has everything needed to call it and interpret its results.
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% and there is a single parameter, so the schema fully documents pdf_path. The description restates its meaning ('PDF 파일 경로 → pdf_path') without adding format or path-syntax detail, which is acceptable at this coverage level.
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 chain: extract tables from corporate tax return PDF (forms 1, 3, 50) and run a pre-check producing a suspicion list. This is distinguishable from the sibling return_precheck, which takes already-structured values.
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 explicit context: when extracting values from a corporate tax return PDF to prepare input for return_precheck. It names the target sibling, but does not state the inverse condition (use return_precheck directly when values are already structured), so there is no explicit 'when not to use'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simplified_vat_returnARead-onlyIdempotent
간이과세자 부가가치세 확정신고 차가감납부세액 계산(부가가치세법 제63조·제68조의2·제69조·제46조). 언제: 간이과세자의 과세기간(1.1~12.31) 부가가치세 확정신고 시 차가감납부세액을 원래 사실관계에서 계산한다. 입력: · 원장: ledger={공급:[{항목, 금액}], 매입:[{항목, 금액}]}. 항목명 → 역할 매핑은 어휘 간이과세자_원장항목.판단.공급/매입에서 읽음(항목명에 키워드가 포함되면 해당 역할). 공급 금액 전부 합(total), 공제 대상 합(카드발급), 마일리지 합(자기마일리지)으로 변환. 매입도 같은 식으로 변환. 대손 확정액(기본 0) → bad_debt_confirmed, 직전연도 합계 → prior_year_supplies, 예정부과 고지세액 → prepaid_assessed. 결과: 판단(항목·결론·근거)·계산(과세표준·부가가치율·납부세액·공제·가산세)·결과(납부의무면제·차가감납부세액)·산식·근거.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| ledger | Yes | 원장형 입력 {공급: [{항목, 금액}], 매입: [{항목, 금액}]} — 금액은 공급대가(부가세 포함). 공급 항목이 없으면 error. 항목명은 어휘 간이과세자_원장항목의 키워드로 역할을 정함 | |
| business_type | Yes | 업종 — 어휘 간이과세자_납부세액.적용[].판단.부가가치율 키(소매업·음식점업·제조업·숙박업·건설업·부동산임대업·그 밖의 서비스업 등) | |
| prepaid_assessed | No | 예정부과 고지세액 | |
| bad_debt_confirmed | No | 대손 확정액(기본 0, 납부세액에 영향 없음 — 판단에 명시) | |
| prior_year_supplies | Yes | 직전연도 공급대가 합계(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnly/idempotent/non-destructive, the bar is lower, and the description usefully adds the input transformation rules (항목명 → 역할 mapping via 어휘, supply amounts converted to total/card/mileage sums) and the '원래 사실관계에서 계산' behavior. It also pre-announces the judging/calculation/result output structure, which is valuable since 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and statute, then cleanly divided into 언제/입력/결과 blocks that map to how an agent needs the information. Dense but every clause earns its place given the tool's complexity.
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 6-parameter, nested-object calculator with no output schema, the description supplies the missing return-value structure (판단/계산/결과/산식/근거) and the ledger transformation logic. It stops short of giving a concrete ledger example or vocabulary key list, leaving minor gaps an agent might still need to infer.
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 the baseline is 3, but the description adds meaning beyond the schema by spelling out how ledger items are mapped to roles and converted into total/card/mileage aggregates, and noting that bad_debt_confirmed does not affect the tax. This goes past merely restating the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (계산) and resource (간이과세자 부가가치세 확정신고 차가감납부세액) with the statutory basis (법 제63조·제68조의2·제69조·제46조), so an agent knows it computes the full simplified-taxpayer final return rather than a single credit. It does not, however, explicitly distinguish itself from component siblings such as vat_simplified_taxpayer or vat_card_sales_credit.
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 a clear trigger: use during a simplified taxpayer's final return for the 1.1–12.31 period, computing from original facts. There are no explicit exclusions or named alternatives, but the context is unambiguous enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
special_tax_creditRead-onlyIdempotent
근로소득자 특별세액공제(보험료·의료비·교육비)와 표준세액공제 비교. 언제: 연말정산·종합소득세 신고에서 특별세액공제와 표준세액공제 중 선택할 때. 입력: 귀속연도 → year, 총급여액 → total_salary, 공제대상자 → persons, 지출 목록 → expenses, 근로소득 산출세액 → wage_computed_tax(선택). 결과: 보험료·의료비·교육비 공제액·특별세액공제 합계·표준세액공제 선택·적용 공제·근거. 특별세액공제 vs 표준세액공제 비교.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| persons | Yes | [{name, relation, age, disabled?, income_ok?, severe_illness?}] — name: 사람 표시 이름(문자열, 중복 불가). relation: 공제대상자와의 관계. 허용값: 본인·배우자·직계비속·입양자·형제자매·직계존속·위탁아동·수급자. 문항 표현 그대로 '자녀'·'아들'·'딸'은 '직계비속', '부모'·'모친'·'부친'은 '직계존속'으로 적을 것. age: 만 나이(정수). disabled: 장애인 여부(bool). income_ok: 연 소득금액 100만원 이하(근로소득만 있으면 총급여 500만원 이하)면 true — 문항의 '소득 없음'은 true로 입력. severe_illness: 중증질환 여부(bool, 2018~ 의료비 특정지출 대상). 예시: [{'name':'본인','relation':'본인','age':50,'income_ok':true}, {'name':'딸','relation':'직계비속','age':16,'income_ok':true}] | |
| expenses | Yes | [{kind, amount, person, reimbursed?}] | |
| earner_type | Yes | 근로소득 종류 | |
| total_salary | Yes | 총급여액(원). 문항에 총급여액이 없으면 0이 아니라 생략 — 0이면 의료비 문턱(total_salary×문턱비율)이 0이 되어 모든 의료비가 특정지출로 분류됨 | |
| donation_credit | No | 금액(원) | |
| wage_computed_tax | No | 근로소득 종합소득산출세액 | |
| monthly_rent_credit | No | 금액(원) | |
| special_income_deduction | No | 금액(원) |
thin_capitalizationARead-onlyIdempotent
과소자본 손금불산입(국제조세조정에 관한 법률 제22조). 언제: 국외지배주주로부터 차입한 금액이 출자금액의 기준 배수(기본 2배)를 초과할 때 초과분 지급이자를 손금불산입한다. 입력: 국외지배주주 출자금액(원) → equity, 차입금액(원) → borrowings, 지급이자 총액(원) → total_interest, 적용 배수(기본 2) → ratio, 사업연도(2016~2026) → year, 수취인 거주지국 → recipient_residence_country, 이자 조세조약 제한세율(소수) → interest_treaty_rate, 배당 조세조약 제한세율(소수) → dividend_treaty_rate, 수취인 구분(개인/법인) → recipient_type. 결과: 초과차입금·손금불산입 이자·처분(배당/기타사외유출), recipient_residence_country 지정 시 원천징수 재계산 결과 포함, 근거(국제조세조정에 관한 법률 제22조, 시행령 제34조). Thin capitalization disallowance.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | 사업연도·귀속연도(2016~2026) | |
| ratio | No | 적용 배수(기본적으로 2, 금융업 등 업종 배수는 별도 확인) | |
| equity | Yes | 금액(원) | |
| borrowings | Yes | 금액(원) | |
| recipient_type | No | 수취인 구분 — 개인(비거주자) / 법인(외국법인) | 개인 |
| total_interest | Yes | 금액(원) | |
| dividend_treaty_rate | No | 배당 조세조약 제한세율(소수, 예: 0.15 = 15%). 생략 시 국내세율 적용 | |
| interest_treaty_rate | No | 이자 조세조약 제한세율(소수, 예: 0.12 = 12%). 생략 시 국내세율 적용 | |
| recipient_residence_country | No | 수취인 거주지국(ISO 2자 코드 또는 국명). 지정 시 배당 처분에 따른 원천징수 재계산 제공 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only/idempotent/non-destructive profile, so the bar is lower. The description still adds real value by disclosing what the computation returns (excess borrowings, disallowed interest, disposition, optional withholding recalculation) and its legal basis, plus the industry-multiple caveat.
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?
Organized into 언제/입력/결과 blocks that front-load the rule and map inputs, which suits a complex multi-parameter tax computation. There is mild redundancy (recipient_residence_country is explained twice), keeping it short of a 5.
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 9-parameter tool with no output schema, the '결과' section explicitly describes the produced values and the optional withholding recalculation, and the legal basis is supplied. Nothing an agent needs to call and interpret the 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%, setting a baseline of 3, but the schema's descriptions for equity/borrowings/total_interest are terse ('금액(원)'). The description clarifies the distinct roles of each amount (controlling-shareholder equity, borrowings, total interest paid), adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific computation (과소자본 손금불산입) grounded in a cited statute (국제조세조정에 관한 법률 제22조) and states the exact trigger (foreign controlling-shareholder debt exceeding the equity multiple). This is unmistakably distinct from siblings like deemed_interest or nonbusiness_interest_disallowance even without naming them.
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 an explicit triggering condition (borrowings from overseas controlling shareholder exceeding the baseline multiple, default 2x), which is clear usage context. It does not name alternative tools or state when NOT to use this one, 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.
tunnelling_from_pdfA
일감몰아주기 검토 자료 PDF → 표 추출 → 코드가 지배주주·출자관계·증여의제이익 계산. 언제: PDF로 된 일감몰아주기 검토 자료에서 관계표를 추출해 tunnelling_gift_nts 입력으로 정리할 때. 입력: PDF 파일 경로 → pdf_path. 결과: 지배주주·출자관계·증여의제이익 계산 결과(초안) + AI 생성 표시(필요 시). UPSTAGE_API_KEY 없이도 pypdf 로컬 추출 후 정리 가능(기본), 키 설정 시 Document Parse + Solar Pro 4로 더 정교한 표 추출. 결과는 사람 확인. 일감몰아주기 검토 자료 PDF에서 표를 뽑는다.
| Name | Required | Description | Default |
|---|---|---|---|
| pdf_path | Yes | PDF 파일 경로 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the optional UPSTAGE_API_KEY, the pypdf local fallback when the key is absent, the higher-fidelity Document Parse + Solar Pro path when set, and that output is a draft requiring human confirmation with an AI-generated marker. It omits failure modes and extraction-accuracy caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The 언제/입력/결과 labeling front-loads the important information, but the closing sentence ('일감몰아주기 검토 자료 PDF에서 표를 뽑는다') merely restates the opening purpose statement and adds no information, weakening an otherwise tight description.
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 the pipeline, the optional-key behavior, the nature of the returned draft, and the human-review requirement, which is sufficient given no output schema. Missing only error/edge-case handling for malformed or non-table PDFs.
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?
One required parameter at 100% schema description coverage, so the schema already documents pdf_path. The description adds a small mapping ('PDF 파일 경로 → pdf_path') but no format or validity constraints beyond the schema; baseline 4 for a fully-covered single-parameter tool 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 precise pipeline verb chain: PDF table extraction then computation of 지배주주·출자관계·증여의제이익. It clearly separates this from the sibling tunnelling_gift_nts by noting it produces that tool's input, so an agent can tell the two apart.
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 explicitly names the triggering condition (a PDF-formatted 일감몰아주기 검토 자료 whose relation table must be extracted) and the downstream consumer (tunnelling_gift_nts). It does not state when NOT to use it, e.g. when the relation data is already structured, so it falls short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tunnelling_giftA
일감몰아주기 증여의제이익(상증법 제45조의3, ⑩항 과세제외매출액 직접 입력, ⑭·⑮ 미반영). 언제: 일감몰아주기 검토에서 증여의제이익을 간단히 계산할 때(국세청 신고안내 전체 산식은 tunnelling_gift_nts 사용). 입력: 수혜자(이름) → beneficiary, 기업 규모(중소|중견|일반) → size, 총 매출액 → sales_total, sales_by_corp={거래처 법인: 매출액} → sales_by_corp, 세후영업이익 → after_tax_op_profit, people={이름: {구분: "개인"|"법인"}} → people, family=[[a, b, "부모자녀"|"배우자"]] → family, stakes=[[보유자, 법인, 지분율(0~1)]] → stakes, ⑩·⑭항 과세제외매출액 → excluded_sales. 결과: 증여의제이익, 근거(상증법 제45조의3, 시행령 제34조의3). 일감몰아주기 증여의제이익(상증법 제45조의3).
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | 기업 규모('중소'|'중견'|'일반') | |
| family | Yes | 친족 관계 [[a, b, "부모자녀"|"배우자"]] | |
| people | Yes | 사람·법인 목록 {이름: {"구분": "개인"|"법인"}} | |
| stakes | Yes | 직접보유비율 [[보유자, 법인, 지분율(0~1)]] | |
| beneficiary | Yes | 수혜자(이름) | |
| sales_total | Yes | 총 매출액(원) | |
| sales_by_corp | Yes | 거래처 법인별 매출액 {법인: 매출액(원)}. 예: {"A": 300000000} | |
| excluded_sales | No | ⑩·⑭항 과세제외매출액(원) | |
| after_tax_op_profit | Yes | 세후영업이익(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses scope limits that matter for correctness: ⑩항 excluded sales must be entered directly, and ⑭·⑮ are not reflected. It does not discuss permissions, but for a pure calculation tool this is a genuinely informative disclosure.
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 statutory basis and scope caveat before the input/output mapping, which is good structure. However, the closing sentence repeats '일감몰아주기 증여의제이익(상증법 제45조의3)' verbatim from the opening, and the input mapping duplicates the schema.
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 9-parameter tool with nested objects and no output schema, the description states the return values (증여의제이익, 근거 법조항) and the calculation scope limits. Requirements are clear; only edge-case behavior for the nested people/family/stakes structures is left to the 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 every parameter (including Korean labels and units). The description's Korean→param mapping (e.g., 수혜자 → beneficiary, excluded_sales) largely restates the schema, adding little beyond the required/optional status of excluded_sales.
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: computing 일감몰아주기 증여의제이익 under 상증법 제45조의3, and explicitly names the sibling it differs from (tunnelling_gift_nts for the full NTS formula). An agent can distinguish it from the many other tax-calculation 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?
Has an explicit '언제' section: use this for a simple deemed-gift calculation, with the alternative (tunnelling_gift_nts) named along with the condition that selects it (full 국세청 신고안내 formula). 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.
tunnelling_gift_ntsA
일감몰아주기 증여의제이익 — 국세청 2026 신고안내 산식(세후영업이익 ⑫, 출자관계별 추가 과세제외 ⑭1·3호, 한계보유 ⑬, 배당공제 ⑮). 언제: 국세청 신고안내 공식에 따라 일감몰아주기 증여의제이익을 정확히 계산할 때. 입력: 기업 규모(중소|중견|일반) → size, 수혜법인(이름, 고정) → '수혜법인', 세후영업이익 ⑫(원) → op_income, 과세표준(원) → taxable_income, 법인세 산출세액(원) → tax, 총 매출액(원) → sales_total, sales_by_corp={거래처 법인: 매출액(원)} → sales_by_corp, relations={관계명: 보유비율(소수)}(예: {'직접':0.2,'A경유':0.18}) → relations, 기본 과세제외매출액(⑩항, 원) → base_excluded, holdings_in_related={특관법인: 지배주주등 보유비율(소수)} → holdings_in_related, indirect_corp_of={관계명: 그 경로 간접출자법인} → indirect_corp_of, excluded_by_corp={특관법인: ⑩항 과세제외액(원)} → excluded_by_corp, dividends={관계명: [배당소득(원), 분모]}(⑮항) → dividends, 토지등 양도소득 법인세(차감, 원) → land_tax, 공제·감면세액(차감, 원) → credits, 미환류소득 법인세(원, tax에 포함이 맞음) → unreturned_tax. 결과: 증여의제이익·단계별 계산, 근거(상증법 제45조의3, 시행령 제34조의3, 국세청 2026 신고안내). 일감몰아주기 증여의제이익 — 국세청 2026 신고안내 산식.
| Name | Required | Description | Default |
|---|---|---|---|
| tax | Yes | 법인세법 제55조 산출세액(원) | |
| size | Yes | 기업 규모('중소'|'중견'|'일반') | |
| credits | No | 공제·감면세액(차감, 원) | |
| land_tax | No | 토지등 양도소득 법인세(차감, 원) | |
| dividends | No | 관계명별 [배당소득(원), 분모]. 예: {"직접": [10000000, 300000000]} | |
| op_income | Yes | 세후영업이익 ⑫(원) | |
| relations | Yes | 관계명별 보유비율(소수). 예: {'직접': 0.2, 'A경유': 0.18} | |
| sales_total | Yes | 총 매출액(원) | |
| base_excluded | No | 기본 ⑩항 과세제외매출액(원) | |
| sales_by_corp | Yes | 거래처 법인별 매출액 {법인: 매출액(원)}. 예: {"A": 300000000} | |
| taxable_income | Yes | 과세표준(원) | |
| unreturned_tax | No | 미환류소득 법인세(원, tax에 포함이 맞음) | |
| excluded_by_corp | No | 특관법인별 ⑩항 과세제외액(원). 예: {"A": 10000000} | |
| indirect_corp_of | No | 관계명별 간접출자법인. 예: {"A경유": "B법인"} | |
| holdings_in_related | No | 특관법인별 지배주주등 보유비율(소수). 예: {"A": 0.3} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, and it does describe the output ('증여의제이익·단계별 계산') and legal grounding (상증법 제45조의3, 시행령 제34조의3). It also flags behavioral detail (unreturned_tax is included in tax), which goes beyond a bare parameter list. It still omits error handling, validation behavior, and treatment of the 8 optional/nested params, so it is not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The 언제/입력/결과 structure is front-loaded and scannable, which helps for a 15-parameter tool. However the opening parenthetical enumerating formula components overlaps the later input list, and the final sentence ('일감몰아주기 증여의제이익 — 국세청 2026 신고안내 산식.') repeats the opening almost verbatim, which is wasted space.
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 15-param, nested-object calculation with no output schema, the description maps all inputs and states what the result contains plus the legal basis. It is broadly sufficient to invoke the tool, though it leaves optional-parameter interactions and edge-case behavior unspecified.
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 the description's '입력' block largely restates the schema descriptions verbatim (same ⑫/⑮ markers, same example objects). It adds ordering and the statutory line-item context but no syntax or semantics the schema lacks, 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?
The description names a specific computation (일감몰아주기 증여의제이익) computed under the NTS 2026 filing formula, with the statutory components (⑫세후영업이익, ⑬한계보유, ⑭추가 과세제외, ⑮배당공제) enumerated. It is clearly a 'calculate X under official formula' tool. It does not, however, differentiate itself from the nearby siblings tunnelling_gift and tunnelling_from_pdf, so an agent must infer that this is the NTS-formula variant.
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?
A dedicated '언제' clause says to use it when computing 일감몰아주기 증여의제이익 according to the official NTS filing-guide formula. That is an explicit trigger condition. No when-not condition or named alternative is given, so the agent gets no explicit routing between this and tunnelling_gift / tunnelling_from_pdf.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
underreporting_penaltyARead-onlyIdempotent
과소신고가산세(일반 과소신고 10%, 부정행위 40%). 언제: 신고한 세액보다 실제 세액이 더 클 때 가산세 금액을 구한다. 입력: 과소신고한 세액(원) → additional_tax, 부정행위 여부 → fraud. 결과: 가산세·적용 세율, 근거(국세기본법 제47조의3). Under-reporting penalty: 10% general, 40% for fraud.
| Name | Required | Description | Default |
|---|---|---|---|
| fraud | Yes | 부정행위로 인한 과소신고 여부 | |
| additional_tax | Yes | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely useful context beyond that: the applicable statutory rates, the governing legal basis (국세기본법 제47조의3), and what the result contains (penalty amount, applied rate, grounds).
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 and rates, then structured as 언제/입력/결과, which makes it easy to scan. The trailing English one-liner partially restates the opening Korean sentence, so there is minor 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?
With no output schema, the description compensates by stating what is returned (penalty, applied rate, legal basis). For a two-parameter read-only calculator this is nearly complete; only edge conditions (e.g., thresholds or caps on the penalty) are unaddressed.
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 the baseline would be 3, but the description adds real disambiguation: it clarifies that additional_tax is the under-reported tax amount (과소신고한 세액) rather than the penalty itself, and that fraud toggles the 10% vs 40% rate — meaning beyond the schema's terse '금액(원)' and '부정행위로 인한 과소신고 여부'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (compute the under-reporting penalty) and quantifies the two regimes (10% general, 40% fraud), so an agent immediately knows what the tool returns. It does not explicitly name or distinguish itself from siblings like late_payment_penalty or invoice_penalty, though the topic is narrow enough to be self-identifying.
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 trigger condition: use it when the actual tax exceeds the reported tax. That is clear context for selection, but no exclusions or named alternatives (e.g., versus other penalty calculators) are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unfair_transactionARead-onlyIdempotent
부당행위계산 기준(시가와 실제 거래가 차이 3억 원 이상 또는 5% 이상). 언제: 특수관계인 거래 prices가 시가와 크게 차이 나 부당행위계산 부인 대상인지 확인할 때. 입력: 시가(단가, 원) → market_price, 실제 거래 단가(원) → actual_price, 수량 → quantity. 결과: 시가총액·차액·차액비율·부당행위계산 여부, 근거(법인세법 제52조, 시행령 제88조③). 부당행위계산 기준(시가와 실제 거래가 차액이 3억 원 이상 또는 5% 이상이면 부인 대상).
| Name | Required | Description | Default |
|---|---|---|---|
| quantity | Yes | 수량 | |
| actual_price | Yes | 실제 거래 단가(원) | |
| market_price | Yes | 시가(단가, 원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive calculation. The description adds useful behavioral context by naming the returned result fields (market total amount, difference, difference ratio, whether denial applies) and the legal basis, which helps the agent understand what the tool produces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses helpful labels (언제, 입력, 결과) and is front-loaded, but it repeats the unfair act calculation threshold at both the beginning and the end. The duplication costs efficiency, keeping it at an adequate rather than excellent level.
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, but the description compensates by listing the expected result fields and citing the legal basis. Together with the 100% schema coverage and clear usage condition, an agent has enough context to call the tool correctly, though additional edge-case guidance could improve it.
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 the schema already documents each parameter with Korean labels. The description maps the same inputs (market_price, actual_price, quantity) and units, adding little beyond what the schema provides. A 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?
The description identifies a specific tax calculation: checking whether a related-party transaction falls under the unfair act calculation denial standard. It gives the legal concept and threshold, making the purpose clear without opening the schema. It does not explicitly contrast with any sibling tool, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: when a related-party transaction price differs significantly from market price and you need to check whether it is subject to unfair act calculation denial. No alternatives or when-not-to-use guidance are given, so it is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vat_bad_debt_creditARead-onlyIdempotent
대손세액공제(대손금액 × 10/110). 언제: 외상 매출이 대손되었을 때 부가가치세 대손세액공제를 계산한다. 입력: 대손금액(부가세 포함, 원) → bad_debt_incl_vat, 재화·용역 공급 대가 채권 여부 → supply_receivable(기본 True). 결과: 대손세액(공급 대가 아니면 0), 근거(부가가치세법 제45조①). VAT bad debt credit.
| Name | Required | Description | Default |
|---|---|---|---|
| bad_debt_incl_vat | Yes | 대손금액(부가세 포함, 원) | |
| supply_receivable | No | 재화·용역 공급 대가 채권 여부(True면 대손세액 공제 대상) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a safe, idempotent, closed-world read/calculation, so the bar is lower. The description adds real context beyond them: the 10/110 formula, the conditional result (0 when the claim is not consideration for a supply), and the legal basis (VAT Act Art. 45①).
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 formula, then uses explicit 언제/입력/결과 sections. Every phrase carries information and there is 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 compensates by stating what is returned (the credit amount, or 0 when supply_receivable is false) plus the statutory basis. For a two-parameter calculation tool, nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema, including the default True on supply_receivable. The description largely restates those meanings and adds only a marginal note that the credit drops to 0 for non-supply receivables, so 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 and resource ('대손세액공제를 계산한다') and even gives the computation rule (대손금액 × 10/110), which makes the tool's scope unambiguous against neighbors like bad_debt_allowance or bad_debt_adjustment.
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 condition: when a credit sale (외상 매출) has become a bad debt. It does not name any alternative tool or exclusion, so it stops 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.
vat_card_sales_creditARead-onlyIdempotent
신용카드매출전표 등 발행세액공제(공제율 1.3%, 연 한도 1,000만 원). 언제: 개인사업자가 신용카드·현금영수증 매출에 대해 발행세액공제를 얼마나 받는지 계산한다. 입력: 신용카드·현금영수증 발급분 공급대가(원) → amount, 공급일(YYYY-MM-DD, 세율·한도 연도표 기준) → supplied_on, 같은 해 이미 공제받은 금액(원) → used_this_year, 개인사업자 여부 → individual(기본 True), 직전 연도 공급가액 합계(원) → prior_year_supply(직전연도_공급가액_한도 초과 시 공제 0). 결과: 공제액(법인·한도 초과 시 0, 판단 문구 포함), 근거(부가가치세법 제46조①). 신용카드매출전표 등 발행세액공제; 공제율 1.3%(간이 음식·숙박 2.6%는 2021.7.1. 전), 연 한도 1,000만 원(2018년 제2기 확정부터), 개인사업자만 해당·직전 연도 공급가액 한도 이하.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | 신용카드·현금영수증 발급분 공급대가(원) | |
| individual | No | 개인사업자 여부(True면 공제 대상) | |
| supplied_on | Yes | 공급일 YYYY-MM-DD | |
| used_this_year | No | 같은 해 이미 공제받은 금액(원) | |
| prior_year_supply | No | 직전 연도 공급가액 합계(원). 한도 초과 시 공제 제외 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds genuine behavioral context beyond them: the output collapses to 0 for corporations or when the annual/prior-year limits are exceeded, and the applicable rate/limit varies by supply date and a 2021.7.1 transition. It does not mention rounding or rate-limit edge behavior in detail, so not 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?
The 언제/입력/결과 labeling is well front-loaded and easy to scan, but the final sentence restates the 1.3%/2.6% rate, the 10M limit, the individual-only rule and the prior-year limit that were already given in the first sentence. The duplication costs conciseness without adding information.
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 must describe the return, and it does: the credit amount, the 0 outcome for corporations or limit overruns, an accompanying 판단 문구, and the legal basis (부가가치세법 제46조①). That is sufficient for correct invocation, though edge cases like partial-year limit application are not detailed.
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 the baseline is 3, but the description adds real semantics: supplied_on selects the year's rate/limit table (세율·한도 연도표 기준) and prior_year_supply triggers the credit-elimination rule. That is meaning beyond the schema's plain field labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (계산한다) and a precisely scoped resource (신용카드매출전표 등 발행세액공제), and pins down the exact computation (1.3% rate, 10M annual cap). This cleanly separates it from nearby VAT siblings such as vat_bad_debt_credit and vat_deemed_rent without the agent 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 '언제:' section explicitly states the applicability condition — an individual business computing a credit on credit-card/cash-receipt sales — and the eligibility limits (개인사업자만 해당, 직전 연도 공급가액 한도 이하, corporate filers get 0). It gives clear context and exclusions but never points to a sibling tool as an alternative, so it stops 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.
vat_common_input_allocationARead-onlyIdempotent
겸영사업자 공통매입세액 안분(불공제분 계산). 언제: 과세·면세 사업을 겸영할 때 공통 매입세액 중 얼마가 불공제인지 계산한다. 입력: 공통매입세액(원) → common_tax, 총공급가액(원) → total_supply, 면세공급가액(원) → exempt_supply. 결과: 불공제 매입세액, 근거(부가가치세법 시행령 제81조). 면세비율 5% 미만·공통매입세액 5만 원 미만이면 전액 공제. 불공제 = 공통매입세액 × 면세공급가액 ÷ 총공급가액. 겸영사업자 공통매입세액 안분(불공제분 계산).
| Name | Required | Description | Default |
|---|---|---|---|
| common_tax | Yes | 금액(원) | |
| total_supply | Yes | 금액(원) | |
| exempt_supply | Yes | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the lower bar applies. The description still adds real behavioral value: the computation formula, the legal basis, and the special threshold rules (exempt ratio <5% and common input tax <50,000 KRW → fully deductible).
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 clearly sectioned (언제/입력/결과), with every section earning its place. Minor deduction: the leading title sentence is redundantly repeated verbatim at the very end, which is pure 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 single-formula calculation tool this is complete: it gives inputs, the result, the governing rule, and edge-case handling. No output schema exists, and the description adequately explains what is returned (non-deductible input tax amount).
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%, but each schema field only says '금액(원)' (amount in KRW), which is generic. The description maps each parameter to its specific accounting meaning (common_tax=common input tax, total_supply=total supply value, exempt_supply=exempt supply value), adding genuine semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource (common input tax allocation / non-deductible portion) and even gives the exact formula and legal basis (Enforcement Decree Art. 81). An agent can distinguish this from siblings like common_input_tax or input_tax_recalculation 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 explicitly states the trigger condition: when concurrently operating taxable and tax-exempt businesses. Clear context, but it names no alternative tools or when-not conditions, so it stops 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.
vat_deemed_input_creditRead-onlyIdempotent
의제매입세액공제(면세농산물 등 매입가액 × 공제율, 연장·운반비율 제외·공통분 안분). 언제: 음식점·제조업 등에서 면세농산물 등을 매입할 때 의제매입세액공제를 계산한다. 입력: 과세기간('YYYY-1' 또는 'YYYY-2') → period, 업종 → industry, 면세농산물 등 매입가액(원) → purchase, 해당 과세기간 과세표준(원) → base, 개인사업자 여부 → individual, 중소기업 여부(제조 법인) → sme, 면세농산물 등 총 구입액(원) → purchase_total, 구입액에 포함된 운반비(원) → freight_included, 과세사업 사용·소비액(원) → used_taxable, 면세사업 사용·판매액(원) → used_exempt, 실지귀속 불분명 기말재고(원) → ending_inventory_common, 해당 기간 과세 공급가액(원) → taxable_supply, 해당 기간 면세 공급가액(원) → exempt_supply. 결과: 공제대상 매입가액·의제매입세액·공제율·한도율·과세비율·단계별 계산, 근거(부가가치세법 제42조, 시행령 제81조·제84조).
| Name | Required | Description | Default |
|---|---|---|---|
| sme | No | 중소기업 여부(제조 법인) | |
| base | No | 해당 과세기간 과세표준(원). 없으면 taxable_supply 사용 | |
| items | No | 품목별 면세농산물 등 목록. 각 항목: {name, purchase_price, imported?, customs_value?, customs_duty?, freight_included?, taxable_goods?, usage: {구분: 비율%}}. usage 허용 형태 3가지 — ① {'제조': 60, '재판매': 30, '재고': 10} ② [{'구분': '제조', '비율': 60}, {'구분': '재판매', '비율': 30}] ③ {'구분': '제조', '비율': 60}(단일). 전부 {'제조': 60, ...} 형태로 자동 정규화됨. usage 구분 허용값: 제조, 재판매, 재고, 종업원제공, 면세사업. 같은 name이고 purchase_price·수입·관세·운임이 같으면 여러 행을 한 품목으로 합쳐 usage를 더함. 비율 합이 100이 아니면 문제로 거부. 문항에 품목별 표가 있으면 items에 그대로 넣고(수입품은 관세의 과세가격·관세, 운임 포함액, 사용 비율), 합산·제외는 도구가 함. items와 purchase/purchase_total을 동시에 주면 문제로 거부 | |
| period | Yes | 과세기간('YYYY-1' 또는 'YYYY-2') | |
| industry | Yes | 업종 | |
| purchase | No | 공제대상 매입가액(원) = 과세사업에 사용했거나 사용할 면세농산물 등의 매입가액. 다른 사업자에게 그대로 판매한 분은 제외, 기말 재고분은 포함. 수입분은 관세의 과세가격 + 운반비 포함 구입액이면 purchase_total·freight_included 사용. 품목별로 따로 부르지 말고 합산해서 1회 호출. used_taxable·used_exempt·ending_inventory_common이 모두 0이면 purchase(또는 purchase_total−freight_included)가 공제대상 매입가액이 됨. items와 purchase/purchase_total을 동시에 주면 문제로 거부됨 | |
| individual | No | 개인사업자 여부 | |
| used_exempt | No | 면세사업 사용·판매액(원) | |
| used_taxable | No | 과세사업 사용·소비액(원) | |
| exempt_supply | No | 해당 기간 면세 공급가액(원) | |
| purchase_total | No | 면세농산물 등 총 구입액( 운반비 포함 가능, 원) | |
| taxable_supply | No | 해당 기간 과세 공급가액(원) | |
| freight_included | No | 구입액에 포함된 채취 운반비(원) — 있으면 매입가액에서 제외 | |
| ending_inventory_common | No | 실지귀속 불분명 기말재고(원) |
vat_deemed_rentARead-onlyIdempotent
간주임대료(보증금 × 정기예금이자율 × 일수/연일수, 윤년이면 연수 366). 언제: 상가·오피스텔 등 임대 보증금을 받을 때 부가가치세 간주임대료를 계산한다. 입력: 보증금(원) → deposit, 과세기간 중 임대 일수(1~184) → days, 과세기간('YYYY-1' 또는 'YYYY-2') → period, 적용 이자율(소수, 생략 시 연도표) → rate. 결과: 간주임대료·적용_이자율, 근거(부가가치세법 시행령 제65조). VAT deemed rent on lease deposits.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | 과세기간 중 임대 일수(1~184) | |
| rate | No | 적용 이자율(소수, 예 0.015 = 1.5%). 생략 시 연도표 | |
| period | Yes | 과세기간('YYYY-1' 또는 'YYYY-2', 정기예금이자율 연도표 기준) | |
| deposit | Yes | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so the safety profile is covered. The description adds genuine value beyond them: the computational formula, the leap-year day-count rule (366), the returned fields, and the legal basis (부가가치세법 시행령 제65조).
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 formula, then organizes the rest with explicit labels (언제/입력/결과). Dense but every clause carries information; the trailing English sentence is mildly redundant but useful as a one-line gloss.
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 correctly compensates by naming the returned values (간주임대료·적용_이자율) and the legal citation. A calculation tool of this shape is adequately specified, though it could note rounding or boundary behavior at days=184.
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 four parameters are already documented in the schema. The description's input mapping (deposit/days/period/rate) restates the same facts, including the 'rate defaults to year table' note that already appears in the schema, adding no new semantics.
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?
Names a specific verb and resource (간주임대료 계산 / VAT deemed rent) and even gives the formula (보증금 × 정기예금이자율 × 일수/연일수). An agent can immediately distinguish this from siblings like deemed_interest or vat_deemed_input_credit.
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 states the triggering scenario precisely (상가·오피스텔 등 임대 보증금을 받을 때). However, it does not name or exclude the closest sibling (deemed_interest) or state when this is not applicable, so it stops 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.
vat_simplified_taxpayerARead-onlyIdempotent
간이과세자 납부세액 전 과정(과세표준·납부세액·매입공제·카드 발행세액공제·가산세·납부의무 면제 판정·차가감 납부세액). 언제: 간이과세자 부가가치세 신고 시 납부세액을 단계별로 계산한다. 입력: 공급대가(부가세 포함, 원) → supply_incl_vat, 업종별 부가가치율(소수, 예: 0.15 = 15%) → value_added_rate, 세금계산서 등 수취 매입 공급대가(원) → invoice_purchase_incl_vat, 자기적립마일리지 등 결제분 공급대가(원) → mileage_supply_incl_vat, 신용카드매출전표·현금영수증 등 발급분 공급대가(원) → card_cash_receipt_supply_incl_vat, 세금계산서 미수취 매입 공급대가(원) → no_invoice_purchase_incl_vat, 직전 연도 공급대가(원) → prior_year_supply_incl_vat, 예정부과 고지·수시부과세액(원) → prepaid_tax, 적용 연도(2016~2026) → year. 결과: 과세표준·납부세액·매입공제·카드공제·가산세·공제합계·차가감 납부세액·납부의무 면제 여부·단계별 계산, 근거(부가가치세법 제46조·제63조·제68조의2·제69조).
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | 적용 연도(2016~2026) | |
| prepaid_tax | No | 예정부과 고지·수시부과세액(원) | |
| supply_incl_vat | Yes | 공급대가(부가세 포함, 원) | |
| value_added_rate | Yes | 업종별 부가가치율(소수, 예: 0.15 = 15%, 0 초과 1 미만) | |
| mileage_supply_incl_vat | No | 자기적립마일리지 등 결제분 공급대가(원) — 과세표준에서 제외 | |
| invoice_purchase_incl_vat | No | 세금계산서 등 수취 매입 공급대가(원) | |
| prior_year_supply_incl_vat | No | 직전 연도 공급대가(원) — 납부의무 면제 판정 참조 | |
| no_invoice_purchase_incl_vat | No | 세금계산서 발급 의무자로부터 미수취한 매입 공급대가(원) | |
| card_cash_receipt_supply_incl_vat | No | 신용카드매출전표·현금영수증 등 발급분 공급대가(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is met. The description adds valuable behavioral detail beyond that: the staged calculation flow, the legal basis (부가가치세법 제46조·제63조·제68조의2·제69조), the year range, and the exemption determination logic. It doesn't mention validation failures or edge-case handling, keeping it short of 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?
Well front-loaded: it leads with the full pipeline, then "언제:", "입력:", "결과:" sections. The input section is a long comma-run list mapping every param, which borders on redundant with the schema, but structure and ordering are clear.
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, so the description carries the return-value burden — and it does list all outputs (과세표준·납부세액·매입공제·카드공제·가산세·공제합계·차가감 납부세액·면제 여부·단계별 계산). Combined with the annotations covering safety, this is nearly complete; only failure/precondition behavior is unstated.
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 9 parameters. The description largely restates the schema's Korean param descriptions (e.g. mileage supply excluded from tax base, prior_year for exemption). Baseline 3 is appropriate; it adds only marginal emphasis, not new syntax or format rules.
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 precise verb+resource: computes the full simplified-taxpayer VAT payment pipeline, enumerating each stage (과세표준·납부세액·매입공제·카드 발행세액공제·가산세·면제 판정·차가감 납부세액). This distinguishes it clearly from siblings like simplified_vat_return (the return form) and vat_card_sales_credit (a single credit component).
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 clear triggering context (simplified taxpayer filing). However, it does not name alternatives or exclusions — e.g. when to use simplified_vat_return vs. this tool, or that it is inappropriate for general taxpayers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wage_income_taxARead-onlyIdempotent
근로소득공제·산출세액·근로소득세액공제. 언제: 근로소득만 있는 근로자의 연말정산에서 근로소득공제, 산출세액, 근로소득 세액공제를 계산한다. 입력: 총급여(원, 비과세 제외) → gross_pay, 종합소득 과세표준(원) → tax_base, 귀속연도(2016~2026) → year. 결과: 근로소득공제·산출세액·근로소득세액공제, 근거(소득세법 제47조①·제55조·제59조). Wage income: employment income deduction, computed tax and wage tax credit.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | 사업연도·귀속연도(2016~2026) | |
| tax_base | Yes | 종합소득 과세표준(원) | |
| gross_pay | Yes | 총급여(원, 비과세 제외) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so the safety profile is covered. The description adds genuine value beyond that: the output set (deduction, computed tax, tax credit) and the governing legal basis (소득세법 제47조①·제55조·제59조), making it clear this is a pure statutory computation with no side effects.
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?
Organized as 언제/입력/결과 with the purpose stated first, so the key information is front-loaded. The trailing English sentence duplicates content already conveyed, which is mild redundancy rather than 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?
With no output schema, the description carries the burden of describing returns, and it does list the three computed results plus their legal basis. Coverage of computation assumptions and edge cases (e.g., how the 2016–2026 year range affects rules) is left implicit, but nothing essential for calling the 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 description coverage is 100%, so the schema already documents all three parameters with units and meaning. The description's input mapping (총급여 → gross_pay, 과세표준 → tax_base, 귀속연도 → year) largely restates that, adding no syntax or format detail beyond the schema; 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?
Names a specific computation and resource: 근로소득공제·산출세액·근로소득세액공제 for a wage-only earner's year-end settlement. This distinguishes it from adjacent siblings like income_tax, retirement_income_tax, and withholding_tax, which target different income types.
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 triggering context (근로소득만 있는 근로자의 연말정산), which tells the agent when this applies. It does not, however, explicitly name the alternative tool to use for non-wage income, so routing is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withholding_taxARead-onlyIdempotent
국내 원천징수세액(소득세분). 언제: 이자·배당·사업·기타소득 등을 지급할 때 원천징수할 소득세액을 구한다. 입력: 소득 종류(이자·배당·비영업대금·사업·기타·봉사료·일용·비실명·외국인직업운동가·온투업이자) → kind, 지급액(원) → amount, 지급연도(2016~2026) → year. 결과: 원천징수세액·적용 세율, 근거(소득세법 제129조). 지방소득세 10% 별도. 비거주자·외국법인은 nonresident_withholding 사용. 국내 withholding tax (소득세분) on interest, dividends, business income, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | 소득 종류: 이자·배당·비영업대금·사업·기타·봉사료·일용·비실명·외국인직업운동가·온투업이자 | |
| year | No | 지급연도(2016~2026) | |
| amount | Yes | 금액(원) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a pure read-only, idempotent, non-destructive calculation, so the bar is low. The description still adds real value: it discloses what comes back (withholding amount plus applied rate and statutory basis, 소득세법 제129조) and the important caveat that local income tax is an additional 10% not included. It does not discuss rate tables or rounding, hence not 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?
The 언제/입력/결과 labeling front-loads purpose, inputs and outputs and is easy to scan. Slight redundancy in repeating the full income-type list and a trailing English restatement of the first sentence keeps it from a 5.
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 correctly carries the return-value burden by naming the computed amount, applied rate and legal basis. Combined with the local-tax caveat and the sibling routing note, everything an agent needs to call this three-parameter calculator correctly is present.
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 (kind, amount, year) are already documented in the schema. The '입력' line restates the kind enumeration and the year range (2016~2026) without adding syntax, defaults, or magnitude guidance 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: computes the income-tax portion of Korean withholding tax on domestic interest, dividends, business and other income. It explicitly distinguishes itself from the sibling nonresident_withholding for non-residents and foreign corporations, 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 '언제' block gives the triggering situation (paying interest/dividends/business/other income requiring withholding) and the '결과' block names the exclusion case with a concrete alternative ('비거주자·외국법인은 nonresident_withholding 사용'). When-to-use, when-not-to-use and the routing 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.11.0- Changed
capital_gains_income9 fields changed- added
Input schema / properties / acquisition_brokerageAdded value: +{ + "default": 0, + "description": "취득 시 중개수수료(원) — 문항 표의 '취득시 중개수수료'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함", + "title": "Acquisition Brokerage", + "type": "integer" +} - added
Input schema / properties / acquisition_taxAdded value: +{ + "default": 0, + "description": "취득세(원) — 문항 표의 '취득세'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함", + "title": "Acquisition Tax", + "type": "integer" +} - added
Input schema / properties / capital_expenditure / defaultAdded value: +0 - added
Input schema / properties / holding_tax_paidAdded value: +{ + "default": 0, + "description": "보유 중 납부한 재산세·종합부동산세(원) — 필요경비에 넣지 않고 판단에서 필요경비가 아님을 명시함", + "title": "Holding Tax Paid", + "type": "integer" +} - added
Input schema / properties / registered / defaultAdded value: +true - added
Input schema / properties / residence_endAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "거주 종료일 YYYY-MM-DD — 생략 시 transfer_date를 사용", + "title": "Residence End" +} - added
Input schema / properties / residence_startAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "거주 시작일 YYYY-MM-DD — residence_end와 함께 입력하면 거주기간(만 년수)을 도구가 계산함. residence_years와 다르면 문제로 거부", + "title": "Residence Start" +} - added
Input schema / properties / transfer_expenses / defaultAdded value: +0 - changed
Input schema / requiredPrevious value: -[ - "asset_type", - "acquisition_date", - "transfer_date", - "transfer_price", - "acquisition_price", - "capital_expenditure", - "transfer_expenses", - "registered" -]New value: +[ + "asset_type", + "acquisition_date", + "transfer_date", + "transfer_price", + "acquisition_price" +]
- Changed
common_input_tax2 fields changed- changed
Input schema / properties / common_asset_sales / descriptionPrevious value: -"공통사용재화 공급 목록 [{sale_price(공급가액), input_tax(그 재화의 매입세액)}]"New value: +"공통사용재화 공급 목록 [{sale_price(공급가액), input_tax(그 재화의 매입세액 — ledger에 넣지 말고 여기만 입력, 신규 사업 아니면 직전 과세기간 비율로 안분 공제)}]" - changed
Input schema / properties / ledger / descriptionPrevious value: -"원장형 입력 당기 매입 항목 [{항목, 매입세액 | 매입가액(×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(0~1) | 횟수:{과세,면세} | 면적:{과세,면세} — 둘 중 하나: 매입세액 또는 매입가액"New value: +"원장형 입력 당기 매입 항목 [{항목, 매입세액 | 매입가액(×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(0~1) | 횟수:{과세,면세} | 면적:{과세,면세} | 신축건물(bool, 기본 False) — 둘 중 하나: 매입세액 또는 매입가액. 공통+신축건물+면적 있으면 예정사용면적비율 우선 적용"
- Changed
entertainment_adjustment2 fields changed- changed
Input schema / properties / ledger / descriptionPrevious value: -"원장형 입력 [{항목, 금액, 증빙:'없음'|'영수증 등'|'적격'(기본 '적격'), 성격?:'교제목적'|'직원단체_법인'|'직원단체_비법인'|'임직원부담'|'현물'|'경조금'|'문화', 시가?, 장부가액?, 건당기준초과?}] — 성격별 포함·제외는 어휘 기업업무추진비_포함항목으로 판단"New value: +"원장형 입력 [{항목, 금액, 증빙:'없음'|'영수증 등'|'적격'(기본 '적격'), 성격?:'교제목적'|'직원단체_법인'|'직원단체_비법인'|'임직원부담'|'현물'|'경조금'|'문화'|'사적사용', 시가?, 장부가액?, 건당기준초과?}] — 성격별 포함·제외는 어휘 기업업무추진비_포함항목으로 판단. '사적사용'은 시부인 대상 제외, 직접 손금불산입(상여" - added
Input schema / properties / 부가세별도Added value: +{ + "default": true, + "description": "현물 접대비 평가 시 부가가치세 포함 여부(기본 True — 사업상 증여는 매출세액 포함, 영 제42조⑥·법 제36조①3호 준용)", + "title": "부가세별도", + "type": "boolean" +}
- Changed
inheritance_tax1 field changed- changed
Input schema / properties / spouse / descriptionPrevious value: -"실제 상속받은 금액·법정상속분 등"New value: +"실제 상속받은 금액·법정상속분 등. {actual(실제 상속액), legal_share('3/5' 같은 분수 문자열 또는 0.6 같은 0 초과 1 이하 소수)}"
- Changed
special_tax_credit3 fields changed- changed
Input schema / properties / persons / descriptionPrevious value: -"[{name, relation, age, disabled?, income_ok?, severe_illness?}]"New value: +"[{name, relation, age, disabled?, income_ok?, severe_illness?}] — name: 사람 표시 이름(문자열, 중복 불가). relation: 공제대상자와의 관계. 허용값: 본인·배우자·직계비속·입양자·형제자매·직계존속·위탁아동·수급자. 문항 표현 그대로 '자녀'·'아들'·'딸'은 '직계비속', '부모'·'모친'·'부친'은 '직계존속'으로 적을 것. age: 만 나이(정수). disabled: 장애인 여부(bool). income_ok: 연 소득금액 100만원 이하(근로소득만 있으면 총급여 500만원 이하)면 true — 문항의 '소득 없음'은 true로 입력. severe_illness: 중증질환 여부(bool, 2018~ 의료비 특정지출 대상). 예시: [{'name':'본인','relation':'본인','age':50,'income_ok':true}, {'name':'딸','relation':'직계비속','age':16,'income_ok':true}]" - changed
Input schema / properties / total_salary / descriptionPrevious value: -"금액(원)"New value: +"총급여액(원). 문항에 총급여액이 없으면 0이 아니라 생략 — 0이면 의료비 문턱(total_salary×문턱비율)이 0이 되어 모든 의료비가 특정지출로 분류됨" - removed
Input schema / properties / total_salary / minimumRemoved value: -0
- Changed
vat_deemed_input_credit2 fields changed- added
Input schema / properties / itemsAdded value: +{ + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "품목별 면세농산물 등 목록. 각 항목: {name, purchase_price, imported?, customs_value?, customs_duty?, freight_included?, taxable_goods?, usage: {구분: 비율%}}. usage 허용 형태 3가지 — ① {'제조': 60, '재판매': 30, '재고': 10} ② [{'구분': '제조', '비율': 60}, {'구분': '재판매', '비율': 30}] ③ {'구분': '제조', '비율': 60}(단일). 전부 {'제조': 60, ...} 형태로 자동 정규화됨. usage 구분 허용값: 제조, 재판매, 재고, 종업원제공, 면세사업. 같은 name이고 purchase_price·수입·관세·운임이 같으면 여러 행을 한 품목으로 합쳐 usage를 더함. 비율 합이 100이 아니면 문제로 거부. 문항에 품목별 표가 있으면 items에 그대로 넣고(수입품은 관세의 과세가격·관세, 운임 포함액, 사용 비율), 합산·제외는 도구가 함. items와 purchase/purchase_total을 동시에 주면 문제로 거부", + "title": "Items" +} - changed
Input schema / properties / purchase / descriptionPrevious value: -"면세농산물 등 매입가액(원)"New value: +"공제대상 매입가액(원) = 과세사업에 사용했거나 사용할 면세농산물 등의 매입가액. 다른 사업자에게 그대로 판매한 분은 제외, 기말 재고분은 포함. 수입분은 관세의 과세가격 + 운반비 포함 구입액이면 purchase_total·freight_included 사용. 품목별로 따로 부르지 말고 합산해서 1회 호출. used_taxable·used_exempt·ending_inventory_common이 모두 0이면 purchase(또는 purchase_total−freight_included)가 공제대상 매입가액이 됨. items와 purchase/purchase_total을 동시에 주면 문제로 거부됨"
18 tool updates
v0.10.0- Added
asset_grant_reserve - Added
capital_gains_income - Changed
common_input_tax1 field changed- changed
Input schema / properties / ledger / descriptionPrevious value: -"원장형 입력 당기 매입 항목 [{항목, 매입세액? | 매입가액?(×10%), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율? | 횟수?:{과세,면세} | 면적?:{과세,면세}}] — 사용처별 처리는 어휘 공통매입세액_귀속"New value: +"원장형 입력 당기 매입 항목 [{항목, 매입세액 | 매입가액(×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(0~1) | 횟수:{과세,면세} | 면적:{과세,면세} — 둘 중 하나: 매입세액 또는 매입가액"
- Changed
deemed_dividend_bonus_shares1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"재원 — 어휘 '의제배당_잉여금자본전입.판단.재원별' 키: 주식발행초과금·자본준비금·재평가적립금·자기주식처분이익·이익잉여금"New value: +"재원 — 어휘 '의제배당_잉여금자본전입.판단.재원별' 키: 주식발행초과금·자본준비금·재평가적립금·자기주식처분이익·이익잉여금·재평가적립금_토지1%"
- Added
deemed_dividend_capital_reduction - Changed
deemed_interest2 fields changed- added
Input schema / properties / fiscal_startAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "사업연도 개시일(YYYY-MM-DD). 생략 시 year_end의 1년 전 다음 날", + "title": "Fiscal Start" +} - added
Input schema / properties / received_interestAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "실제 받은 이자 금액(원, ge=0). 주면 charged_rate 계산 대신 이 금액을 수령이자로 사용", + "title": "Received Interest" +}
- Added
depreciation_adjustment - Added
dividend_received_deduction - Added
earned_income_gross_pay - Added
foreign_tax_credit - Added
gift_tax - Added
inheritance_tax - Added
inventory_valuation_adjustment - Added
retirement_allowance_adjustment - Added
special_tax_credit - Changed
vat_bad_debt_credit1 field changed- added
Input schema / properties / supply_receivableAdded value: +{ + "default": true, + "description": "재화·용역 공급 대가 채권 여부(True면 대손세액 공제 대상)", + "title": "Supply Receivable", + "type": "boolean" +}
- Changed
vat_card_sales_credit2 fields changed- added
Input schema / properties / individualAdded value: +{ + "default": true, + "description": "개인사업자 여부(True면 공제 대상)", + "title": "Individual", + "type": "boolean" +} - added
Input schema / properties / prior_year_supplyAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "직전 연도 공급가액 합계(원). 한도 초과 시 공제 제외", + "title": "Prior Year Supply" +}
- Changed
vat_deemed_rent1 field changed- added
Input schema / properties / rateAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "적용 이자율(소수, 예 0.015 = 1.5%). 생략 시 연도표", + "title": "Rate" +}
50 tool updates
v0.9.1- First observed
assessment_limitation - First observed
bad_debt_adjustment - First observed
bad_debt_allowance - First observed
bundled_supply_split - First observed
business_car_expense - First observed
common_input_tax - First observed
corporate_tax - First observed
daily_worker_withholding - First observed
deemed_bonus_resettlement - First observed
deemed_dividend_bonus_shares - First observed
deemed_interest - First observed
dominant_shareholder - First observed
donation_limit - First observed
entertainment_adjustment - First observed
entertainment_limit - First observed
extract_relations - First observed
financial_income_aggregate - First observed
income_tax - First observed
input_tax_recalculation - First observed
invoice_penalty - First observed
kinship_check - First observed
late_payment_penalty - First observed
loss_carryforward_limit - First observed
minimum_tax - First observed
missing_receipt_disallowance - First observed
nonbusiness_interest_disallowance - First observed
nonresident_withholding - First observed
other_income_aggregate - First observed
ownership_ratio - First observed
precheck_schema - First observed
related_judge - First observed
related_provision_at - First observed
retirement_income_tax - First observed
return_precheck - First observed
return_precheck_pdf - First observed
simplified_vat_return - First observed
thin_capitalization - First observed
tunnelling_from_pdf - First observed
tunnelling_gift - First observed
tunnelling_gift_nts - First observed
underreporting_penalty - First observed
unfair_transaction - First observed
vat_bad_debt_credit - First observed
vat_card_sales_credit - First observed
vat_common_input_allocation - First observed
vat_deemed_input_credit - First observed
vat_deemed_rent - First observed
vat_simplified_taxpayer - First observed
wage_income_tax - First observed
withholding_tax
TDQS
Scored across 62 tools
Many tools have overlapping or nested purposes, especially in the tunnelling/special-relationship cluster (tunnelling_gift vs tunnelling_gift_nts, dominant_shareholder, ownership_ratio, related_judge), VAT common-input (common_input_tax vs vat_common_input_allocation), simplified VAT (vat_simplified_taxpayer vs simplified_vat_return), bad debt (bad_debt_allowance vs bad_debt_adjustment), and entertainment (entertainment_limit vs entertainment_adjustment). Detailed descriptions help, but the number of near-duplicate tools makes misselection likely for an agent.
Names are all snake_case, which is good, but there is no consistent verb_noun or domain prefix pattern. Tools mix noun phrases like inheritance_tax, vat_deemed_rent, common_input_tax, late_payment_penalty, and tunnelling_from_pdf, and VAT tools are only sometimes prefixed with vat_.
62 tools is far beyond the ideal 3-15 range and well into the 25+ heavy range, making tool selection burdensome. The broad Korean tax domain partially justifies a large surface, but several tools could be consolidated into parameterized tools.
The server covers many major tax calculation areas, but notable gaps remain: no general VAT return assembly, no business-income tax calculation for sole proprietors, and little/no coverage for local taxes, securities transaction tax, acquisition tax, or comprehensive return lifecycle. Some tools are explicitly partial (e.g., tunnelling_gift vs tunnelling_gift_nts), which agents must navigate around.
Maintenance
Related MCP Connectors
- find-refOAuthcom.find-ref
Korean accounting standards, audit, tax and legal sources and rulings, with citation checks
Korean law: statutes, precedents, ordinances, treaties and citation verification (법제처 API).
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
Korean statutes, precedents, local business-district stats and public procurement for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to retrieve current Korean tax statutes, judicial precedents, and tax authority interpretations via MCP, with daily-updated legislative history and full-text search.1MIT
- AlicenseBqualityCmaintenanceEnables AI assistants and terminals to retrieve and cross-reference Korean legal sources through 10 tools built on 42 Ministry of Government Legislation APIs, covering statutes, precedents, administrative rules, ordinances, treaties, and interpretations. Adds hallucination-resistant citation verification, article impact graphs, point-in-time diffing of in-force versions, case citator checks, and applicable-law-at-the-time analysis.102,753 npmMIT
- AlicenseBqualityAmaintenanceEnables deterministic research of Korean tax-law issues by retrieving and scoring official statutory evidence from law.go.kr and other legal sources, with citation verification and provenance, without deciding legal conclusions.8MIT
- AlicenseAqualityBmaintenanceEnables Korean tax, accounting, and finance professionals to pull statute text, delegated enforcement decrees and rules, NTS rulings, and annexes in a single lookup, and to check whether every statute or article citation in an AI draft actually exists (±verified, missing, or unverifiable), with statutory-formula calculations for items like executive severance limits and entertainment-expense caps.7MIT