Skip to main content
Glama
wjswnsdnjs1

eGov Security MCP Server

by wjswnsdnjs1

eGov Security MCP Server

전자정부프레임워크 보안 공지 수집, 첨부파일 다운로드, PDF 분석, 수정 diff 미리보기, 검증/알림을 제공하는 커스텀 MCP 서버입니다.

도구

  • fetch_latest_security_notice: 보안 공지 페이지를 크롤링하고, 기본적으로 최신 보안 공지 1건의 첨부파일을 모두 다운로드합니다.

  • analyze_vulnerability_context: 다운로드된 PDF를 읽고 취약점 요약, 조치 대상 후보 파일, 승인 전 확인용 diff 미리보기를 생성합니다.

  • verify_and_notify_result: Maven/Gradle 검증을 실행하고 결과를 반환합니다.

  • generate_work_summary_report: 수집, 분석, 검증 결과를 하나의 Markdown 파일로 정리합니다.

소스 수정은 MCP Tool이 직접 수행하지 않습니다. Codex/Claude가 fix_previews를 바탕으로 수정 계획을 보여주고, 사용자가 승인하면 일반 코드 편집 기능으로 프로젝트 파일을 수정하는 구조입니다.

Related MCP server: File Patch MCP Server

설치

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"

실행

egov-security-mcp

또는:

python -m egov_security_mcp.server

Codex/Claude Desktop MCP 예시

{
  "mcpServers": {
    "egov-security": {
      "command": "python",
      "args": ["-m", "egov_security_mcp.server"],
      "cwd": "D:\\workspace\\mcp_custom_prj"
    }
  }
}

fetch_latest_security_notice

{
  "download_dir": "data/notices",
  "notice_query": null,
  "max_downloads": null,
  "max_notices": 1
}
  • notice_query를 지정하면 전자정부프레임워크 공지사항 게시판에서 제목 기준으로 검색합니다.

  • 기본 실행은 최신 보안 공지 1건만 상세 조회합니다.

  • max_notices 기본값은 1입니다. 다건 공지 수집이 필요할 때만 값을 늘리거나 null로 지정합니다.

  • max_downloads를 생략하거나 null로 두면 선택된 공지의 첨부파일을 모두 다운로드합니다.

  • 상세 URL에 nttId만 있으면 서버가 menuNo=74, bbsId=6을 자동 보완합니다.

  • 다운로드 폴더는 download_dir/nttId/공지 제목/ 형식으로 생성합니다.

  • 이미 처리한 공지는 nttId를 기준으로 download_dir/.crawl_state.json에 저장된 상세 페이지 해시와 비교합니다. 변경이 없으면 다운로드를 건너뛰고 skipped_noticesalready_processed_unchanged로 기록합니다.

  • 기존 공지가 수정되면 해시가 달라지므로 다시 첨부파일을 다운로드하고 상태 파일을 갱신합니다.

  • 공지 상세 페이지에 첨부파일이 없으면 다운로드를 시도하지 않고 notice_content_summaries에 게시글 본문 요약을 담아 반환합니다.

다운로드 경로:

data/notices/
└── 1949/
    └── 2026년도 표준프레임워크 템플릿 보안 패치 안내/
        ├── 공통컴포넌트 보안패치 내역.pdf
        ├── MSA-EDU 보안패치 내역.pdf
        └── 심플홈페이지-프론트-백엔드 보안패치 내역.pdf

특정 과거 공지 검색 예시:

fetch_latest_security_notice를 실행해줘.
notice_query는 "2024년도 공통컴포넌트 보안 패치 안내",
download_dir는 data/notices,
max_downloads는 null로 해줘.
max_notices는 1로 해줘.

이미 처리된 공지를 다시 요청했을 때 변경이 없으면 결과는 대략 아래처럼 반환됩니다.

{
  "already_processed_count": 1,
  "skipped_notices": [
    {
      "reason": "already_processed_unchanged",
      "message": "이미 처리된 공지이며 내용 변경이 없어 추가 작업을 건너뜁니다."
    }
  ],
  "downloaded": []
}

첨부파일이 없는 신규/수정 공지는 결과가 대략 아래처럼 반환됩니다.

{
  "notices_without_attachments_count": 1,
  "notice_content_summaries": [
    {
      "reason": "no_attachment_found",
      "message": "첨부파일이 없는 공지라서 다운로드 없이 게시글 본문 요약을 제공합니다.",
      "notice_id": "2000",
      "notice_title": "2026년 1분기 모바일 디바이스 API (Server) 보안 패치 안내",
      "summary": {
        "text_excerpt": "게시글 본문 일부...",
        "important_lines": ["보안 패치 적용 안내입니다."]
      }
    }
  ],
  "downloaded": []
}

analyze_vulnerability_context

다운로드된 PDF를 분석하고, PDF가 없으면 fetch_latest_security_notice가 저장한 게시글 본문 요약을 분석합니다.

분석 결과에는 아래 정보가 포함됩니다.

  • input_source: pdf 또는 notice_page

  • summary: PDF 또는 게시글 본문 핵심 요약, 버전/CVE/KVE/중요 문장 후보

  • target_file_candidates: 프로젝트 내 조치 대상 후보 파일

  • fix_previews: 승인 전 확인용 수정 계획과 unified diff 미리보기

  • diff_preview_report: fix_previews를 사람이 읽기 쉬운 Markdown diff 보고서로 합친 값

PDF가 있는 경우:

방금 다운로드한 보안패치 PDF를 analyze_vulnerability_context로 분석해줘.
취약점 요약, 조치 대상 후보 파일, 그리고 diff_preview_report 원문을 보여줘.
project_dir는 D:\workspace\my-project로 해줘.

PDF가 없는 공지인 경우:

방금 크롤링한 공지에는 PDF 첨부가 없으니 analyze_vulnerability_context로 게시글 본문을 분석해줘.
notice_id는 2000,
download_dir는 data/notices,
project_dir는 D:\workspace\my-project로 해줘.

이 경우 data/notices/.crawl_state.jsonpage_summary 또는 fetch_latest_security_notice 결과의 notice_content_summaries를 사용합니다. 먼저 fetch_latest_security_notice를 실행해야 게시글 본문 요약이 저장됩니다.

현재 diff 미리보기는 확정적으로 판단 가능한 룰부터 제공합니다. 예를 들어 PDF에서 세션/쿠키 보안 설정이 언급되고 프로젝트에 web.xml이 있으면, 아래처럼 <cookie-config>http-onlysecure를 추가하거나 보정하는 diff를 반환합니다.

--- src/main/webapp/WEB-INF/web.xml:before
+++ src/main/webapp/WEB-INF/web.xml:after
@@
 <web-app>
+    <session-config>
+        <cookie-config>
+            <http-only>true</http-only>
+            <secure>true</secure>
+        </cookie-config>
+    </session-config>
 </web-app>

확신이 낮은 파일은 manual_review_required로 표시됩니다. 이 경우 Codex/Claude가 PDF 요약과 파일 내용을 함께 보고 별도 수정 계획을 제안해야 합니다.

EgovFileTool 경로 취약점처럼 tempFolderPath 또는 Globals.fileWebrootPath 사용이 발견되면, Globals.fileStorePath로 바꾸는 중간 신뢰도 diff preview를 생성합니다. 이 preview는 실제 수정이 아니라 승인 전 검토용입니다.

승인 후 수정 흐름

분석 결과와 diff 미리보기 확인했어.
제안한 수정 계획대로 프로젝트 파일을 수정해줘.
수정 후 변경 파일과 diff 요약을 알려줘.

이 단계의 파일 수정은 MCP 서버가 아니라 Codex/Claude의 일반 코드 편집 기능으로 수행됩니다.

verify_and_notify_result

verify_and_notify_result를 실행해서 Maven/Gradle 테스트를 돌리고 결과를 알려줘.
project_dir는 D:\workspace\my-project로 해줘.

Windows에서 MCP 클라이언트가 Maven PATH를 물고 있지 않으면 mvn 대신 mvn.cmd 절대경로를 넘기면 됩니다.

verify_and_notify_result를 실행해줘.
project_dir는 D:\workspace\my-project로 하고,
verify_command는 ["D:\\env\\maven\\apache-maven-3.9.16\\bin\\mvn.cmd", "compile", "-q"]로 해줘.

프로젝트 루트에 mvnw.cmd가 있으면 verify_command를 생략해도 자동으로 Maven Wrapper를 우선 사용합니다.

generate_work_summary_report

수집/분석/검증 결과를 하나의 Markdown 파일로 생성합니다. 이전 Tool 결과를 그대로 넘기면 가장 자세한 보고서가 만들어지고, 결과 객체를 넘기지 않아도 download_dir/.crawl_state.json과 다운로드된 PDF/첨부파일 목록을 기준으로 보고서 내용을 자동 보강합니다.

generate_work_summary_report를 실행해줘.
fetch_latest_security_notice 결과, analyze_vulnerability_context 결과, verify_and_notify_result 결과를 포함해서 정리해줘.

사용자 지정 제목을 적용해서 생성할 때는 아래 값만 넘깁니다. 별도 Markdown 파일을 재가공할 필요가 없으면 source_report_path는 사용하지 않습니다.

{
  "title": "2026년 1분기 모바일 디바이스 API (Server) 보안 패치 작업 결과",
  "output_dir": "data/report",
  "use_custom_output": true,
  "use_custom_title": true,
  "notice_id": "1939"
}

analysis_result를 넘기지 않아도 notice_id 기준으로 data/notices/{notice_id} 아래 PDF를 찾아 취약점 요약, 공식 패치 방법 후보, 첨부파일 목록을 자동으로 채웁니다. 프로젝트 조치 대상 파일까지 함께 채우려면 project_dir를 같이 넘깁니다.

{
  "title": "2026년 1분기 모바일 디바이스 API (Server) 보안 패치 작업 결과",
  "output_dir": "data/report",
  "use_custom_output": true,
  "use_custom_title": true,
  "notice_id": "1939",
  "project_dir": "D:\\mVoting\\workspace"
}

이미 정리된 Markdown 보고서를 재가공해야 할 때만 source_report_path를 넘깁니다. 이 경우 상단 제목/생성일/공지사항 번호/제목은 표준 형식으로 다시 만들고, 기존 Markdown 본문은 그대로 이어 붙입니다.

source_report_path를 사용할 때 보고서 유형 우선순위는 아래와 같습니다.

  1. 20260715_security_patch_report.md처럼 ## 1.부터 ## 10.까지 번호 섹션이 있는 상세 보안 패치 보고서 형식

  2. 1번 형식에 맞지 않으면 egov-security-work-summary_*.md처럼 기존 본문을 보존하는 work-summary fallback 형식

generate_work_summary_report를 실행해줘.
source_report_path는 data/report/20260715/security_patch_report_2025_Q2.md,

기본 보고서 제목은 전자정부 표준프레임워크 보안 패치 결과입니다. 보고서 상단에는 생성일, 공지사항 번호, 제목이 명시됩니다.

일반적인 사용에서는 title, output_dir, output_filename, download_dir를 넘기지 않습니다. download_dir를 생략하면 내부적으로 data/notices를 사용합니다.

클라이언트가 자연어를 해석하면서 title, output_dir, output_filename을 임의로 채워 넣어도 기본값이 우선 적용됩니다. 사용자 지정 제목을 실제로 적용하려면 use_custom_titletrue로 함께 넘기고, 사용자 지정 저장 경로/파일명을 실제로 적용하려면 use_custom_outputtrue로 함께 넘깁니다.

저장 경로는 기본적으로 아래 형식입니다.

data/report/
└── 공지사항번호/
    └── egov-security-work-summary_YYYYMMDDHHMMSS.md

예를 들어 공지사항 번호가 1900이면 아래에 생성됩니다.

data/report/1900/egov-security-work-summary_20260715134100.md

output_filename을 생략하거나 빈 값으로 넘기면 기본 파일명 egov-security-work-summary.md를 사용하고, 실제 저장 시 타임스탬프가 붙습니다.

생성되는 보고서에는 보통 아래 섹션이 포함됩니다.

  • 분석 입력 자료

    1. 취약점 요약

    1. 공식 패치 방법

    1. 패치된 코드

    1. 프로젝트 조치 대상 파일

    1. 변경된 파일 요약

    1. Diff 요약

    1. 문제 원인 및 해결

    1. 보안 효과

    1. Maven 컴파일 검증 결과

    1. 주의사항

반환값 예시:

{
  "report_path": "D:\\workspace\\mcp_custom_prj\\data\\report\\1900\\egov-security-work-summary_20260715134100.md",
  "format": "markdown",
  "notice_id": "1900",
  "notice_title": "2024년도 공통컴포넌트 보안 패치 안내",
  "bytes": 12345
}
F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wjswnsdnjs1/egov_security_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server