Skip to main content
Glama
boam79

depreciation-mcp

by boam79
README.md
# depreciation-mcp

법인세법 기준 **고정자산 내용연수·감가상각·세무조정 참고값**을 [Model Context Protocol(MCP)](https://modelcontextprotocol.io)로 제공하는 서버입니다.

> 계산 결과는 **참고용**입니다. 신고·회계처리는 적용 법령·사실관계·전문가 검토가 필요합니다.

---

## PRD 배경 (MCP-DEP-001-v1)

아래 **프로젝트 개요**, **문제 정의**, **목표 사용자**, **핵심 사용자 시나리오**는 PRD *시설 감가상각 계산 MCP v1.0(수정판)* 의 1·2·3·6장을 README용으로 옮긴 것입니다.

### 1. 프로젝트 개요

고정자산 감가상각은 결산 및 법인세 신고에서 반복적으로 수행되는 핵심 실무다.  
하지만 실제 현장에서는 다음 문제가 반복된다.

- 자산 유형별 내용연수 확인을 위해 시행규칙 [별표 5·6]를 직접 찾아야 한다.
- 회계팀 또는 총무팀이 스프레드시트 수식에 의존하여 계산한다.
- 정액법/정률법 선택, 내용연수 범위 검토, 세무조정 계산이 분리되어 있어 작업이 번거롭다.
- 담당자 변경 시 판단 기준이 남지 않아 일관성이 떨어진다.

본 MCP는 이 과정을 표준화하여, 사용자가 자산 정보를 입력하면  
**법인세법 기준의 내용연수 조회 → 감가상각 계산 → 세무조정 참고값 → 일괄 처리 및 비교 분석**까지 일관되게 제공하는 것을 목표로 한다.

### 2. 문제 정의

#### 2.1 현재 실무의 불편

1. **법령 조회의 반복성**  
   자산 분류와 업종별 기준연수를 매번 수동 확인해야 한다.

2. **계산의 비일관성**  
   같은 자산도 담당자에 따라 다른 내용연수 또는 다른 계산식이 적용될 수 있다.

3. **세무조정의 분리 관리**  
   회계상 감가상각비와 세무상 상각범위액 비교를 별도로 계산해야 한다.

4. **다수 자산 처리의 비효율**  
   결산 시즌에는 수십 건 자산을 반복 계산해야 한다.

5. **업종별 비교 검토의 어려움**  
   동일 자산을 서로 다른 업종 기준으로 검토하려면 수작업이 많다.

### 3. 목표 사용자

| 사용자 그룹 | 주요 자산 | 주요 니즈 |
|-------------|-----------|-----------|
| 병원·의료기관 총무팀 | 의료장비, 건물부속설비, 차량 | 고가 자산 내용연수 및 상각방법 검토 |
| 제조업 회계팀 | 기계장치, 공장설비, 차량 | 정률법 기준 계산과 세무조정 |
| IT·서비스 기업 총무팀 | 서버, 네트워크 장비, 소프트웨어, 가구 | 자산 분류 및 내용연수 표준화 |
| 중소기업 대표/경리 | 차량, 비품, 사무설비 | 빠르고 실수 없는 기준 계산 |
| 결산 담당자 | 다수 자산 포트폴리오 | 일괄 계산 및 요약표 확인 |

### 4. 핵심 사용자 시나리오 (PRD 6장)

#### 시나리오 A — 병원 장비 내용연수 조회

**사용자:**  
> “MRI 장비를 의료업 기준으로 보면 내용연수가 몇 년인지 알려줘.”

**처리 흐름**

1. `get_useful_life` 호출  
2. Q86 + 의료기기 기준 조회  
3. 기준내용연수, 허용 범위, 상각방법, 법적 근거 반환  

#### 시나리오 B — 단일 자산 감가상각 계산

**사용자:**  
> “취득가액 15억, 취득일 2026-03-01, 내용연수 5년으로 감가상각 스케줄 계산해줘.”

**처리 흐름**

1. `calc_depreciation_schedule` 호출  
2. 정액법/정률법/생산량비례법 중 해당 방식 계산  
3. 연도별 감가상각비, 장부가액, 누계액 반환  

#### 시나리오 C — 세무조정 계산

**사용자:**  
> “회계상 감가상각비와 세무상 상각범위액 차이 알려줘.”

**처리 흐름**

1. `calc_tax_adjustment` 호출  
2. 손금부인액, 시인부족액, 추인 가능 금액 계산  
3. 설명 메모와 함께 반환  

#### 시나리오 D — 결산 시즌 다수 자산 일괄 처리

**사용자:**  
> “자산 50건을 한 번에 계산해서 연간 감가상각비와 손금부인액 요약해줘.”

**처리 흐름**

1. `calc_bulk_depreciation` 호출  
2. 자산별 계산 수행  
3. 총 감가상각비, 총 세무 한도, 총 손금부인액 요약 반환  

#### 시나리오 E — 업종 간 비교

**사용자:**  
> “같은 서버 장비를 의료업과 소프트웨어업 기준으로 비교해줘.”

**처리 흐름**

1. `compare_industry_life` 호출  
2. 업종별 내용연수 및 연도별 감가상각 차이 비교  
3. 비교표 반환  

---

## 요구 사항

- **Node.js** 20 이상  
- **pnpm** 9 이상 (또는 `npm`/`corepack`으로 `pnpm` 활성화)

---

## 설치 (공통)

저장소를 클론한 뒤 의존성 설치와 빌드까지 진행합니다.

```bash
git clone https://github.com/boam79/depreciation-mcp.git
cd depreciation-mcp
pnpm install
pnpm run build
```

빌드가 끝나면 실행 파일은 **`dist/index.js`** 입니다. (`dist/`는 저장소에 포함되지 않으므로 **반드시 로컬에서 `pnpm run build` 필요**)

### 개발 모드 (빌드 없이 실행)

```bash
pnpm exec tsx src/index.ts
```

---

## Cursor AI에 연결하는 방법

### 1) 전역 MCP 설정 파일

1. Cursor에서 **Settings → MCP** 로 이동하거나, 설정 JSON을 직접 엽니다.  
2. macOS에서 사용자 MCP 설정은 보통 다음 경로입니다.  
   `~/.cursor/mcp.json`
3. `mcpServers` 안에 아래 블록을 **추가**합니다.  
   **`args`의 경로는 본인 PC에서 클론·빌드한 폴더의 절대 경로**로 바꿉니다.

```json
{
  "mcpServers": {
    "depreciation-mcp": {
      "command": "node",
      "args": ["/절대경로/depreciation-mcp/dist/index.js"]
    }
  }
}
```

예 (다운로드 폴더에 둔 경우):

```json
"depreciation-mcp": {
  "command": "node",
  "args": ["/Users/본인계정/Downloads/depreciation-mcp/dist/index.js"]
}
```

4. Cursor를 **완전히 종료 후 다시 실행**합니다.  
5. 채팅에서 MCP 도구 목록에 `get_useful_life`, `calc_depreciation_schedule` 등이 보이면 연결된 것입니다.

### 2) 프로젝트 전용 (선택)

프로젝트 루트의 `.cursor/mcp.json`을 쓰는 워크스페이스라면, 동일한 JSON을 그 파일에 넣을 수 있습니다. (Cursor 버전에 따라 UI 경로가 다를 수 있습니다.)

### 3) 빌드 없이 `tsx`로 연결 (선택)

```json
"depreciation-mcp": {
  "command": "pnpm",
  "args": ["exec", "tsx", "/절대경로/depreciation-mcp/src/index.ts"],
  "cwd": "/절대경로/depreciation-mcp"
}
```

---

## Claude Desktop에 연결하는 방법 (macOS)

1. Claude Desktop을 **종료**합니다.  
2. 설정 파일을 엽니다.  
   `~/Library/Application Support/Claude/claude_desktop_config.json`  
3. 최상위에 `mcpServers`가 없으면 만들고, 다음을 추가합니다.

```json
{
  "mcpServers": {
    "depreciation-mcp": {
      "command": "node",
      "args": ["/절대경로/depreciation-mcp/dist/index.js"]
    }
  }
}
```

4. 파일을 저장하고 Claude Desktop을 다시 실행합니다.  
5. 새 대화에서 MCP 도구가 노출되는지 확인합니다.

Windows 사용자는 Claude 공식 문서의 **설정 파일 경로**를 확인한 뒤, 동일하게 `command` / `args`만 맞추면 됩니다.

---

## 제공 도구 (6개)

| 도구 | 설명 |
|------|------|
| `get_useful_life` | 자산 유형·업종·건물구조 기준 내용연수·허용 범위·기본 상각방식 |
| `calc_depreciation_schedule` | 정액·정률·생산량비례 스케줄 |
| `calc_tax_adjustment` | 회계 vs 세무 한도 차이(손금부인·시인부족·추인 단순모형) |
| `list_asset_categories` | 자산 분류 목록 |
| `calc_bulk_depreciation` | 최대 100건 일괄·요약 |
| `compare_industry_life` | 업종별 내용연수·상각 비교 |

---

## 스크립트

| 명령 | 설명 |
|------|------|
| `pnpm run build` | TypeScript → `dist/` |
| `pnpm start` | `node dist/index.js` (stdio MCP) |
| `pnpm run dev` | `tsx src/index.ts` |
| `pnpm test` | Vitest |
| `pnpm smoke` | stdio 연결·도구 6개·`get_useful_life` 샘플 호출 검증 |

---

## 연결 테스트 (로컬)

빌드 후 프로젝트 루트에서:

```bash
pnpm smoke
```

`OK: listTools` 및 `OK: get_useful_life`가 나오면 MCP 서버 프로세스와 프로토콜이 정상입니다.

---

## 데이터에 관해

`src/data/annex5.ts`, `annex6.ts` 등은 **실무 보조용 요약 데이터**입니다. 법령 개정 시 내용을 갱신하고 `pnpm test`로 검증하세요.

---

## 저장소

https://github.com/boam79/depreciation-mcp

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct function: bulk calculation, single schedule, tax adjustment, industry comparison, useful life lookup, and category listing. No overlap in purpose.

Naming Consistency5/5

All tools use snake_case with a consistent verb_noun pattern (calc_, compare_, get_, list_). No mixing of conventions.

Tool Count5/5

6 tools is well-scoped for a depreciation-focused server, covering core calculations, lookups, and comparisons without being excessive.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues