Skip to main content
Glama
seunguk3

local-tax-mcp

by seunguk3
README.md
# local-tax-mcp

한국 **지방세** 전용 MCP 서버. 지방세기본법·지방세법·지방세특례제한법·지방세징수법과 그 하위법령,
조세심판원 지방세 재결례, 행정안전부 유권해석, 지자체 감면조례, 「지방세관계법 운영 예규」를 다룬다.

[![CI](https://github.com/seunguk3/local-tax-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/seunguk3/local-tax-mcp/actions/workflows/ci.yml)

## 왜 만들었나

국세는 국세청 국세법령정보시스템(NTS)을 쓰는 MCP가 커버하지만, **지방세는 공백**이었다.
NTS DB에는 지방세 사건이 사실상 없다. 2026-07 실측:

| 축 | NTS | 본 MCP |
|---|---|---|
| "취득세 중과세 대도시" 심판례 | **7건** (지방세 세목은 2006·2011년 감사원 건 2개뿐) | **115건** |
| 취득세 전체 심판례 | — | **10,042건**, 최신 2026.06.30 |
| 지방세 기본통칙 | 2018년판 (stale) | 「지방세관계법 운영 예규」 2023.07.01, 현행 Y |
| 행안부 유권해석 | 없음 | **3,369건**, 최신 2026.05.26 |
| 감면조례 | 없음 | 법제처 자치법규 전량 |

데이터는 원래 다 공개돼 있었다. 인덱싱이 없었을 뿐이다.

## 도구

### 법령

| 도구 | 역할 |
|---|---|
| `get_local_tax_article` | 지방세 관계법 시점별 조문 + 현행본 자동 대조 |
| `trace_local_tax_application` | 부칙(시행일·적용례·경과조치)으로 적용시기 판정 |
| `search_reduction_ordinance` | 지자체 감면조례·세율조례 검색 |
| `get_ordinance_text` | 자치법규 본문 |

### 해석·사례

| 도구 | 역할 |
|---|---|
| `search_local_tax_decisions` | 조세심판원 지방세 재결례 검색 |
| `get_local_tax_decision` | 재결례 전문(세목·재결요지·참조결정·주문·이유) |
| `search_moi_interpretation` | 행정안전부 유권해석 검색 |
| `get_moi_interpretation` | 유권해석 전문(답변요지·질의요지·회신내용) |
| `get_operation_ruling` | 「지방세관계법 운영 예규」 조문 역인덱스 |
| `verify_local_tax_citations` | 조심 사건번호 실존 일괄 검증 |

## 설계상 방어한 실측 결함

1. **법령명 오매칭** — `lawSearch(query="지방세법")`은 부분매칭으로 **지방교부세법**을 함께
   돌려준다. 첫 행을 취하는 구현은 여기 걸린다. 정규 법령명 + 법령ID 완전일치로 해소하고,
   지방세 관계법이 아니면 **폴백 없이 거부**한다.

2. **정렬 기본값** — DRF 기본은 정확도순이라 "취득세 중과세 대도시"에 2013~2015년 건이 먼저
   올라온다. `sort=ddes`(의결일 내림차순)로 뒤집었다.

3. **시행본 페이지네이션** — 지방세법은 시행본이 많아 한 페이지(40건)로는 최고(最古) 시행일이
   2020-01-01에서 끊긴다(2019년 귀속 조회가 NOT_FOUND). 요청 시점까지 페이지를 넘긴다.

4. **사건부호 표기 변형** — `조심 2026지0349` / `조심2014지0066` / `조심-2026-중-0897` 모두 인식.
   지방세 부호는 `지`와 `방`(조심 2026방0388 실측).

5. **적용시기 함정** — 지방세법 §106③(사실상 현황 과세)은 **2021-12-28 신설**이다. 2019년
   시행본의 ③항은 '신탁재산 합산방법'으로 내용이 전혀 다르다(스모크 테스트로 검증). 과거 귀속
   경정에서 현행 조문을 원용하면 오답이므로 항상 현행본과 대조해 경고를 붙인다.

6. **조례 누락** — 지방세는 조례가 탄력세율·감면을 정한다(지방세법 §111③, 지방세특례제한법 §4).
   법률·시행령만 읽고 세액을 말하면 틀린다. 서버 instructions에 조례 확인 의무를 넣었다.

## 설치

```bash
npm install
npm run build
npm test
```

등록:

```bash
claude mcp add --scope user local-tax -e LAW_OC=<법제처 OC 인증키> -- node /path/to/local-tax-mcp/build/index.js
```

인증키는 [법제처 Open API](https://open.law.go.kr)에서 발급한다(이메일 ID 앞부분).
행정안전부 유권해석 도구는 인증키 없이 동작한다.

실 API 스모크 테스트:

```bash
LAW_OC=<키> npm run smoke
```

## 데이터 출처

- **법제처 국가법령정보 Open API** — 조문·부칙·자치법규·행정규칙·조세심판원 재결례
- **한국지방세연구원 지방세 법령정보시스템(OLTA)** — 행정안전부 유권해석

OLTA는 공개 API가 없어 HTML을 읽는다. robots.txt를 확인해 Disallow 경로
(`/e-book/`, `/search/`, `/mobile/`, `/video/`)는 요청하지 않으며, 사용하는 `/explainInfo/`는
허용 대상이다. 요청 간 최소 1.2초 간격을 두고 User-Agent에 신원을 밝힌다.

## 면책

본 도구는 공개 법령·판례 데이터를 조회할 뿐이며 세무 자문이 아니다. 산출물에 인용하기 전
반드시 원문을 확인하고 `verify_local_tax_citations`로 실존을 검증하라.

## 라이선스

MIT (Copyright © 2026 seunguk3).

`src/moleg.ts`의 법제처 DRF XML 파싱 헬퍼는
[taxlaw-nts-mcp](https://github.com/kim-go-chon/taxlaw-nts-mcp)(MIT, © 2026 kim-go-chon)에서
이식했다. 원 라이선스 전문은 [LICENSE](LICENSE)의 THIRD-PARTY NOTICES 절에 함께 수록했다.

TDQS

A4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool pairs a distinct action (search/get/verify/trace) with a distinct object type (decisions, ordinances, interpretations, rulings, articles), so no two tools target the same resource and action. The search/get pairs are explicit and reference each other's ID fields, making selection straightforward.

Naming Consistency5/5

All tool names uniformly follow a snake_case verb_noun pattern with clear verbs like search_, get_, verify_, and trace_. Minor asymmetries such as search_reduction_ordinance vs get_ordinance_text are still predictable and do not create confusion.

Tool Count5/5

With 10 tools, the server is well-scoped for local-tax legal research. Each tool addresses a necessary step: searching and retrieving sources, verifying citations, or resolving temporal application, with no redundant or ornamental tools.

Completeness4/5

The server covers the core research lifecycle well: search and retrieval for decisions, MOI interpretations, and ordinances, plus statute article retrieval and temporal application analysis. The main gap is that operation rulings only have get_operation_ruling with no dedicated keyword search, though article-based inverse lookup partially compensates.

Maintenance

ActivityStale
ResponsivenessNo issues