Skip to main content
Glama
ssd7830-cmyk

korean-firefighter-law-mcp

by ssd7830-cmyk
README.md
# korean-firefighter-law-mcp

> v0.8.0 · 소방기관 검토·시범운영용 · 공개 저장소 (MIT)
>
> 기관 도입 전 검토·시범운영을 전제로 공개합니다. 운영 승인 전 확인이 필요한 항목은
> [기준.md 6장](기준.md)에 그대로 남겨 두었습니다.

소방청 공공데이터와 법제처 국가법령정보를 조회해 AI가 소방 법령·화재통계·교통사고 구급통계·
특정소방대상물·소방시설·위험물 질문에 공식 자료를 근거로 답하도록 연결하는 MCP 서버입니다.

이 저장소의 목적은 소방기관이 코드를 직접 검토한 뒤 다음 두 방식 중 기관 환경에 맞는 방식으로
시범 적용할 수 있게 하는 것입니다. 소방청 또는 법제처의 공식 제품은 아닙니다.

## 도입 방식 두 가지

| 방식 | 사용자 경험 | 기관이 운영할 것 | 안내 문서 |
|---|---|---|---|
| **기관 서버형** | 브라우저 채팅 또는 기관 서비스가 API 호출 | 서버 1대, 정부 API 키, 선택한 LLM API 키 | [DEPLOY.md](DEPLOY.md) |
| **개별 PC 설치형** | PC의 stdio 지원 AI 클라이언트에서 도구 사용 | 각 PC의 프로그램과 정부 API 키 | [LOCAL_SETUP.md](LOCAL_SETUP.md) |

기관 서버형은 `GET /` 웹 채팅, `POST /api/chat`, `POST /mcp`를 제공합니다. 웹 채팅과 `/api/chat`은
LLM이 질문을 공식 API 호출 계획(1~4건)으로 바꾸고 조회 자료로 답변을 작성하므로 LLM 설정이
필수입니다. LLM이 없으면 챗봇은 503으로 비활성화되고 `/mcp`만 동작합니다. 답변은 조회 자료에 있는
내용만으로 구조화된 존댓말로 작성되며 주장·수치 문장에 근거 자료 번호(`[자료 N]`)를 인용합니다(서버가
인용 유효성 검증). 자료가 부족하면 1라운드에 한해 스스로 추가 조회하고, 그래도 없는 데이터는 공식
안내처를 권합니다. 공식 조회 원문은 응답의 `sources` 필드로 항상 함께 제공되며 화면에서는 접이식으로
표시됩니다.

개별 PC 설치형은 중앙 서버와 별도 LLM API 키가 필요 없습니다. 연결한 AI 클라이언트가 답변을 만들고 이
프로그램은 stdio MCP 도구로 공식 API를 조회합니다. ChatGPT는 로컬 MCP 서버에 직접 연결하지 않으므로
ChatGPT를 사용할 때는 기관 서버형의 원격 MCP 또는 웹/API 방식을 검토해야 합니다.

### 설치 방법 두 가지

이 프로그램은 npm에 게시되어 있어 내려받기·빌드 없이 바로 실행할 수 있습니다.

```bash
npx korean-firefighter-law-mcp
```

AI 클라이언트의 MCP 설정에도 같은 방식으로 등록합니다. 경로를 지정할 필요가 없습니다.

```json
{
  "mcpServers": {
    "firefighter-law": {
      "command": "npx",
      "args": ["-y", "korean-firefighter-law-mcp"],
      "env": {
        "DATA_GO_KR_KEY": "발급받은 키",
        "LAW_OC": "발급받은 OC"
      }
    }
  }
}
```

코드를 직접 검토하거나 수정해서 운영하려면 저장소를 내려받아 빌드합니다. 기관 심사·내부 배포에는
이 방식을 권합니다. 절차는 [LOCAL_SETUP.md](LOCAL_SETUP.md)와 [DEPLOY.md](DEPLOY.md)에 있습니다.

[MCP 공식 레지스트리](https://registry.modelcontextprotocol.io)에는
`io.github.ssd7830-cmyk/korean-firefighter-law-mcp`로 등재되어 있습니다.

## 제공 도구 11개

| 도구 | 범위 | 공식 데이터 출처 |
|---|---|---|
| `search_fire_stats` | 날짜별 화재 접수·진행·오인·자체진화 현황 | 소방청 화재정보서비스 |
| `get_ems_stats` | 시도본부·소방서별 **교통사고** 구급활동 통계 | 소방청 구급통계서비스 |
| `search_fire_building` | 시도·건물명·사용승인연도별 특정소방대상물 검색 | 소방청 특정소방대상물정보 |
| `get_building_facilities` | 특정소방대상물의 소방시설 현황 | 소방청 소방시설정보 |
| `search_fire_law` | 소방 관계 법령 이름·본문 검색 | 법제처 국가법령정보 |
| `get_fire_law_text` | 법령 조문 전문 조회 | 법제처 국가법령정보 |
| `get_fire_law_annex` | 시행령 등 법령 별표 원문·키워드 조회 | 법제처 국가법령정보 |
| `search_fire_precedents` | 소방 관련 판례 검색 | 법제처 국가법령정보 |
| `search_fire_admin_rules` | 행정규칙·화재안전기준(NFPC·NFTC) 검색 | 법제처 국가법령정보 |
| `get_fire_admin_rule_text` | NFPC·NFTC 행정규칙 원문·절 조회 | 법제처 국가법령정보 |
| `search_hazmat` | 물질명·CAS·UN번호별 위험물 정보 | 소방청 국가위험물정보 |

법령 약칭(화재예방법·소방시설법·위험물법·119법 등)을 정식 명칭으로 바꾸며, 법령·행정규칙 이름
검색이 0건이면 본문 검색으로 전환합니다. 본문 검색은 전량(최대 100건)을 받아 소방·건축 소관
관련도순으로 재정렬해 표시하고, 총 건수 대비 표시 건수를 명시합니다.

## 빠른 코드 검증

Node.js 22 이상이 필요하며 새 설치에는 현재 LTS인 Node.js 24를 권장합니다.

```bash
git clone https://github.com/ssd7830-cmyk/korean-firefighter-law-mcp.git
cd korean-firefighter-law-mcp
npm ci
npm run verify
```

`verify`는 타입검사, 전체 자동 테스트, 배포 빌드를 차례로 실행합니다. 실제 정부 API 호출은 인증키와
활용승인이 있어야 하므로 [DEPLOY.md](DEPLOY.md)의 배포 전 실연동 점검을 별도로 수행해야 합니다.

## 필요한 정부 API 키

1. [공공데이터포털](https://www.data.go.kr)에서 다음 5개 API를 활용신청하고 `DATA_GO_KR_KEY`를 설정합니다.
   [화재정보](https://www.data.go.kr/data/15077644/openapi.do) ·
   [구급통계](https://www.data.go.kr/data/15099428/openapi.do) ·
   [특정소방대상물](https://www.data.go.kr/data/15155780/openapi.do) ·
   [소방시설](https://www.data.go.kr/data/15155779/openapi.do) ·
   [국가위험물정보](https://www.data.go.kr/data/15061055/openapi.do)
2. [법제처 국가법령정보 공동활용](https://open.law.go.kr)에서 OPEN API를 신청하고 `LAW_OC`를 설정합니다.

승인 방식, 호출 한도, 유효기간은 바뀔 수 있으므로 저장소의 숫자보다 각 발급 계정과 API 상세 페이지의
현재 표시를 기준으로 합니다.

## 안전 설계와 운영상 주의

- 조회 자료 없이 LLM이 답을 생성하는 경로를 두지 않습니다. 조회 실패 시 오류 또는 조회 원문을 표시합니다.
- 서버는 기본적으로 `127.0.0.1`에만 열리고, 외부 주소 바인딩은 접속 토큰 없이는 시작을 거부합니다.
- API 키는 환경변수 또는 HTTPS 요청 헤더로만 받고, 애플리케이션 오류의 키 값은 마스킹합니다.
- 데이터베이스를 배포하지 않습니다. 공식 API를 호출하고 항목별 TTL의 인메모리 캐시만 사용합니다.
- `/mcp`와 `/api/chat`은 운영 시 토큰과 HTTPS로 보호해야 합니다. 자세한 설정은 [DEPLOY.md](DEPLOY.md)에 있습니다.
- 기관 서버형 챗봇은 사용자 질문과 조회 자료를 선택한 외부 LLM 사업자로 전송합니다. 기관의 개인정보·보안·
  기록물 정책 검토 전에는 민감정보나 개인정보를 입력하지 않습니다. LLM 사용을 승인하지 않는 기관은 웹
  챗봇 대신 `/mcp` 원격 도구 또는 개별 PC 설치형(클라이언트 LLM 사용)을 검토합니다.
- 이 프로그램의 결과는 실무 검토 보조자료입니다. 법적 판단과 현장 안전 판단은 공식 원문·기관 지침과
  담당자의 검토를 대신하지 않습니다.

보안 구조와 제한은 [ARCHITECTURE.md](ARCHITECTURE.md), 취약점 신고와 운영 기본선은
[SECURITY.md](SECURITY.md), 변경 의도와 검증 이력은 [기준.md](기준.md), 운영 인계 절차는
[인수인계.md](인수인계.md)에 기록합니다.

## 현재 검증 상태

- 자동 테스트·타입검사·빌드는 현재 소스에서 재실행합니다. 결과 수는 `npm run verify` 출력이 기준입니다.
- 검색 재정렬·조문 키워드 추출·추가 조회 라운드·화면 개편의 검증 이력과 12문항 실사용 감사 결과는
  [기준.md](기준.md) 3-3~3-6에, 남은 개선 순서는 [인수인계.md](인수인계.md) 16장에 기록되어 있습니다.
- 실제 Gemini·Claude·OpenAI API 호출, Docker 이미지 빌드, ChatGPT/Claude 원격 MCP UI 연결은 현재 환경에서
  재검증하지 못했습니다. 문서에 완료로 표시하지 않으며 기관 시험 환경에서 확인해야 합니다.
- 로컬 개발용 `claude-cli`와 `codex-cli` 어댑터가 있지만 개인 로그인을 공유 서버 운영에 사용하지 않습니다.
- 구급통계는 전체 구급활동이 아니라 **교통사고 구급활동** 범위만 연결되어 있습니다.

## 라이선스

[MIT License](LICENSE). 정부 원천 데이터의 이용조건은 각 제공기관의 현재 조건을 별도로 따릅니다.

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: fire statistics, building search, EMS statistics, building facilities, law search, law text retrieval, and precedent search. Even the two statistics tools (fire vs EMS) and two legal tools (law vs precedent) are clearly separated by subject matter.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern using snake_case (search_* or get_*), making the action and target predictable. The use of 'fire' in most names, though not all, still follows the same structural pattern.

Tool Count5/5

Seven tools is an appropriate size for this domain, covering statistics, building information, and legal research. Each tool serves a distinct function without redundancy.

Completeness4/5

The tool surface covers the main needs of the domain: fire and EMS statistics, building search and facility details, and legal research (law search, law text, precedents). Some minor gaps exist, such as no tool for broader building metadata or emergency response details, but the core workflows are comprehensively supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues