Skip to main content
For the complete documentation index, see llms.txt

Midnight MCP: AI-assisted development for Compact smart contracts

Claude, GitHub Copilot, Cursor 같은 AI 코딩 어시스턴트는 개발자가 코드를 작성하는 방식을 크게 바꿔 놓았습니다. 다만 근본적인 한계가 있습니다. 학습 데이터에 포함된 내용만 알고 있다는 점입니다.

Midnight의 스마트 컨트랙트 언어인 Compact은 그 학습 데이터에 포함되어 있지 않습니다. AI 어시스턴트에게 Compact 컨트랙트 작성을 요청하면 할루시네이션이 발생합니다. 존재하지 않는 문법을 지어내고, 정의된 적 없는 함수를 참조하며, 컴파일이 되지 않는 코드를 만들어 냅니다.

Midnight MCP은 이 문제를 해결합니다.

What is MCP?

Model Context Protocol(MCP)은 AI 어시스턴트가 외부 도구와 데이터 소스에 접근할 수 있도록 정의된 개방형 표준입니다. 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에서는 유닛 타입으로 []를 사용합니다.
  • 상태 변경은 직접 할당이 아니라 위트니스(witness) 함수를 통해 이루어져야 합니다.

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 생태계에 연결하는 로컬 서버로 동작합니다.

Midnight MCP Architecture

Compact 컨트랙트를 요청하면 다음과 같이 동작합니다.

  1. AI 어시스턴트가 midnight-get-latest-syntax를 호출해 현재 Compact 문법을 가져옵니다.
  2. 올바른 패턴을 사용해 코드를 생성합니다.
  3. midnight-compile-contract를 호출해 실제 컴파일러로 검증합니다.
  4. 컴파일이 실패하면 오류를 분석해 코드를 수정한 뒤 다시 시도합니다.
  5. 검증이 끝난 정상 동작 코드를 사용자에게 보여 줍니다.

이 컴파일-검증-수정 루프는 자동으로 진행되며, 중간에 깨진 버전은 사용자에게 노출되지 않습니다.

Real compiler integration

대부분의 코드 생성 도구는 패턴 매칭에 의존하고 결과가 맞기를 기대할 뿐입니다. Midnight MCP은 호스팅된 실제 Compact 컴파일러로 코드를 검증합니다.

컴파일러는 정적 분석으로는 잡아내기 어려운 다음과 같은 오류를 감지합니다.

  • 타입 불일치: Uint<64>가 필요한 자리에 Field를 사용하는 경우
  • 봉인 필드 위반: 봉인된 상태에 잘못된 방식으로 접근하는 경우
  • Disclose 규칙 오류: 프라이버시 어노테이션이 누락되거나 잘못 작성된 경우
  • 미정의 식별자: 정의되지 않은 변수나 타입을 참조하는 경우

컴파일러가 오류를 반환하면 응답에 정확한 줄 번호와 열 번호가 포함됩니다.

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 생태계 전반에서 코드, 문서, 예제를 찾을 때 사용합니다.

ToolPurpose
midnight-search-compact인덱싱된 저장소 전반에서 Compact 언어 코드 검색
midnight-search-docs공식 Midnight 문서 검색
midnight-search-typescriptTypeScript SDK 구현 검색
midnight-fetch-docs라이브 문서 사이트 콘텐츠 가져오기

Analysis tools

Compact 컨트랙트를 검증, 분석, 리뷰할 때 사용합니다.

ToolPurpose
midnight-compile-contract실제 Compact 컴파일러로 코드 검증
midnight-analyze-contract15가지 정적 보안 검사 실행
midnight-review-contractAI 기반 보안 리뷰
midnight-extract-contract-structure컨트랙트 구조와 export 파싱

Generation tools

새 컨트랙트와 문서를 만들 때 사용합니다.

ToolPurpose
midnight-generate-contract자연어 설명으로부터 컨트랙트 생성
midnight-document-contractMarkdown 또는 JSDoc 형식으로 문서 생성

Repository tools

Midnight 저장소의 파일과 문법 참조에 접근할 때 사용합니다.

ToolPurpose
midnight-get-file인덱싱된 Midnight 저장소에서 파일 가져오기
midnight-get-file-at-version특정 버전의 파일 내용 가져오기
midnight-compare-syntaxCompact 버전 간 문법 비교
midnight-get-latest-syntax현재 Compact 문법 참조
midnight-get-repo-context코딩에 필요한 모든 정보 제공(복합 도구)
midnight-list-examples사용 가능한 예제 컨트랙트 목록

Version management tools

업그레이드를 관리하고 Compact 버전 간 변경 사항을 추적할 때 사용합니다.

ToolPurpose
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 채팅에서 직접 컨트랙트 배포
  • 자동 prover 코드 생성을 위한 TypeScript SDK 통합
  • 잔액 조회와 트랜잭션 제출을 위한 로컬 devnet 연동

Learn more

소스 코드를 살펴보고 기여해 보세요.

GitHub repository

npm package

API documentation

Midnight MCP은 커뮤니티 프로젝트입니다. 기여, 이슈 등록, 기능 요청 모두 환영합니다.