Skip to main content
Glama

apc-mcp is a Model Context Protocol server for audio plugin development. It wraps the tools you already use — CMake, ctest, clang-format, pluginval, clap-validator — into a clean MCP tool interface for building, testing, linting, validating, and scaffolding plugin projects across JUCE, CLAP, VST3, and ARA formats.

Works with any MCP client: Claude Code, OpenCode, VS Code with MCP, Continue.dev, and more.


Quick Start

Add one entry to your MCP config — no npm, no clone, no setup:

{
  "mcp": {
    "apc-mcp": {
      "type": "local",
      "command": ["npx", "-y", "github:scottmills306/apc-mcp"],
      "enabled": true
    }
  }
}

That's it. npx handles fetching and caching. Updates automatically when you restart your client.

Requirements

  • Node.js 18+

  • CMake 3.22+ — required for build/configure tools

  • clang-format — required for lint tool

  • pluginval — required for VST3 validation

  • clap-validator — required for CLAP validation

  • A JUCE/CLAP/VST3 audio plugin project with a plugins/ directory


Related MCP server: REAPER MCP Server

Tools

Tool

Description

audio_plugin_build

CMake configure + build with parsed error/warning counts

audio_plugin_configure

CMake configure with custom generator and flags

audio_plugin_test

ctest runner with pass/fail/total summary

audio_plugin_lint

clang-format check (dry-run) or auto-fix on C++ sources

audio_plugin_plugins

Discover plugins with metadata — text or JSON output

audio_plugin_validate

Run pluginval (VST3) or clap-validator on built binaries

audio_plugin_create

Scaffold a new CLAP or JUCE plugin from production templates

Build

audio_plugin_build()
audio_plugin_build(config="Release", clean=true)
audio_plugin_build(projectPath="/path/to/project", target="MyPlugin_Standalone")

Returns structured output with error count, warning count, and the first 20 of each.

Configure

audio_plugin_configure(generator="Ninja")
audio_plugin_configure(options="-DAPC_ENABLE_VISAGE=ON")

Test

audio_plugin_test()
audio_plugin_test(config="Release", testName="MyPluginTest")

Returns pass/failed/total summary.

Lint

audio_plugin_lint()
audio_plugin_lint(fix=true)
audio_plugin_lint(target="plugins/Foo/Source")

Dry-run by default. Pass fix=true to format in place.

List plugins

audio_plugin_plugins(format="json")

Omitting format returns human-readable text. Use format="json" for programmatic consumption.

Validate

audio_plugin_validate()
audio_plugin_validate(format="VST3")
audio_plugin_validate(format="CLAP")

Scans the build directory for plugin binaries and runs the appropriate validator on each.

Scaffold

audio_plugin_create(name="Phaser9000", type="clap")
audio_plugin_create(name="MyVerb", type="juce", vendor="MyCompany", formats="VST3;AU")
audio_plugin_create(name="SimpleDelay", type="clap", vendor="MyCompany", description="A simple delay effect")

Generates a working plugin stub with CMakeLists.txt, source files, and proper CLAP entry point or JUCE AudioProcessor structure.


Configuration

Per-project config

Drop an apc-mcp.json in your project root. When this file is present, projectPath is optional — the server detects your project from the working directory.

{
  "generator": "Ninja",
  "config": "Release",
  "buildDir": "build",
  "pluginsDir": "plugins",
  "validateFormats": ["VST3", "CLAP"],
  "validateCommand": "pluginval",
  "clapValidatorCommand": "clap-validator"
}

Expected layout

my-plugin/
├── apc-mcp.json             # Per-project config (optional)
├── CMakeLists.txt           # Root CMake project
├── plugins/
│   ├── MyPlugin/
│   │   ├── CMakeLists.txt   # Per-plugin CMake target
│   │   ├── Source/
│   │   └── status.json      # Optional metadata (type, version, etc.)
│   └── ...
├── common/                  # Shared sources (optional)
└── build/                   # Build directory (auto-created)

Development

git clone https://github.com/scottmills306/apc-mcp.git
cd apc-mcp
npm install
npm test          # 11 tests, node:test, zero deps
npm run lint      # syntax check on the server code itself

Project structure

apc-mcp/
├── index.js                    # MCP server — single file, 7 tools
├── templates/
│   ├── clap/                   # CLAP plugin scaffold template
│   └── juce/                   # JUCE plugin scaffold template
├── tests/
│   └── server.test.js          # 11 integration tests
├── .github/
│   ├── workflows/
│   │   ├── publish.yml         # CI: test on push/PR, publish on tag
│   │   └── codeql.yml          # CodeQL security analysis
│   ├── dependabot.yml          # Automated dependency updates
│   └── ISSUE_TEMPLATE/         # Bug report + feature request templates
├── .editorconfig               # Editor consistency
├── CHANGELOG.md
├── CONTRIBUTING.md
└── LICENSE

Versioning

This project follows Semantic Versioning. Breaking changes to any tool's input schema or output format increment the major version.


FAQ / Troubleshooting

Q: I get "command not found: cmake"
A: apc-mcp uses your system's existing toolchain. Install CMake via your package manager: brew install cmake, apt install cmake, or download from cmake.org.

Q: Does it work with VS Code / Cursor / Continue.dev?
A: Yes — any MCP client works. Point it at npx github:scottmills306/apc-mcp using whatever MCP config format that client uses.

Q: How do I update to a new version?
A: If using npx github:..., clear the npx cache: npx --cache clear github:scottmills306/apc-mcp — or just restart your MCP client, npx checks for updates automatically.

Q: Can I use this with non-JUCE projects?
A: Yes. audio_plugin_build, audio_plugin_configure, audio_plugin_test, and audio_plugin_lint work with any CMake-based C++ project. Only audio_plugin_create and audio_plugin_validate are plugin-format-specific.


License

MIT © 2026 Scott Mills. See LICENSE.

A
license - permissive license
-
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
8Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/scottmills306/apc-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server