Skip to main content
Glama
README.md
# law-openapi-mcp

<!-- mcp-name: io.github.rubatoyd/law-openapi-mcp -->

[![CI](https://github.com/rubatoyd/law-openapi-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/rubatoyd/law-openapi-mcp/actions/workflows/ci.yml)
[![Release](https://img.shields.io/github/v/release/rubatoyd/law-openapi-mcp)](https://github.com/rubatoyd/law-openapi-mcp/releases/latest)
[![Downloads](https://img.shields.io/github/downloads/rubatoyd/law-openapi-mcp/total?label=downloads)](https://github.com/rubatoyd/law-openapi-mcp/releases)

<!-- usage:start -->
> ๐Ÿ“ˆ **์‚ฌ์šฉ๋Ÿ‰** โ€” ์ตœ๊ทผ 14์ผ ์กฐํšŒ **0**ํšŒ(๊ณ ์œ  0) ยท ํด๋ก  **0**ํšŒ(๊ณ ์œ  0) ยท ๋ฆด๋ฆฌ์Šค ์ž์‚ฐ ๋ˆ„์  ๋‹ค์šด๋กœ๋“œ **0**
>
> ![์ผ๋ณ„ ํด๋ก ยท์กฐํšŒ ์ถ”์ด](docs/usage.svg)
>
> <sub>2026-09-22 ์ž๋™ ๊ฐฑ์‹  ยท ์ „์ฒด ์ด๋ ฅ์€ [`docs/usage.csv`](docs/usage.csv). GitHub ํŠธ๋ž˜ํ”ฝ ํ†ต๊ณ„๋Š” 14์ผ ์ฐฝ๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ด ์ €์žฅ์†Œ๊ฐ€ ๋งค์ผ ์ฐ์–ด ๋ˆ„์ ํ•œ๋‹ค.</sub>
<!-- usage:end -->

๋ฒ•์ œ์ฒ˜ **๊ตญ๊ฐ€๋ฒ•๋ น์ •๋ณด OPEN API**(law.go.kr DRF)๋ฅผ ๊ฒ€์ƒ‰ยท์ˆ˜์ง‘ํ•˜๋Š” MCP ์„œ๋ฒ„ + CLI.

ํ˜„ํ–‰๋ฒ•๋ นยทํ–‰์ •๊ทœ์น™ยท์ž์น˜๋ฒ•๊ทœยทํŒ๋ก€ยทํ—Œ์žฌ๊ฒฐ์ •๋ก€ยทํ–‰์ •์‹ฌํŒ๋ก€ยท๋ฒ•๋ นํ•ด์„๋ก€(๋ฒ•์ œ์ฒ˜ + ๋ถ€์ฒ˜ 39์ข…)ยท
์œ„์›ํšŒ ๊ฒฐ์ •๋ฌธยท๋ณ„ํ‘œ์„œ์‹ยท์กฐ์•ฝยท๋ฒ•๋ น์šฉ์–ด ๋“ฑ **72์ข…**์„ ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์กฐํšŒํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ
xlsxยทcsvยทjsonยทsqlite ๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค. ์—ฐ๊ตฌ ์ž๋ฃŒ์ˆ˜์ง‘ ๋‹จ๊ณ„์—์„œ ๋ฐ˜๋ณต ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋‹ค.

์ž๋งค ์ €์žฅ์†Œ: [na-openapi-mcp](https://github.com/rubatoyd/na-openapi-mcp)(๊ตญํšŒ๋„์„œ๊ด€) ยท
[nl-openapi-mcp](https://github.com/rubatoyd/nl-openapi-mcp)(๊ตญ๋ฆฝ์ค‘์•™๋„์„œ๊ด€) ยท
[kci-openapi-mcp](https://github.com/rubatoyd/KCI_openAPI) ยท [scienceON-mcp](https://github.com/rubatoyd/scienceON-mcp)

---

## ์ˆ˜์ง‘ ๋‹จ์œ„๋Š” ์ธ์šฉ ๋‹จ์œ„๋‹ค

**๋ฒ•๋ น ํ•˜๋‚˜๊ฐ€ ๋ฌธํ—Œ ํ•˜๋‚˜**๋‹ค. ์กฐ๋ฌธ์€ ์ธ์šฉํ•  ๋•Œ์˜ ์œ„์น˜๋กœ ๋„ฃ์ง€, ๋ณ„๋„ ๋ ˆ์ฝ”๋“œ๋กœ ์ชผ๊ฐœ์ง€ ์•Š๋Š”๋‹ค.
ใ€Œ์ดˆยท์ค‘๋“ฑ๊ต์œก๋ฒ•ใ€์€ ์กฐ๋ฌธ 135๊ฐœ์งœ๋ฆฌ 309KB ๋ฌธ์„œ์ง€๋งŒ ์ฐธ๊ณ ๋ฌธํ—Œ์—๋Š” ํ•œ ์ค„๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
ํŒ๋ก€๋Š” ์‚ฌ๊ฑด ํ•˜๋‚˜, ๋ฒ•๋ นํ•ด์„๋ก€๋Š” ์•ˆ๊ฑด ํ•˜๋‚˜, ์กฐ์•ฝ์€ ์กฐ์•ฝ ํ•˜๋‚˜๋‹ค.

๋ณธ๋ฌธ์ด ํ•„์š”ํ•˜๋ฉด `law_body` ๋กœ ๋”ฐ๋กœ ๋ฐ›๋Š”๋‹ค โ€” ๊ทธ๋•Œ๋Š” ์กฐ๋ฌธ์ด ๊ตฌ์กฐ๋กœ ์˜จ๋‹ค.

## ์ค€๋น„๋ฌผ

`OC` ํ•˜๋‚˜๋ฉด ๋œ๋‹ค. [open.law.go.kr](https://open.law.go.kr) ์—์„œ OPEN API ๋ฅผ ์‹ ์ฒญํ•  ๋•Œ
**๊ฐ€์ž… ์ด๋ฉ”์ผ์˜ @ ์•ž๋ถ€๋ถ„**์„ ๋ณธ์ธ์ด ์ง€์ •ํ•˜๋Š” ๊ฐ’์ด๋‹ค.

```bash
cp .env.example .env    # LAW_OC=your_id ๋ฅผ ์ฑ„์šด๋‹ค
```

`OC` ๋Š” ๋น„๋ฐ€๊ฐ’์ด ์•„๋‹ˆ๋‹ค. ์š”์ฒญ URL์— ํ‰๋ฌธ์œผ๋กœ ์‹ค๋ฆฌ๊ณ  ์‘๋‹ต์˜ ์ƒ์„ธ๋งํฌ์—๋„ ๊ทธ๋Œ€๋กœ ๋˜๋Œ์•„์˜จ๋‹ค.
๊ทธ๋ž˜๋„ ์‚ฌ๋žŒ๋งˆ๋‹ค ๊ฐ’์ด ๋‹ค๋ฅด๋ฏ€๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.

## ์„ค์น˜ยท์‹คํ–‰

```bash
uv sync
uv run law status                              # ์—ฐ๊ฒฐ ์ ๊ฒ€
uv run law search --target law --query ๊ต์œก     # ํ˜„ํ–‰๋ฒ•๋ น ๊ฒ€์ƒ‰
uv run law body --target law --id 209959       # ๋ณธ๋ฌธ ์กฐํšŒ
uv run law collect --target law,prec --query ๊ต์œก,ํ‰์ƒ๊ต์œก --format xlsx
```

MCP ๋“ฑ๋ก:

```json
{
  "mcpServers": {
    "law": {
      "command": "uvx",
      "args": ["law-openapi-mcp"],
      "env": { "LAW_OC": "your_id" }
    }
  }
}
```

## MCP ๋„๊ตฌ

| ๋„๊ตฌ | ํ•˜๋Š” ์ผ |
|------|---------|
| `law_status` | `OC` ๋ณด์œ  ์—ฌ๋ถ€ + ์‹ค์ œ ์™•๋ณต 1ํšŒ |
| `law_targets` | ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฐˆ๋ž˜์™€ ๊ฐˆ๋ž˜๋ณ„ ์‹ค์ธก ์Šคํ‚ค๋งˆยท์ฃผ์˜์‚ฌํ•ญ |
| `law_search` | ๋ชฉ๋ก ๊ฒ€์ƒ‰. `total`ยท`truncated`ยท๊ฒฝ๊ณ ๋ฅผ ํ•จ๊ป˜ ๋Œ๋ ค์ค€๋‹ค |
| `law_body` | ์‹๋ณ„์ž 1๊ฑด์˜ ๋ณธ๋ฌธ(์กฐ๋ฌธยทํŒ์‹œ์‚ฌํ•ญยท์งˆ์˜์š”์ง€ ๋“ฑ) |
| `law_collect` | ๊ฐˆ๋ž˜ ร— ๊ฒ€์ƒ‰์–ด ์กฐํ•ฉ์„ ๋ชจ์•„ xlsx/csv/json/sqlite ๋กœ ์ €์žฅ |
| `law_citation` | ๋ ˆ์ฝ”๋“œ๋ฅผ ์„œ์ง€ ํ•„๋“œ(๋ฐœ๋ น์ฃผ์ฒดยทํ˜ธยท์‹œํ–‰์ผยท์ œ์ •๊ธฐ๊ด€)๋กœ ๋งคํ•‘ |

## ๋‹ค๋ฃจ๋Š” ๊ฐˆ๋ž˜ โ€” 72์ข…

| ๋ฌด๋ฆฌ | ์ข…์ˆ˜ | ๋ณด๊ธฐ |
|---|--:|---|
| ๋ฒ•๋ นยท๊ทœ์น™ | 7 | `law` ํ˜„ํ–‰๋ฒ•๋ น ยท `eflaw` ์‹œํ–‰์ผ๋ฒ•๋ น ยท `elaw` ์˜๋ฌธ๋ฒ•๋ น ยท `admrul` ํ–‰์ •๊ทœ์น™ ยท `ordin` ์ž์น˜๋ฒ•๊ทœ ยท `lsStmd` ๋ฒ•๋ น์ฒด๊ณ„๋„ ยท `school` ํ•™์น™ |
| ํŒ๋ก€ยท์žฌ๊ฒฐ | 3 | `prec` ํŒ๋ก€ ยท `detc` ํ—Œ์žฌ๊ฒฐ์ •๋ก€ ยท `decc` ํ–‰์ •์‹ฌํŒ๋ก€ |
| ๋ฒ•๋ นํ•ด์„ | 40 | `expc` ๋ฒ•์ œ์ฒ˜ + **๋ถ€์ฒ˜ 39์ข…**(`moeCgmExpc` ๊ต์œก๋ถ€ โ€ฆ) |
| ์œ„์›ํšŒ ๊ฒฐ์ •๋ฌธ | 12 | `ppc` ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ์œ„ ยท `ftc` ๊ณต์ •๊ฑฐ๋ž˜์œ„ ยท `nlrc` ๋…ธ๋™์œ„ ยท `nhrck` ๊ตญ๊ฐ€์ธ๊ถŒ์œ„ โ€ฆ |
| ํŠน๋ณ„ํ–‰์ •์‹ฌํŒ | 4 | `ttSpecialDecc` ์กฐ์„ธ์‹ฌํŒ์› ยท `kmstSpecialDecc` ํ•ด์–‘์•ˆ์ „์‹ฌํŒ์› โ€ฆ |
| ๋ณ„ํ‘œยท์„œ์‹ | 3 | `licbyl` ๋ฒ•๋ น ยท `admbyl` ํ–‰์ •๊ทœ์น™ ยท `ordinbyl` ์ž์น˜๋ฒ•๊ทœ |
| ์กฐ์•ฝยท์šฉ์–ด | 2 | `trty` ์กฐ์•ฝ ยท `lstrm` ๋ฒ•๋ น์šฉ์–ด |
| ๊ทธ ๋ฐ– | 1 | `baiPvcs` ๊ฐ์‚ฌ์› ์‚ฌ์ „์ปจ์„คํŒ… |

์ „์ฒด ๋ชฉ๋ก๊ณผ ๊ฐˆ๋ž˜๋ณ„ ์‹ค์ธก ์Šคํ‚ค๋งˆ๋Š” `law targets` / `law_targets`,
๋ฌด์—‡์ด ์žˆ๋Š”์ง€์˜ ์ง€๋„๋Š” [docs/DRF_CATALOG.md](docs/DRF_CATALOG.md).

**๋ณธ๋ฌธ์ด XML ๋กœ ์˜ค์ง€ ์•Š๋Š” 4์ข…**: `licbyl`ยท`ordinbyl`(๋ณ„ํ‘œยท์„œ์‹์€ ํŒŒ์ผ โ€” ๋ชฉ๋ก์˜
`๋ณ„ํ‘œ์„œ์‹ํŒŒ์ผ๋งํฌ`ยท`๋ณ„ํ‘œ์„œ์‹PDFํŒŒ์ผ๋งํฌ` ๊ฐ€ ์›๋ฌธ) ยท `moefCgmExpc`ยท`ntsCgmExpc`(๋ชฉ๋ก๋งŒ).
ํ˜ธ์ถœ ์ „์— ๋ง‰๊ณ  ๋Œ€์‹  ๋ฌด์—‡์„ ๋ณด๋ผ๊ณ  ์•Œ๋ ค ์ค€๋‹ค.

`lsHistory`(๋ฒ•๋ น ์—ฐํ˜)ยท`couseLs`(๊ด€๋ จ๋ฒ•๋ น)๋Š” `type=XML` ์„ ๋ฌด์‹œํ•˜๊ณ  HTML ์„ ๋Œ๋ ค์ฃผ๋ฏ€๋กœ
์ด ์„œ๋ฒ„๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค. ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ ์‚ฌ์‹ค์„ ์•Œ๋ ค ์ค€๋‹ค.

## ์•Œ์•„ ๋‘˜ ๊ฒƒ (์ „๋ถ€ ์‹ค์ธก)

- ๐Ÿ”ด **๋ชจ๋“  ์‹คํŒจ๊ฐ€ HTTP 200 ์ด๋‹ค.** ์—†๋Š” target ์€ 0๋ฐ”์ดํŠธ, ์ž˜๋ชป๋œ `OC` ๋Š” `<Response>`,
  ์—†๋Š” ์‹๋ณ„์ž๋Š” `<Law>์ผ์น˜ํ•˜๋Š” โ€ฆ ์—†์Šต๋‹ˆ๋‹ค</Law>`. ์ƒํƒœ์ฝ”๋“œ๋กœ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•Œ ์ˆ˜ ์—†๋‹ค.
- ๐Ÿ”ด **`query` ๋ฅผ ๋นผ๋ฉด ์ „์ฒด ์นดํƒˆ๋กœ๊ทธ๊ฐ€ ์˜จ๋‹ค** โ€” ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋‹ค(ํ˜„ํ–‰๋ฒ•๋ น 5,614๊ฑด).
  ์ด ์„œ๋ฒ„๋Š” ๋นˆ ๊ฒ€์ƒ‰์–ด๋ฅผ ๊ฑฐ๋ถ€ํ•œ๋‹ค.
- ๐Ÿ”ด **ํŒ๋ก€ ๋ณธ๋ฌธ์€ ๋ฐ์ดํ„ฐ์ถœ์ฒ˜์— ๋”ฐ๋ผ ์—†๋‹ค.** `๋ฐ์ดํ„ฐ์ถœ์ฒ˜๋ช…=๋Œ€๋ฒ•์›` ์€ ๋ณธ๋ฌธ์ด ์˜ค๊ณ ,
  `๊ตญ์„ธ๋ฒ•๋ น์ •๋ณด์‹œ์Šคํ…œ` ์€ ๋ชฉ๋ก์—๋งŒ ์žˆ๊ณ  ๋ณธ๋ฌธ ์กฐํšŒ์— "์ผ์น˜ํ•˜๋Š” ํŒ๋ก€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค" ๊ฐ€ ์˜จ๋‹ค.
  ๊ฒฐ์†์œผ๋กœ ๊ธฐ๋กํ•˜๊ณ  ๋„˜์–ด๊ฐˆ ์ผ์ด์ง€ ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
- `display` ์ƒํ•œ์€ 500(1000์„ ์š”์ฒญํ•˜๋ฉด 500์œผ๋กœ ๊นŽ์ด๊ณ  `numOfRows` ์— ์ •์งํ•˜๊ฒŒ ์—์ฝ”๋œ๋‹ค).
- `page` ์—๋Š” ํ•˜๋“œ ์ƒํ•œ์ด ์—†๋‹ค โ€” `totalCnt` ์ „๋Ÿ‰์„ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
- ๊ฐˆ๋ž˜๋งˆ๋‹ค ๋ฃจํŠธ ํƒœ๊ทธยท๋ ˆ์ฝ”๋“œ ํƒœ๊ทธยท์‹๋ณ„์ž ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ **์ „๋ถ€ ๋‹ค๋ฅด๊ณ  ์ด๋ฆ„์—์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์—†๋‹ค**.
  ์ „์ˆ˜ ์‹ค์ธก 62์ข… ์ค‘ **45์ข…์ด ์ œ ์ด๋ฆ„์ด ์•„๋‹Œ ๋ ˆ์ฝ”๋“œ ํƒœ๊ทธ**๋ฅผ ์“ด๋‹ค(๋ถ€์ฒ˜ ํ•ด์„ 39์ข…์€ ์ „๋ถ€
  `<cgmExpc>`, `ordin`ยท`lsStmd` ๋Š” `<law>`, `school` ์€ `<admrul>`). ์‹๋ณ„์ž ํŒŒ๋ผ๋ฏธํ„ฐ๋„
  `ID`/`MST` ๋งŒ์ด ์•„๋‹ˆ๋‹ค โ€” `lstrm` ์€ `trmSeqs`.
- โš ๏ธ **`totalCnt=0` ์€ target ์ด ๋ฌดํšจ๋ผ๋Š” ๋œป์ด ์•„๋‹ˆ๋‹ค** โ€” ๊ฒ€์ƒ‰์–ด๊ฐ€ ์•ˆ ๋งž์€ ๊ฒƒ์ผ ๋ฟ์ด๋‹ค.

์ž์„ธํ•œ ๊ทผ๊ฑฐ์™€ ์žฌํ˜„ ๋ฐฉ๋ฒ•์€ [docs/LAW_API_GUIDE.md](docs/LAW_API_GUIDE.md).

## ๋ผ์ด์„ ์Šค

MIT

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a distinct role: connectivity check, schema map, single-target search, document body retrieval, bulk collection, and citation mapping. Overlapping actions such as search vs. collect are clearly differentiated by single-result versus multi-axis file output.

Naming Consistency5/5

All tools follow a uniform law_ prefix with short, lowercase, predictable names. Some names are nouns and some are verbs, but the pattern is consistent and easy to infer.

Tool Count5/5

Six tools cover the full workflow without redundancy: verify, discover, search, retrieve, collect, and cite. The count is well within the ideal range for a focused API wrapper.

Completeness5/5

The set supports a complete read-only workflow for legal documents: discovering targets, querying, fetching full bodies, bulk collection, and citation export. No obvious missing operation would prevent an agent from accomplishing the core domain tasks.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive