SC2 Map Editor MCP
SC2 Map Editor MCP
MCP 서버로서, 코딩 에이전트가 Galaxy Editor UI를 구동하는 대신 파일 내용을 직접 조작하여 StarCraft II 맵과 모드를 검사하고 편집할 수 있게 해주는 서버입니다.
상태: 프리릴리스. PLAN.md의 대부분이 구현되어 있으며, 미구현 부분은 숨기지 않고 명시적으로 기술되어 있습니다. 현재 기능을 읽거나 실행 중인 서버에 sc2_get_server_info로 질문하십시오 — 그것이 특정 빌드와 시스템에 대한 결정적 답변입니다.
현재 기능
서버는 sc2_get_server_info를 통해 이를 자체적으로 보고합니다 — 그것이 실행 중인 빌드에 대한 결정적 답변입니다. 현재로서는:
하위 시스템 | 읽기 | 쓰기 | 비고 |
작업 공간 스테이징 | ✅ | ✅ | 압축 해제된 문서 디렉터리만 해당 |
구성 요소 인벤토리 | ✅ | ⚠️ |
|
GameData 카탈로그 | ✅ | ✅ | 검색, 검사, 상속 해석, 참조 찾기, 패치/복제/생성/삭제. 자신의 문서에서만 — 종속성은 로드되지 않음 |
MPQ 아카이브 ( | ✅ | ✅ | 실제 래더 맵에서 바이트 단위로 동일한 왕복이 가능하며, 여기에서 압축한 맵은 에디터에서 열림 — docs/native-helper.md 참조 |
Galaxy 스크립트 | ✅ | ✅ | 파싱, 심볼, 구문 진단, 안전한 텍스트 패치. 유형 검사 없음 — 게임의 네이티브가 필요. 벤더링된 툴킷을 빌드해야 함 |
트리거 | ✅ | ⚠️ | 구조, 이름, 검색. 이름 변경만 — 구조적 편집은 의도적으로 구현하지 않음 |
지역화 | ✅ | ✅ | 텍스트 테이블, BOM과 CRLF를 정확히 보존 |
SC2Layout | ❌ | ❌ | 10단계 |
배치된 객체 / 지역 | ✅ | ✅ | 둘 다 XML이며 바이너리가 아님. 배치, 이동, 삭제 — 에디터를 통해 왕복됨. 지형 높이는 참조하지 않음 |
지형 | ⚠️ | ❌ | 설명자만 해당(타일 세트, 크기, 절벽 세트). 대량 데이터는 매직/버전/크기로 보고되며, 디코딩되지 않음 |
에디터 실행 | ✅ | n/a | Galaxy Editor에서 문서를 열고 로그를 읽음. 자동 테스트 맵 실행은 제공되지 않음 — 검증된 안정적인 메커니즘 없음 |
미구현 부분이 왜 그 위치에 있는지, 그리고 각 행에서 "⚠️"이 무엇을 의미하는지: docs/capabilities.md.
압축된 아카이브는 종단 간(end-to-end)으로 작동합니다: .SC2Map에서 열린 기존 맵을 여기에서 확장하고, 여기에서 다시 압축한 다음 Galaxy Editor에서 열면 실제 문서로 로드되며, 에디터는 추가된 카탈로그를 이름으로 해석합니다. 네이티브 헬퍼를 빌드하려면 C++ 툴체인과 Windows SDK가 필요합니다
(scripts/build-native.ps1). 이것이 없으면 capabilities.mpq가 false를 보고하고, 압축된 아카이브는 명확한 오류와 함께 거부됩니다.
종속성: 로컬 것은 로드되고, Blizzard의 것은 로드되지 않습니다. 맵 옆에 있는 .SC2Mod 디렉터리는 인덱싱되며, 그 객체는 상속 및 참조에 사용될 수 있습니다 — 읽기 전용입니다. 이 서버는 종속성 아카이브를 절대 수정하지 않기 때문입니다. Blizzard의 기본 모드는 설치 폴더의 CASC 저장소 안에 있으며, 이 빌드는 그것을 읽을 수 없습니다. 그것은 맵이 손상된 것과는 전혀 다르기 때문에 '누락'이 아닌 in-casc로 보고됩니다.
도구
도구 | 읽기 전용 | 용도 |
| 예 | 버전, 구성, 기능 매트릭스, 제한 사항 |
| 예 | 디스크를 검사하지 않고 StarCraft II 찾기 |
| 아니요 | 문서를 스테이징하고 |
| 예 | 종류, 개수, 구성 요소, 의존성, 진단, 알려진 결함 |
| 예 | 재연결 후 |
| 예 |
|
| 예 | 이름, 작성자, 모드 유형, 아이콘, 스크린샷, 의존성 |
| 예 | 해석 순서대로 의존성 체인 |
| 예 | 구성 요소 유형 코드 참조 표 |
| 예 | 존재하는 카탈로그 도메인 및 항목 수 |
| 예 | ID로 카탈로그 개체 검색, 도메인으로 필터링 |
| 예 | 한 개체의 고유 선언과 원문 XML |
| 예 | 상속을 포함한 최종 값과 각 값의 출처 |
| 예 | 개체를 참조하는 항목과 공유 여부 |
| 아니요 | 경로별 필드 수준 편집, 공유 개체 경고 포함 |
| 아니요 | 개체를 새 ID로 바이트 단위 복사 |
| 아니요 | 새 개체 추가, 가능하면 부모 포함 |
| 아니요 | 개체 제거; 참조 중이면 거부 |
| 예 | 존재하는 로캘 및 텍스트 테이블 |
| 예 | 키 또는 값으로 텍스트 테이블 검색 |
| 예 | 지역화된 문자열 하나 읽기 |
| 아니요 | 지역화된 문자열 생성 또는 업데이트 |
| 아니요 | 지역화된 문자열 제거 |
| 아니요 | 키 또는 로캘 간 문자열 복사 |
| 예 | 표시 이름이 없는 카탈로그 개체 |
| 아니요 | Galaxy Editor에서 문서를 열어 로드 확인 |
| 예 | 편집기 자체 로그 나열 또는 읽기 |
| 예 | 레지스트리를 통해 확인된 사용자 Maps 폴더 |
| 예 | 문서의 스크립트; 생성된 MapScript 표시 |
| 예 | 스크립트 읽기, 선택적으로 줄 범위 지정 |
| 예 | 함수, 변수, 구조체, 포함 파일 |
| 예 | 줄 및 열이 포함된 구문 오류 |
| 아니요 | 정확한 텍스트 편집, 파싱을 깨면 거부 |
| 아니요 | 라이브러리 추가, 먼저 구문 검사 |
| 예 | 이름이 확인된 트리거 트리 |
| 예 | 한 요소: 유형, 이름, 내용, 참조자, 원시 XML |
| 예 | 이름으로 트리거 요소 찾기 |
| 아니요 | 요소 이름 바꾸기 (TriggerStrings만 수정) |
| 예 | 맵의 유닛, doodad, 지점 |
| 아니요 | 다음 사용 가능한 ID로 유닛, doodad 또는 지점 배치 |
| 아니요 | 배치된 개체 이동, 회전 또는 크기 조정 |
| 아니요 | 배치된 개체 제거 |
| 예 | 모양이 포함된 지역 |
| 아니요 | 다음 사용 가능한 ID로 지역 추가 |
| 아니요 | 지역 이동 또는 이름 바꾸기 |
| 아니요 | 지역 제거 |
| 아니요 | 의존성 추가; 이후 항목이 로드 순서에서 우선 |
| 아니요 |
|
| 아니요 |
|
| 예 | 지형 설명자와 바이너리 구성 요소 헤더 |
| 아니요 | 이름, 능력치, 자체 무기를 가진 유닛 복제 |
| 아니요 | 공유하는 다른 유닛에 영향을 주지 않고 한 유닛의 피해량 변경 |
| 아니요 | 공유 개체의 소유자 한 명에게 전용 사본 부여 |
| 예 | 이 편집이 소유자 한 명을 넘어 영향을 미칠까? |
| 예 | 이 빌드가 가진 모든 검사를 카테고리별로, 검사되지 않은 항목도 명시 |
| 아니요 | 백업 및 사전 점검과 함께 스테이징 문서를 기록 |
| 예 | 소스 또는 스냅샷과의 통합 diff |
| 예 | 각 변경 전에 찍은 스냅샷이 포함된 변경 내역 |
| 아니요 | 가장 최근 변경 실행 취소 |
| 아니요 | 알려진 정상 상태 고정 |
| 예 | 워크스페이스에 보관된 스냅샷 |
| 아니요 | 스테이징 트리를 스냅샷으로 되돌리기 |
| 예 | 스테이징 트리의 페이지별 목록 |
| 예 | 스테이징 파일 하나 읽기 (텍스트, 또는 바이너리는 base64) |
| 예 | 스테이징 텍스트 파일 전체에서 리터럴 부분 문자열 검색 |
| 아니요 | 스테이징 복사본 삭제; 소스는 그대로 |
안전 모델
이 프로그램은 언어 모델의 지시에 따라 맵을 편집하므로 기본값은 보수적입니다:
소스는 절대 수정되지 않습니다.
sc2_open_document는 문서를 서버 소유의 스테이징 디렉터리에 복사합니다. 모든 편집은 그곳에 적용됩니다.sc2_commit_document만이 그곳에서 데이터가 나갈 수 있는 유일한 방법이며, 검증 오류, 작업 중 소스 변경, 대상 위치 점유라는 세 가지 독립적인 사유로 거부합니다. 각각은 별도로 면제되어야 합니다.경로는 허용 목록에 포함된 것만 사용할 수 있습니다.
allowedRoots밖의 항목은 읽거나 쓸 수 없습니다. 경로는 먼저 정규화되므로 심볼릭 링크로 벗어날 수 없습니다.셸을 실행하지 않습니다. 외부 프로그램은 인자 배열, 제한 시간, 정리된 환경으로 생성됩니다. "명령 실행" 도구는 없습니다.
구현되지 않음은 구현되지 않음입니다. 기능 플래그는 코드가 존재하고 그리고 해당 백엔드가 이 머신에 있을 때만
true입니다. 서버는 추측하기보다 할 수 없다고 말하는 것을 선택합니다.공유 개체는 실수로 편집되지 않습니다. 스무 유닛이 하나의 무기를 공유합니다. "이 유닛의 피해량" 변경을 요청하면 체인을 복제하고 그 유닛만 다시 연결하며 무엇을 복사했는지 정확히 알려줍니다. 명시적으로 공유 원본을 수정하도록 요청하지 않는 한 말입니다.
편집은 무손실, 미리 보기 가능, 되돌릴 수 있습니다. XML 변경은 정확한 바이트 범위를 이어 붙이므로 편집 외부의 모든 것(주석, 속성 순서, CRLF 줄 끝, 파일이 줄바꿈으로 끝나는지 여부)이 동일하게 유지됩니다. 모든 변경은 먼저 스냅샷을 찍고,
dry_run을 지원하며, 통합 diff를 생성하고, 어떤 부분이라도 실패하면 완전히 롤백하며, 이후 되돌릴 수 있습니다.
요구 사항
Node.js 22 이상 (26으로 개발됨)
pnpm 10
StarCraft II 자체와 관련된 모든 작업에는 Windows가 필요합니다. 핵심은 크로스 플랫폼이지만 편집기 통합은 그렇지 않습니다.
시작하기
pnpm installpnpm run verifyverify는 린트, 타입 검사, 빌드, 전체 테스트 스위트를 실행합니다. 여기에는 빌드된 서버를 실제 자식 프로세스로 생성하고 stdio를 통해 MCP로 통신하는 통합 테스트도 포함됩니다.
패킹된 .SC2Map 아카이브를 읽거나 쓰려면 sc2mpq 사이드카도 필요합니다. 이는 배포되지 않고 빌드되는 네이티브 바이너리이며, 커밋된 바이너리는 빌드 머신의 경로를 포함하게 됩니다. 고정된 StormLib을 가져와 컴파일하세요:
pwsh scripts/bootstrap.ps1 -Only StormLibpwsh scripts/build-native.ps1이 작업에는 CMake, MSVC 툴셋 및 Windows SDK가 필요합니다. docs/native-helper.md를 참조하세요. 이 문서는 이것들이 없으면 무엇이 실패하는지 설명합니다. 이를 건너뛰어도 패킹된 아카이브 지원을 제외한 모든 것이 정상 작동합니다. capabilities.mpq는 단순히 false를 보고합니다.
구성 파일을 생성하세요 (docs/configuration.md 참조):
node apps/sc2-mcp-server/dist/main.js doctordoctor는 해석된 구성, 감지된 StarCraft II 설치, 기능 매트릭스를 출력합니다. 서버가 유용한 작업을 수행할 수 없는 경우(예: 허용된 루트가 구성되지 않은 경우) 0이 아닌 종료 코드로 종료됩니다.
MCP 클라이언트 연결
서버는 stdio를 통해 MCP를 사용합니다. 클라이언트를 빌드된 진입점으로 지정하세요:
{
"mcpServers": {
"sc2": {
"command": "node",
"args": ["C:\\path\\to\\SC2EditorMCP\\apps\\sc2-mcp-server\\dist\\main.js"],
"env": {
"SC2MCP_ALLOWED_ROOTS": "C:\\Users\\me\\OneDrive\\Documents\\StarCraft II\\Maps"
}
}
}
}저장소 구조
apps/sc2-mcp-server/ MCP protocol layer: tools, schemas, error translation, stdio entry
packages/sc2-core/ Domain layer: config, path guard, workspace staging, MPQ adapter
packages/sc2-test-utils/ Test fixtures and temp-directory helpers
native/sc2mpq/ C++ MPQ sidecar (StormLib), built separately
docs/ capabilities.md, sc2-formats.md, native-helper.md, galaxy.md
docs/adr/ Architecture decision records
vendor/PINS.json Pinned upstream sources (checkouts are gitignored)
scripts/ bootstrap.ps1 (fetch pins), build-native.ps1 (build the sidecar)
tests/ Cross-package integration tests계층 규칙(PLAN.md §4): 도구 핸들러는 입력을 검증하고 도메인 서비스를 호출한 뒤 결과를 변환합니다. SC2 파싱은 도구 핸들러에 존재하지 않습니다.
라이선스 및 콘텐츠
MIT — LICENSE 참조. 상표 및 타사 고지 사항은 NOTICE.md에 있습니다. 이 프로젝트는 Blizzard Entertainment와 제휴하거나 보증하지 않습니다.
이 저장소에는 Blizzard 자산, 추출된 게임 데이터 또는 저작권이 있는 맵 콘텐츠가 포함되어 있지 않으며 앞으로도 포함되지 않을 것입니다. 테스트 픽스처는 프로젝트에서 작성한 자리 표시자로, 스테이징 및 트랜잭션 메커니즘을 테스트하는 데는 유용하지만 형식 파서를 검증하는 데는 쓸모없습니다. 파서는 실제 편집기 출력으로 확인해야 합니다.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
An MCP server for deep research or task groups
MCP Server for JFrog, providing tools for development and artifact management.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/erivgout/sc2-map-editor-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server