strudel.cc를 통한 AI 지원 라이브 코딩 음악용 MCP 서버
요약
Claude를 통해 Strudel.cc를 제어하여 AI 지원 라이브 코딩 음악을 생성할 수 있는 MCP 서버 프로젝트입니다. 패턴 기반 음악 생성, 알고리즘 작곡, 오디오 분석 등 27개의 도구를 제공하며 현재 베타 버전으로 개발 중입니다.
핵심 포인트
- Claude와 Strudel.cc를 연결하는 MCP 서버 구현
- 패턴 편집, 재생, 오디오 분석 등 27개 도구 지원
- 멀티 세션 지원 및 높은 테스트 커버리지 확보
- 초보자도 쉽게 접근 가능한 알고리즘 작곡 환경 제공
🎵 strudel.cc를 통한 AI 지원 라이브 코딩 음악용 MCP 서버
비공식 팬 프로젝트입니다. Strudel 프로젝트와 관련이 없으며, Strudel 프로젝트로부터 승인받지 않았습니다. 이 어댑터는 전체 생태계를 먼저 학습하지 않고도 패턴 기반의 음악을 시도해보고 싶은 초보자들이 라이브 코딩 음악에 쉽게 접근할 수 있도록 하기 위해 존재합니다.
상태: Beta | 86% 문장 커버리지 (statement coverage) | npm에 게시됨 | 활발히 개발 중
Claude를 통해 Strudel.cc를 구동하여 AI 지원 라이브 코딩 음악, 패턴 생성 및 알고리즘 작곡 (algorithmic composition)을 수행하는 Model Context Protocol (MCP) 서버입니다.
현재 상태: Beta. 핵심 워크플로우 (초기화(init) → 작곡(compose) → 재생(playback) → 분석(analyze))가 실제 오디오 출력과 함께 안정적으로 작동합니다. 1709개의 테스트를 통과했으며, 86.32%의 문장 커버리지 (statement coverage) / 75.93%의 분기 커버리지 (branch coverage)를 기록하고 있습니다. CI는 OpenSSF Scorecard, SHA-pinned actions, CODEOWNERS, Dependabot, 그리고 차단 게이트로서의 lint를 통해 강화되었습니다.
여기서 "Beta"의 의미:
-
도구 스키마 (Tool schemas)는 마이너 버전 내에서 안정적입니다; 파괴적 변경 (breaking changes)이 발생할 경우 메이저 버전 업데이트가 필요합니다.
-
v3.0.0부터 멀티 세션 (Multi-session)을 지원합니다 (#108) — 이름이 지정된 세션은 격리된 브라우저, 히스토리 및 오디오 캡처 상태를 가집니다.
-
업스트림 (Upstream)
@strudel/*의존성은 검증된 버전으로 고정되어 있으며, Dependabot 업데이트는 CI에서 제어됩니다 - 표준적이지 않은 패턴에 대해서는 직접적인 반복 작업 (hands-on iteration)이 필요할 수 있습니다 — 미흡한 점을 보고해 주시면 수정하겠습니다. -
기능 (Features)
-
설치 (Installation)
-
빠른 시작 (Quick Start)
-
빠른 참조 (Quick Reference)
-
사용 가능한 도구 (Available Tools)
-
사용 예시 (Usage Examples)
-
아키텍처 (Architecture)
-
고급 사용법 (Advanced Usage)
-
설정 (Configuration)
-
보안 (Security)
-
문제 해결 (Troubleshooting)
-
개발 (Development)
-
기여하기 (Contributing)
27개의 MCP 도구가 패턴 편집, 재생, 오디오 분석, 생성, 히스토리, 세션, MIDI 가져오기/내보내기 및 Gemini 기반 지원을 다룹니다. 각 도구는 프로토콜 표면을 작게 유지하기 위해 열거형 파라미터 (enum-parameterized)로 구성되어 있습니다:
pattern_store({ action })
, edit_pattern({ mode })
, transform({ op })
, analyze({ include })
, history({ action })
, playback({ action })
, effect({ action })
, shape({ dimension })
, audio_capture({ action })
, browser_window({ action })
, generate_part({ role })
, generate_rhythm({ type })
,music_theory({ query })
,session({ action })
,ai_assist({ task })
, ... 이 기능들로 전달되던 58개의 레거시 단일 동사 별칭(single-verb aliases)은 v4.0.0에서 제거되었습니다 (#178).
도구 호출 (tool calls) 소모 없이 카탈로그를 탐색할 수 있는 4개의 MCP 리소스 (MCP resources):
strudel://examples
,strudel://patterns
,strudel://styles
,strudel://docs/tools
.Playwright를 통한 Strudel.cc의 실제 브라우저 자동화 (Real browser automation).
멀티 세션 지원 (Multi-session support) — 브라우저를 제어하는 모든 도구는 선택 사항인 session_id를 허용합니다.
; 세션은 격리된 브라우저 페이지, 실행 취소/다시 실행/히스토리 스택(undo/redo/history stacks), 그리고 오디오 캡처 서비스(audio-capture services)를 가집니다.
Web Audio API를 통한 오디오 분석 (Audio analysis) (FFT 스펙트럼, 템포 감지, 키(key) 감지, 리듬 복잡도).
8개 장르(techno, house, dnb, ambient, trap, jungle, jazz, experimental)에 걸친 템플릿 기반 패턴 생성 (Template-based pattern generation); 피드백, 제안 및 잼(jamming)을 위한 선택적 Gemini 기반 ai_assist 지원.
음악 이론 도우미 (Music theory helpers): 15개 이상의 스케일(scales), 8개 이상의 코드 진행(chord progression) 스타일, 유클리드(euclidean) 및 폴리리듬(polyrhythm) 생성.
패턴 지속성 (Pattern persistence): 태그가 포함된 JSON 기반 저장/불러오기 + 인메모리 편집 히스토리(undo/redo/restore/compare).
모든 tools/call에 대한 결과 엔벨로프 (Result envelope):
클라이언트는 자유 형식의 텍스트(free-text)를 파싱하는 대신 { ok, errorCategory, isRetryable }를 기준으로 분기합니다.
유닛(unit), 통합(integration), 예제 검증(example-validation) 스위트를 통과한 1709개의 테스트; 20개 건너뜀 (브라우저 관련, Playwright에 의해 제한됨).
문장 커버리지 (statement coverage) 86.32% / 분기 커버리지 (branch coverage) 75.93%.
CI에서의 린트 차단 (Lint blocking in CI): 오류 0개, 경고 약 163개 (대부분 테스트 모크(test mocks) 내의 any 타입).
OIDC 신뢰할 수 있는 게시 (OIDC trusted publishing): 매 릴리스마다 SLSA 빌드 출처 증명(build provenance attestation)과 함께 npm에 게시.
프로덕션 준비 완료 아님 (Not Production-Ready): 이 소프트웨어는 활발히 개발 중인 실험적 소프트웨어입니다. 탐색 및 실험 용도로만 사용하십시오. 파괴적 변경(breaking changes), 버그 및 미완성 기능이 발생할 수 있습니다. 개선을 돕기 위해 기여(Contributing) 섹션을 참조하십시오.
18개의 예제 패턴이 patterns/examples/에 장르별로 그룹화되어 포함되어 있습니다:
Techno: hard-techno, minimal-techno
House: deep-house, tech-house
Drum & Bass: liquid-dnb, neurofunk
Ambient: dark-ambient, drone
Trap: modern-trap, cloud-trap
Jungle: classic-jungle, ragga-jungle
Jazz: bebop, modal-jazz
Longform(수 분 길이의 곡): dark-ambient-journey, driving-techno, liquid-dnb-roller, nu-jazz-session
각 예제는 패턴 코드(pattern code), BPM, 키(key), 그리고 설명을 포함하는 JSON 파일입니다. 자세한 내용은 patterns/examples/README.md를 참조하십시오.
에이전트(Agents)는 별도의 도구 호출(tool calls) 없이도 strudel://examples MCP 리소스(resource)를 통해 이 목록을 나열할 수 있습니다.
이 프로젝트는 비공식 팬 프로젝트(unofficial fan-project) 상태를 명확히 하기 위해 @williamzujkowski/strudel-mcp-server에서 @williamzujkowski/live-coding-music-mcp로 이름이 변경되었습니다 (see #97 참조). 이전 패키지는 npm에서 지원 중단(deprecated)되었습니다.
이전 패키지를 사용 중이었다면:
# 이전 패키지 제거
npm uninstall -g @williamzujkowski/strudel-mcp-server
# 새 패키지 설치
...
MCP 클라이언트 설정을 업데이트하십시오. bin 이름이 strudel-mcp에서 live-coding-music-mcp로 변경되었습니다:
// 이전
{
"mcpServers": {
...
MCP 서버의 내부 식별 문자열(internal identity string) 또한 strudel-mcp-enhanced에서 live-coding-music-mcp로 변경되었습니다. 해당 문자열을 기준으로 작동하는 클라이언트(로그, 허용 목록(allowlists), 권한 정책(permission policies))를 사용 중이라면 그에 맞춰 업데이트하십시오.
모든 도구 이름(tool names)과 스키마(schemas)는 변경되지 않았습니다.
| 요구 사항 | 버전 | 비고 |
|---|---|---|
| Node.js | 22.x+ | LTS 필요 |
| ... | ||
| 선택 사항: 컨테이너화된 배포(containerized deployment)를 위한 Docker. |
npm install -g @williamzujkowski/live-coding-music-mcp
# 브라우저 설치 (최초 1회 필요)
npx playwright install chromium
# 저장소 클론(Clone repository)
git clone https://github.com/williamzujkowski/live-coding-music-mcp.git
cd live-coding-music-mcp
...
설치부터 첫 번째 생성된 패턴까지 2분 이내에 완료할 수 있습니다.
npm install -g @williamzujkowski/live-coding-music-mcp
npx playwright install chromium # 1회성
소스에서 직접 빌드하시겠습니까? Installation → From Source를 참조하십시오.
Claude Desktop 설정 파일을 편집하십시오:
| OS | 설정 경로 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| ... |
서버를 추가합니다:
{
"mcpServers": {
"live-coding-music": {
...
Claude Desktop을 재시작하십시오. 서버는 🔌 플러그 아이콘 아래에 나타납니다.
# 전역(globally) 설치한 경우
claude mcp add strudel live-coding-music-mcp
# 소스에서 빌드한 경우
...
# 전역 설치본으로부터
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | live-coding-music-mcp
# 소스로부터
...
26개의 도구 (tools) 목록이 포함된 JSON 응답이 표시되어야 합니다. 만약 더 적게 표시된다면 빌드가 최신 상태가 아닙니다 — npm run build를 실행하십시오.
Claude에게 다음과 같이 요청하십시오:
Strudel을 초기화하고 테크노 비트를 작곡해줘.
확인할 수 있는 내용: Chromium 창이 열리며 (눈에 보이게 — 이것은 숨겨진 프로세스가 아니라 라이브 에디터입니다) strudel.cc로 이동합니다. Claude는 init을 호출한 다음, compose({ style: "techno" })를 호출합니다. CodeMirror 에디터에 4-on-the-floor 패턴이 나타나고 스피커를 통해 재생되기 시작합니다.
헤드리스 모드 (headless mode, 브라우저 창 없음)를 선호하십니까? 첫 번째 init 호출 전에 config.json에서 "headless": true로 설정하십시오 — Configuration(설정) 섹션을 참조하십시오. 오디오 분석 (템포 / 키 감지)은 헤디드 모드 (headed mode)에서 더 신뢰할 수 있으며, 헤드리스 오디오 샘플링은 최선 노력 (best-effort) 방식으로 작동한다는 점에 유의하십시오.
- 아래의 빠른 참조 (Quick Reference): 일반적인 작업을 위한 도구 치트 시트 (tool cheat sheet).
- 사용 예시 (Usage Examples): 다단계 워크플로 (작곡, 오디오 분석, AI 지원 잼잉 (jamming)).
patterns/examples/
: 7개 장르에 걸친 18개의 즉시 재생 가능한 패턴과 4개의 롱폼 (longform) 곡이 포함되어 있습니다. 에이전트는 도구 호출 (tool calls)을 소모하지 않고도strudel://examplesMCP 리소스를 통해 이를 탐색할 수 있습니다.
한 줄 도구 호출 (one-line tool calls)로 수행하는 일반적인 작업:
| 작업 | 도구 호출 |
|---|---|
| 브라우저 초기화 | init |
| ... |
기존의 단일 동사 도구들 (play, stop, save, undo, write, generate_pattern, ...)은 3.0.x 라인에서 사용되지 않는 별칭 (deprecated aliases)이었으며, v4.0.0 (#178)에서 제거되었습니다. 위에 있는 통합된 도구들을 사용하십시오.
원샷 워크플로 (One-shot workflow):
compose with style: "dnb", key: "Am", tempo: 174, auto_play: true
14개 카테고리에 걸친 27개의 도구 (27 tools):
Setup (1)
| 도구 (Tool) | 설명 (Description) |
|---|---|
init | 브라우저에서 Strudel을 초기화합니다. |
Pattern Editing (2)
| 도구 (Tool) | 설명 (Description) |
|---|---|
edit_pattern | 현재 세션의 패턴을 변형 (Mutate) 합니다. |
get_pattern | 현재 패턴 코드를 가져옵니다. |
Playback (2)
| 도구 (Tool) | 설명 (Description) |
|---|---|
playback | 현재 세션의 트랜스포트 (Transport)를 제어합니다. |
set_tempo | BPM을 설정합니다. |
Storage (2)
| 도구 (Tool) | 설명 (Description) |
|---|---|
pattern_store | 패턴을 디스크에 저장하고 다시 읽어옵니다. |
import_midi | .mid 파일을 재생 가능한 Strudel 패턴으로 변환합니다 (Phase 1: 문자 그대로의 전사 (literal transcription), #201). |
History (1)
| 도구 (Tool) | 설명 (Description) |
|---|---|
history | 패턴 편집 이력을 탐색하거나 검사합니다. |
Generation (3)
| 도구 (Tool) | 설명 (Description) |
|---|---|
compose | 한 단계로 완전한 패턴을 생성, 작성 및 재생합니다. 필요한 경우 기본 브라우저를 자동으로 초기화합니다. |
generate_part | 단일 악기 레이어를 생성하여 현재 세션 패턴에 추가합니다. |
generate_rhythm | 리듬 패턴을 생성하여 현재 세션에 추가합니다. |
Music Theory (1)
| 도구 (Tool) | 설명 (Description) |
|---|---|
music_theory | 음악 이론 (Music-theory) 질의를 수행합니다. |
Transform (3)
| 도구 (Tool) | 설명 (Description) |
|---|---|
transform | 현재 세션 패턴에 단일 변형 연산 (transform op)을 적용합니다. |
effect | 현재 세션 패턴에 Strudel 이펙트 (effect)를 추가하거나 제거합니다. |
shape | 세 가지 상위 수준 차원 중 하나를 따라 현재 패턴을 형성 (Shape) 합니다. |
AI (1)
| 도구 (Tool) | 설명 (Description) |
|---|---|
ai_assist | Gemini 기반의 패턴 보조 기능을 제공합니다. |
Analysis (6)
| 도구 (Tool) | 설명 (Description) |
|---|---|
analyze | 현재 재생 중인 패턴에 대한 오디오 분석 (Audio analysis)을 수행합니다. |
validate_pattern_runtime | 런타임 오류 체크를 통해 패턴을 검증합니다 (Strudel 콘솔의 오류를 모니터링함). |
validate_pattern_local | 프로세스 내 StrudelEngine을 사용하여 패턴 구문을 검증합니다 (브라우저 불필요). |
analyze_pattern_local | 브라우저 재생 없이 정적 분석 (Static analysis)을 수행합니다 (이벤트/사이클, 복잡도, 선택적 BPM 포함). |
query_pattern_events | 두 사이클 인덱스 사이에서 패턴이 방출할 이벤트들을 열거합니다 (최대 16 사이클). |
transpile_pattern | StrudelEngine을 통해 패턴 소스를 트랜스파일 (Transpile) 합니다. 트랜스파일된 코드 또는 구문 오류를 반환합니다. |
Session (1)
| 도구 (Tool) | 설명 (Description) |
|---|---|
session | 격리된 Strudel 브라우저 세션을 관리합니다 (멀티 세션, #108). |
Export (2)
| 도구 (Tool) | 설명 (Description) |
|---|---|
export_midi | 현재 패턴을 MIDI 파일로 내보냅니다. note(), n(), chord() 함수를 파싱합니다. |
browser_window | 보이는 Strudel 브라우저 창과 상호작용합니다. |
Audio (1)
| 도구 (Tool) | 설명 (Description) |
|---|---|
audio_capture | 라이브 Strudel 세션의 오디오 출력을 녹음합니다. |
Debug (1)
| 도구 (Tool) | 설명 (Description) |
|---|---|
diagnostics | 서버 및 브라우저 상태를 점검합니다. |
소스에서 자동 생성됨. 27개의 도구가 등록되었습니다.
간단한 비트 만들기 (Create a Simple Beat)
사용자: Strudel을 초기화하고 간단한 테크노 비트를 만들어줘
Claude: [브라우저 초기화]
[패턴 생성 및 작성]
...
베이스라인 생성하기 (Generate a Bassline)
사용자: C 키의 테크노 베이스라인을 추가해줘
Claude: [베이스라인 생성]
[현재 패턴에 추가]
...
재즈 작곡 (Jazz Composition)
사용자: 워킹 베이스(walking bass)가 포함된 F 메이저 키의 재즈 진행을 만들어줘
Claude: 생성된 진행: "Gm7" "C7" "Fmaj7"
패턴:
...
드럼 앤 베이스 트랙 (Drum & Bass Track)
사용자: 174 BPM의 완전한 드럼 앤 베이스 트랙을 생성해줘
Claude: [드럼, 베이스, 패드가 포함된 멀티 레이어 패턴 생성]
// 174 BPM, C 키의 dnb 패턴
...
라이브 오디오 분석 (Live Audio Analysis)
라이브 오디오 분석 (Live Audio Analysis)
사용자: 현재 재생 중인 내용을 분석하고 주파수 분해(frequency breakdown)를 보여줘
Claude: 오디오 분석 결과:
{
...
패턴 변형 (Pattern Variations)
사용자: 현재 패턴의 글리치(glitchy)한 변형을 만들어줘
Claude: [글리치 변환 적용]
추가됨: .sometimes(x => x.chop(8).rev).rarely(x => x.speed(-1))
레이어드 앰비언트 트랙 (Layered Ambient Track)
사용자: 여러 레이어를 가진 앰비언트 사운드스케이프(ambient soundscape)를 생성해줘
Claude: [복잡한 멀티 레이어 패턴 생성]
setcpm(90)
...
패턴 저장 및 불러오기 (Save and Load Patterns)
사용자: 이 패턴을 "techno-groove-1"로 저장하고, 태그는 "techno"와 "experimental"로 달아줘
Claude: 패턴이 "techno-groove-1"로 저장되었습니다.
---
...
유클리드 리듬 생성 (Generate Euclidean Rhythms)
사용자: 킥 드럼을 사용한 5/8 유클리드 리듬(euclidean rhythm)을 만들어줘
Claude: 유클리드 리듬 (5/8) 생성됨
패턴: s("bd").struct("1 ~ 1 ~ 1 1 ~ 1")
복잡한 폴리리듬 (Complex Polyrhythms)
사용자: 킥 (4/16), 스네어 (7/16), 하이햇 (3/16)을 사용한 폴리리듬(polyrhythm)을 생성해줘
Claude: 폴리리듬 생성됨
stack(
...
AI 지원 작곡 (AI-Assisted Composition)
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기