Metadata-Version: 2.5
Name: korean-report-hwpx
Version: 0.3.0
Summary: Korean government documents MCP server — turns a draft into a ministry-format report (개조식 보고서) or press release (보도자료) as HWPX (Hangul). 공무원 공문서 HWPX 생성 MCP
Project-URL: Repository, https://github.com/UpstageAI/korean-report-hwpx
Author: Upstage
License-Expression: MIT
License-File: LICENSE
Keywords: government,hangul,hwp,hwpx,korea,mcp,mcp-server,press-release,report,공문서,보고서,보도자료,한글
Requires-Python: >=3.10
Requires-Dist: mcp>=2.2
Requires-Dist: uvicorn>=0.30
Provides-Extra: test
Requires-Dist: lxml>=5; extra == 'test'
Requires-Dist: pytest>=8; extra == 'test'
Description-Content-Type: text/markdown

# korean-report-hwpx — 한국 공문서 MCP (보고서·보도자료 HWPX)

<!-- mcp-name: io.github.UpstageAI/korean-report-hwpx -->

![데모: 메모 한 장 → 정식·간소화 보고서(HWPX)](https://raw.githubusercontent.com/UpstageAI/korean-report-hwpx/main/docs/demo.gif)

[![PyPI](https://img.shields.io/pypi/v/korean-report-hwpx)](https://pypi.org/project/korean-report-hwpx/) [![MCP Registry](https://img.shields.io/badge/MCP%20Registry-korean--gov--docs-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=korean-report-hwpx) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Built with Upstage Solar Pro 4](https://img.shields.io/badge/Built%20with-Upstage%20Solar%20Pro%204-7A3FF2)](https://www.upstage.ai/) · [English](README-EN.md)

> **0.2.0부터 업스테이지 Solar Pro 4로 개발합니다.** 간소화 모드·마크다운 출력·내부 결재 보고서는 Solar Pro 4(Solar Code CLI)가 코드를 작성하고, Claude가 결과를 검증했습니다.

**공무원 공문서(보고서·보도자료)를 기관 서식 HWPX로.** 쓰고 있는 AI(Claude·ChatGPT 등)가 메모·초안을 공문서 구조로 정리하면, 52개 중앙행정기관의 서식 규칙값으로 한글(HWPX) 파일을 그립니다.

**외부 전송 없음 · API 키 불필요** — 모든 처리는 설치한 컴퓨터 안에서 끝납니다. 원고는 이 서버 밖으로 나가지 않습니다. → [English README](README-EN.md)

---

> "이 내용 공문서처럼 써 줘" 한마디로 개조식 보고서(□ → ㅇ → -) 또는 보도자료를 기관 서식대로 만듭니다. 서식은 정책브리핑 보도자료 2,670건 전수 조사로 정한 규칙값이며, 원본 문서·로고는 포함하지 않습니다.

**이렇게 물어보세요**

- "이 메모를 ○○부 보고서로 만들어 줘"
- "회의 내용 정리한 거야. 공문서처럼 정리해 줘" (기관을 말하지 않으면 공통 서식)
- "이 원고 국세청 보도자료로 만들어 줘 — 보도시점 2026. 10. 8.(목) 조간"
- "아까 만든 보고서 구조에서 Ⅲ장 □ 문장만 바꿔서 다시 만들어 줘"
- "산림청 보고서 서식 규칙(계층별 기호·글꼴·크기) 보여 줘"

**설치 한 줄** — `claude mcp add korean-report-hwpx -- uvx korean-report-hwpx`

## 문서 종류

| 종류 | 구성 | 기관 지정 | 규칙 |
|---|---|---|---|
| **보고서(개조식)** | 제목 상자, 작성일·작성부서 줄(선택), 소제목(Ⅰ. Ⅱ.) → □ → ㅇ → - → *, ※ 참고, 표, 붙임·참고 쪽 | 선택 — 42개 기관 규칙, 그 외·미지정은 공통 규칙 | `rules_report/` (보도자료 참고·붙임 구간 1,326건) |
| **보도자료** | 표지(로고 자리·보도자료), 보도시점·배포, 제목·부제, 본문(문단식/□식), 담당 표, 참고 쪽 | 필수 — 52개 기관 | `rules/`·`templates/` (보도자료 2,670건) |
| **기안문·시행문(별지 제1호서식)** | 두문·본문·결문, 항목 번호(1.→가.→1)→가)→(1)→(가)) 자동, 붙임, "끝." 표시, 결재란(표), 협조자, 시행/접수, 주소·연락처·공개구분 | 기관 지정 없이 공통 서식(rules_official/_공통.json) | `rules_official/_공통.json` (행정업무규정 제7조·시행규칙 제2·4·6조) |

**사용 흐름** — AI에게 "이 메모를 ○○부 보고서로 만들어 줘" → AI가 `get_writing_guide`로 작성 규칙 확인 → 원고를 구조 JSON으로 작성 → `build_document` → 결과의 `warnings`(고칠 점)가 있으면 AI가 고쳐 다시 생성.

문서 종류 판단 기준(가이드에 포함): 언론·국민 대상 발표·배포용이면 보도자료, 내부 보고·계획·검토면 보고서, 행정업무규정 별지 제1호서식 기안문·시행문이 필요하면 official.

## 설치

[uv](https://docs.astral.sh/uv/)가 있으면 설치 없이 바로 실행됩니다.

```json
{
  "mcpServers": {
    "korean-report-hwpx": {
      "command": "uvx",
      "args": ["korean-report-hwpx"]
    }
  }
}
```

Claude Code: `claude mcp add korean-report-hwpx -- uvx korean-report-hwpx`

- API 키·환경변수 필요 없음.
- 만든 파일은 `~/korean-report-hwpx/`에 저장됩니다(`KOREAN_REPORT_HWPX_OUT_DIR`로 변경, 이전 이름 `KOREAN_GOV_DOCS_OUT_DIR`도 인식).

## 도구

| 도구 | 하는 일 |
|---|---|
| `get_writing_guide` | 문서 종류 판단 기준, 작성 규칙(□ 두괄식 한 문장·ㅇ 근거·- 세부, 명사형 종결, 사실·숫자 창작 금지, 기호는 텍스트에 넣지 않음, 참고·붙임 구조, 기안문 항목 번호·날짜·금액·끝 표시·붙임), 구조 JSON 스키마·예시. MCP prompt `writing_guide`로도 제공 |
| `check_structure` | 생성 전 점검: 필수 필드, text 속 기호, 계층 건너뜀, □ 두 문장 이상, 명사형 종결 아닌 문장, 긴 제목, 기안문은 필수 키·to·disclosure 허용값·결재란 drafter/approver 필수·attachments 문자열 목록 검증 |
| `build_document` | 구조 JSON → 기관 서식 HWPX. 입력 정규화(기호·대시·앞 공백 제거) + 고칠 점(`warnings`) 반환. `build_from_structure`는 별칭. 기안문은 `doc_type="official"`, 금액 한글 병기 경고·날짜 정규화 포함 |
| `list_ministries` | 지원 기관과 문서 종류별 지원 여부(보고서: 기관 규칙/공통 규칙, 보도자료: 본문 방식, 기안문: 공통 서식) |
| `get_rules` | 기관·문서 종류별 서식 규칙값(계층별 기호·글꼴·크기·내어쓰기·빈 줄, 제목 상자·표 머리, 기안문은 rules_official/_공통.json) |

### 간소화 모드 (style="simplified")

AI가 읽기 쉬운 보고서 서식(번호 체계 표준화, 서술식 문장, 단순한 표). 항목 기호를 단계별 번호로 자동 부여하고, 제목 상자·표 머리 음영을 없앤 간결한 서식.

**사용법**: `build_document(..., style="simplified")` 또는 `get_writing_guide(..., style="simplified")`로 지정.

**간소화 모드 특징**:
- 항목 기호(□ ㅇ ○ - * ※) 대신 단계별 번호 자동 부여: Ⅰ. Ⅱ. Ⅲ. (소제목) → 1. 2. 3. (대항목) → 가. 나. 다. (중항목) → 1) 2) 3) (소항목) → 가) 나) 다) (세항목)
- 번호는 서버가 구조 JSON의 계층 수준(level)에서 계산하므로 사용자가 직접 번호를 쓰지 않음
- 단계별 들여쓰기 유지
- 서술식 문장 허용 (~합니다·~했다 등 동사형 종결 가능, 명사형 종결 경고 없음)
- 제목 상자(테두리·음영) 없이 일반 제목 문단
- 표 머리 음영 없음
- 표 제목 자동 번호: `〈표 1〉 제목` 형식 (caption에는 제목만 작성)
- 표 셀 병합 금지: 구조에 병합이 있으면 같은 값이 행마다 반복되도록 풀어 씀
- `export_markdown=True`: 같은 구조로 .md 파일 동시 저장 (GFM 표, #, ##, ### 제목 위계)
- 줄 간격 150%, 문단 위 10pt(1수준)·5pt(그 외), 빈 줄 없이 문단 간격으로 구분
- 번호는 글자로 넣음. 한글 '개요' 번호 연동은 다음 버전 예정

### 내부 결재 보고서 (report_kind="internal")

정보공개포털 내부 결재 보고서 실물 표본 측정값 반영: 라벨 칸 없는 제목, 작성일·부서 줄 `'26. 10. 9.(금) / 과·팀명`, 줄 간격 150%, 문단 위 10pt(□)·5pt(ㅇ·-).

**예시**:
```json
{
  "title": "○○ 추진계획(안)", "date": "2026. 10. 7.", "dept": "○○과",
  "body": [
    {"type": "h", "text": "추진 배경"},
    {"type": "l1", "text": "민원 대기 시간 감소를 위해 AI 안내 도입 필요"},
    {"type": "l2", "text": "하루 평균 창구 민원 약 400건"},
    {"type": "caption", "text": "소요 예산"},
    {"type": "table", "rows": [["구분", "금액"], ["시스템 구축", "2억"]]}
  ]
}
```
→ 간소화 모드로 생성 시: `Ⅰ. 추진 배경`, `1. 민원 대기 시간 감소를 위해 AI 안내 도입 필요`, `가. 하루 평균 창구 민원 약 400건`, `〈표 1〉 소요 예산` 형식으로 표시.

보고서 구조 JSON 예:

```json
{
  "title": "○○ 서비스 도입 추진계획(안)", "date": "2026. 10. 7.", "dept": "○○과",
  "body": [{"type": "h", "text": "Ⅰ. 추진 배경"},
           {"type": "l1", "text": "핵심 결론 한 문장임"}, {"type": "l2", "text": "근거·세부"}, {"type": "l3", "text": "소항목"},
           {"type": "note", "text": "각주"}, {"type": "ref", "text": "참고 사항"},
           {"type": "caption", "text": "소요 예산"}, {"type": "table", "rows": [["구분", "금액"], ["가", "100"]]}],
  "appendix": [{"title": "붙임 1", "heading": "세부 내용", "body": [{"type": "l1", "text": "..."}]}]
}
```

보도자료 구조는 `{release, distribute, title, subtitles, body, appendix, contact}`입니다(블록 종류는 같고 문단 `p`·강조 상자 `box`·그림 `image` 추가). 원고에 담당자가 없으면 담당 표를 `○○과 / 김○○ / 044-000-0000` 자리표시로 채웁니다(`placeholder_contact`).

기안문·시행문(별지 제1호서식) 구조는 `doc_type="official"`로 요청합니다. 구조:
```json
{
  "org": "행정안전부",            // 두문 행정기관명(필수). 상급기관 병기는 "국무조정실 ○○위원회"처럼 한 줄
  "to": "수신자 참조",             // 필수. "내부결재" | "○○장관(○○과장)" | "수신자 참조"
  "via": "",                       // 경유(선택). 있으면 "(경유)" 줄에 표시
  "title": "2026년 ○○ 계획 알림",  // 필수
  "body": [                        // 항목 번호(1.→가.→1)→가)→(1)→(가))는 서버가 부여
    {"type": "l1", "text": "..."},
    {"type": "l2", "text": "..."},
    {"type": "l3", "text": "..."},
    {"type": "table", "rows": [[...]]},
    {"type": "lines", "lines": ["..."]}
  ],
  "attachments": ["○○ 계획서 1부.", "○○ 명단 1부."],  // 선택
  "recipients": ["○○부장관", "○○청장"],                // to="수신자 참조"일 때 결문 발신 명의 다음 줄
  "sender": "행정안전부장관",            // 발신 명의(필수)
  "approval": {                          // 결재란(필수: drafter·approver)
    "drafter":   {"title": "주무관", "name": "", "mark": "★"},
    "reviewers": [{"title": "과장", "name": "", "opinion": false}],
    "approver":  {"title": "국장", "name": ""},
    "coordinators": [{"title": "○○과장"}]
  },
  "doc_no": {"issue": "○○과-1234", "issue_date": "2026. 10. 14.", "receive": "", "receive_date": ""},
  "contact": {"zip": "30112", "address": "세종특별자치시 ○○로 00", "homepage": "www.mois.go.kr",
              "phone": "044-000-0000", "fax": "044-000-0001", "email": "○○○@korea.kr", "disclosure": "공개"}
}
```
기안문 항목 번호는 l1→1. / l2→가. / l3→1) / l4→가) / l5→(1) / l6→(가). 같은 계층 안에서 순서대로 증가하고 상위 계층이 바뀌면 하위 번호 초기화(제2조①). 둘째 계층부터 상위 번호 시작 위치에서 2타(한 글자) 오른쪽 들여쓰기. 금액은 `금113,560원(금일십일만삼천오백육십원)`처럼 한글 병기를 붙여야 하며, 없으면 `warnings`에 "금액 한글 병기 필요(시행규칙 제2조②)"가 나옵니다(제2조②). 날짜는 YYYY-MM-DD·YYYY.MM.DD를 YYYY. MM. DD.로 정규화합니다(영 제7조⑤). `disclosure`는 "공개"|"부분공개"|"비공개"만 허용됩니다.

## 지원 기관 (52곳)

| 기관 | 보고서 | 보도자료 | 기관 | 보고서 | 보도자료 |
|---|---|---|---|---|---|
| 개인정보보호위원회 | 기관 규칙 | 문단식 | 법무부 | 기관 규칙 | □식 |
| 경찰청 | 기관 규칙 | 문단식 | 법제처 | 기관 규칙 | 문단식 |
| 고용노동부 | 기관 규칙 | 문단식 | 병무청 | 공통 규칙 | 문단식 |
| 공정거래위원회 | 기관 규칙 | 문단식 | 보건복지부 | 기관 규칙 | 문단식 |
| 과학기술정보통신부 | 기관 규칙 | 문단식 | 산림청 | 기관 규칙 | 문단식 |
| 관세청 | 기관 규칙 | 문단식 | 산업통상부 | 기관 규칙 | 문단식 |
| 교육부 | 기관 규칙 | 문단식 | 새만금개발청 | 공통 규칙 | □식 |
| 국가교육위원회 | 기관 규칙 | 문단식 | 성평등가족부 | 기관 규칙 | □식 |
| 국가데이터처 | 기관 규칙 | □식 | 소방청 | 공통 규칙 | □식 |
| 국가보훈부 | 기관 규칙 | 문단식 | 식품의약품안전처 | 기관 규칙 | 문단식 |
| 국가유산청 | 기관 규칙 | 문단식 | 외교부 | 공통 규칙 | 문단식 |
| 국무조정실 | 기관 규칙 | □식 | 우주항공청 | 기관 규칙 | 문단식 |
| 국민권익위원회 | 기관 규칙 | □식 | 원자력안전위원회 | 공통 규칙 | □식 |
| 국방부 | 기관 규칙 | □식 | 인구전략위원회 | 공통 규칙 | 문단식 |
| 국세청 | 기관 규칙 | □식 | 인사혁신처 | 기관 규칙 | 문단식 |
| 국토교통부 | 기관 규칙 | □식 | 재외동포청 | 공통 규칙 | □식 |
| 금융위원회 | 기관 규칙 | 문단식 | 재정경제부 | 기관 규칙 | 문단식 |
| 기본사회위원회 | 공통 규칙 | □식 | 조달청 | 기관 규칙 | 문단식 |
| 기상청 | 기관 규칙 | 문단식 | 중소벤처기업부 | 기관 규칙 | 문단식 |
| 기획예산처 | 기관 규칙 | 문단식 | 지식재산처 | 기관 규칙 | 문단식 |
| 기후에너지환경부 | 기관 규칙 | 문단식 | 질병관리청 | 기관 규칙 | 문단식 |
| 농림축산식품부 | 기관 규칙 | 문단식 | 통일부 | 공통 규칙 | □식 |
| 농촌진흥청 | 기관 규칙 | 문단식 | 해양경찰청 | 공통 규칙 | □식 |
| 문화체육관광부 | 기관 규칙 | 문단식 | 해양수산부 | 기관 규칙 | 문단식 |
| 방송미디어통신위원회 | 기관 규칙 | 문단식 | 행정안전부 | 기관 규칙 | 문단식 |
| 방위사업청 | 기관 규칙 | 문단식 | 행정중심복합도시건설청 | 기관 규칙 | 문단식 |

보고서: 기관 규칙 = 그 기관 보도자료 참고·붙임 구간 실측값(42곳), 공통 규칙 = 기관 간 최빈값(기관을 지정하지 않으면 기관명 칸은 비움). 보도자료: 문단식 = 기호 없는 기사체 문단 위주, □식 = □ → ㅇ → - 개조식.

## 기관 로고

정부상징·기관 로고는 사용 규정상 이 패키지에 포함하지 않습니다. 소속 기관 담당자가 자기 기관 로고 파일을 지정하세요.

- `logo_path`로 로고 그림 파일을 지정하면 보도자료는 표지의 로고 자리(기관별 크기)에, 보고서는 제목 상자 위에 들어갑니다. 보도자료 슬로건 그림은 `slogan_path`.
- 지정하지 않으면 보도자료 표지에 같은 크기의 「기관 로고」 자리표시가 들어갑니다. 한글에서 글을 지우고 그림을 넣으면 됩니다.

## 데이터 전송 안내

- 모든 처리는 로컬입니다. 이 서버는 외부 API를 부르지 않고, 원고·결과 파일을 어디로도 보내지 않습니다.
- 원고를 구조로 정리하는 일은 사용자가 쓰는 AI가 합니다. 그 AI 서비스의 데이터 정책은 별도로 확인하세요.

## 근거

- 정책브리핑(korea.kr) 보도자료 HWPX **2,670건(52개 중앙행정기관)** 전수 파싱. 보도자료 본문 서식은 2,016건의 문단 35,465개·빈 줄 35,434개·표 칸 32,392개 실측.
- 보고서 서식은 같은 자료 중 「참고·붙임」 보고서형 구간이 있는 **1,326건**(문단 13,757개)에서 기관별로 산출(42개 기관, 3건 이상). 공통 골격(□·-·*·※ 기호, 기호 뒤 1타, 1행 제목 상자, 표 머리 맑은 고딕·가운데·굵게)은 기관 간 90% 이상 일치.
- 공식 기준: 「행정업무의 운영 및 혁신에 관한 규정 시행규칙」의 항목 구분(1. → 가. → 1) → 가) …), 경기도교육청 「한 곳에 정리한 공문서 작성법」(둘째 줄은 항목 첫 글자에 맞춤, 기호 뒤 1타, 하위 항목 2타 들여쓰기 등).
- 실측: 정책브리핑 보도자료 2,670건·52개 기관(보고서 구간 1,326건)에서 기관별 기호·글꼴·빈 줄·표지 표 수치를 산출.
- 규칙 문서: [보도자료 서식 규칙](korean_report_hwpx/refs/보도자료_서식_규칙.md), [보고서 서식 규칙](korean_report_hwpx/refs/보고서_서식_규칙.md). 규칙값: `rules/`, `rules_report/`, 보도자료 표지·담당 표 수치: `templates/`.
- 원자료는 정책브리핑에 공공누리로 공개된 보도자료이며, 이 저장소에는 원본 파일·본문·그림을 포함하지 않고 서식 수치만 담았습니다.

## 유의

- 결과물은 초안입니다. 보고·배포 전 한글에서 확인하세요.
- 줄 끝(마지막 줄 한두 글자 등)은 글자 폭 추정으로 맞추므로 일부 남을 수 있습니다. **macOS + 한컴오피스 한글**이 있으면 `polish=True`로 실제 줄 배치를 받아 문단별 자간을 다시 고릅니다(한글 창이 여러 번 열리고 수 분 걸림).
- 글꼴은 사용하는 컴퓨터에 설치된 글꼴로 표시됩니다(휴먼명조·HY헤드라인M 등 미설치 시 대체 글꼴).
- 기안문·시행문은 `doc_type="official"`로 지원합니다(별지 제1호서식, rules_official/_공통.json). 항목 번호(1.→가.→1)→가)→(1)→(가))는 서버가 부여, 사용자는 번호를 쓰지 않습니다. 날짜는 YYYY-MM-DD·YYYY.MM.DD를 YYYY. MM. DD.로 정규화합니다.

## 라이선스

MIT © 2026 Upstage

Created by Mia(윤승미)
