apc-mcp

apc-mcp

apc-mcp is a Model Context Protocol server that brings audio plugin development workflows into any MCP-compatible client by wrapping CMake, ctest, clang-format, pluginval, and clap-validator into a clean tool interface for building, testing, linting, validating, and scaffolding JUCE, CLAP, VST3, and ARA plugin projects.

Category
Visit Server

README

<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/scottmills306/apc-mcp/main/assets/logo-dark.svg"> <img alt="apc-mcp" src="https://raw.githubusercontent.com/scottmills306/apc-mcp/main/assets/logo.svg" width="520"> </picture> </p>

<p align="center"> <a href="#quick-start"><b>Quick Start</b></a> • <a href="#tools"><b>Tools</b></a> • <a href="#configuration"><b>Configuration</b></a> • <a href="#development"><b>Development</b></a> </p>

<p align="center"> <a href="https://github.com/scottmills306/apc-mcp/actions"><img src="https://img.shields.io/github/actions/workflow/status/scottmills306/apc-mcp/publish.yml?branch=main&logo=github&label=CI" alt="CI"></a> <a href="https://github.com/scottmills306/apc-mcp/releases"><img src="https://img.shields.io/github/v/release/scottmills306/apc-mcp?logo=github&label=Release" alt="Release"></a> <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-18+-339933?logo=node.js&logoColor=white" alt="Node"></a> <a href="LICENSE"><img src="https://img.shields.io/github/license/scottmills306/apc-mcp" alt="License"></a> </p>

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

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.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured