MCP Server for WebChucK integration - enables audio programming and interactive sound applications through the ChucK audio language
This server implements 20 tools for WebChucK audio programming integration. Tool definitions are present with descriptions and basic schema structures, but exhibit significant quality gaps. Most tool descriptions are verbose and lack the 50-200 character optimization guideline. Parameter schemas use Zod validation in code (good), but output schemas are entirely undocumented in the tool definitions. Error handling is minimal, most tools return generic HTTP error messages without guidance on recovery or root causes. The server lacks structured output documentation, making it difficult for LLMs to parse responses. Parameter descriptions vary widely; some are good (e.g., executeChucK's detailed guidance), but others are vague (e.g., listSamples, updateSnippet with missing input descriptions). Tool naming follows verb-noun convention reasonably well, but some names are overly generic (listSamples vs listAudioFiles duplication, updateSnippet without clear parameter guidance). Composition is reasonable, tools chain logically (getSessions → executeChucK), but many tools lack explicit chaining IDs in documented responses. Security is a concern: the server fetches from `https://localhost:${this.port}` in plaintext code, suggesting hardcoded service endpoints without secret injection patterns.
Shows detailed results of sample preloading operations. Use this after preloadSamples to: * Confirm which specific sample samples loaded successfully * Get the exact virtualFilenames required for playing samples * Identify any samples that failed to load * Ensure you have all necessary sounds before composing This is critical for sample-based compositions - only use the virtualFilenames that appear in these results. If an sample doesn't appear here after preloading, you'll need to choose alternative samples. The results show the complete mapping between server files and virtual filenames you'll use in your code. Always reference the exact virtualFilenames (e.g., "audio_files_Waves_FluidR3_GM_choir_aahs_C3.wav") when playing samples, not the general sample names.
Shows general information about active WebChucK sessions. Use this to: * View all active session IDs and their status * Check the overall health of the ChucK environment * Identify the working directory of sessions
Executes ChucK code in a WebChucK session. This tool allows you to run ChucK audio programming language code in the browser and create interactive sound applications. Best practices: * Always follow execution with a call to debugExecutions to check for errors * ChucK uses the => operator for audio routing and assignments (e.g., SinOsc osc => dac;) * End statements with semicolons to avoid syntax errors * Use UGens (Unit Generators) like SinOsc, Noise, etc. for sound creation * Time is handled with :: notation (e.g., beat * 1::second + now => now;) * Float and int real time parameter controls through global variables defined with @param annotations, e.g. // @param float values between 0 and 1 // @range 0.1 1.0 0.5 => global float gain; Common mistakes include missing semicolons, undefined variables or using variables before they have been defined, and not strictly adhering to Chuck syntax. ChucK execution continues in the background until explicitly stopped with stopChucK, allowing script layering.
No output schemas documented for any tool. LLMs cannot infer response structure (fields, types, nesting) and must guess what data is available for downstream operations.
Many tool descriptions are verbose (executePatch: 180 chars, playWithSamples: 450+ chars) and lack clear 'WHEN to use' guidance. LLMs may confuse overlapping tools like listAudioFiles vs listSamples.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 53 | - | v1 |
This handy debugging tool allows you to target specific ranges of current code to be patched when debugging ChucK code, then executes the updated ChucK code in a WebChucK session.
Retrieves the current code from the WebChucK editor
A convenience function to get the current value for one or more parameters in a running WebChucK session
The webchuck.getSessionStatus tool returns the status of a session queried by the unique sessionId
The webchuck.getSessions tool lists all active WebChucK sessions and their unique identifiers, allowing multiple WebChucK clients to be used as an ensemble: * Call this tool if you don't have a session Id yet, or when you get a 404 error * The tool returns the total number of active sessions and their respective session IDs * Only one session can be addressed at a time through the tools, so interactions with multiple sessions require separate explicit tool calls
Get a specific ChucK snippet by ID
Get all ChucK snippets with optional filtering
Lists all available audio files that can be preloaded as samples. Use this first to identify samples to load with preloadSamples. Note that not all listed samples may load successfully.
Lists all available audio file keywords that can be used to search for specific sample families. Use this first to identify sample families available for listAudioFiles or preloadSamples.
Get all samples with optional filtering
Plays a saved code snippet from the client's library. This allows you to save and reuse ChucK code snippets across sessions. To see available snippets, ask the user to check their code library.
A convenience function that combines preloading samples and executing code in one step. This is useful for creating compositions that immediately use the loaded samples: * Handles both preloading the specified samples and executing the provided ChucK code * More efficient than calling preloadSamples and executeChucK separately * Still requires checking debugSessions afterward to verify which samples loaded successfully * If you need to know exactly which samples loaded before writing your code, use the separate preloadSamples approach instead * Remember that samples aren't loaded additively - specify all samples you need in a single call This tool can streamline your workflow if you know exactly which samples you want to use, but it's less flexible if you need to check which samples successfully loaded before finalizing your composition.
Load sample samples before using them in your composition. This is critical for sample-based music: * First use listAudioFiles to see all available samples * Then select samples you want to use (choose ALL at once - samples aren't loaded additively) * Call preloadSamples with an array of all your chosen samples * Check debugSessions after preloading to confirm which samples loaded successfully * Use ONLY samples that appear in the debugSessions results * When playing samples, use the exact virtualFilenames provided in the debugSessions output * If samples don't show up in debugSessions results, try different samples
Create a new snippet
A convenience function to set the current value for one or more parameters in a running WebChucK session
Stops the execution of a ChucK session. Use before starting a new composition to ensure clean playback.
Update a specific ChucK snippet by ID
updateSnippet description is 1 character ('Update a specific ChucK snippet by ID') and lacks input parameters in schema (no 'code', 'description', 'tags' documented). LLM cannot know what fields are updatable.
listSamples has no input schema or description. Tool registration is incomplete, LLM cannot determine valid parameters or purpose.
Duplicate or overlapping tool names: listAudioFiles, listSamples, listAvailableAudioFileKeywords are three separate list operations. LLMs waste reasoning deciding between them; consolidate or clarify distinctions.
Error handling is uniformly generic ('Error executing ChucK code: <HTTP status>') and provides no guidance for recovery. LLM cannot distinguish between user mistakes (e.g., syntax error) vs transient failures (e.g., service unavailable).
Services are hardcoded as `https://localhost:${this.port}/api/<endpoint>`. No secret injection pattern; credentials likely embedded in environment or missing entirely. Violates least-privilege secret handling.
Parameter descriptions in getParameterValue and setParameterValue are vague ('Array of parameter query/update objects'). No guidance on object structure, required fields, or expected formats.
Tools like preloadSamples and debugPreload require explicit sequencing (preload THEN debug). This pattern is not enforced in tool definitions, LLM may call debugPreload without preloading first, yielding empty results.
executePatch, playWithSamples, and other state-modifying tools lack idempotency guarantees. Unclear whether retrying with identical inputs will succeed, partially succeed, or fail catastrophically (e.g., duplicate patches).