Skip to main content
Glama
egovframe-scaffold-mcp

egovframe-scaffold-mcp

by EricSeokgon

5.x 전환 리허설 (사본에서 실측)

rehearse_egovframe_migration
Idempotent

Dry-runs eGovFrame 5.x migration on a project copy without modifying the original, then reports compile errors, remaining manual fixes, POM patches, and verifies the source stays unchanged.

Instructions

프로젝트를 건드리지 않고 사본에서 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 면 사본을 남깁니다.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "projectDir": "<projectDir>"
    },
    "name": "rehearse_egovframe_migration"
  }
}

Input Schema

NameRequiredDescriptionDefault
topNNo작업 목록 수
stepsNo실행할 단계(순서는 고정)
formatNo응답 형식markdown
reapplyNo재조립 때 사용자 수정을 3-way 로 다시 적용해 봄(사본에서, 자동·충돌 수를 결과에)
sourceTagNo재조립 원본 태그(기본 auto = 식별)auto
timeoutMsNo컴파일 1회 타임아웃(ms)
componentsNo재조립 대상 컴포넌트 id(기본: 감지된 전부)
projectDirYes프로젝트 디렉터리(절대경로 권장) — 읽기만 함
keepWorkspaceNotrue 면 사본을 지우지 않고 경로를 돌려줌

Output Schema

NameRequiredDescriptionDefault
notesYes
stepsYes
migrateNo
savedToNo
originalYes
worklistYes
buildToolYes
startedAtYes
workspaceYes
projectDirYes
reassembleNo
afterAutomationNo
afterPomAlignmentNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.15.0
    • addedInput schema / properties / reapply
      Added value: +{
      +  "default": false,
      +  "description": "재조립 때 사용자 수정을 3-way 로 다시 적용해 봄(사본에서, 자동·충돌 수를 결과에)",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / reassemble / properties / reapply
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "absorbed": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "binary": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "conflicts": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "reapplied": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "reverted": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "reapplied",
      +    "absorbed",
      +    "conflicts",
      +    "binary",
      +    "reverted"
      +  ],
      +  "type": "object"
      +}
  2. Changed94 schema fields changedv1.6.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedOutput schema / properties / afterAutomation / additionalProperties
      Previous value: -trueNew value: +{}
    • changedOutput schema / properties / afterAutomation / properties / analysis / additionalProperties
      Previous value: -trueNew value: +{}
    • changedOutput schema / properties / afterAutomation / properties / analysis / properties / byDirectory / items / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / byDirectory / items / properties / errors / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / byDirectory / items / properties / errors / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / cascade / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / cascade / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / errors / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / errors / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / files / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / files / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / afterAutomation / properties / analysis / properties / linked / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / linked / properties / manual / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / linked / properties / manual / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / linked / properties / rules / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / linked / properties / rules / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / linked / properties / unlinked / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / linked / properties / unlinked / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackage / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackage / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / cascade / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / cascade / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / direct / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / direct / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / errors / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / errors / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / files / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / missingPackages / items / properties / files / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / other / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / other / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / afterAutomation / properties / analysis / properties / topFiles / items / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / topFiles / items / properties / errors / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / analysis / properties / topFiles / items / properties / errors / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / afterAutomation / properties / attempts
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / afterAutomation / properties / failureHint
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / afterAutomation / properties / failureKind
      Added value: +{
      +  "enum": [
      +    "compile",
      +    "test",
      +    "repository-unavailable",
      +    "timeout",
      +    "other"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / afterPomAlignment / additionalProperties
      Previous value: -trueNew value: +{}
    • removedOutput schema / properties / afterPomAlignment / properties / analysis / $ref
      Removed value: -"#/properties/afterAutomation/properties/analysis"
    • addedOutput schema / properties / afterPomAlignment / properties / analysis / additionalProperties
      Added value: +{}
    • addedOutput schema / properties / afterPomAlignment / properties / analysis / properties
      Added 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"
      +  }
      +}
    • addedOutput schema / properties / afterPomAlignment / properties / analysis / required
      Added value: +[
      +  "errors",
      +  "files",
      +  "missingPackage",
      +  "cascade",
      +  "other",
      +  "missingPackages",
      +  "byDirectory",
      +  "linked",
      +  "capped",
      +  "topFiles"
      +]
    • addedOutput schema / properties / afterPomAlignment / properties / analysis / type
      Added value: +"object"
    • addedOutput schema / properties / afterPomAlignment / properties / attempts
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • removedOutput schema / properties / afterPomAlignment / properties / command / $ref
      Removed value: -"#/properties/afterAutomation/properties/command"
    • addedOutput schema / properties / afterPomAlignment / properties / command / type
      Added value: +"string"
    • removedOutput schema / properties / afterPomAlignment / properties / durationMs / $ref
      Removed value: -"#/properties/afterAutomation/properties/durationMs"
    • addedOutput schema / properties / afterPomAlignment / properties / durationMs / type
      Added value: +"number"
    • addedOutput schema / properties / afterPomAlignment / properties / failureHint
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / afterPomAlignment / properties / failureKind
      Added value: +{
      +  "enum": [
      +    "compile",
      +    "test",
      +    "repository-unavailable",
      +    "timeout",
      +    "other"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / afterPomAlignment / properties / ran / $ref
      Removed value: -"#/properties/afterAutomation/properties/ran"
    • addedOutput schema / properties / afterPomAlignment / properties / ran / type
      Added value: +"boolean"
    • removedOutput schema / properties / afterPomAlignment / properties / reason / $ref
      Removed value: -"#/properties/afterAutomation/properties/reason"
    • addedOutput schema / properties / afterPomAlignment / properties / reason / type
      Added value: +"string"
    • removedOutput schema / properties / afterPomAlignment / properties / success / $ref
      Removed value: -"#/properties/afterAutomation/properties/success"
    • addedOutput schema / properties / afterPomAlignment / properties / success / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / properties / afterPomAlignment / properties / timedOut / $ref
      Removed value: -"#/properties/afterAutomation/properties/timedOut"
    • addedOutput schema / properties / afterPomAlignment / properties / timedOut / type
      Added value: +"boolean"
    • changedOutput schema / properties / migrate / additionalProperties
      Previous value: -trueNew value: +{}
    • changedOutput schema / properties / migrate / properties / applied / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / migrate / properties / applied / properties / edits / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / migrate / properties / applied / properties / edits / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / migrate / properties / applied / properties / files / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / migrate / properties / applied / properties / files / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / migrate / properties / applied / properties / items / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / migrate / properties / applied / properties / items / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / migrate / properties / byKind / additionalProperties / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / migrate / properties / byKind / additionalProperties / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / migrate / properties / byKind / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / migrate / properties / manualRemaining / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / migrate / properties / manualRemaining / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / original / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / original / properties / bytes / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / original / properties / bytes / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / original / properties / files / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / original / properties / files / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / reassemble / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / reassemble / properties / actions / additionalProperties / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / reassemble / properties / actions / additionalProperties / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / reassemble / properties / actions / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / reassemble / properties / components / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / reassemble / properties / components / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / reassemble / properties / worklist / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / reassemble / properties / worklist / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / steps / items / additionalProperties
      Previous value: -trueNew value: +{}
    • changedOutput schema / properties / worklist / items / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / worklist / items / properties / errors / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / worklist / items / properties / errors / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / workspace / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / workspace / properties / bytes / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / workspace / properties / bytes / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / workspace / properties / files / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / workspace / properties / files / minimum
      Added value: +-9007199254740991
  3. Addedv0.45.0

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description explains where the copy lives (EGOVFRAME_CACHE_DIR/rehearsal, excluding build output/VCS/backups), that the original is verified unchanged via before/after directory fingerprints, that compile timeouts are per-run, and that keepWorkspace=true retains the copy. This resolves the apparent tension between a non-read-only tool and a non-destructive one by making clear writes only land in the copy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the opening clause and every sentence carries operational information (step ordering, compiler error counting, pom alignment basis, returned artifacts). It is a single dense paragraph with embedded enumeration, which is readable but heavier than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter tool with an output schema, the description covers what matters: the copy's location and exclusions, the fixed step sequence, the two error snapshots, the returned error/pom-patch/manual-item lists, the fingerprint check, and the workspace-retention flag. Nothing an agent needs in order to call it correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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, setting the baseline at 3. The description adds only marginal meaning — the rationale for reassemble preceding migrate, and that keepWorkspace=true returns a path — while reapply, topN, timeoutMs, format and sourceTag are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource — running a 5.x conversion rehearsal on a copy without touching the project — and the numbered steps (reassemble, migrate, verify/compile, align-pom, recompile) make the scope concrete. It is clearly distinguishable from the real migration sibling by the 'rehearsal / copy only' framing, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: '미리 돌려 봅니다' and '프로젝트를 건드리지 않고' signal this is a pre-flight preview before the real migration, and keepWorkspace=true is described as leaving the copy behind. There is no explicit when-not guidance and no named alternative such as migrate_egovframe_project for the actual conversion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.