depreciation-mcp
depreciation-mcp
这是一个通过 Model Context Protocol (MCP) 提供基于韩国《法人税法》的固定资产使用年限、折旧及税务调整参考值的服务器。
计算结果仅供参考。申报及会计处理需遵循适用法律、事实依据并经专家审核。
PRD 背景 (MCP-DEP-001-v1)
以下项目概述、问题定义、目标用户、核心用户场景摘自 PRD 设施折旧计算 MCP v1.0 (修订版) 的第 1、2、3、6 章,并针对 README 进行了调整。
1. 项目概述
固定资产折旧是结账和法人税申报中反复进行的核心实务。 但在实际工作中,以下问题反复出现:
为了确认资产类别的使用年限,必须手动查找施行规则 [附表 5·6]。
会计团队或总务团队依赖电子表格公式进行计算。
定额法/定率法选择、使用年限范围审查、税务调整计算相互分离,操作繁琐。
负责人变更时,判断标准未留存,导致一致性较差。
本 MCP 旨在将此过程标准化,当用户输入资产信息时,提供从基于法人税法的使用年限查询 → 折旧计算 → 税务调整参考值 → 批量处理及比较分析的一致性服务。
2. 问题定义
2.1 当前实务的不便
法律查询的重复性 必须每次手动确认资产分类和各行业的基准年限。
计算的不一致性 即使是同一资产,根据负责人的不同,可能适用不同的使用年限或计算公式。
税务调整的分离管理 必须分别计算会计折旧费和税务折旧限额的差异。
多项资产处理的低效 在结账季节,需要反复计算数十项资产。
行业间比较审查的困难 若要根据不同行业标准审查同一资产,需要大量手动操作。
3. 目标用户
用户群体 | 主要资产 | 主要需求 |
医院·医疗机构总务团队 | 医疗设备、建筑物附属设施、车辆 | 高价资产使用年限及折旧方法审查 |
制造业会计团队 | 机械装置、工厂设备、车辆 | 基于定率法的计算及税务调整 |
IT·服务企业总务团队 | 服务器、网络设备、软件、家具 | 资产分类及使用年限标准化 |
中小企业代表/会计 | 车辆、备品、办公设备 | 快速且无误的基准计算 |
结账负责人 | 多项资产组合 | 批量计算及汇总表确认 |
4. 核心用户场景 (PRD 第 6 章)
场景 A — 医院设备使用年限查询
用户:
“告诉我 MRI 设备按医疗行业标准的使用年限是多少年。”
处理流程
调用
get_useful_life查询 Q86 + 医疗器械标准
返回基准使用年限、允许范围、折旧方法、法律依据
场景 B — 单个资产折旧计算
用户:
“请计算取得价值 15 亿、取得日期 2026-03-01、使用年限 5 年的折旧计划。”
处理流程
调用
calc_depreciation_schedule在定额法/定率法/生产量比例法中计算相应方式
返回年度折旧费、账面价值、累计额
场景 C — 税务调整计算
用户:
“告诉我会计折旧费与税务折旧限额的差异。”
处理流程
调用
calc_tax_adjustment计算损金否认额、认列不足额、追认可能金额
返回并附带说明备注
场景 D — 结账季节多项资产批量处理
用户:
“请一次性计算 50 项资产,并汇总年度折旧费和损金否认额。”
处理流程
调用
calc_bulk_depreciation执行各资产计算
返回总折旧费、总税务限额、总损金否认额汇总
场景 E — 行业间比较
用户:
“请比较同一服务器设备在医疗行业和软件行业标准下的差异。”
处理流程
调用
compare_industry_life比较各行业使用年限及年度折旧差异
返回比较表
Related MCP server: ko-stock-mcp
要求
Node.js 20 以上
pnpm 9 以上 (或通过
npm/corepack启用pnpm)
安装 (通用)
克隆仓库后,进行依赖安装和构建。
git clone https://github.com/boam79/depreciation-mcp.git
cd depreciation-mcp
pnpm install
pnpm run build构建完成后,执行文件为 dist/index.js。(由于 dist/ 不包含在仓库中,必须在本地执行 pnpm run build)
开发模式 (无需构建直接运行)
pnpm exec tsx src/index.ts如何连接到 Cursor AI
1) 全局 MCP 配置文件
在 Cursor 中前往 Settings → MCP,或直接打开设置 JSON。
在 macOS 上,用户 MCP 设置通常位于以下路径:
~/.cursor/mcp.json在
mcpServers中添加以下代码块。 将args中的路径更改为您本地克隆并构建的文件夹的绝对路径。
{
"mcpServers": {
"depreciation-mcp": {
"command": "node",
"args": ["/절대경로/depreciation-mcp/dist/index.js"]
}
}
}示例 (存放在下载文件夹的情况):
"depreciation-mcp": {
"command": "node",
"args": ["/Users/본인계정/Downloads/depreciation-mcp/dist/index.js"]
}完全关闭并重新启动 Cursor。
如果在聊天中看到
get_useful_life、calc_depreciation_schedule等 MCP 工具列表,则表示连接成功。
2) 项目专用 (可选)
如果是使用项目根目录 .cursor/mcp.json 的工作区,可以将相同的 JSON 放入该文件中。(根据 Cursor 版本,UI 路径可能有所不同。)
3) 通过 tsx 连接而不进行构建 (可选)
"depreciation-mcp": {
"command": "pnpm",
"args": ["exec", "tsx", "/절대경로/depreciation-mcp/src/index.ts"],
"cwd": "/절대경로/depreciation-mcp"
}如何连接到 Claude Desktop (macOS)
关闭 Claude Desktop。
打开配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json如果顶部没有
mcpServers,请创建它,并添加以下内容:
{
"mcpServers": {
"depreciation-mcp": {
"command": "node",
"args": ["/절대경로/depreciation-mcp/dist/index.js"]
}
}
}保存文件并重新启动 Claude Desktop。
在新对话中确认是否显示 MCP 工具。
Windows 用户请在确认 Claude 官方文档的配置文件路径后,按照相同方式配置 command / args 即可。
提供工具 (6 个)
工具 | 说明 |
| 基于资产类型·行业·建筑结构的使用年限·允许范围·基本折旧方式 |
| 定额·定率·生产量比例折旧计划 |
| 会计 vs 税务限额差异 (损金否认·认列不足·追认简单模型) |
| 资产分类列表 |
| 最多 100 项批量·汇总 |
| 各行业使用年限·折旧比较 |
脚本
命令 | 说明 |
| TypeScript → |
|
|
|
|
| Vitest |
| 验证 stdio 连接·6 个工具· |
连接测试 (本地)
构建后在项目根目录执行:
pnpm smoke如果出现 OK: listTools 和 OK: get_useful_life,则说明 MCP 服务器进程和协议正常。
关于数据
src/data/annex5.ts、annex6.ts 等是实务辅助用汇总数据。法律修订时请更新内容并使用 pnpm test 进行验证。
仓库
Available Tools
6 toolscalc_bulk_depreciation일괄 감가상각C
최대 100건, 회계 스케줄 vs 세무 기본 스케줄로 당기 손금부인 등 요약
| Name | Required | Description | Default |
|---|---|---|---|
| assets | Yes | 자산 목록 | |
| fiscal_year | Yes | ||
| output_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description provides minimal behavioral context: limit of 100 assets, comparison of accounting vs tax schedules, and a summary output. No disclosure of whether the tool mutates data, requires authentication, or any side effects. Since no annotations exist, the description should carry the full burden but fails to cover key traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single sentence, very concise, but it omits structure like a separate purpose statement or parameter details. It is not excessively long, but the brevity sacrifices completeness. A more structured format would improve usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, nested objects, and no output schema, the description lacks crucial details: what the summary contains, how to interpret the output, and any prerequisites. The tool is moderately complex but the description does not adequately inform an agent how to use it or what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 3 parameters with only 33% description coverage (only 'assets' has label '자산 목록'). The tool description adds no parameter-level context; it does not explain fiscal_year or output_format beyond the enum values. Despite low coverage, the description does not compensate, leaving parameter semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description indicates bulk depreciation calculation for up to 100 assets, comparing accounting and tax schedules, producing a summary including tax deduction denial. This differentiates from sibling tools like calc_depreciation_schedule (likely single asset) and calc_tax_adjustment (likely more detailed adjustment). However, the phrasing '등 요약' is vague, slightly reducing clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. No mention of alternatives or prerequisites. The description implies bulk usage via '최대 100건' but does not clarify when to choose this tool over calc_depreciation_schedule or calc_tax_adjustment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_depreciation_schedule감가상각 스케줄B
단일 자산의 정액법·정률법·생산량비례법 스케줄(연도별)
| Name | Required | Description | Default |
|---|---|---|---|
| asset_name | Yes | 자산명 | |
| asset_type | Yes | 자산 유형(내용연수 자동참조 시 사용) | |
| industry_code | No | ||
| cost | Yes | 취득가액 | |
| acquired_date | Yes | 취득일 YYYY-MM-DD | |
| method | No | 미입력 시 내용연수 조회 결과의 기본 상각방식 | |
| useful_life_years | No | 미입력 시 업종·자산 기준 표준 내용연수 | |
| total_units | No | ||
| current_units | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description carries full burden. It only states the calculation without disclosing side effects, permissions, output format, or behavior on invalid inputs. Minimal transparency for a tool with 9 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key info (single asset, methods, yearly). Every word is functional, but could be slightly expanded for clarity without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters and no output schema, the description fails to explain the schedule's structure (e.g., yearly breakdown columns, totals) or return format. Lacks completeness for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (6 of 9 parameters have descriptions). The description does not add meaning beyond schema; it merely lists methods. No explanation of parameter interplay or defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states single asset and three depreciation methods (정액법·정률법·생산량비례법) and yearly schedule. The name and description contrast with sibling `calc_bulk_depreciation`, clearly differentiating scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies single-asset usage but does not explicitly state when to choose this over siblings like `calc_bulk_depreciation` or `compare_industry_life`. No when-not or alternative guidance provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_tax_adjustment세무조정 참고B
회계 감가상각비 vs 세무 상각범위액 → 손금부인·시인부족·추인(단순모형)
| Name | Required | Description | Default |
|---|---|---|---|
| book_depreciation | Yes | ||
| tax_limit | Yes | ||
| carried_over_denial | No | 전기 이월 손금부인액 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool computes specific adjustments but does not disclose side effects, return format, error handling, or assumptions. The description is minimal and lacks behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, capturing the core purpose in a single line. However, it is not structured to highlight parameter usage or provide additional context. It is front-loaded but benefits could be improved with parameter mapping.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has three parameters, no output schema, and no annotations, the description is insufficient. It does not explain return values, how to use the carried_over_denial parameter, or any assumptions of the simple model. Context is lacking for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one of three parameters has a description in the schema, and the description does not explain any parameters. The Korean text hints at book depreciation and tax limit but does not map explicitly to the schema parameters. With low schema coverage (33%), the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares accounting depreciation vs tax depreciation limit and computes adjustments like denial, shortfall, and carryforward. It distinguishes from sibling tools like calc_bulk_depreciation and calc_depreciation_schedule which focus on different aspects of depreciation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for tax adjustment calculations but does not explicitly state when to use this tool versus alternatives like calc_bulk_depreciation or get_useful_life. No guidance on prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_industry_life업종 간 내용연수·상각 비교B
동일 자산·취득가에 대해 업종별 표준 내용연수 및 1년차·5년 누적 상각(비교용)
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | Yes | ||
| cost | Yes | ||
| industry_codes | Yes | ||
| method | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states what the tool does without disclosing behavioral traits such as output format, precision, or any side effects. The description does not compensate for the missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the purpose. However, it could be slightly more structured by including parameter information without being overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description lacks completeness. It does not explain the output format, how results are presented for multiple industries, or additional context needed for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description only vaguely mentions 'asset and acquisition cost' and 'by industry', failing to provide meaningful details about the four parameters, their enumerations, or how to use them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description explicitly state the tool compares standard useful life and depreciation across industries for a given asset and cost. It clearly differentiates from siblings like calc_depreciation_schedule (full schedule) and get_useful_life (single value).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case of cross-industry comparison but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_useful_life내용연수 조회B
자산 유형·업종·건물구조 기준 기준내용연수·허용범위·기본 상각방식·법적근거
| Name | Required | Description | Default |
|---|---|---|---|
| asset_type | Yes | 자산 유형 | |
| industry_code | No | KSIC 스타일 코드 (예: Q86, J62). 미입력 시 별표5 공통 | |
| structure | No | 건물(asset_type=building)일 때 구조 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It does not explicitly state that the tool is read-only, nor does it disclose behavior for missing inputs or errors. The description only lists outputs without behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the key criteria and outputs. No unnecessary words; every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with no output schema, the description lists the four output fields (standard useful life, allowable range, default depreciation method, legal basis), which is fairly complete. Missing details on output format or typical use cases, but overall adequate for simple lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, so baseline is 3. The description adds little beyond the schema; it repeats the criteria but does not explain output format or parameter interactions beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the criteria (asset type, industry, building structure) and outputs (standard useful life, allowable range, default depreciation method, legal basis). It distinguishes from sibling calculation tools by being a retrieval tool, but could explicitly state 'lookup' or 'retrieve' for clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The sibling tools are all calculation-oriented (calc_bulk_depreciation, etc.), but the description does not explicitly direct the agent to use get_useful_life for retrieval and the others for computations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_asset_categories자산 분류 목록B
업종별(또는 공통) 자산 분류·내용연수·상각률 요약
| Name | Required | Description | Default |
|---|---|---|---|
| industry_code | No | ||
| asset_filter | No | ||
| show_rates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral details such as read-only nature, default behavior with empty parameters, or the scope of data returned. This is a significant gap for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the key purpose. However, it could be more structured with details, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of schema descriptions, annotations, and output schema, the description is far from complete. It does not explain parameter usage, output format, or provide enough context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% coverage with no descriptions, and the tool description does not explain any parameter semantics (e.g., industry_code format, asset_filter enum meaning, show_rates effect). The description adds no value beyond parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a summary of asset classifications, useful lives, and depreciation rates by industry (or common), which distinguishes it from sibling calculation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like calc_depreciation_schedule. Usage is implied as a lookup tool, but no when-not or alternative recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- First observed
calc_bulk_depreciation - First observed
calc_depreciation_schedule - First observed
calc_tax_adjustment - First observed
compare_industry_life - First observed
get_useful_life - First observed
list_asset_categories
TDQS
Scored across 6 tools
Each tool targets a distinct function: bulk calculation, single schedule, tax adjustment, industry comparison, useful life lookup, and category listing. No overlap in purpose.
All tools use snake_case with a consistent verb_noun pattern (calc_, compare_, get_, list_). No mixing of conventions.
6 tools is well-scoped for a depreciation-focused server, covering core calculations, lookups, and comparisons without being excessive.
Covers key operations: schedule calculation, bulk processing, tax adjustment, useful life retrieval, and category listing. Minor gap: no explicit method for depreciation method enumeration, but still highly functional for its purpose.
Maintenance
Related MCP Connectors
Fixed assets and depreciation from bundled Polish KST, HMRC and IRS MACRS tables.
Korean national tax and social insurance filings, invoices and payroll data as MCP tools.
Powerful OpenDART API-based Korean corporate disclosure tools for accounting professionals
Full-text search over K-IFRS/K-GAAP standards and KASB accounting Q&A for Korean accountants
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables searching and retrieving tax law data from the Korean National Tax Service database, including interpretations, rulings, forms, publications, and site menus via MCP tools.141MIT
- AlicenseAqualityDmaintenanceProvides Korean stock market data, including DART electronic disclosures and KRX trading information, enabling users to query company profiles, financial statements, and stock trade details via MCP clients.9MIT
- FlicenseAqualityDmaintenanceProvides Korean-specific financial calculators (4 insurances, salary net, severance pay, capital gains tax, DSR/DTI, FX conversion, housing subscription score) as MCP tools for AI agents.7-
- FlicenseNot gradedqualityBmaintenanceMCP server for searching and retrieving Korean accounting standards (K-IFRS, general corporate accounting standards) and Q&A summaries from the KASB database. Provides four tools: keyword search of standards and Q&As, real-time full text of standards, and cached Q&A details.-