itshellbound/juce-plugin-template
If you are the rightful owner of juce-plugin-template and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The Model Context Protocol (MCP) server provides seamless access to JUCE documentation and code generation tools, enhancing the development workflow for VST plugins using the JUCE framework.
JUCE VST Plugin Development Kit
Complete setup for VST plugin development with JUCE framework, including an MCP server for documentation access.
Contents
- mcp-server/ - Model Context Protocol server for JUCE documentation
- juce-template/ - Ready-to-use JUCE plugin template
Part 1: MCP Server for JUCE Documentation
The MCP server provides access to JUCE documentation and code generation tools directly in Claude Code.
Setup MCP Server
cd mcp-server
npm install
Configure Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"juce-docs": {
"command": "node",
"args": ["/Users/hellbound/juce-mcp-project/mcp-server/index.js"]
}
}
}
Available Resources
juce://docs/getting-started- JUCE framework introductionjuce://docs/audio-processor-basics- AudioProcessor fundamentalsjuce://docs/dsp-basics- DSP module guidejuce://docs/parameters- Parameter managementjuce://templates/basic-plugin- Plugin template structure
Available Tools
- search_juce_docs - Search JUCE documentation
- generate_plugin_code - Generate boilerplate code (processor, editor, parameters, dsp-chain)
- explain_juce_concept - Get detailed explanations of JUCE concepts
Part 2: JUCE Plugin Template
A complete, production-ready VST plugin template with modern JUCE architecture.
Features
- ✅ AudioProcessor with DSP chain
- ✅ AudioProcessorValueTreeState for parameter management
- ✅ Custom AudioProcessorEditor with GUI
- ✅ Input/Output gain controls
- ✅ State save/load functionality
- ✅ Stereo/Mono support
- ✅ Clean, commented code
Project Structure
juce-template/
├── PluginProcessor.h # Audio processing header
├── PluginProcessor.cpp # Audio processing implementation
├── PluginEditor.h # GUI header
└── PluginEditor.cpp # GUI implementation
Using the Template
Option 1: Create New Projucer Project
- Open Projucer
- Create new Audio Plug-In project
- Replace
PluginProcessor.h/cppandPluginEditor.h/cppwith template files - Configure plugin formats (VST3, AU, AAX)
- Save and open in your IDE
Option 2: Add to Existing Project
- Copy template files to your project's
Source/directory - Rename classes from
CustomPlugin*to your plugin name - Update
#includestatements - Add to Projucer and save
Key Components
AudioProcessor (PluginProcessor.cpp)
- prepareToPlay() - Initialize DSP with sample rate and buffer size
- processBlock() - Main audio processing loop
- createParameterLayout() - Define plugin parameters
- getStateInformation() - Save plugin state
- setStateInformation() - Restore plugin state
AudioProcessorEditor (PluginEditor.cpp)
- Constructor - Create and configure UI components
- paint() - Custom graphics and styling
- resized() - Layout UI components
Customization Guide
Adding Parameters
In PluginProcessor.cpp, add to createParameterLayout():
params.push_back(std::make_unique<juce::AudioParameterFloat>(
"cutoff",
"Cutoff Frequency",
juce::NormalisableRange<float>(20.0f, 20000.0f, 1.0f, 0.3f),
1000.0f,
"Hz"
));
Adding DSP Processors
In PluginProcessor.h:
private:
juce::dsp::StateVariableTPTFilter<float> filter;
juce::dsp::Reverb reverb;
In prepareToPlay():
filter.prepare(spec);
reverb.prepare(spec);
In processBlock():
filter.process(context);
reverb.process(context);
Adding UI Controls
In PluginEditor.h:
private:
juce::Slider cutoffSlider;
juce::Label cutoffLabel;
std::unique_ptr<juce::AudioProcessorValueTreeState::SliderAttachment> cutoffAttachment;
In PluginEditor.cpp constructor:
cutoffSlider.setSliderStyle(juce::Slider::RotaryHorizontalVerticalDrag);
addAndMakeVisible(cutoffSlider);
cutoffAttachment = std::make_unique<juce::AudioProcessorValueTreeState::SliderAttachment>(
audioProcessor.getAPVTS(), "cutoff", cutoffSlider
);
Building Your Plugin
- Open project in Projucer
- Set plugin formats (VST3, AU, AAX)
- Configure company name and plugin ID
- Export to IDE (Xcode, Visual Studio, etc.)
- Build in your IDE
Plugin Formats
The template supports:
- VST3 - Cross-platform (Windows, macOS, Linux)
- AU (Audio Unit) - macOS only
- AAX - Pro Tools (requires AAX SDK)
- Standalone - Desktop application
Development Workflow
With MCP Server
- Start Claude Desktop with MCP server configured
- Use
search_juce_docstool to find documentation - Use
generate_plugin_codeto create components - Use
explain_juce_conceptfor detailed explanations
Testing
- Build plugin in your IDE
- Copy to plugin folder:
- macOS VST3:
~/Library/Audio/Plug-Ins/VST3/ - macOS AU:
~/Library/Audio/Plug-Ins/Components/ - Windows VST3:
C:\Program Files\Common Files\VST3\
- macOS VST3:
- Open in DAW (Ableton, Logic, Reaper, etc.)
- Test audio processing and UI
Resources
Troubleshooting
MCP Server Issues
- Ensure Node.js is installed:
node --version - Check Claude Desktop config path is correct
- Restart Claude Desktop after config changes
- Check logs in Claude Desktop for errors
Build Issues
- Verify JUCE path in Projucer
- Check C++ standard is C++17 or higher
- Ensure all modules are enabled (juce_audio_processors, juce_dsp, etc.)
- Update JUCE to latest version
Plugin Not Appearing in DAW
- Check plugin was copied to correct directory
- Rescan plugins in DAW
- Check plugin validation (macOS:
auval -a, Windows: Plugin validation in DAW) - Ensure architecture matches DAW (x86_64 vs arm64)
License
Template code is provided as-is for educational and commercial use.
JUCE framework has its own licensing terms - check juce.com for details.