egovframe-scaffold-mcp
One-line summary: It is an MCP/CLI server that handles the full eGovFrame (전자정부 표준프레임워크) lifecycle — project creation → assembly → 5.x migration → delivery checks → deployment — usable from AI tools (Claude, Cursor, VS Code) or CI command lines.
Create new projects from 22 official templates and assemble common components (190 items), AI RAG layers, CRUD code, and Spring config files.
Apply curated recipes (e.g., board-login) for one-shot template + component setup.
Build, test, and verify projects, parsing compile/test errors to file and line.
Migrate 3.x/4.x projects to 5.x: diagnose, rehearse on a copy, apply auto-replacements, verify, and update 5.x parents.
Reassemble copied common components to a fixed version (v5.0.7), preserving user patches.
Check dependencies against official 5.x baselines, resolving transitive deps and querying OSV vulnerabilities; auto-fix vulnerable/outdated coordinates.
Generate and check SBOMs (CycloneDX 1.6, SPDX 2.3) for NTIA minimum elements, diff versions, and draft VEX.
Run secure-coding checks per KISA/MOIS guide with data-flow analysis, SARIF output, and auto-fixes for XSS/logging/cookies.
Produce A–D readiness assessment reports and consolidated delivery packages with sha256/rootHash manifests and diff vs. previous delivery.
Generate deployment artifacts: Dockerfiles, docker-compose, Kubernetes manifests (including multi-module/MSA).
Generate CI workflows for GitHub Actions, GitLab CI, and Jenkins with supply-chain gates.
Prepare offline bundles for air-gapped environments and diagnose network access.
Diagnose existing projects, generate AGENTS.md, search official docs, prepare/verify databases, and verify app startup.
Generates eGovFrame project scaffolds with a React frontend template, enabling AI agents to set up full-stack projects that include a React-based user interface.
Generates eGovFrame project scaffolds based on Spring Boot REST templates, allowing AI agents to create standard framework projects with configurable database types.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@egovframe-scaffold-mcpcreate an eGovFrame project named my-web-app with groupId org.myorg, using oracle database"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
egovframe-scaffold-mcp
English summary: README.en.md
전자정부 표준프레임워크(eGovFrame) 프로젝트의 생성 → 조립 → 전환 → 납품 점검 → 배포를 AI 도구 안에서, 그리고 빌드 서버의 명령 한 줄로 처리하는 MCP(Model Context Protocol) 서버입니다. Claude Desktop·Claude Code·Cursor·VS Code(Copilot) 등 MCP 를 지원하는 AI 도구에 붙이면 대화로 쓰고, AI 도구가 없는 CI 에서는 같은 패키지를 CLI 로 씁니다.
eGovFramework/egovframe-common-components#1120 제안의 개념 증명(PoC)으로 시작한 커뮤니티 프로젝트입니다. 공식 산출물이 아닙니다.
무엇을 해 주나
새 프로젝트: 공식 Initializr 템플릿 22종으로 프로젝트를 만들고, 공통컴포넌트(v5.0.7, 190항목)·AI RAG 계층·CRUD 코드·Spring 설정 파일을 조립합니다. 그 자리에서 빌드·테스트까지 돌립니다.
3.x/4.x → 5.x 전환: 진단 → 사본 리허설 → 적용 → 컴파일 검증까지 한 흐름입니다. 공식 RTE·공통컴포넌트 저장소에서 만든 규칙(클래스 331종·컴포넌트 1,089종)으로 자동 치환과 수동 작업을 나눕니다. 이미 5.x 인 프로젝트는 최신 5.0.x 로 맞춥니다.
납품 전 점검: 의존성 기준 대조·OSV 취약점, CycloneDX·SPDX SBOM 생성과 점검(최소 요소·비교·VEX), 행안부·KISA 개발보안 가이드 보안약점(SARIF), A–D 등급 전환 준비도 평가서를 냅니다.
배포·CI: Dockerfile·docker-compose·Kubernetes 매니페스트(멀티 모듈·MSA 포함), GitHub Actions·GitLab CI·Jenkins 의 공급망 게이트를 만듭니다. 폐쇄망은 오프라인 번들로 지원합니다.
모든 쓰기 도구는 dryRun 미리보기를 제공하고, 실제 쓰기는 transaction 으로 실패 시 되돌립니다. 규칙과 기준은 코드가 아니라 공식 저장소에서 만든 데이터(catalog/)입니다.
빠른 시작
Node.js 22 이상이 필요합니다. npm 에 배포되어 있어 설치 없이 npx 로 실행합니다.
AI 도구에 연결 — MCP 클라이언트 설정(mcpServers)에 추가합니다. Claude Desktop 은 claude_desktop_config.json, Claude Code 는 claude mcp add egovframe-scaffold -- npx -y egovframe-scaffold-mcp, Cursor 는 .cursor/mcp.json 입니다.
{
"mcpServers": {
"egovframe-scaffold": {
"command": "npx",
"args": ["-y", "egovframe-scaffold-mcp"]
}
}
}연결되면 이렇게 말하면 됩니다.
표준프레임워크로
my-egov-app프로젝트를~/work에 만들어줘. groupId 는egovframework.example, DB 는 mysql. 게시판이랑 로그인 컴포넌트도 넣어서 빌드까지 해 줘.
CLI 로 실행 — AI 도구 없이 프로젝트 디렉터리에서 바로 씁니다.
npx -y egovframe-scaffold-mcp assess --project . --offline=false --out assessment.md # 전환 준비도 평가서
npx -y egovframe-scaffold-mcp check --project . --resolve --offline=false # 의존성·취약점 점검
npx -y egovframe-scaffold-mcp secure --project . --sarif-path egovframe-secure.sarif # 보안약점 점검자주 쓰는 환경 변수 (클라이언트 설정의 env 또는 셸)
변수 | 용도 |
| 도구 설명과 응답 본문(평가서·전환·의존성·SBOM·보안약점·배포·납품 결과의 라벨·헤더·사유)을 영문으로(v1.2). CLI 는 |
| 도구가 읽고 쓸 수 있는 디렉터리 제한(여러 개는 OS 경로 구분자로). 미설정 시 제한 없음 |
| 폐쇄망 오프라인 번들 디렉터리(폐쇄망) |
| 공통컴포넌트 아카이브·태그 미러 캐시 위치(기본 |
| 사내 Maven 미러(Nexus·Artifactory 프록시) URL — 빌드·테스트·SBOM·의존성 트리의 모든 Maven 요청을 이 미러로(v1.6). 표준프레임워크 저장소가 503 을 자주 낼 때 |
| 사내 프록시 뒤에서 다운로드가 타임아웃될 때 |
Related MCP server: AI Code Toolkit
사용 시나리오
AI 도구에서 (개발자)
도구 이름을 몰라도 됩니다. 아래는 대화 예시와, 그때 실제로 쓰이는 도구입니다.
새 프로젝트 만들고 조립하기
"
simple-backend템플릿으로~/work/portal을 만들고, 게시판·로그인·보안 컴포넌트를 넣어 줘. DB 는 postgres."
create_egovframe_project → add_egovframe_components(DDL·DML 포함) → build_egovframe_project. 자주 쓰는 조합은 레시피 하나로도 됩니다: apply_egovframe_recipe(recipeId="board-login", …). AI 챗봇이 필요하면 add_ai_components(Spring AI 또는 LangChain4j), 화면·서비스가 필요하면 generate_egovframe_crud(v1.4 부터 CREATE TABLE 문을 그대로 ddl 로 주고 search 로 목록 검색 조건까지), 데이터소스·캐시·로깅 설정은 generate_egovframe_config 입니다.
3.x/4.x 프로젝트를 5.x 로 옮기기
"
~/legacy/app을 5.x 로 전환하고 싶어. 먼저 얼마나 걸릴지 봐 줘."
migrate_egovframe_project(projectDir)— 읽기 전용 진단. 자동 치환 가능한 항목과 사람이 봐야 할 항목을 나눕니다.rehearse_egovframe_migration(projectDir)— 프로젝트 사본에서 재조립 → 전환 적용 → JDK 17 컴파일 → pom 맞춤 → 컴파일을 실제로 돌려 남는 오류 수를 알려 줍니다. 원본은 건드리지 않습니다.reassemble_egovframe_components(projectDir, apply=true)— 복사해 둔 공통컴포넌트 소스를 v5.0.7 로 바꾸고, 직접 수정한 부분은 패치로 남깁니다.migrate_egovframe_project(projectDir, apply=true, verify=true)— 적용하고 컴파일해 오류를 수동 항목과 연결합니다. 백업과 작업 목록이 남습니다.
이미 5.x 라면 migrate_egovframe_project(target="5.0.2") 가 parent·RTE 버전을 최신 5.0.x 로 맞춥니다. 공식 Initializr 템플릿도 parent 가 5.0.0·5.0.1 로 나오므로 새 프로젝트에도 create_egovframe_project(alignParent=true) 로 같은 갱신을 적용할 수 있습니다.
납품 전에 점검하기
"감리 전에
~/work/portal의 보안약점·SBOM·평가서를 뽑아 줘."
check_egovframe_secure_coding(projectDir, sarifPath="egovframe-secure.sarif")— 개발보안 가이드 보안약점. v1.5 부터 메서드 안 데이터 흐름으로 요청 값이 SQL·파일 경로·명령에 들어가는지 확인해 등급을 올리고, 상수만 쓰는 곳은 내려 오탐 소명 부담을 줄입니다. 공통컴포넌트 원본·수정본·프로젝트 코드로 출처를 나누고,.egovframe-secure-ignore.json으로 검토한 예외를 관리합니다.generate_egovframe_sbom(projectDir, dryRun=false, supplier="○○기관")→check_egovframe_sbom(projectDir, offline=false)— CycloneDX SBOM 을 만들고 제출 최소 요소 7종과 생성 이후 새 취약점을 점검합니다.generate_egovframe_report(projectDir, sections=["assessment"], outputPath="assessment.md")— 전환 난이도·공급망 상태 등급(A–D)과 산식이 들어간 평가서.prepare_egovframe_delivery(projectDir, outputDir="~/delivery/1차", dryRun=false, offline=false, supplier="○○기관")— 위 산출물을 전부 한 디렉터리에 모읍니다(SBOM CycloneDX·SPDX, VEX 초안, SARIF, 배포 산출물 포함). 파일별 sha256 과 전체 지문(rootHash)이 든delivery-manifest.json과 목차가 생기고, 다음 차수에previousDelivery를 주면 달라진 점(등급·SBOM·새 취약점·새 보안약점)을diff.md로 냅니다. 받은 쪽은verify=true로 변조·누락을 확인합니다.
배포 산출물 만들기
"이 프로젝트를 컨테이너로 띄울 수 있게 Dockerfile 이랑 compose, 쿠버네티스 매니페스트 만들어 줘."
generate_egovframe_deploy(projectDir, dryRun=false) — Classic war 는 Tomcat, Boot jar 는 Temurin JRE 기반의 비루트 이미지, DB 컨테이너가 붙은 compose, 프로브·리소스 제한이 있는 k8s 매니페스트를 만듭니다. 공식 MSA 템플릿 같은 멀티 모듈은 서비스마다 이미지를 만들고 localhost 참조를 서비스 이름으로 바꿉니다. 폐쇄망이면 imageRegistry 로 사내 레지스트리를 지정합니다.
기존 프로젝트 파악하기
diagnose_egovframe_project 가 빌드 도구·RTE 버전·DbType·설치된 공통컴포넌트를 읽고, generate_agents_md 가 그 결과로 AI 코딩 도구용 AGENTS.md 를 만듭니다. 공식 가이드 문서는 search_egovframe_docs·get_egovframe_guide 로 찾습니다.
CI·DevOps
빌드 서버에 게이트 넣기 — CLI 는 --fail-on 으로 기준을 넘으면 종료 코드 2 를 냅니다.
npx -y egovframe-scaffold-mcp sbom --project . --write --offline=false --supplier "○○기관"
npx -y egovframe-scaffold-mcp sbom-check --project . --fail-on minimum # 제출 최소 요소 미달이면 실패
npx -y egovframe-scaffold-mcp secure --project . --sarif-path egovframe-secure.sarif --fail-on high
npx -y egovframe-scaffold-mcp assess --project . --offline=false --step-summary --fail-on supplyChain:C명령 | 하는 일 |
|
| 전환 준비도 평가서 |
|
| 의존성 점검( |
|
| SBOM 생성( |
|
| 보안약점 점검(SARIF) |
|
| 납품 패키지 생성( |
|
| 전환 진단(읽기 전용) / 사본 리허설 |
|
| 무결성·진단·네트워크 진단·오프라인 번들 |
|
공통 옵션은 --project(기본 현재 디렉터리)·--json(MCP 구조화 출력과 같은 객체)·--out·--step-summary(GitHub Actions 요약)·--fail-on·--lang ko|en(응답 언어, v1.2) 이고, 나머지는 도구 파라미터와 같은 이름(kebab-case)입니다. 종료 코드는 0 통과 · 2 기준 초과 · 3 실행 실패 · 64 사용법 오류입니다.
CI 설정 파일 만들기 — 같은 게이트를 세 플랫폼에 만들어 줍니다.
generate_egovframe_ci(projectDir, platform="github"|"gitlab"|"jenkins", supplyChain=true, secureCoding=true, delivery=true, supplier="○○기관", failOn="supplyChain:C")SBOM → 최소 요소 점검 → 보안약점 → 평가서 순서로 실행하고 보고서·SBOM·SARIF 를 아티팩트로 남깁니다. delivery=true 면 끝에 납품 패키지(egovframe-delivery/)를 만들어 함께 보관합니다. GitHub 는 SARIF 를 code scanning 에 올립니다. 생성 파일은 공식 스키마 검증을 거치고, CI 통합 테스트에서 실제 Jenkins LTS 와 gitlab-ci-local 로 끝까지 실행해 확인합니다. npmRegistry·offlineBundle 로 사내 레지스트리와 폐쇄망 번들을 지정합니다.
폐쇄망에서 쓰기
인터넷 PC 에서 번들을 만들어 옮기면 다운로드와 OSV 조회가 번들에서 이뤄집니다.
npx -y egovframe-scaffold-mcp bundle --output-dir ./egov-bundle --write # ≈110MB
npx -y egovframe-scaffold-mcp bundle --output-dir ./egov-bundle --templates web,boot-web --write # 템플릿 골라 담기
export EGOVFRAME_OFFLINE_BUNDLE=/opt/egov-bundle # 폐쇄망 PC (cmd: setx EGOVFRAME_OFFLINE_BUNDLE D:\egov-bundle)번들에는 OSV Maven 전체 덤프, 공통컴포넌트 v5.0.7 아카이브, Initializr 템플릿 zip, 공식 태그 미러가 sha256 manifest 와 함께 들어갑니다. 파일은 쓸 때마다 manifest 와 대조하고, OSV 스냅숏이 30일(EGOVFRAME_BUNDLE_MAX_AGE_DAYS)을 넘으면 결과에 경고합니다. 컨테이너 기반 이미지는 번들에 없으므로 사내 레지스트리로 반입합니다. 네트워크 문제는 diagnose_egovframe_network(CLI network)가 호스트별 도달 여부와 처방을 냅니다.
감리·PM (결과물 읽기)
산출물 | 어디서 | 읽는 법 |
납품 패키지 |
| 아래 산출물이 한 디렉터리에 들어 있고 |
전환 준비도 평가서 |
| 6절의 전환 난이도(수동 항목·재조립 대상·제거된 API 참조·좌표 세대)와 공급망 상태(기준 미만·취약점·보안 설정) 두 등급. A=문제 없음 … D=사업 계획 필요. 요인별 점수와 구간이 표로 나와 근거를 추적할 수 있습니다 |
SBOM |
| CycloneDX 1.6(기본) 또는 SPDX 2.3. 점검 결과의 "제출 가능/보완 필요"는 NTIA 최소 요소 7종(공급자·구성요소명·버전·고유식별자·의존관계·작성자·생성 시각) 기준입니다. 차수 간 비교( |
보안약점 결과 |
| 개발보안 가이드(2021) 구현단계 항목별 건수와 등급(높음·중간·낮음), 파일·라인·CWE·조치. 공통컴포넌트 원본에서 나온 것은 업그레이드 대상, 수정본·프로젝트 코드는 직접 조치입니다. 패턴 기반 보조 진단이며 공인 진단을 대체하지 않습니다 |
의존성 조치 목록 |
| 공식 5.x parent 기준으로 기준 미만( |
모든 결과는 Markdown(사람용)과 JSON(--json, 구조화 출력)으로 받을 수 있어 감리 양식에 옮기거나 대시보드에 넣을 수 있습니다.
도구 목록 (39종)
파라미터와 동작 상세는 docs/tools.md 에 있습니다.
단계 | 도구 |
생성·조립 |
|
카탈로그·문서 |
|
빌드·진단 |
|
5.x 전환·유지 |
|
납품 점검 |
|
배포·CI·폐쇄망 |
|
MCP 리소스(egovframe://catalog/...)로 카탈로그를 도구 호출 없이 읽을 수 있고, 프롬프트 scaffold_board_login·scaffold_ai_chatbot·scaffold_portal·maintain_existing 이 자주 쓰는 흐름을 안내합니다. 모든 도구에 readOnlyHint·destructiveHint 등 annotations 가 있어 클라이언트가 위험한 도구를 구분합니다.
지원 범위와 제약
공식 자산에 고정됩니다: 공통컴포넌트 v5.0.7, Initializr 템플릿 22종(commit·sha256 고정), RTE 5.0.2 규칙. 표준프레임워크 5.1.0 은 GitHub 태그 없이 저장소에만 배포된 상태라(2026-10) parent 5.1.0 프로젝트의 의존성 판정과
target="5.1.0"갱신만 지원하고, 그 근거는 저장소 sources jar 비교입니다(기본 목표는 5.0.2). 최신 main 의 변화는sync_egovframe_catalog·sync_egovframe_templates로 확인한 뒤 릴리스에서 반영합니다.기존
pom.xml·web.xml의 구조적 병합은 하지 않습니다(프로젝트별 설정 보호). 좌표 탐지와 마커 구간 삽입까지만 합니다.빌드·테스트·리허설·SBOM(Maven 플러그인)은 로컬의 JDK 와 Maven/Gradle(또는 래퍼)을 씁니다.
5.x 전환 적용은 정적 텍스트 치환입니다. 리플렉션·문자열로 만든 클래스명, 프로젝트 밖 라이브러리 안의
javax는 수동 항목으로 남습니다. 자바 패키지 디렉터리 이동은 하지 않습니다.보안약점 점검은 정적 패턴이라 오탐·미탐이 있습니다. 공인 진단 도구의 보조로 쓰세요.
템플릿·컴포넌트를 받을 때
codeload.github.com·raw.githubusercontent.com·media.githubusercontent.com, 빌드에maven.egovframe.go.kr·Maven Central, 취약점 조회에api.osv.dev에 접근합니다. 막혀 있으면 폐쇄망 번들을 쓰세요.
버전 정책
1.0.0 부터 SemVer 2.0 을 따릅니다. 공개 API 는 도구 이름과 입력 파라미터, 구조화 출력 18종의 필드, CLI 명령과 종료 코드, 환경 변수 EGOVFRAME_* 6종, 지원 Node 버전입니다. 이것을 지우거나 호환되지 않게 바꾸면 MAJOR, 더하면 MINOR, 버그 수정·데이터 갱신·문구는 PATCH 입니다. Markdown 응답 문구와 카탈로그 데이터의 내용은 공개 API 가 아니라 PATCH 에서도 바뀔 수 있습니다. 폐기할 파라미터는 옛 이름을 경고와 함께 계속 받다가 다음 MAJOR 에서만 지웁니다(현재: check_egovframe_secure_coding 의 top → topN, 2.0.0 제거). 계약 테스트가 매 릴리스에서 변경 등급과 버전 증가 폭을 맞춰 봅니다. 자세한 기준은 docs/versioning.md 입니다.
문서
문서 | 내용 |
도구 39종 파라미터·동작·예시, MCP 리소스·프롬프트 | |
버전 정책, 공개 API 범위, 폐기 절차 | |
버전별 변경 이력 | |
로컬 개발, 검증 체계, 릴리스 절차, 브랜치 보호 (기여자용) | |
버전별 기획 원문·결과·선행 조사 기록(저장소 문서, npm 패키지에는 넣지 않음) | |
설계 노트 | 응답 영문화·진행 알림 · 납품 패키지 · 전환 · 의존성 점검 · 평가서 · 보안약점 · 배포 · 멀티 모듈·MSA · CLI·CI · 오프라인 번들 · AI 컴포넌트 · CRUD · 설정 생성 · 템플릿 조달 · 카탈로그 동기화 · components 파라미터 |
기여
이슈와 PR 을 환영합니다. 규칙·카탈로그는 데이터이므로 catalog/*.json 과 생성 스크립트(scripts/generate-*.mjs)를 함께 고치고, npm run prepublishOnly 가 통과해야 합니다. 공개 API 를 바꾸면 npm run api-contract:update 로 계약 스냅샷을 갱신해 PR 에 포함합니다. 자세한 절차는 docs/development.md 입니다.
보안 취약점은 공개 이슈 대신 GitHub 비공개 제보(Security → Report a vulnerability)로 알려 주세요 — SECURITY.md.
라이선스
Available Tools
39 toolsadd_ai_componentsAI 계층 조립A
공식 egovframe-ai-rag 샘플 기반 AI RAG 챗봇(문서 업로드→임베딩→하이브리드 검색→LLM 응답)을 기존 Boot 프로젝트에 조립합니다. 소스·설정(application-ai.yml 프로필)·UI·인프라를 복사하고 pom에 누락 의존성만 마커 구간으로 삽입합니다(백업 생성, 제거 시 원복). 기존 파일과 충돌하면 아무것도 쓰지 않고 거부합니다. dryRun=true로 먼저 미리볼 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | egovframe-ai-rag 브랜치/태그 (기본: 카탈로그 기준 브랜치) | |
| stack | Yes | AI 스택: spring-ai(Redis Stack) | langchain4j(PGVector). 상호 배타 | |
| dryRun | No | true면 복사·병합 없이 계획만 미리보기(네트워크 불필요) | |
| includeUi | No | 채팅 UI(chat.html·static) 복사 | |
| projectDir | Yes | 대상 프로젝트 디렉터리(절대경로 권장). egovframe-boot-starter-parent 기반 Boot 프로젝트 | |
| includeInfra | No | docker-compose.ai.yml·Dockerfile.ai·k8s/ai 복사 | |
| includeTests | No | 샘플 테스트 복사 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing real behavioral traits: backups are created, removal restores originals, missing dependencies are inserted only inside marker sections, and any conflict causes a full abort with nothing written. It also notes dryRun needs no network. It does not describe the response/report shape, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the outcome, then the mechanics, then the safety guarantee, then the preview tip. Every sentence carries information, though the parenthetical feature chain makes the first sentence heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, open-world assembly tool the description covers what is copied, what is merged, failure behavior, and the dry-run escape hatch, and annotations already carry the safety profile. What an agent still lacks is the result/report content and any prerequisite checks, but overall it is sufficient to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (stack enum, ref, dryRun, includeUi/includeInfra/includeTests, projectDir) is already documented in the schema. The description reinforces dryRun and the UI/infra copies but adds no new syntax, defaults, or interactions beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource: assembling an official egovframe-ai-rag sample RAG chatbot (upload→embedding→hybrid search→LLM) into an existing Boot project, plus what gets copied (source, config, UI, infra) and the pom edit. It is clearly distinct from the generic add_egovframe_components in scope, but it never names that sibling to make the boundary explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the context ('기존 Boot 프로젝트에 조립', egovframe-boot-starter-parent based) and there is a strong workflow hint to run with dryRun=true first. However, it gives no explicit when-to-use/when-not versus add_egovframe_components or reassemble_egovframe_components, and no stated prerequisites for the target project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_egovframe_components공통컴포넌트 조립A
공통컴포넌트를 골라 기존 프로젝트에 조립합니다. 의존 컴포넌트를 포함해 소스·매퍼·JSP를 복사하고, database 지정 시 DB DDL·DML 스크립트도 복사합니다. 기존 파일과 충돌하면 아무것도 쓰지 않고 거부합니다. dryRun=true로 먼저 미리볼 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | true면 복사 없이 설치 순서·규모만 미리보기(네트워크 불필요) | |
| database | No | DB 스크립트 복사 대상 DB (altibase|cubrid|goldilocks|maria|mysql|oracle|postgres|tibero) | |
| components | Yes | 컴포넌트 id 목록. 예: ["bbs", "login"] | |
| projectDir | Yes | 대상 프로젝트 디렉터리(절대경로 권장). 먼저 create_egovframe_project로 생성 | |
| includeDependencies | No | 의존 컴포넌트 자동 포함 여부 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: dependencies are auto-included, DB DDL/DML scripts are copied only when database is specified, and the write is all-or-nothing — any conflict with existing files aborts the whole operation without writing anything. That atomic-refusal guarantee is the key detail for a non-idempotent write tool and it is stated explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying a distinct fact (what is copied, DB-script condition, conflict policy, preview option), with the core action front-loaded and zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating multi-file install tool with no output schema, the description covers the essential risks: conflict handling, dependency expansion, DB-script side effect and a no-network dry run. The only real gap is the explicit prerequisite chain to create_egovframe_project, which is left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents dryRun, database, components, projectDir and includeDependencies. The description reinforces the semantics (database → DDL/DML copying, dependencies pulled in) but does not add format, ordering or validation detail beyond what the schema gives, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource (공통컴포넌트를 조립) and immediately bounds the scope: copies dependent components' source, mapper and JSP files into an existing project. That scope distinguishes it from create_egovframe_project (scaffolds new projects), remove_egovframe_components and reassemble_egovframe_components without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage guidance is the recommendation to preview with dryRun=true first; there is no explicit statement of when to pick this tool over siblings such as reassemble_egovframe_components or apply_egovframe_recipe. The prerequisite (run create_egovframe_project first) lives in the projectDir schema description rather than in the tool description, so the workflow is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_egovframe_recipe레시피 적용B
레시피 하나를 골라 프로젝트 생성 → 공통컴포넌트(필요 시 AI 계층) 조립까지 순차 실행합니다. dryRun=true로 전체 계획을 먼저 미리볼 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | true면 디스크 변경 없이 전체 계획만 미리보기 | |
| groupId | No | 자바 groupId | egovframework.example |
| database | No | DB 스크립트 대상(미지정 시 레시피 기본값) | |
| recipeId | Yes | list_egovframe_recipes의 id. 예: board-login | |
| outputDir | Yes | 생성할 상위 디렉터리(절대경로 권장) | |
| projectName | Yes | 프로젝트명(artifactId). 소문자·숫자·하이픈 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, so the agent knows this mutates state and is not repeat-safe. The description adds the sequential multi-phase nature and the dryRun safety valve, but never mentions overwrite behavior for an existing outputDir or what happens on partial failure mid-sequence — important for a non-idempotent, open-world writer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the operation and its phases front-loaded before the dryRun tip. The second sentence largely repeats the dryRun parameter description already in the schema, so one clause is slightly redundant, but nothing is verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a multi-phase orchestrator with no output schema, so the description should say what the returned plan/result looks like and how partial failures surface — neither is covered. Combined with the missing overwrite/idempotency context, it is adequate but has clear gaps for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter (including recipeId pointing at list_egovframe_recipes and the dryRun flag) is already documented in-schema; the description's recipe/dryRun mentions restate that. Baseline 3 applies — no extra syntax, format, or cross-parameter interaction is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('레시피 하나를 골라') and spells out the composite job: project creation followed by common-component assembly, optionally with AI layer. That composite scope implicitly separates it from create_egovframe_project / add_egovframe_components, but those siblings are never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The dryRun sentence implies a preview-then-run workflow, which is useful guidance. However there is no explicit statement of when to pick this composite tool over the granular create_egovframe_project + add_egovframe_components path, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_egovframe_project프로젝트 빌드AIdempotent
생성한 eGovFrame 프로젝트를 실제로 빌드(컴파일·테스트·패키지)하고 결과를 구조화해 반환합니다. 빌드도구(maven/gradle)와 래퍼(mvnw/gradlew)를 자동 감지하고, 컴파일·테스트 오류를 파일·라인 단위로 파싱합니다. 원격 저장소 일시 장애(5xx·연결 끊김)는 failureKind=repository-unavailable 로 구분하고 -U 로 다시 실행합니다(retryTransient). dryRun으로 실행 예정 명령만 미리볼 수 있습니다. (생성→검증 루프 완성)
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | 빌드 작업: compile(컴파일만), test(테스트까지), package(패키징, 테스트 생략). 기본 compile | compile |
| dryRun | No | true면 실행 없이 감지된 빌드도구·명령만 반환 | |
| projectDir | Yes | 빌드할 프로젝트 루트 디렉터리(pom.xml 또는 build.gradle 위치, 절대경로 권장) | |
| maxLogLines | No | 반환 로그의 최대 줄 수(마지막 N줄). 기본 200줄 | |
| retryTransient | No | 원격 저장소 일시 장애(503·연결 끊김)로 실패하면 갱신 인자(-U / --refresh-dependencies)를 붙여 다시 실행할 횟수(0–3). 컴파일·테스트 실패는 다시 실행하지 않음. 기본 1 | |
| timeoutSeconds | No | 빌드 타임아웃(초). 초과 시 중단. 기본 300초 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, destructive=false, openWorld=true, and the description adds substantial context beyond them: automatic maven/gradle and mvnw/gradlew detection, file/line error parsing, failureKind=repository-unavailable classification, -U re-execution for transient 5xx/disconnect failures only (not compile/test failures), and dryRun preview. Missing only what the structured result actually contains, e.g. artifact paths or the full error list shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action ('실제로 빌드하고 결과를 구조화해 반환') followed by the valuable behaviors. Four dense sentences with parenthetical asides that all carry content, though the packing makes it slightly heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter build tool with no output schema and open-world network behavior, the description covers tool detection, error parsing, transient-failure handling, timeout and dryRun. What remains thin is the shape of the returned structured result and any environment prerequisites (JDK/toolchain availability).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents goal, dryRun, retryTransient, timeoutSeconds and maxLogLines, establishing a baseline of 3. The description reinforces retryTransient's semantics (only transient repository failures trigger a refresh-argument retry) but adds little that the schema descriptions do not already state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource — actually builds (compiles/tests/packages) a generated eGovFrame project and returns structured results — which is more specific than the create_/validate_ siblings. However it never names or contrasts those siblings, so an agent must infer the boundary with test_egovframe_project and validate_egovframe_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied via '(생성→검증 루프 완성)' and the dryRun preview, indicating it belongs after project creation. There is no explicit when-to-use vs when-not, and no statement of how it differs from the test or validate siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_egovframe_dependencies의존성 점검ARead-onlyIdempotent
프로젝트의 Maven/Gradle 의존성(resolve=true 면 빌드 도구로 해석한 전이 의존성까지, 트리 경로와 선언·해석 버전 차이 포함)을 공식 5.x parent(egovframe-web-config-parent·egovframe-boot-starter-parent)가 관리하는 기준 버전, Spring Boot BOM 전체(spring-boot-dependencies + import 한 단계), RTE 모듈 18종의 전이 의존성과 대조해 기준 충족/기준 미만/parent 관리/전환 대상(3.x·4.x RTE, javax 좌표)/교체 필요(DBCP 1.x·Log4j 1.x·Jackson 1·Ehcache 2 등)/벤더 배포(국내 DBMS·GPKI 등)/기준 없음 으로 분류하고 항목마다 기준 출처(parent 직접·계열·Boot BOM·RTE 전이)를 적으며, 5.x parent 사용 여부와 Java 버전, 보안 설정 존재 여부(sec.security 컴포넌트·CSRF·XSS 필터·보안 헤더·HTTPS 저장소)를 파일·라인 근거와 함께 보고합니다. 기본은 오프라인(동봉 기준 catalog/dependency-baseline.json)이며 offline=false 일 때만 OSV(api.osv.dev)로 알려진 취약점을 조회합니다. 디스크를 변경하지 않습니다. 멀티 모듈 작업공간이면 모듈별로 판정하고(모듈 parent·Gradle 버전 변수·공식 parent BOM) 모듈 요약을 함께 냅니다. parent 5.1.0 프로젝트는 5.1 기준(BOM egovframe-rte-root, GitHub 태그 없이 저장소에 배포된 버전)으로 판정하고, -egov.N 재빌드 좌표는 원 버전으로 비교·OSV 조회합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 출력 형식 | markdown |
| offline | No | true(기본)면 네트워크 없이 기준 대조만, false 면 OSV 취약점 조회 추가 | |
| resolve | No | true 면 빌드 도구(Maven dependency:tree / Gradle dependencies)로 전이 의존성까지 해석해 함께 판정(빌드 도구·저장소 접근 필요, 수십 초) | |
| projectDir | Yes | 점검할 프로젝트 디렉터리(절대경로 권장) | |
| resolveScope | No | resolve 범위: runtime(compile+runtime, 기본) | all(test·provided 포함) | runtime |
| resolveTimeoutMs | No | 해석 명령 타임아웃(ms) |
Output Schema
| Name | Required | Description |
|---|---|---|
| java | Yes | |
| notes | Yes | |
| checks | Yes | |
| parent | Yes | |
| offline | Yes | |
| summary | Yes | |
| baseline | Yes | |
| findings | Yes | |
| osvError | No | |
| workspace | No | |
| projectDir | Yes | |
| resolution | No | |
| buildSystem | Yes | |
| vulnerabilities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: states it does not modify disk, defaults to offline with bundled catalog and only hits api.osv.dev when offline=false, warns resolve needs build tool + repo access and takes tens of seconds, and explains multi-module per-module judging plus the 5.1.0/-egov.N normalization special cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, but it is one enormous run-on sentence packed with parenthetical enumerations, making the special-case rules (5.1.0, -egov.N, 멀티 모듈) hard to extract on a fast read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering the safety profile, an output schema present, and full schema coverage, the description supplies nearly everything needed: scope, offline/online behavior, resolve cost, and multi-module handling. Only sibling disambiguation is left as a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns extra credit for clarifying what resolve actually produces (전이 의존성 + 트리 경로 + 선언·해석 버전 차이) and what offline toggles (OSV 조회), meaning an agent understands the cost/benefit tradeoff before setting them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: Maven/Gradle 의존성을 기준 버전과 대조해 분류·보고. It names concrete baseline sources (공식 5.x parent, Spring Boot BOM, RTE 18종) and output categories (기준 충족/전환 대상/교체 필요 등), which none of the siblings (check_egovframe_sbom, validate_egovframe_project) describe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the content ('프로젝트의 의존성 점검'), and the offline flag hints at when network use is warranted, but the description never states when to pick this over check_egovframe_sbom or check_egovframe_secure_coding, nor any prerequisites beyond resolve's build-tool requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_egovframe_sbomSBOM 점검 (최소 요소·비교·VEX)A
이미 만든 CycloneDX 또는 SPDX 2.x JSON SBOM 을 제출물로서 점검합니다(SBOM 파일은 바꾸지 않음, 형식은 자동 판별). (1) 최소 요소 7종 — 공급자·구성요소명·버전·고유식별자(purl/cpe)·의존관계·작성자·생성 시각(NTIA 최소 요소 = 국내 SW 공급망 보안 가이드라인 핵심 구성요소)을 component 마다 세어 '제출 가능/보완 필요'와 빠진 component 를 보고 (2) 빌드 도구 없이 purl 만으로 기준 판정을 다시 해 생성 당시와 달라진 판정을, offline=false 면 OSV 를 다시 조회해 생성 이후 새로 알려진 취약점을 보고(운영 중 주기 점검) (3) baselinePath(이전 SBOM)를 주면 추가·제거·버전 변경·판정 변화·새 취약점을 비교 (4) vex=true 면(CycloneDX 입력만) CycloneDX VEX 초안(기본 sbom/vex.cdx.json)을 씁니다 — 새 취약점은 analysis.state=in_triage, affects 는 BOM-Link 로 원본 SBOM 참조, 기존 VEX 에 사람이 적은 판단(not_affected·exploitable 등)은 보존하고 새 취약점만 추가합니다(dryRun=true 면 미리보기). 2027년 공공 SBOM 제출 제도화 대비.
| Name | Required | Description | Default |
|---|---|---|---|
| vex | No | true 면 VEX 초안 작성·갱신(판단 보존) | |
| dryRun | No | vex=true 일 때 쓰지 않고 미리보기 | |
| format | No | 응답 형식 | markdown |
| offline | No | false 면 OSV 재조회로 생성 이후 새 취약점 확인 | |
| vexPath | No | VEX 파일(프로젝트 상대 경로) | sbom/vex.cdx.json |
| sbomPath | No | 점검할 SBOM(프로젝트 상대 경로) | sbom/bom.cdx.json |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) | |
| baselinePath | No | 비교할 이전 SBOM(프로젝트 상대 경로) |
Output Schema
| Name | Required | Description |
|---|---|---|
| vex | No | |
| diff | No | |
| notes | Yes | |
| minimum | Yes | |
| recheck | Yes | |
| document | Yes | |
| sbomPath | Yes | |
| projectDir | Yes | |
| absolutePath | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the input SBOM is never modified, format is auto-detected, OSV lookups occur only when offline=false (consistent with openWorldHint=true), and vex=true writes a CycloneDX VEX draft to a stated default path while preserving human-authored judgments. The write path explains the readOnlyHint=false / idempotentHint=false annotations rather than contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core statement, then organized into numbered (1)-(4) modes so each paragraph maps to a capability; almost nothing is redundant. It is nonetheless a very dense single block with heavy parentheticals, which slightly hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Eight parameters, one required, 100% schema coverage, and an output schema exists — so the description need not specify return values, and it doesn't. It covers every mode the parameters enable plus the 2027 submission-framing rationale, leaving no operational gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: it constrains vex to CycloneDX inputs only (not stated in the schema), explains what baselinePath compares (added/removed, version changes, verdict changes, new vulnerabilities), and clarifies dryRun's interaction with vex=true.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('이미 만든 CycloneDX 또는 SPDX 2.x JSON SBOM 을 제출물로서 점검합니다') and enumerates the four distinct check modes so the agent knows exactly what it does. It is clearly differentiated from the sibling generate_egovframe_sbom: this consumes an existing SBOM, it does not produce one ('SBOM 파일은 바꾸지 않음').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions for each mode: baselinePath for regression comparison, offline=false for re-querying OSV during operation, vex=true for drafting VEX, dryRun=true for preview. The 'generation-time vs now' framing tells the agent when this is the right tool. It does not, however, name the alternative sibling (generate_egovframe_sbom) explicitly, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_egovframe_secure_coding보안약점 점검 (개발보안 가이드)AIdempotent
행정안전부·KISA 「소프트웨어 개발보안 가이드」(2021) 구현단계 보안약점 중 정적 패턴으로 오탐을 통제할 수 있는 항목을 소스에서 찾습니다 — SQL 삽입(MyBatis ${…}·iBATIS $…$·JDBC 문자열 연결), 크로스사이트 스크립트(요청 값·EL param/header/cookie 무이스케이프 출력, <c:out escapeXml="false">), 경로 조작, 신뢰되지 않는 URL 자동접속, 운영체제 명령어, XML 외부개체, 취약한 해시·암호, 보안 문맥의 부적절한 난수, 코드·설정의 하드코드된 중요정보, HttpOnly·Secure 없는 쿠키, printStackTrace, 빈 catch, 역직렬화, 남은 디버그 출력. 규칙은 catalog/secure-coding-rules.json 데이터이고 주석은 무시합니다. 항목마다 파일·라인·CWE·등급·조치와 출처(공통컴포넌트 원본·수정본·매니페스트 없음·프로젝트 코드·테스트)를 냅니다. 예외는 .egovframe-secure-ignore.json(사유·검토자 필수), baselinePath(이전 JSON 결과·SARIF)와 비교해 새 항목 표시, format=sarif 또는 sarifPath 로 SARIF 2.1.0(GitHub code scanning 등). v1.5: 메서드 안 데이터 흐름(요청 파라미터·헤더·쿠키·Spring 바인딩 값 → 대입·결합·append → JDBC·파일 경로·OS 명령·리다이렉트)으로 등급을 올리거나 내리고 변수를 거친 미탐을 찾습니다(메서드 간 흐름은 보지 않음). v1.7: HTMLTagFilter 가 등록돼 있으면(요청 값을 엔티티로 저장) c:out escapeXml="false" 를 낮음으로 보고 사유를 적습니다. 고칠 수 있는 항목은 fix_egovframe_secure_coding 으로. 패턴 기반 진단 보조이며 공인 진단을 대체하지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | [deprecated 1.0.0 — topN 을 쓰세요, 2.0.0 에서 제거] Markdown 상세 항목 수 | |
| topN | No | Markdown 상세 항목 수(기본 40) | |
| paths | No | 프로젝트 상대 경로 접두어로 좁히기(예: src/main/java/egovframework/example) | |
| rules | No | 점검할 규칙 id(기본 전체) | |
| format | No | 응답 형식(sarif 는 SARIF 2.1.0 JSON 본문) | markdown |
| dataFlow | No | v1.5: 메서드 안 데이터 흐름 분석 — 요청 값이 SQL·파일 경로·OS 명령·리다이렉트 인자로 들어가면 등급을 올리고(경로를 note·flow·SARIF codeFlows 에), 상수만이면 내리며, 변수를 거친 흐름도 찾음. false 면 v1.4 까지의 패턴 판정만 | |
| overwrite | No | sarifPath 가 있으면 덮어쓰기 | |
| sarifPath | No | SARIF 2.1.0 을 쓸 프로젝트 상대 경로(예: egovframe-secure.sarif) | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) — 읽기만 함 | |
| maxFindings | No | 응답에 담을 최대 항목 수(SARIF 파일에는 전부) | |
| baselinePath | No | 이전 결과(format=json 출력 또는 SARIF, 프로젝트 상대 경로) — 새로 생긴 항목만 표시 | |
| includeTests | No | src/test 도 점검(등급은 낮음으로) |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| sarif | No | |
| byRule | Yes | |
| summary | Yes | |
| baseline | No | |
| byModule | No | |
| byOrigin | Yes | |
| byTarget | Yes | |
| dataFlow | No | |
| findings | Yes | |
| truncated | Yes | |
| disclaimer | Yes | |
| projectDir | Yes | |
| filesScanned | Yes | |
| rulesVersion | Yes | |
| suppressions | Yes | |
| htmlTagFilter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavior well beyond annotations: comments are ignored, exceptions require reason/reviewer via .egovframe-secure-ignore.json, writes SARIF when sarifPath is set (consistent with readOnlyHint=false), and the intra-method-only data-flow limitation is stated explicitly. These operational details are exactly what the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the description is a very dense wall of text with a long inline enumeration of rule categories and version-history notes (v1.5, v1.7) that increase cognitive load. Most content earns its place, but the density hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a 12-parameter tool: output schema and 100% schema coverage handle the return/param surface, and the description covers exceptions, baseline diffing, SARIF export, and analytical limitations. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: the v1.5 paragraph elaborates what dataFlow=true does (raises/lowers grades, finds flows through variables, not inter-method) and explains baselinePath accepts prior JSON or SARIF. Adds value beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (소스에서 찾습니다) and resource (구현단계 보안약점) and enumerates the concrete vulnerability classes it detects (SQL 삽입, XSS, 경로 조작, etc.). It is clearly a static security-pattern scanner, readily distinguished from the sibling fix_egovframe_secure_coding which it explicitly references for remediation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routes fixable findings to fix_egovframe_secure_coding and frames itself as '패턴 기반 진단 보조이며 공인 진단을 대체하지 않습니다', which is a clear scope/limitation caveat. It does not explicitly contrast against other diagnostics like diagnose_egovframe_project, so silent-vs-silent selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_egovframe_project프로젝트 생성A
전자정부 표준프레임워크 공식 템플릿으로 새 프로젝트 골격을 생성합니다. 공식 GitHub 템플릿을 내려받아 projectName/groupId/DB 타입을 적용합니다. dryRun=true로 먼저 미리보기할 수 있습니다. alignParent=true 면 생성 직후 5.x parent·RTE 버전을 최신 5.0.x 로 맞춥니다(공식 Initializr 템플릿은 parent 5.0.0·5.0.1).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | 내려받을 브랜치/태그(미지정 시 템플릿 기본 브랜치). 예: main, v4.3.0 | |
| dryRun | No | true면 디스크에 쓰지 않고 생성 예정 내용만 미리보기 | |
| groupId | Yes | 자바 groupId. 예: egovframework.example | |
| database | No | DB 타입 (템플릿 지원: hsql|mysql|oracle|altibase|tibero) | hsql |
| template | No | 템플릿 종류 | simple-backend |
| outputDir | Yes | 프로젝트를 생성할 상위 디렉터리(절대경로 권장) | |
| alignParent | No | true면 생성 직후 pom 의 5.x parent·RTE 버전을 최신 5.0.x(공식 parent 기준)로 맞춤. 기본 false = 공식 템플릿 그대로(Initializr 템플릿은 parent 5.0.0·5.0.1) | |
| projectName | Yes | 프로젝트명(artifactId). 소문자·숫자·하이픈, 예: my-egov-app |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag a non-read-only, non-idempotent, open-world write; the description adds that it downloads from GitHub (network dependency), writes files under outputDir, that dryRun avoids disk writes, and that alignParent mutates pom versions post-generation. The one gap is what happens when outputDir is non-empty or the name already exists — important for a non-idempotent writer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences of dense, front-loaded content: purpose first, then template mechanics, then dryRun, then alignParent. Slight redundancy between the description and the alignParent schema text, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no return-value description — an agent does not know whether it gets a path, a file list, or a summary. For a disk-writing, network-dependent scaffold generator, the description should also mention prerequisites (network, JDK/Maven) and how an existing outputDir is handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and the schema already explains ref, dryRun, database, template, outputDir and projectName. The description restates the main knobs and adds rationale for alignParent (official templates pin parent 5.0.0/5.0.1), but adds little on ref, template choices, or outputDir constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create a new project skeleton) plus the source of truth: the official eGovFrame GitHub template. That is clearly distinguishable from siblings like add_egovframe_components or upgrade_egovframe_project without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real workflow guidance: preview with dryRun=true first, and use alignParent=true when the generated project must sit on the latest 5.0.x parent/RTE. It does not name an alternative for the case where a project already exists (e.g. upgrade_egovframe_project), so there is no explicit when-not clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_egovframe_network네트워크 진단ARead-onlyIdempotent
이 서버의 도구들이 내려받는 외부 호스트(codeload.github.com·raw.githubusercontent.com·media.githubusercontent.com·maven.egovframe.go.kr·repo1.maven.org·registry.npmjs.org·api.osv.dev)에 DNS 조회와 HEAD 요청을 실제로 보내 접속 가능 여부·소요 시간·실패 종류(DNS·타임아웃·TLS·프록시 인증·거부)를 보고하고, 환경에 맞는 처방(HTTPS_PROXY+NODE_USE_ENV_PROXY=1, NODE_OPTIONS=--dns-result-order=ipv4first, NODE_EXTRA_CA_CERTS)을 bash/cmd/PowerShell 명령으로 안내합니다. 프로젝트 생성·컴포넌트 조립이 타임아웃으로 실패할 때 먼저 실행하세요. 파일을 쓰지 않으며 프로젝트 디렉터리도 필요 없습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| hosts | No | 점검할 호스트(기본: 전부) | |
| format | No | 출력 형식 | markdown |
| timeoutMs | No | 호스트당 제한 시간(ms, 기본 10000) |
Output Schema
| Name | Required | Description |
|---|---|---|
| env | Yes | |
| node | Yes | |
| hosts | Yes | |
| notes | Yes | |
| summary | Yes | |
| platform | Yes | |
| prescriptions | Yes | |
| envProxySupported | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds the key operational fact that it actually sends outbound DNS and HEAD requests to external hosts, plus that it writes no files and needs no project directory. It discloses the failure taxonomy and the concrete remediation it will suggest. It does not say whether failed hosts shorten or abort the sweep, nor how long a full run takes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by the trigger condition and the negative constraints. The long host enumeration and the remediation env-var list duplicate schema content and make the first sentence dense, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description supplies purpose, trigger, side effects, and remediation content. What remains unstated is behavior on partial failure and whether results are actionable when all hosts pass but builds still time out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented and the enums constrain hosts and format. The description repeats the host list and adds no syntax or behavioral detail for hosts/timeoutMs/format beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (diagnose) and a precisely bounded resource: DNS lookups and HEAD requests to a fixed host list, reporting reachability, latency, and failure class. The enumerated hosts and failure taxonomy distinguish it clearly from the sibling diagnose_egovframe_project, which targets project state rather than outbound connectivity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'프로젝트 생성·컴포넌트 조립이 타임아웃으로 실패할 때 먼저 실행하세요' gives an explicit trigger condition and orders it ahead of create_egovframe_project/add_egovframe_components. It also states what is not needed (프로젝트 디렉터리도 필요 없습니다). It stops short of naming when-not-to-use or an explicit alternative for non-network failures.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_egovframe_project프로젝트 진단ARead-onlyIdempotent
기존(스캐폴딩 도구로 만들지 않은 것 포함) 전자정부 표준프레임워크 프로젝트를 스캔해 빌드시스템·RTE 버전·DbType·설치된 공통컴포넌트(카탈로그 pathPrefixes 지문)·설정 문제를 진단합니다. 디스크를 변경하지 않는 읽기 전용입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| projectDir | Yes | 진단할 프로젝트 디렉터리(절대경로 권장) |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | Yes | |
| aiLayer | Yes | |
| database | Yes | |
| dbScripts | Yes | |
| projectDir | Yes | |
| buildSystem | Yes | |
| egovVersion | Yes | |
| hasManifest | Yes | |
| suggestions | Yes | |
| isEgovProject | Yes | |
| detectedComponents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is clear. The description adds that it supports existing non-scaffolded projects, but its read-only statement largely repeats annotations and it provides no additional permission, rate-limit, or side-effect context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the scan/diagnose action and scope. It is dense but has no redundant filler, apart from the read-only statement already covered by annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the single parameter is fully documented in the schema, so the description only needs to explain purpose and scope. It does that well, including the non-scaffolded project case, though it could be stronger by explicitly routing agents away from similar validation or dependency-check tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter, projectDir, and schema description coverage is 100%, with the schema already recommending an absolute path. The description identifies the target as a project but does not add path syntax or format meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: scanning and diagnosing an existing eGovFrame project. It enumerates concrete diagnostic areas (build system, RTE version, DbType, common components, configuration issues) and clarifies that non-scaffolded projects are included, though it does not explicitly distinguish this from validate_egovframe_project or check_egovframe_dependencies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it by specifying existing projects, including ones not created by scaffolding tools, but it gives no explicit when-not guidance and does not name alternatives such as validate_egovframe_project or check_egovframe_dependencies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_egovframe_component컴포넌트 상세ARead-onlyIdempotent
공통컴포넌트 하나의 상세(설명·직접/전이 의존성·이 컴포넌트에 의존하는 컴포넌트·참조 테이블·가이드 문서 링크·설치 명령)를 한 번에 반환합니다. (읽기 전용)
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 컴포넌트 id. 예: bbs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the trailing '(읽기 전용)' is mildly redundant but not contradictory. The real added value is the enumeration of return contents, which matters because there is no output schema; no auth or rate-limit context is provided, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence plus a parenthetical tag, with every clause listing a concrete return element. The redundant '(읽기 전용)' is the only wasted token, preventing a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return value and does so by enumerating its sections. The lone required parameter is fully documented by the schema, and annotations cover safety, so an agent has nearly everything needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and schema description coverage is 100%, with an example ('bbs') already in the schema. The description adds no syntax, format, or lookup guidance beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('반환합니다') and resource ('공통컴포넌트 하나의 상세') and enumerates exactly what the response contains (dependencies, dependents, reference tables, guide links, install command). The word '하나의' (one) implicitly contrasts it with the sibling search_/list_ tools, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The single-component scope implies when to use it versus the list/search siblings, but the description never states the condition ('when you have an id and need full detail') or any exclusions. Usage is left to inference from the name and scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fix_egovframe_dependencies취약 의존성 자동 조치ADestructive
check_egovframe_dependencies 가 찾기만 하던 의존성 문제를 규칙으로 정할 수 있는 만큼 pom.xml(멀티 모듈 포함)에서 고칩니다. 순서: (1) parent 상향 — 공식 parent 5.x 를 target(기본 권장 버전)으로(migrate_egovframe_project target 의 자동 항목), (2) 고정 해제 — parent(또는 Boot BOM)가 관리하는 좌표에 그보다 낮게 적은 을 지워 parent 에 맡김(major 가 다르면 수동), (3) 좌표 교체 — 좌표만 바뀌고 패키지가 같은 것(mysql-connector-java→mysql-connector-j, ojdbc→ojdbc11, xbean→xmlbeans), (4) 취약 버전 상향 — 직접 적은 버전(리터럴 또는 같은 계열 좌표만 쓰는 버전 속성)이 OSV 에 걸리면 모든 권고를 피하는 가장 낮은 같은 major 정식 릴리스로(저장소 maven-metadata 로 실제 배포 버전 확인, major 가 바뀌거나 수정 버전이 없으면 수동). parent 가 관리하는 버전·전이 의존성의 취약점은 고치지 않고 보고합니다. 결과에 선언 좌표 기준 전·후 취약점 수를 적습니다. 기본 dryRun(계획·변경 미리보기), 적용은 파일 트랜잭션(원본은 migration-backup/<시각>-deps-fix-…/)이며 compile 로 확인해 실패하면 모두 되돌립니다. Gradle 은 리터럴 'g:a:v' 의 고정 해제·취약 버전 상향만. 오프라인 번들(EGOVFRAME_OFFLINE_BUNDLE)이 있으면 OSV 를 번들로 판정합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | Markdown 에 보일 조치·수동 항목 수 | |
| kinds | No | 적용할 조치(기본 전부: parent·unpin·coordinate·cve-bump) | |
| dryRun | No | true(기본)면 파일을 쓰지 않고 계획만 | |
| format | No | 응답 형식 | markdown |
| target | No | parent 상향 목표 5.x 버전(기본: 권장 버전) | |
| verify | No | dryRun=false 일 때 compile 로 확인하고 실패하면 되돌림 | |
| offline | No | true 면 OSV 를 조회하지 않음(취약 버전 상향·전후 집계 생략) | |
| timeoutMs | No | compile 제한 시간(기본 600000) | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) |
Output Schema
| Name | Required | Description |
|---|---|---|
| build | No | |
| files | Yes | |
| kinds | Yes | |
| notes | Yes | |
| dryRun | Yes | |
| manual | Yes | |
| target | Yes | |
| actions | Yes | |
| summary | Yes | |
| osvError | No | |
| planPath | No | |
| backupDir | No | |
| projectDir | Yes | |
| rolledBack | No | |
| buildSystem | Yes | |
| vulnerabilities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, openWorld=true, and idempotent=false, and the description adds substantial beyond-annotation context: default dryRun behavior, file-transaction application with backups under migration-backup/<timestamp>-deps-fix-…, compile verification with full rollback on failure, and offline bundle behavior. It also discloses what is intentionally not fixed and how vulnerability counts are reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and the contrast against check_egovframe_dependencies, then structured as a numbered remediation sequence. It is dense and long, but the length is justified by the tool's complexity; minor readability loss comes from packing extensive caveats into a single paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the mutation/destructive nature, nine parameters, full schema coverage, and an output schema, the description is complete enough for an agent to invoke the tool correctly. It covers the remediation workflow, backup and rollback semantics, Gradle limits, manual fallbacks, offline behavior, and what the result reports, without needing to explain return values that the output schema already defines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters and the baseline is 3. The description still adds workflow meaning for several parameters: target as the parent upgrade goal, dryRun as plan-only by default, verify as compile-and-rollback, offline as OSV-skipping, and the four kinds as the ordered remediation categories.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it fixes dependency problems in pom.xml, including multi-module projects, and explicitly contrasts this with check_egovframe_dependencies, which only finds them. An agent can distinguish this tool from the diagnostic sibling without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative check_egovframe_dependencies and defines the selection condition: use that tool to find issues, this tool to fix them. It also states important exclusions and limitations: parent-managed and transitive vulnerabilities are reported but not fixed, Gradle support is limited to literal g:a:v unpin and cve-bump, and major-version changes or missing fix versions are manual.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fix_egovframe_secure_coding보안약점 자동 조치ADestructive
check_egovframe_secure_coding 이 찾은 항목 중 고친 결과를 규칙으로 정할 수 있는 것만 고치고, 나머지는 사유와 함께 수동 항목으로 냅니다. xss-cout-unescaped: 줄바꿈을 로 바꾸는 값은 fn:escapeXml 로 먼저 감싸고, 단순 속성 값은 escapeXml="false" 를 지웁니다(HTML 편집기 값일 수 있는 본문 필드는 수동, HTMLTagFilter 가 등록돼 있으면 요청 값이 엔티티로 저장되므로 ignoreHtmlTagFilter=true 가 아니면 모두 수동). print-stack-trace·debug-code: 클래스의 로거(SLF4J·Commons Logging·Log4j 2/1·Lombok)로 바꿉니다(로거가 없거나 정적 문맥에서 인스턴스 로거면 수동). cookie-flags: Secure·HttpOnly 는 동작을 바꾸므로 제안만. 공통컴포넌트 출처·테스트는 기본 제외(includeComponents·includeTests). 기본 dryRun(바뀔 줄과 재점검 결과), 적용은 파일 트랜잭션(원본은 migration-backup/)이며 재점검이 계획과 다르면(고친 항목만 사라지고 새 항목·다른 규칙 변화가 없어야 함) 적용하지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | Markdown 에 보일 파일·수동 항목 수 | |
| paths | No | 프로젝트 상대 경로 접두어로 좁히기 | |
| rules | No | 조치할 규칙(기본 전체: xss-cout-unescaped·print-stack-trace·debug-code·cookie-flags) | |
| dryRun | No | true(기본)면 파일을 쓰지 않고 계획·재점검만 | |
| format | No | 응답 형식 | markdown |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) | |
| includeTests | No | src/test 도 고침 | |
| includeComponents | No | 공통컴포넌트 출처(매니페스트·egovframework/com 경로)도 고침 — 업그레이드·재조립 때 원본으로 바뀔 수 있음 | |
| ignoreHtmlTagFilter | No | HTMLTagFilter 가 등록돼 있어도 c:out 을 고침(필터를 걷어내고 출력 escape 로 바꿀 때만) |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| notes | Yes | |
| byRule | Yes | |
| dryRun | Yes | |
| manual | Yes | |
| verify | Yes | |
| summary | Yes | |
| planPath | No | |
| backupDir | No | |
| projectDir | Yes | |
| htmlTagFilter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true already declared, the description adds substantial context beyond annotations: which rules are auto-fixed, which are deliberately downgraded to suggestions only (cookie-flags), which are routed to manual (HTML editor body fields, no logger, static context), that originals are preserved in migration-backup/, and that writes use a file transaction. The recheck-gate rule ('고친 항목만 사라지고 새 항목·다른 규칙 변화가 없어야 함') is exactly the kind of safety contract an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core contract, then per-rule behavior, then the dryRun/transaction gate—a logical order with no filler sentences. It is a dense block of semicolon-joined clauses that would scan faster as a short list, which is the only reason it is not a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter destructive fixer, the description covers the decision boundaries (which findings get fixed vs. deferred), the safety model (default dryRun, backup directory, transactional apply, recheck mismatch aborts), and the exclusion policy. An output schema exists, so return-value detail is correctly omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes further by tying parameters to behavior: includeComponents/includeTests are off by default for provenance and test isolation, and ignoreHtmlTagFilter is conditioned on HTMLTagFilter being registered and the intent of switching to output escaping. That explains the concrete consequence of each flag rather than restating its schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('고치고' / auto-remediation of secure-coding findings) and explicitly scopes the work as a subset of what check_egovframe_secure_coding reports, which distinguishes it from that sibling in one clause. An agent knows immediately this is the write-side counterpart of the checker.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Establishes the workflow precondition (run the checker first, then fix only rule-determinable items) and states that remaining findings are emitted as manual items with reasons, which effectively tells the agent when this tool will not do the work. It does not explicitly name an alternative for the unfixable cases, but the manual-item fallback covers the routing need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_agents_mdAGENTS.md 생성ADestructive
프로젝트를 진단해 AI 코딩 도구(Claude Code·Copilot·Cursor 등)용 AGENTS.md 를 생성합니다 — 빌드·테스트 명령(래퍼 감지), RTE 버전과 5.x 전환 상태, DbType, 기본 패키지·설정 디렉터리, 설치 공통컴포넌트(매니페스트 관리 여부), 지켜야 할 규칙(좌표·백업 디렉터리·비밀 정보·의존성 기준), 사용할 수 있는 MCP 도구. 기존 파일은 overwrite=true 가 아니면 거부하고, dryRun=true 면 내용만 돌려줍니다. 한국어(기본)·영어.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | 문서 언어 | ko |
| dryRun | No | true 면 파일을 쓰지 않고 내용만 반환 | |
| fileName | No | 파일명(프로젝트 루트 기준, 기본 AGENTS.md — CLAUDE.md 등으로 바꿀 수 있음) | AGENTS.md |
| overwrite | No | 기존 파일 덮어쓰기(transaction, 실패 시 원복) | |
| projectDir | Yes | 대상 프로젝트 디렉터리(절대경로 권장) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety class is known; the description adds the meaningful detail that existing files are protected behind an explicit overwrite gate and that dryRun is a non-writing preview. That is real added context about what would be destroyed. It does not describe the returned payload shape or failure modes when the project cannot be diagnosed, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, and the em-dash content list is dense information an agent needs rather than filler. The single very long sentence with a nested comma list makes it slightly harder to scan, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what comes back, and it does: file creation gated by overwrite, content-only return under dryRun. Combined with the itemized document contents and language options, an agent has enough to call it correctly. The one gap is that the success return value (written path versus raw content) is only implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents lang, dryRun, fileName, overwrite and projectDir. The description only restates the overwrite and dryRun semantics and notes the Korean default/English option, adding no format or constraint detail (e.g. absolute-path expectation, filename pattern) beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (진단해 ... 생성합니다) and a concrete artifact (AGENTS.md for Claude Code/Copilot/Cursor), then enumerates exactly what the document will contain. That is far beyond a tautology. It stops short of 5 because the '프로젝트를 진단해' framing overlaps with the sibling diagnose_egovframe_project, and the description never states how this differs from that tool's diagnostic output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditional usage rules: an existing file is refused unless overwrite=true, and dryRun=true returns content without writing — both are explicit when/when-not cues an agent can act on. It does not name any alternative tool (e.g. generate_egovframe_report or generate_egovframe_config) or say when to skip this one entirely, so it falls short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_egovframe_ciCI 워크플로 생성A
프로젝트에 CI 설정을 생성합니다 — platform=github(.github/workflows/egovframe-ci.yml, 기본)·gitlab(.gitlab-ci.yml)·jenkins(Jenkinsfile, Declarative). 빌드도구(maven/gradle) 자동 감지, JDK 지정, 빌드·테스트(GitLab 은 JUnit 리포트). supplyChain=true 면 이 서버의 CLI(npx egovframe-scaffold-mcp)로 SBOM 생성 → 최소 요소 7종 점검(sbom-check --fail-on minimum) → 전환 준비도 평가서(failOn 기준, 기본 supplyChain:D)를 돌려 기준을 넘으면 실패하고 보고서·SBOM 을 아티팩트로 남기는 공급망 게이트를 추가합니다(GitHub 은 PR 요약에 등급, GitLab 은 CycloneDX 리포트). npmRegistry(사내 npm 레지스트리)·offlineBundle(러너에서 본 오프라인 번들 경로)은 환경 변수로 넣습니다. Maven 빌드 단계는 원격 저장소 일시 장애(5xx·연결 끊김)일 때만 -U 로 최대 3회 다시 실행하고, mavenMirror 로 사내 미러를 지정할 수 있습니다. dryRun으로 내용만 미리볼 수 있고, 실제 생성 시 기존 파일이 있으면 덮어쓰지 않고 거부합니다. delivery=true 면 게이트 끝에 납품 패키지 단계(deliver --write → egovframe-delivery/)를 더해 아티팩트로 남깁니다.
| Name | Required | Description | Default |
|---|---|---|---|
| jdk | No | JDK 버전 (기본 17, 숫자·점만 허용) | 17 |
| osv | No | 공급망 게이트에서 OSV 취약점 조회(--offline=false) | |
| dryRun | No | true면 파일 생성 없이 내용만 반환 | |
| failOn | No | 공급망 게이트(평가서)의 --fail-on 식 | supplyChain:D |
| delivery | No | v1.1: 게이트 끝에 납품 패키지 단계 추가(deliver --write → egovframe-delivery/ 를 아티팩트로 보관, 실패 항목이 있으면 단계 실패). supplyChain=true 필요 | |
| platform | No | CI 플랫폼: github(GitHub Actions, 기본) | gitlab(.gitlab-ci.yml) | jenkins(Jenkinsfile, Declarative) | github |
| supplier | No | SBOM 공급자(pom <organization><name> 이 없으면 최소 요소 '공급자'가 빠져 게이트가 실패하므로 지정) | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) | |
| mavenMirror | No | v1.6: 사내 Maven 미러 URL(Nexus·Artifactory 프록시). 빌드 단계는 모든 저장소(*)를 이 미러로 보내는 settings 를 -gs 로 쓰고, 게이트의 CLI 단계는 EGOVFRAME_MAVEN_MIRROR 로 받습니다. Maven 빌드에만 적용 | |
| npmRegistry | No | 사내 npm 레지스트리 URL(NPM_CONFIG_REGISTRY 로 설정 — npx 가 이 서버를 받는 곳) | |
| supplyChain | No | true 면 공급망 게이트 추가: SBOM 생성 → 최소 요소 점검(--fail-on minimum) → 전환 준비도 평가서(failOn) → 아티팩트 | |
| secureCoding | No | v0.44: 게이트에 보안약점 점검 단계 추가(secure --fail-on high, SARIF 를 GitHub code scanning 에 업로드·GitLab·Jenkins 는 보관) | |
| offlineBundle | No | 폐쇄망 러너·에이전트에서 본 오프라인 번들 경로(EGOVFRAME_OFFLINE_BUNDLE 로 설정) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly=false, destructive=false, idempotent=false): it discloses that existing files are refused rather than overwritten, that Maven builds retry up to 3 times with -U only on 5xx/connection drops, and that gate failures produce artifacts and a PR grade. These are exactly the side-effect nuances the hints cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and no sentence is pure filler, but the body is a single dense paragraph packing supply-chain, mirror, retry, dryRun and delivery branches together. It would read faster as short labeled clauses; as-is it demands re-reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutating tool with no output schema, the description covers conditional interactions (delivery requires supplyChain), failure semantics, environment-variable plumbing, and overwrite refusal. An agent has enough to invoke it correctly in every mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented; the description largely restates them. It does add a little meaning (npmRegistry/offlineBundle are injected as environment variables, mavenMirror applies only to Maven builds), but this duplicates what the schema descriptions already state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('프로젝트에 CI 설정을 생성합니다') and immediately enumerates the concrete artifacts per platform (.github/workflows/egovframe-ci.yml, .gitlab-ci.yml, Jenkinsfile). An agent can distinguish this from generate_egovframe_deploy or generate_egovframe_config without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: dryRun to preview, supplyChain=true to add the gate, delivery=true requires supplyChain. However, it never names an alternative sibling (e.g. when to prefer generate_egovframe_deploy for delivery vs. the delivery=true flag here), so routing is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_egovframe_configSpring 설정 파일 생성A
공식 eGovFrame Initializr 설정 템플릿(21종, 오프라인 동봉)으로 Spring 설정 파일을 생성합니다 — datasource(DBCP/C3P0/JDBC·JNDI), transaction(datasource/JPA/JTA), cache(Ehcache), logging(log4j2 console/file/rolling/time-rolling/jdbc), scheduling(Quartz job/trigger/scheduler), idGeneration(sequence/table/uuid), property. 형식은 xml(Spring XML)·javaConfig(@Configuration 클래스)·yaml·properties(logging 만). 필드를 생략하면 Initializr 웹뷰 폼과 같은 기본값을 쓰고, 기존 파일이 있으면 덮어쓰지 않고 거부합니다. 템플릿별 필드·기본값·선택지는 리소스 egovframe://catalog/config-templates 에서 확인하거나 dryRun 결과의 context 로 볼 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | true면 파일을 쓰지 않고 내용·경로·컨텍스트만 반환 | |
| fields | No | 템플릿 변수 덮어쓰기 (예: { txtDatasourceName: 'dataSource', rdoType: 'DBCP', txtUrl: 'jdbc:mysql://…', txtConfigPackage: 'kr.go.sample.config' }). 템플릿에 없는 필드는 거부 | |
| format | No | xml | javaConfig | yaml | properties (yaml·properties 는 logging 계열만) | xml |
| configId | Yes | 설정 템플릿 id (예: datasource, transaction-datasource, logging-rolling-file, scheduling-cron-trigger) | |
| fileName | No | 파일명(확장자 제외) 또는 JavaConfig 클래스명. 미지정 시 Initializr 기본값(예: context-datasource, EgovDataSourceConfig) | |
| outputDir | No | 프로젝트 상대 출력 디렉터리. 미지정 시 xml→src/main/resources/egovframework/spring(logging 은 src/main/resources), javaConfig→src/main/java/<패키지> | |
| projectDir | Yes | 대상 프로젝트 디렉터리(절대경로 권장) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write-side flags (readOnly=false, destructive=false, idempotent=false, openWorld=false); the description adds the facts that matter: existing files are not overwritten but rejected, unknown fields are refused, defaults mirror the Initializr web form, and dryRun returns content/path/context without touching disk. That is non-obvious behavior an agent could not infer from the annotations or schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the 21-template scope are front-loaded in the first clause, followed by formats, defaults, and the overwrite policy. The long inline enumeration of template categories is partly redundant with the configId enum, costing some density, but the paragraph is otherwise free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool (21 templates, free-form nested `fields`, four format modes) the description closes the biggest gap by pointing to egovframe://catalog/config-templates and the dryRun context output for discovering per-template variables. With no output schema, the non-dryRun return value (written path, any file list) is left unspecified, which is the remaining hole.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description largely restates what the schema already documents (format availability for yaml/properties limited to logging, default fileName/outputDir behavior, dryRun semantics, field rejection). The genuine additions are the pointer to the catalog resource for per-template field names and the note that omission means Initializr defaults, so it sits just above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (생성) and resource (Spring 설정 파일) and bounds the scope precisely: 21 official Initializr templates, enumerated by category (datasource, transaction, cache, logging, scheduling, idGeneration, property). An agent can immediately tell this apart from siblings like create_egovframe_project or add_egovframe_components, which operate on project/component structure rather than config files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: omitted fields fall back to Initializr web-form defaults, and an existing file causes a refusal rather than an overwrite. It also routes the agent to egovframe://catalog/config-templates or a dryRun 'context' result for template-specific fields. It stops short of naming an alternative tool or stating explicit when-not-to-use conditions beyond the overwrite case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_egovframe_crudCRUD 코드 생성A
eGovFrame Development의 공식 CRUD wizard 입력 체계에 맞춰 VO·Mapper(XML)·Service·Controller·JSP(선택)·JUnit 5 테스트(선택) 골격을 생성합니다. Classic XML과 Boot REST 프로필을 지원하며, 전체 파일 충돌을 먼저 검사해 하나라도 존재하면 아무것도 쓰지 않습니다. v1.4: ddl 에 CREATE TABLE 문을 주면 컬럼·타입·기본키·NOT NULL·자동 증가·COMMENT 를 읽어 필드를 만들고(COMMENT·DEFAULT 안의 콤마·괄호·'primary key' 문구에 속지 않음), search 로 방언 중립 LIKE() 검색과 이스케이프된 검색 필드를 더합니다. v1.8: paging 으로 방언별 목록 페이징(LIMIT/OFFSET 또는 공통컴포넌트와 같은 ROWNUM 감싸기), classic 화면의 PaginationInfo·ui:pagination, boot REST 의 page·size 응답을 더합니다(방언은 dialect 또는 Globals.DbType).
| Name | Required | Description | Default |
|---|---|---|---|
| ddl | No | v1.4: CREATE TABLE 문. 컬럼·타입·PRIMARY KEY·NOT NULL·자동 증가(AUTO_INCREMENT·IDENTITY·SERIAL)·COMMENT(또는 COMMENT ON COLUMN)를 읽어 fields 를 만듭니다. COMMENT·DEFAULT 안의 콤마·괄호와 'primary key' 문구에 속지 않습니다. fields 와 함께 줄 수 없음 | |
| author | No | 공식 wizard의 author | egovframe-scaffold-mcp |
| dryRun | No | true면 파일을 쓰지 않고 생성 계획만 반환 | |
| fields | No | 테이블 컬럼 정의(ddl 과 둘 중 하나) | |
| paging | No | v1.8: 목록 페이징 — 방언별 SQL(MySQL·MariaDB·PostgreSQL·HSQL 은 LIMIT/OFFSET, Oracle·Tibero·Altibase·CUBRID 는 공통컴포넌트와 같은 ROWNUM 감싸기), classic 은 PaginationInfo·<ui:pagination>, boot 는 page·size 와 {content, totalCount, page, size} 응답. 방언은 dialect, 없으면 프로젝트의 Globals.DbType, 그것도 없으면 설정 파일의 JDBC URL(한 방언일 때) | |
| search | No | v1.4: 목록 검색 대상 컬럼(문자열 타입). Mapper 에 방언 중립 LIKE(<bind>)와 searchCondition 분기, classic 화면에 검색 조건·이스케이프된 hidden 필드 | |
| dialect | No | v1.4: ddl 의 DB 방언(oracle·tibero 면 DATE 를 날짜+시각 LocalDateTime 으로). v1.8: paging 의 SQL 방식도 이것으로 정함 | |
| profile | No | classic=Spring MVC+JSP, boot=REST Controller | classic |
| checkWeb | No | 공식 wizard Web 그룹 생성 여부 | |
| pageSize | No | v1.8: paging 의 페이지 목록 크기(기본 10) | |
| pageUnit | No | v1.8: paging 의 한 페이지 행 수(기본 10) | |
| withTest | No | JUnit 5 서비스 계약 테스트 골격 생성 | |
| jspFolder | No | 프로젝트 기준 JSP 폴더 | |
| tableName | No | CRUD 대상 테이블명. 단일 SQL 식별자, 예: SAMPLE_BOARD. ddl 을 주면 생략 가능(주면 DDL 의 테이블명과 같아야 함) | |
| voPackage | No | VO 패키지 | |
| createDate | No | 공식 wizard의 createDate. 미지정 시 오늘 날짜 | |
| entityName | No | 생성 클래스명. 미지정 시 tableName에서 PascalCase로 생성 | |
| includeJsp | No | classic 프로필의 JSP 2종 생성 여부(기본 true) | |
| projectDir | Yes | 대상 프로젝트 디렉터리(절대경로 권장, pom.xml 또는 build.gradle 필요) | |
| basePackage | Yes | 기본 자바 패키지. 예: egovframework.example.board | |
| implPackage | No | ServiceImpl 패키지 | |
| checkService | No | 공식 wizard Service 그룹 생성 여부 | |
| mapperFolder | No | 프로젝트 기준 Mapper XML 폴더 | |
| mapperPackage | No | Mapper 인터페이스 패키지 | |
| servicePackage | No | Service 패키지 | |
| checkDataAccess | No | 공식 wizard DataAccess 그룹 생성 여부 | |
| controllerPackage | No | Controller 패키지 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The standout disclosure is the all-or-nothing conflict pre-check: if any target file exists, nothing is written. That is genuinely non-obvious safety behavior beyond the annotations. It does not address idempotency (annotation says idempotentHint=false) or what happens on partial failures, so it stops short of full behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded correctly, but the body reads as a changelog with 'v1.4:'/'v1.8:' prefixes and repeated restatement of schema descriptions (paging, dialect). Several clauses, especially the nested parenthetical about commas and the 'primary key' string, are hard to parse and partly duplicate parameter docs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 27-parameter generator with no output schema, the description covers what files are produced, profile differences, paging/search feature activation and the conflict-abort contract. The notable gap is that it never describes the return value (file manifest vs dryRun plan), which matters given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: ddl parsing rules (COMMENT/DEFAULT commas, the 'primary key' string trap), dialect-neutral LIKE with bind and escaping for search, and per-dialect paging strategies plus the dialect-resolution fallback chain. That is value beyond the parameter list itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence names a concrete verb (생성합니다) and enumerates the exact artifacts produced (VO, Mapper XML, Service, Controller, JSP, JUnit 5 skeleton) against a named standard (eGovFrame official CRUD wizard input). This is far more specific than any sibling generator (generate_egovframe_config, generate_egovframe_ci, create_egovframe_project), so an agent can route on purpose alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes when this applies (CRUD scaffolding for classic vs boot profiles) and implies the required starting conditions, but never explicitly names an alternative sibling or states when-not-to-use. The ddl-vs-fields mutual exclusion is documented in the schema, not the description, so routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_egovframe_deploy컨테이너·배포 산출물 생성A
프로젝트 진단(빌드 도구·패키징·Boot 여부·웹·actuator·DbType·설정 파일)으로 컨테이너·배포 산출물을 만듭니다 — Dockerfile(멀티 스테이지: Maven/Gradle 빌드 → Classic war 는 Tomcat 10.1(Servlet 6.1 이상이면 11.0)에 ROOT 로 풀어서, Boot jar 는 eclipse-temurin JRE 로; 비루트·HEALTHCHECK·Asia/Seoul·UTF-8, buildInImage=false 면 미리 빌드한 산출물), .dockerignore, deploy/docker-compose.yml(앱 + DbType 별 DB 컨테이너 mysql·mariadb·postgres, 템플릿 DDL·DATA 초기화, 상용 DB 는 연결 정보만), Kubernetes 매니페스트(deploy/k8s/.yaml — Deployment(startup·readiness·liveness 프로브, 비루트 securityContext, 리소스)·Service·ConfigMap·Secret·선택 Ingress). DB 설정은 Boot 는 Spring 환경 변수(Globals.mysql.Url → GLOBALS_MYSQL_URL), Classic 은 globals.properties 사본을 볼륨·Secret 으로 덮어씁니다. imageRegistry 로 기반 이미지를 사내 레지스트리(폐쇄망)에서 받습니다. 새 파일만 쓰고(기존 파일 거부) dryRun(기본)은 내용만 보여 줍니다. 멀티 모듈·라이브러리 jar·빌드 파일 없는 프로젝트는 이유를 돌려줍니다. 멀티 모듈 작업공간(Maven ·Gradle include·루트 빌드 파일 없는 독립 프로젝트 묶음)이면 서비스 모듈마다 이미지(자체 Dockerfile 은 그대로)와 하나의 docker-compose·서비스별 Kubernetes 매니페스트를 만들고, 설정의 localhost 참조(설정 서버·디스커버리·DB·메시지 브로커·캐시)를 서비스 이름으로 바꿉니다(모듈 설정은 환경 변수, 설정 서버 저장소는 사본). modules 로 일부 서비스만 고릅니다.
| Name | Required | Description | Default |
|---|---|---|---|
| jdk | No | JDK(빌드·실행 이미지) | 17 |
| image | No | 앱 이미지 이름(기본 <appName>:<version>) | |
| dryRun | No | true(기본)면 쓰지 않고 내용만 | |
| format | No | 응답 형식 | markdown |
| appName | No | 앱 이름(기본 artifactId) | |
| modules | No | 멀티 모듈 작업공간에서 일부 서비스만(모듈 이름·경로). 그 서비스가 먼저 띄워야 하는 서비스·인프라는 함께 들어감 | |
| targets | No | 만들 산출물(compose 는 Dockerfile 도 함께) | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) | |
| ingressHost | No | Kubernetes Ingress 호스트(주면 Ingress 추가) | |
| buildInImage | No | true: 이미지 안에서 빌드(멀티 스테이지) · false: 미리 빌드한 target/*.war·jar 를 담음(폐쇄망에서 컨테이너 안 Maven 접근이 어려울 때) | |
| imageRegistry | No | 기반 이미지 레지스트리(폐쇄망 사내 레지스트리·프록시 캐시) — Dockerfile ARG BASE_REGISTRY 기본값 | docker.io/library |
| dockerfilePath | No | Dockerfile 경로(프로젝트 상대) — 템플릿에 이미 Dockerfile 이 있으면 deploy/Dockerfile 등 | Dockerfile |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| notes | Yes | |
| usage | Yes | |
| dryRun | Yes | |
| profile | No | |
| written | Yes | |
| supported | Yes | |
| workspace | No | |
| projectDir | Yes | |
| unsupported | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: dryRun is on by default so nothing is written, existing files are refused rather than overwritten, unsupported projects return a reason instead of failing silently, and multi-module mode rewrites localhost references to service names. All of this is consistent with destructiveHint=false and readOnlyHint=false, so there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Virtually all content is useful, but it is delivered as one dense wall of text with deeply nested parentheses, so the multi-module paragraph and the refusal conditions are hard to locate. It would benefit from splitting into purpose / artifacts / edge cases sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter generator with an output schema, the description covers scope, artifact set, DB configuration strategy, air-gapped behavior, dry-run safety, refusal cases, and multi-module semantics — everything needed to invoke it correctly. Return-value details are correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: imageRegistry feeds the Dockerfile ARG BASE_REGISTRY for air-gapped registries, buildInImage switches between multi-stage build and pre-built artifacts, and modules pulls in required dependency services automatically. Only some parameters (format, appName, jdk, ingressHost) are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (생성) and resource (컨테이너·배포 산출물) and then enumerates the exact artifacts produced: Dockerfile, .dockerignore, deploy/docker-compose.yml, deploy/k8s/<app>.yaml. An agent can distinguish this from generate_egovframe_ci or prepare_egovframe_delivery without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: use buildInImage=false when the container cannot reach Maven in an air-gapped network, use imageRegistry for internal registries, use modules to select a subset of services, and it explains what happens for multi-module/library-jar/no-build-file projects. It never names a sibling tool or an explicit when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_egovframe_report프로젝트 리포트 · 전환 준비도 평가서A
프로젝트 리포트를 Markdown(또는 format=json)으로 만듭니다. sections="components"는 설치 공통컴포넌트·참조 테이블·가이드 문서 링크·이슈, sections=["assessment"]는 5.x 전환 준비도 평가서 — (1) 개요(빌드 도구·RTE 세대·parent·Java·공통컴포넌트) (2) 전환 범위(migrate 진단 요약: 자동/수동·종류별·재조립 권고·예상 수동 작업 상위 N) (3) 의존성(기준 판정 집계·조치 목록, resolve=true 면 전이 포함, offline=false 면 OSV 취약점) (4) 보안 설정 점검 (5) SBOM 요약(sbomPath 에 있으면) (6) 등급과 근거 — 전환 난이도·공급망 상태를 각각 A–D 로 매기고 산식(요인·구간·점수)을 리포트에 그대로 적어 사람이 재계산할 수 있게 합니다. 비용·공수는 산정하지 않습니다. outputPath 를 주면 프로젝트 안에 새 파일로만 저장하고(기존 파일 거부, transaction), 그 외에는 디스크를 바꾸지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | assessment: 예상 수동 작업 목록 상위 N | |
| dryRun | No | true 면 outputPath 가 있어도 쓰지 않고 내용만 | |
| format | No | 출력 형식(json 은 assessment 데이터 포함) | markdown |
| offline | No | assessment: true(기본)면 네트워크 없이, false 면 OSV 로 알려진 취약점 조회(공급망 등급 확정에 필요) | |
| resolve | No | assessment: 빌드 도구로 전이 의존성까지 해석해 판정(빌드 도구·저장소 접근 필요) | |
| sbomPath | No | assessment: 요약할 SBOM 의 프로젝트 상대 경로(없으면 '없음'으로 표시, 생성하지 않음) | sbom/bom.cdx.json |
| sections | No | 포함할 절: components(설치 컴포넌트 리포트, 기본) · assessment(전환 준비도 평가서) — 둘 다 주면 이어 붙임 | |
| outputPath | No | 프로젝트 상대 .md 경로. 주면 새 파일로 저장(기존 파일이 있으면 거부) | |
| projectDir | Yes | 리포트를 만들 프로젝트 디렉터리(절대경로 권장) | |
| resolveScope | No | resolve 범위 | runtime |
| resolveTimeoutMs | No | 해석 명령 타임아웃(ms) |
Output Schema
| Name | Required | Description |
|---|---|---|
| bytes | Yes | |
| notes | Yes | |
| dryRun | Yes | |
| written | Yes | |
| sections | Yes | |
| assessment | No | |
| outputPath | No | |
| projectDir | Yes | |
| absolutePath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it specifies that outputPath writes only a new file, refuses existing files, and is transactional, while otherwise leaving the disk untouched — the exact write semantics an agent needs for a tool with readOnlyHint=false and destructiveHint=false. It also discloses when network and build-tool/repo access are required (offline=false, resolve=true) and that no cost estimates are produced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and every following parenthetical carries substantive information given a complex 11-parameter, multi-section tool. It is dense to the point of being a single long block, which slightly hurts scannability, but little text is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description needn't explain return values, and it covers section content, persistence semantics, and network/offline implications thoroughly. The remaining gap is operational sequencing — whether cheap diagnostics should precede an assessment run — which it leaves implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it defines what the assessment sections (1)–(6) contain, that format=json carries assessment data, that resolve=true pulls in transitive dependencies, that offline=false triggers OSV lookups, and that a missing sbomPath renders as '없음' without generating one. It stops short of explaining topN and resolveTimeoutMs, which the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact (프로젝트 리포트를 Markdown/json으로 생성) and enumerates exactly what each section contains, so an agent knows the tool produces a report rather than performing diagnosis. It does not, however, name neighboring report-producing tools (e.g. generate_egovframe_sbom, prepare_egovframe_delivery) to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the components-vs-assessment choice through the `sections` parameter and notes the scope limit (비용·공수는 산정하지 않습니다), which implies when the tool is and isn't appropriate. There is no explicit statement of prerequisites (e.g. run diagnose/migrate first) or of which sibling tool to use instead when the agent only wants raw diagnostics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_egovframe_sbomSBOM 생성 (CycloneDX)A
Maven/Gradle 프로젝트의 SBOM 을 CycloneDX 1.6 JSON(기본) 또는 SPDX 2.3 JSON(bomFormat=spdx-json — 패키지·DEPENDS_ON 관계·purl·공급자·작성자·생성 시각)으로 만듭니다(빌드 파일 변경 없음). Maven 은 cyclonedx-maven-plugin(makeAggregateBom, 해시·라이선스 포함), Gradle 은 해석된 의존성 트리로 문서를 구성합니다. enrich=true(기본)면 component 마다 기준 판정(egovframe:status·basis·baseline)을 properties 로 붙이고, offline=false 면 OSV 로 알려진 취약점을 vulnerabilities[] 로 넣습니다. 출력은 프로젝트 안 경로(기본 sbom/bom.cdx.json)만 허용하고 기존 파일은 overwrite=true 가 아니면 거부하며, dryRun(기본)은 실행 없이 계획만 돌려줍니다. 2027년부터 단계화되는 공공기관 SBOM 등록·제출에 쓸 수 있는 표준 형식입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | runtime(compile+runtime, 기본) | all(test·provided 포함) | runtime |
| author | No | SBOM 작성자(metadata.authors) — 없으면 supplier | |
| dryRun | No | true(기본)면 실행 없이 명령·출력 경로만 보고 | |
| enrich | No | component 마다 기준 판정 속성 부착 | |
| format | No | 응답 형식 | markdown |
| offline | No | false 면 OSV 조회 결과를 vulnerabilities[] 로 포함 | |
| supplier | No | 공급자(주 component·문서 metadata.supplier) — 없으면 pom <organization><name> | |
| bomFormat | No | SBOM 형식: cyclonedx-json(CycloneDX 1.6, 기본) | spdx-json(SPDX 2.3 — CycloneDX 로 만든 뒤 변환) | cyclonedx-json |
| overwrite | No | 기존 출력 파일 덮어쓰기 허용 | |
| timeoutMs | No | 생성 명령 타임아웃(ms) | |
| outputPath | No | 프로젝트 상대 출력 경로(기본 sbom/bom.cdx.json, spdx-json 이면 sbom/bom.spdx.json) | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) | |
| componentName | No | 주 component 이름 덮어쓰기(기본 artifactId) | |
| fillSuppliers | No | 공급자가 없는 component 를 공급자 표(catalog/sbom-rules.json)로 보완(egovframe:supplierBasis=catalog) — 기본은 enrich 와 같음 | |
| componentVersion | No | 주 component 버전 덮어쓰기(기본 pom version) |
Output Schema
| Name | Required | Description |
|---|---|---|
| bytes | Yes | |
| notes | Yes | |
| direct | Yes | |
| dryRun | Yes | |
| format | Yes | |
| command | Yes | |
| logTail | No | |
| minimum | No | |
| written | Yes | |
| osvError | No | |
| statuses | Yes | |
| buildTool | Yes | |
| generator | Yes | |
| components | Yes | |
| durationMs | No | |
| outputPath | Yes | |
| projectDir | Yes | |
| transitive | Yes | |
| overwritten | Yes | |
| specVersion | Yes | |
| absolutePath | Yes | |
| vulnerabilities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that build files are never modified, that output is restricted to project-relative paths, that existing files are refused unless overwrite=true, that dryRun defaults to true, and that offline=false triggers OSV network lookups. This is exactly the mutation/safety context the agent needs and it is consistent with destructiveHint=false and openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and then layered by concern (format → mechanism → enrichment → output safety → dryRun), with zero filler sentences. It is dense and parenthetical-heavy, but for a 15-parameter tool every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers format choice, enrichment, network behavior, path constraint, overwrite policy, and dry-run semantics for a 15-parameter tool; return-value details are legitimately omitted because an output schema exists. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description nevertheless adds meaning by explaining what enrich actually attaches (egovframe:status·basis·baseline properties), what offline=false produces (vulnerabilities[]), and how spdx-json is derived from CycloneDX. Some of this duplicates the schema text, but the enrichment-property detail is genuinely beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource (Maven/Gradle 프로젝트의 SBOM 생성) and specifies the produced formats (CycloneDX 1.6 JSON default, SPDX 2.3 JSON) plus the plugin/mechanism behind each. Purpose is unmistakable, but the description never explicitly contrasts itself with the sibling check_egovframe_sbom, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence gives a use case (public-institution SBOM 등록·제출 from 2027) and dryRun's default implies a plan-then-execute workflow, but there is no explicit when-to-use/when-not statement and no named alternative (e.g., use check_egovframe_sbom to validate an existing SBOM). Usage is inferable rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_egovframe_guide공식 가이드 조회ARead-onlyIdempotent
컴포넌트의 공식 가이드 문서(표준프레임워크 포털 egovframe-docs)를 가져옵니다. 문서가 여러 건이면 목록을 함께 반환하며 docIndex로 선택할 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| docIndex | No | 문서가 여러 건일 때 선택 (0부터, 기본 0) | |
| component | Yes | 컴포넌트 id. 예: bbs, login, cop.cmy |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds that multiple matching documents come back as a list, which is real behavioral value given there is no output schema, but it says nothing about what the response content looks like (full text vs. links) or what happens when no doc exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, the fetch action front-loaded and the multi-document behavior second. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full annotation coverage and no output schema, this is nearly complete: it names the source (egovframe-docs portal) and explains multi-result handling. Only the shape of the returned guide content is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both `component` (with the concrete id example 'bbs, login, cop.cmy') and `docIndex` (0-based, default 0) are already documented in the schema. The description's note about docIndex only restates that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: fetches the official guide document for a component from the egovframe-docs portal. The scope is clear, but it never distinguishes itself from siblings like search_egovframe_docs or explain_egovframe_component, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — look up docs for a given component id — but there is no explicit 'use this when... / instead use X when...' guidance, despite several plausible alternatives (search_egovframe_docs, explain_egovframe_component, list_egovframe_components) in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_egovframe_components공통컴포넌트 목록BRead-onlyIdempotent
선택 설치를 지원하는 공통컴포넌트 카탈로그를 반환합니다 (저장소 스캔으로 자동 생성, scripts/generate-catalog.mjs).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered. The description adds provenance context (auto-generated from a repo scan via scripts/generate-catalog.mjs), which hints the data is derived rather than authored, but says nothing about return shape, freshness guarantees, or catalog size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence stating the resource first, with the implementation note parenthetical trailing. Efficient, though the internal script path is of marginal value to an agent selecting the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param list tool with no output schema, the description should ideally indicate what a catalog entry contains (component identifiers, installable flags), since the agent must act on the result. It leaves that entirely unspecified, so it is adequate but with a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No misleading parameter claims are made.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (반환합니다) and resource (공통컴포넌트 카탈로그), with the qualifier '선택 설치를 지원하는' scoping it to installable components. This loosely differentiates it from siblings like search_egovframe_components or list_egovframe_templates, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and no comparison against alternatives such as search_egovframe_components or list_egovframe_templates. A listing tool's usage is somewhat implied, but nothing is stated about when this catalog is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_egovframe_recipes레시피 목록ARead-onlyIdempotent
큐레이션된 레시피(템플릿+컴포넌트 번들) 목록을 반환합니다. apply_egovframe_recipe로 한 번에 조립할 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds that the catalog is curated and that entries are template+component bundles, but says nothing about ordering, size, or return shape. With annotations carrying safety, a 3 reflects modest added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero padding. The identity of the resource is front-loaded and the actionable follow-up is placed second, which is the right priority order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no parameters, so the description must carry the burden of conveying what come back — it does so at a high level by defining recipes as template+component bundles. It could say more about the fields of each entry, but for a no-arg listing tool this is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is empty, so there are no parameter semantics to document. Baseline 4 applies; nothing in the description misrepresents or omits parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('curated recipes list') and, crucially, defines what a recipe is — a template+component bundle — which implicitly distinguishes it from sibling list_egovframe_templates and list_egovframe_components. It stops short of naming those siblings explicitly, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear next-step routing hint: recipes can be assembled in one shot with apply_egovframe_recipe, establishing the list→apply workflow. It does not state when to prefer this list over list_egovframe_templates or list_egovframe_components, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_egovframe_templates공식 템플릿 목록BRead-onlyIdempotent
사용 가능한 전자정부 표준프레임워크 프로젝트 템플릿 목록을 반환합니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world scope, so the safety profile is fully covered. The description contributes nothing beyond them — no mention of return shape, catalog freshness, or whether a sync is required first — so it adds no behavioral value on top of the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, appropriate for a trivial zero-argument lister. It is efficient rather than padded, though it is arguably under-specified rather than deliberately tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only listing tool with full annotation coverage, one sentence is minimally adequate. However, with no output schema the description could usefully say what a template entry contains or how the result feeds create_egovframe_project, and it omits that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric this is a baseline 4. There are no arguments whose meaning the description could clarify or fail to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('반환합니다') and resource ('전자정부 표준프레임워크 프로젝트 템플릿 목록'), making the operation unambiguous. It does not, however, differentiate itself from nearby siblings such as sync_egovframe_templates or list_egovframe_components, so an agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and never mentions alternatives like sync_egovframe_templates or search_egovframe_docs. Usage is only implied by the verb 'list'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
migrate_egovframe_project5.x 전환 진단·적용ADestructive
표준프레임워크 3.x/4.x 프로젝트를 5.x(Jakarta EE 9+, Spring 6, Java 17) 로 옮기기 위해 바꿔야 할 것을 파일·라인 단위로 진단하고(1단계), apply=true 이면 auto 항목을 실제로 치환합니다(2단계). 진단: RTE Maven 좌표(egovframework.rte → org.egovframe.rte:egovframe-rte-)·패키지(egovframework.rte. → org.egovframe.rte.)·5.x 에서 이름이 바뀌거나 제거된 클래스·javax→jakarta 패키지와 의존성·web.xml 스키마·제거된 egov- XML 네임스페이스·교체 필요 라이브러리, 항목마다 auto(기계 치환 가능)/manual(코드 수정 필요). 적용: apply=true 는 dryRun=true(기본)면 파일별 변경 미리보기만 돌려주고, dryRun=false 면 auto 항목을 하나의 transaction 으로 치환하며 원본을 migration-backup/<시각>/ 에 보관하고 migration-plan.json 을 남깁니다(중간 실패 시 작업 전 상태로 복구). manual 항목은 건드리지 않고 결과에 남깁니다. verify=true 는 3단계(검증): 적용 뒤 compile 을 실행해 컴파일 오류를 수동 항목과 연결하고 "이 항목을 처리하면 해결될 오류 수" 순으로 작업 목록을 만듭니다. 3.x 공통컴포넌트 소스가 섞여 있으면 컴포넌트 단위 재조립 권고를 내고 skipComponents 로 치환에서 뺄 수 있습니다. 규칙은 egovframe-runtime·egovframe-common-components 태그 비교로 만든 동봉 카탈로그(catalog/migration-rules.json)에서 읽습니다. target 에 5.0.2 같은 5.0.2·5.1.0 같은 5.y.z 를 주면 이미 5.x 인 프로젝트의 갱신 모드가 됩니다(5.1.0 은 GitHub 태그 없이 저장소에 배포된 버전 — 근거는 sources jar 비교): parent·RTE 버전 속성·RTE 의존성 리터럴 버전과 예전 parent 기본값을 그대로 덮어쓴 속성은 auto, 그 사이 바뀐 RTE API·동작(보안 설정 Bean 시그니처, 엑셀 수식 주입 방지, XML XXE 차단 등)을 프로젝트가 참조하는 곳과 공통컴포넌트 최신 유지(upgrade·reassemble 안내)는 manual 로 보고하며, apply·dryRun·verify 는 전환과 같게 동작합니다(백업에 update-plan.json, 규칙 catalog/update-rules.json).
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | true 면 2단계(적용). false(기본)면 진단만 | |
| dryRun | No | apply=true 일 때만 의미. true(기본)면 파일별 변경 미리보기만, false 면 실제로 치환(백업 생성) | |
| format | No | 출력 형식. markdown=사람이 읽는 요약, json=항목 배열 그대로 | markdown |
| target | No | 전환 목표. 5.x(기본) = 3.x/4.x → 5.x 전환, 5.0.2·5.1.0 같은 5.y.z = 이미 5.x 인 프로젝트를 그 버전으로 갱신(parent·RTE 버전 auto, 그 사이 바뀐 RTE API·동작 참조 manual, 공통컴포넌트 최신 유지 안내). 5.1.0 은 저장소 배포 기준(GitHub 태그 없음) | 5.x |
| verify | No | true 면 3단계(검증): 진단 후 compile 을 실행해 컴파일 오류를 수동 항목과 연결한 작업 목록을 반환(apply 와 함께 쓰지 않음, 빌드 도구 필요) | |
| projectDir | Yes | 대상 프로젝트 디렉터리(절대경로 권장) | |
| skipComponents | No | true 면 3.x 공통컴포넌트 디렉터리(재조립 권고 대상)의 자동 항목을 치환하지 않고 수동으로 남김 |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| build | No | |
| files | No | |
| items | Yes | |
| links | No | |
| notes | Yes | |
| rules | Yes | |
| dryRun | No | |
| target | Yes | |
| update | No | |
| applied | No | |
| summary | Yes | |
| planPath | No | |
| unlinked | No | |
| worklist | No | |
| backupDir | No | |
| conflicts | No | |
| remaining | No | |
| sourceEra | Yes | |
| projectDir | Yes | |
| rteVersion | Yes | |
| buildSystem | Yes | |
| filesScanned | Yes | |
| skippedManual | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far beyond the destructiveHint=true/idempotentHint=false annotations: it discloses that auto items are rewritten in a single transaction, originals are archived to migration-backup/<시각>/, migration-plan.json is emitted, and a mid-failure rolls back to the pre-work state. It also states the safety boundary that manual items are never touched and survive into the result. That is exactly the destruction/atomicity/rollback detail an agent needs before authorizing a write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded on the conversion path, but the entire update-mode branch (target=5.y.z, 5.1.0 provenance, update-rules.json, update-plan.json) is crammed into one trailing run-on clause separated by a colon and dashes. Much of it restates what the 100%-covered schema already documents, and the density makes skimming harder than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and parameter coverage is complete, the description need not explain return shapes — and it still supplies the reasoning an agent needs: three-phase model, rule catalog provenance (catalog/migration-rules.json), the auto/manual classification, and the common-component reassembly recommendation. Nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline, and the prose genuinely raises it: apply/dryRun/verify interplay, target's dual meaning (5.x = 전환 vs 5.y.z = 갱신), and skipComponents excluding common-component dirs are all explained with consequences rather than definitions. It loses a point for an internal inconsistency — the description says verify runs compile '적용 뒤' (after applying) while the schema says verify is not combined with apply — leaving the agent unsure of the legal combination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb pair (진단 + 치환/적용) on a concrete resource (3.x/4.x → 5.x 프로젝트) and enumerates exactly which artifacts it rewrites (RTE 좌표, 패키지, javax→jakarta, web.xml 스키마, XML 네임스페이스). An agent knows precisely what the tool does. What it does not do is distinguish itself from near-neighbours such as upgrade_egovframe_project or rehearse_egovframe_migration, which the crowded sibling list makes a real ambiguity risk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lays out the internal decision tree: apply=false is diagnosis-only, apply=true + dryRun=true is preview, dryRun=false performs the write, verify=true adds the compile stage, and target=5.y.z switches to update mode. That is unusually clear gating. It stops short of a 5 because it never says when to prefer this over rehearse_egovframe_migration (dry rehearsal) or upgrade_egovframe_project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_egovframe_databaseDB 준비·적재 확인A
공통컴포넌트·프로젝트의 DB 스크립트를 개발·테스트 DB 에 바로 넣을 수 있게 준비합니다. 원본은 자동으로 고릅니다 — 조립 선별본(scripts/egovframe-components//, 매니페스트 설치 순서) → 공통컴포넌트 전체(script/ddl·dml//) → 이름 규칙(ddl·schema / dml·data), 또는 scripts 로 지정. 문장 단위로 나눠 스키마·데이터로 가르고, 겹친 문장을 한 번만 두고, 외래키·뷰 참조 순서로 테이블을 정렬하며(데이터도 부모 행이 먼저), 선별본이 참조하는데 빠진 테이블(예: COMTCCMMNDETAILCODE → COMTCCMMNCODE)은 공통컴포넌트 통합 스크립트에서 보완합니다. MySQL·MariaDB 는 테이블마다 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci 와 스크립트 머리의 SET NAMES utf8mb4 로 클라이언트 문자셋과 무관하게 한글이 같게 저장되게 하고(Docker 초기화의 한글 이중 인코딩·latin1 클라이언트의 정렬 규칙 충돌), PostgreSQL 은 client_encoding UTF8. 산출물은 scripts/egovframe-db//01-schema.sql·02-data.sql 과 docker-compose.db.yml(MySQL 8.4·MariaDB 11.4·PostgreSQL 16, 접속 정보는 프로젝트 설정), 적재 명령(bash·cmd). Oracle·Tibero·Altibase·CUBRID 는 스크립트·명령만. run=true 면 Docker 로 DB 를 띄워 넣고 테이블 수·필수 행(관리자 계정·메뉴·공통코드)·한글 왕복을 확인한 뒤 컨테이너를 지웁니다(keep=true 면 남김). 기본 dryRun, 기존 파일은 덮어쓰지 않습니다(다른 내용이면 거부). 운영 DB 적재·스키마 이관은 하지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| run | No | Docker 로 DB 를 띄워 적재·확인(mysql·maria·postgres) | |
| keep | No | run=true 뒤 컨테이너를 남김 | |
| dryRun | No | true(기본)면 파일을 쓰지 않고 계획만 | |
| format | No | 응답 형식 | markdown |
| offline | No | true 면 빠진 참조 테이블 보완에 공통컴포넌트 저장소를 내려받지 않음 | |
| scripts | No | 직접 고를 원본 스크립트(프로젝트 상대 경로, 순서대로) | |
| database | No | DB 종류(기본: 프로젝트 Globals.DbType·JDBC URL) | |
| timeoutMs | No | run=true 초기화 대기 제한(ms) | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) | |
| imageRegistry | No | DB 이미지 레지스트리(사내 미러 등) | docker.io/library |
| includeComments | No | 공통컴포넌트 전체의 주석 스크립트(script/comment/<db>/)도 넣음 |
Output Schema
| Name | Required | Description |
|---|---|---|
| run | No | |
| notes | Yes | |
| views | Yes | |
| dryRun | Yes | |
| tables | Yes | |
| outputs | Yes | |
| sources | Yes | |
| commands | Yes | |
| database | Yes | |
| connection | Yes | |
| projectDir | Yes | |
| statements | Yes | |
| charsetFixed | Yes | |
| databaseFrom | Yes | |
| supplemented | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly=false, openWorld=true, non-idempotent, non-destructive): discloses container lifecycle, that existing files are never overwritten (rejects on differing content), charset/collation handling, and verification steps (table count, required rows, Korean round-trip). The container deletion is the tool's own scratch resource, not an annotation contradiction with destructiveHint=false, but that nuance is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and source-selection priority, then detail. It is dense and long, with some very low-level charset internals that exceed selection needs, but nearly every clause carries actionable invocation information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with an output schema, the description covers source selection, transformation logic, outputs, container behavior, safety constraints, and exclusions—everything an agent needs to invoke correctly. Return values are covered by the output schema, so no gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, and the prose meaningfully contextualizes several key params—run, keep, dryRun, scripts, offline, includeComments, database—their interaction and defaults. It does not add much for timeoutMs, imageRegistry, or format, relying on the schema there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (prepare DB scripts) and resource (DB schema/data scripts for common components/project), and clearly distinguishes it as a DB-preparation tool rather than project scaffolding or migration. An agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains invocation modes explicitly: default dryRun writes nothing, run=true spins Docker and verifies then tears down, keep=true retains the container, and 'scripts' overrides automatic source selection. It also gives an explicit exclusion ('운영 DB 적재·스키마 이관은 하지 않습니다'), routing production-DB work elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_egovframe_delivery납품 패키지 만들기A
감리·검수에 내는 산출물을 새 디렉터리 하나에 모읍니다 — 전환 준비도 평가서, 의존성 조치 목록, SBOM(CycloneDX 1.6·SPDX 2.3), SBOM 점검과 VEX 초안, 보안약점 결과와 SARIF, 컨테이너·배포 산출물, (지정 시) 빌드 결과. delivery-manifest.json(파일별 sha256·크기, 도구 버전, 입력 지문, 전체 지문 rootHash)과 목차 index.md 를 쓰고, 실패한 항목은 빼지 않고 이유와 함께 목차에 남깁니다. previousDelivery 를 주면 이전 차수와 비교한 diff.md(등급·SBOM 구성요소와 버전·새/해소 취약점·새/해소 보안약점)를 만들고 이전 VEX 의 사람 판단을 보존합니다. verify=true 면 받은 패키지(outputDir)의 지문을 다시 계산해 변조·누락을 봅니다. 프로젝트는 읽기만 하고(SBOM 도 프로젝트에 쓰지 않음) outputDir 는 비어 있어야 합니다. dryRun(기본)은 계획만, zip=true 면 .zip 도 만듭니다.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | true 면 <outputDir>.zip 도 만듦 | |
| dryRun | No | true(기본)면 계획만 | |
| format | No | 응답 형식 | markdown |
| verify | No | true 면 만들지 않고 outputDir 의 manifest 지문을 재검증 | |
| include | No | 담을 항목(기본: build 를 뺀 전부 — build 는 로컬 JDK·Maven/Gradle 로 package 를 실제 실행) | |
| offline | No | false 면 OSV 취약점 조회(의존성·SBOM·평가서, 오프라인 번들이 있으면 번들로) | |
| supplier | No | SBOM 공급자(없으면 pom <organization><name>) | |
| outputDir | Yes | 패키지를 만들 디렉터리(프로젝트 밖, 없거나 비어 있어야 함). verify=true 면 검증할 패키지 디렉터리 | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) — 읽기만 함 | |
| previousDelivery | No | 이전 차수 패키지 디렉터리 — 비교 절(diff.md)과 VEX 판단 보존 |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | No | |
| mode | Yes | |
| bytes | No | |
| files | No | |
| items | No | |
| notes | Yes | |
| dryRun | No | |
| verify | No | |
| include | No | |
| written | No | |
| zipPath | No | |
| rootHash | No | |
| outputDir | Yes | |
| projectDir | No | |
| manifestPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing what gets written (delivery-manifest.json with per-file sha256, tool versions, rootHash, plus index.md), that failures are retained with reasons rather than dropped, and that previousDelivery preserves prior VEX human judgments. Annotations already cover the read-only/destructive/open-world profile, so this added write-scope detail is the valuable part.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and artifact list, then moves to outputs, then comparison, then verification, then preconditions — a logical order. It is a single dense paragraph with heavy parenthetical nesting, which costs a little scannability, but essentially no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with an output schema, it covers write scope, failure handling, comparison behavior, preconditions, and the dryRun/zip modes. What it leaves implicit are operational details such as runtime cost and behavior on a partially populated outputDir, though the emptiness precondition implies an error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description still adds semantics: previousDelivery produces diff.md and carries VEX decisions forward, verify switches the tool from generation to fingerprint re-computation, and include's 'build' option is called out as actually running a local JDK/Maven/Gradle package. That is meaning beyond the schema's own one-liners.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('산출물을 새 디렉터리 하나에 모읍니다') and enumerates exactly which artifacts are collected (assessment, dependency list, SBOM, VEX, SARIF, deploy, build), which no sibling does. An agent can distinguish it from generate_egovframe_sbom or generate_egovframe_report, which produce single artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions ('outputDir 는 비어 있어야 합니다', project is read-only) and two distinct modes: verify=true re-verifies an existing package instead of building, and dryRun(default) plans only. It does not explicitly say 'use this instead of X sibling', so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_egovframe_offline_bundle폐쇄망 오프라인 번들 만들기A
망분리(폐쇄망) 개발 환경용 오프라인 번들을 인터넷 PC 에서 만듭니다. OSV Maven 취약점 전체 덤프·고정 공통컴포넌트 아카이브(sha256 검증)·Initializr zip 템플릿(고정 지문)·재조립용 공식 공통컴포넌트 태그 미러를 한 디렉터리에 담고 bundle-manifest.json(파일별 sha256·크기·출처 URL·받은 시각)을 씁니다. 새(또는 빈) 디렉터리에만 쓰며 dryRun(기본)은 받을 목록만 보여 줍니다. 폐쇄망 PC 에서 환경변수 EGOVFRAME_OFFLINE_BUNDLE 에 옮긴 경로를 지정하면 다운로드는 번들 파일을 지문 검증 후 쓰고, offline=false 의 OSV 조회는 로컬 덤프로 판정하며(스냅숏 기준일 표시·30일 넘으면 경고), 재조립은 번들 미러를 씁니다. Maven 의존성 jar 는 담지 않습니다(기관 저장소 미러 사용).
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | true(기본)면 받을 목록만 | |
| format | No | 응답 형식 | markdown |
| include | No | 담을 항목 | |
| outputDir | Yes | 번들을 만들 디렉터리(없거나 비어 있어야 함) | |
| templates | No | 담을 템플릿 id(기본: 고정 지문이 있는 Initializr zip 템플릿 전부, 저장소 템플릿은 지정할 때만) |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| notes | Yes | |
| usage | Yes | |
| dryRun | Yes | |
| origin | No | |
| written | Yes | |
| outputDir | Yes | |
| totalBytes | Yes | |
| manifestPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses the write-target constraint (only new/empty directories), that every file is sha256-fingerprinted and recorded with source URL and fetch time in bundle-manifest.json, that OSV lookups fall back to the local dump with a snapshot date and a 30-day staleness warning, and that Maven jars are deliberately omitted. These details explain why the tool is non-idempotent and non-destructive, which the annotations alone do not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded correctly, but the second half drifts into the behavior of other tools on the closed-network side (download verification, offline OSV resolution, reassembly using the bundle mirror). That context is relevant but makes a single dense run-on paragraph that is harder to scan than the core setup instructions warrant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a network-dependent, file-writing tool with five parameters, an output schema, and full annotations, the description covers everything an agent needs: preconditions on outputDir, default dry-run safety, network requirements, bundle contents, manifest format, and explicit exclusions. Return structure is handled by the output schema, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by framing dryRun as a preview of the fetch list and by naming the four include categories in prose while clarifying that only fixed-fingerprint templates are packed by default. Only 'format' is left entirely to the schema, which is acceptable given its explicit description there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and artifact: build an offline bundle for air-gapped development environments on an internet-connected PC. It enumerates the bundle's exact contents (OSV vulnerability dump, pinned component archive with sha256, Initializr zip templates, origin tag mirror, bundle-manifest.json) and explicitly excludes Maven jars. It does not name any sibling tool, so the boundary with prepare_egovframe_delivery or reassemble_egovframe_components must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the precondition clearly ('새(또는 빈) 디렉터리에만 쓰며') and that dryRun defaults to listing what would be fetched, giving the agent a safe first step. It also explains the downstream scenario (setting EGOVFRAME_OFFLINE_BUNDLE on the closed-network PC). It never names an alternative tool or says when a sibling should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reassemble_egovframe_components공통컴포넌트 재조립 (5.x)ADestructive
3.x/4.x(또는 이전 5.x) 프로젝트에 복사돼 있는 공통컴포넌트 소스를 카탈로그 고정 버전(현재 v5.0.7)으로 다시 조립합니다. (1) 프로젝트 파일의 git blob id 를 공식 egovframe-common-components 후보 태그(좌표 세대별)와 대조해 원본 태그를 식별하고(파일 내용을 내려받지 않음, sourceTag 로 지정 가능) (2) 원본·현재·목표로 파일마다 목표와 같음/원본 그대로(교체)/사용자 수정/5.x 신규/5.x 에서 제거/원본 미확인/사용자 추가를 판정한 뒤 (3) dryRun=false 면 하나의 transaction 으로 목표 파일을 쓰고(아카이브 sha256 검증), 5.x 에 없는 원본 파일은 백업 후 지우고, 사용자 수정 소스는 교체하되 원본 대비 변경을 unified diff 패치로 보존하며(설정·자산 파일은 사용자본을 유지하고 목표본을 참고로 저장) 매니페스트를 기록해 이후 upgrade·validate·remove 도구가 적용되게 합니다. 백업·패치·reassemble-plan.json 은 migration-backup/<시각>-reassemble-*/ 에 남고, 작업 목록(패치 다시 반영·5.x 제거 파일·설정 비교)을 돌려줍니다. verify=true 면 적용 뒤 compile 을 실행해 오류를 작업 목록 파일에 붙입니다. 원본 태그 비교에 git 이 필요하며 캐시는 EGOVFRAME_CACHE_DIR(기본 ~/.cache/egovframe-scaffold-mcp)에 둡니다. 패치를 자동으로 다시 적용하지는 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | true(기본)면 분류·계획만, false 면 적용(transaction) | |
| format | No | 출력 형식 | markdown |
| verify | No | 적용 뒤 compile 실행해 오류를 작업 목록에 연결 | |
| database | No | 지정 시 컴포넌트별 DDL·DML 을 scripts/egovframe-components/<db>/ 에 함께 생성 | |
| sourceTag | No | 원본 태그(예: v3.10.0). auto(기본)면 파일 대조로 식별 | auto |
| timeoutMs | No | verify 컴파일 타임아웃(ms) | |
| components | No | 재조립할 컴포넌트 id(그룹 id 는 하위 컴포넌트로 펼침). 미지정 시 감지된 컴포넌트 전부 | |
| projectDir | Yes | 대상 프로젝트 디렉터리(절대경로 권장) |
Output Schema
| Name | Required | Description |
|---|---|---|
| sql | Yes | |
| files | Yes | |
| notes | Yes | |
| dryRun | Yes | |
| origin | Yes | |
| target | Yes | |
| verify | No | |
| actions | Yes | |
| summary | Yes | |
| planPath | No | |
| worklist | Yes | |
| backupDir | No | |
| sourceEra | Yes | |
| components | Yes | |
| projectDir | Yes | |
| manifestUpdated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that dryRun=false writes in one transaction with archive sha256 verification, deletes originals absent from 5.x after backup, replaces user-modified sources while preserving unified-diff patches, keeps user config/asset files, records a manifest consumed by upgrade/validate/remove, and states patches are NOT auto-reapplied. It also names operational prerequisites (git required, EGOVFRAME_CACHE_DIR default) and artifact locations, consistent with destructiveHint=true and idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and pinned version, then numbered steps that map to the execution order. It is long and uses heavily nested Korean clauses, which costs readability, but essentially every sentence carries distinct operational information (backup paths, patch policy, git/cache requirements).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world migration tool the description covers the full lifecycle: input detection, per-file classification outcomes, transactional write behavior, backup/artifact layout, returned task list, and downstream tool effects. With an output schema present, no return-value explanation is owed, and nothing an agent needs to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds behavior the schema cannot: sourceTag can be auto-detected by git blob-id comparison without downloading file contents, dryRun=false means transaction apply, and verify=true runs compile and appends errors to the task list. The components, database, and format parameters are left to the schema, which is acceptable at full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reassemble) and resource (egovframe common components copied into a 3.x/4.x project) pinned to a catalog version (v5.0.7), and outlines the identify/classify/apply pipeline. It is clear what the tool does, but it never names the sibling it should be chosen over (upgrade_egovframe_project, add_egovframe_components), so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The target situation is implied ('3.x/4.x 또는 이전 5.x 프로젝트에 복사돼 있는 공통컴포넌트 소스') and dryRun=true default gives a safe first step. However there is no explicit when-to-use vs when-not, and no routing against upgrade_egovframe_project or rehearse_egovframe_migration, which are the nearest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rehearse_egovframe_migration5.x 전환 리허설 (사본에서 실측)AIdempotent
프로젝트를 건드리지 않고 사본에서 5.x 전환을 미리 돌려 봅니다. 사본(EGOVFRAME_CACHE_DIR/rehearsal, 빌드 산출물·VCS·백업 제외)에서 (1) 공통컴포넌트 재조립(원본 태그 식별이 깨지지 않도록 전환 적용보다 먼저) (2) 전환 자동 항목 적용 (3) 컴파일 — Maven 은 javac 를 fork 해 -Xmaxerrs 로 오류 100개 상한 없이 모두 셈 (4) 사본 pom 을 공식 공통컴포넌트 고정 태그 pom 기준(parent·누락 좌표·버전·scope·parent 관리 속성)으로 맞춘 뒤 다시 컴파일합니다. 두 시점의 오류 수, 누락 패키지와 후보 좌표, 같은 파일의 연쇄 오류, 남는 수동 항목·파일, 사라지는 오류 순 작업 목록, 사본에 적용한 pom 패치를 돌려주고, 실행 전후 디렉터리 지문으로 원본 불변을 확인합니다. 최근 결과는 평가서 6절에 실측으로 표시됩니다. keepWorkspace=true 면 사본을 남깁니다.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | 작업 목록 수 | |
| steps | No | 실행할 단계(순서는 고정) | |
| format | No | 응답 형식 | markdown |
| sourceTag | No | 재조립 원본 태그(기본 auto = 식별) | auto |
| timeoutMs | No | 컴파일 1회 타임아웃(ms) | |
| components | No | 재조립 대상 컴포넌트 id(기본: 감지된 전부) | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장) — 읽기만 함 | |
| keepWorkspace | No | true 면 사본을 지우지 않고 경로를 돌려줌 |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| steps | Yes | |
| migrate | No | |
| savedTo | No | |
| original | Yes | |
| worklist | Yes | |
| buildTool | Yes | |
| startedAt | Yes | |
| workspace | Yes | |
| projectDir | Yes | |
| reassemble | No | |
| afterAutomation | No | |
| afterPomAlignment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations declaring readOnlyHint=false and destructiveHint=false, the description goes well past that bar: it discloses the copy location and exclusion set (build artifacts, VCS, backups), the fixed stage ordering and why (reassemble before migrate to preserve original tag identification), the javac fork with -Xmaxerrs removing the 100-error cap, the directory-fingerprint check proving the original is unchanged, and that results surface in section 6 of the report.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope guarantee is front-loaded in the first clause, followed by the numbered stage sequence, then the return values. It is one dense paragraph but nearly every sentence carries distinct information; only the return-value enumeration is partly redundant with the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-stage, mutating (on a copy) tool with 8 parameters, the description covers intent, stage semantics, side effects, safety verification, output contents and workspace retention. An output schema exists, so the extra return-value prose is surplus rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all 8 parameters, so the baseline is 3. The description adds a little meaning — the ordering rationale behind the steps list and the fact that keepWorkspace leaves a copy behind — but most parameter semantics are already carried by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'rehearse the 5.x migration on a copy without touching the project' — and enumerates the four concrete stages it performs (reassemble, migrate, compile, align-pom, recompile). It does not name the sibling tools it substitutes for (migrate_egovframe_project / upgrade_egovframe_project), so the differentiation from siblings is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'프로젝트를 건드리지 않고 사본에서 미리 돌려 봅니다' implies when to use it — a safe preview before committing to a real migration — and the keepWorkspace note hints at follow-on inspection. However, no alternative tool is named and there is no explicit 'use this instead of X when Y' rule, so selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_egovframe_components공통컴포넌트 제거ADestructive
add_egovframe_components로 조립한 컴포넌트를 제거합니다. 설치 매니페스트에 기록된 파일만 삭제하며, 다른 설치 컴포넌트가 의존하거나 설치 시점 hash와 달라진 파일은 기본 거부합니다. force=true는 remove-backup/에 사본을 만든 뒤 트랜잭션 제거하며, dryRun 미리보기를 지원합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | 사용자 수정·hash 미검증 파일도 remove-backup/에 백업한 뒤 제거 | |
| dryRun | No | true면 삭제 없이 대상만 미리보기 | |
| components | Yes | 제거할 컴포넌트 id 목록 | |
| projectDir | Yes | 대상 프로젝트 디렉터리 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructiveHint=true; the description goes far beyond, disclosing that only manifest-recorded files are deleted, that dependency-shared and hash-mismatched files are refused by default, that force backs up to remove-backup/ before transactional removal, and that a dryRun preview exists. This is exactly the pre-mutation context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with what is removed, then the safety gate, then the escape hatch. No filler and no repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema, the description covers scope, refusal conditions, backup location, transactionality, and preview mode. What happens to the project afterwards is inferable; nothing needed to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds value by explaining force as backup-then-transactional-remove and dryRun as a preview, and by introducing the install-time hash validation concept that the schema fields only hint at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (제거) and resource (add_egovframe_components로 조립한 컴포넌트), and explicitly names the inverse sibling in the first sentence. An agent can distinguish this from add/reassemble tools without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Ties usage to the counterpart tool (add_egovframe_components) and spells out the default refusal conditions, which tells the agent when the call will be rejected. It does not, however, say when to prefer this over reassemble_egovframe_components or when force should be considered acceptable, leaving a sibling-selection gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_egovframe_components공통컴포넌트 검색ARead-onlyIdempotent
키워드로 공통컴포넌트를 검색합니다 (id·이름·설명·카테고리 부분 일치, 점수순 상위 10건).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 검색어. 예: 게시판, bbs, 로그인 | |
| category | No | 카테고리 필터 (cmm|cop|uss|sym|sec|utl|dam|ext|ssi|sts|uat) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the safety hints provided in the annotations by disclosing critical operational behaviors. Specifically, it reveals that the search performs partial matching across the ID, name, description, and category fields, which is vital behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single, highly efficient sentence. It front-loads the core function and immediately provides the crucial operational constraints (what it matches and how many results are returned), leaving no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a search tool, the description is complete. It defines the resource being searched (components), the input type (keyword), and the output constraints (partial match, top 10). No major context is missing for an agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema defines `query` as a simple string, the description clarifies its semantics—it is used for partial matching across four different attributes (id, name, description, category). This context dramatically enhances the utility of the parameter definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: searching common components by keyword. It distinguishes this from listing tools by detailing the scope (Top 10) and matching criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description dictates exactly how the tool operates (partial match on four fields, limited results). This operational clarity helps the agent choose this tool when the user expects a specific, filtered result rather than an exhaustive search, making it highly practical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_egovframe_docs가이드 문서 검색ARead-onlyIdempotent
공식 가이드 문서(egovframe-docs) 인덱스를 키워드로 검색합니다. 기본은 오프라인 인덱스 검색(제목·경로·연계 컴포넌트·카테고리 점수순)이며, fetchTop>0이면 상위 결과의 문서 본문을 내려받아 스니펫도 함께 제공합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 최대 결과 수 (기본 10) | |
| query | Yes | 검색어. 예: "로그인", "게시판 권한" | |
| fetchTop | No | 본문을 내려받아 스니펫을 붙일 상위 결과 수 (0=오프라인, 최대 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description still earns credit by disclosing the mode switch: default is offline index only, while fetchTop>0 triggers an actual network fetch of document bodies to build snippets — a meaningful nuance on openWorldHint that the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with zero filler: the resource and search source come first, then the default behavior and the fetchTop deviation. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates reasonably by describing result ordering and the presence of snippets when fetchTop>0. It stops short of sketching the returned fields (title, path, category, score) or noting result-count/pagination behavior, which would fully close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining the ranking dimensions (title, path, linked component, category) and by framing fetchTop as the toggle between offline-only results and body-composed snippets. It does not explain limit behavior or ordering interaction between limit and fetchTop.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: keyword search over the official egovframe-docs guide index, and clarifies what is being searched (the index, not the documents themselves). It does not name or distinguish itself from the closest sibling, get_egovframe_guide (which presumably reads a document body), so an agent must infer the search-vs-read split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: this is the tool to reach for when locating guides by keyword. The description explains the two operating modes (offline index by default vs. fetchTop>0 pulling bodies) but gives no explicit routing against get_egovframe_guide or explain_egovframe_component, and no when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_egovframe_catalog컴포넌트 카탈로그 upstream 대조ARead-onlyIdempotent
공식 egovframe-common-components 태그·commit·아카이브 무결성을 검증하고, 고정 카탈로그 대비 upstream 변경과 sec.security 보안 패키지를 점검합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | 확인할 태그·브랜치·commit. 미지정 시 카탈로그의 공식 고정 태그 사용 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/idempotentHint, so safety is covered; the description adds substantive scope detail beyond them — that it validates tag/commit/archive integrity of an official upstream source and also inspects the sec.security package. It does not describe what artifacts or findings come back, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence covering three checks, with no filler. It is dense but every clause (integrity verification, upstream diff, security package) adds distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, one-optional-parameter tool with full schema coverage and no output schema, the description covers scope, source of truth, and default behavior adequately. What is missing is the form of the returned findings and any mention of network/prerequisite requirements for the upstream comparison.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional 'ref' parameter is already documented in the schema, including the default of the pinned tag. The description reinforces the default behavior (고정 카탈로그 대비) but adds no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb (검증하고/점검합니다) and a precisely named resource (공식 egovframe-common-components 태그·commit·아카이브) rather than a restatement of the name. It clarifies that the tool works against a pinned catalog comparison and sec.security package, which separates it from catalog-listing and template-sync siblings, though it never names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this versus the siblings like sync_egovframe_templates or list_egovframe_components, and no exclusion of scenarios (e.g., pre-upgrade checks vs. routine validation). Usage is only inferable from the purpose statement, and the 'sync' name could mislead against sync_egovframe_templates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_egovframe_templates템플릿 카탈로그 upstream 대조ARead-onlyIdempotent
공식 프로젝트 템플릿 통합 카탈로그(Initializr·MCP·Development)를 upstream 과 대조해 추가·삭제·변경과 MCP 커버리지 격차를 보고하고, 동봉한 5.x 전환 규칙·의존성 기준 카탈로그의 drift(egovframe-runtime·공통컴포넌트의 새 태그, 공식 parent 의 새 버전, 고정 pom sha256 변화)도 함께 보고합니다. 파일은 고치지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | 확인할 Initializr 저장소의 브랜치·태그·commit. 미지정 시 고정 카탈로그의 branch 사용 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and '파일은 고치지 않습니다' echoes that but the description goes further by enumerating the report categories — added/deleted/changed entries, MCP coverage gaps, new eGovFrame runtime/공통컴포넌트 tags, new parent versions, pom sha256 changes. That tells the agent exactly what evidence the report carries, which annotations alone would not. It does not say whether a network fetch is required, though openWorldHint implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single very long sentence packing two comparisons and three parenthetical drift categories. The core action is front-loaded, but the density of parenthetical lists makes it harder to scan than two or three shorter sentences would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does a fair job naming what the report contains, but it omits the two things an agent most needs: how this differs from sync_egovframe_catalog, and the shape/section layout of the report (or whether it is textual vs structured).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one optional parameter (ref) and schema description coverage is 100%, so the schema already explains that an unspecified ref falls back to the pinned catalog branch. The description adds no additional semantics about ref, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: reconcile the official template catalog (Initializr/MCP/Development) against upstream and report adds/removals/changes plus MCP coverage gaps and drift in the 5.x rule/dependency catalog. Very specific about what is compared and what is reported, but it never distinguishes itself from the sibling 'sync_egovframe_catalog', whose name and purpose read almost identically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (use when you want to know whether the pinned catalog has drifted from upstream) but there is no explicit when-to-use, no exclusion, and critically no routing guidance versus sync_egovframe_catalog or list_egovframe_templates. The agent is left to infer which sync tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_egovframe_project테스트 실행AIdempotent
eGovFrame 프로젝트의 테스트를 실제로 실행하고 JUnit XML 리포트(surefire/gradle)를 읽어 결과를 구조화합니다. 스위트별 통과·실패·오류·건너뜀 수와, 실패 케이스의 메시지·예외 타입·테스트 파일/라인을 반환합니다. testFilter로 특정 클래스/메서드만 실행할 수 있고, 원격 저장소 일시 장애는 다시 실행합니다(retryTransient). dryRun으로 실행 예정 명령을 미리볼 수 있습니다. (build_egovframe_project 의 테스트 후속)
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | true면 실행 없이 감지된 빌드도구·명령·리포트 위치만 반환 | |
| projectDir | Yes | 테스트할 프로젝트 루트 디렉터리(pom.xml 또는 build.gradle 위치, 절대경로 권장) | |
| testFilter | No | 실행할 테스트 패턴(빌드도구 문법 그대로). maven: `FooTest`, `FooTest#bar`, `com.acme.*Test` / gradle: `com.acme.FooTest`, `*FooTest.bar`. 생략 시 전체 | |
| maxFailures | No | 반환할 실패·오류 케이스 최대 수. 기본 50 | |
| maxLogLines | No | 반환 로그의 최대 줄 수(마지막 N줄). 기본 200줄 | |
| retryTransient | No | 원격 저장소 일시 장애(503·연결 끊김)로 실패하면 갱신 인자(-U / --refresh-dependencies)를 붙여 다시 실행할 횟수(0–3). 컴파일·테스트 실패는 다시 실행하지 않음. 기본 1 | |
| timeoutSeconds | No | 테스트 타임아웃(초). 초과 시 중단. 기본 600초 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare non-read-only, open-world, idempotent, non-destructive, so that safety profile is covered; the description adds value by disclosing report consumption (surefire/gradle JUnit XML), the retry policy (only transient 503/connection failures, retried with -U/--refresh-dependencies, compile/test failures are not retried), and the dryRun preview path. It does not say what happens when the timeout is exceeded, or whether a failing test returns a result or raises an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with what it does and what it returns, then the controls, then the workflow link. Dense but each sentence carries real information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There's no output schema, so the description must explain the result shape, which it does, at the level of per-suite counts and failure-case fields. Combined with a 7-param schema that's fully documented, an agent has enough to invoke it correctly; only error and timeout behavior at the boundary remains implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and every parameter already has a detailed description, including examples of the testFilter build-tool-specific syntax. The description's mentions of testFilter, dryRun, and retryTransient restate what the schema already says, so it does not add meaning beyond the structured fields. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (실제로 실행 = actually run the project's tests) and goes on to describe the return shape (per-suite pass/fail/error/skip counts, failure messages, exception type, file/line). This clearly separates it from build_egovframe_project, which is named as the preceding step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(build_egovframe_project 의 테스트 후속)' places it in the workflow as the follow-up to a build, and the description names three usage modes: testFilter for narrowing to a class/method, dryRun for previewing, retryTransient for flaky remote repos. What's missing is an explicit statement of when not to use it (e.g., after a failed compile, or for running an actual build).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_egovframe_project공통컴포넌트 업그레이드ADestructive
매니페스트에 기록된 설치 공통컴포넌트를 upstream 최신본과 비교해 갱신합니다. 사용자가 수정한 파일은 force 없이는 보존하며, dryRun(기본)으로 변경 계획을 먼저 확인합니다. 덮어쓰기 전 upgrade-backup/에 백업하고, 하드 충돌 시 아무것도 쓰지 않고 거부합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | 사용자 수정 파일(충돌)도 백업 후 덮어쓸지 | |
| dryRun | No | true(기본)면 계획만 미리보기, 디스크 변경 없음 | |
| components | No | 대상 컴포넌트 id (미지정 시 매니페스트 전체) | |
| projectDir | Yes | 업그레이드할 프로젝트 디렉터리(절대경로 권장) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: writes are preceded by a backup into upgrade-backup/, user-modified files are preserved unless force, dryRun touches no disk, and hard conflicts are rejected atomically with nothing written. These align with destructiveHint=true and openWorldHint=true and fill in the safety/reversibility story the annotations only flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct load: purpose, force/preservation rule, dryRun-first workflow with backup location, and atomic refusal on hard conflict. The safety-critical default (dryRun) is surfaced early and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations already cover the destructive/open-world/idempotency profile and there is no output schema, so the description carries only the behavioral burden, which it does well. The main gap is what the dryRun plan actually reports back, which matters for the recommended preview-first workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds behavioral meaning to the two risky flags: force governs overwriting user-edited files after backup, and dryRun is the default plan-only mode. It does not clarify the components id format or how an unspecified list resolves beyond the schema's note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (갱신/upgrade) plus specific resource scope: components installed and recorded in the manifest, compared against upstream latest. That scoping alone separates it from add_egovframe_components (new installs), reassemble_egovframe_components, and migrate_egovframe_project, so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operating context: dryRun is the default so a plan is inspected first, force is required to touch user-modified files, and hard conflicts abort. It never names sibling alternatives or explicit when-not conditions (e.g., use add_egovframe_components for new components, migrate for a target-version jump), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_egovframe_project프로젝트 무결성 검증ARead-onlyIdempotent
조립된 프로젝트의 무결성을 진단합니다: 설치 매니페스트 기준 파일 존재 확인, Globals.DbType과 복사된 DB 스크립트 일치 확인.
| Name | Required | Description | Default |
|---|---|---|---|
| projectDir | Yes | 검증할 프로젝트 디렉터리 |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| dbType | Yes | |
| aiChecks | Yes | |
| warnings | Yes | |
| components | Yes | |
| projectDir | Yes | |
| dbScriptDirs | Yes | |
| manifestFound | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world, so the safety profile is settled. The description adds genuine value by naming exactly what is cross-checked (manifest vs. files, DbType vs. DB script), though it doesn't state how failures are surfaced (there is an output schema, which mitigates this).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with the two concrete checks after the colon; no filler. Slightly dense but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, 100% parameter coverage and an output schema, the description supplies the remaining piece—the specific integrity checks performed. The notable gap is disambiguation from diagnose_egovframe_project in a crowded family of check_/diagnose_ siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage ('검증할 프로젝트 디렉터리'), so the schema carries the semantics. The description adds nothing about the parameter (e.g., whether it must contain a previously assembled layout), which is the expected baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('조립된 프로젝트의 무결성을 진단') and enumerates the two specific checks (manifest-based file existence, Globals.DbType vs. copied DB script), which is far from a tautology. However, it does not differentiate itself from the similarly-scoped sibling diagnose_egovframe_project, so the agent cannot tell why one is preferred over the other.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '조립된 프로젝트' implies this tool applies after project assembly, giving implicit lifecycle guidance. There is no explicit when-to-use / when-not statement and no reference to diagnose_egovframe_project, check_egovframe_dependencies, or check_egovframe_sbom as alternatives, so usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_egovframe_startup기동 검증A
프로젝트를 바꾸지 않고 실제로 띄워 기동되는지 확인합니다 — 컴파일로 잡히지 않는 빈 생성 실패·설정 파일 경로·DB 접속·JDBC 드라이버·MyBatis 매퍼 XML 오류를 찾습니다. Spring Boot 는 mvn spring-boot:run / gradle bootRun 에 빈 포트를 --server.port 로 주고, Classic war 는 패키징한 war 를 캐시의 고정 버전 Tomcat 10.1(Servlet 6.1 이상이면 11.0, sha256 검증, 사내 미러 EGOVFRAME_MAVEN_MIRROR 우선)에 ROOT 로 두고 임시 CATALINA_BASE 로 띄웁니다(tomcatHome 으로 설치된 Tomcat 지정 가능). 로그의 기동 완료 문구 뒤 HTTP(기본 /, actuator 가 있으면 /actuator/health)로 확인해 5xx 가 아니면 기동으로 보고, 실패면 Spring 원인 사슬을 구조화합니다 — 종류(빌드 실패·원격 저장소 장애·포트 사용 중·JDBC 드라이버 없음·DB 접속 실패·매퍼 XML 오류·설정 누락·javax 네임스페이스·빈 생성 실패·HTTP 오류·시간 초과), 실제로 실패한 빈 이름, 관련 설정 자원(배포 사본 경로를 프로젝트 원본 경로로)·줄, JDBC URL·드라이버, 종류별 처방(드라이버 좌표, prepare_egovframe_database, migrate_egovframe_project 등)과 로그 끝부분. 끝나면 프로세스 트리를 끝냅니다. 화면 기능 테스트·운영 WAS(JEUS 등) 기동은 하지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | 기동 뒤 확인할 경로(기본 / — Boot 에 actuator 가 있으면 /actuator/health) | |
| port | No | 고정 포트(기본: 빈 포트) | |
| format | No | 응답 형식 | markdown |
| timeoutMs | No | 전체 제한(ms, 첫 실행은 의존성 다운로드 포함) | |
| projectDir | Yes | 프로젝트 디렉터리(절대경로 권장, 멀티 모듈이면 모듈 디렉터리) | |
| tomcatHome | No | Classic war 를 띄울 설치된 Tomcat 10.1/11.0(폐쇄망 등, 기본: 캐시에 내려받음) |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| http | No | |
| port | Yes | |
| build | No | |
| cause | No | |
| chain | Yes | |
| notes | Yes | |
| tomcat | No | |
| command | Yes | |
| logTail | Yes | |
| runtime | Yes | |
| started | Yes | |
| success | Yes | |
| buildTool | Yes | |
| durationMs | Yes | |
| projectDir | Yes | |
| startedInMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it does not alter the project, it downloads dependencies and a fixed Tomcat 10.1/11.0 build (sha256 verified, internal mirror EGOVFRAME_MAVEN_MIRROR preferred), stages the war under a temporary CATALINA_BASE, uses an empty port, and kills the process tree on completion. Timeout semantics ('first run includes dependency download') and the health-check rule (5xx means failure) are also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, but the rest is a single dense paragraph that includes implementation internals an agent does not need for selection or invocation (Servlet version-to-Tomcat mapping, sha256 verification, mirror precedence, CATALINA_BASE mechanics). Those details crowd out the higher-value exclusions and failure taxonomy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a long-running, process-spawning tool this covers everything needed: preconditions, download behavior, cleanup, timeout, success criterion, and the structure of failure output (failure kind, offending bean name, config resource mapped back to project source, JDBC URL/driver, per-kind remediation). An output schema exists, so the description's extra explanation of the failure report is supplementary rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters, and the description mostly restates them (tomcatHome for closed networks, empty default port, actuator health path). It adds some operational framing — how port and path are used during the boot probe — but little syntax or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (launch the project and verify it actually boots, without modifying it) and enumerates the class of failures it targets — bean creation, config paths, DB connection, JDBC driver, MyBatis mapper XML — that compilation cannot catch. It explicitly excludes screen functional testing and production WAS (JEUS) startup, which cleanly separates it from test_egovframe_project and build_egovframe_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use condition (runtime errors not caught by compilation) and explicit when-not exclusions (UI functional tests, production WAS startup). It also names the sibling tools to reach for on failure (prepare_egovframe_database, migrate_egovframe_project), so routing decisions are supported at both ends.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.11.0- Added
verify_egovframe_startup
2 tool updates
v1.10.0- Changed
diagnose_egovframe_project2 fields changed- added
Output schema / properties / dbScriptsAdded value: +{ + "additionalProperties": {}, + "properties": { + "componentScripts": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "compose": { + "type": "boolean" + }, + "prepared": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "componentScripts", + "prepared", + "compose" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "projectDir", - "isEgovProject", - "buildSystem", - "egovVersion", - "database", - "detectedComponents", - "aiLayer", - "hasManifest", - "issues", - "suggestions" -]New value: +[ + "projectDir", + "isEgovProject", + "buildSystem", + "egovVersion", + "database", + "detectedComponents", + "aiLayer", + "hasManifest", + "issues", + "suggestions", + "dbScripts" +]
- Added
prepare_egovframe_database
4 tool updates
v1.9.0- Changed
check_egovframe_secure_coding1 field changed- added
Output schema / properties / htmlTagFilterAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Added
fix_egovframe_dependencies - Added
fix_egovframe_secure_coding - Changed
generate_egovframe_crud4 fields changed- changed
Input schema / properties / dialect / descriptionPrevious value: -"v1.4: ddl 의 DB 방언(oracle·tibero 면 DATE 를 날짜+시각 LocalDateTime 으로)"New value: +"v1.4: ddl 의 DB 방언(oracle·tibero 면 DATE 를 날짜+시각 LocalDateTime 으로). v1.8: paging 의 SQL 방식도 이것으로 정함" - added
Input schema / properties / pageSizeAdded value: +{ + "description": "v1.8: paging 의 페이지 목록 크기(기본 10)", + "maximum": 20, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / pageUnitAdded value: +{ + "description": "v1.8: paging 의 한 페이지 행 수(기본 10)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / pagingAdded value: +{ + "default": false, + "description": "v1.8: 목록 페이징 — 방언별 SQL(MySQL·MariaDB·PostgreSQL·HSQL 은 LIMIT/OFFSET, Oracle·Tibero·Altibase·CUBRID 는 공통컴포넌트와 같은 ROWNUM 감싸기), classic 은 PaginationInfo·<ui:pagination>, boot 는 page·size 와 {content, totalCount, page, size} 응답. 방언은 dialect, 없으면 프로젝트의 Globals.DbType, 그것도 없으면 설정 파일의 JDBC URL(한 방언일 때)", + "type": "boolean" +}
32 tool updates
v1.6.0- Changed
add_ai_components1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
add_egovframe_components1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
apply_egovframe_recipe1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
build_egovframe_project2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / retryTransientAdded value: +{ + "default": 1, + "description": "원격 저장소 일시 장애(503·연결 끊김)로 실패하면 갱신 인자(-U / --refresh-dependencies)를 붙여 다시 실행할 횟수(0–3). 컴파일·테스트 실패는 다시 실행하지 않음. 기본 1", + "maximum": 3, + "minimum": 0, + "type": "integer" +}
- Changed
check_egovframe_dependencies41 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / baseline / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / baseline / properties / bootBom / maximumAdded value: +9007199254740991 - added
Output schema / properties / baseline / properties / bootBom / minimumAdded value: +-9007199254740991 - added
Output schema / properties / baseline / properties / java / maximumAdded value: +9007199254740991 - added
Output schema / properties / baseline / properties / java / minimumAdded value: +-9007199254740991 - added
Output schema / properties / baseline / properties / rteTransitive / maximumAdded value: +9007199254740991 - added
Output schema / properties / baseline / properties / rteTransitive / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / checks / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / checks / items / properties / evidence / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / checks / items / properties / evidence / items / properties / line / maximumAdded value: +9007199254740991 - added
Output schema / properties / checks / items / properties / evidence / items / properties / line / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / findings / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / findings / items / properties / depth / maximumAdded value: +9007199254740991 - added
Output schema / properties / findings / items / properties / depth / minimumAdded value: +-9007199254740991 - added
Output schema / properties / findings / items / properties / line / maximumAdded value: +9007199254740991 - added
Output schema / properties / findings / items / properties / line / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / java / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / parent / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / resolution / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / resolution / properties / artifacts / maximumAdded value: +9007199254740991 - added
Output schema / properties / resolution / properties / artifacts / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / resolution / properties / differs / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / resolution / properties / direct / maximumAdded value: +9007199254740991 - added
Output schema / properties / resolution / properties / direct / minimumAdded value: +-9007199254740991 - added
Output schema / properties / resolution / properties / summary / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / resolution / properties / summary / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / resolution / properties / summary / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / resolution / properties / transitive / maximumAdded value: +9007199254740991 - added
Output schema / properties / resolution / properties / transitive / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / propertyNamesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / vulnerabilities / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / workspace / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / workspace / properties / modules / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / workspace / properties / modules / items / properties / findings / maximumAdded value: +9007199254740991 - added
Output schema / properties / workspace / properties / modules / items / properties / findings / minimumAdded value: +-9007199254740991 - added
Output schema / properties / workspace / properties / modules / items / properties / summary / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / workspace / properties / modules / items / properties / summary / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / workspace / properties / modules / items / properties / summary / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
check_egovframe_sbom53 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / diff / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / diff / properties / added / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / diff / properties / newVulnerabilities / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / diff / properties / removed / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / diff / properties / statusChanged / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / diff / properties / unchanged / maximumAdded value: +9007199254740991 - added
Output schema / properties / diff / properties / unchanged / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / diff / properties / versionChanged / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / document / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / document / properties / components / maximumAdded value: +9007199254740991 - added
Output schema / properties / document / properties / components / minimumAdded value: +-9007199254740991 - added
Output schema / properties / document / properties / version / maximumAdded value: +9007199254740991 - added
Output schema / properties / document / properties / version / minimumAdded value: +-9007199254740991 - added
Output schema / properties / document / properties / vulnerabilities / maximumAdded value: +9007199254740991 - added
Output schema / properties / document / properties / vulnerabilities / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / minimum / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / minimum / properties / components / maximumAdded value: +9007199254740991 - added
Output schema / properties / minimum / properties / components / minimumAdded value: +-9007199254740991 - added
Output schema / properties / minimum / properties / componentsWithGaps / maximumAdded value: +9007199254740991 - added
Output schema / properties / minimum / properties / componentsWithGaps / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / minimum / properties / elements / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / minimum / properties / elements / items / properties / satisfied / maximumAdded value: +9007199254740991 - added
Output schema / properties / minimum / properties / elements / items / properties / satisfied / minimumAdded value: +-9007199254740991 - added
Output schema / properties / minimum / properties / elements / items / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / minimum / properties / elements / items / properties / total / minimumAdded value: +-9007199254740991 - added
Output schema / properties / minimum / properties / supplierFromCatalog / maximumAdded value: +9007199254740991 - added
Output schema / properties / minimum / properties / supplierFromCatalog / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / recheck / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / recheck / properties / changed / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / recheck / properties / components / maximumAdded value: +9007199254740991 - added
Output schema / properties / recheck / properties / components / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / recheck / properties / osv / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / recheck / properties / osv / properties / ids / maximumAdded value: +9007199254740991 - added
Output schema / properties / recheck / properties / osv / properties / ids / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / recheck / properties / osv / properties / items / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / recheck / properties / summary / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / recheck / properties / summary / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / recheck / properties / summary / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / recheck / properties / unrecorded / maximumAdded value: +9007199254740991 - added
Output schema / properties / recheck / properties / unrecorded / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / vex / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / vex / properties / added / maximumAdded value: +9007199254740991 - added
Output schema / properties / vex / properties / added / minimumAdded value: +-9007199254740991 - added
Output schema / properties / vex / properties / extended / maximumAdded value: +9007199254740991 - added
Output schema / properties / vex / properties / extended / minimumAdded value: +-9007199254740991 - added
Output schema / properties / vex / properties / preserved / maximumAdded value: +9007199254740991 - added
Output schema / properties / vex / properties / preserved / minimumAdded value: +-9007199254740991 - added
Output schema / properties / vex / properties / states / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / vex / properties / states / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / vex / properties / states / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / vex / properties / vulnerabilities / maximumAdded value: +9007199254740991 - added
Output schema / properties / vex / properties / vulnerabilities / minimumAdded value: +-9007199254740991
- Changed
check_egovframe_secure_coding60 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / dataFlowAdded value: +{ + "default": true, + "description": "v1.5: 메서드 안 데이터 흐름 분석 — 요청 값이 SQL·파일 경로·OS 명령·리다이렉트 인자로 들어가면 등급을 올리고(경로를 note·flow·SARIF codeFlows 에), 상수만이면 내리며, 변수를 거친 흐름도 찾음. false 면 v1.4 까지의 패턴 판정만", + "type": "boolean" +} - changed
Output schema / properties / baseline / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / baseline / properties / findings / maximumAdded value: +9007199254740991 - added
Output schema / properties / baseline / properties / findings / minimumAdded value: +-9007199254740991 - added
Output schema / properties / baseline / properties / resolved / maximumAdded value: +9007199254740991 - added
Output schema / properties / baseline / properties / resolved / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / byModule / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / byModule / items / properties / high / maximumAdded value: +9007199254740991 - added
Output schema / properties / byModule / items / properties / high / minimumAdded value: +-9007199254740991 - added
Output schema / properties / byModule / items / properties / low / maximumAdded value: +9007199254740991 - added
Output schema / properties / byModule / items / properties / low / minimumAdded value: +-9007199254740991 - added
Output schema / properties / byModule / items / properties / medium / maximumAdded value: +9007199254740991 - added
Output schema / properties / byModule / items / properties / medium / minimumAdded value: +-9007199254740991 - added
Output schema / properties / byModule / items / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / byModule / items / properties / total / minimumAdded value: +-9007199254740991 - added
Output schema / properties / byOrigin / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / byOrigin / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / byOrigin / propertyNamesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / byRule / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / byRule / items / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / byRule / items / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / byTarget / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / byTarget / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / byTarget / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / dataFlowAdded value: +{ + "additionalProperties": {}, + "properties": { + "constant": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "detected": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "enabled": { + "type": "boolean" + }, + "tainted": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "unknown": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "enabled", + "tainted", + "constant", + "unknown", + "detected" + ], + "type": "object" +} - added
Output schema / properties / filesScanned / maximumAdded value: +9007199254740991 - added
Output schema / properties / filesScanned / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / findings / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / findings / items / properties / column / maximumAdded value: +9007199254740991 - added
Output schema / properties / findings / items / properties / column / minimumAdded value: +-9007199254740991 - added
Output schema / properties / findings / items / properties / cwe / maximumAdded value: +9007199254740991 - added
Output schema / properties / findings / items / properties / cwe / minimumAdded value: +-9007199254740991 - added
Output schema / properties / findings / items / properties / flowAdded value: +{ + "additionalProperties": {}, + "properties": { + "detected": { + "type": "boolean" + }, + "method": { + "type": "string" + }, + "path": { + "items": { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "line": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "step": { + "type": "string" + } + }, + "required": [ + "line", + "code", + "step" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "enum": [ + "tainted", + "constant", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "status", + "method", + "path" + ], + "type": "object" +} - added
Output schema / properties / findings / items / properties / line / maximumAdded value: +9007199254740991 - added
Output schema / properties / findings / items / properties / line / minimumAdded value: +-9007199254740991 - removed
Output schema / properties / findings / items / properties / severity / $refRemoved value: -"#/properties/byRule/items/properties/severity" - added
Output schema / properties / findings / items / properties / severity / enumAdded value: +[ + "high", + "medium", + "low" +] - added
Output schema / properties / findings / items / properties / severity / typeAdded value: +"string" - changed
Output schema / properties / rulesVersion / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / rulesVersion / properties / rules / maximumAdded value: +9007199254740991 - added
Output schema / properties / rulesVersion / properties / rules / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / sarif / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / sarif / properties / results / maximumAdded value: +9007199254740991 - added
Output schema / properties / sarif / properties / results / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / summary / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / summary / properties / high / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / high / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / properties / low / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / low / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / properties / medium / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / medium / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / summary / properties / new / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - added
Output schema / properties / summary / properties / suppressed / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / suppressed / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / total / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / suppressions / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / suppressions / properties / applied / maximumAdded value: +9007199254740991 - added
Output schema / properties / suppressions / properties / applied / minimumAdded value: +-9007199254740991
- Changed
create_egovframe_project1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
diagnose_egovframe_network19 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / env / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / hosts / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / hosts / items / properties / dns / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / hosts / items / properties / dns / properties / addresses / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / hosts / items / properties / dns / properties / addresses / items / properties / family / maximumAdded value: +9007199254740991 - added
Output schema / properties / hosts / items / properties / dns / properties / addresses / items / properties / family / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / hosts / items / properties / http / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / hosts / items / properties / http / properties / status / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Output schema / properties / prescriptions / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / prescriptions / items / properties / commands / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / summary / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / summary / properties / byKind / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / byKind / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / properties / byKind / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / summary / properties / failed / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / failed / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / properties / ok / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / ok / minimumAdded value: +-9007199254740991
- Changed
diagnose_egovframe_project2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / detectedComponents / items / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
explain_egovframe_component1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
generate_agents_md1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
generate_egovframe_ci2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / mavenMirrorAdded value: +{ + "description": "v1.6: 사내 Maven 미러 URL(Nexus·Artifactory 프록시). 빌드 단계는 모든 저장소(*)를 이 미러로 보내는 settings 를 -gs 로 쓰고, 게이트의 CLI 단계는 EGOVFRAME_MAVEN_MIRROR 로 받습니다. Maven 빌드에만 적용", + "pattern": "^https?:\\/\\/[A-Za-z0-9.\\-]+(?::\\d{1,5})?(?:\\/[A-Za-z0-9._~%\\-\\/]*)?$", + "type": "string" +}
- Changed
generate_egovframe_config2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / fields / propertyNamesAdded value: +{ + "type": "string" +}
- Changed
generate_egovframe_crud2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / fields / items / additionalPropertiesRemoved value: -false
- Changed
generate_egovframe_deploy16 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / files / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / files / items / properties / bytes / maximumAdded value: +9007199254740991 - added
Output schema / properties / files / items / properties / bytes / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / profile / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / profile / properties / db / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "database": { - "type": [ - "string", - "null" - ] - }, - "file": { - "type": "string" - }, - "host": { - "type": [ - "string", - "null" - ] - }, - "initScripts": { - "items": { - "type": "string" - }, - "type": "array" - }, - "inject": { - "enum": [ - "env", - "file", - "none" - ], - "type": "string" - }, - "port": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "service": { - "enum": [ - "container", - "external" - ], - "type": "string" - }, - "type": { - "type": "string" - }, - "url": { - "type": [ - "string", - "null" - ] - }, - "user": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "type", - "inject", - "file", - "url", - "user", - "host", - "port", - "database", - "service", - "initScripts" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "database": { + "type": [ + "string", + "null" + ] + }, + "file": { + "type": "string" + }, + "host": { + "type": [ + "string", + "null" + ] + }, + "initScripts": { + "items": { + "type": "string" + }, + "type": "array" + }, + "inject": { + "enum": [ + "env", + "file", + "none" + ], + "type": "string" + }, + "port": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "service": { + "enum": [ + "container", + "external" + ], + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + }, + "user": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "type", + "inject", + "file", + "url", + "user", + "host", + "port", + "database", + "service", + "initScripts" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / profile / properties / port / maximumAdded value: +9007199254740991 - added
Output schema / properties / profile / properties / port / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / unsupported / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / workspace / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / workspace / properties / infra / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / workspace / properties / services / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / workspace / properties / services / items / properties / port / maximumAdded value: +9007199254740991 - added
Output schema / properties / workspace / properties / services / items / properties / port / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / workspace / properties / skipped / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / workspace / properties / unresolved / items / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
generate_egovframe_report105 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / assessment / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / dependencies / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / dependencies / properties / actions / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / dependencies / properties / actions / items / properties / line / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / actions / items / properties / line / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / declared / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / declared / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / findings / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / findings / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / assessment / properties / dependencies / properties / resolution / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / dependencies / properties / resolution / properties / artifacts / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / resolution / properties / artifacts / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / resolution / properties / differs / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / resolution / properties / differs / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / resolution / properties / direct / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / resolution / properties / direct / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / resolution / properties / transitive / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / resolution / properties / transitive / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / summary / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / summary / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / summary / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / assessment / properties / dependencies / properties / transitive / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / transitive / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / assessment / properties / dependencies / properties / vulnerabilities / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / dependencies / properties / vulnerabilities / properties / dependencies / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / vulnerabilities / properties / dependencies / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / vulnerabilities / properties / ids / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / dependencies / properties / vulnerabilities / properties / ids / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / assessment / properties / dependencies / properties / vulnerabilities / properties / items / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / grades / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / grades / properties / migration / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / grades / properties / migration / properties / factors / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / grades / properties / migration / properties / factors / items / properties / points / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / grades / properties / migration / properties / factors / items / properties / points / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / grades / properties / migration / properties / max / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / grades / properties / migration / properties / max / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / grades / properties / migration / properties / score / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / grades / properties / migration / properties / score / minimumAdded value: +-9007199254740991 - removed
Output schema / properties / assessment / properties / grades / properties / supplyChain / $refRemoved value: -"#/properties/assessment/properties/grades/properties/migration" - added
Output schema / properties / assessment / properties / grades / properties / supplyChain / additionalPropertiesAdded value: +{} - added
Output schema / properties / assessment / properties / grades / properties / supplyChain / propertiesAdded value: +{ + "caveats": { + "items": { + "type": "string" + }, + "type": "array" + }, + "factors": { + "items": { + "additionalProperties": {}, + "properties": { + "band": { + "type": "string" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "note": { + "type": "string" + }, + "points": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "label", + "value", + "points", + "band" + ], + "type": "object" + }, + "type": "array" + }, + "grade": { + "enum": [ + "A", + "B", + "C", + "D" + ], + "type": "string" + }, + "max": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "scale": { + "type": "string" + }, + "score": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } +} - added
Output schema / properties / assessment / properties / grades / properties / supplyChain / requiredAdded value: +[ + "grade", + "score", + "max", + "factors", + "scale", + "caveats" +] - added
Output schema / properties / assessment / properties / grades / properties / supplyChain / typeAdded value: +"object" - changed
Output schema / properties / assessment / properties / migration / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / migration / properties / auto / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / auto / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / byKind / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / byKind / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / byKind / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / assessment / properties / migration / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / files / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / items / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / items / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manual / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manual / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manualByKind / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manualByKind / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manualByKind / propertyNamesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / assessment / properties / migration / properties / manualTop / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / migration / properties / manualTop / items / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manualTop / items / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manualTop / items / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manualTop / items / properties / files / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manualTotalGroups / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / manualTotalGroups / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / removedApiRefs / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / migration / properties / removedApiRefs / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / assessment / properties / overview / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / overview / properties / components / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / overview / properties / components / properties / count / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / overview / properties / components / properties / count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / overview / properties / filesScanned / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / overview / properties / filesScanned / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / assessment / properties / overview / properties / java / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / overview / properties / parent / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / rehearsal / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / rehearsal / properties / afterAutomation / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Output schema / properties / assessment / properties / rehearsal / properties / afterPomAlignment / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Output schema / properties / assessment / properties / sbom / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / sbom / properties / components / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / sbom / properties / components / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / assessment / properties / sbom / properties / minimum / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / sbom / properties / vex / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / sbom / properties / vex / properties / states / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / sbom / properties / vex / properties / states / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / sbom / properties / vex / properties / states / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / assessment / properties / sbom / properties / vex / properties / vulnerabilities / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / sbom / properties / vex / properties / vulnerabilities / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / sbom / properties / vulnerabilities / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / sbom / properties / vulnerabilities / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / assessment / properties / security / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / security / properties / checks / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / assessment / properties / security / properties / checks / items / properties / evidence / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / assessment / properties / security / properties / checks / items / properties / evidence / items / properties / line / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / security / properties / checks / items / properties / evidence / items / properties / line / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / security / properties / missing / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / security / properties / missing / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / security / properties / na / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / security / properties / na / minimumAdded value: +-9007199254740991 - added
Output schema / properties / assessment / properties / security / properties / ok / maximumAdded value: +9007199254740991 - added
Output schema / properties / assessment / properties / security / properties / ok / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / assessment / properties / tool / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / bytes / maximumAdded value: +9007199254740991 - added
Output schema / properties / bytes / minimumAdded value: +-9007199254740991
- Changed
generate_egovframe_sbom19 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / bytes / maximumAdded value: +9007199254740991 - added
Output schema / properties / bytes / minimumAdded value: +-9007199254740991 - added
Output schema / properties / components / maximumAdded value: +9007199254740991 - added
Output schema / properties / components / minimumAdded value: +-9007199254740991 - added
Output schema / properties / direct / maximumAdded value: +9007199254740991 - added
Output schema / properties / direct / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / minimum / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / minimum / properties / componentsWithGaps / maximumAdded value: +9007199254740991 - added
Output schema / properties / minimum / properties / componentsWithGaps / minimumAdded value: +-9007199254740991 - added
Output schema / properties / minimum / properties / supplierFromCatalog / maximumAdded value: +9007199254740991 - added
Output schema / properties / minimum / properties / supplierFromCatalog / minimumAdded value: +-9007199254740991 - added
Output schema / properties / statuses / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / statuses / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / statuses / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / transitive / maximumAdded value: +9007199254740991 - added
Output schema / properties / transitive / minimumAdded value: +-9007199254740991 - added
Output schema / properties / vulnerabilities / maximumAdded value: +9007199254740991 - added
Output schema / properties / vulnerabilities / minimumAdded value: +-9007199254740991
- Changed
get_egovframe_guide2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / docIndex / maximumAdded value: +9007199254740991
- Changed
migrate_egovframe_project68 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / applied / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / applied / properties / edits / maximumAdded value: +9007199254740991 - added
Output schema / properties / applied / properties / edits / minimumAdded value: +-9007199254740991 - added
Output schema / properties / applied / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / applied / properties / files / minimumAdded value: +-9007199254740991 - added
Output schema / properties / applied / properties / items / maximumAdded value: +9007199254740991 - added
Output schema / properties / applied / properties / items / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / build / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / build / properties / attemptsAdded value: +{ + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Output schema / properties / build / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / build / properties / errors / minimumAdded value: +-9007199254740991 - added
Output schema / properties / build / properties / failureHintAdded value: +{ + "type": "string" +} - added
Output schema / properties / build / properties / failureKindAdded value: +{ + "enum": [ + "compile", + "test", + "repository-unavailable", + "timeout", + "other" + ], + "type": "string" +} - changed
Output schema / properties / files / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / files / items / properties / edits / maximumAdded value: +9007199254740991 - added
Output schema / properties / files / items / properties / edits / minimumAdded value: +-9007199254740991 - added
Output schema / properties / files / items / properties / items / maximumAdded value: +9007199254740991 - added
Output schema / properties / files / items / properties / items / minimumAdded value: +-9007199254740991 - added
Output schema / properties / filesScanned / maximumAdded value: +9007199254740991 - added
Output schema / properties / filesScanned / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / items / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / items / items / properties / line / maximumAdded value: +9007199254740991 - added
Output schema / properties / items / items / properties / line / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / links / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / links / items / properties / error / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / links / items / properties / error / properties / line / maximumAdded value: +9007199254740991 - added
Output schema / properties / links / items / properties / error / properties / line / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / links / items / properties / itemIndex / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / remaining / $refRemoved value: -"#/properties/summary" - added
Output schema / properties / remaining / additionalPropertiesAdded value: +{} - added
Output schema / properties / remaining / propertiesAdded value: +{ + "auto": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "byKind": { + "additionalProperties": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "files": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "manual": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } +} - added
Output schema / properties / remaining / requiredAdded value: +[ + "auto", + "manual", + "files", + "byKind" +] - added
Output schema / properties / remaining / typeAdded value: +"object" - changed
Output schema / properties / rules / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / skippedManual / maximumAdded value: +9007199254740991 - added
Output schema / properties / skippedManual / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / summary / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / summary / properties / auto / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / auto / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / properties / byKind / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / byKind / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / properties / byKind / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / summary / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / files / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / properties / manual / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / properties / manual / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / unlinked / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / unlinked / items / properties / line / maximumAdded value: +9007199254740991 - added
Output schema / properties / unlinked / items / properties / line / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / update / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / update / properties / changes / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / update / properties / changes / items / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / update / properties / changes / items / properties / files / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / update / properties / components / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "catalogTag": { - "type": "string" - }, - "detected": { - "type": "integer" - }, - "tool": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "detected", - "catalogTag", - "tool" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "catalogTag": { + "type": "string" + }, + "detected": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "tool": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "detected", + "catalogTag", + "tool" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / update / properties / parent / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "kind": { - "type": "string" - }, - "to": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "kind", - "version", - "to" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "kind": { + "type": "string" + }, + "to": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "kind", + "version", + "to" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / update / properties / unreferencedChanges / maximumAdded value: +9007199254740991 - added
Output schema / properties / update / properties / unreferencedChanges / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / worklist / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / worklist / items / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / worklist / items / properties / errors / minimumAdded value: +-9007199254740991 - added
Output schema / properties / worklist / items / properties / index / maximumAdded value: +9007199254740991 - added
Output schema / properties / worklist / items / properties / index / minimumAdded value: +-9007199254740991 - removed
Output schema / properties / worklist / items / properties / item / $refRemoved value: -"#/properties/items/items" - added
Output schema / properties / worklist / items / properties / item / additionalPropertiesAdded value: +{} - added
Output schema / properties / worklist / items / properties / item / propertiesAdded value: +{ + "action": { + "enum": [ + "auto", + "manual" + ], + "type": "string" + }, + "file": { + "type": "string" + }, + "from": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "line": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "reason": { + "type": "string" + }, + "to": { + "type": [ + "string", + "null" + ] + } +} - added
Output schema / properties / worklist / items / properties / item / requiredAdded value: +[ + "file", + "line", + "kind", + "from", + "to", + "action", + "reason" +] - added
Output schema / properties / worklist / items / properties / item / typeAdded value: +"object"
- Changed
prepare_egovframe_delivery15 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / bytes / maximumAdded value: +9007199254740991 - added
Output schema / properties / bytes / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / diff / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / files / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / items / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / items / items / properties / durationMs / maximumAdded value: +9007199254740991 - added
Output schema / properties / items / items / properties / durationMs / minimumAdded value: +-9007199254740991 - added
Output schema / properties / items / items / properties / summary / propertyNamesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / verify / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / verify / properties / manifest / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "createdAt": { - "type": "string" - }, - "files": { - "type": "integer" - }, - "items": { - "type": "integer" - }, - "rootHash": { - "type": "string" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "createdAt", - "tool", - "rootHash", - "files", - "items" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "createdAt": { + "type": "string" + }, + "files": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "rootHash": { + "type": "string" + }, + "tool": { + "type": "string" + } + }, + "required": [ + "createdAt", + "tool", + "rootHash", + "files", + "items" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / verify / properties / mismatched / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / verify / properties / verified / maximumAdded value: +9007199254740991 - added
Output schema / properties / verify / properties / verified / minimumAdded value: +-9007199254740991
- Changed
prepare_egovframe_offline_bundle10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / items / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / items / items / properties / bytes / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Output schema / properties / origin / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / origin / properties / bytes / maximumAdded value: +9007199254740991 - added
Output schema / properties / origin / properties / bytes / minimumAdded value: +-9007199254740991 - added
Output schema / properties / origin / properties / tags / maximumAdded value: +9007199254740991 - added
Output schema / properties / origin / properties / tags / minimumAdded value: +-9007199254740991 - added
Output schema / properties / totalBytes / maximumAdded value: +9007199254740991 - added
Output schema / properties / totalBytes / minimumAdded value: +-9007199254740991
- Changed
reassemble_egovframe_components29 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / actions / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / actions / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / actions / propertyNamesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / components / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / components / items / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / components / items / properties / files / minimumAdded value: +-9007199254740991 - added
Output schema / properties / components / items / properties / summary / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / components / items / properties / summary / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / components / items / properties / summary / propertyNamesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / files / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / origin / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / origin / properties / candidates / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / origin / properties / candidates / items / properties / matched / maximumAdded value: +9007199254740991 - added
Output schema / properties / origin / properties / candidates / items / properties / matched / minimumAdded value: +-9007199254740991 - added
Output schema / properties / origin / properties / candidates / items / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / origin / properties / candidates / items / properties / total / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / summary / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / summary / propertyNamesAdded value: +{ + "type": "string" +} - changed
Output schema / properties / target / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / verify / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / verify / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / verify / properties / errors / minimumAdded value: +-9007199254740991 - added
Output schema / properties / verify / properties / inReassembled / maximumAdded value: +9007199254740991 - added
Output schema / properties / verify / properties / inReassembled / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / worklist / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / worklist / items / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / worklist / items / properties / errors / minimumAdded value: +-9007199254740991
- Changed
rehearse_egovframe_migration94 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / afterAutomation / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / afterAutomation / properties / analysis / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / afterAutomation / properties / analysis / properties / byDirectory / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / afterAutomation / properties / analysis / properties / byDirectory / items / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / byDirectory / items / properties / errors / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / cascade / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / cascade / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / errors / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / files / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / afterAutomation / properties / analysis / properties / linked / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / afterAutomation / properties / analysis / properties / linked / properties / manual / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / linked / properties / manual / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / linked / properties / rules / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / linked / properties / rules / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / linked / properties / unlinked / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / linked / properties / unlinked / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackage / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackage / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / cascade / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / cascade / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / direct / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / direct / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / errors / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / files / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / other / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / other / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / afterAutomation / properties / analysis / properties / topFiles / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / afterAutomation / properties / analysis / properties / topFiles / items / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / afterAutomation / properties / analysis / properties / topFiles / items / properties / errors / minimumAdded value: +-9007199254740991 - added
Output schema / properties / afterAutomation / properties / attemptsAdded value: +{ + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Output schema / properties / afterAutomation / properties / failureHintAdded value: +{ + "type": "string" +} - added
Output schema / properties / afterAutomation / properties / failureKindAdded value: +{ + "enum": [ + "compile", + "test", + "repository-unavailable", + "timeout", + "other" + ], + "type": "string" +} - changed
Output schema / properties / afterPomAlignment / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / afterPomAlignment / properties / analysis / $refRemoved value: -"#/properties/afterAutomation/properties/analysis" - added
Output schema / properties / afterPomAlignment / properties / analysis / additionalPropertiesAdded value: +{} - added
Output schema / properties / afterPomAlignment / properties / analysis / propertiesAdded value: +{ + "byDirectory": { + "items": { + "additionalProperties": {}, + "properties": { + "dir": { + "type": "string" + }, + "errors": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "dir", + "errors" + ], + "type": "object" + }, + "type": "array" + }, + "capped": { + "type": "boolean" + }, + "cascade": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "errors": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "files": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "linked": { + "additionalProperties": {}, + "properties": { + "manual": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "rules": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "unlinked": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "manual", + "rules", + "unlinked" + ], + "type": "object" + }, + "missingPackage": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "missingPackages": { + "items": { + "additionalProperties": {}, + "properties": { + "cascade": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "direct": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "errors": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "files": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "hint": { + "type": [ + "string", + "null" + ] + }, + "package": { + "type": "string" + } + }, + "required": [ + "package", + "direct", + "cascade", + "errors", + "files", + "hint" + ], + "type": "object" + }, + "type": "array" + }, + "other": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "topFiles": { + "items": { + "additionalProperties": {}, + "properties": { + "errors": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "file": { + "type": "string" + }, + "sample": { + "type": "string" + } + }, + "required": [ + "file", + "errors", + "sample" + ], + "type": "object" + }, + "type": "array" + } +} - added
Output schema / properties / afterPomAlignment / properties / analysis / requiredAdded value: +[ + "errors", + "files", + "missingPackage", + "cascade", + "other", + "missingPackages", + "byDirectory", + "linked", + "capped", + "topFiles" +] - added
Output schema / properties / afterPomAlignment / properties / analysis / typeAdded value: +"object" - added
Output schema / properties / afterPomAlignment / properties / attemptsAdded value: +{ + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - removed
Output schema / properties / afterPomAlignment / properties / command / $refRemoved value: -"#/properties/afterAutomation/properties/command" - added
Output schema / properties / afterPomAlignment / properties / command / typeAdded value: +"string" - removed
Output schema / properties / afterPomAlignment / properties / durationMs / $refRemoved value: -"#/properties/afterAutomation/properties/durationMs" - added
Output schema / properties / afterPomAlignment / properties / durationMs / typeAdded value: +"number" - added
Output schema / properties / afterPomAlignment / properties / failureHintAdded value: +{ + "type": "string" +} - added
Output schema / properties / afterPomAlignment / properties / failureKindAdded value: +{ + "enum": [ + "compile", + "test", + "repository-unavailable", + "timeout", + "other" + ], + "type": "string" +} - removed
Output schema / properties / afterPomAlignment / properties / ran / $refRemoved value: -"#/properties/afterAutomation/properties/ran" - added
Output schema / properties / afterPomAlignment / properties / ran / typeAdded value: +"boolean" - removed
Output schema / properties / afterPomAlignment / properties / reason / $refRemoved value: -"#/properties/afterAutomation/properties/reason" - added
Output schema / properties / afterPomAlignment / properties / reason / typeAdded value: +"string" - removed
Output schema / properties / afterPomAlignment / properties / success / $refRemoved value: -"#/properties/afterAutomation/properties/success" - added
Output schema / properties / afterPomAlignment / properties / success / typeAdded value: +[ + "boolean", + "null" +] - removed
Output schema / properties / afterPomAlignment / properties / timedOut / $refRemoved value: -"#/properties/afterAutomation/properties/timedOut" - added
Output schema / properties / afterPomAlignment / properties / timedOut / typeAdded value: +"boolean" - changed
Output schema / properties / migrate / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / migrate / properties / applied / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / migrate / properties / applied / properties / edits / maximumAdded value: +9007199254740991 - added
Output schema / properties / migrate / properties / applied / properties / edits / minimumAdded value: +-9007199254740991 - added
Output schema / properties / migrate / properties / applied / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / migrate / properties / applied / properties / files / minimumAdded value: +-9007199254740991 - added
Output schema / properties / migrate / properties / applied / properties / items / maximumAdded value: +9007199254740991 - added
Output schema / properties / migrate / properties / applied / properties / items / minimumAdded value: +-9007199254740991 - added
Output schema / properties / migrate / properties / byKind / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / migrate / properties / byKind / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / migrate / properties / byKind / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / migrate / properties / manualRemaining / maximumAdded value: +9007199254740991 - added
Output schema / properties / migrate / properties / manualRemaining / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / original / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / original / properties / bytes / maximumAdded value: +9007199254740991 - added
Output schema / properties / original / properties / bytes / minimumAdded value: +-9007199254740991 - added
Output schema / properties / original / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / original / properties / files / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / reassemble / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / reassemble / properties / actions / additionalProperties / maximumAdded value: +9007199254740991 - added
Output schema / properties / reassemble / properties / actions / additionalProperties / minimumAdded value: +-9007199254740991 - added
Output schema / properties / reassemble / properties / actions / propertyNamesAdded value: +{ + "type": "string" +} - added
Output schema / properties / reassemble / properties / components / maximumAdded value: +9007199254740991 - added
Output schema / properties / reassemble / properties / components / minimumAdded value: +-9007199254740991 - added
Output schema / properties / reassemble / properties / worklist / maximumAdded value: +9007199254740991 - added
Output schema / properties / reassemble / properties / worklist / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / steps / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / worklist / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / worklist / items / properties / errors / maximumAdded value: +9007199254740991 - added
Output schema / properties / worklist / items / properties / errors / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / workspace / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / workspace / properties / bytes / maximumAdded value: +9007199254740991 - added
Output schema / properties / workspace / properties / bytes / minimumAdded value: +-9007199254740991 - added
Output schema / properties / workspace / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / workspace / properties / files / minimumAdded value: +-9007199254740991
- Changed
remove_egovframe_components1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
search_egovframe_components1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
search_egovframe_docs1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
sync_egovframe_catalog1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
sync_egovframe_templates1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
test_egovframe_project2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / retryTransientAdded value: +{ + "default": 1, + "description": "원격 저장소 일시 장애(503·연결 끊김)로 실패하면 갱신 인자(-U / --refresh-dependencies)를 붙여 다시 실행할 횟수(0–3). 컴파일·테스트 실패는 다시 실행하지 않음. 기본 1", + "maximum": 3, + "minimum": 0, + "type": "integer" +}
- Changed
upgrade_egovframe_project1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
validate_egovframe_project7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / aiChecks / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / components / items / additionalPropertiesPrevious value: -trueNew value: +{} - added
Output schema / properties / components / items / properties / files / maximumAdded value: +9007199254740991 - added
Output schema / properties / components / items / properties / files / minimumAdded value: +-9007199254740991 - added
Output schema / properties / components / items / properties / missing / maximumAdded value: +9007199254740991 - added
Output schema / properties / components / items / properties / missing / minimumAdded value: +-9007199254740991
2 tool updates
v1.4.0- Changed
generate_egovframe_crud6 fields changed- added
Input schema / properties / ddlAdded value: +{ + "description": "v1.4: CREATE TABLE 문. 컬럼·타입·PRIMARY KEY·NOT NULL·자동 증가(AUTO_INCREMENT·IDENTITY·SERIAL)·COMMENT(또는 COMMENT ON COLUMN)를 읽어 fields 를 만듭니다. COMMENT·DEFAULT 안의 콤마·괄호와 'primary key' 문구에 속지 않습니다. fields 와 함께 줄 수 없음", + "maxLength": 200000, + "type": "string" +} - added
Input schema / properties / dialectAdded value: +{ + "description": "v1.4: ddl 의 DB 방언(oracle·tibero 면 DATE 를 날짜+시각 LocalDateTime 으로)", + "enum": [ + "mysql", + "mariadb", + "postgresql", + "oracle", + "tibero", + "altibase", + "cubrid", + "hsql" + ], + "type": "string" +} - changed
Input schema / properties / fields / descriptionPrevious value: -"테이블 컬럼 정의"New value: +"테이블 컬럼 정의(ddl 과 둘 중 하나)" - added
Input schema / properties / searchAdded value: +{ + "description": "v1.4: 목록 검색 대상 컬럼(문자열 타입). Mapper 에 방언 중립 LIKE(<bind>)와 searchCondition 분기, classic 화면에 검색 조건·이스케이프된 hidden 필드", + "items": { + "type": "string" + }, + "maxItems": 10, + "type": "array" +} - changed
Input schema / properties / tableName / descriptionPrevious value: -"CRUD 대상 테이블명. 단일 SQL 식별자, 예: SAMPLE_BOARD"New value: +"CRUD 대상 테이블명. 단일 SQL 식별자, 예: SAMPLE_BOARD. ddl 을 주면 생략 가능(주면 DDL 의 테이블명과 같아야 함)" - changed
Input schema / requiredPrevious value: -[ - "projectDir", - "tableName", - "basePackage", - "fields" -]New value: +[ + "projectDir", + "basePackage" +]
- Changed
migrate_egovframe_project2 fields changed- changed
Input schema / properties / target / descriptionPrevious value: -"전환 목표. 5.x(기본) = 3.x/4.x → 5.x 전환, 5.0.2 같은 5.0.x = 이미 5.x 인 프로젝트를 그 버전으로 갱신(parent·RTE 버전 auto, 그 사이 바뀐 RTE API·동작 참조 manual, 공통컴포넌트 최신 유지 안내)"New value: +"전환 목표. 5.x(기본) = 3.x/4.x → 5.x 전환, 5.0.2·5.1.0 같은 5.y.z = 이미 5.x 인 프로젝트를 그 버전으로 갱신(parent·RTE 버전 auto, 그 사이 바뀐 RTE API·동작 참조 manual, 공통컴포넌트 최신 유지 안내). 5.1.0 은 저장소 배포 기준(GitHub 태그 없음)" - changed
Input schema / properties / target / patternPrevious value: -"^(5\\.x|5\\.0\\.\\d+)$"New value: +"^(5\\.x|5\\.\\d+\\.\\d+)$"
2 tool updates
v1.2.0- Changed
generate_egovframe_ci1 field changed- added
Input schema / properties / deliveryAdded value: +{ + "default": false, + "description": "v1.1: 게이트 끝에 납품 패키지 단계 추가(deliver --write → egovframe-delivery/ 를 아티팩트로 보관, 실패 항목이 있으면 단계 실패). supplyChain=true 필요", + "type": "boolean" +}
- Added
prepare_egovframe_delivery
3 tool updates
v0.47.0- Changed
check_egovframe_dependencies1 field changed- added
Output schema / properties / workspaceAdded value: +{ + "additionalProperties": true, + "properties": { + "kind": { + "type": "string" + }, + "modules": { + "items": { + "additionalProperties": true, + "properties": { + "buildTool": { + "type": "string" + }, + "dir": { + "type": "string" + }, + "findings": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "summary": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + } + }, + "required": [ + "name", + "dir", + "buildTool", + "findings", + "summary" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "kind", + "modules" + ], + "type": "object" +}
- Changed
check_egovframe_secure_coding4 fields changed- removed
Input schema / properties / top / defaultRemoved value: -40 - changed
Input schema / properties / top / descriptionPrevious value: -"Markdown 상세 항목 수"New value: +"[deprecated 1.0.0 — topN 을 쓰세요, 2.0.0 에서 제거] Markdown 상세 항목 수" - added
Input schema / properties / topNAdded value: +{ + "description": "Markdown 상세 항목 수(기본 40)", + "maximum": 500, + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / byModuleAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "high": { + "type": "integer" + }, + "low": { + "type": "integer" + }, + "medium": { + "type": "integer" + }, + "module": { + "type": "string" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "module", + "high", + "medium", + "low", + "total" + ], + "type": "object" + }, + "type": "array" +}
- Changed
generate_egovframe_deploy2 fields changed- added
Input schema / properties / modulesAdded value: +{ + "description": "멀티 모듈 작업공간에서 일부 서비스만(모듈 이름·경로). 그 서비스가 먼저 띄워야 하는 서비스·인프라는 함께 들어감", + "items": { + "pattern": "^[\\w.\\-\\/]{1,120}$", + "type": "string" + }, + "maxItems": 50, + "type": "array" +} - added
Output schema / properties / workspaceAdded value: +{ + "additionalProperties": true, + "properties": { + "appName": { + "type": "string" + }, + "infra": { + "items": { + "additionalProperties": true, + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "image" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "type": "string" + }, + "services": { + "items": { + "additionalProperties": true, + "properties": { + "dependsOn": { + "items": { + "type": "string" + }, + "type": "array" + }, + "env": { + "items": { + "type": "string" + }, + "type": "array" + }, + "image": { + "type": "string" + }, + "module": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ownDockerfile": { + "type": "boolean" + }, + "port": { + "type": "integer" + }, + "runtime": { + "type": "string" + }, + "web": { + "type": "boolean" + } + }, + "required": [ + "name", + "module", + "runtime", + "port", + "web", + "ownDockerfile", + "image", + "env", + "dependsOn" + ], + "type": "object" + }, + "type": "array" + }, + "skipped": { + "items": { + "additionalProperties": true, + "properties": { + "module": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "module", + "reason" + ], + "type": "object" + }, + "type": "array" + }, + "unresolved": { + "items": { + "additionalProperties": true, + "properties": { + "key": { + "type": "string" + }, + "service": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "service", + "key", + "value" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "kind", + "appName", + "services", + "infra", + "skipped", + "unresolved" + ], + "type": "object" +}
2 tool updates
v0.46.0- Changed
create_egovframe_project1 field changed- added
Input schema / properties / alignParentAdded value: +{ + "default": false, + "description": "true면 생성 직후 pom 의 5.x parent·RTE 버전을 최신 5.0.x(공식 parent 기준)로 맞춤. 기본 false = 공식 템플릿 그대로(Initializr 템플릿은 parent 5.0.0·5.0.1)", + "type": "boolean" +}
- Changed
migrate_egovframe_project5 fields changed- changed
Input schema / properties / target / descriptionPrevious value: -"전환 목표 (현재 5.x 만 지원)"New value: +"전환 목표. 5.x(기본) = 3.x/4.x → 5.x 전환, 5.0.2 같은 5.0.x = 이미 5.x 인 프로젝트를 그 버전으로 갱신(parent·RTE 버전 auto, 그 사이 바뀐 RTE API·동작 참조 manual, 공통컴포넌트 최신 유지 안내)" - removed
Input schema / properties / target / enumRemoved value: -[ - "5.x" -] - added
Input schema / properties / target / patternAdded value: +"^(5\\.x|5\\.0\\.\\d+)$" - removed
Output schema / properties / target / constRemoved value: -"5.x" - added
Output schema / properties / updateAdded value: +{ + "additionalProperties": true, + "properties": { + "changes": { + "items": { + "additionalProperties": true, + "properties": { + "files": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "since": { + "type": "string" + }, + "summary": { + "type": "string" + } + }, + "required": [ + "id", + "since", + "summary", + "files" + ], + "type": "object" + }, + "type": "array" + }, + "components": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "catalogTag": { + "type": "string" + }, + "detected": { + "type": "integer" + }, + "tool": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "detected", + "catalogTag", + "tool" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "from": { + "type": [ + "string", + "null" + ] + }, + "parent": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "kind": { + "type": "string" + }, + "to": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "kind", + "version", + "to" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "to": { + "type": "string" + }, + "unreferencedChanges": { + "type": "integer" + } + }, + "required": [ + "from", + "to", + "parent", + "changes", + "unreferencedChanges", + "components" + ], + "type": "object" +}
8 tool updates
v0.45.0- Changed
check_egovframe_sbom2 fields changed- added
Output schema / properties / document / properties / formatAdded value: +{ + "enum": [ + "cyclonedx", + "spdx" + ], + "type": "string" +} - changed
Output schema / properties / document / requiredPrevious value: -[ - "specVersion", - "serialNumber", - "version", - "timestamp", - "components", - "tools", - "vulnerabilities" -]New value: +[ + "format", + "specVersion", + "serialNumber", + "version", + "timestamp", + "components", + "tools", + "vulnerabilities" +]
- Added
check_egovframe_secure_coding - Changed
generate_egovframe_ci7 fields changed- changed
Input schema / properties / failOn / descriptionPrevious value: -"공급망 게이트의 --fail-on 식"New value: +"공급망 게이트(평가서)의 --fail-on 식" - added
Input schema / properties / npmRegistryAdded value: +{ + "description": "사내 npm 레지스트리 URL(NPM_CONFIG_REGISTRY 로 설정 — npx 가 이 서버를 받는 곳)", + "pattern": "^https?:\\/\\/[A-Za-z0-9.\\-]+(?::\\d{1,5})?(?:\\/[A-Za-z0-9._~%\\-\\/]*)?$", + "type": "string" +} - added
Input schema / properties / offlineBundleAdded value: +{ + "description": "폐쇄망 러너·에이전트에서 본 오프라인 번들 경로(EGOVFRAME_OFFLINE_BUNDLE 로 설정)", + "pattern": "^(?:\\/|[A-Za-z]:[\\\\/])[A-Za-z0-9_.\\/\\\\: -]{0,250}$", + "type": "string" +} - added
Input schema / properties / platformAdded value: +{ + "default": "github", + "description": "CI 플랫폼: github(GitHub Actions, 기본) | gitlab(.gitlab-ci.yml) | jenkins(Jenkinsfile, Declarative)", + "enum": [ + "github", + "gitlab", + "jenkins" + ], + "type": "string" +} - added
Input schema / properties / secureCodingAdded value: +{ + "default": false, + "description": "v0.44: 게이트에 보안약점 점검 단계 추가(secure --fail-on high, SARIF 를 GitHub code scanning 에 업로드·GitLab·Jenkins 는 보관)", + "type": "boolean" +} - added
Input schema / properties / supplierAdded value: +{ + "description": "SBOM 공급자(pom <organization><name> 이 없으면 최소 요소 '공급자'가 빠져 게이트가 실패하므로 지정)", + "pattern": "^[\\p{L}\\p{N}][\\p{L}\\p{N} .,&()_-]{0,99}$", + "type": "string" +} - changed
Input schema / properties / supplyChain / descriptionPrevious value: -"true 면 공급망 게이트 job 추가(v0.39): SBOM 생성 → 전환 준비도 평가서(등급을 PR 요약에) → 아티팩트, failOn 기준 초과 시 실패"New value: +"true 면 공급망 게이트 추가: SBOM 생성 → 최소 요소 점검(--fail-on minimum) → 전환 준비도 평가서(failOn) → 아티팩트"
- Added
generate_egovframe_deploy - Changed
generate_egovframe_report1 field changed- added
Output schema / properties / assessment / properties / rehearsalAdded value: +{ + "additionalProperties": true, + "properties": { + "afterAutomation": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "afterPomAlignment": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "at": { + "type": "string" + }, + "origin": { + "type": [ + "string", + "null" + ] + }, + "projectUnchanged": { + "type": "boolean" + } + }, + "required": [ + "at", + "afterAutomation", + "afterPomAlignment", + "projectUnchanged", + "origin" + ], + "type": "object" +}
- Changed
generate_egovframe_sbom5 fields changed- changed
Input schema / properties / bomFormat / descriptionPrevious value: -"SBOM 형식(현재 CycloneDX JSON)"New value: +"SBOM 형식: cyclonedx-json(CycloneDX 1.6, 기본) | spdx-json(SPDX 2.3 — CycloneDX 로 만든 뒤 변환)" - changed
Input schema / properties / bomFormat / enumPrevious value: -[ - "cyclonedx-json" -]New value: +[ + "cyclonedx-json", + "spdx-json" +] - removed
Input schema / properties / outputPath / defaultRemoved value: -"sbom/bom.cdx.json" - changed
Input schema / properties / outputPath / descriptionPrevious value: -"프로젝트 상대 출력 경로"New value: +"프로젝트 상대 출력 경로(기본 sbom/bom.cdx.json, spdx-json 이면 sbom/bom.spdx.json)" - changed
Output schema / properties / format / enumPrevious value: -[ - "cyclonedx-json" -]New value: +[ + "cyclonedx-json", + "spdx-json" +]
- Added
prepare_egovframe_offline_bundle - Added
rehearse_egovframe_migration
5 tool updates
v0.40.0- Added
check_egovframe_sbom - Changed
generate_egovframe_ci3 fields changed- added
Input schema / properties / failOnAdded value: +{ + "default": "supplyChain:D", + "description": "공급망 게이트의 --fail-on 식", + "pattern": "^(?:(?:migration|supplyChain):[ABCD]|[A-Za-z]+(?:>=?\\d+)?)(?:,(?:(?:migration|supplyChain):[ABCD]|[A-Za-z]+(?:>=?\\d+)?))*$", + "type": "string" +} - added
Input schema / properties / osvAdded value: +{ + "default": true, + "description": "공급망 게이트에서 OSV 취약점 조회(--offline=false)", + "type": "boolean" +} - added
Input schema / properties / supplyChainAdded value: +{ + "default": false, + "description": "true 면 공급망 게이트 job 추가(v0.39): SBOM 생성 → 전환 준비도 평가서(등급을 PR 요약에) → 아티팩트, failOn 기준 초과 시 실패", + "type": "boolean" +}
- Changed
generate_egovframe_report2 fields changed- added
Output schema / properties / assessment / properties / sbom / properties / minimumAdded value: +{ + "additionalProperties": true, + "properties": { + "missing": { + "items": { + "type": "string" + }, + "type": "array" + }, + "verdict": { + "enum": [ + "ready", + "needs-work" + ], + "type": "string" + } + }, + "required": [ + "verdict", + "missing" + ], + "type": "object" +} - added
Output schema / properties / assessment / properties / sbom / properties / vexAdded value: +{ + "additionalProperties": true, + "properties": { + "path": { + "type": "string" + }, + "present": { + "type": "boolean" + }, + "states": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "timestamp": { + "type": "string" + }, + "vulnerabilities": { + "type": "integer" + } + }, + "required": [ + "path", + "present" + ], + "type": "object" +}
- Changed
generate_egovframe_sbom6 fields changed- added
Input schema / properties / authorAdded value: +{ + "description": "SBOM 작성자(metadata.authors) — 없으면 supplier", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / componentNameAdded value: +{ + "description": "주 component 이름 덮어쓰기(기본 artifactId)", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / componentVersionAdded value: +{ + "description": "주 component 버전 덮어쓰기(기본 pom version)", + "maxLength": 100, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / fillSuppliersAdded value: +{ + "description": "공급자가 없는 component 를 공급자 표(catalog/sbom-rules.json)로 보완(egovframe:supplierBasis=catalog) — 기본은 enrich 와 같음", + "type": "boolean" +} - added
Input schema / properties / supplierAdded value: +{ + "description": "공급자(주 component·문서 metadata.supplier) — 없으면 pom <organization><name>", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Output schema / properties / minimumAdded value: +{ + "additionalProperties": true, + "properties": { + "componentsWithGaps": { + "type": "integer" + }, + "missing": { + "items": { + "type": "string" + }, + "type": "array" + }, + "supplierFromCatalog": { + "type": "integer" + }, + "verdict": { + "enum": [ + "ready", + "needs-work" + ], + "type": "string" + } + }, + "required": [ + "verdict", + "missing", + "componentsWithGaps", + "supplierFromCatalog" + ], + "type": "object" +}
- Added
reassemble_egovframe_components
14 tool updates
v0.36.1- Added
build_egovframe_project - Added
check_egovframe_dependencies - Changed
create_egovframe_project1 field changed- changed
Input schema / properties / template / enumPrevious value: -[ - "simple-backend", - "simple-react", - "simple-homepage", - "portal-site", - "enterprise-business", - "web-sample", - "msa-edu" -]New value: +[ + "simple-backend", + "simple-react", + "simple-homepage", + "portal-site", + "enterprise-business", + "web-sample", + "msa-edu", + "msa-common-components", + "mobile-device-api", + "ai-rag", + "web", + "boot-web", + "batch-file-scheduler", + "batch-file-commandline", + "batch-file-web", + "batch-db-scheduler", + "batch-db-commandline", + "batch-db-web", + "mobile-web", + "mobile-common-components", + "msa-portal-backend", + "msa-portal-frontend" +]
- Added
diagnose_egovframe_network - Changed
diagnose_egovframe_project1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "aiLayer": { + "type": "boolean" + }, + "buildSystem": { + "enum": [ + "maven", + "gradle", + "unknown" + ], + "type": "string" + }, + "database": { + "type": [ + "string", + "null" + ] + }, + "detectedComponents": { + "items": { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "matchedPrefix": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "matchedPrefix" + ], + "type": "object" + }, + "type": "array" + }, + "egovVersion": { + "type": [ + "string", + "null" + ] + }, + "hasManifest": { + "type": "boolean" + }, + "isEgovProject": { + "type": "boolean" + }, + "issues": { + "items": { + "type": "string" + }, + "type": "array" + }, + "projectDir": { + "type": "string" + }, + "suggestions": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "projectDir", + "isEgovProject", + "buildSystem", + "egovVersion", + "database", + "detectedComponents", + "aiLayer", + "hasManifest", + "issues", + "suggestions" + ], + "type": "object" +}
- Added
generate_agents_md - Changed
generate_egovframe_ci2 fields changed- changed
Input schema / properties / jdk / descriptionPrevious value: -"JDK 버전 (기본 17)"New value: +"JDK 버전 (기본 17, 숫자·점만 허용)" - added
Input schema / properties / jdk / patternAdded value: +"^[0-9]{1,2}(\\.[0-9]{1,3}){0,2}$"
- Added
generate_egovframe_config - Changed
generate_egovframe_report11 fields changed- added
Input schema / properties / dryRunAdded value: +{ + "default": false, + "description": "true 면 outputPath 가 있어도 쓰지 않고 내용만", + "type": "boolean" +} - added
Input schema / properties / formatAdded value: +{ + "default": "markdown", + "description": "출력 형식(json 은 assessment 데이터 포함)", + "enum": [ + "markdown", + "json" + ], + "type": "string" +} - added
Input schema / properties / offlineAdded value: +{ + "default": true, + "description": "assessment: true(기본)면 네트워크 없이, false 면 OSV 로 알려진 취약점 조회(공급망 등급 확정에 필요)", + "type": "boolean" +} - added
Input schema / properties / outputPathAdded value: +{ + "description": "프로젝트 상대 .md 경로. 주면 새 파일로 저장(기존 파일이 있으면 거부)", + "type": "string" +} - added
Input schema / properties / resolveAdded value: +{ + "default": false, + "description": "assessment: 빌드 도구로 전이 의존성까지 해석해 판정(빌드 도구·저장소 접근 필요)", + "type": "boolean" +} - added
Input schema / properties / resolveScopeAdded value: +{ + "default": "runtime", + "description": "resolve 범위", + "enum": [ + "runtime", + "all" + ], + "type": "string" +} - added
Input schema / properties / resolveTimeoutMsAdded value: +{ + "default": 300000, + "description": "해석 명령 타임아웃(ms)", + "maximum": 1800000, + "minimum": 10000, + "type": "integer" +} - added
Input schema / properties / sbomPathAdded value: +{ + "default": "sbom/bom.cdx.json", + "description": "assessment: 요약할 SBOM 의 프로젝트 상대 경로(없으면 '없음'으로 표시, 생성하지 않음)", + "type": "string" +} - added
Input schema / properties / sectionsAdded value: +{ + "default": [ + "components" + ], + "description": "포함할 절: components(설치 컴포넌트 리포트, 기본) · assessment(전환 준비도 평가서) — 둘 다 주면 이어 붙임", + "items": { + "enum": [ + "components", + "assessment" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / topNAdded value: +{ + "default": 20, + "description": "assessment: 예상 수동 작업 목록 상위 N", + "maximum": 200, + "minimum": 1, + "type": "integer" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "absolutePath": { + "type": "string" + }, + "assessment": { + "additionalProperties": true, + "properties": { + "dependencies": { + "additionalProperties": true, + "properties": { + "actions": { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "artifactId": { + "type": "string" + }, + "baseline": { + "type": [ + "string", + "null" + ] + }, + "basis": { + "type": [ + "string", + "null" + ] + }, + "file": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "line": { + "type": "integer" + }, + "origin": { + "enum": [ + "declared", + "transitive" + ], + "type": "string" + }, + "status": { + "enum": [ + "ok", + "outdated", + "managed", + "legacy", + "replace", + "vendor", + "unknown", + "unversioned" + ], + "type": "string" + }, + "version": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "groupId", + "artifactId", + "version", + "status", + "baseline", + "basis", + "origin", + "file", + "line", + "action" + ], + "type": "object" + }, + "type": "array" + }, + "declared": { + "type": "integer" + }, + "findings": { + "type": "integer" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "offline": { + "type": "boolean" + }, + "osvError": { + "type": "string" + }, + "resolution": { + "additionalProperties": true, + "properties": { + "artifacts": { + "type": "integer" + }, + "differs": { + "type": "integer" + }, + "direct": { + "type": "integer" + }, + "error": { + "type": "string" + }, + "ran": { + "type": "boolean" + }, + "scope": { + "enum": [ + "runtime", + "all" + ], + "type": "string" + }, + "success": { + "type": "boolean" + }, + "transitive": { + "type": "integer" + } + }, + "required": [ + "ran", + "success", + "scope", + "artifacts", + "direct", + "transitive", + "differs" + ], + "type": "object" + }, + "summary": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "transitive": { + "type": "integer" + }, + "unknown": { + "items": { + "type": "string" + }, + "type": "array" + }, + "vendor": { + "items": { + "type": "string" + }, + "type": "array" + }, + "vulnerabilities": { + "additionalProperties": true, + "properties": { + "dependencies": { + "type": "integer" + }, + "ids": { + "type": "integer" + }, + "items": { + "items": { + "additionalProperties": true, + "properties": { + "dependency": { + "type": "string" + }, + "ids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "version": { + "type": "string" + } + }, + "required": [ + "dependency", + "version", + "ids" + ], + "type": "object" + }, + "type": "array" + }, + "queried": { + "type": "boolean" + } + }, + "required": [ + "queried", + "dependencies", + "ids", + "items" + ], + "type": "object" + } + }, + "required": [ + "offline", + "findings", + "declared", + "transitive", + "summary", + "actions", + "unknown", + "vendor", + "vulnerabilities", + "notes" + ], + "type": "object" + }, + "generatedAt": { + "type": "string" + }, + "grades": { + "additionalProperties": true, + "properties": { + "migration": { + "additionalProperties": true, + "properties": { + "caveats": { + "items": { + "type": "string" + }, + "type": "array" + }, + "factors": { + "items": { + "additionalProperties": true, + "properties": { + "band": { + "type": "string" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "note": { + "type": "string" + }, + "points": { + "type": "integer" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "label", + "value", + "points", + "band" + ], + "type": "object" + }, + "type": "array" + }, + "grade": { + "enum": [ + "A", + "B", + "C", + "D" + ], + "type": "string" + }, + "max": { + "type": "integer" + }, + "scale": { + "type": "string" + }, + "score": { + "type": "integer" + } + }, + "required": [ + "grade", + "score", + "max", + "factors", + "scale", + "caveats" + ], + "type": "object" + }, + "supplyChain": { + "$ref": "#/properties/assessment/properties/grades/properties/migration" + } + }, + "required": [ + "migration", + "supplyChain" + ], + "type": "object" + }, + "migration": { + "additionalProperties": true, + "properties": { + "auto": { + "type": "integer" + }, + "byKind": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "files": { + "type": "integer" + }, + "items": { + "type": "integer" + }, + "manual": { + "type": "integer" + }, + "manualByKind": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "manualTop": { + "items": { + "additionalProperties": true, + "properties": { + "count": { + "type": "integer" + }, + "example": { + "type": "string" + }, + "files": { + "type": "integer" + }, + "from": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "to": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "kind", + "from", + "to", + "count", + "files", + "example", + "reason" + ], + "type": "object" + }, + "type": "array" + }, + "manualTotalGroups": { + "type": "integer" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reassemble": { + "items": { + "type": "string" + }, + "type": "array" + }, + "removedApiRefs": { + "type": "integer" + } + }, + "required": [ + "items", + "auto", + "manual", + "files", + "byKind", + "manualByKind", + "reassemble", + "removedApiRefs", + "manualTop", + "manualTotalGroups", + "notes" + ], + "type": "object" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "overview": { + "additionalProperties": true, + "properties": { + "aiLayer": { + "type": "boolean" + }, + "buildSystem": { + "enum": [ + "maven", + "gradle", + "unknown" + ], + "type": "string" + }, + "components": { + "additionalProperties": true, + "properties": { + "count": { + "type": "integer" + }, + "ids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "count", + "ids" + ], + "type": "object" + }, + "database": { + "type": [ + "string", + "null" + ] + }, + "filesScanned": { + "type": "integer" + }, + "hasManifest": { + "type": "boolean" + }, + "isEgovProject": { + "type": "boolean" + }, + "java": { + "additionalProperties": true, + "properties": { + "status": { + "enum": [ + "ok", + "outdated", + "unknown" + ], + "type": "string" + }, + "value": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "value", + "status" + ], + "type": "object" + }, + "parent": { + "additionalProperties": true, + "properties": { + "artifactId": { + "type": [ + "string", + "null" + ] + }, + "groupId": { + "type": [ + "string", + "null" + ] + }, + "kind": { + "enum": [ + "web", + "boot", + "other", + "none" + ], + "type": "string" + }, + "status": { + "enum": [ + "ok", + "outdated", + "n/a" + ], + "type": "string" + }, + "version": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "groupId", + "artifactId", + "version", + "kind", + "status" + ], + "type": "object" + }, + "rteVersion": { + "type": [ + "string", + "null" + ] + }, + "sourceEra": { + "enum": [ + "3.x", + "4.x", + "5.x", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "buildSystem", + "isEgovProject", + "rteVersion", + "sourceEra", + "parent", + "java", + "database", + "components", + "aiLayer", + "hasManifest", + "filesScanned" + ], + "type": "object" + }, + "projectDir": { + "type": "string" + }, + "sbom": { + "additionalProperties": true, + "properties": { + "components": { + "type": "integer" + }, + "note": { + "type": "string" + }, + "path": { + "type": "string" + }, + "present": { + "type": "boolean" + }, + "specVersion": { + "type": "string" + }, + "timestamp": { + "type": "string" + }, + "vulnerabilities": { + "type": "integer" + } + }, + "required": [ + "present", + "path", + "note" + ], + "type": "object" + }, + "security": { + "additionalProperties": true, + "properties": { + "checks": { + "items": { + "additionalProperties": true, + "properties": { + "evidence": { + "items": { + "additionalProperties": true, + "properties": { + "file": { + "type": "string" + }, + "line": { + "type": "integer" + }, + "text": { + "type": "string" + } + }, + "required": [ + "file", + "line", + "text" + ], + "type": "object" + }, + "type": "array" + }, + "hint": { + "type": "string" + }, + "id": { + "type": "string" + }, + "status": { + "enum": [ + "ok", + "missing", + "n/a" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "status", + "evidence", + "hint" + ], + "type": "object" + }, + "type": "array" + }, + "missing": { + "type": "integer" + }, + "na": { + "type": "integer" + }, + "ok": { + "type": "integer" + } + }, + "required": [ + "ok", + "missing", + "na", + "checks" + ], + "type": "object" + }, + "tool": { + "additionalProperties": true, + "properties": { + "baselineSurveyedAt": { + "type": "string" + }, + "name": { + "type": "string" + }, + "rulesSurveyedAt": { + "type": "string" + }, + "rulesTag": { + "type": "string" + }, + "targetRuntime": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "name", + "version", + "rulesTag", + "rulesSurveyedAt", + "baselineSurveyedAt", + "targetRuntime" + ], + "type": "object" + } + }, + "required": [ + "projectDir", + "generatedAt", + "tool", + "overview", + "migration", + "dependencies", + "security", + "sbom", + "grades", + "notes" + ], + "type": "object" + }, + "bytes": { + "type": "integer" + }, + "dryRun": { + "type": "boolean" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "outputPath": { + "type": "string" + }, + "projectDir": { + "type": "string" + }, + "sections": { + "items": { + "enum": [ + "components", + "assessment" + ], + "type": "string" + }, + "type": "array" + }, + "written": { + "type": "boolean" + } + }, + "required": [ + "projectDir", + "sections", + "dryRun", + "written", + "bytes", + "notes" + ], + "type": "object" +}
- Added
generate_egovframe_sbom - Added
migrate_egovframe_project - Added
sync_egovframe_templates - Added
test_egovframe_project - Changed
validate_egovframe_project1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "aiChecks": { + "items": { + "additionalProperties": true, + "properties": { + "componentId": { + "type": "string" + }, + "exists": { + "type": "boolean" + }, + "file": { + "type": "string" + }, + "note": { + "type": "string" + } + }, + "required": [ + "componentId", + "file", + "exists", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "components": { + "items": { + "additionalProperties": true, + "properties": { + "files": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "missing": { + "type": "integer" + }, + "missingSamples": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id", + "files", + "missing", + "missingSamples" + ], + "type": "object" + }, + "type": "array" + }, + "dbScriptDirs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "dbType": { + "type": [ + "string", + "null" + ] + }, + "manifestFound": { + "type": "boolean" + }, + "ok": { + "type": "boolean" + }, + "projectDir": { + "type": "string" + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "projectDir", + "ok", + "manifestFound", + "components", + "dbType", + "dbScriptDirs", + "aiChecks", + "warnings" + ], + "type": "object" +}
3 tool updates
v0.21.0- Added
generate_egovframe_crud - Changed
remove_egovframe_components1 field changed- added
Input schema / properties / forceAdded value: +{ + "default": false, + "description": "사용자 수정·hash 미검증 파일도 remove-backup/에 백업한 뒤 제거", + "type": "boolean" +}
- Added
sync_egovframe_catalog
16 tool updates
v0.19.0- Added
add_ai_components - Added
add_egovframe_components - Added
apply_egovframe_recipe - Changed
create_egovframe_project3 fields changed- added
Input schema / properties / dryRunAdded value: +{ + "default": false, + "description": "true면 디스크에 쓰지 않고 생성 예정 내용만 미리보기", + "type": "boolean" +} - added
Input schema / properties / refAdded value: +{ + "description": "내려받을 브랜치/태그(미지정 시 템플릿 기본 브랜치). 예: main, v4.3.0", + "type": "string" +} - changed
Input schema / properties / template / enumPrevious value: -[ - "simple-backend", - "simple-react" -]New value: +[ + "simple-backend", + "simple-react", + "simple-homepage", + "portal-site", + "enterprise-business", + "web-sample", + "msa-edu" +]
- Added
diagnose_egovframe_project - Added
explain_egovframe_component - Added
generate_egovframe_ci - Added
generate_egovframe_report - Added
get_egovframe_guide - Added
list_egovframe_components - Added
list_egovframe_recipes - Added
remove_egovframe_components - Added
search_egovframe_components - Added
search_egovframe_docs - Added
upgrade_egovframe_project - Added
validate_egovframe_project
2 tool updates
v0.1.0- First observed
create_egovframe_project - First observed
list_egovframe_templates
TDQS
Scored across 39 tools
Most tools target distinct lifecycle actions or artifact types, and the long descriptions clarify the boundaries. A few clusters remain easy to confuse: sync_egovframe_catalog vs sync_egovframe_templates, diagnose_egovframe_project vs validate_egovframe_project, and the various check_* diagnostic tools.
The set overwhelmingly follows a snake_case verb_noun convention with an egovframe infix, producing predictable names like list_egovframe_templates, add_egovframe_components, and generate_egovframe_sbom. Minor deviations exist in add_ai_components and generate_agents_md, which omit the egovframe segment.
With 39 tools, the surface is well past the threshold where a single MCP server becomes hard to navigate and select from quickly. While the eGovFrame lifecycle is broad, several tools are specialized enough that they could be grouped or deferred, and the count itself creates cognitive overhead.
Coverage is unusually broad for the domain: creation, component assembly, migration, dependency and security checks, SBOM, delivery, deployment, database preparation, CI, build, test, and startup verification are all represented. Only minor gaps exist, such as no direct tool for listing installed components or template detail lookup.
Maintenance
Related MCP Connectors
Build Spring Boot applications, ready for coding agents, including best practices.
AI development agent using Kendo UI to rapidly create and style quality web UIs or Pages.
Kickstart development with a customizable TypeScript template featuring sample tools for greeting,…
Deploy and manage Jade Hosting projects from AI clients. Jade account and OAuth required.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables rapid creation of new projects from predefined templates including React, Node.js, Django, Flask, and more. Provides comprehensive project scaffolding with file system operations, template management, and command execution capabilities.-
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to generate standardized code using scaffolding templates, enforce architectural patterns, and validate outputs programmatically. Supports creating projects from boilerplates and adding features to existing codebases while maintaining team conventions.161AGPL 3.0
- AlicenseBqualityBmaintenanceEnables reverse engineering of database tables into Spring Boot projects with AI-enhanced naming and code generation, providing interactive visualizations and workflow orchestration.2987 npm36MIT
- AlicenseAqualityDmaintenanceAI-driven module selection and scaffold generation for hybrid web applications. Enables automatic dependency resolution and project structure creation via natural language queries.4MIT