Skip to main content
Glama
UpstageAI

korean-tax-calc-mcp

korean-tax-calc-mcp — Korea Tax Calculator MCP (한국 세금 계산)

데모: 2025 사업연도 법인세 조정 통합 — 기업업무추진비·인정이자·지급이자·승용차·대손·기부금 → 과세표준 → 산출세액·최저한세

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

작성 주체(정확한 고지): 0.3.00.12.2(2026-10-1010-26)는 Solar Pro 4(Solar Work CLI)가 코드를 쓰고 CodeSolar가 리뷰, Claude가 테스트로 교차 검증했습니다(0.8.0 일부 문법 오류와 0.9.2는 Claude가 수정·작성). 0.13.0(2026-10-28)부터는 기존 계산기 뼈대는 Solar Pro 4 그대로이고, 새 도구·연도별 조문 대조·버그 수정은 Claude(Anthropic)가 작성하며 CodeSolar가 리뷰합니다. 버전별 작성 주체는 CHANGELOG 각 절 머리에 적혀 있습니다. 도구 93개.

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/>추정 계산 안 함"]
  1. 입력 확인 — 모르는 항목·빠진 값이 있으면 계산하지 않고 무엇이 필요한지 알려 줍니다.

  2. 그해 기준값 — 세율·한도는 코드 안 연도표(법인세·소득세 20162026, 부가세 2016년 1기2026년 2기), 항목별 판단 기준은 facts_vocab.json(적용 기간·근거 조문 포함)에서 꺼냅니다.

  3. 계산 — 조문 순서대로 계산합니다. 예: 과세표준 → 그해 세율 구간 → 산출세액.

  4. 결과 — 세액·중간 계산·항목별 판단·세무조정(소득처분)·근거 조문을 함께 돌려줍니다.

계산·판정 도구 82개는 생성형 AI 없이 내 PC에서 동작합니다. PDF 도구 3개만 UPSTAGE_API_KEY가 있을 때 Upstage를 씁니다.

Related MCP server: taxax-legal-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"] },
    "korean-tax":      { "command": "uvx", "args": ["korean-tax-mcp"], "env": { "LAW_OC": "법제처 OC(무료, 선택)" } }
  }
}

두 번째 줄의 korean-tax-mcp는 조문·부칙·해석·판례를 찾는 짝 서버입니다. 같이 두면 근거 찾기 → 계산 → 서식이 한 대화에서 이어지고, 이 서버의 find_tool도 계산 도구가 없는 질문(월세·연금계좌 세액공제, 주식 양도 등)에 바로 부를 조문 호출값을 돌려줍니다. 계산만 쓰려면 첫 줄만 넣어도 됩니다.

새 버전으로 바로 바꾸려면 uvx --refresh korean-tax-calc-mcp(uvx는 받은 버전을 캐시합니다). 특정 버전 고정은 uvx korean-tax-calc-mcp@0.17.0.

키 없이 동작합니다. 선택: LAW_OC(세무조사 판정 도구 2개의 법제처 조문 조회), UPSTAGE_API_KEY(PDF 표 추출).

도구 (93개)

묶음

도구

법인세 (18)

산출세액 corporate_tax · 외국납부세액공제 foreign_tax_credit · 기업업무추진비 한도 entertainment_limit · 가지급금 인정이자 deemed_interest · 부당행위 기준 unfair_transaction · 이월결손금 한도 loss_carryforward_limit · 최저한세 minimum_tax · 업무무관 지급이자(가지급금 제외 판정·적수·순위) nonbusiness_interest_disallowance · 업무용승용차 business_car_expense · 기부금 한도 donation_limit · 대손충당금 한도 bad_debt_allowance · 과소자본 thin_capitalization · 적격증빙 미수취 missing_receipt_disallowance · 수입배당금 익금불산입 dividend_received_deduction · 일시상각충당금 asset_grant_reserve · 임대보증금 간주익금 corporate_deemed_rent_income · 청산소득 liquidation_income · 재해손실세액공제 disaster_loss_credit

소득세·원천·양도·상속증여 (23)

종합소득세 income_tax · 원천징수 withholding_tax · 비거주자 원천징수 nonresident_withholding · 퇴직소득세 retirement_income_tax · 근로소득세 wage_income_tax · 일용근로자 daily_worker_withholding · 소득처분 상여 재정산 deemed_bonus_resettlement · 특별세액공제 special_tax_credit · 양도소득 capital_gains_income · 상속세 inheritance_tax · 증여세 gift_tax · 추계 사업소득 estimated_business_income · 인적공제 personal_deduction · 연금소득금액 pension_income · 결손금 공제 income_loss_offset · 연금계좌 인출 pension_account_withdrawal · 상속·증여재산 평가 inheritance_gift_valuation · 양도소득 산출세액 capital_gains_tax · 주택 간주임대료 housing_deemed_rent_income · 주택임대소득(비과세·분리과세) housing_rental_income · 자녀세액공제 child_tax_credit · 배당세액공제(비교산출세액) dividend_tax_credit · 종교인소득 religious_income

부가세·가산세·제척기간 (14)

간주임대료 vat_deemed_rent · 의제매입세액 vat_deemed_input_credit · 공통매입세액 안분 vat_common_input_allocation · 간이과세 납부세액 vat_simplified_taxpayer · 카드 발행세액공제 vat_card_sales_credit · 대손세액공제 vat_bad_debt_credit · 과소신고가산세 underreporting_penalty · 납부지연가산세 late_payment_penalty · 세금계산서 가산세 invoice_penalty · 부과제척기간 assessment_limitation · 면세전용 간주공급 vat_exempt_use_deemed_supply · 매입세액 공제 판정 vat_input_tax_deduction · 간주공급 판정 vat_deemed_supply_items · 공급시기 판정(예정·확정 귀속) vat_supply_timing

사실관계·원장 → 세무조정 (15)

대손 조정 bad_debt_adjustment · 기업업무추진비 조정 entertainment_adjustment · 무상주 의제배당 deemed_dividend_bonus_shares · 금융소득 합산 financial_income_aggregate · 기타소득 other_income_aggregate · 근로소득 총급여 earned_income_gross_pay · 간이과세 확정신고 simplified_vat_return · 공통매입세액 정산 common_input_tax · 매입세액 재계산 input_tax_recalculation · 토지·건물 안분 bundled_supply_split · 감가상각 시부인 depreciation_adjustment · 퇴직급여충당금 retirement_allowance_adjustment · 감자 의제배당 deemed_dividend_capital_reduction · 재고자산 평가 inventory_valuation_adjustment · 차가감소득금액 income_adjustment_total

세무조사 판정 (9)

특수관계(생계를 함께하는 친족 포함) related_judge · 친족관계 kinship_check · 간접보유비율 ownership_ratio · 지배주주 dominant_shareholder · 일감몰아주기 tunnelling_gift · 일감몰아주기(국세청 산식) tunnelling_gift_nts · 특수관계 조문 위치 related_provision_at · 신고서 사전검토 return_precheck · 사전검토 입력 목록 precheck_schema

PDF 표 추출 (3)

관계표 extract_relations · 일감몰아주기 자료 tunnelling_from_pdf · 법인세 신고서 return_precheck_pdf

국세징수 (1)

국세 우선권 매각대금 배분 tax_priority_distribution

엑셀 내보내기 (1)

계산 근거 엑셀 export_workbook

도구 찾기 (1)

평소 말로 맞는 도구 찾기 find_tool

  • 계산 근거 엑셀: export_workbook은 여러 도구 호출을 다시 실행해 법정서식 모양(별지 제3호·제15호·제23호(갑)(을)·제20호(1)·제16호의2·제26호(갑)(을)·제50호(을), 부가세 공제받지 못할 매입세액 명세서, 종합소득세 부속 명세서, 양도소득세 별지 제84호 신고서 세액 계산·부표1 양도소득금액 계산명세서 등)의 검토용 엑셀로 냅니다. 금액 칸은 서식 산식 그대로의 수식이고 서식끼리 연결되며, 도구 값과 대조하는 확인 칸이 붙습니다. 계산 과정을 보여 주는 참고 자료이며 세무조정계산서 작성·신고 대리가 아닙니다.

  • 원장 그대로 입력: 세무조정 도구는 장부 항목(이름·금액·증빙·성격)을 그대로 받아 항목 판단 → 세무조정 → 소득처분까지 돌려줍니다.

  • 쟁점 표시: 비거주자 원천징수·과소자본 결과에는 다툼이 될 수 있는 지점과 확인할 자료를 함께 붙입니다(결론은 내리지 않음).

  • 지원 연도: 법인세 20162026 사업연도, 소득세 20162026 귀속연도, 부가가치세 2016년 1기~2026년 2기, 가산세·제척기간은 현행 조문. 그 밖의 연도는 오류로 멈춥니다. 지방소득세는 별도입니다.

면책 및 고지

  • 면책: 이 도구의 결과는 세무 자문이 아닙니다. 법령·해석을 바탕으로 계산·판정 과정을 보여 주는 참고 자료이며, 실제 신고·세무조사·불복 판단은 세무사·회계사·변호사 등 전문가에게 확인하세요. 근거 조문·판례는 원문으로 확인하세요.

  • 세무대리 아님: 이 도구는 세무사법 제2조의 세무대리(세무조정계산서 작성, 신고 대리, 세무상담 등)를 수행하지 않으며, 그 업무는 세무사와 등록한 공인회계사·변호사만 할 수 있습니다(세무사법 제20조). 법령에 적힌 산식을 코드로 옮겨 입력값에 대한 계산 과정을 보여 주는 소프트웨어이고, 입력 사실관계의 확인과 최종 판단은 세무 전문가(세무사·회계사·변호사)와 함께 해 주세요.

  • AI 사용 고지: 계산·판정 도구 82개는 코드로 동작하며 생성형 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)로 전송됩니다. 시세 조회(stock_price_lookup)는 KRX로 종목코드·날짜를, 공시가격 조회(official_property_price, VWORLD_KEY 필요)는 브이월드로 주소·필지번호·연도를 보냅니다. 키 없이 사용하면(pypdf 로컬 추출) 외부 전송이 없습니다. 민감정보가 담긴 문서는 API 전송 시 넣지 마세요.

라이선스

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

Available Tools

93 tools
assessment_limitationA
Read-onlyIdempotent

국세 부과제척기간과 만료일(2020년 이후 부과분 기준 현행 조문). 언제: 어느 과세기간의 세금이든 부과·제척기간이 언제까지인지 역산한다. 입력: 법정신고기한(YYYY-MM-DD) → due_date, 부과 성격(일반·무신고·부정행위) → case, 역외거래 여부 → offshore, 상속세·증여세 여부 → inheritance_gift. 결과: 제척기간(년)·기산일·만료일, 근거(국세기본법 제26조의2①②④). 일반 5년(역외 7년), 무신고 7년(역외 10년), 부정행위 10년(역외 15년), 상속·증여 10년(부정 등 15년).

NameRequiredDescriptionDefault
caseNo일반(과소신고 등) / 무신고 / 부정행위로 포탈·환급일반
due_dateYes법정신고기한(YYYY-MM-DD, 부과할 수 있는 날 = 그 다음 날)
offshoreNo역외거래(국제거래 또는 국외 자산·용역 관련 거래) 여부
inheritance_giftNo상속세·증여세 여부

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_reserveA
Read-onlyIdempotent

국고보조금·공사부담금·보험차익 일시상각충당금·압축기장충당금 세무조정. 언제: 국고보조금·공사부담금·보험차익으로 사업용자산을 취득·개량한 법인의 손금산입·충당금 상계·처분 계산. 입력: 사업연도 → year, 재원 구분 → kind, 수령액 → received, 자산별 내역 → assets(취득·개량가액·사용액·상각·처분·충당금 등). 결과: 손금산입 한도·충당금 설정금액·상계액·처분 익금·사용계획·미사용·기말 잔액·소득금액 순영향·세무조정·근거. 일시상각충당금·압축기장충당금 계산.

NameRequiredDescriptionDefault
kindYes재원 구분
yearYes사업연도·귀속연도(2016~2026)
assetsYes[{asset, cost, used?(그 자산에 쓴 보조금·공사부담금·보험차익 금액, 원), depreciable, depreciation_this_year(그해 세무상 손금으로 인정되는 감가상각비 — 회사계상액이 상각범위액을 넘으면 상각범위액, depreciation_adjustment로 먼저 계산), disposed?, disposed_ratio?, book_provision?, book_reversal?}]
receivedYes수령액(금전·현물 가액)
planned_useNo금액(원)
receipt_yearNo수령·설정 연도
expired_unusedNo금액(원)
claim_by_returnNo신고조정 손금산입
lost_book_valueNo멸실·손괴 보험대상자산 장부가액

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare this as a read-only, idempotent, non-destructive, closed-world calculation. The description adds value beyond that by enumerating the computed outputs (손금산입 한도, 충당금 설정금액, 상계액, 처분 익금, 소득금액 순영향, 근거), which matters because there is no output schema. It does not discuss edge cases or failure modes, but for a pure calculator the gap is small.

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

Conciseness4/5

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

The purpose is front-loaded in the first clause, then organized under labeled sections (언제 / 입력 / 결과), which makes it scannable. It is dense but every line carries information; only the closing restatement of 일시상각충당금·압축기장충당금 is mildly redundant with the opening sentence.

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

Completeness4/5

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

For a 9-parameter calculation tool with no output schema, the description supplies the missing return-value picture and the input mapping, which is enough to call it correctly. The optional inputs (planned_use, receipt_year, expired_unused, claim_by_return, lost_book_value) are left to the schema, which is acceptable at 100% coverage.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter including the nested assets item shape. The description only maps inputs to fields (사업연도→year, 재원 구분→kind, 수령액→received, 자산별 내역→assets) and omits the five optional parameters entirely, adding little beyond the structured data. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific resource (국고보조금·공사부담금·보험차익 일시상각충당금·압축기장충당금) and a specific action (세무조정 계산), so the domain is unmistakable. It does not explicitly name a sibling to contrast with (e.g. depreciation_adjustment, which is closely related), which keeps it just short of a 5.

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

Usage Guidelines4/5

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

The '언제:' block gives a clear triggering condition: a corporation that acquired/improved business assets using subsidies, construction contributions, or insurance proceeds, and needs 손금산입/충당금 상계/처분 calculations. It offers no explicit exclusions or named alternatives, so an agent gets clear context but no routing rules.

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

bad_debt_adjustmentA
Read-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. 결과: 판단(항목별·근거)·계산(세법상 당기 대손금·전기말·당기말 채권·실적률)·결과(한도·한도초과)·세무조정. 대손금·대손충당금 세무조정.

NameRequiredDescriptionDefault
smeYes중소기업 여부
bookYes장부상 대손충당금 {opening: 기초, offset: 당기상계, provision: 당기설정, closing: 기말}(원)
yearYes사업연도·귀속연도(2016~2026)
writeoffsYes대손금 목록 [{kind, amount, arose_in:'전기'|'당기', instrument?:'외상매출금'|'받을어음'|'기타', months_since_default?, mortgage?:bool}]
prior_excessNo전기 대손충당금 한도초과액(원)
loss_rate_digitsNo대손실적률 소수 자릿수(기본 3 — 넷째 자리 이하 절사)
receivables_end_bookYes금액(원)
receivables_prev_end_bookYes금액(원)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 8 parameters. 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.

Purpose4/5

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.

Usage Guidelines4/5

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_allowanceA
Read-onlyIdempotent

대손충당금 한도(채권잔액 × max(1%, 대손실적률))와 한도초과. 언제: 매출채권 등에 대해 대손충당금을 설정할 때 손금산입 한도를 구한다. 입력: 채권잔액(원) → receivables, 대손실적률(소수, 예: 0.02 = 2%) → loss_rate, 설정할 대손충당금(원) → set_amount, 이전 disallowed(원) → prior_disallowed. 결과: 한도·한도초과, 근거(법인세법 제34조, 시행령 제61조②). Bad debt allowance limit.

NameRequiredDescriptionDefault
loss_rateYes대손실적률(소수, 예: 0.02 = 2%)
set_amountYes금액(원)
receivablesYes금액(원)
prior_disallowedNo금액(원)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

building_standard_priceA
Read-onlyIdempotent

건물 기준시가 — 국세청 「건물 기준시가 계산방법 고시」 산식(신축가격기준액 × 구조지수 × 용도지수 × 위치지수 × 경과연수별 잔가율 × (상증세만) 개별건물 특성 조정률, ㎡당 1,000원 미만 버림 × 면적). 양도세 기준시가(소득세법 제99조①1호나목)와 상속·증여 보충적 평가(상증법 제61조①2호)에 쓴다. 언제: 일반 건물(상가·사무실·공장·창고 등)의 기준시가가 필요할 때 — 비상장주식 평가(unlisted_stock_valuation의 assets 기준시가), 상속·증여 신고, 양도세 환산취득가액. 주택·아파트는 공시가격(official_property_price), 오피스텔·일괄고시 상업용은 국세청 고시가격을 쓴다. 입력: 적용연도 → year, 면적 → area_m2, 구조·용도 → structure·use, 부속토지 공시지가 → land_price_per_m2, 신축연도 → built_year, 상증세면 purpose='상증세'와 층수·연면적·지붕·층별·안전등급. 지수표는 2026년 고시(제2025-39호) 원문. 2007~2025년은 그 해 신축가격기준액에 2026 지수표를 적용한 근사(결과에 표시). 결과: 기준시가·㎡당 금액·지수·잔가율·조정률, 판단(산식·시가 우선·국세청 감정평가 가능성·범위), 근거.

NameRequiredDescriptionDefault
useYes용도 — 사무실·근린생활시설(상가)·공장·창고·병원·호텔·학원 등 평소 말(건축물대장 주용도). 주택·아파트·오피스텔은 이 고시 대상 아님(공시가격·고시가격)
roofNo상증세만, 구조지수 100 미만 건물: 지붕재료(슬래브·기와|패널·유리·슬레이트|함석·천막·초가)
yearYes적용연도(양도·상속·증여일이 속한 해, 2007~2026). 새 고시 전이면 직전 연도
floorsNo상증세만: 최고층수(지하·옥탑 제외) — 규모 조정률
area_m2Yes평가대상 건물 연면적(㎡, 집합건물은 전용+공용)
purposeNo양도세 기준시가(조정률 미적용) / 상증세 보충적 평가(개별건물 특성 조정률 적용)양도세
floor_useNo상증세만: 평가 부분이 상가 1층·2층·지하1층·지하2층·부속주차장·기계실·옥탑이면 적음
structureYes구조 — 철근콘크리트·철골·경량철골·연와(벽돌)·블록·목조·조립식패널·컨테이너 등 평소 말(건축물대장 표기)
built_yearNo신축연도(사용승인일 기준; 가사용·사실상 사용이 앞서면 그 해; 증축은 증축연도)
safety_gradeNo상증세만: 안전진단 등급 B|C|D|E(납세자 입증)
remodel_countNo상증세만: 일부개축 횟수(개축 부분만 해당)
total_area_m2No상증세만: 건물 전체 연면적(㎡) — 규모 조정률(비우면 area_m2)
land_price_per_m2No부속토지 ㎡당 개별공시지가(원) — official_property_price(토지)로 조회

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the readOnly/idempotent annotations, the description discloses material behaviour: the 지수표 applies the 2026 고시 table and years 2007–2025 are approximations flagged in the result, the sub-1,000원/㎡ truncation rule, and the 상증세-only adjustment layer. It does not cover failure modes or input validation, so a 4 rather than 5.

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

Conciseness4/5

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

The 언제/입력/결과 labelling makes it scannable and every block earns its place. However, the long formula sentence leads the description ahead of the plain 'what it is' statement, so the tool's core purpose is not front-loaded optimally.

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

Completeness5/5

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

With 13 parameters, no output schema, and a domain-specific computation, the description supplies the formula, the year/approximation caveat, the conditional parameter set, and the returned fields (기준시가·지수·잔가율·조정률·판단). Nothing an agent needs in order 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.

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3; the description earns above that by mapping business inputs to fields (적용연도 → year, 면적 → area_m2, 구조·용도 → structure·use) and grouping which parameters only matter when purpose='상증세' (층수·연면적·지붕·층별·안전등급). It does not add syntax guidance beyond the schema, so not a 5.

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

Purpose5/5

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

The description states a specific resource (건물 기준시가) and the exact statutory formula and legal basis (소득세법 제99조①1호나목, 상증법 제61조①2호), so an agent knows precisely what is computed. It also names the sibling tools that cover the excluded property types (official_property_price for 주택, 국세청 고시가격 for 오피스텔), separating it from neighbours.

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

Usage Guidelines5/5

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

The '언제' block gives concrete scenarios (비상장주식 평가, 상속·증여 신고, 양도세 환산취득가액) and explicitly routes excluded cases to alternatives: 주택·아파트 → official_property_price, 오피스텔·일괄고시 상업용 → 국세청 고시가격. It also ties to the sibling unlisted_stock_valuation.

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

bundled_supply_splitA
Read-onlyIdempotent

토지·건물 일괄공급 안분(부가법 제29조⑨, 영 제64조①). 언제: 토지와 건물을 함께 공급하며 가액 구분이 불분명할 때 감정평가가액 → 기준시가 → 장부가액 순으로 건물 공급가액을 안분한다. 입력: 일괄 거래가액(원) → total_price, 부가세 포함 여부 → vat_included, 감정평가가액 {building, land} → appraisal, 기준시가 {building, land} → standard_value, 장부가액 {building, land} → book_value. 결과: 판단·결과(건물_공급가액·토지_가액·부가가치세)·산식·근거.

NameRequiredDescriptionDefault
appraisalNo{building, land} — 감정평가가액(선택)
book_valueNo{building, land} — 장부가액(선택)
total_priceYes금액(원)
vat_includedYes부가세 포함 여부
standard_valueNo{building, land} — 기준시가(선택)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

No output schema exists, but the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_expenseA
Read-onlyIdempotent

업무용승용차 관련비용 손금불산입(업무사용비율·사적사용·미작성 시 기준비율·감가상각 연 800만 원 한도). 언제: 임원·직원이 사용하는 승용차 관련비용을 어디까지 손금으로 인정할지 계산할 때. 입력: 사업연도(20162026) → year, 유지비(유류·보험·수선 등, 원) → upkeep, 세법상 감가상각비(5년 정액, 원) → depreciation, 장부상 감가상각비(원) → booked_depreciation, 운행기록부 작성 여부 → log_kept, 업무사용비율(소수, 작성 시) → business_ratio, 보유 월수(112) → months, 부동산임대업 주업 등 특정법인 여부 → rental_corp, 법인 전용번호판 부착 여부 → plate_ok. 결과: 업무사용비율·손금불산입·감가상각 한도 등, 근거(법인세법 제27조의2, 시행령 제50조의2).

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
monthsNo보유 월수(1~12)
upkeepYes유지비(유류·보험·수선 등, 원)
log_keptYes운행기록부 작성 여부
plate_okNo법인업무용 자동차등록번호판 부착 여부(2024.1.1. 이후 취득·임차 차량 중 취득가액(임차는 기준가액) 8천만원 이상인 차량만 대상 — acquisition_cost를 주면 기준 미만 차량엔 적용하지 않음)
rental_corpNo부동산임대업 주업 등 특정법인
depreciationYes세법상 감가상각비(5년 정액, 원)
business_ratioNo운행기록상 업무사용비율(소수, 작성 시, 0~1)
acquisition_costNo차량 취득가액(원, 임차는 기준가액). 8천만원 미만이면 번호판 요건 대상이 아니므로 plate_ok=False여도 업무사용비율 그대로
booked_depreciationYes장부상 감가상각비(원)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive behavior, so the description is not burdened with safety disclosure. It adds useful behavioral context by naming the legal basis and summarizing the result components, including business-use ratio, disallowance, and depreciation limit.

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

Conciseness4/5

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

The description is front-loaded with the core tax concept, then organized into when/input/result sections. It is appropriately sized for a 10-parameter tax calculation, though the input mapping largely duplicates schema content.

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

Completeness4/5

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

For a complex tax calculation with no output schema, the description explains the result components and legal basis, and covers most inputs. The omission of acquisition_cost from the input mapping is a minor completeness gap, but the schema still documents it.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are already documented in the schema. The description maps most inputs to their tax concepts but omits acquisition_cost and adds little syntax or format detail beyond the schema, making the baseline 3 appropriate.

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

Purpose4/5

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

The description identifies a specific tax computation: non-deductible treatment of business passenger-car expenses, including business-use ratio, personal use, deemed ratio, and the annual depreciation cap. It is clear enough to distinguish from generic corporate tax or depreciation_adjustment tools, though it does not explicitly name sibling alternatives.

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

Usage Guidelines4/5

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

It explicitly states when to use the tool: when calculating the deductible extent of car expenses used by executives or employees. It gives clear context but does not specify when not to use it or name alternative tools.

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

capital_gains_incomeA
Read-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조⑥). (부담부증여) burdened_gift={증여가액, 채무액, 평가:'시가'|'기준시가', 취득_기준시가?, 취득가액_실지?} — 비율=채무액÷증여가액, 양도가액=증여가액×비율(=채무액), 취득가액: 평가='기준시가'면 취득_기준시가×비율+개산공제(토지·건물 3%, 미등기 0.3%), '시가'면 취득가액_실지×비율. transfer_price·acquisition_price와 함께 입력 불가. (주택) 1세대1주택 여부 → one_house, 비과세 요건 충족 → exempt_met, 거주기간(년) → residence_years, (주택, 1주택 아님) 다주택 중과(제104조⑦) → houses_count(1세대 주택 수)·adjusted_area(양도일 현재 조정대상지역)·exclusion_reason(배제 사유, 선택). 중과 대상 아님이 확실하면 heavy_multi_home=False. 중과: 2018.4.1.2021.5.31. 양도 2주택 +10%p·3주택 이상 +20%p, 2021.6.1. +20%p·+30%p, 장기보유특별공제 배제(제95조②), 단기 보유는 제104조①2호·3호 세액과 비교해 큰 세액. 한시 배제: 2019.12.17.~2020.6.30. 보유 10년 이상(영 12호), 2022.5.10.~2026.5.9. 보유 2년 이상(영 12호의2) — 날짜로 도구가 판정. 2026.5.10. 이후 나·다목 경과 요건은 exclusion_reason='한시배제_경과'(사용자 주장). 기본공제·과세표준·산출세액까지 → apply_basic_deduction(True면 제104조 세율로 산출세액·지방소득세도 계산: 보유 1년 미만·2년 미만 단기세율, 미등기 70%, 비사업용 토지 → non_business_land, 지정지역 비사업용 토지 → designated_area). 지원하지 않음(error): 분양권·조합원입주권·주식, 2018.4.1. 전 양도 지정지역 3주택 이상 가산(제104조④1호·2호), 주택 수 계산(사용자 판단), 비과세 보유기간 예외, 주거용 전환, 고가주택 일부 양도. 토지는 one_house=False, exempt_met=False 입력해도 오류 아님(주택 요건 무관). 결과: 판단(비과세·고가주택·적용 표, 환산취득가액 사용 시 필요경비 선택 근거)·결과(양도차익·과세대상 양도차익·보유·거주기간·공제율·장기보유특별공제액·양도소득금액, 선택 시 기본공제·과세표준·산출세액·지방소득세·적용 세율)·산식·근거.

NameRequiredDescriptionDefault
one_houseNo주택만: 양도일 현재 1세대 1주택(일시적 2주택 등 1주택으로 보는 경우 포함) 여부
asset_typeYes양도자산 종류 — '토지'|'건물'(주택 아닌 건물)|'주택'(딸린 토지 포함). 그 밖의 자산은 지원하지 않음
exempt_metNoone_house=True일 때: 1세대 1주택 비과세 요건(보유 2년 이상, 취득 당시 조정대상지역이면 거주 2년 이상) 충족 여부
registeredNo등기 여부(False = 미등기양도자산: 비과세·장기보유특별공제·기본공제 배제)
houses_countNoone_house=False인 주택: 양도일 현재 1세대 주택 수(조합원입주권·분양권 포함, 분양권은 2021.1.1. 이후 취득분부터). 영 제167조의3①·제167조의10① 각 호 외의 부분 괄호(지방 기준시가 3억원 이하 주택 등)로 주택 수에서 빼는 주택은 사용자가 판단해 뺀 수. 2=1세대 2주택(제104조⑦1호·2호), 3 이상=3주택 이상(3호·4호)
adjusted_areaNoone_house=False인 주택: 양도일 현재 양도 주택이 조정대상지역(주택법 제63조의2①1호)에 있는지
burdened_giftNo부담부증여(소득세법 시행령 제159조) — {증여가액, 채무액, 평가:'시가'|'기준시가', 취득_기준시가?(평가='기준시가'면 필수), 취득가액_실지?(평가='시가'면 필수)}. 증여가액·채무액으로 양도가액과 취득가액을 자동 계산. transfer_price나 acquisition_price와 함께 입력 불가
residence_endNo거주 종료일 YYYY-MM-DD — 생략 시 transfer_date를 사용
transfer_dateYes양도일 YYYY-MM-DD(대금청산일, 2017-01-01 ~ 2026-12-31)
transfer_priceNo양도가액 — 양도 당시 실지거래가액(원). burdened_gift 입력 시 생략 가능(생략 시 0)
acquisition_taxNo취득세(원) — 문항 표의 '취득세'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함
designated_areaNonon_business_land=True인 토지: 지정지역(제104조의2②) 소재 여부. True면 2018.1.1. 이후 양도분 기본세율+20%p(제104조④3호). apply_basic_deduction=True일 때 산출세액에 반영
exclusion_basisNoexclusion_reason='기타'일 때 근거 조문·호와 요건 충족 사실
residence_startNo거주 시작일 YYYY-MM-DD — residence_end와 함께 입력하면 거주기간(만 년수)을 도구가 계산함. residence_years와 다르면 문제로 거부
residence_yearsNoone_house=True일 때: 보유기간 중 거주기간(만 년수, 1년 미만 버림)
acquisition_dateYes취득일 YYYY-MM-DD(대금청산일, 등기접수일이 앞서면 그날)
exclusion_reasonNo중과 배제 사유(사용자 주장, 요건 충족은 사용자 확인): '지방저가주택'|'장기임대주택'|'감면대상장기임대주택'|'장기사원용주택'|'조특법감면주택'|'문화재주택'|'상속주택'|'저당권실행취득주택'|'어린이집주택'|'취학근무요양'(2주택만)|'수도권밖주택'(2주택만)|'소송주택'(2주택만)|'기준시가1억이하'(2주택만)|'일반주택'|'조정지역공고전계약'|'1세대1주택특례주택'|'한시배제_경과'(2026.5.10.~11.9. 양도, 영 12호의2 나·다목)|'기타'(exclusion_basis 필수). 한시 배제(2019.12.17.~2020.6.30. 보유 10년 이상, 2022.5.10.~2026.5.9. 보유 2년 이상)는 도구가 날짜로 판정
heavy_multi_homeNoone_house=False인 주택: 다주택 중과(제104조⑦) 대상 여부(이전 입력). False=중과 대상 아님. True만으로는 계산하지 않음 — houses_count·adjusted_area로 입력
holding_tax_paidNo보유 중 납부한 재산세·종합부동산세(원) — 필요경비에 넣지 않고 판단에서 필요경비가 아님을 명시함
acquisition_priceNo취득가액 — 취득 당시 실지거래가액(원, 취득세·취득 중개수수료 등 포함, 재산세 제외, 환산취득가액 사용 시 0). burdened_gift 입력 시 생략 가능(생략 시 0)
non_business_landNo토지만: 비사업용 토지 여부(True면 세율 기본세율+10%p, 제104조①8호). apply_basic_deduction=True일 때 산출세액에 반영
transfer_expensesNo양도비(원, 양도 시 중개수수료 등, 없으면 0)
capital_expenditureNo자본적지출액(원, 증명서류로 확인되는 것, 없으면 0)
acquisition_brokerageNo취득 시 중개수수료(원) — 문항 표의 '취득시 중개수수료'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함
apply_basic_deductionNoTrue면 양도소득 기본공제(연 250만원)와 과세표준까지 계산(같은 해 같은 그룹에서 이미 공제받았으면 False)
transfer_standard_priceNo환산취득가액 계산용 양도 당시 기준시가(원). acquisition_price=0일 때 acquisition_standard_price와 함께 입력
acquisition_standard_priceNo환산취득가액 계산용 취득 당시 기준시가(원). acquisition_price=0일 때 transfer_standard_price와 함께 입력

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description layers on substantive behavior: automatic 환산취득가액 when acquisition_price=0 and both 기준시가 are present, automatic 부담부증여 양도/취득가액 derivation with the 3%/0.3% 개산공제, date-driven 판정 of 한시 배제, and rejection when residence_start/end conflict with residence_years. It also discloses the return shape (판단·결과·산식·근거), which is valuable given 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.

Conciseness3/5

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

It is front-loaded with the formula chain and organized under 언제/입력/지원하지 않음/결과, which helps. However, it is extremely dense and long, and the '입력' section largely duplicates parameter descriptions that already have 100% schema coverage, so several sentences do not earn their place.

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

Completeness5/5

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

For a 27-parameter statutory calculator with no output schema, the description covers the computation chain, required vs. optional inputs, mutual exclusions, auto-derivations, error cases, and the structure of the returned 판단/결과/산식/근거. An agent has everything needed to decide and call correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the field descriptions: it explains parameter interactions (burdened_gift is mutually exclusive with transfer_price/acquisition_price), the multi-home surcharge rate schedule that gives houses_count/adjusted_area their purpose, and that 한시 배제 is decided by the tool from dates rather than the user. Much of the '입력' block does restate schema text, which keeps it below a 5.

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

Purpose4/5

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

The opening line states a precise computational chain (양도차익 → 1세대1주택 비과세·고가주택 안분 → 장기보유특별공제 → 양도소득금액) with the governing statutes, which is far more specific than the name alone. It never names the sibling capital_gains_tax, even though the apply_basic_deduction option pushes this tool into 산출세액 territory that sibling presumably owns, leaving a real boundary ambiguity.

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

Usage Guidelines4/5

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

The '언제' line gives an explicit trigger, and the '지원하지 않음(error)' block lists concrete exclusions (분양권·조합원입주권·주식, 2018.4.1. 이전 지정지역 3주택 가산, 주택 수 계산, 고가주택 일부 양도). It also pre-empts a common false-positive ('토지는 one_house=False, exempt_met=False 입력해도 오류 아님'). What's missing is routing to alternatives — no mention of capital_gains_tax for the full tax computation.

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

capital_gains_taxA
Read-onlyIdempotent

양도소득 과세표준 → 산출세액·지방소득세(소득세법 제104조①·④·⑦). 언제: 양도소득 과세표준이 이미 주어졌거나 따로 계산했을 때 세율을 적용한다(가액부터 계산하면 capital_gains_income에 apply_basic_deduction=True). 입력: 과세표준 → base, 자산 종류 → asset_type, 취득일·양도일 → acquisition_date·transfer_date, 등기 → registered, 비사업용 토지 → non_business_land, 지정지역 → designated_area, 다주택 중과(주택) → houses_count·adjusted_area·exclusion_reason(선택). 세율: 2년 이상 기본세율(제55조) / 1년 이상 2년 미만 40%(주택 60%, 2021.6.1. 전 양도 주택은 기본세율) / 1년 미만 50%(주택 70%, 2021.6.1. 전 40%) / 미등기 70% / 비사업용 토지 기본세율+10%p(지정지역 2018~ +20%p) — 둘 이상이면 큰 세액. 다주택 중과(제104조⑦, 조정대상지역): 2018.4.1.2021.5.31. 양도 2주택 +10%p·3주택 이상 +20%p, 2021.6.1. +20%p·+30%p, 단기 보유는 제104조①2호·3호 세액과 비교해 큰 세액. 한시 배제(영 제167조의3①·제167조의10① 12호 2019.12.17.~2020.6.30. 보유 10년 이상, 12호의2 2022.5.10.~2026.5.9. 보유 2년 이상)는 날짜로 판정, 그 밖의 배제 사유와 2026.5.10. 이후 나·다목 경과 요건은 사용자 주장(exclusion_reason). 지원하지 않음: 2018.4.1. 전 양도 지정지역 3주택 이상 가산(제104조④1호·2호), 주택 수 계산(사용자 판단), 분양권·조합원입주권·주식. 결과: 산출세액·지방소득세(10%)·적용 세율·세율 후보·근거.

NameRequiredDescriptionDefault
baseYes양도소득 과세표준(원)
asset_typeYes양도자산 종류
registeredNo등기 여부(False = 미등기 70%)
houses_countNo주택만: 양도일 현재 1세대 주택 수(조합원입주권·분양권 포함, 분양권은 2021.1.1. 이후 취득분부터). 영 제167조의3①·제167조의10① 괄호로 주택 수에서 빼는 주택은 사용자가 판단해 뺀 수
adjusted_areaNo주택만: 양도일 현재 조정대상지역 소재 여부
transfer_dateYes양도일 YYYY-MM-DD(2016-01-01 ~ 2026-12-31)
designated_areaNo비사업용 토지가 지정지역(제104조의2②)에 있으면 True — 2018.1.1. 이후 양도분 기본세율+20%p(제104조④3호)
exclusion_basisNoexclusion_reason='기타'일 때 근거 조문·호와 요건 충족 사실
acquisition_dateYes취득일 YYYY-MM-DD(세율 보유기간 계산용)
exclusion_reasonNo중과 배제 사유(사용자 주장) — capital_gains_income의 exclusion_reason과 같은 값. 한시 배제는 도구가 날짜로 판정
heavy_multi_homeNo주택만: 조정대상지역 다주택 중과(제104조⑦) 대상 여부(이전 입력). True만 주면 2018.4.1. 전 양도·한시 배제(2022.5.10.~2026.5.9. 양도·보유 2년 이상)만 계산하고, 중과 기간은 houses_count·adjusted_area를 요구
non_business_landNo토지만: 비사업용 토지(기본세율+10%p)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent, but the description goes far beyond: it discloses the full rate schedule, the larger-of comparison rule, multi-home surcharge periods, which exemptions are date-determined by the tool versus user-asserted (exclusion_reason), and what the return contains. It also states hard limits, so the agent knows where the tool's judgment ends.

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

Conciseness4/5

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

Well front-loaded: the first line gives the input→output contract, then labeled blocks (언제/입력/세율/지원하지 않음/결과) make the density navigable. It is long and citation-heavy, but the length is justified by the statutory complexity rather than padding.

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

Completeness5/5

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

With no output schema, the description still specifies the return contents (산출세액, 지방소득세 10%, 적용 세율, 세율 후보, 근거). Combined with the rate rules, exclusion mechanics, and stated non-support, an agent has everything needed to decide applicability and interpret results.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description adds real value by grouping inputs semantically (과세표준→base, 자산 종류→asset_type, 등기→registered, 지정지역→designated_area) and by clarifying the date-based versus user-claim split for exemption handling. It does not explain heavy_multi_home or exclusion_basis, which live only in the schema, so it falls short of a 5.

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

Purpose5/5

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

Opens with a precise mapping: '양도소득 과세표준 → 산출세액·지방소득세(소득세법 제104조①·④·⑦)', naming the verb (apply rates), the input (tax base), and the outputs. It explicitly differentiates itself from the closest sibling by telling the agent to use capital_gains_income when starting from the sale price instead.

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

Usage Guidelines5/5

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

'언제' clause states the precondition (tax base already given or computed separately) and names the alternative tool plus the exact parameter to use there. The '지원하지 않음' section adds explicit out-of-scope cases (pre-2018.4.1 designated-area 3+ homes, house-count determination, pre-sale rights/partnership units/stocks), which is rare and valuable routing guidance.

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

child_tax_creditA
Read-onlyIdempotent

자녀세액공제(소득세법 제59조의2) 귀속연도별 계산 — 기본공제대상 자녀 수별 금액·6세 이하 추가공제·출산·입양 공제. Child tax credit by tax year (20162026). 언제: 종합소득세 신고·연말정산에서 자녀세액공제 금액을 구할 때(자녀 수·나이·출산·입양·손자녀). 입력: 귀속연도(20162026) → year, 자녀 목록 → children(나이·기본공제대상 여부·출산·입양·순서), 손자녀가 있는 2023년 이전 귀속분만 신고·연말정산일 → settlement_date. 결과: 자녀세액공제 합계와 ①인원별 금액·②6세 이하 추가(20162017)·③출산·입양, 자녀별 판단·산식·근거(개정 부칙 포함). 연도별: ① 20162023 15만·30만·초과 1명당 30만 / 2024 15만·35만·30만 / 2025~ 25만·55만·40만. 연령 2019 7세 이상(7세 미만 취학아동 포함)·2020 7세·2023 8세·2026 9세(2017년생은 13세, 2026.4.21 부칙). 손자녀 2024~(2023 귀속은 2024 이후 연말정산·신고분). ② 6세 이하 추가 20162017만. ③ 2016 1명당 30만, 2017 첫째 30만·둘째 50만·셋째 이상 70만. 지원 안 함: 2016 전·2027 이후 귀속, 산출세액 초과분 처리(제61조)·다른 공제와 적용순서, 2022년 이전 귀속 손자녀를 2024년 이후 신고·결정하는 경우(입력 확인 필요로 멈춤). 아동수당 수급 여부는 조문 요건이 아니어서 묻지 않는다.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
childrenYes[{name?, relation?, age?|birth_date?|birth_year?, basic_deduction, born_or_adopted_this_year?, order?, school_enrolled?}] — relation: 자녀(기본, 입양자·위탁아동 포함)·손자녀. age: 과세기간 종료일 현재 만 나이(= 귀속연도 − 출생연도), birth_date(YYYY-MM-DD)·birth_year로 대신 입력 가능. basic_deduction: 이 납세자의 기본공제대상자인지(필수). born_or_adopted_this_year: 해당 과세기간에 출생·입양 신고(기본 false). order: 출산·입양 자녀의 순서 1·2·3(셋째 이상) 또는 '첫째'·'둘째'·'셋째' (2017 귀속부터 출산·입양 자녀에 필수). school_enrolled: 2019 귀속 6세 자녀의 취학 여부(그때만 필수). 예: [{"age":10,"basic_deduction":true},{"age":0,"basic_deduction":true,"born_or_adopted_this_year":true,"order":2}]
settlement_dateNo신고·결정·연말정산일(YYYY-MM-DD). 2023년 이전 귀속분에 손자녀가 있을 때만 필요 — 손자녀 포함은 2024.1.1 이후 신고·결정·연말정산분부터(2023.12.31 개정 부칙 제3조①)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish readOnly/idempotent/non-destructive, but the description adds substantial behavior: year-banded rates, age-threshold changes across years, a 부칙 exception for 2017-born children, and an explicit halt condition ('입력 확인 필요로 멈춤'). It also pre-empts a question the agent should not ask (아동수당).

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

Conciseness4/5

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

Well front-loaded with purpose, then 언제/입력/결과/연도별/지원 안 함 sections that each carry load. Dense for a first read, and the ① ② ③ rate notation takes parsing, but virtually no sentence is filler given the rule complexity.

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

Completeness5/5

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

For a multi-year tax computation with no output schema, the description covers the return contents (합계, 인원별 금액, 추가공제, 자녀별 판단·산식·근거), all year bands, and the unsupported territory. An agent has everything needed to call it correctly and to know when it will stop.

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

Parameters5/5

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

Schema coverage is 100%, but the description still adds meaning beyond it: settlement_date is only required for 손자녀 in pre-2023 귀속 stacked with post-2024 settlement, order is required for 출산·입양 children from 2017, and school_enrolled applies only to 2019-year-age-6 children. These conditional requirements are not obvious from the schema alone.

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

Purpose5/5

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

Names the specific tax credit (자녀세액공제), cites the statute (소득세법 제59조의2), and states the operation (귀속연도별 계산) and supported period (2016~2026). This distinguishes it from sibling credit tools like dividend_tax_credit and special_tax_credit without needing to open the schema.

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

Usage Guidelines5/5

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

An explicit '언제' block names the scenario (종합소득세 신고·연말정산) and the required inputs, while a '지원 안 함' block lists out-of-scope years, 산출세액 초과분/적용순서, and pre-2022 손자녀 edge cases. Both when-to-use and when-not-to-use are stated.

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

common_input_taxA
Read-onlyIdempotent

겸영사업자 공통매입세액 안분·정산 + 공통사용재화 공급(부가법 제40조, 영 제81조제83조·제63조). 언제: 과세·면세 겸영 사업자의 예정·확정신고에서 공통매입세액 공제액과 공통사용재화 공급 시 추가 매출세액을 계산한다. 입력: · 공급가액(예정·확정별 과세·면세), 예정 불공제액, 직전 과세기간 공급가액, 공통사용재화 공급 목록. · 원장: ledger=[{항목, 매입세액 | 매입가액(→×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(01) | 횟수:{과세,면세} | 면적:{과세,면세}}]. 사용처별 처리는 어휘 공통매입세액_귀속.판단.사용처별에서 읽음. prior_common_input_tax: 확정신고에서 ledger 사용 시 예정신고 기간의 공통매입세액. 기존 prior_nondeductible는 그대로. 결과: 판단·계산·결과(공제매입세액·추가_매출세액)·산식·근거. 계산의 실지귀속_공제는 기존 계산 키 유지.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
filingYes신고 구분('예정'|'확정')
ledgerYes원장형 입력 당기 매입 항목 [{항목, 매입세액 | 매입가액(×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(0~1) | 횟수:{과세,면세} | 면적:{과세,면세} | 신축건물(bool, 기본 False) — 둘 중 하나: 매입세액 또는 매입가액. 공통+신축건물+면적 있으면 예정사용면적비율 우선 적용
periodYes과세기간('1기'|'2기')
suppliesYes공급가액 {예정:{taxable,exempt}, 확정:{taxable,exempt}} — 부가세 제외 금액, 확정신고는 전체 비율 사용. 둘 다 null이면 error
new_businessNo신규 사업 여부(기본 False)
common_asset_salesNo공통사용재화 공급 목록 [{sale_price(공급가액), input_tax(그 재화의 매입세액 — ledger에 넣지 말고 여기만 입력, 신규 사업 아니면 직전 과세기간 비율로 안분 공제)}]
prior_nondeductibleNo예정신고 때 불공제한 공통매입세액. 없으면(null) 예정 기간 비율로 계산
prior_period_suppliesNo직전 과세기간 {taxable, exempt} — 공통사용재화 공급 과세표준용
prior_common_input_taxNoledger로 확정신고할 때 예정신고 기간의 공통매입세액

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false. The description adds useful behavioral context about the calculation process, ledger handling, prior-period inputs, and the result structure (판단·계산·결과·산식·근거), which goes beyond the annotations. It does not contradict them.

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

Conciseness4/5

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

The description is dense but well structured with purpose, timing, inputs, and results. It front-loads the key legal and operational context, though the input section partially repeats schema details and could be tighter.

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

Completeness5/5

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

For a complex 10-parameter tool with nested objects and no output schema, the description covers the purpose, usage context, required inputs, ledger semantics, prior-period dependencies, and expected result fields. An agent has enough context to invoke it correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds cross-parameter meaning, especially for ledger usage and the relationship between prior_common_input_tax, prior_nondeductible, and final return processing, which is valuable beyond the schema descriptions.

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

Purpose4/5

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

The description gives a specific verb and resource: it computes common input tax allocation/settlement and additional output tax for common-use goods under VAT Act Article 40 and related decree provisions. It is clear and detailed, but it does not explicitly distinguish itself from the sibling tool vat_common_input_allocation, so it falls short of a 5.

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

Usage Guidelines4/5

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

The '언제' section clearly states when to use the tool: for composite taxable/exempt businesses calculating common input tax deduction and additional output tax in preliminary/final VAT returns. It does not explicitly state when not to use it or name an alternative sibling, so it is not a 5.

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

corporate_deemed_rent_incomeA
Read-onlyIdempotent

법인 임대보증금 간주익금(조특법 제138조, 조특령 제132조). 언제: 법인이 부동산임대업에서 임대보증금을 받을 때 그중 일부를 간주익금으로 익금산입할지 계산한다. 입력: 사업연도(2016~2026) → year, 임대물건 목록 [{구분, 보증금, 건설비, 임대면적비율, 일수}] → rentals, 비주택 금융수익 합계(원) → financial_income, 정기예금이자율(소수·% 모두 허용, 생략 시 연도표) → rate, 차입금 과다 여부 → debt_over_2x, 부동산임대 주업 여부 → rental_main_business. 결과: 간주익금·보증금적수·건설비상당액적수·제외_주택보증금·세무조정, 판단(건물별 결론), 근거(조세특례제한법 제138조①·②, 시행령 제132조).

NameRequiredDescriptionDefault
rateNo정기예금이자율(소수 또는 '%' 표기 예 '5%', 1 초과면 ÷100, 생략 시 연도표)
yearYes사업연도·귀속연도(2016~2026)
rentalsYes[{구분:'주택'|'비주택', 보증금(원), 건설비(건물 취득·건설 누계, 원), 임대면적비율?(기본1=건물 전체, 소수), 일수?(기본 그 해 일수)}]
debt_over_2xNo차입금적수 > 자기자본적수×2 여부(기본 True)
financial_incomeNo비주택 임대사업 금융수익 합계(수입이자·할인료·배당금 등, 원)
rental_main_businessNo부동산임대업 주업 여부(기본 True)

TDQS

A4.7/5.0
Behavior5/5

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

The description goes far beyond the structured data by defining the calculation's legal basis (citing Articles) and detailing the expected outcome, which includes the full breakdown of judgments, inclusion amounts, and legal grounds. This adds critical context beyond the static annotations.

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

Conciseness4/5

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

The description is detailed and somewhat verbose, but its structure is logical (Legal basis -> Timing -> Inputs -> Results). Every complex piece of information is front-loaded or immediately explained, making the thoroughness worthwhile.

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

Completeness5/5

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

Given the high complexity and 100% schema coverage, the description is exceptionally complete. It covers the functional definition, the input requirements, the expected output structure, and the governing law.

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

Parameters5/5

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

Although the schema coverage is 100%, the description provides vital semantic context, such as clarifying that 'rate' can accept percentages or decimals, defining the currency (Won) for various financial inputs, and explaining the complex structure of the 'rentals' array.

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

Purpose5/5

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

The tool's purpose is stated explicitly as calculating corporate deemed rental income, referencing specific legal acts (Tax Special Cases Act, Article 138). It clearly defines the functional boundaries of the calculation.

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

Usage Guidelines4/5

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

The tool specifies the exact context for usage: when a corporation receives a deposit for real estate rental business. While it defines the 'when' well, it does not compare its specific calculation function against other related tax tools like `corporate_tax`.

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

corporate_taxA
Read-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).

NameRequiredDescriptionDefault
baseYes금액(원)
yearYes사업연도·귀속연도(2016~2026)
monthsNo사업연도 월수(1년 미만이면 1~11)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, 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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description 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.

Purpose5/5

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.

Usage Guidelines4/5

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_withholdingA
Read-onlyIdempotent

일용근로자 원천징수세액((일급 − 15만 원) × 6% × (1 − 55%), 1천 원 미만 소액부징수). 언제: 일용근로자에게 일급을 지급할 때 원천징수할 세액을 계산한다. 입력: 일급(원) → daily_wage, 지급연도(2016~2026) → year. 결과: 원천징수세액, 근거(소득세법 제134조③·제129조①4호·제86조). Withholding on daily workers' wages.

NameRequiredDescriptionDefault
yearNo지급연도(2016~2026)
daily_wageYes일급(원)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_resettlementA
Read-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.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
bonusYes소득처분 상여(원)
tax_baseYes당초 과세표준(원)
gross_payYes귀속연도 당초 총급여(원)
prev_decidedNo당초 결정세액(원). 모르면 생략
other_creditsNo근로소득세액공제 외 세액공제 합계(원)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description carries the return-value burden and 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.

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented in the schema, 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.

Purpose5/5

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.

Usage Guidelines4/5

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_bonus_sharesA
Read-onlyIdempotent

잉여금을 자본에 전입(무상증자)할 때 주주별 의제배당 금액. 언제: 법인이 잉여금을 자본에 전입해 무상주를 발행할 때 주주별 의제배당을 계산한다. 입력: year — 사업연도(2016~2026). source — 재원(어휘 '의제배당_잉여금자본전입.판단.재원별' 키): 주식발행초과금·자본준비금·재평가적립금(과세 제외), 이익잉여금·자기주식처분이익·상환주식_주식발행초과금·자기주식소각이익_2년내(과세 대상), 재평가적립금_토지1%(과세 대상·Gross-up 비대상), 자기주식소각이익(과세 제외). capitalized_amount — 자본전입액(원). par_value — 액면가(원/주). shareholders — [{name, shares, self_stock?:bool}]: 무상증자 직전 보유주식수, 발행법인 자기주식은 self_stock=true. self_stock_allotment — '다른주주에게교부' | '미교부': 자기주식 몫 무상주를 다른 주주에게 교부했는지. shareholder_type — '법인' | '개인': 근거 조문(법인세법 제16조 / 소득세법 제17조)이 다름. 결과: 주주별 {배정주식수, 전입전지분율, 전입후지분율, 의제배당, 과세여부, 근거}, 전입후총주식수, 재원구분, 과세대상합계, 산식. 재원 어휘에 없으면 'error' 반환(계산하지 않음). 재평가적립금을 일부만 전입하면 1% 토지분은 전입액 × (1% 토지 재평가차액 ÷ 재평가차액 전체)로 나눠 넣을 것(법인세법 시행령 제12조④, 소득세법 시행령 제27조⑤).

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
sourceYes재원 — 어휘 '의제배당_잉여금자본전입.판단.재원별' 키: 주식발행초과금·자본준비금·재평가적립금·자기주식처분이익·이익잉여금·재평가적립금_토지1%·상환주식_주식발행초과금·자기주식소각이익_2년내·자기주식소각이익
par_valueYes액면가(원/주), 신주 1주의 액면금액
shareholdersYes[{name, shares, self_stock?:bool}] — 무상증자 직전 보유주식수, 발행법인 자기주식은 self_stock=true
shareholder_typeYes주주 구분 — 법인세법 제16조(법인) / 소득세법 제17조(개인) 근거 조문이 다름
capitalized_amountYes금액(원)
self_stock_allotmentYes자기주식 몫의 무상주를 다른 주주에게 교부했는지

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, and the description adds meaningful operational detail beyond that. It discloses that an unrecognized source returns 'error' without calculation, lists result fields, and explains taxability by source and the proportional allocation rule for partial revaluation reserves.

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

Conciseness5/5

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

The description is front-loaded with purpose and structured into 'when', 'input', 'result', and error/special-rule sections. Although long, the length is justified by the complexity of the tax calculation and there is no apparent filler.

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

Completeness5/5

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

Given a seven-parameter tax calculation with no output schema, the description covers when to use it, each input's domain meaning, result fields, error behavior, and a critical partial-capitalization allocation rule. Nothing essential for correct invocation appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds tax-treatment meaning for source categories and legal-basis differences for shareholder_type. It also clarifies self_stock handling and lists the source vocabulary with taxable/non-taxable distinctions.

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

Purpose4/5

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

States a specific verb and resource: calculating per-shareholder deemed dividend when surplus is transferred to capital for a bonus issue. It is clear what the tool computes, but it does not explicitly name or distinguish sibling tools such as 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.

Usage Guidelines4/5

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

The '언제' section gives a clear triggering condition: when a corporation capitalizes surplus and issues bonus shares, calculate each shareholder's deemed dividend. It does not state when not to use the tool or name alternatives, so it falls short of full when/when-not 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_reductionA
Read-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'와 '필요 입력'을 돌려주고 계산하지 않음.

NameRequiredDescriptionDefault
eventYes사유 — 감자(유상감자)·주식소각은 일부 소멸 가능, 퇴사·탈퇴·해산은 보유 주식 전부 소멸
par_valueNo1주당 액면가액(원) — 무상주_과세가 있으면 필수(취득가액 = 액면가액)
acquisitionsYes주식 취득·처분 이력 [{date:'YYYY-MM-DD', shares, kind:'유상취득'|'무상주_과세'|'무상주_비과세'|'처분', unit_cost?(유상취득 1주당 취득가액), source?(무상주_비과세 재원: 주식발행초과금·자본준비금·재평가적립금)}] — 무상주 date는 자본전입 결의일
cash_receivedYes받은 금전(원)
property_valueNo받은 금전 외 재산의 가액(원) — 취득 당시 시가(주식이면 영 제14조①·소득세법 시행령 제27조① 평가액). 없으면 0
resolution_dateYes감자·소각 결의일(퇴사·탈퇴는 그 날, 해산은 잔여재산가액 확정일), YYYY-MM-DD. 단기소각 2년 기간의 기준
cancelled_sharesNo소멸(소각·감자)된 주식 수. 퇴사·탈퇴·해산은 생략하면 보유 주식 전부
shareholder_typeYes주주 구분 — 법인세법 제16조·영 제14조(법인) / 소득세법 제17조·영 제27조(개인)

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds 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.

Purpose5/5

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.

Usage Guidelines5/5

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_interestA
Read-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조).

NameRequiredDescriptionDefault
year_endYes사업연도 종료일(YYYY-MM-DD)
movementsYes가지급금 증감 목록 [{date:'YYYY-MM-DD', amount:원(대여 +, 회수 -)}]
market_rateNo시가 이자율(소수, 예: 0.046 = 4.6%). 가중평균차입이자율 원칙, 예외 시 당좌대출이자율 0.046
charged_rateNo실제 받은 이자율(소수, 예: 0.0 = 무수익)
fiscal_startNo사업연도 개시일(YYYY-MM-DD). 생략 시 year_end의 1년 전 다음 날
received_interestNo실제 받은 이자 금액(원, ge=0). 주면 charged_rate 계산 대신 이 금액을 수령이자로 사용

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

No output schema exists, and the description 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose4/5

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.

Usage Guidelines4/5

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_adjustmentA
Read-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와 필요 입력을 돌려주고 계산하지 않음.

NameRequiredDescriptionDefault
rateNo상각률을 직접 줄 때(소수, 예: 0.259). useful_life와 함께 주면 별표4와 같아야 함
yearYes사업연도·귀속연도(2016~2026)
fy_endNo사업연도 종료일(YYYY-MM-DD), 생략하면 year-12-31
methodYes신고한 상각방법. 신고하지 않았으면 '무신고'(asset_class로 법정 방법 결정)
fy_startNo사업연도 개시일(YYYY-MM-DD), 생략하면 year-01-01
tax_exemptNo당기 법인세를 면제·감면받았는지(영 제30조 감가상각의제)
asset_classNo자산 구분 — 무신고 법정 방법(영 제26조④)과 정률법 허용 여부 판단
useful_lifeNo신고내용연수(무신고면 기준내용연수, 2~60년) — 시행규칙 별표4 상각률을 고름
repair_totalNo이 자산의 당기 수선비 지출 총액(원, 자본적+수익적). 생략하면 expensed_capex
expensed_capexNo당기 수선비 등 비용으로 처리한 자본적 지출(원)
in_service_dateNo사업연도 중 취득해 사업에 사용한 날(YYYY-MM-DD) — 월할 상각
periodic_repairNo3년 미만 주기적 수선 지출 여부(영 제31조③3호)
acquisition_costYes기말 재무상태표상 취득가액(원, 자산으로 처리한 자본적 지출 포함)
prior_book_valueNo직전 사업연도말 재무상태표상 장부가액(취득가액 − 감가상각누계액, 원) — 수선비 5% 기준용
prior_disallowedNo전기말 상각부인누계액(유보 잔액, 원). 감가상각의제 △유보 잔액이면 음수
prior_deemed_capexNo전기 이전 즉시상각의제액 누계(원) — 정액법 취득가액에 가산
accumulated_dep_endNo기말 재무상태표상 감가상각누계액(원, 당기 감가상각비 포함)
booked_depreciationYes당기 손익계산서 감가상각비(회사계상, 원)
accumulated_dep_beginNo기초(전기말) 재무상태표상 감가상각누계액(원)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

There is no output schema, 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

disaster_loss_creditA
Read-onlyIdempotent

법인 재해손실세액공제. 언제: 재해로 자산을 상실한 법인의 법인세 세액공제를 계산할 때. 입력: 사업연도 → year, 자산(assets 또는 assets_before/assets_lost), 당기 법인세 → current_tax, 공제대상 법인세에서 차감할 세액 → other_credits 또는 credit_items, 미납 법인세 → unpaid_prior_tax, 가산세 → penalty 또는 penalty_items. 결과: 자산상실비율·공제대상 법인세·재해손실세액공제·판정·자산계산과정(assets 사용 시)·판단(credit_items·penalty_items 사용 시)·근거. 공제대상 법인세 = 미납 법인세 + max(당기 법인세 − 조세특례제한법 공제, 0) + 가산세(시행령 제95조③ 대상). 법인세법 공제(credit_items '법인세법')는 공제대상 법인세에서 빼지 않음. '기타' 가산세도 제외.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
assetsNo[{구분, 장부가액, 상실액}] — assets_before/assets_lost 대신 사용. 구분: '사업용'(토지 제외)|'토지'|'타인소유_변상책임있음'|'타인소유_변상책임없음'. 예: [{"구분":"사업용","장부가액":500000000,"상실액":140000000}, {"구분":"타인소유_변상책임있음","장부가액":100000000,"상실액":100000000}]
penaltyNo가산세(원, 기존 호환용 — penalty_items와 함께 입력 불가)
assets_lostNo상실 자산가액(토지 제외, 원) — assets 사용 시 생략
current_taxNo재해 발생 사업연도 법인세 산출세액(원, 공제·감면 전)
credit_itemsNo[{종류, 금액}] — 항목형 공제 입력. 종류: '조세특례제한법'(current_tax에서 차감)|'법인세법'(공제대상 법인세에서 빼지 않음). 예: [{"종류":"조세특례제한법","금액":30000000}]
assets_beforeNo재해 전 자산총액(토지 제외 사업용자산 + 변상책임 있는 타인 자산, 장부가액, 원) — assets 사용 시 생략
other_creditsNo공제대상 법인세에서 차감할 다른 감면·공제세액(원, 기존 호환용 — credit_items와 함께 입력 불가)
penalty_itemsNo[{근거, 금액}] — 항목형 가산세 입력. 근거: '법인세법 제75조의3'|'국세기본법 제47조의2'|'국세기본법 제47조의3'|'국세기본법 제47조의4'|'국세기본법 제47조의5'|'기타'(가산세 대상 아님). 예: [{"근거":"국세기본법 제47조의5","금액":6000000}]
unpaid_prior_taxNo재해일 현재 미납·미부과 법인세 본세(원) — 가산세는 넣지 말고 penalty_items로 따로(두 번 들어감)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description goes further by spelling out the computation rule for 공제대상 법인세 and two exclusion rules ('법인세법' credits are not deducted, '기타' penalties are excluded). That is genuine behavioral substance an agent cannot get from the schema. It does not discuss input validation failures or edge cases, 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.

Conciseness4/5

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

The 언제/입력/결과 sectioning is front-loaded and scannable, and the formula line is dense but earns its place by defining the core computed quantity. It is tightly written with no filler, though the compressed multi-line 입력 block takes effort to parse.

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

Completeness5/5

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

With ten parameters, no output schema, and no enums, the description carries real burden and meets it: it covers the trigger condition, all input groupings, the enumerated return fields (자산상실비율, 공제대상 법인세, 판정, 계산과정, 근거), the governing formula, and the two exclusion rules. An agent has what it needs to call this correctly without opening the schema.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all ten parameters thoroughly, which sets the baseline at 3. The 입력 section adds a useful business-concept-to-parameter mapping (사업연도→year, 당기 법인세→current_tax, 미납 법인세→unpaid_prior_tax) and signals the either/or shapes (assets vs assets_before/assets_lost, other_credits vs credit_items), which is marginal added value rather than new semantics.

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

Purpose4/5

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

The description opens with the exact Korean tax-credit name (법인 재해손실세액공제) and the 언제 line states the action: computing the corporate tax credit for a company that lost assets in a disaster. This is specific enough to distinguish it from generic siblings like corporate_tax or special_tax_credit, though it never names an alternative tool to avoid.

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

Usage Guidelines4/5

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

The 언제 section explicitly states the triggering condition (재해로 자산을 상실한 법인의 법인세 세액공제를 계산할 때), which is clear usage context. It gives no when-not cases or named alternative tools, 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.

dividend_received_deductionA
Read-onlyIdempotent

내국법인 수입배당금액 익금불산입(피출자법인별 익금불산입률·지급이자 차감·세무조정). 언제: 법인세 세무조정에서 수입배당금 익금을 부인할 때. 입력: 사업연도 → year, 피출자법인 목록 → investees, 지급이자 → interest_paid, 차감 이자 → interest_excluded, 자산총액 적수 → total_assets_jeoksu. 결과: 익금불산입액의 피출자법인별 내역·세무조정·근거. 수입배당금 익금불산입 계산.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
fy_endNo사업연도 종료일
fy_startNo사업연도 개시일
investeesYes[{name, listed?, ratio|shares|lots, dividend, book_value_jeoksu?, exclusion?}]
company_typeNo피지배기업 구분일반
interest_paidNo금액(원)
interest_excludedNo금액(원)
total_assets_jeoksuNo자산총계 적수(원·일)
holding_legacy_electionNo지주회사가 종전 제18조의3 비율 선택

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

dividend_tax_creditA
Read-onlyIdempotent

배당세액공제와 금융소득 종합과세 비교산출세액(소득세법 제56조·제62조·제15조2호). 언제: 금융소득이 2천만원을 넘어 종합과세될 때 일반산출세액(제62조1호)·비교산출세액(제62조2호)·종합소득 산출세액·배당세액공제액(Gross-up과 한도 중 적은 금액)을 구할 때. 입력: 귀속연도(20162026) → year, 금융소득 항목(financial_income_aggregate 형식) → items 또는 그 결과 숫자(grossup, financial_14, financial_25, partner_dividend), 금융소득을 뺀 종합소득 과세표준 → other_base(또는 과세표준 전체 → taxable_base). 결과: 일반산출세액(1호: (이자소득등 − 2천만 + 다른 과세표준) × 기본세율 + 2천만 × 14%), 비교산출세액(2호: 이자소득등(Gross-up 제외) × 원천징수세율 + 다른 과세표준 × 기본세율, 출자공동사업자배당 비교세액 포함), 종합소득 산출세액(큰 금액), 배당세액공제 한도(산출세액 − 비교산출세액), 배당세액공제액 = min(Gross-up, 한도), 공제 후 세액. 연도: 20162026. Gross-up 가산율 11%(20162023)·10%(2024). 원천징수되지 않은 비영업대금 이익은 2016년 14%, 2017년부터 25%(제62조2호 가목, 법률 제14389호 부칙 제2조①). 지원하지 않음(입력 확인 필요로 멈춤): 종합소득공제가 금융소득 외 소득보다 커서 다른 과세표준이 음수(또는 출자공동사업자배당보다 작음)인 경우, 조세특례제한법 제104조의27 배당(2016~2018), 2025년 이후 Gross-up 제외 사유 개정분 판정(Gross-up은 financial_income_aggregate 판정 그대로), 외국납부세액공제 등 다른 세액공제·감면(제15조2호 — 이 도구 결과 뒤에 적용), 비거주자.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
itemsNo금융소득 항목 — financial_income_aggregate의 items와 같은 형식 [{kind, amount, withheld?, ...}]. 비영업대금이익·소비대차전환이자는 온라인투자연계금융업자 경유면 p2p=true. items를 주면 아래 숫자 입력(grossup·financial_14·financial_25·partner_dividend)은 비움
grossupNo숫자 입력: Gross-up 금액(원, financial_income_aggregate 결과 'Gross-up')
other_baseNo이자소득등(금융소득, Gross-up 포함)을 뺀 나머지 종합소득 과세표준(원) — 출자공동사업자배당은 여기에 포함. taxable_base와 둘 중 하나만
financial_14No숫자 입력: 종합과세되는 이자소득등 중 14% 적용분(원, Gross-up 제외, 출자공동사업자배당 제외)
financial_25No숫자 입력: 종합과세되는 이자소득등 중 25% 적용분(원, 비영업대금의 이익)
taxable_baseNo종합소득 과세표준 전체(원, 금융소득·Gross-up 포함). other_base 대신 줄 때만
partner_dividendNo숫자 입력: 출자공동사업자 배당소득금액(원, other_base 안에 들어 있는 금액)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare this a read-only, idempotent, closed-world calculation, so the description focuses on computation behavior: year-dependent gross-up rates (11% through 2023, 10% from 2024), the non-business interest rate shift from 14% to 25% in 2017, and a precise list of unsupported scenarios that cause an input-check halt. That is exactly the kind of context annotations cannot carry.

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

Conciseness4/5

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

The four-part structure (언제/입력/결과/연도) is well front-loaded and scannable. It is dense, and the inline formulas in the 결과 section are long, but they carry genuine information for a tool with no output schema.

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

Completeness5/5

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

There is no output schema, and the description compensates fully by enumerating each returned figure (일반산출세액, 비교산출세액, 종합소득 산출세액, 배당세액공제 한도, 배당세액공제액, 공제 후 세액) with its formula. Year bounds, rate transitions, and out-of-scope cases are all covered.

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

Parameters4/5

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

Schema coverage is 100%, so the parameter definitions already stand on their own; the description adds the interaction rules — that supplying 'items' means leaving grossup/financial_14/financial_25/partner_dividend empty, and that other_base and taxable_base are mutually exclusive alternatives. It stops short of restating every field, which is appropriate given the schema.

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

Purpose5/5

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

The description names the specific computation (배당세액공제와 금융소득 종합과세 비교산출세액) and cites the governing articles (소득세법 제56조·제62조·제15조2호), so an agent knows exactly which tax calculation this performs. It is clearly distinguishable from siblings such as financial_income_aggregate (which supplies inputs) 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.

Usage Guidelines5/5

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

An explicit '언제' section states the triggering condition (금융소득 > 2천만원, comprehensive taxation) and names the outputs to obtain. A dedicated '지원하지 않음' section lists the cases where the tool must stop and ask for input, which is unusually clear routing guidance.

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

dominant_shareholderA

수혜법인의 지배주주 판정(상증법 시행령 제34조의3①). 언제: 일감몰아주기 증여의제이익 계산에서 수혜법인의 지배주주가 누구인지 판정할 때. 입력: 수혜법인(이름) → corp, people={이름: {구분: "개인"|"법인"}} → people, family=[[a, b, "부모자녀"|"배우자"]] → family, stakes=[[보유자, 법인, 지분율(0~1)]] → stakes(related_judge와 동일 형식). 결과: 지배주주(이름)·판정 이유. 수혜법인의 지배주주를 판정한다Amid(중견기업 중 직접보유 최고자 / 법인이면 직접+간접 최고 개인).

NameRequiredDescriptionDefault
corpYes수혜법인(이름)
familyYes친족 관계 [[a, b, "부모자녀"|"배우자"]]. 예: [["김갑", "김을", "부모자녀"]]
peopleYes사람·법인 목록 {이름: {"구분": "개인"|"법인"}}. 예: {"김갑": {"구분": "개인"}}
stakesYes직접보유비율 [[보유자, 법인, 지분율(0~1)]]. 예: [["김갑", "㈜대한", 0.30]]

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations present, the description carries the full burden. It discloses the determination rule (Amid: among medium-sized enterprises, the highest direct holder, or for a corporate holder the highest individual by direct+indirect ownership) and the result shape (dominant shareholder name + reasoning), which is substantive behavioral context. It does not state side-effect/reversibility behavior, but this is a computation, not a mutation.

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

Conciseness3/5

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

The 언제/입력/결과 labeling is well front-loaded and scannable. However the trailing fragment '수혜법인의 지배주주를 판정한다Amid(...)' reads as corrupted or duplicated text that repeats the purpose and muddles the close, costing clarity.

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

Completeness4/5

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

For a 4-required-parameter tool with nested objects and no output schema, the description covers the trigger, every input's mapping, and the return content (name and reasoning), which is enough to invoke it correctly. Minor gaps remain around edge-case behavior but nothing critical is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, and the description builds on it by mapping each argument in '입력' and noting that stakes uses the same format as related_judge — a cross-tool hint the schema does not contain. It adds meaningful orientation rather than restating field types.

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

Purpose5/5

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

States a specific verb and resource (수혜법인의 지배주주 판정) and anchors it with a legal citation (상증법 시행령 제34조의3①). It also distinguishes itself from siblings by pointing to related_judge as the reference for the shared input format, so an agent can place it precisely in the tunneling workflow.

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

Usage Guidelines4/5

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

The '언제' block gives an explicit trigger condition: use when determining the dominant shareholder of the beneficiary corporation inside the 일감몰아주기 deemed-gift computation. That is a clear context, but no when-not guidance or explicit alternative (e.g. when to prefer related_judge or kinship_check instead) is offered.

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

donation_limitA
Read-onlyIdempotent

기부금 손금산입 한도(특례기부금 50%, 일반기부금 10%)와 한도초과·이월. 언제: 기부금을 손금산입할 때 한도와 한도초과액을 구한다. 입력: 기준소득(과세표준 계산 전 소득금액, 원) → base_income, 특례기부금 지출액(원) → special, 일반기부금 지출액(원) → general, 결손금(원) → carried_loss, 특례 이월액(원) → special_carry, 일반 이월액(원) → general_carry, 중소기업 여부 → sme, 사회적기업 여부 → social_enterprise, 사업연도(2016~2026) → year. 결과: 한도·한도초과·이월 손금산입, 근거(법인세법 제24조).

NameRequiredDescriptionDefault
smeNo중소기업 여부
yearYes사업연도·귀속연도(2016~2026)
generalNo금액(원)
specialNo금액(원)
base_incomeYes금액(원)
carried_lossNo금액(원)
general_carryNo금액(원)
special_carryNo금액(원)
social_enterpriseNo사회적기업 여부(일반한도 20% 적용)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description carries the return-value burden and 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_payA
Read-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(과세기간 개시일 현재 만 나이, 6세 이하) / 출산: 2024~ within_2y_of_birth·payment_count·related_party, 그 전 months). 보육 한도: 20162023 월 10만원(출산 포함), 20242025 월 20만원(근로자 1인당), 2026~ 자녀 1명당 월 20만원 — 2026는 child_ages(자녀별 개시일 나이 목록) 또는 child_count, 또는 자녀별 항목으로 나누고 facts.child(자녀 이름)를 다르게 · 직무발명보상금 — retired(퇴직 후면 기타소득), 2024 related_party · 연장근로수당 — eligible_occupation, 해당 시 prior_year_gross(필수)·monthly_regular_wage(광산·일용은 mine_or_daily). monthly_regular_wage가 없으면 같은 호출 항목으로 영 제17조① 월정액급여를 산정(연간 합계 ÷ months, 기본 12) — 지급 형태가 이름만으로 정해지지 않는 항목(직무발명보상금·학자금·출산 급여 등)은 facts.regular_monthly(매월 정기 지급 여부) · 사택제공이익 — position / 주택자금대여이익 — sme(2024~ related_party) · 학자금 — beneficiary(본인|가족), 본인이면 requirements_met / 실비변상여비 — actual_cost · 단체보험료(연 한도) / 사회보험료_본인부담분_회사대납(과세) / 사회보험료_사용자부담분 — insurance 결과: 항목별(과세액·비과세액·근거·사유)·제외 항목(다른 해·다른 소득)·총급여액·비과세 합계·근로소득공제·근로소득금액.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
itemsYes근로소득 항목 [{kind, amount, facts}] — kind: 급여·상여·잉여금처분상여·인정상여·식사대·자가운전보조금·출산·보육수당·직무발명보상금·연장근로수당·사택제공이익·주택자금대여이익·단체보험료·학자금·실비변상여비·사회보험료_본인부담분_회사대납·사회보험료_사용자부담분. facts는 종류별 사실관계 dict(빠지면 필요한 입력을 돌려줌)

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint/ idempotentHint/ destructiveHint=false/ openWorldHint=false, so safety needs no disclosure; the description adds valuable context that results are itemized with grounds and reasons and that excluded items (different year, different income type) are surfaced. With annotations covering safety, this context is useful but not rich: it does not state what happens when facts are incomplete (that is in the items schema), whether year limits are enforced, or any error behavior.

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

Conciseness4/5

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

The description is long but organized into purpose, when-to-use, input, and output blocks, with the key computation and citations front-loaded. The item-rule list, especially the year-by-year childcare limits, is dense; it earns most of its length but would read better as structured tables than as inline prose.

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

Completeness5/5

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

With no output schema, the description supplies the return shape (per-item taxable/non-taxable amounts, grounds, reasons; excluded items; gross pay; non-taxable total; deduction; earned income), the input contract, and the legal basis for a complex multi-kind computation. Nothing an agent needs to make a correct call is missing.

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

Parameters4/5

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

The schema has 100% description coverage and only 2 top-level params, but the nested items array is typed as an empty object, so the description carries the real burden of explaining kind values, required facts per kind, per-year non-taxable limits, and fallback computations such as deriving monthly regular wage. It adds major meaning over the schema; keeping it from 5 is that the rule block is dense and leaves some kinds' fact requirements implicit.

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

Purpose4/5

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

The description gives a specific verb+resource: it judges taxable/non-taxable status per earned-income item, verifies the attribution year, and computes gross pay, the earned-income deduction, and earned income, citing specific statutory articles. It does not name any sibling tool as an alternative or contrast (e.g., wage_income_tax, other_income_aggregate), so the 5 criterion of sibling differentiation is only met implicitly through a narrow payroll-specific scope.

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

Usage Guidelines4/5

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

The '언제' line explicitly says when to use it: when obtaining gross pay and earned income from salary, bonus, allowance, and benefit data in year-end settlement or comprehensive income tax filing. This is clear use context, but there is no explicit when-not guidance and no named alternative tool to route away from.

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

entertainment_adjustmentA
Read-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조①) · 전통시장 → 포함(「전통시장 및 상점가 육성을 위한 특별법」상 전통시장에서 쓴 적격 기업업무추진비, 조특법 제136조⑥, 전통시장등 추가한도 대상) · 지역사랑상품권 → 포함(지역사랑상품권으로 지급한 적격 기업업무추진비, 조특법 제136조⑥, 2025 사업연도부터 전통시장등 추가한도 대상) · 온누리상품권 → 포함(온누리상품권으로 지급한 적격 기업업무추진비, 조특법 제136조⑥, 2026 사업연도 지출분부터 전통시장등 추가한도 대상) 결과: 판단(항목별·근거)·결과(한도·한도초과)·세무조정(구분·금액·소득처분)·소득처분별_합계·손금불산입_합계·계산. 기업업무추진비 세액공제.

NameRequiredDescriptionDefault
smeYes중소기업 여부
yearYes사업연도·귀속연도(2016~2026)
ledgerYes원장형 입력 [{항목, 금액, 증빙:'없음'|'영수증 등'|'적격'(기본 '적격'), 성격?:'교제목적'|'직원단체_법인'|'직원단체_비법인'|'임직원부담'|'현물'|'경조금'|'문화'|'사적사용', 시가?, 장부가액?, 건당기준초과?}] — 성격별 포함·제외는 어휘 기업업무추진비_포함항목으로 판단. '사적사용'은 시부인 대상 제외, 직접 손금불산입(상여
monthsNo사업연도 월수(1~12)
revenueNo수입금액 원장형 입력 {매출액, 특수관계매출?(기본 0), 매출할인등:{일반?, 특수관계?}(기본 0)} — 기업회계기준 매출액 기준(영 제42조①). 없으면 수입금액 0
부가세별도No현물 접대비 평가 시 부가가치세 포함 여부(기본 True — 사업상 증여는 매출세액 포함, 영 제42조⑥·법 제36조①3호 준용)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description goes beyond them by naming the produced artifacts (판단·결과·세무조정·소득처분·계산·세액공제), which substitutes for the absent output schema. It also discloses the substantive rule mapping for each 성격 and 증빙 value, though it does not state defaults for omitted optional fields beyond those the schema already lists.

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

Conciseness4/5

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

Front-loaded with the purpose and a labeled '언제'/'입력'/'결과' structure that makes scanning easy. It is long and partly repeats the schema's ledger enum listing, which is the only real waste.

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

Completeness5/5

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

Six parameters, three required, no output schema, and a dense domain; the description compensates by documenting the result structure and the classification logic, and it notes that revenue is based on 기업회계기준 매출액 (영 제42조①). An agent has enough to call it correctly without further context.

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

Parameters5/5

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

Schema coverage is 100%, so a 3 would be the floor, but the description adds real meaning: it explains what each 증빙 value implies for the tax outcome (손금불산입, 기타사외유출, 한도 시부인) and gives the 포함/제외 rule for every 성격 value with the governing article. That is interpretation an agent could not derive from the raw enum list.

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

Purpose4/5

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

States a specific verb and resource: computes the corporate business-entertainment expense (기업업무추진비) tax adjustment item by item, with the legal basis and the naming history from 접대비. It is clear on its own, but never distinguishes itself from the sibling entertainment_limit, which plausibly also computes a 한도, so an agent cannot route between them from the text alone.

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

Usage Guidelines4/5

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

"언제: 법인세 신고에서 기업업무추진비 손금불산입을 항목별로 계산할 때" gives a clear triggering context, and the claim that 접대비-related book problems also go through this tool narrows the scope. It stops short of naming alternatives such as entertainment_limit or missing_receipt_disallowance, so there is no explicit when-not guidance.

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

entertainment_limitA
Read-onlyIdempotent

기업업무추진비(접대비) 한도와 한도초과액. 언제: 법인세 세무조정에서 기업업무추진비 손금불산입액을 구할 때. 입력: 수입금액(일반, 중단사업부문 매출 포함 기업회계 매출액) → general_revenue, 특수관계인 수입 → related_revenue, 중소기업 여부 → sme, 지출액(접대비) → expensed, 문화비 → culture, 전통시장 지출 → market(2023~), 사업연도 월수 → months. 결과: 한도·한도초과액(손금불산입)·근거(법인세법 제25조, 시행령 제42조). 기업업무추진비 한도와 한도초과액 계산; 접대비가 한도를 넘는가 확인할 때 쓴다.

NameRequiredDescriptionDefault
smeYes중소기업 여부
yearYes사업연도·귀속연도(2016~2026)
marketNo전통시장(및 조특법 제136조⑥의 대상)에서 지출한 기업업무추진비(원, 2023 사업연도부터) — 일반한도의 일정 비율 안에서 추가한도
monthsNo사업연도 월수(1~12)
cultureNo금액(원)
expensedYes금액(원)
general_revenueYes금액(원)
related_revenueNo금액(원)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds value beyond that by stating the output contents (한도·한도초과액·근거) and the legal basis, which the annotations do not provide.

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

Conciseness4/5

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

The 언제/입력/결과 structure front-loads purpose and scans well. It is slightly redundant, restating the purpose in the final sentence after the structured block already conveyed it, but nothing is incomprehensible.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing the return value, and it does (한도, 한도초과액, 근거). Inputs are all mapped, so an agent can call the tool correctly; only the sibling-disambiguation and the year-vs-period rule interaction remain thin.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds genuine semantic meaning: it clarifies that general_revenue is corporate-book revenue including discontinued operations, that related_revenue is revenue from related parties, that market applies from 2023, and that culture is 문화비 (the schema only says '금액(원)'). This compensates for the terse schema texts on culture/expensed.

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

Purpose4/5

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

The description names a specific computation (기업업무추진비 한도와 한도초과액) plus the tax context (법인세 세무조정, 손금불산입액) and cites the governing statute. It is unambiguous what the tool returns, though it never differentiates itself from the very similarly named sibling entertainment_adjustment.

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

Usage Guidelines4/5

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

The '언제' clause gives a clear triggering condition (when computing the non-deductible entertainment expense in a corporate tax adjustment) and the closing line repeats the check-'over-limit' use case. There are no exclusions and no reference to alternatives, and the presence of entertainment_adjustment as a sibling makes that omission a real ambiguity.

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

estimated_business_incomeA
Read-onlyIdempotent

추계 사업소득금액(소득령 제143조, 제208조⑤). 언제: 장부가 없거나 불충분한 사업자의 사업소득금액을 추계로 계산할 때. 입력: 귀속연도(2016~2026) → year, 업종군(가·나·다) → industry_group, 직전연도 수입금액(원) → prior_year_revenue, 수입금액 목록 [{구분, 금액}] → revenues, 증빙 입증 지출 목록 [{구분, 금액}] → expenses, 기준경비율 → base_rate, 단순경비율 → simple_rate, 신규 사업 여부 → new_business, 배율(소수·% 허용, 생략 시 귀속연도 기본) → multiplier. 연도: 단순경비율 대상의 '해당 과세기간 수입금액' 요건은 2019년 귀속부터(영 제143조④, 2018.2.13. 개정), 2018년까지는 신규사업자에만 적용. 복식부기의무자의 사업용 유형자산 처분액 수입금액 산입은 2018년 귀속부터(법 제19조①20호, 2017.12.19. 신설). 배율(규칙 제67조): 2020.3.12.까지 간편 2.6·복식 3.2, 2020.3.13.부터 간편 2.8·복식 3.4 — 2019년 귀속은 multiplier 직접 입력. 결과: 사업소득금액·계산(수입금액·장부구분·적용방법·주요경비·기준경비율_소득·한도), 판단(수입금액 구성·제외·적용방법 사유·주요경비 제외), 근거(소득세법 시행령 제143조·제208조⑤).

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
expensesYes[{구분:'매입'|'임차료'|'인건비'|'기타'|'자산취득', 금액(원)}] — 증빙 입증 지출
revenuesYes[{구분:'매출'|'보조금'|'유형자산처분'|'기타', 금액(원)}]
base_rateYes기준경비율(소수 또는 '%' 표기 예 '20%')
multiplierNo배율(예 2.8 또는 '280%'). 생략 시 귀속연도 기준 — 2016~2018년 간편 2.6·복식 3.2, 2020년~ 간편 2.8·복식 3.4. 2019년 귀속은 결정 시점에 따라 달라 직접 입력 필요
simple_rateYes단순경비율(소수 또는 '%' 표기 예 '60%')
new_businessNo신규 사업 여부(기본 False)
industry_groupYes업종군: '가'=농업·도소매·부동산매매 등, '나'=제조·숙박음식·건설 등, '다'=부동산임대·서비스 등
prior_year_revenueYes직전연도 수입금액(원)

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the read-only/idempotent safety profile; the description goes well beyond with version-dependent behavior — the 2019 year rule for the simple expense-rate revenue test, the 2018 inclusion of asset-disposal gains for double-entry taxpayers, and the multiplier schedule change on 2020.3.13. It also flags that 2019 requires an explicit multiplier rather than a default, which is a real invocation hazard.

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

Conciseness3/5

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

Sectioning (언제/입력/연도/배율/결과) is front-loaded and easy to scan, but the 입력 block largely duplicates the already-complete schema descriptions, and the 연도 paragraph is dense. A meaningful fraction of the text does not add information beyond the structured fields.

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

Completeness5/5

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

With 9 parameters, no output schema, and year-sensitive rules, this tool needs return-value disclosure — and the 결과 section enumerates the income amount, the calculation components (수입금액, 장부구분, 적용방법, 주요경비, 한도), the judgment reasons, and cited provisions. Nothing material to a correct call is missing.

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

Parameters4/5

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

Schema coverage is already 100%, so 3 is the floor; the description adds value by mapping each Korean input label to its argument name (귀속연도→year, 업종군→industry_group, etc.) and by restating the multiplier default logic in a narrative form. It stops short of adding constraints the schema lacks.

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

Purpose5/5

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

Names a specific computation (추계 사업소득금액) and anchors it to the statutory provisions (소득령 제143조, 제208조⑤), which no sibling tool covers. An agent can identify this as the estimated-income computation for taxpayers without adequate books, distinct from other_income_aggregate or pension_income.

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

Usage Guidelines4/5

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

The '언제' clause states the trigger condition precisely: when a business owner lacks books or they are insufficient, compute business income by estimation. No sibling alternative or when-not-to-use case is named, so it falls short of a full routing statement.

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

export_workbookA
Read-onlyIdempotent

계산 도구 결과를 엑셀(.xlsx)로 정리한다. 각 call은 서버가 직접 다시 실행하며, 결과·계산·세무조정·판단·산식을 탭으로 펼친다. 언제: 계산 결과(세무조정·소득처분·판단·산식)를 실무자가 검토할 수 있는 엑셀 파일로 남길 때. 입력: title — 문서 제목(파일명 기본값). calls — [{label, tool, args}] 목록(1~30개). tool 이름이 없거나 'export_workbook'이면 오류(재귀 금지). output_dir — 저장할 폴더(기본: '.'). 없으면 오류. filename — 파일명(기본: title, .xlsx 자동). '/ \ : * ? " < > |'는 '_'로 대체. layout — 'forms'(기본: 서식 틀 시트 + 계산 N + 입력·가정 + 판단·근거) 또는 'steps'(요약 + 계산 N + 입력·가정 + 판단·근거). company — 법인명(서식 머리에 표시, 기본 ''). period — 사업연도 표기(예 '2025.01.01 ~ 2025.12.31', 기본 ''). biz_no — 사업자등록번호(서식 머리에 표시, 기본 '').

결과: 결과.파일 — 절대경로. 결과.시트 — 시트 이름 목록. 결과.call_수 — calls 길이. 결과.오류_call — 오류 발생한 call의 label 목록. 근거 — '계산 도구 결과 정리(세무 자문 아님)'.

NameRequiredDescriptionDefault
callsYes[{label, tool, args}] 1~30개 — JSON 문자열로 줘도 됨
titleYes문서 제목 — 파일명 기본값
biz_noNo사업자등록번호(서식 머리에 표시, 기본 빈 문자열)
layoutNo'forms'(법정서식 틀 + 계산·입력가정·판단근거, 기본) 또는 'steps'(요약 + 계산 N)forms
periodNo사업연도 표기(예 '2025.01.01 ~ 2025.12.31', 기본 빈 문자열)
companyNo법인명(서식 머리에 표시, 기본 빈 문자열)
filenameNo파일명 기본값(제목), 확장자 .xlsx 자동)
output_dirNo내보낼 폴더 경로(기본: 현재 작업 폴더).

TDQS

A4/5.0
Behavior1/5

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

The description says the tool creates and saves an .xlsx file, including 'output_dir — 저장할 폴더' and '결과.파일 — 절대경로', which is a filesystem write side effect. The annotations declare readOnlyHint=true, so the description contradicts the annotation's read-only claim; this is an annotation contradiction.

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

Conciseness5/5

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

The description is long but appropriately structured for a complex export tool: purpose first, then when to use it, inputs, results, and basis. The sections are front-loaded and each part maps to a real need, especially since there is no output schema.

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

Completeness5/5

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

The description is complete for a complex export tool with no output schema: it explains re-execution behavior, tab expansion, all parameters, error conditions, file naming, and the exact result fields returned. Nothing an agent needs in order 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.

Parameters5/5

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

Although schema coverage is already 100%, the description adds meaningful semantics beyond the schema: calls must be 1-30, tool names cannot be missing or 'export_workbook' because recursion is forbidden, output_dir must exist, filename characters are sanitized, and layout choices are explained. These are operational constraints an agent needs in order to call the tool correctly.

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

Purpose5/5

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

The description states a specific verb and resource: it exports calculation-tool results into an Excel .xlsx workbook. It also explains the distinctive mechanism, namely that each call is re-executed server-side and expanded into tabs, which clearly separates it from the sibling calculation tools.

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

Usage Guidelines4/5

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

The '언제' section gives a clear usage context: when the practitioner needs calculation results such as tax adjustments, income dispositions, judgments, and formulas saved as an Excel file for review. It also states a key exclusion, no recursive export_workbook calls, but it does not explicitly compare itself with sibling tools or say when not to export.

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에서 관계표를 뽑는다.

NameRequiredDescriptionDefault
pdf_pathYesPDF 파일 경로

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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

No output schema exists, and the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_aggregateA
Read-onlyIdempotent

종합소득 합산 금융소득(이자·배당)과 Gross-up 계산(소득세법 제14조·제16조·제17조·제56조). 언제: 종합소득세 신고에서 금융소득 종합과세 대상 여부와 배당가산(Gross-up)액을 계산할 때. 입력: 귀속연도(2016~2026) → year, 금융소득 항목 목록 [{kind, amount, ...}] → items. kind 허용값(어휘 기반, 별칭 포함): · 예금이자 — 예금·적금·부금의 이자 · 비영업대금이익 — 사업이 아닌 금전 대여에서 받는 이자 · 소비대차전환이자 — 외상매출금 등 거래 대금이 소비대차로 바뀐 뒤 그 원금에서 생긴 이자 · 외상매출금지급기일연장이자 — 물품·용역 대금의 지급기일을 연장해 주고 추가로 받는 금액(사업소득) · 저축성보험차익 — 보험 만기·해지 시 받는 보험금에서 납입보험료를 뺀 차익 · 투자신탁환매이익 — 집합투자기구(투자신탁 등)로부터 받는 이익 · 파생결합사채이익 — 상법상 파생결합사채(ELB 등)에서 받는 이익 · 장내파생상품이익 — KOSPI200 선물·옵션 등 장내파생상품 거래 이익(양도소득) · 상장법인현금배당 — 상장 내국법인에서 받는 이익배당(Gross-up 대상) · 비상장법인현금배당 — 비상장 내국법인에서 받는 이익배당(Gross-up 대상) · 의제배당_잉여금자본전입 — 잉여금 자본전입 무상주(재평가적립금 일부 전입 시 1% 토지분 안분, 법인세법 시행령 제12조④, 소득세법 시행령 제27조⑤) · 인정배당 — 법인세법에 따라 배당으로 소득처분된 금액(Gross-up 대상) · 출자공동사업자배당 — 출자공동사업자 배당(무조건 종합과세, 2천만원 판정 제외, Gross-up 비대상, 원천 25%) · 외국법인배당 — 외국법인으로부터 받는 배당(조건부 종합과세, Gross-up 비대상) · 환매조건부매매차익 — RP(환매조건부매매) 차익(이자소득, 조건부 종합과세) · 법원보증금이자 — 법원 보증금·경락대금 이자(14% 분리과세 제129조②1호, 합계·합산액 제외) · 직장공제회초과반환금 — 분리과세, 합계 제외, 연분연승 제63조(납입연수 contribution_years) · 손해배상법정이자 — 계약 위약·해약에 따른 손해배상금의 법정이자(이자소득 아님, 기타소득 소득세법 제21조①10호, 금융소득 합계 제외) · 공익신탁이익 — 공익신탁 이익(비과세 제12조1호, 합계 제외) · 통합발행채권할인액 — 공개시장 통합발행 채권의 매각·액면 차액(이자 아님, 영 제22조의2②, 합계 제외) 결과: 판단(항목별 이자/배당/제외·Gross-up 대상 여부)·결과(이자소득금액·배당소득금액·합산액)·계산(중간값). 금융소득 종합과세·배당가산.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
itemsYes금융소득 항목 [{kind, amount, withheld?, ...}]. kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당·출자공동사업자배당·외국법인배당·환매조건부매매차익·법원보증금이자·직장공제회초과반환금·통합발행채권할인액·손해배상법정이자·공익신탁이익. withheld=false: 국내에서 원천징수되지 않은 이자·배당(개인 간 대여 이자, 국외 배당)은 2천만원 이하여도 종합과세(제14조③6호), 기본 true. 의제배당_잉여금자본전입은 source 필수 — 이익잉여금·자기주식처분이익·상환주식_주식발행초과금·자기주식소각이익_2년내(과세) / 주식발행초과금·자본준비금·재평가적립금·합병차익·분할차익·주식의포괄적교환차익·주식의포괄적이전차익·자기주식소각이익(과세 제외) / 재평가적립금_토지1%. 투자신탁환매이익은 components 필수 — [{asset, gain}] 목록, asset이 '상장주식'인 손익만 빼고 나머지(채권·비상장주식·배당·이자 등 아무 이름)는 합산, 손실은 음수. 예: {kind:'투자신탁환매이익', amount:18000000, components:[{asset:'상장주식', gain:3000000}, {asset:'배당', gain:15000000}]}. 직장공제회초과반환금은 contribution_years(납입연수)를 주면 연분연승 세액까지

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world behavior, so safety is covered. The description adds substantive behavioral context by explaining the calculation scope, item classification rules, and that results include judgments, amounts, and intermediate calculations.

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

Conciseness4/5

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

The description is long but well structured with explicit '언제', '입력', and '결과' sections and a bulleted kind vocabulary. Some of the kind list overlaps with schema content, but the added definitions justify most of the length.

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

Completeness5/5

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

For a complex calculation tool with no output schema, the description covers the required inputs, the full kind vocabulary, special fields, and the shape of the returned result at a high level. Given the rich annotations and full schema coverage, this is complete enough for an agent to invoke and interpret the tool.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds real semantic meaning beyond the schema by defining each allowed kind, including tax treatment such as Gross-up eligibility, comprehensive taxation treatment, and exclusion from the financial income total. It also maps year and items to their business meaning.

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

Purpose5/5

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

The description states a specific verb and resource: it aggregates comprehensive income financial income (interest and dividends) and performs Gross-up calculations under cited tax law articles. It is distinguishable from generic income-tax tools because it explicitly scopes the operation to financial income aggregation and dividend gross-up.

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

Usage Guidelines4/5

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

It gives an explicit '언제' section: use when determining whether financial income is subject to comprehensive taxation in a comprehensive income tax return and when calculating dividend gross-up. It does not name alternative sibling tools or when-not conditions, so it is strong but not complete routing guidance.

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

find_toolA
Read-onlyIdempotent

맞는 계산 도구 찾기 — 도구가 70개가 넘으니, 어떤 도구를 쓸지 모르겠으면 먼저 이걸 부른다. 언제: 계산 문제를 받았는데 맞는 도구 이름이 바로 떠오르지 않을 때, 또는 '이 계산 도구는 없다'고 판단하기 전에 반드시. 입력: 찾는 계산 → query(평소 말, 세목·쟁점·조문 무엇이든), 개수 → n. 결과: 후보 도구 목록(이름·한 줄 설명·언제 쓰는지·일치 이유). 후보가 없으면 계산 도구가 없는 것이니 korean-tax-mcp로 조문을 찾는다.

NameRequiredDescriptionDefault
nNo돌려줄 도구 수(1~10)
queryNo찾는 계산을 평소 말로. 예: '아파트 팔았을 때 양도세', '보험차익으로 산 기계', '접대비 한도', '해산한 법인 청산소득'
keywordNoquery와 같음(korean-tax-mcp find_article과 같은 이름으로 불러도 되게)

TDQS

A4.4/5.0
Behavior4/5

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 what annotations can't, namely the shape of the return (candidate list with name, one-line description, when-to-use, and match reason) and the no-result behavior. It doesn't discuss ranking or qualities of matches beyond '일치 이유', a minor gap for a search tool.

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

Conciseness4/5

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

Front-loaded purpose sentence, then clearly labeled 언제/입력/결과 blocks, so an agent can scan it in one pass. Minor redundancy with the schema (e.g. restating that n is a count) keeps it just below top marks.

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

Completeness5/5

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

With no output schema, the description fully carries the return-value burden: it describes the candidate list fields and the empty-result branch with a concrete next step. Nothing an agent needs in order to call this correctly or interpret its output is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters, including the keyword alias for korean-tax-mcp find_article compatibility. The description only adds that query may be phrased in everyday language and can be a 세목/쟁점/조문, which is a modest value-add above the baseline.

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

Purpose5/5

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

Opens with a specific verb+resource ('맞는 계산 도구 찾기') and immediately scopes it against the 70+ sibling tools, which makes clear this is the discovery/router tool rather than a calculation tool. It also names a distinct fallback path (korean-tax-mcp for 조문) so an agent can tell it apart from every sibling at a glance.

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

Usage Guidelines5/5

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

The '언제' section states explicit trigger conditions: when the right tool name doesn't come to mind, and mandatorily before concluding 'this calculation tool doesn't exist.' It also gives the post-condition branch (no candidates → look up 조문 in korean-tax-mcp), leaving nothing to inference.

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

foreign_tax_creditA
Read-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⑥)은 반영 안 함 — 국외원천소득에 미리 반영.

NameRequiredDescriptionDefault
baseYes각 사업연도 소득에 대한 과세표준(원). Gross-up 반영 여부는 base_includes_grossup으로 지정
yearYes사업연도·귀속연도(2016~2026)
methodYes외국납부세액 처리 방법. 손금산입은 2020 사업연도까지만(2021~ 삭제)
monthsNo사업연도 월수(1~12)
countriesYes국가별 [{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_grossupYesbase에 간접외국납부세액 익금산입(Gross-up)이 이미 들어 있으면 true, 아니면 false(도구가 더함)

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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

No output schema exists, and the description 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_taxA
Read-onlyIdempotent

거주자 수증자 증여세 과세가액·증여재산공제·과세표준·산출세액·납부할세액. 언제: 증여세 신고·계산 시. 입력: 증여일 → gift_date, 증여재산가액 → gift_value, 증여자 관계 → relation, 10년 내 동일 증여자 증여 → prior_gifts_same_donor, 부담부증여 인수채무 → assumed_debt, 사전증여 공제 사용량 → prior_deduction_used, 혼인·출산 공제 → marriage_birth. 결과: 과세가액·증여재산공제·과세표준·산출세액·할증세액·신고세액공제·납부할세액, 근거. 증여세 과세가액·공제·세액 계산.

NameRequiredDescriptionDefault
filedNo법정신고기한 내 신고
excludedNo금액(원)
relationYes수증자 기준 증여자와의 관계 — 배우자|직계존속|직계비속|기타친족|기타. 평소 말(부모·자녀·남편·형제·장인 등)도 됨
gift_dateYes증여일(YYYY-MM-DD, 2016-01-01~2026-12-31)
gift_valueYes금액(원)
nontaxableNo금액(원)
assumed_debtNo금액(원)
appraisal_feeNo금액(원)
other_creditsNo금액(원)
marriage_birthNo혼인일 전후 2년·자녀 출생일부터 2년 내 직계존속 증여
generation_skipNo자녀 아닌 직계비속 수증
recipient_minorNo수증자가 미성년자
marriage_birth_usedNo금액(원)
prior_gift_tax_paidNo금액(원)
share_appraisal_feeNo금액(원)
prior_deduction_usedNo금액(원)
share_appraisal_countNo평가기관 수
prior_gifts_same_donorNo금액(원)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the operation read-only, idempotent, non-destructive and closed-world, so the safety bar is low. The description goes beyond them by disclosing the complete set of computed line items (과세가액 through 신고세액공제 and 납부할세액) plus '근거', which tells the agent this is a deterministic, audit-trailed calculation rather than a data lookup.

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

Conciseness4/5

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

The 입력/결과/when layout is front-loaded and scannable, with each line carrying operational content. The only waste is the closing sentence '증여세 과세가액·공제·세액 계산', which restates the opening line without adding information.

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

Completeness3/5

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

There is no output schema, and the description partially compensates by listing the result fields, which is the right move. But for an 18-parameter tax engine with 11 undocumented-in-description inputs, an agent lacks guidance on when to set flags like generation_skip/recipient_minor or how credits (other_credits, prior_gift_tax_paid) interact with the computed 세액 — a meaningful gap for a high-parameter tool.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3, and the description's 한글→parameter mapping (증여일→gift_date, 부담부증여 인수채무→assumed_debt, etc.) is genuinely useful for natural-language translation. However it maps only 7 of 18 parameters and is silent on the ones most likely to be mis-specified — generation_skip, recipient_minor, share_appraisal_fee/count, excluded, nontaxable, other_credits.

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

Purpose5/5

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

The first sentence names a specific verb (계산/산출) and enumerates the exact outputs (과세가액·공제·과세표준·산출세액·납부할세액), making it immediately distinguishable from siblings like inheritance_tax or inheritance_gift_valuation. The final line restates the scope compactly as gift-tax computation, so an agent knows precisely what domain this covers.

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

Usage Guidelines3/5

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

'언제: 증여세 신고·계산 시' gives a use context but no exclusions and names no alternatives, even though the sibling list contains adjacent tools (inheritance_tax, inheritance_gift_valuation, tunnelling_gift) that an agent could plausibly confuse. The boundary between 'compute the tax' and 'value the gifted asset' is implied by the result list rather than stated.

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

housing_deemed_rent_incomeA
Read-onlyIdempotent

주택 임대 보증금 간주임대료 — 개인 사업소득 총수입금액 산입액(소득세법 제25조①, 시행령 제53조③④). 언제: 개인이 주택을 전세·보증금으로 임대할 때 종합소득세(사업소득) 간주임대료를 계산한다. 부가가치세 간주임대료는 vat_deemed_rent, 법인은 corporate_deemed_rent_income. 입력: 귀속연도 → year, 소유 주택 전부(기준시가·면적·보증금·일수) → houses, 임대 금융수익 → financial_income, 추계 여부 → estimated, 정기예금이자율 → rate(생략 시 연도표). 판정(연도별): 3주택 이상 + 보증금 합계 3억 초과(전 기간) / 2026~: 2주택(기준시가 12억 이하 주택은 주택 수 제외) + 보증금 합계 12억 초과. 소형주택(면적·기준시가 기준 이하)은 주택 수에서 뺀다 — 2016 85㎡·3억, 20172018 60㎡·3억, 20192026 40㎡·2억. 산식: (보증금 − 3억, 적수가 큰 주택부터 차감)의 적수 × 60% × 1/365(윤년 366) × 정기예금이자율 − 금융수익(추계면 빼지 않음). 0보다 작으면 0. 결과: 과세 여부·주택 수(제외 사유)·총수입금액 산입액·주택별 적수·근거.

NameRequiredDescriptionDefault
rateNo정기예금이자율(소수). 생략 시 연도표(소득세법 시행규칙 제23조, 부가·법인 간주임대료와 같은 율)
yearYes사업연도·귀속연도(2016~2026)
housesYes소유 주택 전부 [{이름?, 기준시가(원), 면적?(㎡, 주거 전용 — 소형주택 판정용, 모르면 생략하면 소형 아님으로 봄), 보증금(원, 임대 안 하면 0), 일수?(보증금 받은 일수, 기본 그 해 일수)}] — 임대하지 않는 주택도 주택 수 판정에 넣는다(부부 합산 등 주택 수 계산은 시행령 제8조의2 — 합산한 목록을 넣을 것)
estimatedNo추계신고·결정이면 True — 금융수익을 빼지 않음(시행령 제53조④)
financial_incomeNo임대사업 부분에서 생긴 수입이자·할인료·배당금(장부로 보증금 운용이 확인되는 것, 원). 추계면 무시

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only/idempotent/non-destructive, so safety is covered; the description adds real behavioral context beyond that: the computation formula, the deduction ordering ('적수가 큰 주택부터 차감'), the floor at zero, whether financial income is subtracted under estimation, and what the result contains (과세 여부·주택 수·적수·근거). It does not mention error conditions or rounding/output precision, which keeps it just short of top.

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

Conciseness4/5

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

Dense but well sectioned (언제 / 입력 / 판정 / 산식 / 결과) with the purpose front-loaded. The '입력' block largely duplicates the schema and could be trimmed without losing information.

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

Completeness5/5

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

No output schema exists, and the '결과' line enumerates what is returned (taxability, house count with exclusion reasons, includable gross income, per-house 적수, legal basis). Combined with the threshold tables and formula, an agent has everything needed to call and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter including the rate default table and the houses item shape. The '입력' section restates those mappings almost verbatim, adding little new semantics; baseline 3 is appropriate. It does reinforce that non-rented houses must still be listed, but the schema says the same.

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

Purpose5/5

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

States a specific verb+resource with the governing statute ('주택 임대 보증금 간주임대료 … 소득세법 제25조①, 시행령 제53조③④'), and explicitly disambiguates from the two nearest siblings (vat_deemed_rent for VAT, corporate_deemed_rent_income for corporations). An agent can identify the tool without opening the schema.

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

Usage Guidelines5/5

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

The '언제' section gives the triggering condition (individual leasing housing for jeonse/deposit, computing comprehensive income tax business income) and names both alternatives with the axis that separates them (VAT vs. individual vs. corporate). It also states the year-by-year eligibility rules up front, so the agent knows when the tool applies.

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

housing_rental_incomeA
Read-onlyIdempotent

개인 주택임대소득 과세 판정 — 1주택 비과세, 총수입금액 2천만원 이하 비과세(2018)·분리과세 선택(2019), 분리과세 세액과 종합과세 참고값(소득세법 제12조2호나목, 제14조③7호, 제64조의2). 언제: 개인이 주택을 월세·전세로 임대할 때 과세 여부와 분리과세(14%) 세액을 구하고, 분리과세와 종합과세 중 무엇을 고를지 비교한다. 간주임대료만 필요하면 housing_deemed_rent_income. 입력: 귀속연도 → year(20162026), 부부 합산 소유 주택 전부(월세·보증금·기준시가·등록임대 여부) → houses, 다른 종합소득금액 → other_income_amount(2019 분리과세 계산 시 필요), 종합과세 비교용 다른 과세표준 → other_taxable_base, 종합과세 시 주택임대 소득금액 → comprehensive_rental_income, 간주임대료 금융수익·추계·이자율 → financial_income·estimated·rate. 판정(연도별): 주택 수 1개(부부 합산·국외 포함)이고 국내·기준시가 기준 이하면 전액 비과세 — 기준 20162022 9억, 2023 12억(2022.12.31. 개정 부칙 제11조). 총수입금액(월세 + 간주임대료, 시행령 제8조의2⑥) 2천만원 이하: 20162018 비과세 / 2019 분리과세 선택 가능. 초과면 종합과세. 분리과세 산식: (총수입금액 − 필요경비 50%, 등록임대 60% − 다른 종합소득금액 2천만원 이하면 200만원, 등록임대 400만원 — 섞이면 수입금액 비율 안분) × 14%. 등록임대: 2019 공공지원·장기일반·단기 / 2021~ 아파트 매입 장기일반·단기는 2020.7.10. 이전 등록 신청분만. 의무임대기간 4년, 2020.8.18. 이후 등록 신청분 10년. 지원하지 않음(입력 확인 필요로 멈춤): 겸용주택 주택 부분 판정(제8조의2④), 공동소유 주택의 주택 수 판정(제8조의2③2호 — 주택수_산입을 직접 입력하면 계산), 국외주택 보증금 간주임대료, 조특법 제96조 소형주택 임대 감면, 2020 귀속 중 2020.10.7. 개정 시행령으로 결과가 갈리는 등록임대, 2016 전·2027 이후 연도. 결과: 과세 여부·구분(비과세|분리과세 선택 가능|종합과세)·주택 수·총수입금액(월세·간주임대료)·분리과세 세액·종합과세 참고 세액·의무임대기간·근거.

NameRequiredDescriptionDefault
rateNo간주임대료 정기예금이자율(소수). 생략 시 연도표
yearYes사업연도·귀속연도(2016~2026)
housesYes본인과 배우자가 소유한 주택 전부(주택 수는 부부 합산, 시행령 제8조의2③4호) — [{이름?, 소유자?('본인'|'배우자', 기본 본인), 소재?('국내'|'국외', 기본 국내), 기준시가(원, 국내 주택), 면적?(㎡, 주거 전용 — 보증금 있으면 필요), 월세?(그 해 본인 귀속 월세·사용료 합계, 원), 보증금?(원), 일수?(보증금 받은 일수), 등록임대?(bool), 임대유형?('공공지원'|'장기일반'|'단기'), 아파트?(bool), 등록신청일?(YYYY-MM-DD), 등록_월수?(그 해 등록임대로 임대한 월수 1~12, 기본 12), 단기에서_변경신고일?(YYYY-MM-DD), 공동소유?(bool), 주택수_산입?(공동소유일 때 본인 주택 수에 넣는지 bool), 겸용?(bool)}]
estimatedNo추계신고·결정이면 True — 간주임대료에서 금융수익을 빼지 않음
financial_incomeNo간주임대료에서 뺄 임대사업 금융수익(원, 시행령 제53조③)
other_taxable_baseNo종합과세 비교용: 주택임대소득을 뺀 종합소득 과세표준(원)
other_income_amountNo분리과세 주택임대소득을 뺀 그 해 종합소득금액(원) — 2019~ 분리과세 추가 차감(200만·400만) 요건 판정용
comprehensive_rental_incomeNo종합과세 비교용: 종합과세할 때의 주택임대 사업소득금액(장부 또는 추계, 원)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare a safe, deterministic, closed-world computation, so the marginal bar is met by the description disclosing what it will refuse to compute and that it stops rather than guessing, plus the year-by-year rule switches (9억/12억 기준, 2018 vs. 2019 treatment) and the output fields produced. The listed legal bases and the '입력 확인 필요로 멈춤' behavior are traits the schema and annotations do not convey.

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

Conciseness4/5

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

It is long and dense, but section labels (언제 / 입력 / 판정 / 분리과세 산식 / 지원하지 않음 / 결과) keep it scannable and the purpose is front-loaded. Some of the separate-taxation formula detail duplicates what the tool computes internally, which costs a point on strict economy.

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

Completeness5/5

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

There is no output schema, but the '결과' line enumerates the returned fields (과세 여부·구분·주택 수·총수입금액·분리과세 세액·종합과세 참고 세액·의무임대기간·근거), closing that gap. Combined with the supported-year bounds, the unsupported-case list, and annotations covering safety, 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.

Parameters3/5

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

Schema description coverage is 100% and every parameter, including the nested houses array, is already documented in the schema. The '입력' section mostly restates those fields (year, houses, other_income_amount, rate) without adding format or syntax detail beyond the schema. Baseline 3 applies since the schema does the heavy lifting.

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

Purpose5/5

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

The opening line names a specific verb and resource: personal housing rental income taxation determination (과세 판정), and enumerates the exact decisions computed — 1-housing exemption, 20M threshold, separate vs. comprehensive taxation. It also names the sibling it is not ('간주임대료만 필요하면 housing_deemed_rent_income'), so the agent can discriminate without opening a schema.

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

Usage Guidelines5/5

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

The '언제' section states the triggering situation (individual renting a house by monthly rent/jeonse, needing taxability and 14% separate-tax amount, or comparing separate vs. comprehensive), and explicitly redirects deemed-rent-only needs to housing_deemed_rent_income. The '지원하지 않음' block lists concrete out-of-scope cases (겸용주택, 공동소유 주택 수, 국외주택 보증금 간주임대료, 조특법 제96조, 2020.10.7. 개정 갈림, 2016 이전/2027 이후) and says it halts for input confirmation — an unusually explicit when-not.

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

income_adjustment_totalA
Read-onlyIdempotent

차가감소득금액 집계(법인세 과세표준 및 세액조정계산서). 언제: 당기순이익에서 세법상 익금산입·손금산입을 가감해 차가감소득금액과 각 사업연도소득금액을 구할 때. 입력: 당기순이익(원) → net_income, 조정 항목 목록 [{항목, 종류, 금액, 방향, 소득처분}] → items, 기부금 한도초과액(원) → donation_excess, 기부금 한도초과 이월액 손금산입(원) → donation_carryover_deduction. 결과: 차가감소득금액·각사업연도소득금액·익금산입_손금불산입·손금산입_익금불산입·세무조정, 판단, 근거(법인세법 제18·19·21·23·24·25·28조 등).

NameRequiredDescriptionDefault
itemsYes[{항목(이름), 종류, 금액(원), 방향?('가산'|'차감'|'없음'), 소득처분?}] — 종류: 법인세비용·법인지방소득세·벌금·과태료·가산세·환급금이자·자기주식처분이익(자본잉여금)·미수이자(원천징수대상)·비지정기부금·기업업무추진비 한도초과·감가상각비 한도초과·업무무관 지급이자·수입배당금 익금불산입·이월결손금 보전 자산수증이익·사업용 재산세·기부금 한도초과(별칭: 법인세·국세환급가산금·자기주식처분이익·미수이자·재산세 등). 사전에 없으면 방향을 주면 됨
net_incomeYes금액(원)
donation_excessNo기부금 한도초과액(원), 차가감 이후 가산
donation_carryover_deductionNo기부금 한도초과 이월액 손금산입(원)

TDQS

A3.9/5.0
Behavior4/5

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 adds real value beyond that by stating what the computation returns (차가감소득금액, 각사업연도소득금액, 익금산입_손금불산입, 손금산입_익금불산입, 세무조정, 판단, 근거 with cited 법인세법 articles), which no structured field provides 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.

Conciseness4/5

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

The 언제/입력/결과 labeling front-loads purpose and makes the block scannable despite its density. The '입력:' portion is largely a paraphrase of a schema that is already fully documented, which is the one place sentences don't fully earn their place.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing returns and does list the result fields plus the legal grounds, which is sufficient for an agent to know what to expect. Minor gaps: the exact shape of 판단/근거 and how unrecognized item 종류 are handled are not described.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The '입력:' section restates each parameter's meaning and adds a small clarification (donation_excess is added after 차가감), but that clarification already appears in the property description, so there is little genuinely new semantic information.

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

Purpose4/5

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

The description names a specific verb (집계/aggregate) and a precise resource (차가감소득금액 and 각 사업연도소득금액 on the corporate tax adjustment schedule), which is far more informative than the tool name alone. It implicitly separates itself from item-level siblings (donation_limit, entertainment_adjustment, depreciation_adjustment, income_loss_offset) by taking the whole adjustment list as input, but it never states that differentiation explicitly.

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

Usage Guidelines4/5

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

The '언제:' block gives an explicit triggering scenario — computing 차가감소득금액/각사업연도소득금액 by adding or subtracting 익금산입·손금산입 from net income. It does not say when NOT to use it or name the alternative tools an agent should call for individual limit computations.

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

income_loss_offsetA
Read-onlyIdempotent

결손금·이월결손금 공제 후 종합소득금액. 언제: 사업소득 결손금이나 이월결손금을 다른 종합소득에서 공제할 때. 입력: 귀속연도 → year, 소득 목록 → incomes(사업소득 제외), 이월결손금 → carryforwards(선택), 추계 여부 → estimated, 금융소득 분리과세분 → financial_flat_rate, 사업소득 상세 → business(선택), 이전 연도 이력 → history(선택, carryforwards와 상호 배제). 결과: 공제 후 소득금액·종합소득금액·이월결손금(다음 연도)·공제 내역·소멸·이력_계산·근거.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
historyNo[{year, incomes, business?, financial_flat_rate?, estimated?}] — 대상 연도보다 앞선 연도들. year 오름차순으로 계산 후 이월결손금을 다음 연도로 넘김. history와 carryforwards 중 하나만 사용. 예: [{"year":2022, "incomes":{"근로":15000000}, "business":{"book_income":-30000000, "adjustments":[]}}]
incomesYes{부동산임대, 주거용임대, 근로, 연금, 기타, 이자, 배당} — 각 소득금액(원), 음수=결손금. 부동산임대 = 주거용 건물 임대업을 뺀 부동산임대업(결손금은 부동산임대 소득에서만 공제, 제45조②). 주거용임대 = 주거용 건물 임대업(결손금도 다른 종합소득에서 공제, 제45조② 단서) — 임대 결손금은 주거용분을 꼭 나눠 넣는다. 사업소득은 business로 입력(사업소득은 incomes['사업']으로 넣지 않음).
businessNo{book_income, adjustments} — 사업소득 계산용. book_income: 장부상 사업 손익(원, 손실은 음수). adjustments: [{kind, amount}]. kind: 사업주_본인_급여·가사관련경비·기타_가산·기타_차감. 예: {"book_income":-90000000, "adjustments":[{"kind":"사업주_본인_급여","amount":30000000}]}
estimatedNo추계 과세 여부(True면 그 연도에는 이월결손금을 공제하지 않고 소멸 없이 다음 연도로 넘김, 제45조④)
carryforwardsNo[{year, kind, amount}] — 이월결손금 목록. kind: '사업'|'부동산임대'. 예: [{"year":2022, "kind":"사업", "amount":10000000}]
financial_flat_rateNo이자·배당 중 원천징수세율 적용분 합계(원, 이자에서 먼저 차감)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real domain behavior beyond them: 부동산임대 losses offset only against 부동산임대 income (제45조②) while 주거용임대 losses offset against other income, the estimated-taxation rule that suspends carryforward deduction without lapse (제45조④), and the mutual exclusion of history vs carryforwards. Return behavior is only sketched, keeping it below a 5.

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

Conciseness4/5

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

Purpose, when-to-use, inputs, and outputs are cleanly labeled and front-loaded in a few dense lines with no filler. The input-mapping block is somewhat redundant with the schema and could be trimmed.

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

Completeness5/5

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

For a 7-parameter, nested-object tool with no output schema, the description supplies both the statutory rules governing the calculation and an explicit 결과 enumeration (공제 후 소득금액, 이월결손금 이월, 소멸, 근거), covering what an agent needs before invoking.

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

Parameters3/5

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

Schema coverage is 100% and each property already documents format, examples, and the history/carryforwards exclusion, so the description's input-mapping list (귀속연도 → year, etc.) largely restates structured data. It adds the note that 사업소득 must go to business rather than incomes['사업'], but that too is present in the schema.

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

Purpose4/5

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

The opening line names a specific computation (종합소득금액 after 결손금/이월결손금 공제), which is clearly a tax-offset operation distinct from siblings like loss_carryforward_limit or income_adjustment_total. It does not explicitly name those siblings or state boundaries against them, 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.

Usage Guidelines4/5

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

The '언제' clause gives a clear trigger: when business-income losses or carryforward losses are to be offset against other comprehensive income. No when-not conditions or named alternatives are provided, so it is contextual but not routing-level guidance.

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

income_taxA
Read-onlyIdempotent

종합소득세 산출세액(귀속연도 세율표). 언제: 종합소득 과세표준이 정해지면 그에 대한 산출세액을 구한다(근로·사업·기타·이자·배당 등 종합과세 대상). 입력: 종합소득 과세표준(원) → base, 귀속연도(2016~2026) → year. 결과: 산출세액, 근거(소득세법 제55조). Comprehensive income tax on a tax base (year-specific rate table).

NameRequiredDescriptionDefault
baseYes종합소득 과세표준(원)
yearYes사업연도·귀속연도(2016~2026)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

There is no output schema, so the description 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

individual_donation_expenseA
Read-onlyIdempotent

개인사업자 기부금 필요경비 산입 한도(소득세법 제34조). 언제: 사업소득자의 종합소득세 신고에서 정치자금·고향사랑·특례·일반(종교) 기부금을 어디까지 필요경비로 넣고, 얼마가 세액공제·이월로 넘어가는지 계산할 때. 순서(시행령 제81조④): 정치자금·고향사랑 10만원 초과분(이월결손금 뺀 소득금액 한도) → 특례(기준소득−이월결손금) → 일반(종교 있으면 10% + min(20%, 종교 외), 없으면 30%). 이월분은 같은 구분에서 먼저 산입(제79조④). 현물은 시가(시가<장부가액이면 장부가액)(제81조③), 자원봉사용역은 봉사일수(8시간 단위 올림)×8만원 + 부수 유류비(이동분 제외)·재료비(제81조⑤). 입력: 기준소득금액 → base_income(이자·배당 제외), 이월결손금 → carried_loss, 기부금 → political·hometown·special·general·religious, 이월 → carried_*, 자원봉사 → volunteer, 현물 → in_kind. 결과: 필요경비 산입 합계·구분별 산입·한도초과 이월·기부금 산입 후 사업소득금액·정치·고향 세액공제 대상(10만원 이하), 판단, 근거. 세액공제(제59조의4) 금액 자체는 계산하지 않음 — 종합소득 기준은 별도.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
generalNo일반기부금 금전 지출(원, 종교단체 제외): 사회복지법인·의료법인·공익법인 고유목적사업비 등
in_kindNo현물 기부 [{kind: 특례|일반|종교, book: 장부가액, market: 시가}] — 시가(시가가 장부가액보다 낮으면 장부가액)로 평가
specialNo특례기부금 금전 지출(원): 국가·지자체, 국방헌금, 이재민 구호금품, 사립학교·병원 시설비·교육비·장학금·연구비 등(법인세법 제24조②1호)
hometownNo고향사랑 기부금 총액(원) — 10만원까지 세액공제, 초과분 필요경비
politicalNo정치자금 기부금 총액(원) — 10만원까지 세액공제, 초과분 필요경비
religiousNo종교단체 일반기부금(원)
volunteerNo특별재난지역 자원봉사용역 {hours: 본인 봉사시간, fuel: 부수 유류비, transport_fuel: 그중 이동용 유류비(제외), materials: 재료비} — 특례기부금
base_incomeYes기준소득금액 — 기부금을 필요경비에 산입하기 전의 해당 과세기간 사업소득금액(원). 이자·배당 등 다른 종합소득은 넣지 않음
carried_lossNo소득세법 제45조 이월결손금(원)
carried_generalNo이월된 일반기부금 한도초과액(원, 10년)
carried_specialNo이월된 특례기부금 한도초과액(원, 10년)

TDQS

A4.1/5.0
Behavior5/5

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

Although annotations already establish a safe read-only, idempotent computation, the description adds substantial behavioral context beyond them: the exact statutory ordering of political/hometown, special, and general donation limits, carryover priority within the same category, in-kind valuation rules, volunteer-service valuation rules, and the explicit boundary that the tax-credit amount itself is not computed. This gives the agent the calculation logic and limitations needed to invoke the tool correctly.

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

Conciseness4/5

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

The description is dense but well organized, front-loading purpose and usage before proceeding through ordering rules, valuation rules, input mapping, and output summary. Each section is relevant to correct invocation. It loses a point only because the arrow notation and statutory references make it heavier than necessary for quick reading.

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

Completeness5/5

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

For a complex 12-parameter tax calculation with no output schema, the description is complete enough: it explains the legal basis, calculation order, in-kind and volunteer valuation, input mapping, expected outputs, and the important non-calculation boundary for tax credits. An agent would not need outside context to understand when and how to call this tool.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in detail. The description's input mapping line (base_income, carried_loss, political, hometown, special, general, religious, carried_*, volunteer, in_kind) mostly mirrors what the schema already says, including the note that base_income excludes interest and dividends. It is useful as a compact orientation but adds little semantic meaning beyond the schema.

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

Purpose4/5

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

The description clearly states the specific resource and operation: calculating the necessary-expense inclusion limit for individual-business donations under Income Tax Act Article 34, including the treatment of political, hometown, special, and general/religious donations. It also explicitly scopes out the tax-credit amount calculation, which helps distinguish it from broader donation or tax-credit tools. However, it does not name the sibling tool `donation_limit`, so sibling differentiation is implicit rather than explicit.

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

Usage Guidelines4/5

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

The '언제' section gives a clear context: use during a business-income taxpayer's comprehensive income tax filing when determining how much of each donation type is deductible as a necessary expense and how much carries over or becomes tax-credit eligible. It also states what the tool does not calculate, which prevents misuse for tax-credit computation. It stops short of explicitly naming alternative tools for overlapping donation-limit or comprehensive-income calculations.

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

inheritance_gift_valuationA
Read-onlyIdempotent

상속·증여재산 평가: 시가 우선 → 보충적 평가 → 담보권 특례(상증법 제60조·제66조, 영 제49조·제63조). 언제: 상속·증여재산의 시가를 구할 때. 해당재산 가액이 있으면 시가, 없으면 유사재산, 둘 다 없으면 보충적 평가액(법 제61조). 입력: kind — '상속' 또는 '증여' valuation_date — 상속개시일·증여일 supplementary_value — 보충적 평가액(개별공시지가 등) market_values — [{대상, 종류, 가액, 날짜}] 선택 secured_debt — {채권최고액?, 채무액} 선택 결과: 평가액, 계산.시가·적용·담보채권액, 판단. 주의: 평가기간 밖 가액은 시가에서 제외(상속=전후 6개월, 증여=전 6개월~후 3개월).

NameRequiredDescriptionDefault
kindYes'상속' 또는 '증여'
secured_debtNo{채권최고액?, 채무액} — 저당권·근저당 등 담보
market_valuesNo[{대상:'해당재산'|'유사재산', 종류:'매매'|'감정'|'수용'|'경매'|'공매', 가액, 날짜}]
valuation_dateYes상속개시일 또는 증여일(YYYY-MM-DD)
supplementary_valueYes보충적 평가액(개별공시지가 등, 원)

TDQS

A4.2/5.0
Behavior4/5

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), yet the description still adds real domain behavior: the priority order of valuation methods and the rule that values outside the valuation window (상속 전후 6개월, 증여 전 6개월~후 3개월) are excluded from market value. That exclusion rule is the kind of trap an agent would otherwise fall into. It stops short of describing output shape in full, but it does name the result fields.

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

Conciseness5/5

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

Purpose, trigger, inputs, outputs and caveats are laid out as labeled blocks with the most important information first. The input list is mildly redundant with the schema, but each remaining sentence (valuation order, exclusion window) carries distinct decision-relevant content.

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

Completeness4/5

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

For a five-parameter tool with no output schema, the definition supplies the legal basis, the valuation-tier logic, the period-exclusion caveat and a sketch of the return fields (평가액, 계산.시가·적용·담보채권액, 판단). That is close to self-sufficient; a bit more on how secured_debt interacts with the 담보권 특례 would close the remaining gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains kind, valuation_date, supplementary_value, market_values and secured_debt, including the enum values and the market_values entry format. The description's '입력' block largely restates that list and adds no syntax or constraint detail (e.g., how secured_debt feeds the 담보권 특례) beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The definition names a specific verb and resource (상속·증여재산 평가) and the exact statutory basis (상증법 제60조·제66조, 영 제49조·제63조), then immediately states the valuation waterfall (시가 → 보충적 평가 → 담보권 특례). This is clearly distinguishable from the tax-computation siblings inheritance_tax and gift_tax, which compute liability rather than property value.

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

Usage Guidelines4/5

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

The '언제' line gives an explicit trigger (when the market value of inherited or gifted property is needed), and the fallback chain tells the agent which valuation tier applies depending on the inputs available. It does not, however, name a sibling alternative or state when this tool should not be used instead of inheritance_tax/gift_tax.

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

inheritance_taxA
Read-onlyIdempotent

거주자 피상속인 상속세 과세가액·상속공제·과세표준·산출세액·납부할세액. 언제: 상속세 신고·계산 시. 입력: 본래 상속재산가액 → estate_value, 상속개시연도 → year, 간주상속재산 → deemed_estate, 추정상속재산 목록 → presumed_items, 비과세·불산입·공과금·장례비용·봉안비용·채무·사전증여·특별공제 등. spouse.legal_share는 '3/5' 같은 분수 문자열 또는 0.6 같은 0 초과 1 이하 소수. 결과: 과세가액·상속공제합계·과세표준·산출세액·신고세액공제·납부할세액, 공제 내역, 근거. 상속세 과세가액·공제·세액 계산.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
debtsNo금액(원)
filedNo법정신고기한 내 신고
minorsNo[미성년자별 19세까지 남은 연수]
spouseNo실제 상속받은 금액·법정상속분 등. {actual(실제 상속액), legal_share('3/5' 같은 분수 문자열 또는 0.6 같은 0 초과 1 이하 소수)}
seniorsNo65세 이상 인원
childrenNo자녀 수
disabledNo[장애인별 기대여명 연수]
excludedNo금액(원)
nontaxableNo금액(원)
estate_valueYes금액(원)
funeral_costNo금액(원)
appraisal_feeNo금액(원)
deemed_estateNo금액(원)
other_creditsNo금액(원)
presumed_itemsNo[{kind, window, amount, unexplained}]
public_chargesNo금액(원)
gift_tax_creditNo금액(원)
cohabiting_houseNo{value, secured_debt?}
sole_spouse_heirNo배우자 단독상속
enshrinement_costNo금액(원)
prior_gifts_heirsNo금액(원)
renounced_to_nextNo금액(원)
prior_gifts_othersNo금액(원)
share_appraisal_feeNo금액(원)
bequest_to_non_heirsNo금액(원)
net_financial_assetsNo금액(원)
prior_gift_deductionsNo금액(원)
share_appraisal_countNo평가기관 수
business_farm_deductionNo금액(원)
generation_skip_surchargeNo금액(원)

TDQS

A4.2/5.0
Behavior4/5

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 tool is a pure calculator. The description adds useful behavioral scope: it applies only to resident decedents and enumerates the categories of deductions and credits handled, which goes 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.

Conciseness5/5

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

Front-loads purpose, then clearly separates '언제:' (when), '입력:' (input), and '결과:' (result) sections. For a 31-parameter tool, it is dense but well-organized with no wasted sentences.

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

Completeness4/5

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

Given 31 parameters, no output schema, and a complex tax calculation, the description adequately covers inputs at a high level and explicitly lists the return values (taxable amount, deductions, tax base, computed tax, credits, payable tax, deduction details, basis). It could explain a few more edge cases but is largely complete.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented. The description maps key concepts to parameters (estate_value, year, deemed_estate, presumed_items) and explains the spouse.legal_share format, but this largely repeats schema content. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource: calculating inheritance tax for a resident decedent, covering taxable estate, deductions, tax base, computed tax, and payable tax. The scope and output components are precise enough to distinguish it from sibling tools like gift_tax or capital_gains_income.

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

Usage Guidelines4/5

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

Explicitly says when to use it: '상속세 신고·계산 시' (at the time of inheritance tax filing/calculation). It does not name alternatives or when-not-to-use, but the domain is clear enough that an agent can select it correctly.

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

input_tax_recalculationA
Read-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. 결과: 이력(기간별 비율·기준비율·변동·재계산 여부·경과과세기간수·세액)·결과(당기_납부세액_가산·매입세액, 건물_매입세액은 옛 이름)·판단(안분 기준)·근거.

NameRequiredDescriptionDefault
bundleNo토지·건물 일괄공급 안분 입력(input_tax 대안) {total_price, vat_included, appraisal?, standard_value?, book_value?} — bundled_supply_split과 같은 규칙으로 건물 매입세액을 구함
ratiosYes[{year, period, exempt_ratio}] — 취득 과세기간부터 당기까지 순서대로(마지막이 당기)
acquiredYes{year, period} — 취득 과세기간
input_taxNo해당 재화 매입세액 총액(원). bundle을 주면 생략
asset_typeYes자산 종류('건물·구축물'|'기타감가상각자산')

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, so the description only needs to add operational detail — and it does: the mutual exclusivity of input_tax and bundle (error case), the internal reuse of bundled_supply_split rules, and the shape of the return (이력/결과/판단/근거). The result-field naming caveat ('건물_매입세액은 옛 이름') is a useful extra.

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

Conciseness4/5

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

Front-loaded with the legal basis, then organized into 언제/입력/결과 blocks with no filler sentences. It is dense but every clause carries information an agent needs; only the parenthetical legacy-name note is slightly incidental.

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

Completeness4/5

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

With no output schema, the description compensates by enumerating the return structure (이력, 결과, 판단, 근거) and the error condition for conflicting inputs. For a complex, nested-parameter recalculation tool this is nearly complete, though exact field-level output detail is only sketched.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above that by mapping domain concepts to parameters (자산 종류→asset_type, 취득 과세기간→acquired) and by specifying the ordering rule for ratios (last entry must be the current period) and the internal structure of bundle.

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

Purpose5/5

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

States a specific verb and resource (감가상각자산 공통매입세액 재계산) and anchors it to the governing statute (부가법 제41조, 영 제83조). This clearly separates it from sibling allocation tools like common_input_tax and vat_common_input_allocation, which do not address depreciable-asset recalculation.

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

Usage Guidelines4/5

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

The '언제' section gives a concrete trigger — exemption-ratio shifting by ≥5%p versus the acquisition period at final return — which is real decision guidance. It also explains the input_tax vs bundle alternative and that supplying both is an error, but stops short of saying when a competing sibling tool should be chosen instead.

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

inventory_valuation_adjustmentA
Read-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조①~⑥.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
itemsYes재고자산 구분별 목록 (1개 이상). 각 항목: category, reported_method, used_method, book_value, valuations, change_report(선택), reported_lcm/used_lcm·name·prior_adjustment(선택)
fy_endNo사업연도 종료일(YYYY-MM-DD). 생략 시 year-12-31
fy_startNo사업연도 개시일(YYYY-MM-DD). 생략 시 year-01-01
new_corpNo설립(수익사업 개시) 첫 사업연도 여부 — 최초 신고기한 적용

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_penaltyA
Read-onlyIdempotent

세금계산서 가산세(가공 2%·3%·4%, 미발급 2%, 지연발급 1% 등, 공급일 기준 세율 적용). 언제: 세금계산서 발급·수취 의무를 위반했을 때 가산세 금액을 구한다. 입력: 공급가액(원) → supply_amount, 가산세 유형 → kind, 공급일(YYYY-MM-DD, 세율 기준) → supplied_on. 결과: 가산세·적용 세율, 근거(부가가치세법 제60조②⑤⑥⑦, 가공은 제60조③). VAT invoice penalties by type and supply date.

NameRequiredDescriptionDefault
kindYes가산세 유형 — 가공=실물 없는 발급·수취
supplied_onNo공급일(발급·수취일) YYYY-MM-DD — 세율 기준 연도
supply_amountYes금액(원)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose4/5

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.

Usage Guidelines4/5

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와 동일 형식). 결과: 관계(촌수·배우자)·기준일·친족 범위·국기법 친족 여부·상증법 친족(사돈 포함) 여부. 두 개인의 친족관계(혈족·인척 촌수, 배우자)와 기준일 친족 범위 해당 여부를 확인한다.

NameRequiredDescriptionDefault
aYes당사자 a(이름)
bYes당사자 b(이름)
onYes기준일 YYYY-MM-DD
familyYes친족 관계 목록 [[a, b, "부모자녀"|"배우자"]]. 예: [["김갑", "김을", "부모자녀"]] — related_judge와 동일 형식

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. 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.

Purpose5/5

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

The description states a specific verb and resource: 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.

Usage Guidelines4/5

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_penaltyA
Read-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.

NameRequiredDescriptionDefault
dueYes법정납부기한(YYYY-MM-DD)
untilYes납부일·고지일(YYYY-MM-DD)
unpaid_taxYes금액(원)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: 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.

Usage Guidelines4/5

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.

liquidation_incomeA
Read-onlyIdempotent

청산소득금액(법인세법 제79조). 언제: 법인이 해산·청산할 때 청산소득금액을 계산한다. 입력: 환가 총액(원) 또는 [{항목, 금액}] → assets_realized, 부채 상환액(원) → liabilities_paid, 자본금(원) → capital, 자본잉여금+이익잉여금(원) → surplus, 세무상 유보 잔액(원, △유보는 음수) → yubo, 이월결손금 잔액(원) → carryforward_loss, 2년 이내 자본전입 잉여금(원) → capitalized_surplus_2y, 환급 법인세(원) → refund_tax. 결과: 청산소득금액·계산(잔여재산가액·자기자본총액·결손금_상계·자본금·잉여금)·판단, 근거(법인세법 제79조).

NameRequiredDescriptionDefault
yuboNo세무상 유보 잔액(원, △유보는 음수)
capitalYes금액(원)
surplusYes금액(원)
refund_taxNo해산등기일 현재 환급될 법인세(원)
assets_realizedYes환가 총액(원) 또는 [{항목, 금액(원)}]
liabilities_paidYes금액(원)
carryforward_lossNo세무상 이월결손금 잔액(원)
capitalized_surplus_2yNo해산등기일 전 2년 이내 자본금에 전입한 잉여금(원)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description does not contradict them. It adds real behavioral context beyond the annotations by disclosing what is computed and returned (잔여재산가액, 자기자본총액, 결손금 상계) and the statutory basis. Missing only minor traits like rounding/unit handling nuances.

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

Conciseness4/5

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

Structured as purpose / 언제 / 입력 / 결과, which front-loads the decision-relevant facts. The input list partially restates the schema and is dense, but it is labeled and scannable rather than padded.

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

Completeness5/5

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

Without an output schema, the description compensates by enumerating the returned components (청산소득금액, 계산 내역, 판단, 근거). For an 8-parameter statutory calculator, an agent has everything needed to invoke it and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it clarifies that surplus is 자본잉여금+이익잉여금 and that yubo accepts negative values (△유보), where the schema only says '금액(원)'. The one-to-one mapping of Korean statutory terms to English parameter names also lowers mis-invocation risk.

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

Purpose5/5

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

States a specific verb (계산한다) and resource (청산소득금액) and anchors it to Corporate Tax Act Art. 79. No sibling tool in the list covers liquidation income, so an agent can route here unambiguously.

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

Usage Guidelines4/5

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

"언제: 법인이 해산·청산할 때" gives an explicit trigger condition tied to a lifecycle event. It does not name exclusion cases or an alternative tool, but the domain is narrow enough that no plausible confusion exists.

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

loss_carryforward_limitA
Read-onlyIdempotent

이월결손금 공제 한도율(사업연도 개시일 기준). 언제: 이월결손금이 있을 때 해당 사업연도에 얼마까지 공제되는지 한도율을 확인한다. 입력: 사업연도(2016~2026) → year, 중소기업 등 여부 → sme. 결과: 한도율(소수)과 근거(법인세법 제13조① 단서). Limit on using loss carryforwards in a year; returns the deduction limit ratio by fiscal year start.

NameRequiredDescriptionDefault
smeYes중소기업 등 여부
yearYes사업연도·귀속연도(2016~2026)

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_taxA
Read-onlyIdempotent

최저한세(감면 전 과세표준 × 최저한세율). 언제: 세액감면·공제를 받은 뒤에도 납부해야 할 최저한세를 확인할 때(중소기업 졸업 유예 연차 포함). 입력: 감면 전 과세표준(원) → base_before_incentives, 사업연도(20162026) → year, 중소기업 여부 → sme, 졸업 후 경과 연차(05) → grace_year. 결과: 최저한세액, 근거(조세특례제한법 제132조①). Minimum corporate tax = base before incentives × minimum tax rate.

NameRequiredDescriptionDefault
smeNo중소기업 여부
yearYes사업연도·귀속연도(2016~2026)
grace_yearNo중소기업 졸업 후 경과 연차(0=해당 없음, 0~5)
base_before_incentivesYes금액(원)

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. 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.

Purpose4/5

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.

Usage Guidelines4/5

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_disallowanceA
Read-onlyIdempotent

적격증빙 미수취 기업업무추진비 손금불산입(건당 3만 원, 경조금 20만 원 초과 + 적격증빙 없음). 언제: 접대비 등을 지출했는데 적격증빙을 받지 못한 건이 있으면 손금불산입액을 구한다. 입력: 사업연도(2016~2026) → year, 지출 건 목록 [{amount: 1회 지출액(원), qualified: 적격증빙 여부, congratulatory: 경조금 여부}] → items. 결과: 손금불산입 합계액, 근거(법인세법 제25조②, 시행령 제41조①). 적격증빙 미수취 기업업무추진비 손금불산입.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
itemsYes[{amount: 1회 지출액(원), qualified: 적격증빙 여부, congratulatory: 경조금 여부}]

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_disallowanceA
Read-onlyIdempotent

업무무관자산·가지급금 관련 지급이자 손금불산입 — 가지급금 제외 판정·적수·가수금 상계·지급이자 손금불산입 순위까지. 언제: 업무무관자산이나 특수관계인 가지급금이 있을 때 지급이자 중 얼마를 손금불산입하는지, 어떤 대여금이 가지급금에서 빠지는지(시행규칙 제44조 각 호) 판정한다. 입력: 차입금별 [{interest, jeoksu | principal·days | rate, kind?, withholding?}] → loans, 업무무관자산 적수(원·일) → nonbusiness_jeoksu, 가지급금 [{대상 | 상대방, 사유, 금액, 지급일, 회수일? | movements, 기준일?, 관련 정보}] → advances, 법인 이름 → company, 관계 자료(related_judge 형식) → relations, 가수금 [{이름, 금액, 일자, 반환일?, 상계불가?}] → deposits, 사업연도(20162026) → year, 개시일·종료일 → fiscal_start·fiscal_end. 판정: ⓪특수관계인 — 가지급금에 상대방을 주면 company↔상대방을 법인세법 특수관계인(법 제2조12호, 영 제2조⑧ — 2019.2.12. 전 영 제87조①, 2019.2.12.2023.12.31. 영 제2조⑤) 각 호로 판정해(기준일: 기준일 또는 사업연도 종료일) 대상을 정한다 — 해당 없으면 비특수관계인, 법인이면 특수관계법인, 개인이면 officers·employees·stakes로 임원·직원·주주, 그 밖은 기타특수관계인. 임원·직원의 배우자 등이 지분 없이 상대방이면 relations.livelihood_shared의 생계 사실관계로 ⑧3호(생계를 함께하는 친족)를 판정 — 사실이 모자라 입력 확인 필요가 나오면 비특수관계인으로 넘기지 않고 확인할 항목·필요 자료를 돌려준다. 대상도 주면 대조만 하고 특수관계 여부(또는 규칙 제44조 6·7·7의2호에서 직원 여부)가 다르면 입력 확인 필요. ①차입금 구분 — 채권자불분명(영 제51조①)·비실명(영 제51조②)·건설자금(영 제52조)은 영 제55조 순위로 먼저 손금불산입하고, 기업구매자금대출·금융회사 등 제외 차입금(영 제53조④)과 함께 업무무관 산식의 지급이자·차입금에서 뺀다. ②가지급금 — 비특수관계인 대여는 제외, 규칙 제44조 각 호(미지급소득 소득세 대납은 총결정세액×미지급소득÷종합소득금액 한도, 직원 급료 가불은 월정급여 범위, 우리사주는 해당 회사 주식만, 중소기업 직원 주택자금 7의2호는 2020.1.1. 이후 개시 사업연도부터) 제외. ③적수 — 대여일 산입·회수일 불산입·말일 산입, 동일인 가수금 적수 상계(영 제53조③, 약정으로 상계 불가면 안 함 — 규칙 제28조②). ④업무무관 = 지급이자 × min(자산 적수, 차입금 적수) ÷ 차입금 적수(원 미만 절사). 결과: 순위별 손금불산입·소득처분(채권자불분명·비실명 대표자 상여·원천세 기타사외유출, 건설자금 유보, 업무무관 기타사외유출), 가지급금별 제외 판단, 동일인별 적수, 인정이자는 deemed_interest로 이어 계산할 movements 안내. 지원 20162026 사업연도. 지원 안 함: 일반차입금 건설자금이자 자본화 선택(법 제28조②), 업무무관자산 취득가액·적수 산정(영 제49조, 직접 적수 입력), 상대방 없이 대상만 준 가지급금의 특수관계 여부(입력 그대로 씀), 비소액주주등의 직원과 생계를 함께하는 친족(영 제2조⑧3호가목 중 주주의 직원)·대표이사 구분(officers에 대표 표시 없음 — 임원으로 봄), 금융회사 주된 수익사업 판단 — 해당하면 입력 확인 필요 또는 직접 적수 입력. 근거(법인세법 제28조, 시행령 제51조제53조·제55조·제106조, 시행규칙 제28조·제44조).

NameRequiredDescriptionDefault
yearNo사업연도(개시일이 속하는 연도, 2016~2026). advances·deposits를 넣으면 필요
loansYes차입금별 [{interest: 지급이자(원), jeoksu?: 차입금 적수(원·일) | principal·days | rate, kind?: 일반|채권자불분명|비실명|건설자금|기업구매자금|금융회사제외차입금, withholding?: 원천징수세액}]
companyNo가지급금을 지급한 법인 이름(relations 안의 법인). advances[].상대방으로 특수관계인 판정할 때 필요
advancesNo가지급금 등 [{대상: 대표이사|대표자|임원|직원|주주|특수관계법인|기타특수관계인|비특수관계인, 이름?(동일인 상계용), 사유: 업무무관대여|미지급소득세대납|국외투자법인비용대납|우리사주취득자금|퇴직금전환금|대표자상여소득세대납|급료가불|경조사비대여|학자금대여|주택자금대여|자산관리공사출자법인대여, 금액, 지급일, 회수일? | movements [{일자, 증감}], 총결정세액·미지급소득·종합소득금액?(미지급소득세대납), 월정급여?(급료가불), 해당법인주식?(우리사주), 중소기업·지배주주등?(주택자금)}]
depositsNo가수금 [{이름|대상, 금액, 일자, 반환일? | movements [{일자, 증감}], 상계불가?(상환기간·이자율 약정으로 상계 불가)}]
relationsNo특수관계 판정 자료 — related_judge와 같은 형식 {people, family, stakes, officers?, employees?, livelihood?, livelihood_shared?, influence?, group?, group_exempt?}. 예: {"people": {"㈜가람": {"구분": "법인"}, "김대표": {"구분": "개인"}}, "family": [], "stakes": [["김대표", "㈜가람", 0.6]], "officers": {"㈜가람": ["김대표"]}}
fiscal_endNo사업연도 종료일(YYYY-MM-DD). 생략 시 개시일 1년 뒤 전날
fiscal_startNo사업연도 개시일(YYYY-MM-DD). 생략 시 year-01-01
nonbusiness_jeoksuNo업무무관자산(영 제49조①) 적수 + 직접 계산한 가지급금 적수 합(원·일). advances로 가지급금을 넣으면 그 적수는 여기서 빼고 넣는다

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare this a read-only, idempotent, closed-world computation, and the description adds substantial context beyond them: the statutory ordering of disallowance (영 제55조), the resulting 소득처분 per category (대표자 상여·기타사외유출·유보), and a notable fallback behavior — it returns 입력 확인 필요 with required items instead of silently defaulting to 비특수관계인. Scope limits (2016~2026, no 취득가액 산정) are stated outright.

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

Conciseness3/5

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

It is front-loaded and clearly sectioned (언제 / 입력 / 판정 / 결과 / 지원 안 함 / 근거), which suits a complex statutory calculation. However, the '입력' block largely duplicates the 100%-coverage schema field-by-field, and the ⓪~④ rule narrative is dense enough to be a wall of text; some of that volume does not earn its place for tool selection or invocation.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so explicitly: 순위별 손금불산입 and 소득처분, 가지급금별 제외 판단, 동일인별 적수, and the movements handoff to deemed_interest. Combined with the exclusion list and the 입력 확인 필요 fallback, an agent has everything needed to decide, call, and interpret.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value by tying each parameter to a decision step (loans→①차입금 구분, advances→②가지급금 제외, deposits→③적수 상계, relations/company→⓪특수관계인 판정) and by noting that advances' 적수 must be excluded from nonbusiness_jeoksu. It does restate much of the schema's field lists, so it is not a full 5.

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

Purpose5/5

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

The opening line states a specific verb and resource (업무무관자산·가지급금 관련 지급이자 손금불산입) and enumerates the exact sub-judgments it performs (가지급금 제외 판정·적수·가수금 상계·손금불산입 순위). It is clearly distinguishable from siblings like deemed_interest or corporate_deemed_rent_income, and even names deemed_interest as the downstream continuation.

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

Usage Guidelines5/5

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

The '언제' clause gives an explicit trigger condition (업무무관자산이나 특수관계인 가지급금이 있을 때), and the '지원 안 함' section lists concrete exclusions (건설자금이자 자본화 선택, 업무무관자산 적수 산정, 상대방 없는 가지급금의 특수관계 판정, 금융회사 주된 수익사업). It also routes to related_judge format for the relations input and to direct 적수 input when out of scope.

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

nonresident_withholdingA
Read-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.

NameRequiredDescriptionDefault
amountYes금액(원)
income_kindYes소득 종류(비거주자·외국법인 국내원천) — 이자·배당·사용료·인적용역·기타
treaty_rateNo조세조약 제한세율(소수, 예: 0.15 = 15%). 생략 시 국내세율 적용
bond_interestNo채권 이자 여부 — 이자 소득에서만 의미, 특례 적용 필요 시 별도 확인
related_partyNo수취인이 국외지배주주일 가능성 — 이자 소득에서 과소자본 쟁점 표시 시 사용
recipient_typeYes수취인 구분 — 개인(비거주자) / 법인(외국법인)
residence_countryYes거주지국(ISO 2자 코드 또는 국명)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

official_property_priceA
Read-onlyIdempotent

부동산 공시가격 조회 — 주소(또는 PNU)로 개별공시지가(토지, 원/㎡)·공동주택가격(아파트, 세대별)·개별주택가격(단독)을 국토교통부 국가공간정보(브이월드)에서 가져온다. 상속·증여 보충적 평가(상증법 제61조①)와 양도세 기준시가(소득세법 제99조①1호)에 쓰는 값. 언제: 비상장주식 평가(unlisted_stock_valuation의 assets 기준시가), 상속·증여재산 평가(inheritance_gift_valuation의 supplementary_value), 양도세 기준시가가 필요할 때. 시가(매매·감정 사례)가 있으면 시가가 우선(법 제60조) — 이 도구는 공시가격만. 입력: 주소 → address(또는 pnu), 종류 → kind, 기준연도 → year, 토지 면적 → area_m2, 아파트 동·호 → dong·ho. 주의: 이 도구는 외부(브이월드)로 주소·PNU·연도를 보냄. 인증키 VWORLD_KEY가 필요(vworld.kr 오픈API 인증키, 국가중점API 포함) — 없으면 안내와 직접 입력 대안을 돌려줌. 결과: 기준연도·공시가격(토지는 ㎡당과 총액), 연도별 목록, 판단(필지 확인·평가 사용법·기준일), 근거.

NameRequiredDescriptionDefault
hoNo아파트만: 호(예: '1203')
pnuNo필지번호 19자리(법정동코드 10 + 산 여부 1 + 본번 4 + 부번 4)를 알면 직접
dongNo아파트만: 동(예: '101')
kindNo토지|아파트(공동주택)|단독주택 — 평소 말(땅·대지·연립·다세대·다가구)도 됨토지
yearNo공시 기준연도(1월 1일 기준). 비우면 조회되는 최신 연도. 평가기준일이 그 해 공시 전이면 전년도를 넣음
addressNo지번 주소 또는 도로명 주소(예: '서울특별시 강남구 역삼동 737', '서울 강남구 테헤란로 7길 22'). pnu를 알면 생략
area_m2No토지만: 면적(㎡) — 주면 공시지가 × 면적 총액을 계산

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld, but the description adds non-obvious behavior: the tool sends address/PNU/year to an external service (privacy/egress disclosure), requires a VWORLD_KEY credential, and returns guidance plus a manual-input fallback when the key is missing. It also previews the return payload (per-year list, judgment notes), 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.

Conciseness4/5

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

Dense but well-structured with explicit 언제/입력/주의/결과 labels, and the verb+resource is front-loaded in the first clause. It is longer than strictly necessary and the input-mapping line largely duplicates the schema, costing a bit of tightness.

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

Completeness5/5

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

For a 7-parameter, all-optional, open-world tool with no output schema, the description covers everything an agent needs: data source, legal basis for the values, credential prerequisite and failure fallback, and an outline of the returned fields. Nothing material is left to inference.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all seven parameters including the year-is-prior-year nuance and the 토지-only area_m2 total calculation. The description's '입력' line just maps the same parameters, adding little beyond the schema; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource — fetch officially published prices (공시가격) for land, apartments and detached houses from the VWorld national spatial data service — and names the three price types with units. It also draws a clear boundary against market value ('시가가 있으면 시가가 우선 — 이 도구는 공시가격만'), so an agent can distinguish it from sibling valuation tools.

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

Usage Guidelines5/5

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

The '언제' section explicitly names the consuming tools (unlisted_stock_valuation assets, inheritance_gift_valuation supplementary_value) and the capital-gains standard-price scenario, and the '시가 우선' clause supplies an explicit when-not. This is routing-level guidance, not implied usage.

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

other_income_aggregateA
Read-onlyIdempotent

거주자의 기타소득 항목을 원래 사실관계로 받아 ① 항목별 과세 구분(종합/분리/비과세/제외) ② 비과세·필요경비 ③ 소득금액·원천징수세액 ④ 종합소득 합산액과 기납부세액까지 계산한다(소득세법 제21조·제12조·제14조③·제37조·제84조·제127조·제129조, 시행령 제18조②·제21조·제87조). 언제: 종합소득세 신고에서 기타소득의 과세 구분·필요경비·원천징수세액·종합소득 합산액을 계산할 때. 입력: 귀속연도(20162026) → year, 기타소득 항목 목록 [{kind, amount, ...}] → items. kind 허용값(어휘 기반, 별칭 포함): · 산업재산권대여 — 광업권·어업권·산업재산권·산업정보 등을 양도·대여하고 받는 금품 · 공익사업지상권대여 — 공익사업 관련 지역권·지상권 설정·대여 대가(필요경비율은 산업재산권대여와 같음, 공익사업과 무관한 지상권 대여는 사업소득) · 서화골동품양도 — 개당·점당 6천만원 이상 서화·골동품 양도(필요경비: 2020 과세기간부터 1억 이하 90%·초과분 80%, 2019년까지 80%, held_years≥10이면 90% — 2020.2.11. 개정 부칙 제36조, business_setup=true(2021 사업장 갖춤)면 사업소득이라 제외, museum=true 박물관·미술관 양도 비과세, living_domestic_artist=true 생존 국내 작가 작품 과세 제외, 무조건 분리과세 20%) · 일시적인적용역 — 고용관계 없이 일시적으로 제공한 강연·방송 해설·자문 등 인적용역의 대가 (산업재산권대여·공익사업지상권대여·일시적인적용역 필요경비율: 2017 80%, 2018은 receipt_date(받은 날) 필수 — 2018.3.31.까지 80%·2018.4.1.부터 70%, 2019 60%, 시행령 제87조) · 뇌물 — 뇌물로 받은 금품(몰수·추징 확정액은 forfeited로 입력, 기본 0) · 위약금·배상금 — 계약의 위약·해약으로 받는 위약금·배상금(계약금 대체분은 deposit_substituted로 입력, 기본 0, 주택입주 지체상금 제외. 계약금 대체분은 원천징수되지 않아 2019년 이전에는 선택적 분리과세 대상 아님 — 제14조③8호가목 2020.1.1. 개정) · 주택입주지체상금 — 주택 입주 지연으로 받는 지체상금 · 연금외수령 — 연금계좌의 세액공제분·운용수익을 연금 외의 방식으로 수령한 금액(무조건 분리과세) · 직무발명보상금_퇴직후 — 퇴직 후 사용자등으로부터 받는 직무발명보상금(제21조①22호의2, 같은 해 재직 중 받은 비과세액은 employment_exempt_used로 필수 입력, 비과세 연 한도 20172018 300만·20192023 500만·2024~ 700만(시행령 제18조②), 2016은 22호의2가 없어 계산하지 않음, 선택적 분리과세는 2020~) · 배임수재 — 배임수재로 받은 금품(무조건 종합과세, 원천징수 제외, 소득세법 제21조①24호) · 알선수재 — 알선수재로 받은 금품(무조건 종합과세, 원천징수 제외, 소득세법 제21조①24호) · 복권당첨금 — 복권 당첨금(제21조①2호, 제14조③8호라목 무조건 분리과세, 필요경비는 actual_cost(구입비)만, 원천징수 20%·소득금액 3억원 초과분 30%(제129조①6호가목). 과세최저한: year≥2023은 당첨금(분할 지급이면 합계) 건별 200만원 이하(제84조2호), 그 전은 소득금액 건별 5만원 이하) · 승마투표권환급금 — 승마·경륜·경정·소싸움·체육진흥투표권 환급금(제21조①4호, 제14조③8호마목 무조건 분리과세, 원천징수 20%·소득금액 3억원 초과분 30%). unit_bet=적중된 투표권의 단위투표금액(필요경비, 제37조①1호, 기본 0), per_bet_refund=적중한 개별투표당 환급금(기본 amount), ticket_total=건별 권면 표시 금액 합계. 과세최저한(제84조1호): ticket_total≤10만원이고 (개별투표당 환급금≤10만원 또는 (≤unit_bet×100이면서 ≤200만원)) — 가·나목에 해당하면 ticket_total 필수 · 슬롯머신당첨금 — 슬롯머신·투전기 등 당첨금품(제21조①14호, 제14조③8호마목 무조건 분리과세, 원천징수 20%·소득금액 3억원 초과분 30%). stake=당첨 당시 투입한 금액(필요경비, 제37조①2호, 기본 0). 당첨금 건별 200만원 이하 과세최저한(제84조2호) 결과: 판단(항목별 과세 구분·근거)·결과(종합소득 합산액·기납부세액·분리과세·비과세·선택적 분리과세 가능)·계산(항목별 소득금액·원천징수세액).

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
itemsYes기타소득 항목 [{kind, amount, ...}] — kind: 산업재산권대여·공익사업지상권대여·서화골동품양도·일시적인적용역·뇌물·위약금·배상금·주택입주지체상금·연금외수령·직무발명보상금_퇴직후·승마투표권환급금·슬롯머신당첨금

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (readOnly/idempotent/non-destructive, closed-world), the description discloses year-conditional behavior (2016 has no 제21조①22호의2 so it is not computed; 선택적 분리과세 only from 2020), conditional required inputs (receipt_date mandatory for 2018, employment_exempt_used, forfeited, deposit_substituted), and the statutory basis for each treatment. It also states the return structure (판단 / 결과 / 계산), which matters because no output schema exists.

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

Conciseness3/5

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

The 언제/입력/결과 labeling and per-kind bullets are well front-loaded and scannable. The cost is density: long statutory citation chains (제21조·제12조·제14조③·제37조·제84조·제127조·제129조) and parenthetical 부칙 references add legal noise that the calling agent rarely needs to select or invoke the tool correctly.

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

Completeness4/5

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

For a complex, year-varying tax calculation with no output schema, the definition covers inputs, enum vocabulary, conditional fields, and the shape of the result — enough to call it correctly. It stops short of describing behavior for unrecognized kind values or malformed items, which is the main remaining gap.

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

Parameters5/5

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

Although coverage is nominally 100%, the items array is an untyped `{}` with no nested schema, so the description carries the entire burden: it enumerates the kind vocabulary with aliases and defines per-kind fields (held_years, business_setup, museum, living_domestic_artist, actual_cost, unit_bet, per_bet_refund, ticket_total, stake) that appear nowhere in the schema. This is genuinely additive, not repetition.

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

Purpose5/5

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

The first sentence names a specific action (compute) and a precisely bounded scope: 기타소득 items classified into 종합/분리/비과세/제외 with 필요경비, 원천징수세액, and 종합소득 합산액. The income category (기타소득) plus the enumerated output fields distinguish it cleanly from siblings like financial_income_aggregate, pension_income, 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.

Usage Guidelines4/5

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

The '언제:' line gives a concrete trigger (종합소득세 신고에서 기타소득의 과세 구분·필요경비·원천징수세액·합산액 계산). However, it never names an alternative tool or states when NOT to use it — e.g. that capital gains or pension withdrawals route to capital_gains_income / pension_income siblings instead.

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②). 보유자→법인 직접·간접 보유비율을 계산한다(간접은 단계별 직접보유비율의 곱, 경로별 합산, 순환출자는 단계별 모두 반영).

NameRequiredDescriptionDefault
holderYes보유자(이름)
stakesYes직접보유비율 목록 [[보유자, 법인, 지분율(0~1)]]. 예: [["김갑", "㈜대한", 0.30]]
targetYes대상 법인(이름)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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

There is no output schema, so the description 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.

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds 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.

Purpose4/5

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

The description states a specific verb and resource ('보유자→법인 직접·간접 보유비율을 계산한다') 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.

Usage Guidelines4/5

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.

pension_account_withdrawalA
Read-onlyIdempotent

연금계좌 연금수령한도·인출순서 계산(소득세법 시행령 제40조의2·제40조의3, 2024.1.1. 시행본). 언제: 연금계좌에서 인출할 때 연금수령분(연금소득)과 연금외수령분(기타소득)을 구분한다. 입력: year — 귀속연도(과세기간) birth_date — 출생일 join_date — 연금계좌 가입일 start_request_date — 연금수령 개시 신청일 balance_at_period_start — 과세기간 개시일 현재 평가액(개시 신청 연도는 신청일 현재) withdrawal — 당해 인출액 contributions_total — 납입액 합계 contributions_not_deducted — 세액공제 받지 못한 납입액(과세제외금액) deferred_retirement_income — 이연퇴직소득(있으면 가입 5년 요건 생략) investment_income — 운용수익 결과: 연금수령분·연금외수령분 각 {과세제외금액, 이연퇴직소득, 그밖}, 사적연금_총연금액(종합과세 대상 사적연금), 이연퇴직_연금수령(연금소득·분리과세), 기타소득_연금외수령, 계산.연금수령연차·연금수령한도, 판단. 주의: contributions_not_deducted > contributions_total, 음수, 날짜 형식 오류 → error.

NameRequiredDescriptionDefault
yearYes귀속연도(과세기간)
join_dateYes연금계좌 가입일(YYYY-MM-DD)
birth_dateYes출생일(YYYY-MM-DD)
withdrawalYes금액(원)
investment_incomeNo금액(원)
start_request_dateYes연금수령 개시 신청일(YYYY-MM-DD)
contributions_totalYes금액(원)
balance_at_period_startYes금액(원)
contributions_not_deductedYes금액(원)
deferred_retirement_incomeNo금액(원)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds what annotations cannot — the statutory basis, the deterministic nature of the calculation, and explicit error conditions (contributions_not_deducted > contributions_total, negatives, malformed dates). It does not mention rounding/unit conventions or how partial-year cases behave, but that is a minor gap given annotation coverage.

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

Conciseness4/5

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

Front-loaded with a one-line purpose, then '언제 / 입력 / 결과 / 주의' sections — easy to scan. The 입력 block largely mirrors the schema titles, so a few lines are redundant, but the added glosses on each amount justify keeping the list.

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

Completeness4/5

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

For a 10-parameter, no-output-schema calculation tool, the description supplies the return field names (사적연금_총연금액, 이연퇴직_연금수령, 기타소득_연금외수령, 계산.연금수령연차·연금수령한도, 판단) and the error surface, which the schema cannot convey. Only minor gaps remain, such as units/rounding and required Korean date format ('YYYY-MM-DD' is in the schema but the 주의 line only says 날짜 형식 오류).

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: contributions_not_deducted is glossed as 세액공제 받지 못한 납입액(과세제외금액) while the schema only says '금액(원)', balance_at_period_start gains the valuation-date rule for the start-request year, and deferred_retirement_income is flagged as waiving the 5-year join requirement. These are behavioral rules the schema does not encode.

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

Purpose5/5

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

States a specific verb+resource with legal grounding: computes the pension withdrawal limit and withdrawal ordering (소득세법 시행령 제40조의2·제40조의3), and the '언제' line scopes it to splitting 연금수령분 vs 연금외수령분. This clearly separates it from the sibling pension_income tool, which handles pension income generally rather than withdrawal-limit/ordering arithmetic.

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

Usage Guidelines4/5

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

The '언제:' line gives an explicit trigger condition — use when a withdrawal must be classified into annuity vs non-annuity portions. It does not name alternatives (e.g. pension_income, retirement_income_tax) or state when not to use it, so routing still requires inference from the sibling names.

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

pension_incomeA
Read-onlyIdempotent

연금소득금액 계산. 언제: 연금소득의 종합과세·분리과세 구분과 연금소득금액을 구할 때. 입력: 귀속연도 → year, 공적연금 과세분 → public_pension, 사적연금 → private_pension, 퇴직소득 재원 연금 → retirement_source_pension, 의료목적 인출 → medical_withdrawal, 사적연금 선택 → private_choice, 공적연금 상세 → public_pension_detail(수령액·환산소득·과세제외기여금). 결과: 총연금액·분리과세연금소득·연금소득공제·연금소득금액·안내·근거. 공적연금 과세분은 public_pension_detail로 계산하거나 직접 입력.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
private_choiceNo사적연금 처리 선택(기본 '분리')분리
public_pensionNo공적연금 과세분(2002년 이후 기여분 기준 금액, 원). public_pension_detail 사용 시 0이어야 함
private_pensionNo연금계좌 연금수령분 중 퇴직소득 재원·의료목적 인출 외(원)
medical_withdrawalNo의료목적·부득이한 사유 인출액(원, 항상 분리과세)
public_pension_detailNo{수령액, 환산소득_2002이후, 환산소득_전체, 과세제외기여금?} — 공적연금 과세분 = max(0, int(수령액 × 환산소득_2002이후 ÷ 환산소득_전체) − 과세제외기여금) (소득세법 시행령 제40조①, 국민연금 기준). 과세제외기여금: 연금보험료 소득공제를 받지 않은 기여분(소득세법 시행령 제40조 과세제외기여금), 기본 0. 예: {"수령액":45000000, "환산소득_2002이후":380000000, "환산소득_전체":480000000, "과세제외기여금":5625000}
retirement_source_pensionNo퇴직소득 재원 연금수령액(원, 항상 분리과세)

TDQS

A3.6/5.0
Behavior3/5

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), so this pure calculator needs little more. The description does add value by enumerating return fields (총연금액·분리과세연금소득·연금소득공제·연금소득금액·안내·근거) in the absence of an output schema, but says nothing about rounding, units, or edge cases 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.

Conciseness4/5

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

Front-loaded purpose followed by labeled 언제/입력/결과 sections — easy to scan and no filler prose. The '입력:' block does restate parameter names that the schema already documents, which is mild redundancy.

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

Completeness4/5

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

For a 7-parameter tax calculator with no output schema, the description supplies the return-field list and explains the dual input path for public pension taxation, which is what an agent most needs. Remaining gaps (units, rounding, treatment when both public_pension and detail are supplied) are minor.

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

Parameters3/5

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

Schema description coverage is 100%, including a full formula for public_pension_detail, so the schema already carries the semantics. The description's '입력:' list mostly re-labels parameters, though it does add the routing hint that 과세분 can be computed via public_pension_detail or entered directly — a point the schema only states as a constraint, not as a choice.

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

Purpose4/5

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

States a specific verb+resource ('연금소득금액 계산') and narrows scope to the 종합과세/분리과세 split, which clearly separates it from aggregate-income siblings like financial_income_aggregate and other_income_aggregate. It never names the nearest sibling (pension_account_withdrawal), so differentiation is implicit rather than explicit.

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

Usage Guidelines4/5

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

The '언제:' line gives a clear triggering condition (when you need the comprehensive/separate taxation classification and the pension income amount). No when-not conditions or named alternatives are given, 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.

personal_deductionA
Read-onlyIdempotent

종합소득 인적공제(기본공제·추가공제). 언제: 종합소득세 신고에서 기본공제·추가공제 금액을 구할 때. 입력: 귀속연도 → year, 납세자 정보 → taxpayer, 부양가족 목록 → persons. 결과: 기본공제·추가공제·인적공제·사람별 내역·근거. 기본공제 1인당 150만원, 추가공제(경로우대 100만·장애인 200만·부녀자 50만·한부모 100만).

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
personsYes[{name, relation, birth_year, income_items?, income?, wage_only_gross?, disabled?, cohabiting?}] — name: 사람 표시 이름(문자열, 중복 불가). relation: 공제대상자와의 관계. 허용값: 배우자·직계존속·직계비속·입양자·형제자매·수급자·위탁아동. 문항 표현 그대로 '아들'·'딸'·'자녀'는 '직계비속', '부친'·'모친'·'부모'는 '직계존속'으로 적을 것. birth_year: 출생연도(정수, 나이 계산용). income_items: [{kind, amount}] — 부양가족 소득 종류·금액 목록. kind 허용값: 근로_총급여·사업소득금액·이자·배당·공적연금·사적연금·기타소득금액·양도소득금액·퇴직소득금액·전통주_제조소득_농어촌·비과세·공적연금_과세제외. income_items를 쓰면 income·wage_only_gross는 함께 입력할 수 없음. disabled: 장애인 여부(bool). cohabiting: 동거 여부(bool, 기본 True, 형제자매·수급자는 동거 필요). 소득 없음 → income_items: []. 근로소득만 있음 → income_items: [{"kind": "근로_총급여", "amount": 총급여}]. 예시: [{"name":"부친","relation":"부친","birth_year":1938,"income_items":[{"kind":"공적연금_과세제외","amount":30000000}]}]
taxpayerYes{sex, birth_year, has_spouse, comprehensive_income, disabled?, household_head?} — sex: '남'|'여'. birth_year: 출생연도(정수). has_spouse: 배우자 유무(bool). comprehensive_income: 종합소득금액(원, 기본공제 한도 판단용). disabled: 장애인 여부(bool, 기본 무시). household_head: 세대주 여부(bool, 부녀자 공제 판단용).

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, and the description adds real substance beyond them: it declares the return fields (기본공제·추가공제·인적공제·사람별 내역·근거) and the underlying statutory rates (1인당 150만원, 경로우대 100만·장애인 200만·부녀자 50만·한부모 100만). It still omits eligibility thresholds and how conflicts are resolved, but nothing contradicts 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.

Conciseness5/5

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

Four terse lines with an explicit 언제/입력/결과 structure, front-loading the purpose before the input mapping and legal rates. Every sentence carries information; nothing is padding.

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

Completeness4/5

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

With three required parameters, nested objects, no output schema, and a read-only safety profile, the description covers purpose, input mapping, result shape and rates — exactly what an agent needs to call it. It stops short of the age/income eligibility rules that materially affect which persons qualify, which keeps it from a 5.

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

Parameters3/5

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

Schema coverage is 100% and the schema itself is very rich (relation enums, income_items kinds, mutual-exclusion rule, examples), so the description's '입력:' line only restates year→귀속연도, taxpayer→납세자, persons→부양가족 목록. It adds labeling convenience but no semantics the schema does not already carry, matching the baseline-3 case.

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

Purpose4/5

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

The description names the exact resource and its subcomponents (종합소득 인적공제: 기본공제·추가공제) and the '언제' clause supplies the verb by stating it computes the basic/additional deduction amounts in a comprehensive income tax return. This is enough to distinguish it from siblings like income_adjustment_total, special_tax_credit or income_tax, though it never explicitly contrasts itself with a neighboring tool.

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

Usage Guidelines4/5

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

The '언제: 종합소득세 신고에서 기본공제·추가공제 금액을 구할 때' line gives a clear, concrete trigger condition for use. There is no when-not guidance and no named alternative for cases where the agent instead needs a credit, an income adjustment, or total tax, so the routing duty is only half done.

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=법인|부가|소득. 결과: 각 입력키의 의미·단위·필수 여부를 목록으로 반환한다.

NameRequiredDescriptionDefault
taxYes사전검토 세목('법인'|'부가'|'소득')

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

religious_incomeA
Read-onlyIdempotent

종교인소득(소득세법 제21조①26호, 2018.1.1. 시행) 기타소득 계산 — 비과세(제12조5호아목) → 필요경비 표(시행령 제87조3호) → 기타소득금액 → 선택적 분리과세 가능 여부·원천징수·신고 안내. 언제: 목사·신부·승려 등 종교관련종사자가 종교단체로부터 받은 사례비 등의 종교인소득금액을 기타소득으로 계산할 때(20182026 귀속). 입력: 귀속연도(20182026, 2016·2017은 과세 전이라 오류) → year, 받은 금액 총액 → amount, 비과세 항목 → scholarship(학자금)·meals_in_kind(현물 식사)·meal_allowance+meal_months+meal_provided(식사대 월 10만원, 2023~ 20만원)· vehicle_allowance+vehicle_months+vehicle(자가운전보조금 월 20만원, 본인명의임차는 2025~)·expense_reimbursement(일직·숙직료·실비 여비·재해 지급액)· religious_activity_fund(종교활동비)·childcare_allowance+childcare_months+childcare_children(출산·보육 월 10만원, 2024~ 20만원, 2026~ 자녀 1명당 20만원)·housing_benefit(사택), 실제 필요경비 → actual_expense, 원천징수 여부 → withheld, 계산 경로 → route(기타소득|근로소득). 결과: 비과세 항목별·과세대상 받은 금액·필요경비(표 금액 vs 실제)·기타소득금액·선택적 분리과세 가능 여부(제14조③8호가목 — 26호 열거, 300만원 이하·원천징수된 소득)·원천징수·신고 안내·근거·연도표. 지원하지 않음: 근로소득 선택 경로 계산(earned_income_gross_pay + wage_income_tax로 계산), 간이세액표 월별 원천징수세액·연말정산 세액, 비과세 요건(학자금 대상 학교, 사택 요건) 자체의 판정, 퇴직소득 해당 여부(시행령 제42조의2④4호), 다른 기타소득과의 300만원 합산 판정.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
routeNo기타소득(기본) | 근로소득(근로소득으로 원천징수·신고를 선택한 경우 — 이 도구는 계산하지 않고 안내)기타소득
amountYes해당 과세기간에 종교단체로부터 받은 금액 총액(원, 아래 비과세 지급액 포함)
vehicleNo차량: 본인소유|본인명의임차(2025~ 비과세)|기타
withheldNo종교단체가 원천징수(간이세액표·연말정산)를 했는지 — 선택적 분리과세·신고의무 판단용, 모르면 생략
meal_monthsNo식사대를 받은 개월 수(1~12)
scholarshipNo학자금(원) — 종교 활동 관련 교육·훈련을 위한 학교·평생교육시설 입학금·수업료 등(시행령 제19조①), 전액 비과세
meal_providedNo식사(현물)를 제공받았는지 — true면 식사대는 과세(시행령 제19조②2호)
meals_in_kindNo종교단체가 현물로 제공한 식사·음식물(원), 전액 비과세(시행령 제19조②1호)
actual_expenseNo실제 소요된 필요경비(원) — 표 금액보다 크면 이 금액(시행령 제87조3호 단서)
meal_allowanceNo식사대(원)
vehicle_monthsNo자가운전보조금을 받은 개월 수(1~12)
housing_benefitNo사택 제공 이익(원, 시행규칙 사택 요건 충족분), 전액 비과세
childcare_monthsNo출산·보육 지급액을 받은 개월 수(1~12)
vehicle_allowanceNo자가운전보조금(원) — 실제 여비 대신 종교단체 지급기준에 따라 받은 금액
childcare_childrenNo출산 자녀 또는 과세기간 개시일 기준 6세 이하 자녀 수(0이면 전액 과세)
childcare_allowanceNo출산·보육 관련 지급액(원, 본인·배우자 출산 또는 6세 이하 자녀 보육)
expense_reimbursementNo일직·숙직료, 실비 정도의 여비, 재해로 받은 지급액(원), 전액 비과세(시행령 제19조③1·2·4호)
religious_activity_fundNo종교활동비(원) — 규약·의결기구 결정 지급기준에 따라 종교 활동에 쓰도록 받은 금액·물품, 전액 비과세(시행령 제19조③3호·제12조18호)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds real behavioral detail: 2016·2017 inputs are rejected as pre-taxation errors, route=근로소득 is not computed but only guided, and the result payload is enumerated (비과세 항목별, 필요경비 표 vs 실제, 분리과세 판정, 신고 안내). It stops short of stating rounding/precision rules for 원 amounts or what happens with inconsistent field combinations (e.g., meal_allowance without meal_months).

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

Conciseness5/5

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

Dense but front-loaded and cleanly sectioned (언제 / 입력 / 결과 / 지원하지 않음), with the legal chain 비과세 → 필요경비 → 기타소득금액 → 분리과세 stated first. No filler sentences; every clause carries a rule, a parameter mapping, or an exclusion.

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

Completeness5/5

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

For a 19-parameter calculator with no output schema, the description fully specifies the return contents, the year range and its error behavior, and the boundary against sibling tools. An agent can call it and interpret the response without consulting anything else.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already defines every one of the 19 parameters; the description's added value is the year-varying thresholds that the schema only partially carries (식사대 월 10만원→2023~ 20만원, 자가운전보조금 본인명의임차 2025~, 보육 월 10만원→2024~ 20만원→2026~ 자녀 1명당 20만원) and the mapping of 비과세 items to their statutory basis. That justifies going above the 3 baseline, but it mostly restates the schema field list.

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

Purpose5/5

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

States a specific verb (계산/calculate) and a precise resource (종교인소득 → 기타소득), with the governing statute cited (소득세법 제21조①26호). It distinguishes itself from the earned-income siblings by naming earned_income_gross_pay + wage_income_tax as the route it does not compute.

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

Usage Guidelines5/5

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

The '언제' line gives the exact triggering fact pattern (목사·신부·승려 receiving 사례비 from a 종교단체, 2018–2026 귀속) and the '지원하지 않음' block explicitly routes excluded cases (근로소득 route, 간이세액표, 비과세 요건 판정, 퇴직소득, 300만원 합산) elsewhere. When-to-use, when-not-to-use, and alternatives are all present.

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

retirement_allowance_adjustmentA
Read-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?, book_paid?(운용자산 지급 중 장부 퇴직연금충당금 상계분), dc_transferred_allowance?}. 운용자산에서 퇴직금을 지급한 해에는 장부 퇴직연금충당금 상계분(book_paid)과 퇴직급여충당금 상계분(paid_pension)을 나눠 넣어야 세무상 연금충당금 잔액이 맞는다. 결과: 세무조정(과목·조정 익금산입/손금불산입/손금산입·금액·소득처분 유보/△유보), 소득금액_순영향, 계산(세무상 잔액·한도). 입력이 모자라거나 장부 증감이 맞지 않으면 error.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
salaryNo당기 총급여액(원) {total: 전체 임원·직원 총급여, dc_members?: 확정기여형 퇴직연금 설정자분, not_eligible?: 퇴직급여 지급대상 아닌 자(예: 규정상 1년 미만 근속자)분} — 당기 설정액이 있으면 필수
pensionNo확정급여형 퇴직연금(원) {asset_closing: 퇴직연금운용자산 기말잔액, prior_deducted: 세무상 퇴직연금충당금 기초잔액(이미 손금산입한 부담금 누계, △유보), book_provision?: 결산에 계상한 퇴직연금충당금(신고조정이면 0), book_paid?: 당기 퇴직연금운용자산에서 지급하고 장부 퇴직연금충당금과 상계한 금액(퇴직급여충당금과 상계한 몫은 allowance.paid_pension), dc_transferred_allowance?: 확정기여형 전환자의 설정 전 기계상 퇴직급여충당금} — 없으면 퇴직연금 조정 생략
estimateNo기말 퇴직급여추계액(원) {lump_sum: 일시퇴직기준, actuarial?: 보험수리기준(영 제44조의2④1호의2 금액)} — 설정액이나 퇴직연금이 있으면 필수
allowanceYes장부상 퇴직급여충당금(원) {opening: 기초, closing: 기말, provision?: 당기 설정(손비 계상), paid_cash?: 회사가 직접 지급하고 충당금과 상계, paid_pension?: 퇴직연금운용자산에서 지급하고 충당금과 상계, other_increase?: 합병·사업양수 승계 등 설정 아닌 증가} — 생략 키는 0, 기초+증가−감소=기말이어야 함
conversion_fundNo국민연금 퇴직금전환금 기말잔액(원)
prior_disallowedYes기초 퇴직급여충당금 부인누계(유보 잔액, 원)
succeeded_disallowedNoother_increase 중 합병 등으로 승계한 부인누계(유보, 원)

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, so the safety profile is covered; the description goes further by declaring the return content (세무조정 과목·익금산입/손금불산입/손금산입, 소득처분 유보/△유보, 소득금액 순영향, 세무상 잔액·한도) and an explicit error condition when inputs are insufficient or book increases/decreases don't reconcile. Since no output schema exists, that disclosure carries real weight. It stops short of stating units beyond 원 or any limits, but the behavioral picture is largely complete.

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

Conciseness3/5

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

The 언제/입력/결과 structure is good and front-loaded with purpose before detail. However, the '입력:' section largely restates field-by-field what the schema descriptions already say at 100% coverage, which is duplicated payload rather than added signal.

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

Completeness4/5

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

For an 8-parameter tool with nested objects and no output schema, the description covers the computation scope, the input contract, the result shape and the failure mode. The main residual gap is the shape of the 계산 section's internal fields (세무상 잔액·한도), which is named but not itemized.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns the extra point by adding decision rules the schema does not state, notably 'estimate — 큰 금액을 씀' and the requirement to split book_paid (퇴직연금충당금 상계분) from allowance.paid_pension (퇴직급여충당금 상계분) so the tax-basis pension balance reconciles. It also clarifies salary exclusions for 확정기여형 설정자 and 지급대상 아닌 자.

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

Purpose4/5

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

The description gives a specific verb+resource ('퇴직급여충당금·확정급여형 퇴직연금충당금 세무조정') and pins the scope to concrete statutory articles (법인세법 제33조, 시행령 제44조의2·제60조). The domain is far narrower than siblings like retirement_income_tax or pension_account_withdrawal, but no sibling is ever named or excluded, so the agent must infer the boundary from the legal citation alone.

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

Usage Guidelines4/5

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

The '언제:' block explicitly lists the three triggering scenarios (한도초과, 상계·부인액 추인, 퇴직연금 부담금 손금산입 한도 동시 계산), which is exactly the context an agent needs to route here. There is no 'when not to use' statement or named alternative for overlapping tasks such as retirement_income_tax.

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

retirement_income_taxA
Read-onlyIdempotent

퇴직소득세(근속연수공제·환산급여 방식). 언제: 퇴직금(퇴직급여)을 지급할 때 퇴직소득세를 계산한다. 입력: 퇴직소득금액(퇴직급여, 비과세 제외, 원) → income, 근속연수(160년) → years_of_service, 퇴직한 해 → retire_year(기본 2025). 연도: 근속연수공제는 2023.1.1. 이후 퇴직 개정표(100만·200만·250만·300만), 2022년까지는 구표(30만·50만·80만·120만). 기본세율은 퇴직한 해 표. 지원하지 않음: 20162019년 퇴직(종전·개정 방식 세액을 비율로 섞는 경과 부칙, 법률 제12852호). 결과: 퇴직소득세, 근거(소득세법 제48조·제55조②). Retirement income tax (근속연수공제·환산급여 방식).

NameRequiredDescriptionDefault
incomeYes퇴직소득금액(퇴직급여, 비과세 제외, 원)
retire_yearNo퇴직한 해(2020~2026). 근속연수공제표(2023 개정)·기본세율표가 이 해 기준
years_of_serviceYes근속연수(1~60년)

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the read-only/idempotent annotations, the description discloses year-dependent behavior: the 2023 service-year deduction table versus the pre-2023 table, and the basic tax rate tied to the retirement year. It also clearly flags that 2016–2019 retirements are unsupported, which is valuable behavioral context, though it does not detail output precision or rounding.

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

Conciseness5/5

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

The description is front-loaded and clearly structured with 언제, 입력, 연도, 지원하지 않음, and 결과 sections. Almost every sentence carries operational value, and the final English gloss is only a minor redundancy.

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

Completeness4/5

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

For a complex tax calculation with no output schema, the description covers inputs, applicable year rules, unsupported periods, and the main result fields. It could be slightly more complete by explaining the output shape or any error conditions, but it is sufficient for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful interpretation: income is retirement pay excluding non-taxable amounts, years_of_service is 1–60, and retire_year defaults to 2025 and controls which deduction and rate tables apply. It also clarifies the otherwise conflicting schema minimum of 2016 by saying 2016–2019 is unsupported.

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

Purpose5/5

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

The description states a specific verb and resource: calculating 퇴직소득세 using the 근속연수공제·환산급여 method. It also specifies the triggering event, retirement benefit payment, so an agent can distinguish this from sibling tools such as retirement_allowance_adjustment or pension_income.

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

Usage Guidelines4/5

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

It explicitly says when to use the tool: when retirement pay is paid and retirement income tax must be calculated. It also excludes unsupported 2016–2019 retirements, but it does not name alternative sibling tools for those cases or other related calculations.

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로 먼저 확인. 결과: 오류 의심·이상 없음·자료 부족·사실 확인 필요.

NameRequiredDescriptionDefault
taxNo세목('법인'|'부가'|'소득'), 생략 시 전체
dataYes신고서 입력키·값 사전(dictionary). 입력키는 precheck_schema로 확인

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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에서 표를 추출해 사전검토한다.

NameRequiredDescriptionDefault
pdf_pathYesPDF 파일 경로

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_returnA
Read-onlyIdempotent

간이과세자 부가가치세 확정신고 차가감납부세액 계산(부가가치세법 제63조·제68조의2·제69조·제46조). 언제: 간이과세자의 과세기간(1.1~12.31) 부가가치세 확정신고 시 차가감납부세액을 원래 사실관계에서 계산한다. 입력: · 원장: ledger={공급:[{항목, 금액}], 매입:[{항목, 금액}]}. 항목명 → 역할 매핑은 어휘 간이과세자_원장항목.판단.공급/매입에서 읽음(항목명에 키워드가 포함되면 해당 역할). 공급 금액 전부 합(total), 공제 대상 합(카드발급), 마일리지 합(자기마일리지)으로 변환. 매입도 같은 식으로 변환. 대손 확정액(기본 0) → bad_debt_confirmed, 직전연도 합계 → prior_year_supplies, 예정부과 고지세액 → prepaid_assessed. 결과: 판단(항목·결론·근거)·계산(과세표준·부가가치율·납부세액·공제·가산세)·결과(납부의무면제·차가감납부세액)·산식·근거.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
ledgerYes원장형 입력 {공급: [{항목, 금액}], 매입: [{항목, 금액}]} — 금액은 공급대가(부가세 포함). 공급 항목이 없으면 error. 항목명은 어휘 간이과세자_원장항목의 키워드로 역할을 정함
business_typeYes업종 — 어휘 간이과세자_납부세액.적용[].판단.부가가치율 키(소매업·음식점업·제조업·숙박업·건설업·부동산임대업·그 밖의 서비스업 등)
prepaid_assessedNo예정부과 고지세액
bad_debt_confirmedNo대손 확정액(기본 0, 납부세액에 영향 없음 — 판단에 명시)
prior_year_suppliesNo직전연도 공급대가 합계(원) — 세금계산서 미수취 가산세 판정에만 씀. 미수취 매입이 없으면 생략 가능

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description goes further by disclosing that bad_debt_confirmed does not affect the payable amount but is surfaced in 판단, and by describing the shape of the returned judgment/calculation/result blocks. It does not state failure modes (e.g., missing 공급 items) in the prose, which is left to the schema.

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

Conciseness4/5

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

Front-loaded with the statutory purpose, then organized into 언제/입력/결과 blocks, so an agent can scan it. The 입력 block partly repeats the schema, which costs some density, but no sentence is pure filler.

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

Completeness5/5

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

There is no output schema, yet the description names the returned sections (판단·계산·결과·산식·근거), and for a 6-parameter nested-object tool it covers the trigger, the input derivation, and the outputs. Nothing essential for calling it correctly is missing from the definition as a whole.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already defines all six parameters; the description mainly restates them. It does add real meaning for ledger by explaining the 항목명-to-role mapping via the 간이과세자_원장항목 vocabulary and how amounts are bucketed into total/카드발급/자기마일리지, but that is the only genuine supplement, keeping it at the baseline-plus level.

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

Purpose4/5

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

Names a specific computation (간이과세자 부가가치세 확정신고 차가감납부세액 계산) with the governing statutory articles, so the resource and output quantity are unambiguous. It does not explicitly contrast itself with near siblings such as vat_simplified_taxpayer or vat_card_sales_credit, which would be needed for a 5.

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

Usage Guidelines4/5

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

The '언제' line gives a clear trigger: simplified taxpayer, taxable period 1.1–12.31, at final-return time, computed from the original facts. No explicit exclusions or named alternatives are provided, so an agent must infer that other VAT tools (e.g., bad-debt or input-tax ones) handle their own sub-cases.

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

special_tax_creditA
Read-onlyIdempotent

근로소득자 특별세액공제(보험료·의료비·교육비)와 표준세액공제 비교. 언제: 연말정산·종합소득세 신고에서 특별세액공제와 표준세액공제 중 선택할 때. 입력: 귀속연도 → year, 총급여액 → total_salary, 공제대상자 → persons, 지출 목록 → expenses, 근로소득 산출세액 → wage_computed_tax(선택). 결과: 보험료·의료비·교육비 공제액·특별세액공제 합계·표준세액공제 선택·적용 공제·근거. 특별세액공제 vs 표준세액공제 비교. 연도별: 의료비 특정(2호) 중증질환자 등 2018~, 과세기간 개시일 현재 6세 이하 2024~, 미숙아·선천성이상아 20% 2022~. 교육비 체험학습 2017~, 대입전형료 2023~.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
personsYes[{name, relation, age, disabled?, income_ok?, severe_illness?, age_at_year_start?, birth_date?, school_grade?}] — name: 사람 표시 이름(문자열, 중복 불가). relation: 공제대상자와의 관계. 허용값: 본인·배우자·직계비속·입양자·형제자매·직계존속·위탁아동·수급자. 문항 표현 그대로 '자녀'·'아들'·'딸'은 '직계비속', '부모'·'모친'·'부친'은 '직계존속'으로 적을 것. age: 과세기간 종료일(12/31) 현재 만 나이(정수). disabled: 장애인 여부(bool). age_at_year_start: 과세기간 개시일(1/1) 현재 만 나이 — 의료비 6세 이하 특정지출(2024~)에서 age=7이면 필요, birth_date(YYYY-MM-DD)로 대신 가능. school_grade: 초등학교 학년(예체능학원_초등저학년에서 age 9 이상일 때 필요). income_ok: 연 소득금액 100만원 이하(근로소득만 있으면 총급여 500만원 이하)면 true — 문항의 '소득 없음'은 true로 입력. severe_illness: 중증질환자·희귀난치성질환자·결핵환자 여부(bool) — 2018년부터 의료비 특정지출, 2016~2017은 일반(700만원 한도). 예시: [{'name':'본인','relation':'본인','age':50,'income_ok':true}, {'name':'딸','relation':'직계비속','age':16,'income_ok':true}]
expensesYes[{kind, amount, person, reimbursed?}] — person은 persons의 name. 1명당 연 한도는 같은 person의 지출을 합산해 적용: 안경 50만원, 교복 50만원, 체험학습 30만원(2017~), 취학전·초중고 300만원(교복·체험학습 포함), 대학 900만원. 같은 사람의 지출은 같은 name으로 넣을 것. kind 예체능학원_초등저학년(2026~, 제59조의4③1호마목): 종료일 현재 9세 미만 또는 2학년 이하 초등학생의 예능학원·체육시설 월 단위·주 1회 이상 교습과정 수강료, 300만원 한도에 합산
earner_typeYes근로소득 종류
total_salaryYes총급여액(원). 문항에 총급여액이 없으면 0이 아니라 생략 — 0이면 의료비 문턱(total_salary×문턱비율)이 0이 되어 모든 의료비가 특정지출로 분류됨
donation_creditNo금액(원)
wage_computed_taxNo근로소득 종합소득산출세액
monthly_rent_creditNo금액(원)
special_income_deductionNo금액(원)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the exact result components (per-category credit, total, chosen credit, basis) and year-versioned rule changes (severe illness 2018~, under-6 2024~, premature 2022~, field trips 2017~, entrance exam fees 2023~).

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

Conciseness4/5

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

Purpose is front-loaded and the 언제/입력/결과/연도별 layout is scannable with no filler sentences. The final year-by-year block is dense and abbreviation-heavy, but every clause carries a rule that affects the computation.

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

Completeness3/5

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

For a 9-parameter tool with no output schema, the description does well to enumerate the returned figures. However, its input list covers only 5 of 9 parameters and omits earner_type — which is required — as well as donation_credit, monthly_rent_credit, and special_income_deduction, so an agent reading only the prose would not know the full input surface.

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

Parameters3/5

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

Schema description coverage is 100% and the schema itself carries very detailed Korean guidance for persons/expenses/total_salary, so the baseline of 3 applies. The description's input mapping (귀속연도→year, 총급여액→total_salary, etc.) is a helpful cross-reference but largely restates what the schema already says.

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

Purpose5/5

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

The first sentence names a specific computation: comparing the wage-earner special tax credit (insurance/medical/education) against the standard tax credit. The scope is narrow enough that an agent can separate it from siblings like child_tax_credit, donation_limit, or personal_deduction without opening the schema.

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

Usage Guidelines4/5

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

The "언제" line explicitly states the filing context (year-end settlement / comprehensive income tax return) where the special-vs-standard choice applies. It gives clear positive guidance but never names an alternative tool or an exclusion case, 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.

stock_basis_income_taxA
Read-onlyIdempotent

비상장주식 소득세법 기준시가(영 제165조④) — 양도세 기준시가와 대주주 시가총액 판정(영 제157조④2호)에 쓰는 1주당 가액. 상속·증여 평가와 달리 직전 사업연도 순손익만(÷10%), 순자산은 장부가액, 할증 없음, 하한 순자산가치×80%(2018.4.1.~). 언제: 비상장주식 양도세에서 기준시가가 필요하거나, stock_major_shareholder의 price(1주당 가액)에 넣을 값이 필요할 때. 입력: 양도일 → transfer_date, 발행주식총수 → shares, 직전 사업연도 순손익액 → prior_year_income, 장부 순자산 → book_net_asset. 결과: 1주당 기준시가, 순손익가치·순자산가치, 평가방법, 판단(할증 없음·이자율 확인 필요), 근거.

NameRequiredDescriptionDefault
sharesYes직전 사업연도 종료일 현재 발행주식총수
statusNo청산|휴폐업|존속3년 해당 시
transfer_dateYes양도일(또는 대주주 판정 시 양도일) YYYY-MM-DD
book_net_assetNo직전 사업연도 종료일 현재 장부가액 순자산(원, 토지는 기준시가로 바꿔 계산한 값)
business_startNo사업개시일 YYYY-MM-DD(개시 후 1년 미만이면 순자산가치만)
prior_year_incomeNo양도일이 속하는 사업연도의 직전 사업연도 순손익액(원)
real_estate_ratioNo자산총액 중 부동산 비율(0~1), 0.5 이상이면 2:3
stock_asset_ratioNo자산총액 중 주식등 비율(0~1) — 2023.2.28.~ 0.8 이상이면 순자산가치만

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare this a safe, idempotent, closed-world read, and the description goes well beyond that: no premium (할증 없음), prior-year income only ÷10%, book-value net assets, and the 80% net-asset floor effective 2018.4.1. It also summarizes the return contents and flags a caveat (이자율 확인 필요), which is exactly the added behavioral context 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.

Conciseness5/5

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

Front-loaded with the core definition, then cleanly sectioned into 언제/입력/결과, with no filler. Legal citations and caveats each earn their place by clarifying scope or judgment output.

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

Completeness5/5

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

For an 8-parameter tool with no output schema, the description supplies the missing return-shape information (기준시가, 순손익가치·순자산가치, 평가방법, 판단) and cites the governing provisions, leaving nothing essential for correct invocation unclear.

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

Parameters3/5

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

Schema description coverage is 100% and each parameter already carries a Korean description, so the schema does the heavy lifting. The "입력" block maps four key parameters (transfer_date, shares, prior_year_income, book_net_asset) to their concepts, but adds no format or derivation detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb+resource (computing the income-tax standard market value per share for unlisted stock, 영 제165조④) and explicitly scopes it against the inheritance/gift valuation sibling ("상속·증여 평가와 달리"). An agent can distinguish this from unlisted_stock_valuation and inheritance_gift_valuation without opening the schema.

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

Usage Guidelines5/5

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

The "언제" section gives two concrete triggers: needing a standard market value for unlisted-stock capital gains, or needing the per-share price to feed into stock_major_shareholder. It also names the differing valuation context (상속·증여) it should not be confused with, so alternatives are covered.

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

stock_capital_gains_taxA
Read-onlyIdempotent

주식등 양도소득세 — 과세 대상 여부(상장주식은 대주주 양도·장외 양도만, K-OTC 중소·중견 소액주주 제외), 양도차익 → 기본공제(연 250만원) → 과세표준 → 세율(대주주 20%·3억 초과 25%, 1년 미만 비중소 30%, 소액주주 중소 10%·그 밖 20%, 국외 10%/20%; 연도별) → 산출세액·지방소득세·예정신고기한(반기 말일+2개월). 언제: 주식을 팔았을 때 세금이 얼마인지, 과세 대상인지 물을 때. 대주주 여부는 먼저 stock_major_shareholder로 판정한다. 입력: 양도일 → transfer_date, 시장 → market, 대주주 → major_shareholder, 중소기업 → sme, 양도가액·취득가액·필요경비 → transfer_price·acquisition_price·expenses(또는 gain), 취득일 → acquisition_date. 지원하지 않음: 2019 이전 국외주식(제118조의2), 파생상품, 상장주식 장내 소액주주(과세 대상 아님으로 답함), 양도차손 통산 계산. 결과: 과세대상·양도차익·기본공제·과세표준·적용세율·산출세액·지방소득세·예정신고기한, 세율 후보(경합 시 큰 세액), 판단, 근거.

NameRequiredDescriptionDefault
smeNo발행법인이 중소기업인지(중소기업기본법 제2조, 판정 기준일은 결과 판단에 표시)
gainNo양도차익(원)을 이미 알면 가액 대신 이것만
marketYes시장 — 코스피|코스닥|코넥스|비상장|K-OTC|국외. 평소 말도 됨
expensesNo양도 시 필요경비(증권거래세·수수료 등, 원)
mid_sizedNoK-OTC만: 중견기업이면 True(소액주주 과세 제외 판정용)
otc_tradeNo상장주식을 증권시장 밖(장외)에서 양도했으면 True — 대주주가 아니어도 과세
transfer_dateYes양도일 YYYY-MM-DD(2016-01-01 ~ 2026-12-31)
transfer_priceNo양도가액(원)
acquisition_dateNo취득일 YYYY-MM-DD — 대주주이고 중소기업이 아니면 필요(1년 미만 보유 30%)
acquisition_priceNo취득가액(원, 취득 수수료 포함)
major_shareholderNo대주주 여부(stock_major_shareholder 판정값). 국외주식은 불필요
prior_basic_deductionNo같은 해 주식등 양도에서 이미 쓴 기본공제(원, 연 250만원 한도)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: the full deduction→tax base→rate waterfall, year-dependent rates, and the '경합 시 큰 세액' tie-breaking rule for competing rate candidates. It does not discuss numeric edge cases such as negative gains or missing-input defaults, keeping 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.

Conciseness4/5

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

Labeled sections (언제/입력/지원하지 않음/결과) make it scannable and front-load the purpose before the details. It is dense and long for a description, but nearly every clause carries procedural or rate information an agent would otherwise guess wrong.

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

Completeness5/5

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

For a 12-parameter, no-output-schema tax calculator, the description supplies scope rules, input mapping, exclusion cases, and the exact result fields (과세대상·양도차익·기본공제·과세표준·적용세율·산출세액·지방소득세·예정신고기한 plus 근거). Nothing an agent needs to invoke or interpret the call is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description still adds a mapping table (양도일→transfer_date, 시장→market, 대주주→major_shareholder, 중소기업→sme, 가액→transfer_price·acquisition_price·expenses 또는 gain) that clarifies the either/or relationship between gain and the price triple, which the schema alone leaves implicit.

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

Purpose5/5

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

The opening line names the exact tax (주식등 양도소득세) and then enumerates its computation chain from taxable-scope determination through rate application to local income tax and filing deadline. It is clearly distinguishable from siblings like capital_gains_tax, stock_basis_income_tax and stock_major_shareholder, and even names the latter as a prerequisite.

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

Usage Guidelines5/5

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

The '언제' block states the triggering question (how much tax on a stock sale / is it taxable) and explicitly routes the agent to stock_major_shareholder first for major-shareholder determination. The '지원하지 않음' block lists four out-of-scope cases with the correct fallback behavior, which is unusually complete guidance.

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

stock_major_shareholderA
Read-onlyIdempotent

주식 양도소득세 대주주 판정 — 양도일·시장·직전 사업연도 종료일 현재 지분율·시가총액으로 대주주 여부(소득세법 시행령 제157조·제167조의8, 2016~2026 구간별 기준: 코스피 1%/25억→15억→10억→50억 등)와 특수관계인 합산 방식을 판정한다. 주주 명부(total_shares·own_shares·holders·price)를 주면 지분율·시가총액과 주주별 합산 여부("처남은 2023년부터 인척 2촌이라 최대주주군일 때만 합산" 등)까지 도구가 계산한다. 언제: "나 대주주야?", 주식 양도세 세율·과세 여부를 정하기 전에. 결과의 판정(대주주/아님/확인 필요)을 stock_capital_gains_tax의 major_shareholder에 넣는다. 입력: 양도일 → transfer_date, 시장 → market, 본인 지분율·시가총액 → own_ratio·own_mcap, 특수관계인 합계 → related_ratio·related_mcap, 최대주주군 여부 → is_max_group, 벤처 → venture. 결과: 판정·이유·적용 기준(지분율·시가총액)·합산 방식, 판단(기준일·시가 산정·확인 필요), 근거(시행령 조항·개정령·시행일). 시가총액은 사용자가 계산해 넣는다(도구가 시세를 조회하지 않음).

NameRequiredDescriptionDefault
priceNo명부: 1주당 가액(원) — 상장은 직전 사업연도 종료일 최종시세가액, 비상장은 소득세법 시행령 제165조④ 기준시가(stock_basis_income_tax). 없으면 시가총액 기준은 판정하지 않음
marketYes시장 — 코스피|코스닥|코넥스|비상장|K-OTC. 평소 말(유가증권·KOSDAQ·장외 등)도 됨
holdersNo명부: 다른 주주 [{이름, 관계, 주식수}] — 관계는 평소 말(배우자·아들·형·사촌·처남·장인·사위 …, '혈족 4촌'·'인척 3촌', 경영지배 관계 법인은 '경영지배'). 합산 여부·범위는 양도일 구간·최대주주군 여부로 도구가 판단해 주주별로 보여줌
ventureNo비상장·K-OTC만: 벤처기업 주식이면 True(시가총액 기준 40억)
own_mcapNo직전 사업연도 종료일 현재 본인 보유 주식 시가총액(원) — 상장은 그날 최종시세가액 × 주식 수, 비상장은 상증법 평가액
own_ratioNo직전 사업연도 종료일 현재 본인 지분율 — 0~1 비율(0.015) 또는 %(1.5). 모르면 own_mcap만
own_sharesNo명부: 본인 보유 주식 수(직전 사업연도 종료일 현재)
pef_sharesNo명부: 사모집합투자기구를 통해 보유한 주식 중 본인 투자비율로 안분한 주식 수(영 제157조⑧)
lent_sharesNo명부: 본인이 대여 중인 주식 수(반환받는 조건) — 대여자 소유로 봄(영 제157조⑦)
is_max_groupNo주주 1인과 특수관계인의 지분 합계가 그 법인 주주 중 최대인지(최대주주군). 2023.1.1.~ 양도분은 이것이 True일 때만 합산. 모르면 비움
related_mcapNo특수관계인 보유 시가총액 합계(원), 본인 제외
total_sharesNo주주 명부로 계산할 때: 직전 사업연도 종료일 현재 해당 법인 주식등 합계(보통주·우선주·자기주식 포함, 신주인수권증권·출자지분 포함). 이걸 주면 own_ratio 대신 명부에서 지분율을 계산
related_ratioNo특수관계인(기타주주) 지분율 합계 — 본인 제외. 구간에 따라 합산 여부·범위가 다르므로 아는 대로 넣으면 도구가 판단
transfer_dateYes양도일 YYYY-MM-DD(2016-01-01 ~ 2026-12-31) — 요건은 양도일 구간별로 다름
is_corporationNo주주가 법인이면 True(2025.2.28.~ 대주주 판정 대상 아님)
post_acquisition_ratioNo직전 사업연도 종료일 뒤 양도일 전에 주식을 더 취득했으면 취득 후 지분율(0~1 또는 %) — 지분율 기준에 이르면 취득일 이후 대주주(영 제157조⑨, 시가총액 기준은 적용 안 됨)

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, the description discloses key behavior: it computes ratios from a shareholder register when total_shares/own_shares/holders are provided, applies special-related-party aggregation rules by period, and handles post-acquisition ratio and corporation exceptions. It also warns that market capitalization is not looked up by the tool and must be supplied by the user.

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

Conciseness4/5

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

The description is front-loaded with the purpose, then structured as 언제/입력/결과 sections, which makes a complex legal tool navigable. It is somewhat dense and includes parenthetical detail and a full input mapping that partially duplicates the schema, but the length is largely justified by the domain complexity.

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

Completeness5/5

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

For a 16-parameter tool with no output schema, the description covers what the tool judges, when to call it, how inputs map to parameters, what the result contains (verdict, reasons, applied criteria, aggregation method, caveats, legal basis), and the important limitation that market prices are not fetched. Nothing essential for correct invocation appears missing.

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

Parameters4/5

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

Schema coverage is already 100%, so the schema carries detailed parameter documentation. The description adds useful mapping from natural-language inputs to parameter names and explains that providing total_shares causes the tool to compute the ratio from the register, but it does not add detailed semantics for every one of the 16 parameters beyond the schema.

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

Purpose5/5

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

The description states a specific verb and resource: judging stock transfer income tax '대주주' status under Income Tax Enforcement Decree articles 157 and 167-8. It distinguishes this from the downstream tax calculation by explicitly saying the verdict is passed into stock_capital_gains_tax's major_shareholder field.

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

Usage Guidelines4/5

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

It gives a clear trigger ('나 대주주야?') and timing: before determining stock transfer tax rates or whether tax applies. It also instructs downstream integration with stock_capital_gains_tax, but does not explicitly exclude or compare against adjacent sibling tools such as dominant_shareholder or ownership_ratio.

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

stock_price_lookupA
Read-onlyIdempotent

상장주식 시세 조회 — KRX 정보데이터시스템(pykrx)에서 종가를 가져와 (1) 직전 사업연도 종료일 최종시세가액(소득세법 시행령 제157조④1호, 휴장이면 직전거래일) 또는 (2) 상속·증여 평가 시가(평가기준일 전후 2개월 종가 평균, 상증법 제63조①1호가목)를 돌려준다. 언제: 대주주 판정(stock_major_shareholder의 price·own_mcap)이나 상속·증여 주식 평가에 넣을 가액이 필요할 때. 입력: 종목코드 → ticker, 기준일 → day, 용도 → mode(close|avg_2m). 주의: 이 도구만 외부(KRX)로 조회하며 보내는 정보는 종목코드·날짜뿐. pykrx가 없으면 설치 안내를 돌려줌(pip install 'korean-tax-calc-mcp[stock]'). pykrx의 'KRX 로그인 실패' 경고는 종가 조회와 무관(로그인 불필요). 비상장주식은 상증법 보충적 평가 도구로. 결과: 종가 또는 2개월 평균·거래일수·기간, 판단(직전거래일 사용 여부·기간 조정 확인 필요), 근거.

NameRequiredDescriptionDefault
dayYes기준일 YYYY-MM-DD — close면 그날(휴장이면 직전 거래일) 종가, avg_2m이면 평가기준일
modeNoclose: 최종시세가액(양도세 대주주 시가총액용, 직전 사업연도 종료일) / avg_2m: 평가기준일 전후 각 2개월 종가 평균(상속·증여 시가)close
tickerYes6자리 종목코드(예: 005930). 종목명은 받지 않음

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/open-world, but the description adds real behavior: it is the only tool calling outside to KRX, only ticker and date leave the system, a missing pykrx dependency returns pip install guidance, the 'KRX login failed' warning is irrelevant, and holiday dates fall back to the previous trading day. These are exactly the traits annotations cannot express.

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

Conciseness4/5

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

Labeled sections (언제/입력/주의/결과) front-load purpose and usage, and no sentence is filler. The statutory citations are dense but justified for a tax-domain tool, though the block is longer than strictly necessary.

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

Completeness5/5

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

With no output schema, the description still tells the agent what comes back (close price or 2-month average, trading-day count, period, a judgment note on prior-trading-day use and whether the period needs adjustment, plus the legal basis). Inputs, caveats, and the alternative tool are all covered.

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

Parameters4/5

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

Schema coverage is 100%, so a 3 is the floor; the description maps colloquial inputs (종목코드/기준일/용도) onto ticker/day/mode and ties each mode to its legal purpose, reinforcing the enum choice. It adds little truly new detail beyond the schema, so it stops short of 5.

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

Purpose5/5

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

States a specific verb and resource (fetch KRX closing price via pykrx) and enumerates the two valuation figures it computes, each anchored to a statutory basis. It also explicitly excludes non-listed shares in favor of the valuation sibling, so an agent can separate it from unlisted_stock_valuation without opening a schema.

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

Usage Guidelines5/5

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

The '언제' line names the concrete downstream uses (major-shareholder test via stock_major_shareholder's price/own_mcap, and inheritance/gift valuation) and the '주의' line routes non-listed shares to the supplementary-valuation tool. When-to-use and when-not-to-use are both explicit.

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

tax_priority_distributionA
Read-onlyIdempotent

국세 우선권에 따른 매각대금 배분 순서·금액(경매·공매, 국세기본법 제35조·제36조). 언제: 체납자 재산이 경매·공매로 매각될 때 집행비용 → 최우선변제 → 당해세 → 법정기일과 담보 설정일 비교 → 임금 → 그 밖의 조세 → 일반채권 순으로 누가 얼마를 받는지 계산할 때. 입력: 매각대금 → sale_amount, 매각(허가)결정일 → sale_date, 채권 목록 → claims, 집행비용 → execution_cost, 재산 종류 → property_type, 직전 보유자 체납(양도된 재산) → prior_owner. 지원 연도: 2016.1.1.~2026.12.31. 매각결정분. 2023.4.1. 이후 매각결정분은 ①3호의2(양도 전 설정 담보 > 현 소유자 국세, 직전 보유자 체납액 한도 안 국세는 우선)·③ 후단(3호의2 재산은 종부세만 당해세 우선)·⑦(주택 임차인 당해세 순위 대신 변제), 2024.1.1. 이후는 한도 안 국세를 법정기일이 설정일보다 빠른 것으로 한정. 지방세 당해세·법정기일 비교(지방세기본법 제71조), 국세·지방세 상호간 압류선착(제36조·지방세기본법 제73조, 압류 없으면 동순위 안분). 지원하지 않음(입력 확인 필요로 반환): 가압류채권과 후순위 담보권 안분·흡수배당, 조세 상호간 흡수배당(조세가 담보권 앞뒤로 나뉘고 뒤 조세가 덜 받는 경우), 담보권 사이 순환관계, 공과금, 납세담보(제37조), 3호·3호의2 담보 혼재·3호의2 담보 둘 이상, 일반임금채권과 전세권·확정일자 임차권의 순위, 제35조⑦ 대상 임차인 둘 이상. 소액임차 일정액·최우선임금 범위는 계산된 금액을 넣는다(2분의 1 한도만 적용). 결과: 채권별 배분액·미배분액·단계별 근거, 배분 순서, 잔여(소유자 몫), 판단(적용한 개정·특례), 적용표.

NameRequiredDescriptionDefault
claimsYes배분 받을 채권 목록. 각 항목 {종류, 금액, 이름?, ...}. 종류: 소액임차보증금(최우선변제 일정액) | 최우선임금채권(최종 3개월 임금·재해보상금·최종 3년 퇴직금) | 당해세(세목=상속세·증여세·종합부동산세, 그 재산에 부과된 국세) | 국세 | 지방세(당해세=True면 세목=재산세·자동차세·지역자원시설세·지방교육세) | 저당권 | 근저당권 | 전세권 | 질권 | 가등기담보 | 확정일자임차보증금 | 일반임금채권 | 일반채권. 조세: 법정기일 YYYY-MM-DD(또는 확정방식=신고|고지|원천징수|인지세|제2차납세의무|양도담보|압류후확정 + 기준일), 압류일?(압류한 조세). 담보: 설정일(확정일자 임차인은 대항요건·확정일자를 모두 갖춘 날), 순위?(같은 날 설정 시 접수 순서), 양도전_설정?(True=현 소유자 취득 전 설정, ①3호의2). 일반채권: 가압류일?. 금액은 배분 요구액(원).
sale_dateYes매각결정일·매각허가결정일 YYYY-MM-DD(2016-01-01~2026-12-31) — 2023.4.1.·2024.1.1. 개정 적용을 이 날짜로 판정
prior_ownerNo양도전_설정 담보가 있고 2023.4.1. 이후 매각일 때만: 직전 보유자 체납 정보 {체납: [{금액, 법정기일}], 보유전_전세권등: bool, 최초설정일?} 또는 계산된 한도 {한도: 원}(시행령 제18조③)
sale_amountYes매각대금(원) — 경매 매각대금 또는 공매 매각금액
property_typeNo매각 재산 종류 — 소액임차 2분의 1 한도·주택 임차인 당해세 특례(제35조⑦) 판정용기타
execution_costNo집행비용(원) — 강제집행·경매·공매 절차 비용(국세기본법 제35조①2호)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover safety (readOnly, idempotent, non-destructive) and the description does not restate them; instead it adds real behavioral context: supported decision-date window 2016-01-01~2026-12-31, different rules for post-2023.4.1 and post-2024.1.1 sale decisions, and the failure mode of returning an input-check result for unsupported cases.

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

Conciseness4/5

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

Purpose is front-loaded and the 언제/입력/지원하지 않음/결과 labeling makes it scannable despite heavy density. The '입력' block largely duplicates a fully-covered schema, which is waste, but the legal amendment paragraphs carry genuine decision-relevant information.

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

Completeness5/5

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

With no output schema, the description compensates by describing the result shape (채권별 배분액·미배분액·단계별 근거, 배분 순서, 잔여, 판단, 적용표) and by scoping supported periods, unsupported scenarios, and the 소액임차/최우선임금 pre-computation expectation.

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

Parameters3/5

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

Schema description coverage is 100% and the schema itself already explains claims item types, sale_date's amendment-cutoff role, and prior_owner's conditional use. The description's '입력' block only restates the parameter-to-Korean-label mapping, adding no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The description states a specific computation ('매각대금 배분 순서·금액') with its legal basis (국세기본법 제35조·제36조) and the exact domain (경매·공매 distribution). It is unmistakable against every listed sibling, none of which touches priority-waterfall distribution of sale proceeds.

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

Usage Guidelines5/5

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

There is an explicit '언제' section defining the triggering scenario, plus a '지원하지 않음' section enumerating exactly which situations the tool refuses (가압류채권 안분, 조세 상호간 흡수배당, 3호의2 담보 둘 이상, etc.) and what happens instead (returns input confirmation needed).

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

thin_capitalizationA
Read-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.

NameRequiredDescriptionDefault
yearNo사업연도·귀속연도(2016~2026)
ratioNo적용 배수(기본적으로 2, 금융업 등 업종 배수는 별도 확인)
equityYes금액(원)
borrowingsYes금액(원)
recipient_typeNo수취인 구분 — 개인(비거주자) / 법인(외국법인)개인
total_interestYes금액(원)
dividend_treaty_rateNo배당 조세조약 제한세율(소수, 예: 0.15 = 15%). 생략 시 국내세율 적용
interest_treaty_rateNo이자 조세조약 제한세율(소수, 예: 0.12 = 12%). 생략 시 국내세율 적용
recipient_residence_countryNo수취인 거주지국(ISO 2자 코드 또는 국명). 지정 시 배당 처분에 따른 원천징수 재계산 제공

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

For a 9-parameter tool with no output schema, the '결과' 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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에서 표를 뽑는다.

NameRequiredDescriptionDefault
pdf_pathYesPDF 파일 경로

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

NameRequiredDescriptionDefault
sizeYes기업 규모('중소'|'중견'|'일반')
familyYes친족 관계 [[a, b, "부모자녀"|"배우자"]]
peopleYes사람·법인 목록 {이름: {"구분": "개인"|"법인"}}
stakesYes직접보유비율 [[보유자, 법인, 지분율(0~1)]]
beneficiaryYes수혜자(이름)
sales_totalYes총 매출액(원)
sales_by_corpYes거래처 법인별 매출액 {법인: 매출액(원)}. 예: {"A": 300000000}
excluded_salesNo⑩·⑭항 과세제외매출액(원)
after_tax_op_profitYes세후영업이익(원)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

For a 9-parameter tool with 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents 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.

Purpose5/5

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.

Usage Guidelines5/5

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 신고안내 산식.

NameRequiredDescriptionDefault
taxYes법인세법 제55조 산출세액(원)
sizeYes기업 규모('중소'|'중견'|'일반')
creditsNo공제·감면세액(차감, 원)
land_taxNo토지등 양도소득 법인세(차감, 원)
dividendsNo관계명별 [배당소득(원), 분모]. 예: {"직접": [10000000, 300000000]}
op_incomeYes세후영업이익 ⑫(원)
relationsYes관계명별 보유비율(소수). 예: {'직접': 0.2, 'A경유': 0.18}
sales_totalYes총 매출액(원)
base_excludedNo기본 ⑩항 과세제외매출액(원)
sales_by_corpYes거래처 법인별 매출액 {법인: 매출액(원)}. 예: {"A": 300000000}
taxable_incomeYes과세표준(원)
unreturned_taxNo미환류소득 법인세(원, tax에 포함이 맞음)
excluded_by_corpNo특관법인별 ⑩항 과세제외액(원). 예: {"A": 10000000}
indirect_corp_ofNo관계명별 간접출자법인. 예: {"A경유": "B법인"}
holdings_in_relatedNo특관법인별 지배주주등 보유비율(소수). 예: {"A": 0.3}

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, and the description's '입력' 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.

Purpose4/5

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.

Usage Guidelines4/5

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_penaltyA
Read-onlyIdempotent

과소신고가산세(일반 과소신고 10%, 부정행위 40%). 언제: 신고한 세액보다 실제 세액이 더 클 때 가산세 금액을 구한다. 입력: 과소신고한 세액(원) → additional_tax, 부정행위 여부 → fraud. 결과: 가산세·적용 세율, 근거(국세기본법 제47조의3). Under-reporting penalty: 10% general, 40% for fraud.

NameRequiredDescriptionDefault
fraudYes부정행위로 인한 과소신고 여부
additional_taxYes금액(원)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_transactionA
Read-onlyIdempotent

부당행위계산 기준(시가와 실제 거래가 차이 3억 원 이상 또는 5% 이상). 언제: 특수관계인 거래 prices가 시가와 크게 차이 나 부당행위계산 부인 대상인지 확인할 때. 입력: 시가(단가, 원) → market_price, 실제 거래 단가(원) → actual_price, 수량 → quantity. 결과: 시가총액·차액·차액비율·부당행위계산 여부, 근거(법인세법 제52조, 시행령 제88조③). 부당행위계산 기준(시가와 실제 거래가 차액이 3억 원 이상 또는 5% 이상이면 부인 대상).

NameRequiredDescriptionDefault
quantityYes수량
actual_priceYes실제 거래 단가(원)
market_priceYes시가(단가, 원)

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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

There is no output schema, 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

unlisted_stock_valuationA
Read-onlyIdempotent

비상장주식 상속·증여 평가(상증법 보충적 평가) — 순손익가치(3년 가중평균 3:2:1 ÷ 10%)와 순자산가치((순자산+영업권) ÷ 주식수)를 3:2(부동산 과다 2:3)로 가중평균, 하한 순자산가치×80%(2017.42018.3 70%), 순자산가치만 평가하는 사유(청산·개시 3년 미만·휴폐업·부동산 80%·주식 80%·존속 3년, 구간별), 최대주주 할증(2019까지 20/30%·중소 0, 2020 20%·중소 제외, 2023~ 중견 제외)까지 20162026 구간별로 계산한다. 언제: 비상장주식을 상속·증여받았을 때 1주당 평가액, 또는 비상장법인 지분의 상증법 가액이 필요할 때. 양도세 대주주 시가총액·기준시가는 산식이 달라 stock_basis_income_tax를 쓴다. 입력: 평가기준일 → valuation_date, 발행주식총수 → shares, 3년 순손익 → incomes, 순자산가액 → net_asset, 부동산 비율 → real_estate_ratio, 최대주주·중소기업 → is_max_shareholder·sme. 재무제표 입력: incomes에 각사업연도소득+가산·차감 항목, net_asset에 자산·부채 장부가액+평가차액+가감 항목을 주면 순손익액·순자산가액을 도구가 만들고 줄별 근거를 보여준다. 세무조정 연결: incomes 항목에 calls=[{tool, args}]를 주면 서버가 세무조정 계산기(income_adjustment_total·corporate_tax·entertainment_adjustment·donation_limit·dividend_received_deduction·business_car_expense·nonbusiness_interest_disallowance·depreciation_adjustment)를 실행해 각사업연도소득·가산·차감에 자동으로 넣는다(영 제56조④ 항목만). 증감자(capital_changes)·추정이익(estimated_profit, 요건 판정)·자산별 평가(assets: 시가→기준시가→장부가액 선택, 장부가액 하한)까지 받는다. 지원하지 않음: 평가심의위원회, 자산별 시가의 평가기간(상속 전후 6개월·증여 전 6개월후 3개월) 판정(사용자가 기간 안 가액만 넣음), 국외 비상장. 결과: 1주당 평가액(할증 후·전), 순손익가치·순자산가치·가중평균, 평가방법, 할증률, 판단(사유·하한·확인 필요), 근거.

NameRequiredDescriptionDefault
smeNo중소기업 여부(할증 제외 판정) — 최대주주면 필수
kindNo상속·증여 구분(추정이익 요건 4호 연도 판정용)증여
assetsNo자산별 평가로 평가차액을 만들려면 [{종류(토지|건물|주택|상장주식|비상장주식|예금|채권|매출채권|기타), 명칭?, 장부가액, 시가?|기준시가?|평가액?, 하한 예외?}] — 평가액>시가>기준시가>장부가액 순으로 고르고, 장부가액보다 낮으면 장부가액(영 제55조①), 합계를 자산_평가차액에 더함
equityNo영업권 계산용 평가기준일 자기자본(원). goodwill을 직접 주면 불필요
sharesYes평가기준일 현재 발행주식총수
statusNo청산|휴폐업|존속3년(정관 존속기한 3년 이내) 해당 시
incomesNo최근 3개 사업연도 [{사업연도, 순손익액 | 각사업연도소득 + 가산:{…} + 차감:{…} | calls:[{tool, args}](세무조정 계산기 호출을 주면 서버가 실행해 각사업연도소득·가산·차감을 채움), 주식수?}] — 1년 전부터. 순손익액을 바로 알면 숫자만, 세무조정계산서에서 뽑으면 각사업연도소득과 가감 항목으로(영 제56조④, 도구가 산출 과정을 보여줌). 사업 개시 3년 미만이면 생략 가능
goodwillNo영업권 평가액(원)을 이미 알면 직접
mid_sizedNo중견기업(직전 3개 사업연도 매출액 평균 5천억 미만)이면 True — 2023.1.1.~ 할증 제외
net_assetNo평가기준일 현재 순자산가액(원), 또는 재무상태표 항목형 {자산_장부가액, 자산_평가차액?(상증법 평가액−장부가액), 부채_장부가액, 자산_가산:{지급받을 권리…}, 자산_차감:{선급비용, 영업권…}, 부채_가산:{미지급 법인세, 확정 배당, 퇴직급여추계액…}, 부채_차감:{충당금, 준비금…}} — 영 제55조·규칙 제17조의2 가감을 도구가 적용하고 산출 과정을 보여줌
ratio_over_50No2019.12.31.까지: 최대주주등 지분이 50% 초과면 True(30%), 아니면 False(20%)
business_startNo사업개시일 YYYY-MM-DD(개시 후 3년 미만 판정용)
valuation_dateYes평가기준일(상속개시일·증여일) YYYY-MM-DD, 2016~2026
capital_changesNo평가기준일 전 3년 내 유상증자·감자 [{일자, 구분:'증자'|'감자', 주식수, 1주당금액}] — 각 연도 순손익액 가산·차감(영 제56조⑤)과 환산주식수(규칙 제17조의3⑤)를 도구가 계산
estimated_profitNo추정이익으로 평가하려면 {1주당추정이익평균(둘 이상 평가기관 산출 평균), 사유(자산수증이익|합병|분할|업종 변경|휴업|처분손익|매출 3년 미만|고시), 신고기한, 신고일, 산정기준일, 평가서작성일} — 영 제56조② 요건 4개를 판정해 충족 시 3년 가중평균 대신 적용
premium_exclusionNo할증 제외 사유가 있으면 적음(3년 연속 결손·전부 매각·사업개시 3년 내 영업이익 0 이하·청산 확정·명의신탁 등, 영 제53조⑧)
real_estate_ratioNo자산총액 중 부동산·부동산권리 비율(0~1) — 0.5 이상이면 2:3 가중, 0.8 이상이면 순자산가치만(2018.2.13.~)
stock_asset_ratioNo자산총액 중 주식등 비율(0~1) — 0.8 이상이면 순자산가치만(2017.2.7.~)
is_max_shareholderNo평가 대상 주식이 최대주주등 보유분이면 True(할증)

TDQS

A4.6/5.0
Behavior5/5

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 substantial behavioral context beyond that: the calls mechanism for 세무조정, the asset valuation ordering (평가액>시가>기준시가>장부가액, 하한), and explicit limitations (지원하지 않음). It also states the return contents, which is important 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.

Conciseness4/5

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

It is long but well-organized with labeled sections (언제/입력/재무제표/세무조정/지원하지 않음/결과) and front-loads the core purpose. Some redundancy exists where the 입력 section duplicates the already-detailed schema parameter descriptions, slightly diluting conciseness.

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

Completeness5/5

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

For a 19-parameter, no-output-schema, high-complexity valuation tool, the description covers the method, inputs, supported/unsupported scope, and explicitly lists return contents (1주당 평가액, 순손익/순자산가치, 평가방법, 할증률, 판단, 근거). Nothing essential for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema descriptions are themselves very rich, so the description's '입력' section mostly restates parameter names and mappings already documented in the schema. It reinforces relationships (real_estate_ratio driving 2:3 weighting, calls feeding incomes) but adds little beyond the structured fields, so baseline 3 is correct.

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

Purpose5/5

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

States a specific verb and resource (비상장주식 상속·증여 평가, 상증법 보충적 평가) and enumerates the actual computation (순손익가치 3년 가중평균 3:2:1, 순자산가치, 3:2 가중, 하한 80%, 최대주주 할증). It also distinguishes itself from the sibling stock_basis_income_tax for 양도세 산식. An agent can immediately tell this apart from inheritance_tax or stock_capital_gains_tax.

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

Usage Guidelines5/5

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

The '언제' line gives the exact triggering condition (비상장주식 상속·증여, 1주당 평가액 필요) and routes to an alternative (stock_basis_income_tax for 양도세 대주주). The '지원하지 않음' section explicitly names out-of-scope cases (평가심의위원회, 자산별 시가 평가기간, 국외 비상장), removing ambiguity about when not to use it.

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

vat_bad_debt_creditA
Read-onlyIdempotent

대손세액공제(대손금액 × 10/110). 언제: 외상 매출이 대손되었을 때 부가가치세 대손세액공제를 계산한다. 입력: 대손금액(부가세 포함, 원) → bad_debt_incl_vat, 재화·용역 공급 대가 채권 여부 → supply_receivable(기본 True). 결과: 대손세액(공급 대가 아니면 0), 근거(부가가치세법 제45조①). VAT bad debt credit.

NameRequiredDescriptionDefault
bad_debt_incl_vatYes대손금액(부가세 포함, 원)
supply_receivableNo재화·용역 공급 대가 채권 여부(True면 대손세액 공제 대상)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_creditA
Read-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기 확정부터), 개인사업자만 해당·직전 연도 공급가액 한도 이하.

NameRequiredDescriptionDefault
amountYes신용카드·현금영수증 발급분 공급대가(원)
individualNo개인사업자 여부(True면 공제 대상)
supplied_onYes공급일 YYYY-MM-DD
used_this_yearNo같은 해 이미 공제받은 금액(원)
prior_year_supplyNo직전 연도 공급가액 합계(원). 한도 초과 시 공제 제외

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds 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.

Purpose5/5

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.

Usage Guidelines4/5

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_allocationA
Read-onlyIdempotent

겸영사업자 공통매입세액 안분(불공제분 계산). 언제: 과세·면세 사업을 겸영할 때 공통 매입세액 중 얼마가 불공제인지 계산한다. 입력: 공통매입세액(원) → common_tax, 총공급가액(원) → total_supply, 면세공급가액(원) → exempt_supply. 결과: 불공제 매입세액, 근거(부가가치세법 시행령 제81조). 면세비율 5% 미만·공통매입세액 5만 원 미만이면 전액 공제. 불공제 = 공통매입세액 × 면세공급가액 ÷ 총공급가액. 겸영사업자 공통매입세액 안분(불공제분 계산).

NameRequiredDescriptionDefault
common_taxYes금액(원)
total_supplyYes금액(원)
exempt_supplyYes금액(원)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_creditA
Read-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조).

NameRequiredDescriptionDefault
smeNo중소기업 여부(제조 법인)
baseNo해당 과세기간 과세표준(원). 없으면 taxable_supply 사용
itemsNo품목별 면세농산물 등 목록. 각 항목: {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을 동시에 주면 문제로 거부
filingNo신고 구분(기본 '확정'). '예정'이면 공제 한도(과세표준 × 한도율)를 적용하지 않음 — 한도는 확정신고 때 과세기간 전체로 정산(부가가치세법 제42조②)확정
periodYes과세기간('YYYY-1' 또는 'YYYY-2')
industryYes업종
purchaseNo공제대상 매입가액(원) = 과세사업에 사용했거나 사용할 면세농산물 등의 매입가액. 다른 사업자에게 그대로 판매한 분은 제외, 기말 재고분은 포함. 수입분은 관세의 과세가격 + 운반비 포함 구입액이면 purchase_total·freight_included 사용. 품목별로 따로 부르지 말고 합산해서 1회 호출. used_taxable·used_exempt·ending_inventory_common이 모두 0이면 purchase(또는 purchase_total−freight_included)가 공제대상 매입가액이 됨. items와 purchase/purchase_total을 동시에 주면 문제로 거부됨
individualNo개인사업자 여부
used_exemptNo면세사업 사용·판매액(원)
used_taxableNo과세사업 사용·소비액(원)
exempt_supplyNo해당 기간 면세 공급가액(원)
purchase_totalNo면세농산물 등 총 구입액( 운반비 포함 가능, 원)
taxable_supplyNo해당 기간 과세 공급가액(원)
freight_includedNo구입액에 포함된 채취 운반비(원) — 있으면 매입가액에서 제외
ending_inventory_commonNo실지귀속 불분명 기말재고(원)

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real value on top: it enumerates the returned computation fields (공제대상 매입가액·의제매입세액·공제율·한도율·과세비율·단계별 계산) and the legal basis, plus validation rejections (비율 합 100 미충족, items와 purchase 동시 입력). What it omits — rounding rules or assumptions when optional inputs are defaulted — keeps it at 4.

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

Conciseness3/5

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

It is front-loaded well (formula, then when-to-use, then inputs, then outputs and legal basis), but the middle '입력:' section enumerates all 15 parameters that the schema already describes at 100% coverage, which is redundancy that lengthens the definition without adding selection value.

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

Completeness4/5

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

For a 15-parameter calculator with no output schema, the description supplies the missing return-value shape and legal citations, plus the core rejection rules — enough for an agent to call it confidently. Some operational nuance (what happens when optional allocations are left at zero) is only implied.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all 15 parameters, including the items normalization rules and the purchase/purchase_total mutual exclusion. The description's '입력:' block largely restates that mapping in Korean labels, adding convenience but little new semantics beyond what the schema carries.

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

Purpose5/5

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

States a specific verb and resource (의제매입세액공제 계산) and even gives the computation basis (면세농산물 매입가액 × 공제율, 운반비 제외, 공통분 안분). This is clearly distinguishable from the neighboring deemed-rent tool (vat_deemed_rent) and from ordinary input-tax deduction tools.

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

Usage Guidelines4/5

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

The '언제' line names the concrete situation (음식점·제조업 등에서 면세농산물 등을 매입할 때) so an agent can route here. It stops short of naming alternatives or when-not-to-use cases, so it is clear context without explicit exclusions.

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

vat_deemed_rentA
Read-onlyIdempotent

간주임대료(보증금 × 정기예금이자율 × 일수/연일수, 윤년이면 연수 366). 언제: 상가·오피스텔 등 임대 보증금을 받을 때 부가가치세 간주임대료를 계산한다. 입력: 보증금(원) → deposit, 과세기간 중 임대 일수(1~184) → days, 과세기간('YYYY-1' 또는 'YYYY-2') → period, 적용 이자율(소수, 생략 시 연도표) → rate. 결과: 간주임대료·적용_이자율, 근거(부가가치세법 시행령 제65조). VAT deemed rent on lease deposits.

NameRequiredDescriptionDefault
daysYes과세기간 중 임대 일수(1~184)
rateNo적용 이자율(소수, 예 0.015 = 1.5%). 생략 시 연도표
periodYes과세기간('YYYY-1' 또는 'YYYY-2', 정기예금이자율 연도표 기준)
depositYes금액(원)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description correctly 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_deemed_supply_itemsA
Read-onlyIdempotent

간주공급·판매 과세표준 판정(부가가치세법 제10조, 시행령 제19조의2·제20조·제66조). 언제: 재화의 판매·간주공급에 대한 부가가치세 과세표준을 항목별로 판정할 때. 입력: period=과세기간('YYYY-1'|'YYYY-2'), items=[{항목, 거래, 매입세액공제(bool), 금액?|시가?|감가상각?, 1인당_연간금액?, 견본_광고선전물?}]. 거래: '판매'|'면세전용'|'비영업용승용차전용'|'타사업장반출'|'개인적공급'|'사업상증여'|'폐업시잔존'. 감가상각: {구분:'건물'|'구축물'|'기타', 취득가액, 취득일, 공급일} → 간주시가 = 취득가액 × (1 − 체감률 × 경과과세기간수), 체감률 건물·구축물 5%·기타 25%. 개인적공급: 1인당 연간 10만원 이하분은 공급 아님(영 제19조의2), 초과액만 과세. 사업상증여: 견본_광고선전물이 True면 0(법 제10조⑤ 단서). 결과: {결과: {과세표준}, 계산: {항목별: [{항목, 거래, 과세표준, 제외사유?}], 판단: [{항목, 결론, 근거}]}}. 규칙: '판매'·'타사업장반출'은 금액 그대로 과세(매입세액 공제 여부와 무관). 나머지 간주공급은 매입세액 공제 여부가 False면 0, True면 시가(또는 감가상각 간주시가) 과세.

NameRequiredDescriptionDefault
itemsYes[{항목, 거래, 매입세액공제(bool), 금액?|시가?|감가상각?, 1인당_연간금액?, 견본_광고선전물?}]
periodYes과세기간('YYYY-1' 또는 'YYYY-2')

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, and the description goes well beyond that by stating the substantive judgment rules: '판매'/'타사업장반출' are taxed on face amount regardless of input credit, other deemed supplies are 0 when 매입세액공제 is false, and 개인적공급 is exempt up to 10만원 per person per year. It also discloses the deemed market value formula with deprecation rates (5% buildings, 25% other) and the 견본/광고선전물 override — the exact behavior an agent cannot infer from annotations.

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

Conciseness4/5

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

Structured with explicit 입력/결과/규칙 labels and front-loaded with the purpose line, with no filler sentences. It is dense — several lines pack multiple conditionals and statutory abbreviations — but each line carries operative information.

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

Completeness5/5

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

No output schema exists, yet the description specifies the return shape ({결과, 계산: {항목별, 판단}}) including 제외사유 and 근거 fields, and covers all judgment rules an agent needs. Nothing material for correct invocation is missing.

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

Parameters5/5

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

Although coverage is nominally 100%, the schema's items array is untyped (`items: {}`), so structured data conveys almost nothing about the nested fields. The description supplies the full nested contract: the 거래 enum values, the 매입세액공제 boolean, the mutually exclusive 금액/시가/감가상각 fields, the 감가상각 sub-object shape, and the 1인당_연간금액 and 견본_광고선전물 flags.

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

Purpose4/5

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

States a specific verb+resource (간주공급·판매 과세표준 판정) and grounds it in named statutory provisions (법 제10조, 영 제19조의2·제20조·제66조), which pins the scope tightly. It does not explicitly name sibling tools or carve out overlap with close relations such as vat_exempt_use_deemed_supply or vat_deemed_input_credit, so it falls short of the top mark.

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

Usage Guidelines4/5

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

An explicit '언제:' clause defines the trigger condition (per-item determination of the VAT tax base for sales/deemed supply). There is no when-not guidance and no named alternative for adjacent cases, so it is clear context without exclusions.

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

vat_exempt_use_deemed_supplyA
Read-onlyIdempotent

면세전용 간주공급 과세표준(부가법 제10조①, 부가령 제66조). 언제: 과세사업에 쓰던 재화를 면세사업에 전용할 때 간주공급 과세표준을 계산한다. 입력: 전용일(YYYY-MM-DD) → use_date, 전용 범위(전부/일부) → mode, 자산 목록 [{구분, 취득일, 취득가액, 매입세액공제, 시가}] → assets, 일부일 때 공급가액 {taxable, exempt} → supplies. 결과: 과세표준·계산(자산별 경과과세기간수·간주시가·제외사유, 면세비율)·판단, 근거(부가가치세법 제10조①, 시행령 제66조).

NameRequiredDescriptionDefault
modeYes전용 범위: '전부'=전액 면세전용, '일부'=과세·면세 공통 사용
assetsYes[{구분:'건물'|'구축물'|'기타'|'토지'|'비상각', 취득일(YYYY-MM-DD), 취득가액(원), 매입세액공제?(기본True, bool), 시가?(비상각시 필수, 원)}]
suppliesNo일부일 때 필수: {taxable: 과세 공급가액(원), exempt: 면세 공급가액(원)}
use_dateYes면세사업에 쓰기 시작한 날(YYYY-MM-DD)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description is consistent with a pure calculator. It adds useful context beyond annotations by declaring what the result contains (자산별 경과과세기간수, 간주시가, 제외사유, 면세비율, 판단, 근거), which matters given there is no output schema. No discussion of validation failures or edge-case handling.

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

Conciseness4/5

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

Labeled sections (법적 근거 / 언제 / 입력 / 결과) make it skimmable and front-load the legal basis and trigger. It is dense and the input section partly duplicates the schema, but no sentence is wasted for a calculation of this complexity.

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

Completeness4/5

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

For a complex, multi-step tax calculation with no output schema, the description covers the legal basis, trigger, full input mapping, and the shape of the returned calculation and judgment. Only minor gaps remain, such as how partial-asset exclusions or invalid date/asset combinations are reported.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter including the assets sub-fields and the conditional supplies. The description largely restates that mapping (전용일→use_date, 전용 범위→mode, 자산 목록→assets) rather than adding new meaning such as format constraints or default behavior. Baseline 3 is correct here.

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

Purpose5/5

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

Names a specific verb and resource: '면세전용 간주공급 과세표준' calculation, anchored to 부가법 제10조① and 부가령 제66조. The '언제' clause ('과세사업에 쓰던 재화를 면세사업에 전용할 때') pins the exact scenario, which cleanly separates it from siblings like vat_deemed_input_credit or vat_common_input_allocation.

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

Usage Guidelines4/5

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

Explicit trigger condition is given ('과세사업에 쓰던 재화를 면세사업에 전용할 때'), plus the mode-specific condition that supplies is required only for 일부. It does not name sibling tools to avoid or state when-not cases, 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_input_tax_deductionA
Read-onlyIdempotent

매입세액 공제 판정(부가가치세법 제38조·제39조·제46조, 시행령 제75조). 언제: 부가가치세 신고에서 매입세액 중 공제·불공제 금액을 항목별로 판정할 때. 입력: period=과세기간('YYYY-1'|'YYYY-2'), filing='예정'|'확정', items=[{항목, 증빙, 공급가액?|공급대가?, 성격, 공급자?, 공급시기?, 발급일?, 실제공급가액?}]. 증빙: '세금계산서'|'신용카드'|'현금영수증'|'영수증'. 성격: '일반'|'접대'|'비영업용승용차'|'토지관련'|'면세사업'|'사업무관'. 공급자: '일반과세자'(기본)|'간이과세자_세금계산서'|'간이과세자_영수증'. 공급가액·공급대가 중 하나 이상 필요. 공급가액만 있으면 ×10%, 공급대가만 있으면 ×10/110. 실제공급가액이 있으면 필요적 기재사항 착오로 실제분 공제(영 제75조2호). 결과: {결과: {공제매입세액, 불공제매입세액}, 계산: {항목별: [{항목, 세액, 공제세액, 불공제사유?}], 판단: [{항목, 결론, 근거}]}}. 판단 순서: ①성격별 불공제(접대·비영업용승용차·토지관련·면세사업·사업무관) → ②증빙 '영수증' → ③신용카드·현금영수증 + 간이과세자_영수증 → ④세금계산서 발급시기(지연수취 가산세) → ⑤실제공급가액(착오 기재).

NameRequiredDescriptionDefault
itemsYes[{항목, 증빙, 공급가액?|공급대가?, 성격, 공급자?, 공급시기?, 발급일?, 실제공급가액?}]
filingYes예정신고 또는 확정신고
periodYes과세기간('YYYY-1' 또는 'YYYY-2')

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, closed-world and non-destructive, so safety is covered; the description goes well beyond that by disclosing the actual decision procedure (five ordered judgment steps, including the delay-receipt penalty and the actual-supply-value override under Decree Art. 75(2)). It also reveals how amounts are derived (×10% vs ×10/110) and what the response contains, which materially affects how an agent should trust and interpret results.

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

Conciseness4/5

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

Front-loaded with the purpose, then cleanly segmented into 언제/입력/결과/판단 순서, making it easy to scan for one specific question. Every line carries operational content. Minor redundancy: the items shape string is repeated verbatim in the schema's parameter description.

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

Completeness5/5

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

For a three-parameter, nested-item calculation tool with no output schema, the description supplies the statutory basis, all field domains and defaults, the calculation rules, the ordered judgment logic, and the return object shape. Nothing an agent needs in order to call it correctly and interpret the output is missing.

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

Parameters5/5

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

Although schema description coverage reads as 100%, the `items` parameter is declared as an untyped empty object, so the schema itself defines no nested fields. The description compensates fully: it enumerates 증빙 values, 성격 categories, 공급자 variants with a default ('일반과세자'(기본)), the supply-value vs supply-amount requirement, and the arithmetic for each case. This is genuine added meaning, not restatement.

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

Purpose4/5

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

States a precise verb and resource — judging deductible vs non-deductible input VAT per item — anchored to specific statutory articles (부가가치세법 §38·§39·§46, 시행령 §75). That scope is far more specific than the name alone. It does not, however, explicitly distinguish itself from overlapping siblings such as vat_deemed_input_credit or missing_receipt_disallowance, leaving that inference to the agent.

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

Usage Guidelines4/5

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

The '언제' line gives an explicit triggering context: during a VAT return, when judging deductible/non-deductible amounts item by item. That is clear positive guidance. There are no when-not conditions and no named alternatives for adjacent cases (e.g. deemed input credit, common input allocation), 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_simplified_taxpayerA
Read-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조).

NameRequiredDescriptionDefault
yearNo적용 연도(2016~2026)
prepaid_taxNo예정부과 고지·수시부과세액(원)
supply_incl_vatYes공급대가(부가세 포함, 원)
value_added_rateYes업종별 부가가치율(소수, 예: 0.15 = 15%, 0 초과 1 미만)
mileage_supply_incl_vatNo자기적립마일리지 등 결제분 공급대가(원) — 과세표준에서 제외
invoice_purchase_incl_vatNo세금계산서 등 수취 매입 공급대가(원)
prior_year_supply_incl_vatNo직전 연도 공급대가(원) — 납부의무 면제 판정 참조
no_invoice_purchase_incl_vatNo세금계산서 발급 의무자로부터 미수취한 매입 공급대가(원)
card_cash_receipt_supply_incl_vatNo신용카드매출전표·현금영수증 등 발급분 공급대가(원)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

vat_supply_timingA
Read-onlyIdempotent

부가가치세 공급시기 판정 — 거래별 공급시기·판정 사유와 예정신고기간·과세기간별 과세표준(공급가액) 합계. 언제: 장기할부·중간지급조건부·완성도기준지급·계속적 공급·용역 완료·수출·세금계산서 선발급 거래가 어느 과세기간(예정/확정)에 들어가는지 정할 때. 공급 2016-01-012026-12-31 지원. 입력: 거래 목록(종류·인도일/완료일·대가 지급 약정·세금계산서 발급일과 대가 수령일) → transactions, 사업자 구분('일반'|'간이') → business, 조회 기간 → period(선택). 판정: 장기할부 = 2회 이상 분할 + 인도(완료)일 다음 날부터 최종 지급기일까지 1년 이상(규칙 제17·19조) → 각 약정일. 중간지급조건부 = 계약금 약정일 다음 날부터 인도(완료)일까지 6개월 이상 + 기간 안 계약금 외 분할(규칙 제18·20조) → 각 약정일, 인도(완료)일 이후 약정분은 인도(완료)일(영 제28조③·제29조① 단서). 기간은 민법 제157조·제160조(초일 불산입, 해당일 전일 만료, 해당일 없으면 말일). 요건 미충족이면 인도(완료)일 일괄. 선발급 특례(법 제17조) 공급분 연도별 — 2017까지 ①은 '동시에' 발급, ③은 청구·지급시기 별도기재+30일 모두 / 2018 ③ 별도기재+(30일 또는 과세기간 내 지급 확인) / 20192021 ③ 30일 약정 또는 과세기간 내 공급시기 도래+지급 확인 / 2022~ 지급 확인 요건 삭제(부칙 제6조). 장기할부·계속적 공급은 ④(영 제30조) 발급일. 미지원(입력 확인 필요): 상품권·가공·무인판매기·보세구역·위탁판매·간주공급, 선적일 외 수출(중계무역·외국인도 등), 부동산 임대·선불 연회비(영 제29조②), 외국항행용역, 폐업일 의제, 공급시기 후 발급 가산세. 결과: 기간별_과세표준·조회기간_과세표준, 거래별 공급시기·금액·신고기간·사유·근거, 판단(요건 경계 계산).

NameRequiredDescriptionDefault
periodNo조회 기간(선택). 일반: 'YYYY-1기 예정'·'YYYY-1기 확정'(4.1~6.30)·'YYYY-2기'(과세기간 전체). 간이: 'YYYY' 또는 'YYYY 예정부과'
businessNo사업자 구분 — '일반'(과세기간 1·2기, 예정신고기간 1.1~3.31·7.1~9.30) 또는 '간이'(과세기간 1년, 예정부과기간 1.1~6.30)일반
transactionsYes거래 목록 [{이름?, 종류, 인도일?(재화 인도·이용가능일, 용역은 완료일), 대가?: [{약정일, 금액, 구분?('계약금'|'중도금'|'잔금')}], 공급가액?(대가 목록이 없을 때), 선적일?(수출), 확정일?(조건부·기한부 판매), 국고_선금급?(bool), 세금계산서?: [{발급일, 금액?, 수령일?(대가 받은 날), 청구지급시기_별도기재?(bool), 지급시기?(계약서상 지급일), 공급받는자_조기환급?(bool)}]}]. 종류: 일반판매·할부·장기할부·중간지급조건부·완성도기준지급·계속적공급(전력 등)·조건부판매·수출, 용역·용역_장기할부·용역_중간지급조건부·용역_완성도기준지급·용역_계속적공급

TDQS

A4.8/5.0
Behavior5/5

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

Against annotations that already declare readOnly/idempotent/non-destructive, the description adds substantive behavior: a hard supported date window (2016-01-01~2026-12-31), the exact legal tests applied per transaction type, and an explicit enumeration of unsupported cases. It also discloses the rationale that unmet requirements collapse to a single 인도(완료)일 judgment, which an agent otherwise could not infer.

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

Conciseness4/5

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

Content is front-loaded and sectioned (언제 / 입력 / 판정 / 미지원 / 결과), so an agent can stop after the first two blocks. The multi-line 판정 rule detail is long and partly beyond what is needed to select and invoke the tool, though it does help interpret output.

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

Completeness5/5

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

With no output schema, the description names the returned fields (기간별_과세표준, 조회기간_과세표준, 거래별 공급시기·금액·신고기간·사유·근거, 판단). Combined with the supported date range, the unsupported-case list, and the required transactions structure, nothing material is missing for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description adds value by mapping each named input to a parameter (transactions, business '일반'|'간이', optional period) and stating period is optional. It does not add format/syntax detail beyond the schema's own period and business descriptions, so it stays modestly above baseline rather than fully complementary.

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

Purpose5/5

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

The first line states a precise verb+resource: '부가가치세 공급시기 판정' plus what it returns (거래별 공급시기·판정 사유 and 과세표준 합계 by 예정신고기간/과세기간). The scope is narrow enough (supply timing only) that it is naturally separable from siblings such as vat_deemed_supply_items 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.

Usage Guidelines5/5

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

An explicit '언제:' clause names the transaction types that select this tool (장기할부, 중간지급조건부, 완성도기준지급, 계속적 공급, 용역 완료, 수출, 세금계산서 선발급). A '미지원(입력 확인 필요)' list explicitly carves out when NOT to use it (상품권·가공·무인판매기·보세구역·위탁판매·간주공급, 중계무역 수출, 부동산 임대 등).

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

wage_income_taxA
Read-onlyIdempotent

근로소득공제·산출세액·근로소득세액공제·결정세액(참고). 언제: 근로소득만 있는 근로자의 연말정산에서, 또는 '연봉 얼마면 세금 얼마'를 어림할 때. 입력: 총급여(원, 비과세 제외) → gross_pay, 귀속연도(2016~2026) → year, 종합소득 과세표준(원, 모르면 생략) → tax_base. 결과: 근로소득공제·근로소득금액·과세표준·산출세액·근로소득세액공제·결정세액(참고: 표준세액공제 13만 원만 적용)·지방소득세, 근거(소득세법 제47조①·제55조·제59조·제59조의4⑨). Wage income: employment income deduction, computed tax and wage tax credit.

NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
tax_baseNo종합소득 과세표준(원). 모르면 생략 — 근로소득금액에서 본인 기본공제 150만 원만 뺀 값으로 계산하고 그 사실을 판단에 적음
gross_payYes총급여(원, 비과세 제외) — 연봉에서 비과세 수당을 뺀 금액

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds useful domain-specific caveats: only the standard tax credit of 130,000 KRW is applied, and omitting tax_base triggers a basic-deduction-only calculation noted in the judgment. This is meaningful transparency beyond the schema, though it does not discuss rounding or other calculation limits.

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

Conciseness4/5

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

The content is front-loaded with the computed outputs, then usage, inputs, and result fields in a compact block. It is dense but not padded, and the short English gloss at the end adds minimal waste.

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

Completeness4/5

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

With only three parameters and no output schema, the description supplies the important return fields, the standard-tax-credit caveat, the legal basis, and the fallback behavior when tax_base is omitted. It is close to complete for an agent, though it could mention that non-employment income is out of scope.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented in detail. The description restates gross_pay, year, and tax_base semantics, adding the high-level input sequence but little beyond the schema text, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description states a specific computation resource precisely: wage income deduction, calculated tax, wage income tax credit, and determined tax, plus the legal basis. It is clearly not a generic income tax tool, but it does not explicitly distinguish itself from close siblings such as income_tax or earned_income_gross_pay, leaving that routing to inference.

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

Usage Guidelines4/5

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

It gives explicit usage context: year-end settlement for a worker with only employment income, or rough estimation of 'salary X means tax Y'. It does not state when not to use it or name alternatives for comprehensive income or withholding scenarios, so it falls short of full alternative routing.

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

withholding_taxA
Read-onlyIdempotent

국내 원천징수세액(소득세분). 언제: 이자·배당·사업·기타소득 등을 지급할 때 원천징수할 소득세액을 구한다. 입력: 소득 종류(이자·배당·비영업대금·사업·기타·봉사료·일용·비실명·외국인직업운동가·온투업이자) → kind, 지급액(원) → amount, 지급연도(2016~2026) → year. 결과: 원천징수세액·적용 세율, 근거(소득세법 제129조). 지방소득세 10% 별도. 비거주자·외국법인은 nonresident_withholding 사용. 국내 withholding tax (소득세분) on interest, dividends, business income, etc.

NameRequiredDescriptionDefault
kindYes소득 종류: 이자·배당·비영업대금·사업·기타·봉사료·일용·비실명·외국인직업운동가·온투업이자
yearNo지급연도(2016~2026)
amountYes금액(원)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 14 tool updatesv0.17.0
    • Addedbuilding_standard_price
    • Changedbusiness_car_expense2 fields changed
      • addedInput schema / properties / acquisition_cost
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "차량 취득가액(원, 임차는 기준가액). 8천만원 미만이면 번호판 요건 대상이 아니므로 plate_ok=False여도 업무사용비율 그대로",
        +  "title": "Acquisition Cost"
        +}
      • changedInput schema / properties / plate_ok / description
        Previous value: -"법인 전용번호판 부착(2024년 이후 요건)"New value: +"법인업무용 자동차등록번호판 부착 여부(2024.1.1. 이후 취득·임차 차량 중 취득가액(임차는 기준가액) 8천만원 이상인 차량만 대상 — acquisition_cost를 주면 기준 미만 차량엔 적용하지 않음)"
    • Changedentertainment_limit1 field changed
      • addedInput schema / properties / market
        Added value: +{
        +  "default": 0,
        +  "description": "전통시장(및 조특법 제136조⑥의 대상)에서 지출한 기업업무추진비(원, 2023 사업연도부터) — 일반한도의 일정 비율 안에서 추가한도",
        +  "minimum": 0,
        +  "title": "Market",
        +  "type": "integer"
        +}
    • Changedfinancial_income_aggregate1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"금융소득 항목 [{kind, amount, withheld?, ...}]. kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당·출자공동사업자배당·외국법인배당·환매조건부매매차익·법원보증금이자·직장공제회초과반환금·손해배상법정이자·공익신탁이익. withheld=false: 국내에서 원천징수되지 않은 이자·배당(개인 간 대여 이자, 국외 배당)은 2천만원 이하여도 종합과세(제14조③6호), 기본 true. 의제배당_잉여금자본전입은 source 필수 — 이익잉여금·자기주식처분이익·상환주식_주식발행초과금·자기주식소각이익_2년내(과세) / 주식발행초과금·자본준비금·재평가적립금·합병차익·분할차익·주식의포괄적교환차익·주식의포괄적이전차익·자기주식소각이익(과세 제외) / 재평가적립금_토지1%. 투자신탁환매이익은 components 필수 — [{asset, gain}] 목록, asset이 '상장주식'인 손익만 빼고 나머지(채권·비상장주식·배당·이자 등 아무 이름)는 합산, 손실은 음수. 예: {kind:'투자신탁환매이익', amount:18000000, components:[{asset:'상장주식', gain:3000000}, {asset:'배당', gain:15000000}]}. 직장공제회초과반환금은 contribution_years(납입연수)를 주면 연분연승 세액까지"New value: +"금융소득 항목 [{kind, amount, withheld?, ...}]. kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당·출자공동사업자배당·외국법인배당·환매조건부매매차익·법원보증금이자·직장공제회초과반환금·통합발행채권할인액·손해배상법정이자·공익신탁이익. withheld=false: 국내에서 원천징수되지 않은 이자·배당(개인 간 대여 이자, 국외 배당)은 2천만원 이하여도 종합과세(제14조③6호), 기본 true. 의제배당_잉여금자본전입은 source 필수 — 이익잉여금·자기주식처분이익·상환주식_주식발행초과금·자기주식소각이익_2년내(과세) / 주식발행초과금·자본준비금·재평가적립금·합병차익·분할차익·주식의포괄적교환차익·주식의포괄적이전차익·자기주식소각이익(과세 제외) / 재평가적립금_토지1%. 투자신탁환매이익은 components 필수 — [{asset, gain}] 목록, asset이 '상장주식'인 손익만 빼고 나머지(채권·비상장주식·배당·이자 등 아무 이름)는 합산, 손실은 음수. 예: {kind:'투자신탁환매이익', amount:18000000, components:[{asset:'상장주식', gain:3000000}, {asset:'배당', gain:15000000}]}. 직장공제회초과반환금은 contribution_years(납입연수)를 주면 연분연승 세액까지"
    • Changedgift_tax2 fields changed
      • changedInput schema / properties / relation / description
        Previous value: -"수증자 기준 증여자와의 관계"New value: +"수증자 기준 증여자와의 관계 — 배우자|직계존속|직계비속|기타친족|기타. 평소 말(부모·자녀·남편·형제·장인 등)도 됨"
      • removedInput schema / properties / relation / enum
        Removed value: -[
        -  "배우자",
        -  "직계존속",
        -  "직계비속",
        -  "기타친족",
        -  "기타"
        -]
    • Addedindividual_donation_expense
    • Addedofficial_property_price
    • Changedretirement_allowance_adjustment1 field changed
      • changedInput schema / properties / pension / description
        Previous value: -"확정급여형 퇴직연금(원) {asset_closing: 퇴직연금운용자산 기말잔액, prior_deducted: 세무상 퇴직연금충당금 기초잔액(이미 손금산입한 부담금 누계, △유보), book_provision?: 결산에 계상한 퇴직연금충당금(신고조정이면 0), dc_transferred_allowance?: 확정기여형 전환자의 설정 전 기계상 퇴직급여충당금} — 없으면 퇴직연금 조정 생략"New value: +"확정급여형 퇴직연금(원) {asset_closing: 퇴직연금운용자산 기말잔액, prior_deducted: 세무상 퇴직연금충당금 기초잔액(이미 손금산입한 부담금 누계, △유보), book_provision?: 결산에 계상한 퇴직연금충당금(신고조정이면 0), book_paid?: 당기 퇴직연금운용자산에서 지급하고 장부 퇴직연금충당금과 상계한 금액(퇴직급여충당금과 상계한 몫은 allowance.paid_pension), dc_transferred_allowance?: 확정기여형 전환자의 설정 전 기계상 퇴직급여충당금} — 없으면 퇴직연금 조정 생략"
    • Addedstock_basis_income_tax
    • Addedstock_capital_gains_tax
    • Addedstock_major_shareholder
    • Addedstock_price_lookup
    • Addedunlisted_stock_valuation
    • Changedwage_income_tax6 fields changed
      • changedInput schema / properties / gross_pay / description
        Previous value: -"총급여(원, 비과세 제외)"New value: +"총급여(원, 비과세 제외) — 연봉에서 비과세 수당을 뺀 금액"
      • addedInput schema / properties / tax_base / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / tax_base / default
        Added value: +null
      • changedInput schema / properties / tax_base / description
        Previous value: -"종합소득 과세표준(원)"New value: +"종합소득 과세표준(원). 모르면 생략 — 근로소득금액에서 본인 기본공제 150만 원만 뺀 값으로 계산하고 그 사실을 판단에 적음"
      • removedInput schema / properties / tax_base / type
        Removed value: -"integer"
      • changedInput schema / required
        Previous value: -[
        -  "gross_pay",
        -  "tax_base",
        -  "year"
        -]New value: +[
        +  "gross_pay",
        +  "year"
        +]
  2. 23 tool updatesv0.15.1
    • Changedasset_grant_reserve1 field changed
      • changedInput schema / properties / assets / description
        Previous value: -"[{asset, cost, used?(그 자산에 쓴 보조금·공사부담금 금액, 원), depreciable, depreciation_this_year, disposed?, disposed_ratio?, book_provision?, book_reversal?}]"New value: +"[{asset, cost, used?(그 자산에 쓴 보조금·공사부담금·보험차익 금액, 원), depreciable, depreciation_this_year(그해 세무상 손금으로 인정되는 감가상각비 — 회사계상액이 상각범위액을 넘으면 상각범위액, depreciation_adjustment로 먼저 계산), disposed?, disposed_ratio?, book_provision?, book_reversal?}]"
    • Changedcapital_gains_income7 fields changed
      • addedInput schema / properties / adjusted_area
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "one_house=False인 주택: 양도일 현재 양도 주택이 조정대상지역(주택법 제63조의2①1호)에 있는지",
        +  "title": "Adjusted Area"
        +}
      • addedInput schema / properties / designated_area
        Added value: +{
        +  "default": false,
        +  "description": "non_business_land=True인 토지: 지정지역(제104조의2②) 소재 여부. True면 2018.1.1. 이후 양도분 기본세율+20%p(제104조④3호). apply_basic_deduction=True일 때 산출세액에 반영",
        +  "title": "Designated Area",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / exclusion_basis
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "exclusion_reason='기타'일 때 근거 조문·호와 요건 충족 사실",
        +  "title": "Exclusion Basis"
        +}
      • addedInput schema / properties / exclusion_reason
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "중과 배제 사유(사용자 주장, 요건 충족은 사용자 확인): '지방저가주택'|'장기임대주택'|'감면대상장기임대주택'|'장기사원용주택'|'조특법감면주택'|'문화재주택'|'상속주택'|'저당권실행취득주택'|'어린이집주택'|'취학근무요양'(2주택만)|'수도권밖주택'(2주택만)|'소송주택'(2주택만)|'기준시가1억이하'(2주택만)|'일반주택'|'조정지역공고전계약'|'1세대1주택특례주택'|'한시배제_경과'(2026.5.10.~11.9. 양도, 영 12호의2 나·다목)|'기타'(exclusion_basis 필수). 한시 배제(2019.12.17.~2020.6.30. 보유 10년 이상, 2022.5.10.~2026.5.9. 보유 2년 이상)는 도구가 날짜로 판정",
        +  "title": "Exclusion Reason"
        +}
      • changedInput schema / properties / heavy_multi_home / description
        Previous value: -"one_house=False인 주택: 다주택 중과(제104조⑦) 대상 여부. True면 지원하지 않음"New value: +"one_house=False인 주택: 다주택 중과(제104조⑦) 대상 여부(이전 입력). False=중과 대상 아님. True만으로는 계산하지 않음 — houses_count·adjusted_area로 입력"
      • addedInput schema / properties / houses_count
        Added value: +{
        +  "anyOf": [
        +    {
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "one_house=False인 주택: 양도일 현재 1세대 주택 수(조합원입주권·분양권 포함, 분양권은 2021.1.1. 이후 취득분부터). 영 제167조의3①·제167조의10① 각 호 외의 부분 괄호(지방 기준시가 3억원 이하 주택 등)로 주택 수에서 빼는 주택은 사용자가 판단해 뺀 수. 2=1세대 2주택(제104조⑦1호·2호), 3 이상=3주택 이상(3호·4호)",
        +  "title": "Houses Count"
        +}
      • addedInput schema / properties / non_business_land
        Added value: +{
        +  "default": false,
        +  "description": "토지만: 비사업용 토지 여부(True면 세율 기본세율+10%p, 제104조①8호). apply_basic_deduction=True일 때 산출세액에 반영",
        +  "title": "Non Business Land",
        +  "type": "boolean"
        +}
    • Addedcapital_gains_tax
    • Addedchild_tax_credit
    • Changeddisaster_loss_credit1 field changed
      • changedInput schema / properties / unpaid_prior_tax / description
        Previous value: -"재해일 현재 미납·미부과 법인세(원)"New value: +"재해일 현재 미납·미부과 법인세 본세(원) — 가산세는 넣지 말고 penalty_items로 따로(두 번 들어감)"
    • Addeddividend_tax_credit
    • Changedestimated_business_income1 field changed
      • changedInput schema / properties / multiplier / description
        Previous value: -"배율(예 2.8 또는 '280%', 생략 시 간편 2.8·복식 3.4)"New value: +"배율(예 2.8 또는 '280%'). 생략 시 귀속연도 기준 — 2016~2018년 간편 2.6·복식 3.2, 2020년~ 간편 2.8·복식 3.4. 2019년 귀속은 결정 시점에 따라 달라 직접 입력 필요"
    • Changedfinancial_income_aggregate1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"금융소득 항목 [{kind, amount, ...}] — kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당·손해배상법정이자·공익신탁이익"New value: +"금융소득 항목 [{kind, amount, withheld?, ...}]. kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당·출자공동사업자배당·외국법인배당·환매조건부매매차익·법원보증금이자·직장공제회초과반환금·손해배상법정이자·공익신탁이익. withheld=false: 국내에서 원천징수되지 않은 이자·배당(개인 간 대여 이자, 국외 배당)은 2천만원 이하여도 종합과세(제14조③6호), 기본 true. 의제배당_잉여금자본전입은 source 필수 — 이익잉여금·자기주식처분이익·상환주식_주식발행초과금·자기주식소각이익_2년내(과세) / 주식발행초과금·자본준비금·재평가적립금·합병차익·분할차익·주식의포괄적교환차익·주식의포괄적이전차익·자기주식소각이익(과세 제외) / 재평가적립금_토지1%. 투자신탁환매이익은 components 필수 — [{asset, gain}] 목록, asset이 '상장주식'인 손익만 빼고 나머지(채권·비상장주식·배당·이자 등 아무 이름)는 합산, 손실은 음수. 예: {kind:'투자신탁환매이익', amount:18000000, components:[{asset:'상장주식', gain:3000000}, {asset:'배당', gain:15000000}]}. 직장공제회초과반환금은 contribution_years(납입연수)를 주면 연분연승 세액까지"
    • Addedfind_tool
    • Addedhousing_deemed_rent_income
    • Addedhousing_rental_income
    • Changedincome_adjustment_total1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"[{항목(이름), 종류, 금액(원), 방향?('가산'|'차감'|'없음'), 소득처분?}]"New value: +"[{항목(이름), 종류, 금액(원), 방향?('가산'|'차감'|'없음'), 소득처분?}] — 종류: 법인세비용·법인지방소득세·벌금·과태료·가산세·환급금이자·자기주식처분이익(자본잉여금)·미수이자(원천징수대상)·비지정기부금·기업업무추진비 한도초과·감가상각비 한도초과·업무무관 지급이자·수입배당금 익금불산입·이월결손금 보전 자산수증이익·사업용 재산세·기부금 한도초과(별칭: 법인세·국세환급가산금·자기주식처분이익·미수이자·재산세 등). 사전에 없으면 방향을 주면 됨"
    • Changedincome_loss_offset2 fields changed
      • changedInput schema / properties / estimated / description
        Previous value: -"추계 과세 여부(True면 이월결손금 전부 건너뜀)"New value: +"추계 과세 여부(True면 그 연도에는 이월결손금을 공제하지 않고 소멸 없이 다음 연도로 넘김, 제45조④)"
      • changedInput schema / properties / incomes / description
        Previous value: -"{부동산임대, 근로, 연금, 기타, 이자, 배당} — 각 소득금액(원). 부동산임대는 음수=결손금. 사업소득은 business로 입력(사업소득은 incomes['사업']으로 넣지 않음)."New value: +"{부동산임대, 주거용임대, 근로, 연금, 기타, 이자, 배당} — 각 소득금액(원), 음수=결손금. 부동산임대 = 주거용 건물 임대업을 뺀 부동산임대업(결손금은 부동산임대 소득에서만 공제, 제45조②). 주거용임대 = 주거용 건물 임대업(결손금도 다른 종합소득에서 공제, 제45조② 단서) — 임대 결손금은 주거용분을 꼭 나눠 넣는다. 사업소득은 business로 입력(사업소득은 incomes['사업']으로 넣지 않음)."
    • Changednonbusiness_interest_disallowance20 fields changed
      • addedInput schema / $defs / Loan / properties / days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Days"
        +}
      • addedInput schema / $defs / Loan / properties / jeoksu / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / Loan / properties / jeoksu / default
        Added value: +null
      • removedInput schema / $defs / Loan / properties / jeoksu / type
        Removed value: -"integer"
      • addedInput schema / $defs / Loan / properties / kind
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Kind"
        +}
      • addedInput schema / $defs / Loan / properties / principal
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Principal"
        +}
      • addedInput schema / $defs / Loan / properties / rate
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Rate"
        +}
      • addedInput schema / $defs / Loan / properties / withholding
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Withholding"
        +}
      • changedInput schema / $defs / Loan / required
        Previous value: -[
        -  "interest",
        -  "jeoksu"
        -]New value: +[
        +  "interest"
        +]
      • addedInput schema / properties / advances
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "가지급금 등 [{대상: 대표이사|대표자|임원|직원|주주|특수관계법인|기타특수관계인|비특수관계인, 이름?(동일인 상계용), 사유: 업무무관대여|미지급소득세대납|국외투자법인비용대납|우리사주취득자금|퇴직금전환금|대표자상여소득세대납|급료가불|경조사비대여|학자금대여|주택자금대여|자산관리공사출자법인대여, 금액, 지급일, 회수일? | movements [{일자, 증감}], 총결정세액·미지급소득·종합소득금액?(미지급소득세대납), 월정급여?(급료가불), 해당법인주식?(우리사주), 중소기업·지배주주등?(주택자금)}]",
        +  "title": "Advances"
        +}
      • addedInput schema / properties / company
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "가지급금을 지급한 법인 이름(relations 안의 법인). advances[].상대방으로 특수관계인 판정할 때 필요",
        +  "title": "Company"
        +}
      • addedInput schema / properties / deposits
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "가수금 [{이름|대상, 금액, 일자, 반환일? | movements [{일자, 증감}], 상계불가?(상환기간·이자율 약정으로 상계 불가)}]",
        +  "title": "Deposits"
        +}
      • addedInput schema / properties / fiscal_end
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "사업연도 종료일(YYYY-MM-DD). 생략 시 개시일 1년 뒤 전날",
        +  "title": "Fiscal End"
        +}
      • addedInput schema / properties / fiscal_start
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "사업연도 개시일(YYYY-MM-DD). 생략 시 year-01-01",
        +  "title": "Fiscal Start"
        +}
      • changedInput schema / properties / loans / description
        Previous value: -"차입금별 [{interest: 지급이자(원), jeoksu: 차입금 적수(원·일)}]"New value: +"차입금별 [{interest: 지급이자(원), jeoksu?: 차입금 적수(원·일) | principal·days | rate, kind?: 일반|채권자불분명|비실명|건설자금|기업구매자금|금융회사제외차입금, withholding?: 원천징수세액}]"
      • addedInput schema / properties / nonbusiness_jeoksu / default
        Added value: +0
      • changedInput schema / properties / nonbusiness_jeoksu / description
        Previous value: -"업무무관자산·가지급금 적수 합(원·일)"New value: +"업무무관자산(영 제49조①) 적수 + 직접 계산한 가지급금 적수 합(원·일). advances로 가지급금을 넣으면 그 적수는 여기서 빼고 넣는다"
      • addedInput schema / properties / relations
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "특수관계 판정 자료 — related_judge와 같은 형식 {people, family, stakes, officers?, employees?, livelihood?, livelihood_shared?, influence?, group?, group_exempt?}. 예: {\"people\": {\"㈜가람\": {\"구분\": \"법인\"}, \"김대표\": {\"구분\": \"개인\"}}, \"family\": [], \"stakes\": [[\"김대표\", \"㈜가람\", 0.6]], \"officers\": {\"㈜가람\": [\"김대표\"]}}",
        +  "title": "Relations"
        +}
      • addedInput schema / properties / year
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 2026,
        +      "minimum": 2016,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "사업연도(개시일이 속하는 연도, 2016~2026). advances·deposits를 넣으면 필요",
        +  "title": "Year"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "loans",
        -  "nonbusiness_jeoksu"
        -]New value: +[
        +  "loans"
        +]
    • Changedother_income_aggregate1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"기타소득 항목 [{kind, amount, ...}] — kind: 산업재산권대여·일시적인적용역·뇌물·위약금·배상금·주택입주지체상금·연금외수령·직무발명보상금_퇴직후·승마투표권환급금·슬롯머신당첨금"New value: +"기타소득 항목 [{kind, amount, ...}] — kind: 산업재산권대여·공익사업지상권대여·서화골동품양도·일시적인적용역·뇌물·위약금·배상금·주택입주지체상금·연금외수령·직무발명보상금_퇴직후·승마투표권환급금·슬롯머신당첨금"
    • Changedrelated_judge1 field changed
      • addedInput schema / properties / livelihood_shared
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {},
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "생계를 함께하는 친족 사실관계 [{친족, 상대방(임원·사용인·생계유지자), 주민등록_동일세대: true|false|모름, 동거_사실: 같은집_공유구조|같은집_독립구조|따로거주|모름, 생활비_공동부담: 공동|각자분담_증빙있음|각자분담_증빙없음|일방지원|모름, 독립생계_소득: 안정소득_있음|소액_일시|없음|모름, 경제적_지원: 정기송금_있음|차입후상환|용돈수준|제3자_지원|없음|모름, 별거_사유: 취학|질병요양|근무|사업|혼인파탄|독립|해당없음, 별도_임대차: bool, 별거_증빙_유형: [공과금·관리비_명의|금융_송금|출입국|전화·인터넷_가입|임대차_중개확인|진술서만|없음], 연말정산_부양가족_등록: bool, 수입_상대방계좌_입금: bool, 혼인_독립가구: bool, 친족관계?: 배우자|혈족|인척, 촌수?}]. 예: [{\"친족\": \"이배우\", \"상대방\": \"김대표\", \"생활비_공동부담\": \"공동\"}]",
        +  "title": "Livelihood Shared"
        +}
    • Addedreligious_income
    • Changedretirement_income_tax1 field changed
      • addedInput schema / properties / retire_year
        Added value: +{
        +  "default": 2025,
        +  "description": "퇴직한 해(2020~2026). 근속연수공제표(2023 개정)·기본세율표가 이 해 기준",
        +  "maximum": 2026,
        +  "minimum": 2016,
        +  "title": "Retire Year",
        +  "type": "integer"
        +}
    • Changedsimplified_vat_return5 fields changed
      • addedInput schema / properties / prior_year_supplies / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / prior_year_supplies / default
        Added value: +null
      • changedInput schema / properties / prior_year_supplies / description
        Previous value: -"직전연도 공급대가 합계(원)"New value: +"직전연도 공급대가 합계(원) — 세금계산서 미수취 가산세 판정에만 씀. 미수취 매입이 없으면 생략 가능"
      • removedInput schema / properties / prior_year_supplies / type
        Removed value: -"integer"
      • changedInput schema / required
        Previous value: -[
        -  "year",
        -  "business_type",
        -  "prior_year_supplies",
        -  "ledger"
        -]New value: +[
        +  "year",
        +  "business_type",
        +  "ledger"
        +]
    • Changedspecial_tax_credit2 fields changed
      • changedInput schema / properties / expenses / description
        Previous value: -"[{kind, amount, person, reimbursed?}]"New value: +"[{kind, amount, person, reimbursed?}] — person은 persons의 name. 1명당 연 한도는 같은 person의 지출을 합산해 적용: 안경 50만원, 교복 50만원, 체험학습 30만원(2017~), 취학전·초중고 300만원(교복·체험학습 포함), 대학 900만원. 같은 사람의 지출은 같은 name으로 넣을 것. kind 예체능학원_초등저학년(2026~, 제59조의4③1호마목): 종료일 현재 9세 미만 또는 2학년 이하 초등학생의 예능학원·체육시설 월 단위·주 1회 이상 교습과정 수강료, 300만원 한도에 합산"
      • changedInput schema / properties / persons / description
        Previous 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}]"New value: +"[{name, relation, age, disabled?, income_ok?, severe_illness?, age_at_year_start?, birth_date?, school_grade?}] — name: 사람 표시 이름(문자열, 중복 불가). relation: 공제대상자와의 관계. 허용값: 본인·배우자·직계비속·입양자·형제자매·직계존속·위탁아동·수급자. 문항 표현 그대로 '자녀'·'아들'·'딸'은 '직계비속', '부모'·'모친'·'부친'은 '직계존속'으로 적을 것. age: 과세기간 종료일(12/31) 현재 만 나이(정수). disabled: 장애인 여부(bool). age_at_year_start: 과세기간 개시일(1/1) 현재 만 나이 — 의료비 6세 이하 특정지출(2024~)에서 age=7이면 필요, birth_date(YYYY-MM-DD)로 대신 가능. school_grade: 초등학교 학년(예체능학원_초등저학년에서 age 9 이상일 때 필요). income_ok: 연 소득금액 100만원 이하(근로소득만 있으면 총급여 500만원 이하)면 true — 문항의 '소득 없음'은 true로 입력. severe_illness: 중증질환자·희귀난치성질환자·결핵환자 여부(bool) — 2018년부터 의료비 특정지출, 2016~2017은 일반(700만원 한도). 예시: [{'name':'본인','relation':'본인','age':50,'income_ok':true}, {'name':'딸','relation':'직계비속','age':16,'income_ok':true}]"
    • Addedtax_priority_distribution
    • Changedvat_deemed_input_credit1 field changed
      • addedInput schema / properties / filing
        Added value: +{
        +  "default": "확정",
        +  "description": "신고 구분(기본 '확정'). '예정'이면 공제 한도(과세표준 × 한도율)를 적용하지 않음 — 한도는 확정신고 때 과세기간 전체로 정산(부가가치세법 제42조②)",
        +  "enum": [
        +    "확정",
        +    "예정"
        +  ],
        +  "title": "Filing",
        +  "type": "string"
        +}
    • Addedvat_supply_timing
  3. 18 tool updatesv0.12.2
    • Changedcapital_gains_income8 fields changed
      • addedInput schema / properties / acquisition_price / default
        Added value: +0
      • changedInput schema / properties / acquisition_price / description
        Previous value: -"취득가액 — 취득 당시 실지거래가액(원, 취득세·취득 중개수수료 등 포함, 재산세 제외, 환산취득가액 사용 시 0)"New value: +"취득가액 — 취득 당시 실지거래가액(원, 취득세·취득 중개수수료 등 포함, 재산세 제외, 환산취득가액 사용 시 0). burdened_gift 입력 시 생략 가능(생략 시 0)"
      • addedInput schema / properties / burdened_gift
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "부담부증여(소득세법 시행령 제159조) — {증여가액, 채무액, 평가:'시가'|'기준시가', 취득_기준시가?(평가='기준시가'면 필수), 취득가액_실지?(평가='시가'면 필수)}. 증여가액·채무액으로 양도가액과 취득가액을 자동 계산. transfer_price나 acquisition_price와 함께 입력 불가",
        +  "title": "Burdened Gift"
        +}
      • addedInput schema / properties / transfer_price / default
        Added value: +0
      • changedInput schema / properties / transfer_price / description
        Previous value: -"양도가액 — 양도 당시 실지거래가액(원)"New value: +"양도가액 — 양도 당시 실지거래가액(원). burdened_gift 입력 시 생략 가능(생략 시 0)"
      • removedInput schema / properties / transfer_price / exclusiveMinimum
        Removed value: -0
      • addedInput schema / properties / transfer_price / minimum
        Added value: +0
      • changedInput schema / required
        Previous value: -[
        -  "asset_type",
        -  "acquisition_date",
        -  "transfer_date",
        -  "transfer_price",
        -  "acquisition_price"
        -]New value: +[
        +  "asset_type",
        +  "acquisition_date",
        +  "transfer_date"
        +]
    • Addedcorporate_deemed_rent_income
    • Changeddeemed_dividend_bonus_shares1 field changed
      • changedInput schema / properties / source / description
        Previous value: -"재원 — 어휘 '의제배당_잉여금자본전입.판단.재원별' 키: 주식발행초과금·자본준비금·재평가적립금·자기주식처분이익·이익잉여금·재평가적립금_토지1%"New value: +"재원 — 어휘 '의제배당_잉여금자본전입.판단.재원별' 키: 주식발행초과금·자본준비금·재평가적립금·자기주식처분이익·이익잉여금·재평가적립금_토지1%·상환주식_주식발행초과금·자기주식소각이익_2년내·자기주식소각이익"
    • Addeddisaster_loss_credit
    • Addedestimated_business_income
    • Addedexport_workbook
    • Changedfinancial_income_aggregate1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"금융소득 항목 [{kind, amount, ...}] — kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당"New value: +"금융소득 항목 [{kind, amount, ...}] — kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당·손해배상법정이자·공익신탁이익"
    • Addedincome_adjustment_total
    • Addedincome_loss_offset
    • Addedinheritance_gift_valuation
    • Addedliquidation_income
    • Changedother_income_aggregate1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"기타소득 항목 [{kind, amount, ...}] — kind: 산업재산권대여·일시적인적용역·뇌물·위약금·배상금·주택입주지체상금·연금외수령·직무발명보상금_퇴직후"New value: +"기타소득 항목 [{kind, amount, ...}] — kind: 산업재산권대여·일시적인적용역·뇌물·위약금·배상금·주택입주지체상금·연금외수령·직무발명보상금_퇴직후·승마투표권환급금·슬롯머신당첨금"
    • Addedpension_account_withdrawal
    • Addedpension_income
    • Addedpersonal_deduction
    • Addedvat_deemed_supply_items
    • Addedvat_exempt_use_deemed_supply
    • Addedvat_input_tax_deduction
  4. 6 tool updatesv0.11.0
    • Changedcapital_gains_income9 fields changed
      • addedInput schema / properties / acquisition_brokerage
        Added value: +{
        +  "default": 0,
        +  "description": "취득 시 중개수수료(원) — 문항 표의 '취득시 중개수수료'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함",
        +  "title": "Acquisition Brokerage",
        +  "type": "integer"
        +}
      • addedInput schema / properties / acquisition_tax
        Added value: +{
        +  "default": 0,
        +  "description": "취득세(원) — 문항 표의 '취득세'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함",
        +  "title": "Acquisition Tax",
        +  "type": "integer"
        +}
      • addedInput schema / properties / capital_expenditure / default
        Added value: +0
      • addedInput schema / properties / holding_tax_paid
        Added value: +{
        +  "default": 0,
        +  "description": "보유 중 납부한 재산세·종합부동산세(원) — 필요경비에 넣지 않고 판단에서 필요경비가 아님을 명시함",
        +  "title": "Holding Tax Paid",
        +  "type": "integer"
        +}
      • addedInput schema / properties / registered / default
        Added value: +true
      • addedInput schema / properties / residence_end
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "거주 종료일 YYYY-MM-DD — 생략 시 transfer_date를 사용",
        +  "title": "Residence End"
        +}
      • addedInput schema / properties / residence_start
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "거주 시작일 YYYY-MM-DD — residence_end와 함께 입력하면 거주기간(만 년수)을 도구가 계산함. residence_years와 다르면 문제로 거부",
        +  "title": "Residence Start"
        +}
      • addedInput schema / properties / transfer_expenses / default
        Added value: +0
      • changedInput schema / required
        Previous 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"
        +]
    • Changedcommon_input_tax2 fields changed
      • changedInput schema / properties / common_asset_sales / description
        Previous value: -"공통사용재화 공급 목록 [{sale_price(공급가액), input_tax(그 재화의 매입세액)}]"New value: +"공통사용재화 공급 목록 [{sale_price(공급가액), input_tax(그 재화의 매입세액 — ledger에 넣지 말고 여기만 입력, 신규 사업 아니면 직전 과세기간 비율로 안분 공제)}]"
      • changedInput schema / properties / ledger / description
        Previous value: -"원장형 입력 당기 매입 항목 [{항목, 매입세액 | 매입가액(×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(0~1) | 횟수:{과세,면세} | 면적:{과세,면세} — 둘 중 하나: 매입세액 또는 매입가액"New value: +"원장형 입력 당기 매입 항목 [{항목, 매입세액 | 매입가액(×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(0~1) | 횟수:{과세,면세} | 면적:{과세,면세} | 신축건물(bool, 기본 False) — 둘 중 하나: 매입세액 또는 매입가액. 공통+신축건물+면적 있으면 예정사용면적비율 우선 적용"
    • Changedentertainment_adjustment2 fields changed
      • changedInput schema / properties / ledger / description
        Previous value: -"원장형 입력 [{항목, 금액, 증빙:'없음'|'영수증 등'|'적격'(기본 '적격'), 성격?:'교제목적'|'직원단체_법인'|'직원단체_비법인'|'임직원부담'|'현물'|'경조금'|'문화', 시가?, 장부가액?, 건당기준초과?}] — 성격별 포함·제외는 어휘 기업업무추진비_포함항목으로 판단"New value: +"원장형 입력 [{항목, 금액, 증빙:'없음'|'영수증 등'|'적격'(기본 '적격'), 성격?:'교제목적'|'직원단체_법인'|'직원단체_비법인'|'임직원부담'|'현물'|'경조금'|'문화'|'사적사용', 시가?, 장부가액?, 건당기준초과?}] — 성격별 포함·제외는 어휘 기업업무추진비_포함항목으로 판단. '사적사용'은 시부인 대상 제외, 직접 손금불산입(상여"
      • addedInput schema / properties / 부가세별도
        Added value: +{
        +  "default": true,
        +  "description": "현물 접대비 평가 시 부가가치세 포함 여부(기본 True — 사업상 증여는 매출세액 포함, 영 제42조⑥·법 제36조①3호 준용)",
        +  "title": "부가세별도",
        +  "type": "boolean"
        +}
    • Changedinheritance_tax1 field changed
      • changedInput schema / properties / spouse / description
        Previous value: -"실제 상속받은 금액·법정상속분 등"New value: +"실제 상속받은 금액·법정상속분 등. {actual(실제 상속액), legal_share('3/5' 같은 분수 문자열 또는 0.6 같은 0 초과 1 이하 소수)}"
    • Changedspecial_tax_credit3 fields changed
      • changedInput schema / properties / persons / description
        Previous 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}]"
      • changedInput schema / properties / total_salary / description
        Previous value: -"금액(원)"New value: +"총급여액(원). 문항에 총급여액이 없으면 0이 아니라 생략 — 0이면 의료비 문턱(total_salary×문턱비율)이 0이 되어 모든 의료비가 특정지출로 분류됨"
      • removedInput schema / properties / total_salary / minimum
        Removed value: -0
    • Changedvat_deemed_input_credit2 fields changed
      • addedInput schema / properties / items
        Added 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"
        +}
      • changedInput schema / properties / purchase / description
        Previous 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을 동시에 주면 문제로 거부됨"
  5. 18 tool updatesv0.10.0
    • Addedasset_grant_reserve
    • Addedcapital_gains_income
    • Changedcommon_input_tax1 field changed
      • changedInput schema / properties / ledger / description
        Previous value: -"원장형 입력 당기 매입 항목 [{항목, 매입세액? | 매입가액?(×10%), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율? | 횟수?:{과세,면세} | 면적?:{과세,면세}}] — 사용처별 처리는 어휘 공통매입세액_귀속"New value: +"원장형 입력 당기 매입 항목 [{항목, 매입세액 | 매입가액(×10%, 둘 중 하나), 사용처:'과세'|'면세'|'공통'|'실지귀속'|'불공제', 과세비율(0~1) | 횟수:{과세,면세} | 면적:{과세,면세} — 둘 중 하나: 매입세액 또는 매입가액"
    • Changeddeemed_dividend_bonus_shares1 field changed
      • changedInput schema / properties / source / description
        Previous value: -"재원 — 어휘 '의제배당_잉여금자본전입.판단.재원별' 키: 주식발행초과금·자본준비금·재평가적립금·자기주식처분이익·이익잉여금"New value: +"재원 — 어휘 '의제배당_잉여금자본전입.판단.재원별' 키: 주식발행초과금·자본준비금·재평가적립금·자기주식처분이익·이익잉여금·재평가적립금_토지1%"
    • Addeddeemed_dividend_capital_reduction
    • Changeddeemed_interest2 fields changed
      • addedInput schema / properties / fiscal_start
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "사업연도 개시일(YYYY-MM-DD). 생략 시 year_end의 1년 전 다음 날",
        +  "title": "Fiscal Start"
        +}
      • addedInput schema / properties / received_interest
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "실제 받은 이자 금액(원, ge=0). 주면 charged_rate 계산 대신 이 금액을 수령이자로 사용",
        +  "title": "Received Interest"
        +}
    • Addeddepreciation_adjustment
    • Addeddividend_received_deduction
    • Addedearned_income_gross_pay
    • Addedforeign_tax_credit
    • Addedgift_tax
    • Addedinheritance_tax
    • Addedinventory_valuation_adjustment
    • Addedretirement_allowance_adjustment
    • Addedspecial_tax_credit
    • Changedvat_bad_debt_credit1 field changed
      • addedInput schema / properties / supply_receivable
        Added value: +{
        +  "default": true,
        +  "description": "재화·용역 공급 대가 채권 여부(True면 대손세액 공제 대상)",
        +  "title": "Supply Receivable",
        +  "type": "boolean"
        +}
    • Changedvat_card_sales_credit2 fields changed
      • addedInput schema / properties / individual
        Added value: +{
        +  "default": true,
        +  "description": "개인사업자 여부(True면 공제 대상)",
        +  "title": "Individual",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / prior_year_supply
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "직전 연도 공급가액 합계(원). 한도 초과 시 공제 제외",
        +  "title": "Prior Year Supply"
        +}
    • Changedvat_deemed_rent1 field changed
      • addedInput schema / properties / rate
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "적용 이자율(소수, 예 0.015 = 1.5%). 생략 시 연도표",
        +  "title": "Rate"
        +}
  6. 50 tool updatesv0.9.1
    • First observedassessment_limitation
    • First observedbad_debt_adjustment
    • First observedbad_debt_allowance
    • First observedbundled_supply_split
    • First observedbusiness_car_expense
    • First observedcommon_input_tax
    • First observedcorporate_tax
    • First observeddaily_worker_withholding
    • First observeddeemed_bonus_resettlement
    • First observeddeemed_dividend_bonus_shares
    • First observeddeemed_interest
    • First observeddominant_shareholder
    • First observeddonation_limit
    • First observedentertainment_adjustment
    • First observedentertainment_limit
    • First observedextract_relations
    • First observedfinancial_income_aggregate
    • First observedincome_tax
    • First observedinput_tax_recalculation
    • First observedinvoice_penalty
    • First observedkinship_check
    • First observedlate_payment_penalty
    • First observedloss_carryforward_limit
    • First observedminimum_tax
    • First observedmissing_receipt_disallowance
    • First observednonbusiness_interest_disallowance
    • First observednonresident_withholding
    • First observedother_income_aggregate
    • First observedownership_ratio
    • First observedprecheck_schema
    • First observedrelated_judge
    • First observedrelated_provision_at
    • First observedretirement_income_tax
    • First observedreturn_precheck
    • First observedreturn_precheck_pdf
    • First observedsimplified_vat_return
    • First observedthin_capitalization
    • First observedtunnelling_from_pdf
    • First observedtunnelling_gift
    • First observedtunnelling_gift_nts
    • First observedunderreporting_penalty
    • First observedunfair_transaction
    • First observedvat_bad_debt_credit
    • First observedvat_card_sales_credit
    • First observedvat_common_input_allocation
    • First observedvat_deemed_input_credit
    • First observedvat_deemed_rent
    • First observedvat_simplified_taxpayer
    • First observedwage_income_tax
    • First observedwithholding_tax

TDQS

B3.4/5.0

Scored across 93 tools

Disambiguation3/5

Most tools have detailed 'when to use' clauses and cross-references, and a find_tool meta-tool mitigates confusion. However, several near-duplicate pairs exist (vat_simplified_taxpayer vs simplified_vat_return, common_input_tax vs vat_common_input_allocation, tunnelling_gift vs tunnelling_gift_nts, entertainment_adjustment vs entertainment_limit vs missing_receipt_disallowance) that an agent could easily misselect among.

Naming Consistency4/5

Names are uniformly snake_case English, mostly following a resource/action pattern (vat_*, stock_*, deemed_*). Minor deviations exist (nouns like corporate_tax, gift_tax, income_tax vs verb-style find_tool, extract_relations), but the convention is consistently readable and predictable.

Tool Count2/5

93 tools is far beyond a reasonable surface for any single server, even for a broad Korean-tax domain. While each tool has a legislative justification, the volume guarantees heavy selection cost and cognitive load, well past the 25+ threshold.

Completeness4/5

Coverage is deep across income, corporate, VAT, capital gains, inheritance/gift, international and penalty domains, with lifecycle links (find_tool, export_workbook, PDF extractors). Notable gaps remain for property-related taxes not addressed (종합부동산세, 취득세, 재산세) and securities transaction tax.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables 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.
    10
    8,867 npm
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables 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.
    8
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Korean tax law for AI agents: search NTS rulings, court and Tax Tribunal decisions; read point-in-time statutes with the Act → Decree → Rule chain and amendment history; basic rules and execution standards; 96 tax treaties with withholding rates; forms and schedules; and verify citations in drafts. Fact-pattern comparison is done by your AI (or optional on-prem/cloud Upstage Solar).
    14
    24
    5
    MIT