MCP QuickJS 러너
WebAssembly(WASM)로 컴파일된 QuickJS 엔진 내에서 임의의 JavaScript 코드를 안전하게 실행하고 Node.js의 내장 WASI 구현을 사용하여 실행하는 도구를 제공하는 MCP(Model Context Protocol)를 구현하는 서버입니다.
설명
이 서버는 MCP 도구 제공자 역할을 합니다. JavaScript 코드 문자열을 입력으로 받는 run_javascript_code
라는 단일 도구를 제공합니다. 이 코드는 샌드박스 처리된 QuickJS WASM 환경에서 실행됩니다. 서버는 실행 과정에서 표준 출력( stdout
)과 표준 오류( stderr
) 스트림을 캡처하여 실행 오류와 함께 MCP 클라이언트로 반환합니다.
이를 통해 언어 모델이나 다른 MCP 클라이언트는 호스트 시스템을 손상시키지 않고 잠재적으로 신뢰할 수 없는 JavaScript 코드 조각을 안전하게 실행할 수 있습니다.
특징
- 안전한 실행: QuickJS 및 Node.js WASI를 사용하여 WASM 샌드박스에서 JavaScript를 실행합니다.
- 표준 I/O 캡처: 실행된 JavaScript 코드에서
stdout
및stderr
캡처합니다. - 오류 보고: QuickJS의 런타임 오류와 0이 아닌 종료 코드를 보고합니다.
- MCP 통합:
stdio
통해 표준 MCP 도구로 기능을 제공합니다. - TypeScript로 구축: 개발 중에 유형 안전성을 제공합니다.
작동 원리
- WASM 모듈: WebAssembly System Interface(WASI)를 타겟으로 하는 사전 컴파일된 QuickJS 엔진(
qjs-wasi.wasm
)을 사용합니다. - Node.js WASI: Node.js의
node:wasi
모듈을 활용하여 WASM 모듈을 인스턴스화하고 실행합니다. - Stdio 리디렉션(임시 파일): WASM 환경에서
stdout
및stderr
캡처하기 위해 서버는 현재node:wasi
와 호환되는 표준 접근 방식을 사용합니다.node:fs/promises
및node:os
사용하여 호스트 파일 시스템에 임시 디렉토리를 생성합니다.stdout
및stderr
의 임시 파일은 이 디렉토리에서 열립니다.- 이러한 파일에 대한 실제 OS 파일 설명자는 초기화 중에
WASI
인스턴스로 전달됩니다(stdout: fd
,stderr: fd
). - QuickJS WASM 모듈은 이러한 설명자에 출력을 쓰고, 이 출력은 WASI에 의해 임시 파일에 라우팅됩니다.
- 실행이 완료되면 서버는 파일 핸들을 닫고 임시 파일의 내용을 읽습니다.
- 임시 디렉토리와 파일이 정리됩니다.
- (참고: 메모리 내 파이프나
memfs
와 같은 가상 파일 시스템을 사용하려는 시도는 실패했습니다. 왜냐하면node:wasi
현재 stdio에 대한 실제 OS 파일 설명자를 필요로 하기 때문입니다.)
- MCP 통신: 서버는
@modelcontextprotocol/sdk
사용하여stdio
통해 MCP 요청을 수신하고 프로토콜에 따라 포맷된 실행 결과로 응답합니다.
필수 조건
- Node.js (v23.x 이상 권장, 특정 버전에 대한
node:wasi
호환성 확인) - npm 또는 yarn
- QuickJS WASM 파일(
qjs-wasi.wasm
)은 컴파일된 서버 스크립트와 같은 디렉토리에 있어야 합니다(예:./dist/server.js
에 대한./dist/qjs-wasi.wasm
). 별도로 구하거나 컴파일해야 할 수도 있습니다.
설치
- 저장소를 복제합니다(해당되는 경우).
- 종속성 설치:지엑스피1
용법
Copy
This server cannot be installed
샌드박스 QuickJS WASM 환경 내에서 임의의 JavaScript 코드를 안전하게 실행하여 언어 모델이나 다른 MCP 클라이언트가 호스트 시스템을 손상시키지 않고 JavaScript 코드 조각을 안전하게 실행할 수 있도록 합니다.