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.0부터 Solar Pro 4가 코드를 쓰고 CodeSolar가 리뷰, Claude가 테스트로 교차 검증합니다. 도구 62개, 상세는 CHANGELOG.

Korean tax calculations for AI agents — code, not guesses. English


세금 계산은 AI가 자주 틀립니다. 이 서버는 계산을 코드로 하고, 결과마다 근거 조문을 붙입니다. 연도표가 없는 해는 추정하지 않고 멈춥니다.

작동 방식

flowchart LR
  Q["AI의 입력<br/>연도·금액·항목"] --> V["입력 확인<br/>모르는 항목·빠진 값 거부"]
  V --> T["그해 기준값<br/>세율·한도·공제율"]
  T --> E["계산<br/>조문 순서대로"]
  E --> R["결과<br/>세액·세무조정·근거 조문"]
  T -.->|표 없는 연도| X["멈춤<br/>추정 계산 안 함"]
  1. 입력 확인 — 모르는 항목·빠진 값이 있으면 계산하지 않고 무엇이 필요한지 알려 줍니다.

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

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

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

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

Related MCP server: Korean Law MCP

이렇게 물어보세요

  • "2025 사업연도 과세표준 5억 법인세 산출세액은?"

  • "가지급금 3월 1일 2억 대여, 9월 30일 1억 회수 — 인정이자 계산해줘"

  • "과소신고 1천만 원을 10월 7일에 납부하면 가산세는?"

  • "퇴직금 1억, 근속 15년 퇴직소득세"

  • "기업업무추진비 원장 5건 그대로 줄게 — 2025 사업연도 세무조정 뽑아줘"

설치

claude mcp add korean-tax-calc -- uvx korean-tax-calc-mcp
{ "mcpServers": { "korean-tax-calc": { "command": "uvx", "args": ["korean-tax-calc-mcp"] } } }

키 없이 동작합니다. 선택: LAW_OC(세무조사 판정 도구 2개의 법제처 조문 조회), UPSTAGE_API_KEY(PDF 표 추출). 근거 조문·해석은 korean-tax-mcp와 함께 쓰면 "근거 찾기 → 계산"이 이어집니다.

도구 (62개)

묶음

도구

법인세 (15)

산출세액 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

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

종합소득세 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

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

간주임대료 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

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

대손 조정 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

세무조사 판정 (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

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

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

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

면책 및 고지

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

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

  • AI 사용 고지: 계산·판정 도구 59개는 코드로 동작하며 생성형 AI를 쓰지 않습니다. PDF 검토 도구 3개(extract_relations, tunnelling_from_pdf, return_precheck_pdf)는 UPSTAGE_API_KEY가 있으면 생성형 AI(Upstage Solar Pro 4)로 표를 추출하며 결과에 그 사실을 표시합니다. 키가 없으면 pypdf로 로컬 텍스트 추출(host_ai 모드) 후 정리 안내에 따라 다음 도구 입력으로 직접 정리할 수 있습니다.

  • 데이터 전송: UPSTAGE_API_KEY를 설정해 PDF 도구를 사용할 때만 문서 내용이 Upstage API(api.upstage.ai)로 전송됩니다. 키 없이 사용하면(pypdf 로컬 추출) 외부 전송이 없습니다. 민감정보가 담긴 문서는 API 전송 시 넣지 마세요.

라이선스

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

Available Tools

62 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년).

ParametersJSON Schema
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(취득·개량가액·사용액·상각·처분·충당금 등). 결과: 손금산입 한도·충당금 설정금액·상계액·처분 익금·사용계획·미사용·기말 잔액·소득금액 순영향·세무조정·근거. 일시상각충당금·압축기장충당금 계산.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes재원 구분
yearYes사업연도·귀속연도(2016~2026)
assetsYes[{asset, cost, used?(그 자산에 쓴 보조금·공사부담금 금액, 원), depreciable, depreciation_this_year, 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
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds the calculation semantics (손금산입 한도, 상계액, 처분 익금) but no further behavioral caveats such as statutory limits or data prerequisites beyond what the schema states.

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

Conciseness4/5

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

The three labeled blocks (what / 언제 / 입력 / 결과) are front-loaded and waste no words; the only weakness is that the 입력 and 결과 sections read as serialized lists rather than prioritized guidance.

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

Completeness4/5

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

With no output schema and 9 parameters, the description usefully enumerates the returned figures (손금산입 한도, 충당금 설정금액, 상계액, 처분 익금, 소득금액 순영향, 세무조정, 근거), so an agent knows what it gets back. It is complete for calling the tool, though it does not explain how the optional fields (planned_use, expired_unused, receipt_year, claim_by_return, lost_book_value) alter the computation.

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

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 the schema. The description's input mapping (사업연도→year, 재원 구분→kind, 수령액→received, 자산별 내역→assets) is a restatement that adds no syntax, format, or interaction detail for the optional parameters.

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

Purpose5/5

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

The opening sentence names a specific action (세무조정) applied to precisely enumerated resources (국고보조금·공사부담금·보험차익 일시상각충당금·압축기장충당금), which is unique across the ~60 sibling tax tools and lets an agent identify it without opening the schema.

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

Usage Guidelines4/5

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

The '언제' clause gives a concrete triggering context (a corporation that acquired/improved business assets using subsidies, public-works contributions, or insurance proceeds, needing 손금산입·충당금 상계·처분 계산). It never names an alternative tool or an exclusion, so it stops short of a 5.

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

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

ParametersJSON Schema
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.

ParametersJSON Schema
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.

bundled_supply_splitA
Read-onlyIdempotent

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

ParametersJSON Schema
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).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
monthsNo보유 월수(1~12)
upkeepYes유지비(유류·보험·수선 등, 원)
log_keptYes운행기록부 작성 여부
plate_okNo법인 전용번호판 부착(2024년 이후 요건)
rental_corpNo부동산임대업 주업 등 특정법인
depreciationYes세법상 감가상각비(5년 정액, 원)
business_ratioNo운행기록상 업무사용비율(소수, 작성 시, 0~1)
booked_depreciationYes장부상 감가상각비(원)

TDQS

A4.2/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 calculation, so safety is covered. The description adds value beyond that by disclosing what the result contains (업무사용비율, 손금불산입, 감가상각 한도) and the legal basis (법인세법 제27조의2, 시행령 제50조의2), which matters because there is no output schema.

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

Conciseness4/5

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

Front-loaded with purpose, then clearly labelled 언제/입력/결과 sections. Efficient, though listing every parameter mapping is mildly redundant against a fully documented schema.

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

Completeness5/5

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

For a complex multi-input tax calculation, the description covers purpose, trigger condition, input meaning, the returned values, and the statutory basis. With no output schema, the 결과 sentence fills that gap, so an agent has everything needed to call and interpret it.

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

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 nine parameters. The description restates the same Korean labels and units with no new syntax or format information, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource: calculating 손금불산입 for 업무용승용차 관련비용, and enumerates the sub-cases it covers (업무사용비율, 사적사용, 미작성 시 기준비율, 감가상각 800만 원 한도). The domain is clearly orthogonal to every sibling (none address car expenses), so an agent can distinguish it without opening the schema.

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

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 computing how much car expense for executives/employees is deductible. It gives context but names no exclusions or alternative tools to prefer, so it stops short of a 5.

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

capital_gains_income
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조⑥). (주택) 1세대1주택 여부 → one_house, 비과세 요건 충족 → exempt_met, 거주기간(년) → residence_years, (주택, 1주택 아님) 다주택 중과 대상 → heavy_multi_home, 기본공제·과세표준까지 → apply_basic_deduction. 지원하지 않음(error): 분양권·조합원입주권·주식, 다주택·조정대상지역 중과, 비과세 보유기간 예외, 주거용 전환, 고가주택 일부 양도. 토지는 one_house=False, exempt_met=False 입력해도 오류 아님(주택 요건 무관). 결과: 판단(비과세·고가주택·적용 표, 환산취득가액 사용 시 필요경비 선택 근거)·결과(양도차익·과세대상 양도차익·보유·거주기간·공제율·장기보유특별공제액·양도소득금액, 선택 시 기본공제·과세표준)·산식·근거.

ParametersJSON Schema
NameRequiredDescriptionDefault
one_houseNo주택만: 양도일 현재 1세대 1주택(일시적 2주택 등 1주택으로 보는 경우 포함) 여부
asset_typeYes양도자산 종류 — '토지'|'건물'(주택 아닌 건물)|'주택'(딸린 토지 포함). 그 밖의 자산은 지원하지 않음
exempt_metNoone_house=True일 때: 1세대 1주택 비과세 요건(보유 2년 이상, 취득 당시 조정대상지역이면 거주 2년 이상) 충족 여부
registeredNo등기 여부(False = 미등기양도자산: 비과세·장기보유특별공제·기본공제 배제)
residence_endNo거주 종료일 YYYY-MM-DD — 생략 시 transfer_date를 사용
transfer_dateYes양도일 YYYY-MM-DD(대금청산일, 2017-01-01 ~ 2026-12-31)
transfer_priceYes양도가액 — 양도 당시 실지거래가액(원)
acquisition_taxNo취득세(원) — 문항 표의 '취득세'는 이 칸에 넣고, 취득가액 = acquisition_price + 취득세 + 취득 중개수수료로 도구가 합산함
residence_startNo거주 시작일 YYYY-MM-DD — residence_end와 함께 입력하면 거주기간(만 년수)을 도구가 계산함. residence_years와 다르면 문제로 거부
residence_yearsNoone_house=True일 때: 보유기간 중 거주기간(만 년수, 1년 미만 버림)
acquisition_dateYes취득일 YYYY-MM-DD(대금청산일, 등기접수일이 앞서면 그날)
heavy_multi_homeNoone_house=False인 주택: 다주택 중과(제104조⑦) 대상 여부. True면 지원하지 않음
holding_tax_paidNo보유 중 납부한 재산세·종합부동산세(원) — 필요경비에 넣지 않고 판단에서 필요경비가 아님을 명시함
acquisition_priceYes취득가액 — 취득 당시 실지거래가액(원, 취득세·취득 중개수수료 등 포함, 재산세 제외, 환산취득가액 사용 시 0)
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와 함께 입력
common_input_tax
Read-onlyIdempotent

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

ParametersJSON Schema
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로 확정신고할 때 예정신고 기간의 공통매입세액
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).

ParametersJSON Schema
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.

ParametersJSON Schema
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.

ParametersJSON Schema
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 — 재원(어휘 '의제배당_잉여금자본전입.판단.재원별' 키): 주식발행초과금·자본준비금·재평가적립금(과세 제외), 이익잉여금·자기주식처분이익(과세 대상), 재평가적립금_토지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조⑤).

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

TDQS

A4.3/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 adds materially more: the exact failure mode ('재원 어휘에 없으면 error 반환(계산하지 않음)'), the full per-shareholder return shape, and a non-obvious computation rule for partial 재평가적립금 transfers with the governing statutory provisions. This is dense behavioral context beyond structured fields.

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

Conciseness4/5

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

It is front-loaded with purpose, then cleanly sectioned into 언제 / 입력 / 결과, and every line carries calculation-relevant content. It is long and repeats a few schema facts (year range), but the density of domain rules justifies 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 7-required-parameter calculation tool with no output schema, the description is complete: it enumerates the inputs, enumerates the return fields (배정주식수, 전입전지분율, 전입후지분율, 의제배당, 과세여부, 근거, totals), and defines error behavior. An agent has everything needed to call and interpret it.

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

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 baseline by classifying the source vocabulary keys into taxable vs tax-exempt vs Gross-up-exempt, and by tying shareholder_type to the differing governing statutes (법인세법 제16조 vs 소득세법 제17조). The remaining parameters largely restate 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 states a specific verb+resource+granularity: it computes per-shareholder deemed dividend (의제배당) when surplus is capitalized into capital via a bonus-share issue (무상증자). The scenario is precise enough that an agent can distinguish it from the capital-reduction sibling (deemed_dividend_capital_reduction), but no sibling is named explicitly, so it falls short of the top band.

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 for using the tool. However, there are no when-not conditions and no alternative tool named (e.g. the deemed_dividend_capital_reduction path), 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.

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

ParametersJSON Schema
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조).

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

ParametersJSON Schema
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.

dividend_received_deductionA
Read-onlyIdempotent

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

ParametersJSON Schema
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.

dominant_shareholderA

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

ParametersJSON Schema
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조).

ParametersJSON Schema
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 / 출산: 2024~ within_2y_of_birth·payment_count·related_party, 그 전 months) · 직무발명보상금 — retired(퇴직 후면 기타소득), 2024~ related_party · 연장근로수당 — eligible_occupation, 해당 시 monthly_regular_wage·prior_year_gross(광산·일용은 mine_or_daily) · 사택제공이익 — position / 주택자금대여이익 — sme(2024~ related_party) · 학자금 — beneficiary(본인|가족), 본인이면 requirements_met / 실비변상여비 — actual_cost · 단체보험료(연 한도) / 사회보험료_본인부담분_회사대납(과세) / 사회보험료_사용자부담분 — insurance 결과: 항목별(과세액·비과세액·근거·사유)·제외 항목(다른 해·다른 소득)·총급여액·비과세 합계·근로소득공제·근로소득금액.

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

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this as a safe, read-only, idempotent, closed-world computation, so the safety profile is covered. The description adds real behavioral value beyond that: it discloses the fail-fast contract that missing facts cause the tool to return the required inputs, and it enumerates the result structure (per-item taxable/non-taxable, basis, reason, excluded items, totals). It does not explain handling of unsupported kinds or error surfaces.

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

Conciseness4/5

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

Long but tightly organized behind 언제 / 입력 / 결과 headers, with purpose front-loaded. The dense per-kind fact list is largely necessary for a tool of this complexity, though it is close to the point where detail crowds out quick scanning.

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

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 listing every result component. Input semantics are unusually well covered. The only shortfall is the absence of boundaries against similar siblings and of any note on limits or failure modes beyond missing facts.

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

Parameters4/5

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

Schema coverage is nominally 100%, but the items array is effectively untyped in the schema; the description is the only place that enumerates each kind and the specific facts each kind requires (service_year, months, vehicle type, related_party, etc.). That is substantial meaning beyond structured fields, though value formats and defaults are still unstated.

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

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 chain: it 판정s taxable/non-taxable status per item and computes 총급여액·근로소득공제·근로소득금액, citing the exact statutory provisions. It is clearly distinguishable from generic income tools by scope, but it never names the closely related siblings (e.g. wage_income_tax, retirement_income_tax) to draw the boundary, so an agent could still confuse gross-pay computation with the actual tax-amount tool.

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

Usage Guidelines4/5

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

The '언제' line gives explicit triggering contexts (연말정산, 종합소득세 신고, when 총급여액/근로소득금액 are needed) and the input section implies the data shape required. There is no when-not guidance nor any pointer to an alternative tool for the tax amount versus the gross-pay base.

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

entertainment_adjustment
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조①) 결과: 판단(항목별·근거)·결과(한도·한도초과)·세무조정(구분·금액·소득처분)·소득처분별_합계·손금불산입_합계·계산. 기업업무추진비 세액공제.

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

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

ParametersJSON Schema
NameRequiredDescriptionDefault
smeYes중소기업 여부
yearYes사업연도·귀속연도(2016~2026)
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 readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds behavior beyond that by naming the outputs (limit, excess/non-deductible, legal basis under Corporate Tax Act Art. 25 / Decree Art. 42), which matters since there is no output schema.

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

Conciseness4/5

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

Well-structured with explicit 언제/입력/결과 (when/input/result) sections that are front-loaded and scannable. Minor redundancy in the closing sentence, which restates the purpose already given in the opening line.

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

Completeness4/5

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

For a deterministic tax-calculation tool with read-only annotations and no output schema, the description covers the trigger context, the full input mapping, and the expected outputs plus legal basis. Complete enough to invoke correctly; only the sibling distinction is absent.

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

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 compensates for the schema's generic '금액(원)' labels by mapping Korean tax concepts to parameter names ('수입금액(일반) → general_revenue', '지출액(접대비) → expensed', etc.). This adds genuine semantic meaning over the terse schema descriptions.

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

Purpose4/5

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

States a specific verb and resource ('기업업무추진비 한도와 한도초과액 계산' / calculate the entertainment expense limit and excess). An agent can tell it computes a deduction cap, but the description never distinguishes it from the very similar sibling 'entertainment_adjustment', which appears in the same list.

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

Usage Guidelines4/5

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

Gives explicit context through the '언제' (when) cue: during corporate tax adjustment to obtain the non-deductible entertainment amount, and to check whether entertainment exceeds the limit. Clear usage context, but no when-not condition and no pointer to the near-duplicate sibling 'entertainment_adjustment'.

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

extract_relationsA

주주명부·가족관계·임원명단 PDF에서 관계표(people/family/stakes/officers)를 추출한다. 언제: 세무조사·의료법인 친족확인 등에서 PDF 문서에 있는 관계표를 도구 입력으로 정리할 때. 입력: PDF 파일 경로 → pdf_path. 결과: people·family·stakes·오 officers 추출 결과(초안) + AI 생성 표시(필요 시). related_judge에 넣기 전에 사람이 확인한다. UPSTAGE_API_KEY 없이도 pypdf 로컬 추출 후 정리 가능(기본), 키 설정 시 Document Parse + Solar Pro 4로 더 정교한 표 추출. 주주명부·가족관계·임원명단 PDF에서 관계표를 뽑는다.

ParametersJSON Schema
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% 토지분은 전입액 × (1% 토지 재평가차액 ÷ 재평가차액 전체)로 안분, 법인세법 시행령 제12조④, 소득세법 시행령 제27조⑤) · 인정배당 — 법인세법에 따라 배당으로 소득처분된 금액(Gross-up 대상) · 출자공동사업자배당 — 출자공동사업자로부터 받는 배당(무조건 종합과세, 2천만원 판정 제외, Gross-up 비대상) · 외국법인배당 — 외국법인으로부터 받는 배당(조건부 종합과세, Gross-up 비대상) · 환매조건부매매차익 — RP(환매조건부매매) 차익(이자소득, 조건부 종합과세) · 법원보증금이자 — 법원 공탁보증금 이자(무조건 분리과세, 금융소득 합계·합산액 제외) · 직장공제회초과반환금 — 직장공제회 초과 반환금(무조건 분리과세, 금융소득 합계·합산액 제외) 결과: 판단(항목별 이자/배당/제외·Gross-up 대상 여부)·결과(이자소득금액·배당소득금액·합산액)·계산(중간값). 금융소득 종합과세·배당가산.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
itemsYes금융소득 항목 [{kind, amount, ...}] — kind: 예금이자·비영업대금이익·소비대차전환이자·외상매출금지급기일연장이자·저축성보험차익·투자신탁환매이익·파생결합사채이익·장내파생상품이익·상장법인현금배당·비상장법인현금배당·의제배당_잉여금자본전입·인정배당

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. The description adds real behavioral context beyond that: per-kind treatment (which kinds are unconditionally separately taxed and therefore excluded from the 합계·합산액, e.g. 법원보증금이자, 직장공제회초과반환금), which are Gross-up 대상 vs 비대상, and the year range. It does not detail the return shape beyond category names, but the tax-treatment disclosures are substantive.

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

Conciseness4/5

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

Long, but front-loaded and structurally segmented into 언제/입력/결과 with a bulleted kind list. Each kind definition earns its place because the correct kind selection drives the tax treatment, though the statutory asides (e.g. the 재평가적립금 1% apportionment formula) are denser than strictly needed for invocation.

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

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 outlines the return categories (판단·결과·계산), so an agent knows what comes back. Combined with the annotated read-only profile and full kind semantics, it is complete enough to call correctly, with only minor gaps in exact item-object fields.

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

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 goes well beyond the schema by defining the meaning of each kind value (with aliases and statutory bases) and specifying that year maps to 귀속연도 2016–2026. It could still clarify the full shape of each item object ('{kind, amount, ...}' leaves extra fields implicit).

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

Purpose5/5

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

States a specific verb and resource: aggregating financial income (interest/dividends) and computing the dividend gross-up, anchored to named tax-law articles (소득세법 제14·16·17·56조). This is clearly distinguishable from siblings like other_income_aggregate, income_tax, and dividend_received_deduction.

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

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 context: filing comprehensive income tax and needing to determine whether financial income is subject to aggregation and to compute the gross-up amount. It does not, however, name a sibling alternative or state when-not to use this tool.

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

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

ParametersJSON Schema
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. 결과: 과세가액·증여재산공제·과세표준·산출세액·할증세액·신고세액공제·납부할세액, 근거. 증여세 과세가액·공제·세액 계산.

ParametersJSON Schema
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.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so the safety profile is covered. The description adds that the tool returns an intermediate computation chain including '근거' (basis), which is mildly useful, but it discloses no validations, error conditions, or edge-case behavior beyond that.

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

Conciseness4/5

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

It is well organized into 언제 / 입력 / 결과 sections with purpose front-loaded. The closing sentence ('증여세 과세가액·공제·세액 계산') redundantly restates the opening, but overall it is efficient and structured.

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

Completeness4/5

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

For an 18-parameter complex tax tool with no output schema, the description compensates by enumerating the returned values (과세가액 through 납부할세액 and 근거) and covering the three required inputs. It is largely complete, though it could clarify which of the 15 optional parameters materially change the computation.

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

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 18 parameters. The description maps seven concepts (gift_date, gift_value, relation, prior_gifts_same_donor, assumed_debt, prior_deduction_used, marriage_birth) to fields, but this largely restates the existing schema descriptions, so the baseline of 3 applies.

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

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: computing a resident donee's gift tax chain (과세가액·증여재산공제·과세표준·산출세액·납부할세액). An agent can tell it is a gift-tax calculation tool. It does not explicitly distinguish itself from siblings like inheritance_tax or tunnelling_gift, so it falls short of 5.

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

Usage Guidelines3/5

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

'언제: 증여세 신고·계산 시' gives the triggering context (gift tax filing/calculation). However, no alternatives or when-not conditions are named, even though siblings such as inheritance_tax and tunnelling_gift exist. This is implied usage, not explicit routing.

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

income_taxA
Read-onlyIdempotent

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

ParametersJSON Schema
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.

inheritance_tax
Read-onlyIdempotent

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

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

ParametersJSON Schema
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.6/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, so safety is covered; the description adds genuinely new behavior: an error is raised if both input_tax and bundle are supplied, and bundle input is internally allocated using the same rules as bundled_supply_split. It also previews the returned sections (이력/결과/판단/근거), though it says nothing about permissions or performance.

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

Conciseness4/5

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

Front-loaded with the legal basis, then organized as 언제/입력/결과 with short bullets; every line carries information. It is dense but not padded, with only mild redundancy between the bundle bullet and the bundle schema description.

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

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 enumerates the returned structure (history with ratio, benchmark, variance, recalculation flag, elapsed periods, tax amount; result; judgment basis; legal grounds). For a 5-parameter tool with nested objects, an agent has everything needed to call and interpret it.

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

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 goes beyond the schema by pairing Korean field labels with parameter names, specifying that ratios must run acquisition-to-current with the last entry being the current period, and documenting the input_tax/bundle exclusivity that the schema does not state.

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

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 legal basis (부가법 제41조, 영 제83조), and its scope is clearly narrower than sibling allocation tools like vat_common_input_allocation or common_input_tax. An agent can distinguish it without opening any schema.

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

Usage Guidelines5/5

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

The '언제' section gives an explicit trigger condition: recalculation is required at the final return when the exempt ratio moves ≥5%p versus the acquisition period. It also states the alternative input path (bundle instead of input_tax) and the mutual-exclusion rule, so both when-to-use and which-input questions are answered.

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

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

ParametersJSON Schema
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.

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

ParametersJSON Schema
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.

ParametersJSON Schema
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.

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.

ParametersJSON Schema
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.

ParametersJSON Schema
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조①). 적격증빙 미수취 기업업무추진비 손금불산입.

ParametersJSON Schema
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

업무무관자산·가지급금 관련 지급이자 손금불산입. 언제: 업무무관자산이나 가지급금이 있을 때 지급이자 중 얼마를 손금불산입하는지 구한다. 입력: 차입금별 [{interest: 지급이자(원), jeoksu: 차입금 적수(원·일)}] → loans, 업무무관 적수 합(원·일) → nonbusiness_jeoksu. 결과: 손금불산입 이자, 근거(법인세법 제28조①4호, 시행령 제53조). 산식: 지급이자 × min(1, 업무무관 적수 ÷ 총 차입금 적수).

ParametersJSON Schema
NameRequiredDescriptionDefault
loansYes차입금별 [{interest: 지급이자(원), jeoksu: 차입금 적수(원·일)}]
nonbusiness_jeoksuYes업무무관자산·가지급금 적수 합(원·일)

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/destructiveHint=false, so safety is covered. The description adds substantive behavioral context beyond that: the exact formula (지급이자 × min(1, 업무무관 적수 ÷ 총 차입금 적수)) and the legal basis (법인세법 제28조①4호, 시행령 제53조).

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

Conciseness5/5

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

Front-loaded with the tool's purpose, then cleanly labeled 언제/입력/결과 sections. Every sentence carries information: condition, inputs, output, legal citation, and formula, with no filler.

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

Completeness5/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 fully specifies inputs, the exact computation, the returned value (disallowed interest), and its statutory basis. An agent has everything needed to invoke and interpret it.

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

Parameters4/5

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

Schema coverage is 100%, so the flat per-parameter descriptions already establish a baseline of 3. The description goes further by showing how both inputs feed the formula (per-loan interest/jeoksu plus the aggregate nonbusiness_jeoksu), which adds interpretive meaning beyond the schema's field labels.

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

Purpose5/5

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

States a precise verb+resource: computing the non-deductible portion of interest paid (지급이자 손금불산입) tied to non-business assets and 가지급금. This is specific enough to separate it from siblings like deemed_interest or thin_capitalization, which address different disallowance rules.

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

Usage Guidelines4/5

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

The '언제' (when) line gives a clear triggering condition: when non-business assets or provisional payments exist and you need the disallowed interest amount. It does not, however, name exclusions or adjacent alternatives (e.g. deemed_interest, thin_capitalization) among the numerous sibling tools.

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

nonresident_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.

ParametersJSON Schema
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.

other_income_aggregateA
Read-onlyIdempotent

거주자의 기타소득 항목을 원래 사실관계로 받아 ① 항목별 과세 구분(종합/분리/비과세/제외) ② 비과세·필요경비 ③ 소득금액·원천징수세액 ④ 종합소득 합산액과 기납부세액까지 계산한다(소득세법 제21조·제12조·제14조③·제127조·제129조, 시행령 제18조②·제87조). 언제: 종합소득세 신고에서 기타소득의 과세 구분·필요경비·원천징수세액·종합소득 합산액을 계산할 때. 입력: 귀속연도(2016~2026) → year, 기타소득 항목 목록 [{kind, amount, ...}] → items. kind 허용값(어휘 기반, 별칭 포함): · 산업재산권대여 — 광업권·어업권·산업재산권·산업정보 등을 양도·대여하고 받는 금품 · 일시적인적용역 — 고용관계 없이 일시적으로 제공한 강연·방송 해설·자문 등 인적용역의 대가 · 뇌물 — 뇌물로 받은 금품(몰수·추징 확정액은 forfeited로 입력, 기본 0) · 위약금·배상금 — 계약의 위약·해약으로 받는 위약금·배상금(계약금 대체분은 deposit_substituted로 입력, 기본 0, 주택입주 지체상금 제외) · 주택입주지체상금 — 주택 입주 지연으로 받는 지체상금 · 연금외수령 — 연금계좌의 세액공제분·운용수익을 연금 외의 방식으로 수령한 금액(무조건 분리과세) · 직무발명보상금_퇴직후 — 퇴직 후 사용자등으로부터 받는 직무발명보상금(같은 해 재직 중 받은 비과세액은 employment_exempt_used로 필수 입력) · 배임수재 — 배임수재로 받은 금품(무조건 종합과세, 원천징수 제외, 소득세법 제21조①24호) · 알선수재 — 알선수재로 받은 금품(무조건 종합과세, 원천징수 제외, 소득세법 제21조①24호) · 복권당첨금 — 복권당첨금(무조건 분리과세, 제14조③8호 단서·제129조, 필요경비는 actual_cost만) 결과: 판단(항목별 과세 구분·근거)·결과(종합소득 합산액·기납부세액·분리과세·비과세·선택적 분리과세 가능)·계산(항목별 소득금액·원천징수세액).

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
itemsYes기타소득 항목 [{kind, amount, ...}] — kind: 산업재산권대여·일시적인적용역·뇌물·위약금·배상금·주택입주지체상금·연금외수령·직무발명보상금_퇴직후

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, so the safety profile is covered. The description goes well beyond that by disclosing domain behavior: it operates on original facts (원래 사실관계), lists special treatments per category (배임수재/알선수재 unconditional comprehensive taxation with no withholding, 복권당첨금 unconditional separate taxation), and notes conditional required sub-fields.

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

Conciseness4/5

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

Front-loaded with a one-line summary, then structured under 입력/결과 labels with bulleted kind definitions. Length is justified by the domain complexity, though the kind list is dense and slightly repetitive with the schema's kind hint.

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

Completeness4/5

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

For a complex, schema-light tool with no output schema, the description covers the result shape (판단/결과/계산) and the input vocabulary in detail. It does not specify exact output field names, but the annotation set already carries the safety profile, so the definition is essentially complete.

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

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 substantially enriches it: it defines the full kind vocabulary with legal meaning and aliases, and documents auxiliary sub-fields (forfeited, deposit_substituted, employment_exempt_used, actual_cost) that the schema does not mention.

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

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 computes 기타소득 tax classification, necessary expenses, withholding, and aggregate income — and enumerates the four output dimensions. The resource (기타소득) is clearly distinguishable from sibling aggregators like financial_income_aggregate.

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

Usage Guidelines4/5

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

It explicitly states the triggering context ('종합소득세 신고에서 기타소득의 과세 구분·필요경비·원천징수세액·종합소득 합산액을 계산할 때'), giving clear when-to-use guidance. It does not name alternatives or exclusions, so it stops short of a 5.

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

ownership_ratioA

보유자→법인 직접·간접 보유비율(경로별 곱 합산, 순환출자 반영). 언제: 일감몰아주기·지배주주 판정에서 특정인이 법인에 얼마나 간접 보유하는지 계산할 때. 입력: 보유자(이름) → holder, 대상 법인(이름) → target, stakes=[[보유자, 법인, 지분율(0~1)]] → stakes(직접보유비율, related_judge와 동일). 결과: 직접비율·경로별 비율·합계·순환출자 여부, 근거(상증법 시행령 제34조의3②). 보유자→법인 직접·간접 보유비율을 계산한다(간접은 단계별 직접보유비율의 곱, 경로별 합산, 순환출자는 단계별 모두 반영).

ParametersJSON Schema
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.

precheck_schemaA

신고서 사전검토 입력스키마. 언제: return_precheck·영어로 된 신고서 PDF 도구 입력 전에 어떤 키를 넣어야 하는지 확인할 때. 입력: tax=법인|부가|소득. 결과: 각 입력키의 의미·단위·필수 여부를 목록으로 반환한다.

ParametersJSON Schema
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.

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?, dc_transferred_allowance?}. 결과: 세무조정(과목·조정 익금산입/손금불산입/손금산입·금액·소득처분 유보/△유보), 소득금액_순영향, 계산(세무상 잔액·한도). 입력이 모자라거나 장부 증감이 맞지 않으면 error.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
salaryNo당기 총급여액(원) {total: 전체 임원·직원 총급여, dc_members?: 확정기여형 퇴직연금 설정자분, not_eligible?: 퇴직급여 지급대상 아닌 자(예: 규정상 1년 미만 근속자)분} — 당기 설정액이 있으면 필수
pensionNo확정급여형 퇴직연금(원) {asset_closing: 퇴직연금운용자산 기말잔액, prior_deducted: 세무상 퇴직연금충당금 기초잔액(이미 손금산입한 부담금 누계, △유보), book_provision?: 결산에 계상한 퇴직연금충당금(신고조정이면 0), 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

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 pure read-only, idempotent computation (readOnlyHint/idempotentHint true), and the description does not contradict that. It goes further by disclosing output semantics (과목·조정 유형·소득처분 유보/△유보·소득금액_순영향) and failure behavior ('장부 증감이 맞지 않으면 error'), which annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with legal basis, then when, then inputs, then outputs — good scanning order for a dense 8-parameter tax tool. Some of the '입력' lines restate the schema field descriptions near-verbatim, which is wasted text at 100% coverage, but the added judgment rules justify keeping the section.

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

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 '결과' section must carry the return contract, and it does sketch the adjustment line items, the 유보/△유보 disposition, the net income effect, and the supporting calculation. A mutation-free calculator with validation and error conditions stated is adequately covered, though the exact response shape remains only loosely specified.

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

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 '입력' block genuinely adds decision rules: '큰 금액을 씀' for lump_sum vs actuarial, the annual-table note that the accrual ratio is 0% after 2016, and exclusion of DC members and non-eligible employees from salary. These are selection rules not stated in the schema.

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

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 combination (퇴직급여충당금·확정급여형 퇴직연금충당금 세무조정) and anchors it to the governing statute (법인세법 제33조, 시행령 제44조의2·제60조). An agent can distinguish this from the sibling retirement_income_tax, which concerns taxation of retirement income rather than the corporate-tax reserve adjustment.

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

Usage Guidelines4/5

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

An explicit '언제' block enumerates the three concrete scenarios (한도초과, 상계·부인액 추인, 퇴직연금 부담금 손금산입 한도) that call for this tool. It never names a sibling as an alternative or states when not to use it, so it stops short of full routing guidance.

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

retirement_income_taxA
Read-onlyIdempotent

퇴직소득세(근속연수공제·환산급여 방식). 언제: 퇴직금(퇴직급여)을 지급할 때 퇴직소득세를 계산한다. 입력: 퇴직소득금액(퇴직급여, 비과세 제외, 원) → income, 근속연수(1~60년) → years_of_service. 결과: 퇴직소득세, 근거(소득세법 제48조·제55조②). Retirement income tax (근속연수공제·환산급여 방식).

ParametersJSON Schema
NameRequiredDescriptionDefault
incomeYes퇴직소득금액(퇴직급여, 비과세 제외, 원)
years_of_serviceYes근속연수(1~60년)

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 profile is covered. The description adds real value beyond that: the statutory basis (소득세법 제48조·제55조②), the deduction method, and the fact that the output is the tax amount plus rationale. It is a pure calculation, so little more behavior remains to disclose.

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

Conciseness4/5

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

The 언제/입력/결과 structure is front-loaded and easy to scan, with the key purpose stated first. Slight redundancy from the parenthetical method repeated and the trailing English restatement of the title costs it a point.

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

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 stating the result is 퇴직소득세 plus its legal 근거. For a two-parameter, annotation-covered calculation tool this is essentially complete, lacking only edge-case notes (e.g., years beyond 60).

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

Parameters3/5

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

Schema coverage is 100%, and the description's input line largely restates the schema fields (income, years_of_service) including the 1~60 range already present in the schema. It adds the '비과세 제외' caveat, but otherwise the schema does the heavy lifting, so baseline 3 applies.

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

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 (계산한다 / 퇴직소득세) and identifies the computation method (근속연수공제·환산급여 방식), which distinguishes it from siblings like wage_income_tax and income_tax. An agent can tell this computes severance-pay income tax without opening the schema.

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

Usage Guidelines4/5

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

The '언제' clause explicitly states the triggering condition — calculating tax when severance pay is paid out. That is clear usage context, but no alternative sibling is named or excluded, so it stops short of a 5.

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

return_precheckA

신고서 사전검토(조사 착수 전 오류 의심 목록). 언제: 세무조사 착수 전에 신고서 값으로 오류 의심 항목을 미리 점검할 때. 입력: data={입력키: 값}, tax=법인|부가|소득(생략 시 전체) — 입력키는 precheck_schema로 먼저 확인. 결과: 오류 의심·이상 없음·자료 부족·사실 확인 필요.

ParametersJSON 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에서 표를 추출해 사전검토한다.

ParametersJSON Schema
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. 결과: 판단(항목·결론·근거)·계산(과세표준·부가가치율·납부세액·공제·가산세)·결과(납부의무면제·차가감납부세액)·산식·근거.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
ledgerYes원장형 입력 {공급: [{항목, 금액}], 매입: [{항목, 금액}]} — 금액은 공급대가(부가세 포함). 공급 항목이 없으면 error. 항목명은 어휘 간이과세자_원장항목의 키워드로 역할을 정함
business_typeYes업종 — 어휘 간이과세자_납부세액.적용[].판단.부가가치율 키(소매업·음식점업·제조업·숙박업·건설업·부동산임대업·그 밖의 서비스업 등)
prepaid_assessedNo예정부과 고지세액
bad_debt_confirmedNo대손 확정액(기본 0, 납부세액에 영향 없음 — 판단에 명시)
prior_year_suppliesYes직전연도 공급대가 합계(원)

TDQS

A4.1/5.0
Behavior4/5

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

With annotations already declaring readOnly/idempotent/non-destructive, the bar is lower, and the description usefully adds the input transformation rules (항목명 → 역할 mapping via 어휘, supply amounts converted to total/card/mileage sums) and the '원래 사실관계에서 계산' behavior. It also pre-announces the judging/calculation/result output structure, which is valuable since no output schema exists.

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

Conciseness5/5

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

Front-loaded with purpose and statute, then cleanly divided into 언제/입력/결과 blocks that map to how an agent needs the information. Dense but every clause earns its place given the tool's complexity.

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

Completeness4/5

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

For a 6-parameter, nested-object calculator with no output schema, the description supplies the missing return-value structure (판단/계산/결과/산식/근거) and the ledger transformation logic. It stops short of giving a concrete ledger example or vocabulary key list, leaving minor gaps an agent might still need to infer.

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

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 meaning beyond the schema by spelling out how ledger items are mapped to roles and converted into total/card/mileage aggregates, and noting that bad_debt_confirmed does not affect the tax. This goes past merely restating the field descriptions.

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

Purpose4/5

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

States a specific verb (계산) and resource (간이과세자 부가가치세 확정신고 차가감납부세액) with the statutory basis (법 제63조·제68조의2·제69조·제46조), so an agent knows it computes the full simplified-taxpayer final return rather than a single credit. It does not, however, explicitly distinguish itself from component siblings such as vat_simplified_taxpayer or vat_card_sales_credit.

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

Usage Guidelines4/5

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

The '언제' section gives a clear trigger: use during a simplified taxpayer's final return for the 1.1–12.31 period, computing from original facts. There are no explicit exclusions or named alternatives, but the context is unambiguous enough to route correctly.

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

special_tax_credit
Read-onlyIdempotent

근로소득자 특별세액공제(보험료·의료비·교육비)와 표준세액공제 비교. 언제: 연말정산·종합소득세 신고에서 특별세액공제와 표준세액공제 중 선택할 때. 입력: 귀속연도 → year, 총급여액 → total_salary, 공제대상자 → persons, 지출 목록 → expenses, 근로소득 산출세액 → wage_computed_tax(선택). 결과: 보험료·의료비·교육비 공제액·특별세액공제 합계·표준세액공제 선택·적용 공제·근거. 특별세액공제 vs 표준세액공제 비교.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
personsYes[{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}]
expensesYes[{kind, amount, person, reimbursed?}]
earner_typeYes근로소득 종류
total_salaryYes총급여액(원). 문항에 총급여액이 없으면 0이 아니라 생략 — 0이면 의료비 문턱(total_salary×문턱비율)이 0이 되어 모든 의료비가 특정지출로 분류됨
donation_creditNo금액(원)
wage_computed_taxNo근로소득 종합소득산출세액
monthly_rent_creditNo금액(원)
special_income_deductionNo금액(원)
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.

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

ParametersJSON Schema
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).

ParametersJSON Schema
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 신고안내 산식.

ParametersJSON Schema
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.

ParametersJSON Schema
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% 이상이면 부인 대상).

ParametersJSON Schema
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.

vat_bad_debt_creditA
Read-onlyIdempotent

대손세액공제(대손금액 × 10/110). 언제: 외상 매출이 대손되었을 때 부가가치세 대손세액공제를 계산한다. 입력: 대손금액(부가세 포함, 원) → bad_debt_incl_vat, 재화·용역 공급 대가 채권 여부 → supply_receivable(기본 True). 결과: 대손세액(공급 대가 아니면 0), 근거(부가가치세법 제45조①). VAT bad debt credit.

ParametersJSON Schema
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기 확정부터), 개인사업자만 해당·직전 연도 공급가액 한도 이하.

ParametersJSON Schema
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만 원 미만이면 전액 공제. 불공제 = 공통매입세액 × 면세공급가액 ÷ 총공급가액. 겸영사업자 공통매입세액 안분(불공제분 계산).

ParametersJSON Schema
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_credit
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조).

ParametersJSON Schema
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을 동시에 주면 문제로 거부
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실지귀속 불분명 기말재고(원)
vat_deemed_rentA
Read-onlyIdempotent

간주임대료(보증금 × 정기예금이자율 × 일수/연일수, 윤년이면 연수 366). 언제: 상가·오피스텔 등 임대 보증금을 받을 때 부가가치세 간주임대료를 계산한다. 입력: 보증금(원) → deposit, 과세기간 중 임대 일수(1~184) → days, 과세기간('YYYY-1' 또는 'YYYY-2') → period, 적용 이자율(소수, 생략 시 연도표) → rate. 결과: 간주임대료·적용_이자율, 근거(부가가치세법 시행령 제65조). VAT deemed rent on lease deposits.

ParametersJSON Schema
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_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조).

ParametersJSON Schema
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.

wage_income_taxA
Read-onlyIdempotent

근로소득공제·산출세액·근로소득세액공제. 언제: 근로소득만 있는 근로자의 연말정산에서 근로소득공제, 산출세액, 근로소득 세액공제를 계산한다. 입력: 총급여(원, 비과세 제외) → gross_pay, 종합소득 과세표준(원) → tax_base, 귀속연도(2016~2026) → year. 결과: 근로소득공제·산출세액·근로소득세액공제, 근거(소득세법 제47조①·제55조·제59조). Wage income: employment income deduction, computed tax and wage tax credit.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYes사업연도·귀속연도(2016~2026)
tax_baseYes종합소득 과세표준(원)
gross_payYes총급여(원, 비과세 제외)

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 that: the output set (deduction, computed tax, tax credit) and the governing legal basis (소득세법 제47조①·제55조·제59조), making it clear this is a pure statutory computation with no side effects.

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

Conciseness4/5

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

Organized as 언제/입력/결과 with the purpose stated first, so the key information is front-loaded. The trailing English sentence duplicates content already conveyed, which is mild redundancy rather than waste.

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

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 it does list the three computed results plus their legal basis. Coverage of computation assumptions and edge cases (e.g., how the 2016–2026 year range affects rules) is left implicit, but nothing essential for calling the tool is missing.

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

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 with units and meaning. The description's input mapping (총급여 → gross_pay, 과세표준 → tax_base, 귀속연도 → year) largely restates that, adding no syntax or format detail beyond the schema; baseline 3 applies.

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

Purpose5/5

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

Names a specific computation and resource: 근로소득공제·산출세액·근로소득세액공제 for a wage-only earner's year-end settlement. This distinguishes it from adjacent siblings like income_tax, retirement_income_tax, and withholding_tax, which target different income types.

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

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 context (근로소득만 있는 근로자의 연말정산), which tells the agent when this applies. It does not, however, explicitly name the alternative tool to use for non-wage income, so routing is inferred rather than stated.

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

withholding_taxA
Read-onlyIdempotent

국내 원천징수세액(소득세분). 언제: 이자·배당·사업·기타소득 등을 지급할 때 원천징수할 소득세액을 구한다. 입력: 소득 종류(이자·배당·비영업대금·사업·기타·봉사료·일용·비실명·외국인직업운동가·온투업이자) → kind, 지급액(원) → amount, 지급연도(2016~2026) → year. 결과: 원천징수세액·적용 세율, 근거(소득세법 제129조). 지방소득세 10% 별도. 비거주자·외국법인은 nonresident_withholding 사용. 국내 withholding tax (소득세분) on interest, dividends, business income, etc.

ParametersJSON Schema
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. 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을 동시에 주면 문제로 거부됨"
  2. 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"
        +}
  3. 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.2/5.0

Scored across 62 tools

Disambiguation2/5

Many tools have overlapping or nested purposes, especially in the tunnelling/special-relationship cluster (tunnelling_gift vs tunnelling_gift_nts, dominant_shareholder, ownership_ratio, related_judge), VAT common-input (common_input_tax vs vat_common_input_allocation), simplified VAT (vat_simplified_taxpayer vs simplified_vat_return), bad debt (bad_debt_allowance vs bad_debt_adjustment), and entertainment (entertainment_limit vs entertainment_adjustment). Detailed descriptions help, but the number of near-duplicate tools makes misselection likely for an agent.

Naming Consistency3/5

Names are all snake_case, which is good, but there is no consistent verb_noun or domain prefix pattern. Tools mix noun phrases like inheritance_tax, vat_deemed_rent, common_input_tax, late_payment_penalty, and tunnelling_from_pdf, and VAT tools are only sometimes prefixed with vat_.

Tool Count2/5

62 tools is far beyond the ideal 3-15 range and well into the 25+ heavy range, making tool selection burdensome. The broad Korean tax domain partially justifies a large surface, but several tools could be consolidated into parameterized tools.

Completeness3/5

The server covers many major tax calculation areas, but notable gaps remain: no general VAT return assembly, no business-income tax calculation for sole proprietors, and little/no coverage for local taxes, securities transaction tax, acquisition tax, or comprehensive return lifecycle. Some tools are explicitly partial (e.g., tunnelling_gift vs tunnelling_gift_nts), which agents must navigate around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to retrieve current Korean tax statutes, judicial precedents, and tax authority interpretations via MCP, with daily-updated legislative history and full-text search.
    1
    MIT
  • 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
    2,753 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