{
  "markdown": "# korean-firefighter-law-mcp\n\n> v0.8.0 · 소방기관 검토·시범운영용 · 공개 저장소 (MIT)\n>\n> 기관 도입 전 검토·시범운영을 전제로 공개합니다. 운영 승인 전 확인이 필요한 항목은\n> [기준.md 6장](기준.md)에 그대로 남겨 두었습니다.\n\n소방청 공공데이터와 법제처 국가법령정보를 조회해 AI가 소방 법령·화재통계·교통사고 구급통계·\n특정소방대상물·소방시설·위험물 질문에 공식 자료를 근거로 답하도록 연결하는 MCP 서버입니다.\n\n이 저장소의 목적은 소방기관이 코드를 직접 검토한 뒤 다음 두 방식 중 기관 환경에 맞는 방식으로\n시범 적용할 수 있게 하는 것입니다. 소방청 또는 법제처의 공식 제품은 아닙니다.\n\n## 도입 방식 두 가지\n\n| 방식 | 사용자 경험 | 기관이 운영할 것 | 안내 문서 |\n|---|---|---|---|\n| **기관 서버형** | 브라우저 채팅 또는 기관 서비스가 API 호출 | 서버 1대, 정부 API 키, 선택한 LLM API 키 | [DEPLOY.md](DEPLOY.md) |\n| **개별 PC 설치형** | PC의 stdio 지원 AI 클라이언트에서 도구 사용 | 각 PC의 프로그램과 정부 API 키 | [LOCAL_SETUP.md](LOCAL_SETUP.md) |\n\n기관 서버형은 `GET /` 웹 채팅, `POST /api/chat`, `POST /mcp`를 제공합니다. 웹 채팅과 `/api/chat`은\nLLM이 질문을 공식 API 호출 계획(1~4건)으로 바꾸고 조회 자료로 답변을 작성하므로 LLM 설정이\n필수입니다. LLM이 없으면 챗봇은 503으로 비활성화되고 `/mcp`만 동작합니다. 답변은 조회 자료에 있는\n내용만으로 구조화된 존댓말로 작성되며 주장·수치 문장에 근거 자료 번호(`[자료 N]`)를 인용합니다(서버가\n인용 유효성 검증). 자료가 부족하면 1라운드에 한해 스스로 추가 조회하고, 그래도 없는 데이터는 공식\n안내처를 권합니다. 공식 조회 원문은 응답의 `sources` 필드로 항상 함께 제공되며 화면에서는 접이식으로\n표시됩니다.\n\n개별 PC 설치형은 중앙 서버와 별도 LLM API 키가 필요 없습니다. 연결한 AI 클라이언트가 답변을 만들고 이\n프로그램은 stdio MCP 도구로 공식 API를 조회합니다. ChatGPT는 로컬 MCP 서버에 직접 연결하지 않으므로\nChatGPT를 사용할 때는 기관 서버형의 원격 MCP 또는 웹/API 방식을 검토해야 합니다.\n\n### 설치 방법 두 가지\n\n이 프로그램은 npm에 게시되어 있어 내려받기·빌드 없이 바로 실행할 수 있습니다.\n\n```bash\nnpx korean-firefighter-law-mcp\n```\n\nAI 클라이언트의 MCP 설정에도 같은 방식으로 등록합니다. 경로를 지정할 필요가 없습니다.\n\n```json\n{\n  \"mcpServers\": {\n    \"firefighter-law\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"korean-firefighter-law-mcp\"],\n      \"env\": {\n        \"DATA_GO_KR_KEY\": \"발급받은 키\",\n        \"LAW_OC\": \"발급받은 OC\"\n      }\n    }\n  }\n}\n```\n\n코드를 직접 검토하거나 수정해서 운영하려면 저장소를 내려받아 빌드합니다. 기관 심사·내부 배포에는\n이 방식을 권합니다. 절차는 [LOCAL_SETUP.md](LOCAL_SETUP.md)와 [DEPLOY.md](DEPLOY.md)에 있습니다.\n\n[MCP 공식 레지스트리](https://registry.modelcontextprotocol.io)에는\n`io.github.ssd7830-cmyk/korean-firefighter-law-mcp`로 등재되어 있습니다.\n\n## 제공 도구 11개\n\n| 도구 | 범위 | 공식 데이터 출처 |\n|---|---|---|\n| `search_fire_stats` | 날짜별 화재 접수·진행·오인·자체진화 현황 | 소방청 화재정보서비스 |\n| `get_ems_stats` | 시도본부·소방서별 **교통사고** 구급활동 통계 | 소방청 구급통계서비스 |\n| `search_fire_building` | 시도·건물명·사용승인연도별 특정소방대상물 검색 | 소방청 특정소방대상물정보 |\n| `get_building_facilities` | 특정소방대상물의 소방시설 현황 | 소방청 소방시설정보 |\n| `search_fire_law` | 소방 관계 법령 이름·본문 검색 | 법제처 국가법령정보 |\n| `get_fire_law_text` | 법령 조문 전문 조회 | 법제처 국가법령정보 |\n| `get_fire_law_annex` | 시행령 등 법령 별표 원문·키워드 조회 | 법제처 국가법령정보 |\n| `search_fire_precedents` | 소방 관련 판례 검색 | 법제처 국가법령정보 |\n| `search_fire_admin_rules` | 행정규칙·화재안전기준(NFPC·NFTC) 검색 | 법제처 국가법령정보 |\n| `get_fire_admin_rule_text` | NFPC·NFTC 행정규칙 원문·절 조회 | 법제처 국가법령정보 |\n| `search_hazmat` | 물질명·CAS·UN번호별 위험물 정보 | 소방청 국가위험물정보 |\n\n법령 약칭(화재예방법·소방시설법·위험물법·119법 등)을 정식 명칭으로 바꾸며, 법령·행정규칙 이름\n검색이 0건이면 본문 검색으로 전환합니다. 본문 검색은 전량(최대 100건)을 받아 소방·건축 소관\n관련도순으로 재정렬해 표시하고, 총 건수 대비 표시 건수를 명시합니다.\n\n## 빠른 코드 검증\n\nNode.js 22 이상이 필요하며 새 설치에는 현재 LTS인 Node.js 24를 권장합니다.\n\n```bash\ngit clone https://github.com/ssd7830-cmyk/korean-firefighter-law-mcp.git\ncd korean-firefighter-law-mcp\nnpm ci\nnpm run verify\n```\n\n`verify`는 타입검사, 전체 자동 테스트, 배포 빌드를 차례로 실행합니다. 실제 정부 API 호출은 인증키와\n활용승인이 있어야 하므로 [DEPLOY.md](DEPLOY.md)의 배포 전 실연동 점검을 별도로 수행해야 합니다.\n\n## 필요한 정부 API 키\n\n1. [공공데이터포털](https://www.data.go.kr)에서 다음 5개 API를 활용신청하고 `DATA_GO_KR_KEY`를 설정합니다.\n   [화재정보](https://www.data.go.kr/data/15077644/openapi.do) ·\n   [구급통계](https://www.data.go.kr/data/15099428/openapi.do) ·\n   [특정소방대상물](https://www.data.go.kr/data/15155780/openapi.do) ·\n   [소방시설](https://www.data.go.kr/data/15155779/openapi.do) ·\n   [국가위험물정보](https://www.data.go.kr/data/15061055/openapi.do)\n2. [법제처 국가법령정보 공동활용](https://open.law.go.kr)에서 OPEN API를 신청하고 `LAW_OC`를 설정합니다.\n\n승인 방식, 호출 한도, 유효기간은 바뀔 수 있으므로 저장소의 숫자보다 각 발급 계정과 API 상세 페이지의\n현재 표시를 기준으로 합니다.\n\n## 안전 설계와 운영상 주의\n\n- 조회 자료 없이 LLM이 답을 생성하는 경로를 두지 않습니다. 조회 실패 시 오류 또는 조회 원문을 표시합니다.\n- 서버는 기본적으로 `127.0.0.1`에만 열리고, 외부 주소 바인딩은 접속 토큰 없이는 시작을 거부합니다.\n- API 키는 환경변수 또는 HTTPS 요청 헤더로만 받고, 애플리케이션 오류의 키 값은 마스킹합니다.\n- 데이터베이스를 배포하지 않습니다. 공식 API를 호출하고 항목별 TTL의 인메모리 캐시만 사용합니다.\n- `/mcp`와 `/api/chat`은 운영 시 토큰과 HTTPS로 보호해야 합니다. 자세한 설정은 [DEPLOY.md](DEPLOY.md)에 있습니다.\n- 기관 서버형 챗봇은 사용자 질문과 조회 자료를 선택한 외부 LLM 사업자로 전송합니다. 기관의 개인정보·보안·\n  기록물 정책 검토 전에는 민감정보나 개인정보를 입력하지 않습니다. LLM 사용을 승인하지 않는 기관은 웹\n  챗봇 대신 `/mcp` 원격 도구 또는 개별 PC 설치형(클라이언트 LLM 사용)을 검토합니다.\n- 이 프로그램의 결과는 실무 검토 보조자료입니다. 법적 판단과 현장 안전 판단은 공식 원문·기관 지침과\n  담당자의 검토를 대신하지 않습니다.\n\n보안 구조와 제한은 [ARCHITECTURE.md](ARCHITECTURE.md), 취약점 신고와 운영 기본선은\n[SECURITY.md](SECURITY.md), 변경 의도와 검증 이력은 [기준.md](기준.md), 운영 인계 절차는\n[인수인계.md](인수인계.md)에 기록합니다.\n\n## 현재 검증 상태\n\n- 자동 테스트·타입검사·빌드는 현재 소스에서 재실행합니다. 결과 수는 `npm run verify` 출력이 기준입니다.\n- 검색 재정렬·조문 키워드 추출·추가 조회 라운드·화면 개편의 검증 이력과 12문항 실사용 감사 결과는\n  [기준.md](기준.md) 3-3~3-6에, 남은 개선 순서는 [인수인계.md](인수인계.md) 16장에 기록되어 있습니다.\n- 실제 Gemini·Claude·OpenAI API 호출, Docker 이미지 빌드, ChatGPT/Claude 원격 MCP UI 연결은 현재 환경에서\n  재검증하지 못했습니다. 문서에 완료로 표시하지 않으며 기관 시험 환경에서 확인해야 합니다.\n- 로컬 개발용 `claude-cli`와 `codex-cli` 어댑터가 있지만 개인 로그인을 공유 서버 운영에 사용하지 않습니다.\n- 구급통계는 전체 구급활동이 아니라 **교통사고 구급활동** 범위만 연결되어 있습니다.\n\n## 라이선스\n\n[MIT License](LICENSE). 정부 원천 데이터의 이용조건은 각 제공기관의 현재 조건을 별도로 따릅니다.\n",
  "bytes": 4990,
  "sha": "173a8f25abcab2c78fecb359693e76d987a02438e0a3e953e17697f73103c131",
  "repo_slug": "ssd7830-cmyk/korean-firefighter-law-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ssd7830_cmyk_korean_firefighte_4034e904/readme"
}