Skip to content
Back to skills

Api Integration 5

ASecurity

법제처 OPEN API를 MCP 프로젝트에 통합할 때 사용. lawSearch.do와 lawService.do 엔드포인트, target 파라미터로 기능 구분. 새로운 API 엔드포인트 통합 시 참조.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
testingjavascriptpythongojavabashawsapi

Works with

  • cli
  • api
  • mcp

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned September 27, 2026

npx -y skills add David-Li0406/meta-skill-evloving --skill api-integration-5 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Api Integration 5?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Api Integration 5
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/david-li0406-api-integration-5/badge)](https://www.skillsdirectory.com/skills/david-li0406-api-integration-5)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: api-integration
description: 법제처 OPEN API를 MCP 프로젝트에 통합할 때 사용. lawSearch.do와 lawService.do 엔드포인트, target 파라미터로 기능 구분. 새로운 API 엔드포인트 통합 시 참조.
---

# API 통합 가이드

법제처 OPEN API를 MCP 프로젝트에 통합하는 방법입니다.

---

## ⚠️ 데이터 기준점 (Source of Truth)

**모든 도구 개발의 기준점은 `api_layout/*.json` 파일입니다.**

| 항목 | 경로 | 역할 |
|------|------|------|
| **API 레이아웃** | `src/mcp_kr_legislation/utils/api_layout/*.json` | **API 정의의 유일한 기준점** |
| **공식 가이드** | https://open.law.go.kr/LSO/openApi/guideList.do | API 레이아웃의 원본 소스 |
| **TOOL_CHECKLIST.md** | `skills/api-integration/TOOL_CHECKLIST.md` | 구현 진행 추적 (업데이트만, 근거 아님) |

### 워크플로우

```
공식 가이드 → api_crawler.py → api_layout/*.json → 도구 개발 → TOOL_CHECKLIST.md 업데이트
              (크롤링)           (기준점)          (구현)        (추적)
```

> **주의**: TOOL_CHECKLIST.md는 진행 상황을 추적하는 문서입니다.  
> API 정보가 필요하면 반드시 `api_layout/*.json`을 참조하세요.

### 도구 개발 방식 결정

**`api_layout/*.json`의 `sample_urls` 필드로 개발 필요 여부를 결정합니다.**

| sample_urls 상태 | 개발 방식 |
|------------------|-----------|
| JSON 포함 | ✅ JSON API 직접 호출하여 도구 개발 |
| HTML만 | ❌ **도구 개발 불필요** (JSON 미지원) |

> **원칙**: `sample_urls`에 JSON URL이 없으면 해당 API는 도구 개발 대상이 아닙니다.

---

## API 레이아웃 (JSON)

추출된 API 정보는 JSON 파일로 관리됩니다:

**위치**: `src/mcp_kr_legislation/utils/api_layout/`

| 파일 | 카테고리 |
|------|----------|
| `law.json` | 법령 |
| `admin_rule.json` | 행정규칙 |
| `local_ordinance.json` | 자치법규 |
| `precedent.json` | 판례 |
| `committee.json` | 위원회결정문 |
| `ministry_interpretation_1.json` | 중앙부처 1차 해석 |
| `ministry_interpretation_2.json` | 중앙부처 2차 해석 |
| `special_tribunal.json` | 특별행정심판 |
| ... | 기타 카테고리 |

### JSON 구조
```json
{
  "category": "법령",
  "category_en": "law",
  "updated_at": "2026-01-21",
  "api_count": 26,
  "apis": [
    {
      "id": "1.1",
      "title": "현행법령(시행일) 목록 조회 API",
      "request_url": "http://www.law.go.kr/DRF/lawSearch.do?target=eflaw",
      "target": "eflaw",
      "api_type": "목록조회",
      "parameters": [...],
      "sample_urls": [...]
    }
  ]
}
```

## API 구조

### 핵심 URL 패턴

| 기능 | URL 패턴 | 설명 |
|------|----------|------|
| **목록 조회** | `lawSearch.do?target={value}` | 검색/목록 반환 |
| **본문 조회** | `lawService.do?target={value}` | 상세 내용 반환 |

### target 파라미터가 기능 결정

- 동일한 URL에서 `target` 값만으로 API 카테고리 구분
- 목록/본문 조회는 URL로, 카테고리는 target으로 결정

**전체 target 목록**: [targets.md](targets.md)

## LegislationClient 사용

```python
from mcp_kr_legislation.apis.client import LegislationClient
from mcp_kr_legislation.config import legislation_config

# 클라이언트 초기화
client = LegislationClient(config=legislation_config)

# 목록 조회
result = client.search(
    target="law",
    params={"query": "개인정보보호법", "display": 20}
)

# 본문 조회
detail = client.service(
    target="law",
    params={"ID": "법령ID"}
)
```

## Tool에서 API 호출

```python
from mcp_kr_legislation.utils.ctx_helper import with_context

@mcp.tool(name="search_law")
def search_law(query: str) -> TextContent:
    result = with_context(
        None,
        "search_law",
        lambda context: context.law_api.search(
            target="law",
            query=query
        )
    )
    return TextContent(type="text", text=str(result))
```

## 주요 파라미터

**공통**: `OC` (자동 추가), `target` (필수), `type` (JSON/XML/HTML)

**검색**: `query`, `display` (기본 20, 최대 100), `page`, `sort`

**상세 조회**: `ID` (필수)

## 유틸리티 스크립트

### 단일 API 테스트
```bash
python scripts/test_api.py law "개인정보보호법"
```

### 전체 API 회귀 테스트
```bash
# 모든 API 테스트
python scripts/test_regression.py

# 특정 카테고리만 테스트
python scripts/test_regression.py --category 법령
python scripts/test_regression.py --category 판례

# 상세 출력
python scripts/test_regression.py --verbose
```

### 도구 구현 완성도 체크
```bash
python scripts/test_tool_coverage.py
```
API 가이드의 API 목록과 실제 구현된 도구를 비교하여 미구현/불일치 항목을 확인합니다.

## 주의사항

1. **OC 값 자동 처리**: `LegislationClient`가 환경변수에서 자동 추가
2. **target 값 확인**: 잘못된 target은 빈 결과 반환
3. **타임아웃**: 기본 30초, `REQUEST_TIMEOUT` 환경변수로 변경 가능

## 도구 결과가 잘못된 경우 - 공식 가이드에서 직접 검증

도구가 예상과 다른 결과를 반환하거나 오류가 발생할 경우, 
**반드시 공식 가이드에서 샘플 URL을 직접 테스트**하여 API 동작을 확인해야 합니다.

> ⚠️ **중요**: 공식 가이드에 있는 모든 API는 정상 동작하는 것으로 간주합니다.
> "지원/미지원" 표현 대신 데이터 건수 확인 및 파라미터 조정으로 대응합니다.

### 검증 절차 (Step by Step)

#### Step 1: 공식 가이드 접속
- **URL**: https://open.law.go.kr/LSO/openApi/guideList.do
- 좌측 메뉴에서 API 카테고리 확인 가능

#### Step 2: 해당 API 찾기 및 선택
1. 좌측 메뉴에서 카테고리 확장 (예: "중앙부처해석", "특별행정심판")
2. 해당 부처/기관 클릭
3. "목록 조회" 또는 "본문 조회" 링크 클릭하여 상세 페이지로 이동

#### Step 3: 샘플 URL 직접 클릭하여 테스트
가이드 상세 페이지에는 보통 다음과 같은 샘플 URL이 있습니다:
- **JSON 검색**: `...lawSearch.do?OC=test&target=XXX&type=JSON...`
- **XML 검색**: `...lawSearch.do?OC=test&target=XXX&type=XML...`
- **HTML 검색**: `...lawSearch.do?OC=test&target=XXX&type=HTML...`

**직접 클릭**하여 브라우저에서 응답 확인:
- ✅ JSON 객체가 보이면 정상
- ✅ `totalCnt` 값 확인 (데이터 건수)
- ❌ 404 오류 → target 값 확인 필요
- ❌ 빈 응답 → 검색어/파라미터 확인

#### Step 4: target 값 추출 및 코드에 적용
샘플 URL에서 `target=XXX` 부분을 확인하여 코드에 적용:
```
# 샘플 URL 예시
http://www.law.go.kr/DRF/lawSearch.do?OC=test&target=moeCgmExpc&type=JSON&ID=411648
                                               ^^^^^^^^^^^
                                               이 값이 target

# 코드에 적용
data = _make_legislation_request("moeCgmExpc", params)
```

#### Step 5: 응답 구조 확인 및 파싱 로직 점검
응답 JSON의 루트 키와 데이터 리스트 키를 확인:
```json
{
  "CgmExpcSearch": {       // 루트 키
    "totalCnt": "123",
    "CgmExpc": [...]       // 데이터 리스트 키
  }
}
```

### 최근 검증된 target 값들 (2026-01-21)

| 카테고리 | target | 기관/부처 | 검증 방법 |
|---------|--------|----------|----------|
| 중앙부처해석 | `kostatCgmExpc` | 국가데이터처 | 공식 가이드 직접 확인 |
| 중앙부처해석 | `kipoCgmExpc` | 지식재산처 | 공식 가이드 직접 확인 |
| 중앙부처해석 | `naaccCgmExpc` | 행정중심복합도시건설청 | 공식 가이드 직접 확인 |
| 특별행정심판 | `acrSpecialDecc` | 국민권익위원회 | 공식 가이드 직접 확인 |
| 특별행정심판 | `adapSpecialDecc` | 인사혁신처 소청심사 | 공식 가이드 직접 확인 |

### 샘플 URL 예시 (공식 가이드에서 확인 가능)

```
# 중앙부처해석 (기획재정부)
http://www.law.go.kr/DRF/lawSearch.do?OC=test&target=moefCgmExpc&type=JSON&query=조세

# 중앙부처해석 (교육부) - ID 직접 조회
http://www.law.go.kr/DRF/lawService.do?OC=test&target=moeCgmExpc&ID=411648&type=JSON

# 특별행정심판 (조세심판원)
http://www.law.go.kr/DRF/lawSearch.do?OC=test&target=ttSpecialDecc&type=JSON

# 특별행정심판 (국민권익위원회)
http://www.law.go.kr/DRF/lawSearch.do?OC=test&target=acrSpecialDecc&type=JSON

# 법령 검색
http://www.law.go.kr/DRF/lawSearch.do?OC=test&target=law&type=JSON&query=개인정보보호법
```

### 체크포인트

- [ ] 공식 가이드의 target 값과 코드의 target 값이 일치하는가?
- [ ] 필수 파라미터(OC, target, type)가 올바르게 전달되는가?
- [ ] 브라우저에서 샘플 URL 호출 시 정상 응답이 오는가?
- [ ] JSON/XML 응답 구조가 코드의 파싱 로직과 일치하는가?
- [ ] `Referer: https://open.law.go.kr/` 헤더가 코드에 포함되어 있는가?

### Troubleshooting

| 증상 | 원인 | 해결 |
|-----|-----|-----|
| 404 Not Found | target 값 오류 | 공식 가이드에서 정확한 target 확인 |
| 빈 응답 (totalCnt: 0) | 검색어/파라미터 문제 | 다른 검색어 시도 또는 query 없이 호출 |
| JSON 파싱 오류 | HTML 응답 반환됨 | `type=JSON` 파라미터 확인 |
| 권한 오류 | Referer 헤더 누락 | client.py에 Referer 헤더 추가 |

## API 정보 추출 도구

### 크롤러 (Playwright 기반)
```bash
# 공식 가이드에서 API 정보 크롤링
python src/mcp_kr_legislation/utils/api_crawler.py
```
- Playwright로 JavaScript 동적 페이지 처리
- 구분별 JSON 파일 자동 생성

### Markdown → JSON 변환
```bash
# 기존 Markdown 파일을 JSON으로 변환
python src/mcp_kr_legislation/utils/api_md_to_json.py [input_file]
```

## 관련 파일

- [src/mcp_kr_legislation/apis/client.py](../../src/mcp_kr_legislation/apis/client.py) - LegislationClient 구현
- [src/mcp_kr_legislation/utils/api_layout/](../../src/mcp_kr_legislation/utils/api_layout/) - API JSON 파일
- [src/mcp_kr_legislation/utils/api_crawler.py](../../src/mcp_kr_legislation/utils/api_crawler.py) - API 크롤러
- [docs/api-master-guide.md](../../docs/api-master-guide.md) - 전체 API 가이드

Files in this skill

  • SKILL.md10.2 KB
  • TOOL_CHECKLIST.md23.6 KB
  • scripts/test_all_tools.py26.4 KB
  • scripts/test_api.py2.8 KB
  • scripts/test_cases.py15.9 KB
  • scripts/test_live_api.py12.6 KB
  • scripts/test_regression.py7.4 KB
  • scripts/test_tool_coverage.py9.4 KB
  • targets.md2.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…