SuperCollider MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SuperCollider MCP ServerBoot the SuperCollider server."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SuperCollider MCP Server
Model Context Protocol (MCP) server for SuperCollider integration with Claude Code and other MCP clients.
Features
Server Lifecycle Management: Boot, quit, reboot, and configure SuperCollider (scsynth) server
Quark Package Management: Install, remove, update, and list SuperCollider extension packages
SynthDef Management: Compile individual or batch SynthDef definitions
Synth Control: Create synth instances, control parameters, and free resources
Group Management: Create and manage hierarchical node groups
Buffer Management: Load audio files, record from JACK inputs/microphone, and manage buffer lifecycle
Pattern Support (JITlib): Create, modify, control, and query Pdef (event patterns) and Tdef (task patterns) via sclang interpreter
Status Queries: Real-time server status including CPU, synth count, sample rate, and UGen count
Resource Allocation: Automatic collision-free ID management for nodes, buffers, and buses
Related MCP server: Sonic Pi MCP
Installation
npm install
npm run buildUsage
As MCP Server (Claude Code Integration)
Add to your Claude Code MCP configuration (~/.config/claude/mcp.json or similar):
{
"mcpServers": {
"supercollider": {
"command": "node",
"args": ["/path/to/supercollider-mcp/dist/index.js"]
}
}
}Programmatic Usage
import { SuperColliderClient } from 'supercollider-mcp';
const client = new SuperColliderClient();
// Boot SuperCollider server
await client.connect();
// Get server status
const status = await client.getStatus();
console.log(status);
// { port: 57110, status: 'running', cpuUsage: 12.5, synthCount: 5, ... }
// Disconnect
await client.disconnect();MCP Tools
This server provides 26 MCP tools organized into 7 categories:
Server Lifecycle
get_server_status
Query real-time server status including CPU usage, synth count, and sample rate.
Parameters: None
Returns:
{
"port": 57110,
"status": "running",
"ugenCount": 10,
"synthCount": 5,
"cpuUsage": 12.5,
"sampleRate": 48000
}boot_server
Boot SuperCollider server with optional custom configuration.
Parameters:
port(number, optional): UDP port for OSC communication (default: 57110)sampleRate(number, optional): Sample rate in Hz (default: 48000)numOutputBusChannels(number, optional): Output audio channels (default: 8)numInputBusChannels(number, optional): Input audio channels (default: 8)maxNodes(number, optional): Maximum number of nodes (default: 1024)maxBuffers(number, optional): Maximum number of buffers (default: 1024)device(string, optional): Audio hardware device name
Example:
{
"port": 57120,
"sampleRate": 96000,
"numOutputBusChannels": 16,
"numInputBusChannels": 16
}quit_server
Gracefully quit the SuperCollider server and reset all resource allocators.
Parameters: None
reboot_server
Reboot SuperCollider server while preserving current configuration.
Parameters: None
configure_server
Update server configuration options (requires reboot to take effect).
Parameters: Same as boot_server
Note: Changes are stored but require reboot_server to apply.
Quark Management
install_quark
Install a SuperCollider extension package (quark) by name.
Parameters:
quarkName(string, required): Name of the quark to install
Example: { "quarkName": "Vowel" }
remove_quark
Uninstall a SuperCollider extension package.
Parameters:
quarkName(string, required): Name of the quark to remove
update_quark
Update a quark to the latest version (use 'all' to update all quarks).
Parameters:
quarkName(string, required): Name of quark to update or 'all'
Example: { "quarkName": "all" }
list_quarks
List all currently installed SuperCollider extension packages.
Parameters: None
Returns: Array of installed quark names
SynthDef Management
compile_synthdef
Compile a SuperCollider SynthDef from source code and load to server.
Parameters:
defName(string, required): SynthDef namesource(string, required): SuperCollider SynthDef source code
Example:
{
"defName": "sine",
"source": "SynthDef(\\sine, { |out=0, freq=440, amp=0.1| Out.ar(out, SinOsc.ar(freq, 0, amp)) }).add;"
}compile_synthdefs_batch
Compile multiple SynthDefs in a single operation for efficiency.
Parameters:
synthDefs(array, required): Array of SynthDef objects withnameandsourcefields
Example:
{
"synthDefs": [
{ "name": "sine", "source": "SynthDef(...).add;" },
{ "name": "saw", "source": "SynthDef(...).add;" }
]
}Synth Control
create_synth
Create a synth instance from a loaded SynthDef.
Parameters:
defName(string, required): SynthDef name to instantiateaddAction(number, optional): Where to add synth (0=head, 1=tail, 2=before, 3=after, 4=replace, default: 1)targetId(number, optional): Target group or node ID (default: 1)controls(object, optional): Initial parameter values as key-value pairs
Example:
{
"defName": "sine",
"controls": { "freq": 880, "amp": 0.2 }
}Returns: { "nodeId": 1001 } - Use this ID for parameter control and cleanup
free_synth
Free a synth instance by node ID.
Parameters:
nodeId(number, required): Node ID returned fromcreate_synth
set_synth_controls
Set parameter values on a running synth.
Parameters:
nodeId(number, required): Target synth node IDcontrols(object, required): Parameter key-value pairs to update
Example:
{
"nodeId": 1001,
"controls": { "freq": 660, "amp": 0.3 }
}Group Management
create_group
Create a group node for hierarchical organization of synths.
Parameters:
addAction(number, optional): Where to add group (0=head, 1=tail, 2=before, 3=after, default: 1)targetId(number, optional): Target group ID to add to (default: 1)
Returns: { "groupId": 2001 } - Use this ID as target for synths
Usage: Groups enable hierarchical control - freeing a group frees all child synths.
free_group
Free a group and all its child nodes recursively.
Parameters:
groupId(number, required): Group node ID to free
Buffer Management
load_audio_file
Load an audio file from disk into a server buffer.
Parameters:
path(string, required): Absolute path to audio file (WAV, AIFF, FLAC)startFrame(number, optional): Starting frame in file (default: 0)numFrames(number, optional): Number of frames to read (-1 = entire file, default: -1)
Returns: { "bufferId": 10 } - Use this ID for playback synths
Example:
{
"path": "/home/user/samples/kick.wav"
}record_jack_input
Record audio from JACK input ports into a buffer.
Parameters:
duration(number, required): Recording duration in secondsjackPorts(array of strings, required): Array of JACK port names to record fromchannels(number, optional): Number of channels to record (default: jackPorts.length)
Example:
{
"duration": 5.0,
"jackPorts": ["system:capture_1", "system:capture_2"]
}Returns: { "bufferId": 11 } - Recording starts immediately, auto-stops after duration
Note: Requires JACK audio system (Linux/macOS). Recording uses sclang-generated SynthDef with RecordBuf UGen.
record_microphone
Record audio from system default microphone (convenience wrapper).
Parameters:
duration(number, required): Recording duration in secondschannels(number, optional): Number of channels (default: 2 for stereo)
Example: { "duration": 3.0, "channels": 1 }
Auto-detects: Uses system:capture_1, system:capture_2, etc. based on channel count
free_buffer
Free a buffer and deallocate its memory.
Parameters:
bufferId(number, required): Buffer ID to free
Usage: Always free buffers when done to prevent memory leaks
Pattern Support (JITlib)
JITlib pattern support enables AI-powered control of SuperCollider's Just-In-Time composition system through the sclang interpreter. Create and manipulate Pdef (event patterns) and Tdef (task patterns) for live coding and algorithmic composition.
create_pdef
Create a new Pdef (Pattern Definition) for event pattern sequencing.
Parameters:
name(string, required): Pattern name (unique identifier)pattern(string, required): SuperCollider pattern codequant(number, optional): Quant value for pattern scheduling synchronization
Example:
{
"name": "melody",
"pattern": "Pbind(\\freq, Pseq([440, 550, 660, 880], inf), \\dur, 0.25)",
"quant": 4
}Returns: { "success": true, "pdef": { "name": "melody", "isPlaying": false } }
Note: Patterns created with create_pdef are not automatically played. Use control_pattern with action "play" to start playback.
create_tdef
Create a new Tdef (Task Definition) for procedural task sequencing.
Parameters:
name(string, required): Task name (unique identifier)task(string, required): SuperCollider task code (function/routine)quant(number, optional): Quant value for task scheduling synchronization
Example:
{
"name": "chords",
"task": "{ loop { [60, 64, 67].midicps.do { |freq| Synth(\\sine, [\\freq, freq]) }; 1.wait } }",
"quant": 4
}Returns: { "success": true, "tdef": { "name": "chords", "isRunning": false } }
modify_pattern
Modify an existing pattern (Pdef or Tdef) while preserving its playing state.
Parameters:
name(string, required): Pattern or task name to modifytype(string, required): Pattern type - "pdef" or "tdef"code(string, required): New pattern or task code
Example:
{
"name": "melody",
"type": "pdef",
"code": "Pbind(\\freq, Pseq([330, 440, 550], inf), \\dur, 0.5)"
}Usage: Modifications take effect immediately. For playing patterns, changes apply on the next cycle.
get_pattern_status
Query the current status of a pattern (Pdef or Tdef).
Parameters:
name(string, required): Pattern or task name to querytype(string, optional): Pattern type - "pdef" or "tdef" (auto-detects if not specified)
Example: { "name": "melody" }
Returns:
{
"success": true,
"status": {
"name": "melody",
"isPlaying": true,
"quant": 4
}
}control_pattern
Control pattern playback (play, stop, pause).
Parameters:
name(string, required): Pattern name to controlaction(string, required): Control action - "play", "stop", or "pause"play: Start pattern playback
stop: Stop and reset pattern to beginning
pause: Pause without resetting position
Example:
{
"name": "melody",
"action": "play"
}Usage: Use with Pdefs only (Tdefs use similar but not identical semantics).
list_active_patterns
List all active patterns (Pdefs and Tdefs) currently defined in sclang.
Parameters: None
Returns:
{
"success": true,
"count": 2,
"patterns": [
{ "type": "pdef", "name": "melody", "isActive": true, "quant": 4 },
{ "type": "tdef", "name": "chords", "isActive": false, "quant": 4 }
]
}Usage: Query this to understand the current state of all defined patterns before making changes.
Pattern Support Requirements:
SuperCollider sclang interpreter must be installed
JITlib must be loaded in sclang environment (verified automatically on connection)
SCLANG_PATHenvironment variable or.supercollider.yamlconfiguration required
Development
# Run tests
npm test
# Build
npm run build
# Run in development
npm run devArchitecture
Core Components
SuperColliderClient (
src/supercollider/client.ts): Manages scsynth server lifecycle, OSC communication via supercolliderjs, and resource allocatorsSclangClient (
src/supercollider/sclangClient.ts): Manages sclang interpreter connection, JITlib verification, and pattern operations (Pdef/Tdef)Resource Allocators (
src/supercollider/allocators.ts): Collision-free ID management for nodes (1024), buffers (1024), audio buses (128), control buses (16384)sclang Integration (
src/supercollider/quarks.ts): Child process execution for quark management and SynthDef compilationPattern Tools (
src/tools/patternTools.ts): MCP tool handlers for JITlib pattern operations with Zod validationMCP Server (
src/index.ts): stdio transport with 26 tool handlers organized by categoryOSC Utilities (
src/utils/osc.ts): Type-safe OSC message builders for all server commandsError Handling (
src/utils/errors.ts): Custom error classes with error codes for robust error reporting
Tool Categories
Server Lifecycle (5 tools): Boot, quit, reboot, configure, status
Quark Management (4 tools): Install, remove, update, list packages
SynthDef Management (2 tools): Compile single/batch definitions
Synth Control (3 tools): Create, free, set parameters
Group Management (2 tools): Create, free hierarchical groups
Buffer Management (4 tools): Load files, record audio, free buffers
Pattern Support (6 tools): Create, modify, control, query Pdefs and Tdefs
Resource Management
All tools use automatic resource allocation:
Node IDs: Auto-assigned from NodeAllocator (range: 1000-2023)
Buffer IDs: Auto-assigned from BufferAllocator (range: 0-1023)
Bus IDs: Auto-assigned from AudioBusAllocator/ControlBusAllocator
Auto-cleanup: All allocators reset on server disconnect to prevent stale IDs
Requirements
Node.js >= 18
SuperCollider (scsynth and sclang) installed on system
Optional: Running SuperCollider server for discovery mode
Configuration
Using .supercollider.yaml (Recommended)
The recommended way to configure SuperCollider paths is using a .supercollider.yaml file. This configuration file is used by the underlying supercolliderjs library to locate SuperCollider executables and configure runtime behavior.
Configuration File Location
supercolliderjs searches for configuration in this order:
.supercollider.yamlin the current directory~/.supercollider.yamlin your home directoryExplicit path via
--config=/path/to/conf.yamlflag
Recommendation: Place .supercollider.yaml in your home directory (~/.supercollider.yaml) for global configuration across all projects.
Minimal Configuration
Create ~/.supercollider.yaml with paths to your SuperCollider installation:
# Minimal configuration - just specify binary locations
sclang: /usr/local/bin/sclang
scsynth: /usr/local/bin/scsynthFull Configuration Options
# SuperCollider binary paths
sclang: /usr/local/bin/sclang
scsynth: /usr/local/bin/scsynth
sclang_conf: ~/Library/Application Support/SuperCollider/sclang_conf.yaml
# Network configuration
langPort: 57120 # sclang language port (default: 57120)
serverPort: 57110 # scsynth server port (default: 57110)
host: 127.0.0.1 # Connection host (default: 127.0.0.1)
protocol: udp # Communication protocol (default: udp)
websocketPort: 4040 # WebSocket port for sclang (optional)
# Compilation paths
includePaths: # Additional directories for compilation
- ~/SuperCollider/Extensions
- ~/Projects/MyQuarks
excludePaths: # Directories to exclude from compilation
- ~/SuperCollider/Extensions/Disabled
# Behavior flags
debug: false # Enable debug output (default: false)
echo: false # Echo mode (default: false)
stdin: false # Standard input handling (default: false)
postInlineWarnings: true # Inline warnings (default: true)Platform-Specific Defaults
macOS:
sclang: /Applications/SuperCollider/SuperCollider.app/Contents/MacOS/sclang
scsynth: /Applications/SuperCollider/SuperCollider.app/Contents/MacOS/scsynth
sclang_conf: ~/Library/Application Support/SuperCollider/sclang_conf.yamlLinux:
sclang: /usr/bin/sclang
scsynth: /usr/bin/scsynth
sclang_conf: ~/.config/SuperCollider/sclang_conf.yamlWindows:
sclang: C:\Program Files\SuperCollider\sclang.exe
scsynth: C:\Program Files\SuperCollider\scsynth.exe
sclang_conf: C:\Users\YourUsername\AppData\Local\SuperCollider\sclang_conf.yamlPath Resolution
Tilde (
~) expands to your home directoryRelative paths resolve to absolute paths
Both forward slashes (
/) and backslashes (\) work on Windows
Why Use .supercollider.yaml?
Centralized Configuration: Single configuration file for all supercolliderjs-based tools
Project Flexibility: Per-project configurations with directory-level
.supercollider.yamlAdvanced Options: Access to network ports, compilation paths, and behavior flags
Cross-Platform: Works consistently across macOS, Linux, and Windows
No Environment Variables: Cleaner than managing multiple environment variables
Environment Variables (Alternative)
If you prefer environment variables or need to override .supercollider.yaml settings:
SCLANG_PATH: Path to sclang interpreter executableDefault:
sclang(orsclang.exeon Windows)When to set: Non-standard installation location or multiple SC versions
Example:
/usr/local/bin/sclangor/opt/supercollider-3.13/bin/sclang
SCSYNTH_PATH: Path to scsynth audio server executableDefault: Auto-detected by supercolliderjs library
When to set: Auto-detection fails or specific version required
Example:
/usr/local/bin/scsynthor/opt/supercollider-3.13/bin/scsynth
Example configuration:
# Linux/macOS
export SCLANG_PATH=/usr/local/bin/sclang
export SCSYNTH_PATH=/usr/local/bin/scsynth
# Windows (PowerShell)
$env:SCLANG_PATH="C:\Program Files\SuperCollider\sclang.exe"
$env:SCSYNTH_PATH="C:\Program Files\SuperCollider\scsynth.exe"Note: Environment variables take precedence over .supercollider.yaml settings. For most users, .supercollider.yaml is the recommended approach.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseBqualityDmaintenanceAn educational implementation of a Model Context Protocol server that demonstrates how to build a functional MCP server for integrating with various LLM clients like Claude Desktop.1164MIT
- AlicenseDqualityDmaintenanceA Model Context Protocol server that allows AI assistants like Claude and Cursor to create music and control Sonic Pi programmatically through OSC messages.220 npm18MIT
- AlicenseBqualityDmaintenanceMCP server for managing Claude Code conversation sessions1258 npmMIT
- AlicenseAqualityDmaintenanceMCP server that connects Claude Code to Sonic Pi for AI-assisted beat making, enabling live code execution and pattern management.21MIT