Midnight MCP - AI를 활용한 Compact 스마트 컨트랙트 개발
Claude, GitHub Copilot, Cursor 같은 AI 코딩 어시스턴트는 개발자의 코드 작성 방식을 크게 바꿨습니다. 하지만 근본적인 한계가 있습니다. 훈련 데이터에 있는 것만 안다는 점입니다.
Midnight의 스마트 컨트랙트 언어인 Compact은 훈련 데이터에 포함되어 있지 않습니다. AI 어시스턴트에게 Compact 컨트랙트를 작성해 달라고 하면 할루시네이션이 발생합니다. 존재하지 않는 문법을 지어내고, 정의된 적 없는 함수를 참조하며, 컴파일이 안 되는 코드를 생성합니다.
Midnight MCP은 이 문제를 해결합니다.
What is MCP?
Model Context Protocol(MCP)은 AI 어시스턴트가 외부 도구와 데이터 소스에 접근할 수 있게 해주는 개방형 표준입니다. 훈련 데이터에만 의존하지 않고, 실시간 문서 조회, 코드베이스 검색, API 호출이 가능해집니다.
Midnight MCP은 Midnight 개발을 위해 특별히 제작된 MCP 서버입니다. AI 어시스턴트에게 다음을 제공합니다:
- 102개 Midnight 저장소의 인덱싱된 지식
- 코드를 보여주기 전 실제 컴파일러 검증
- 문서와 예제 전반에 걸친 시맨틱 검색
- Compact의 버전 인식 문법 참조
Claude에게 Compact 컨트랙트를 작성해 달라고 하 면, Midnight MCP에 올바른 문법을 쿼리하고, 코드를 생성하고, 실제 컴파일러로 검증한 뒤, 작동하는 코드만 보여줍니다.
The problem with AI-generated Compact code
다음 프롬프트를 생각해 보세요:
"Write a simple counter contract in Compact"
Midnight MCP 없이 AI 어시스턴트는 다음과 같이 생성할 수 있습니다:
contract Counter {
state count: Int = 0;
function increment(): Void {
count = count + 1;
}
}
그럴듯해 보이지만 완전히 틀린 코드입니다:
- Compact은 상태에
state가 아닌ledger를 사용합니다. - Compact에
Int타입은 없습니다.Uint<32>,Field등 특정 타입을 사용합니다. Void는 존재하지 않습니다. Compact은 유닛 타입으로[]를 사용합니다.- 상태 변경에는 위트니스 함수가 필요하며, 직접 할당이 아닙니다.
AI가 Solidity와 비슷하지만 Compact이 아닌 언어를 지어낸 것입니다. Compact에 익숙하지 않은 개발자라면 처음부터 유효하지 않았던 코드를 디버깅하느라 몇 시간을 낭비할 수 있습니다.
Install Midnight MCP
Midnight MCP은 API 키 없이 60초 만에 설치할 수 있습니다. 사용 중인 도구에 맞는 설정을 추가하세요.
Claude Desktop
macOS에서 ~/Library/Application Support/Claude/claude_desktop_config.json을 편집하세요. Midnight MCP을 활성화하기 위해 다음 설정을 추가하세요:
{
"mcpServers": {
"midnight": {
"command": "npx",
"args": ["-y", "midnight-mcp@latest"]
}
}
}
Cursor
프로젝트 루트에 .cursor/mcp.json을 생성하거나 편집하세요. macOS/Linux에서 ~/.cursor/mcp.json으로, Windows에서 %USERPROFILE%\.cursor\mcp.json으로 전역 설정도 가능합니다. 다음 설정을 추가하세요:
{
"mcpServers": {
"midnight": {
"command": "npx",
"args": ["-y", "midnight-mcp@latest"]
}
}
}
VS Code with GitHub Copilot
프로젝트에 .vscode/mcp.json을 생성하거나 편집하세요. Copilot을 Midnight MCP에 연결하기 위해 다음 설정을 추가하세요:
{
"servers": {
"midnight": {
"command": "npx",
"args": ["-y", "midnight-mcp@latest"]
}
}
}
설정을 추가한 후 AI 어시스턴트를 재시작하세요. 이제 29개의 Midnight 전용 도구에 접근할 수 있습니다.
How Midnight MCP works
Midnight MCP은 AI 어시스턴트를 Midnight 생태계에 연결하는 로컬 서버로 동작합니다.

Compact 컨트랙트를 요청하면:
- AI 어시스턴트가
midnight-get-latest-syntax를 호출하여 현재 Compact 문법을 가져옵니다. - 올바른 패턴을 사용하여 코드를 생성합니다.
midnight-compile-contract를 호출하여 실제 컴파일러로 검증합니다.- 컴파일이 실패하면 오류를 읽고, 코드를 수정하고, 재시도합니다.
- 검증된 작동 코드를 받게 됩니다.
이 컴파일-검증-수정 루프는 자동으로 이루어집니다. 깨진 중간 버전은 보이지 않습니다.
Real compiler integration
대부분의 코드 생성 도구는 패턴 매칭에 의존하고 결과가 맞기를 바랄 뿐입니다. Midnight MCP은 호스팅된 실제 Compact 컴파일러로 코드를 검증합니다.
컴파일러는 정적 분석으로는 잡을 수 없는 오류를 포착합니다:
- 타입 불일치:
Uint<64>가 필요한 곳에Field를 사용하는 경우 - 봉인 필드 위반: 봉인된 상태에 잘못 접근하는 경우
- 공개 규칙 오류: 프라이버시 어노테이션이 누락되거나 잘못된 경우
- 미정의 식별자: 정의되지 않은 변수나 타입을 참조하는 경우
컴파일러가 오류를 반환하면 정확한 줄 번호와 열이 포함됩니다:
success: false
message: "Line 12:8 - unbound identifier 'totalSupply'"
errorDetails:
line: 12
column: 8
errorType: error
AI 어시스턴트는 이 정보를 사용하여 코드를 수정하고 재시도합니다.
Graceful fallback
호스팅된 컴파일러를 사용할 수 없는 경우, Midnight MCP은 정적 분석으로 대체합니다. 응답에 어떤 검증 방식이 사용되었는지 표시됩니다:
validationType: "compiler" # 실제 컴파일러 검증
validationType: "static-analysis-fallback" # 컴파일러 사용 불가
어떤 상황에서든 검증 결과를 받을 수 있으며, 도구가 조용히 실패하는 일은 없습니다.
Semantic search across 102 repositories
현재 Midnight MCP은 Midnight 생태계의 아카이브되지 않은 저장소를 모두 인덱싱합니다:
midnightntwrk의 88개 저장소 전체.- OpenZeppelin 컨트랙트와 해커톤 수상작을 포함한 14개의 커뮤니티 및 파트너 저장소.
키워드가 아닌 시맨틱 검색 방식입니다. 예를 들어 "find code that handles shielded transactions" 같은 프롬프트는 해당 단어가 코드에 정확히 나타나지 않더라도 관련 결과를 반환합니다.
Prompt: "How do I implement a token with transfer limits?"
midnight-search-compact returns:
- midnight-examples의 토큰 컨트랙트 예제
- 커뮤니티 저장소의 속도 제한 패턴
- 관련 문서 섹션
29 tools for Midnight development
Midnight MCP은 기능별로 정리된 29개의 도구를 제공합니다.
Search tools
Midnight 생태계 전반에서 코드, 문서, 예제를 찾는 데 사용하세요.
| Tool | Purpose |
|---|---|
midnight-search-compact | 인덱싱된 저장소 전반에서 Compact 언어 코드 검색 |
midnight-search-docs | 공식 Midnight 문서 검색 |
midnight-search-typescript | TypeScript SDK 구현 검색 |
midnight-fetch-docs | docs.midnight.network에서 실시간 문서 가져오기 |
Analysis tools
Compact 컨트랙트를 검증, 분석, 리뷰하는 데 사용하세요.
| Tool | Purpose |
|---|---|
midnight-compile-contract | 실제 Compact 컴파일러로 코드 검증 |
midnight-analyze-contract | 15가지 정적 보안 검사 실행 |
midnight-review-contract | AI 기반 보안 리뷰 |
midnight-extract-contract-structure | 컨트랙트 구조 및 내보내기 파싱 |
Generation tools
새 컨트랙트와 문서를 생성하는 데 사용하세요.
| Tool | Purpose |
|---|---|
midnight-generate-contract | 자연어 설명에서 컨트랙트 생성 |
midnight-document-contract | Markdown 또는 JSDoc 형식으로 문서 생성 |
Repository tools
Midnight 저장소의 파일과 문법 참조에 접근하는 데 사용하세요.
| Tool | Purpose |
|---|---|
midnight-get-file | 인덱싱된 Midnight 저장소에서 파일 가져오기 |
midnight-get-file-at-version | 특정 버전의 파일 내용 가져오기 |
midnight-compare-syntax | Compact 버전 간 문법 비교 |
midnight-get-latest-syntax | 현재 Compact 문법 참조 |
midnight-get-repo-context | 코딩 시작에 필요한 모든 것 (복합 도구) |
midnight-list-examples | 사용 가능한 예제 컨트랙트 목록 |
Version management tools
업그레이드를 관리하고 Compact 버전 간 변경 사항을 추적하는 데 사용하세요.
| Tool | Purpose |
|---|---|
midnight-upgrade-check | 전체 업그레이드 분석 (복합 도구) |
midnight-check-breaking-changes | 버전 간 호환성 깨짐 변경 식별 |
midnight-get-migration-guide | 단계별 마이그레이션 안내 |
Resources and prompts
도구 외에도 Midnight MCP은 9개의 내장 리소스와 5개의 대화형 프롬프트를 제공합니다.
_리소스_는 문법과 예제에 빠르게 접근할 수 있는 항상 사용 가능한 참조입니다:
midnight://syntax/latest 현재 Compact 문법
midnight://examples/counter 카운터 컨트랙트 예제
midnight://examples/token 토큰 컨트랙트 예제
midnight://docs/compact Compact 언어 참조
_프롬프트_는 특정 워크플로우를 안내하는 일반 작업용 템플릿입니다:
create-compact-contract 새 컨트랙트 시작
debug-compact-error 컴파일 오류 수정
security-review 전체 보안 감사
compare-compact-versions 마이그레이션 지원
Architecture
Midnight MCP은 신뢰성을 위해 설계되었습니다:
- 토큰 효율성: 기본적으로 YAML 출력 (JSON 대비 20-30% 적은 토큰)
- 복합 도구: 여러 작업을 결합하는 단일 호출
- 우아한 성능 저하: 서비스를 사용할 수 없을 때 캐시 데이터로 대체
- 진행 알림: 장시간 작업 중 실시간 업데이트
코드베이스는 10개 테스트 스위트에 걸친 206개 테스트로 완전히 테스트되 어 있습니다.
What's next
Midnight MCP은 오픈소스이며 활발히 개발 중입니다. 로드맵은 다음과 같습니다:
- 컴파일러 결과에서 전체 ZK 서킷 출력 파싱.
- AI 채팅에서 직접 컨트랙트 배포.
- 자동 프루버 코드 생성을 위한 TypeScript SDK 통합.
- 잔액 조회 및 트랜잭션 제출을 위한 로컬 devnet 상호작용.
Learn more
소스 코드를 탐색하고 기여하세요:
-> npm package
Midnight MCP은 커뮤니티 프로젝트입니다. 기여, 이슈 등록, 기능 요청을 환영합니다.