Skip to main content
Glama

FM8 MCP Server

README.md4.65 kB
# FM8 MCP Server AI-controlled Native Instruments FM8 synthesizer via MIDI and Model Context Protocol. ## What This Does Lets Claude Desktop (or other MCP clients) control your FM8 synthesizer by sending MIDI CC messages through a virtual MIDI port. ## Requirements - Node.js 18+ - Native Instruments FM8 - Virtual MIDI port software: - **Windows**: [loopMIDI](https://www.tobias-erichsen.de/software/loopmidi.html) - **macOS**: IAC Driver (built-in) ## Quick Start git clone https://github.com/thesigma1receptor/fm8MCP.git cd fm8MCP npm install npm run build ## Setup Virtual MIDI ### Windows 1. Install and run loopMIDI https://www.tobias-erichsen.de/software/loopmidi.html 2. Remove any existing ports 3. Create port named `fm8` ### macOS 1. Open Audio MIDI Setup 2. Window → Show MIDI Studio 3. Double-click IAC Driver 4. Enable "Device is online" 5. Create port named `fm8` ### Configure FM8 1. Set MIDI input to `fm8` port by clicking off/on, change to on 2. Go to Master tab and load included MCP.f8c file 3. Right click any operators that are off to enable them ## Claude Desktop Setup Edit your Claude config file: **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` Included in repo, or amend yours with: { "mcpServers": { "fm8": { "command": "node", "args": [ "C:/path/to/fm8-mcp-server/dist/server.js", "--transport=stdio", "--midi-port-name=fm8", "--channel=1" ] } } } Restart Claude Desktop and you're ready! ## AnythingLLM Setup **Requirements**: Ollama with `llama3.1` or `qwen2.5:4b` minimum Edit: `%APPDATA%\anythingllm-desktop\storage\plugins\anythingllm_mcp_servers.json` Included in repo, or amend yours with: { "fm8": { "name": "FM8 Control", "command": "node C:/path/to/fm8-mcp-server/dist/server.js", "args": ["--transport=stdio", "--midi-port-name=fm8", "--channel=1"], "env": {}, "cwd": "C:/path/to/fm8-mcp-server" } } 1. Restart AnythingLLM 2. Enable MCP server in workspace settings 3. Use `@agent` in chat to access tools ## What You Can Control ### FM8 Matrix (CC 0-62) All operator-to-operator modulation routes (A→B, B→C, etc.) ### Operator Outputs (CC 63-70) Operator-to-Output levels (A→Out, B→Out, etc.) ### Frequency Ratios (CC 72-77) Harmonic/inharmonic relationships for each operator See `mappings.json` for complete CC reference. ## Example Claude Prompts - "Create an FM bell sound" - "Set operator A to modulate B at 75%" - "Make a pure sine wave" - "Route operator C to output at full volume" - "Show all available FM8 controls" If you want to give Claude free reign to try things: -"Ratios are from 0 - 64:1, 127 being 64, feel free to look up fm synthesis techniques. There 8 operators, A-F are pure sine waves, X is a noise oscillator and Z is a filter. Let's see what you can come up with!" ## Make it your own! If you want to add any functionality, ie, more midi cc, use the standalone fm8, turn on midi learn and I used touchosc to make ~80 controls and map things. Look at mappings.json and add start with cc #78. There are also ways with mcp to give claude memory and better instructions. So he could potentially learn how to make complex sounds. ## Tip This also works from VSCode with copilot. Start server: `node C:\fm8MCP\dist\server.js --transport=stdio --midi-port-name=fm8 --channel=1` Example command for agent: `node -e "const easymidi = require('easymidi'); const out = new easymidi.Output('fm8'); console.log('⚡ Creating neuro bass...'); out.send('cc', {controller: 0, value: 95, channel: 0}); setTimeout(() => out.send('cc', {controller: 1, value: 110, channel: 0}), 20); setTimeout(() => out.send('cc', {controller: 8, value: 105, channel: 0}), 40); setTimeout(() => out.send('cc', {controller: 9, value: 90, channel: 0}), 60); setTimeout(() => out.send('cc', {controller: 17, value: 100, channel: 0}), 80); setTimeout(() => out.send('cc', {controller: 63, value: 127, channel: 0}), 100); setTimeout(() => out.send('cc', {controller: 64, value: 110, channel: 0}), 120); setTimeout(() => { console.log('🎵 Neuro bass loaded! Play low notes (C1-C2)'); process.exit(0); }, 400);"` ## Troubleshooting **No MIDI signal** - loopMIDI/IAC running? - FM8 input set to `fm8` port? - MIDI channel matches (default: 1)? **Server won't start** - Run `npm run build` first - Check Node version: `node --version` **Claude can't find it** - Use absolute paths in config - Forward slashes even on Windows - Restart Claude after config changes ## License MIT

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/thesigma1receptor/fm8MCP'

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