presonus-studiolive-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@presonus-studiolive-mcpshow me the current scene and meter summary"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
presonus-studiolive-mcp
An MCP (Model Context Protocol) server that connects AI coding agents and assistants to PreSonus StudioLive III series mixers over the local network.
Exposes live mixer context — channel names, mute/solo/fader state, Fat Channel compressor/EQ models, meter activity, and scene information — as MCP resources and tools so that AI agents can read, reason about, and assist with live sound engineering without touching hardware autonomously.
Current status: Read-only MVP. The MCP server exposes 5 resources + 3 tools. No write tools are implemented (ADR-005). Empirically validated on StudioLive 32SC firmware 3.3.0.109659.
Contents
Related MCP server: OSC MCP Server
What this does
The MCP server gives an AI agent these capabilities:
Capability | How |
Discover mixers on the network |
|
Read channel names, mute, solo, fader, pan, color |
|
Know which Fat Channel compressor/EQ model is active per channel |
|
Monitor signal activity (silent / active / hot / clipping) |
|
Know which project and scene are loaded |
|
Validate mixer identity before acting |
|
Refresh state cache on demand |
|
Agents cannot change any mixer parameter yet (write tools are not implemented by design — see ADR-005).
Hardware requirements
Requirement | Details |
Mixer | PreSonus StudioLive III series (16, 16R, 24R, 32SC, 32R) |
Network | Mixer and MCP server host on the same LAN segment |
Protocol | TCP port 53000 (UC Surface / Studio One Remote protocol) |
Coexistence | UC Surface, QMix-UC, and this server can connect simultaneously |
Internet | Not required |
Quick start
Prerequisites
Node.js 20+
pnpm 9+
Install and build
git clone https://github.com/zarfld/presonus-studiolive-mcp.git
cd presonus-studiolive-mcp
pnpm install # installs all workspace packages + applies featherbear patch
pnpm build # compiles all 4 packagesRun the MCP server (stdio transport)
pnpm mcp:serverOr without a prior build, using tsx:
pnpm mcp:server:devThe server logs to stderr, connects to discovered mixers on startup, and accepts MCP requests on stdin/stdout.
Connect from Claude Desktop / VS Code
Add to your MCP client config:
{
"mcpServers": {
"presonus-studiolive": {
"command": "node",
"args": ["<absolute-path>/packages/presonus-mcp-server/dist/index.js"]
}
}
}Probe the hardware first (optional but recommended)
pnpm probe:dev discover # find mixers on your LAN
pnpm probe:dev dump-state -d <ip> # dump full state tree to captures/
pnpm probe:dev probe-fat-channel -d <ip> -c LINE:1 # inspect Fat Channel state for ch1Packages
This is a pnpm monorepo with four packages under packages/. Dependencies flow one way: domain ← adapter ← inspector | server.
@presonus-mcp/domain
Pure TypeScript/Zod schema library — the single source of truth for all data contracts.
MixerIdentitySchema— deviceId, serial, IP, port, role, controllableMixerChannelSchema— name, mute, solo, fader (dB/linear/raw), pan, color,compModelName,eqModelNameMeterSummarySchema— time-windowed channel activity classificationFatCompressorStateSchema/FatEqStateSchema— discriminated unions per modelCOMPRESSOR_MODEL_BY_CLASSID/EQ_MODEL_BY_CLASSID— full GUID → model name maps for scene file decodingdecodeCompressorModel(value)/decodeEqModel(value)— live state float → model name helpers
No runtime dependency on featherbear or the MCP SDK.
@presonus-mcp/adapter
Hardware adapter wrapping @featherbear/presonus-studiolive-api. Manages connections, state, and meters.
discoverMixers({ timeoutMs? })— UDP broadcast discoveryPresonusClientManager— connects/disconnects clients; providesgetSnapshot(),getIdentity(),getSummarizer()flattenFeatherbearState()— converts featherbear's nested_data.internal.children.*tree to flat dot-notation keysPresonusMeterSummarizer— ring-buffer of raw uint16 meter packets → time-windowedMeterSummarymapRawStateToSnapshot()— translates flat state keys to normalizedMixerSnapshot
The featherbear dependency is patched (patches/@featherbear__presonus-studiolive-api@1.8.0.patch) to add UBJSON I (int16) and D (float64) type support missing from the original.
@presonus-mcp/inspector
Probe CLI binary (presonus-probe) for hardware reconnaissance during development. See Probe CLI.
@presonus-mcp/server
MCP server that wires the adapter to the MCP SDK over stdio transport. Registers all 3 tools and 5 resources at startup and runs background discovery.
MCP server — tools and resources
Tools
discover_mixers
Trigger UDP discovery of StudioLive III mixers on the local network.
// Input (all optional)
{ timeoutMs?: number } // discovery window in ms; default 5000
// Output: JSON array of MixerIdentity
[{ deviceId, serial, model, firmware, role, ipAddress, port }]refresh_mixer_state
Reconnect to a mixer and refresh its full state cache (including Fat Channel model decoding).
// Input
{ deviceId: string } // from discover_mixers output
// Output
{ success: boolean, channelCount: number, capturedAt: string }validate_mixer_identity
Verify a connected mixer matches expected serial and/or role before proceeding.
// Input
{
deviceId: string,
expectedSerial?: string,
expectedRole?: "FOH" | "STAGEBOX" | "MONITOR" | "UNKNOWN"
}
// Output
{ valid: boolean, reasons: string[] }Resources
presonus://mixers
All connected mixer identities.
presonus://mixer/{deviceId}/channels
Normalized channel list. Each channel includes:
{
id: string, // "line.ch1", "aux.ch3", "sub.ch1", …
selector: { type, channel },
name?: string, // label from mixer (e.g. "Kick In")
mute?: boolean,
solo?: boolean,
fader?: { db: number|null, linear: number|null },
pan?: number, // 0.0 left … 0.5 center … 1.0 right
linked?: boolean,
color?: string, // RGBA hex
// Fat Channel — decoded from live opt.compmodel / opt.eqmodel
compModelName?: string, // e.g. "FET", "BRIT_COMP", "FC_670"
eqModelName?: string // e.g. "STANDARD", "ALPINE_EQ_550", "SOLAR_69_EQ"
}presonus://mixer/{deviceId}/meters/summary
Time-windowed meter classification (last 10 seconds):
{
windowSec: number,
computedAt: string, // ISO 8601
silentChannels: string[], // channel ids with no signal
activeChannels: string[], // signal in normal range
hotChannels: string[], // approaching clip
clippingChannels: string[], // at or above clip threshold
noSignalButExpected: string[],
signalButUnexpected: string[]
}presonus://mixer/{deviceId}/scene/current
{
currentProject: string | null,
currentScene: string | null,
availableProjects: string[]
}presonus://mixer/{deviceId}/raw/state
Full raw state dump (pre-normalized flat dot-notation). For diagnostics and development only — do not use for agent reasoning logic.
Probe CLI
presonus-probe is the hardware reconnaissance tool used during development. Run via pnpm probe:dev <command>.
Command | Purpose |
| Find all StudioLive III mixers on the LAN; print serial/model/IP/role |
| Connect and dump full flat state tree as JSON to |
| Stream all featherbear data events as NDJSON |
| Capture raw meter stream as NDJSON |
| Compare two state dumps; identify changed keys (workflow: change one control → dump-state → diff → name the key) |
| Dump all Fat Channel state keys for a channel (e.g. |
| List projects and scenes stored on the mixer |
Note: Scene file content (
__classidGUIDs) is not accessible over the network API — it returns 0 bytes. Fat Channel model identity must be read from live state viaopt.compmodel.value/opt.eqmodel.value.
Fat Channel skill
A VS Code / Copilot skill is included at .github/Skills/PresonusFatChannelSelection/SKILL.md.
It gives AI agents:
Character, hardware archetype, best-use, and avoid-when for all 11 compressor models (STANDARD, TUBE, FET, BRIT_COMP, CLASSIC_COMPRESSOR, COMP_160, EVEREST_C100A, FC_670, RC_500_COMPRESSOR, TUBE_CB, VT_1_COMPRESSOR)
Character and use-case guidance for all 10 EQ models (STANDARD, PASSIVE, VINTAGE, ALPINE_EQ_550, BAXANDALL_EQ, RC_500_EQ, SOLAR_69_EQ, TUBE_EQ, VINTAGE_3_BAND_EQ, VT_1_EQ)
Quick-reference selector tables (source instrument → recommended model)
Decision framework for choosing between transparency, punch, warmth, and bus treatment
Full
__classidGUID reference for all models (fromclassID_Mapping.md, empirically confirmed on 32SC firmware 3.3.0.109659)Exact MCP resource/tool schemas and accepted property lists per model
Development
Commands
pnpm install # install + apply featherbear patch
pnpm build # compile all packages
pnpm build:watch # watch mode
pnpm clean # remove all dist/ and tsbuildinfo
pnpm test # unit tests (no hardware needed)
pnpm test:watch # watch mode
pnpm test:coverage # with coverage report
pnpm test:hil # hardware-in-loop tests (requires HIL_PRESONUS=1 + physical mixer)
pnpm typecheck # tsc dry-run
pnpm probe:dev discover # discover mixers
pnpm probe:dev dump-state -d <mixer-ip> # capture state
pnpm probe:dev probe-fat-channel -d <ip> -c LINE:1 # inspect channel
pnpm mcp:server:dev # run MCP server (tsx, no build needed)
pnpm mcp:server # run MCP server (compiled dist/)Test strategy
Test type | Command | Requires hardware |
Unit (schema/adapter logic) |
| No |
HIL (hardware-in-loop) |
| Yes — |
Unit tests cover all domain schemas, decode functions, flattenFeatherbearState, and PresonusMeterSummarizer using captured fixture data from captures/.
Adding a new raw state key
pnpm probe:dev dump-state -d <ip>before and after changing a control in UC Surfacepnpm probe:dev diff-state --before <before.json> --after <after.json>— identifies the changed keyAdd the constant to
packages/presonus-adapter/src/types.tsMap it in
mapRawStateToSnapshot()or expose viarawExtraAdd a unit test with a fixture snapshot
Architecture
Three-layer architecture (ADR-002):
┌─────────────────────────────────────────┐
│ AI Agent / MCP Client │
│ (Claude Desktop, VS Code, custom) │
└────────────────┬────────────────────────┘
│ stdio (MCP protocol)
┌────────────────▼────────────────────────┐
│ @presonus-mcp/server │
│ 5 resources + 3 tools (read-only MVP) │
└────────────────┬────────────────────────┘
│ internal API
┌────────────────▼────────────────────────┐
│ @presonus-mcp/adapter │
│ PresonusClientManager │
│ flattenFeatherbearState() │
│ PresonusMeterSummarizer │
└────────────────┬────────────────────────┘
│ TCP 53000 (UC Surface protocol)
┌────────────────▼────────────────────────┐
│ StudioLive III mixer │
│ (32SC, 32R, 24R, 16R, 16) │
└─────────────────────────────────────────┘Domain schemas (@presonus-mcp/domain) sit outside this stack and are imported by both adapter and server — never the other way round.
Key decisions:
ADR-001 — TypeScript/Node.js 20+
ADR-002 — Three-layer architecture above
ADR-003 — pnpm monorepo, 4 packages
ADR-004 —
@featherbear/presonus-studiolive-apiv1.8.0 pinned + patched as hardware adapterADR-005 — Read-only-first; write operations require a
ProposedChangeSet+ audit log + confirmation flow before being enabled
Known gaps / future work
Write tools —
set_fader,set_mute,apply_change_set(ADR-005 gating)AVB routing —
AudioRouteSchemain domain is a stubShow prep layer —
ShowInputSchemais a stub (rider analysis, channel template suggestions)Scene file access —
__classidGUIDs not accessible over network; only live state model IDs availableHIL test coverage — tests with
*.hil.test.tsrequire a physical mixer
License
[Specify your license here]
🎯 Purpose
This repository provides:
Standards-compliant software lifecycle management (IEEE/ISO/IEC)
XP practices integration (TDD, Pair Programming, Continuous Integration)
Phase-specific Copilot instructions with
applyTo:patternsSpec-driven development templates using GitHub Spec-Kit
Automated compliance checking and validation
📚 Standards Implemented
Standard | Purpose | Coverage |
ISO/IEC/IEEE 12207:2017 | Software life cycle processes | Complete lifecycle framework |
ISO/IEC/IEEE 29148:2018 | Requirements engineering | Requirements elicitation, analysis, specification |
IEEE 1016-2009 | Software design descriptions | Architecture and detailed design |
ISO/IEC/IEEE 42010:2011 | Architecture description | Architecture views, viewpoints, concerns |
IEEE 1012-2016 | Verification & validation | V&V planning, testing, reviews |
🚀 XP Practices Integrated
Test-Driven Development (TDD) - Write tests first
Continuous Integration - Integrate frequently
Pair Programming - Collaborative development
Simple Design - YAGNI principle
Refactoring - Continuous improvement
Collective Code Ownership - Shared responsibility
User Stories - Effective use cases
📁 Repository Structure
copilot-instructions-template/
├── .github/
│ ├── copilot-instructions.md # Root Copilot instructions
│ ├── workflows/ # CI/CD automation
│ └── ISSUE_TEMPLATE/ # Issue templates
│
├── 01-stakeholder-requirements/
│ ├── .github/copilot-instructions.md # Phase-specific instructions
│ ├── stakeholders/ # Stakeholder analysis
│ ├── business-context/ # Business needs
│ └── templates/ # Requirements templates
│
├── 02-requirements/
│ ├── .github/copilot-instructions.md
│ ├── functional/ # Functional requirements
│ ├── non-functional/ # Quality attributes
│ ├── use-cases/ # Use case specifications
│ └── user-stories/ # XP user stories
│
├── 03-architecture/
│ ├── .github/copilot-instructions.md
│ ├── decisions/ # ADRs (Architecture Decision Records)
│ ├── views/ # IEEE 42010 architecture views
│ ├── diagrams/ # C4, UML diagrams
│ └── constraints/ # Technical constraints
│
├── 04-design/
│ ├── .github/copilot-instructions.md
│ ├── components/ # Component designs
│ ├── interfaces/ # API specifications
│ ├── data-models/ # Data structures
│ └── patterns/ # Design patterns used
│
├── 05-implementation/
│ ├── .github/copilot-instructions.md
│ ├── src/ # Source code
│ ├── tests/ # Test-first XP tests
│ └── docs/ # Code documentation
│
├── 06-integration/
│ ├── .github/copilot-instructions.md
│ ├── integration-tests/ # Integration test suites
│ ├── ci-config/ # CI/CD configurations
│ └── deployment/ # Deployment scripts
│
├── 07-verification-validation/
│ ├── .github/copilot-instructions.md
│ ├── test-plans/ # IEEE 1012 test plans
│ ├── test-cases/ # Detailed test cases
│ ├── test-results/ # Test execution results
│ └── traceability/ # Requirements traceability
│
├── 08-transition/
│ ├── .github/copilot-instructions.md
│ ├── deployment-plans/ # Deployment strategies
│ ├── user-documentation/ # End-user guides
│ └── training-materials/ # Training resources
│
├── 09-operation-maintenance/
│ ├── .github/copilot-instructions.md
│ ├── monitoring/ # Operations monitoring
│ ├── incident-response/ # Incident management
│ └── maintenance-logs/ # Change logs
│
├── spec-kit-templates/
│ ├── requirements-spec.md # IEEE 29148 templates
│ ├── design-spec.md # IEEE 1016 templates
│ ├── architecture-spec.md # IEEE 42010 templates
│ ├── test-spec.md # IEEE 1012 templates
│ └── user-story-template.md # XP user story template
│
├── standards-compliance/
│ ├── checklists/ # Phase-specific checklists
│ ├── reviews/ # Review reports
│ └── metrics/ # Quality metrics
│
└── docs/
├── lifecycle-guide.md # Complete lifecycle guide
├── xp-practices.md # XP implementation guide
├── copilot-usage.md # How to use Copilot instructions
└── standards-reference.md # Standards quick reference🎓 How to Use This Template
1. Create New Project from Template
# Create repository from this template on GitHub
# OR clone and customize
git clone https://github.com/YOUR_ORG/copilot-instructions-template.git my-new-project
cd my-new-project2. Initialize Your Project
# Update project-specific information
# Edit .github/copilot-instructions.md with your project details
# Customize templates in spec-kit-templates/3. Follow the Lifecycle Phases
Start with Phase 01 and progress through each phase:
Stakeholder Requirements - Understand business needs
Requirements - Define what to build (IEEE 29148)
Architecture - Design system structure (IEEE 42010)
Design - Detail component design (IEEE 1016)
Implementation - Code with TDD (XP practices)
Integration - Continuous integration (XP)
Verification & Validation - Test thoroughly (IEEE 1012)
Transition - Deploy to production
Operation & Maintenance - Monitor and improve
4. Use Copilot with Phase Instructions
GitHub Copilot will automatically load phase-specific instructions based on the folder you're working in:
Navigate to a phase folder (e.g.,
02-requirements/)Copilot reads
.github/copilot-instructions.mdin that folderGet context-aware suggestions aligned with standards
5. Leverage Spec-Kit Templates
Use markdown specifications for AI-assisted development:
# Copy template for your feature
cp spec-kit-templates/requirements-spec.md 02-requirements/functional/feature-xyz.md
# Fill in the specification
# Use GitHub Copilot to generate code from spec🤖 Copilot Instructions Features
ApplyTo Patterns
Copilot instructions use applyTo: patterns to target specific file types:
applyTo:
- "02-requirements/**/*.md"
- "02-requirements/**/use-cases/*.md"
- "02-requirements/**/user-stories/*.md"Standards Enforcement
Each phase enforces relevant standards:
## Standards Compliance
- IEEE 29148:2018 - Requirements specification format
- Traceability matrix required
- Review checklist completion mandatoryXP Practices Integration
## XP Practices
- Write user stories in Given-When-Then format
- Maintain story point estimates
- Track velocity🎫 GitHub Issues Workflow
This template uses GitHub Issues as the primary traceability mechanism for all requirements, architecture decisions, and test cases. All artifacts are tracked as issues with bidirectional links.
Issue Types and Labels
Type | Label | Prefix | Description | Example |
Stakeholder Requirement |
|
| Business needs and context |
|
Functional Requirement |
|
| System functional behavior |
|
Non-Functional Requirement |
|
| Quality attributes |
|
Architecture Decision |
|
| Architectural choices |
|
Architecture Component |
|
| Component specifications |
|
Quality Scenario |
|
| ATAM quality scenarios |
|
Test Case |
|
| Verification specifications |
|
Additional labels:
Phase:
phase:01-stakeholder-requirements,phase:02-requirements, etc.Priority:
priority:critical,priority:high,priority:medium,priority:lowTest Type:
test-type:unit,test-type:integration,test-type:e2e,test-type:acceptanceStatus:
status:draft,status:approved,status:implemented,status:verified
Traceability Patterns
All issues must include traceability links:
## Traceability
- Traces to: #123 (parent StR issue)
- **Depends on**: #45, #67 (prerequisite requirements)
- **Verified by**: #89, #90 (test issues)
- **Implemented by**: #PR-15 (pull request)
- **Refined by**: #234, #235 (child requirements)Issue Templates
Issue templates are available in .github/ISSUE_TEMPLATE/:
stakeholder-requirement.ymlfunctional-requirement.ymlnon-functional-requirement.ymlarchitecture-decision.ymlarchitecture-component.ymlquality-scenario.ymltest-case.yml
Workflow Examples
1. Create Stakeholder Requirement Issue
# Using GitHub CLI
gh issue create \
--title "StR-001: User Authentication" \
--label "type:stakeholder-requirement,phase:01-stakeholder-requirements,priority:critical" \
--body "$(cat issue-body.md)"2. Create Functional Requirement from StR
## Traceability
- Traces to: #1 (StR-001: User Authentication)
## Description
System shall allow users to log in with username and password.
## Acceptance Criteria
- [ ] User can enter username and password
- [ ] System validates credentials
- [ ] User is redirected to dashboard on success
- [ ] Error message displayed on failure3. Link Code to Issues
"""
User authentication service.
Implements: #2 (REQ-F-AUTH-001: User Login)
Architecture: #5 (ADR-SECU-001: JWT Authentication)
Verified by: #10 (TEST-AUTH-LOGIN-001)
See: https://github.com/org/repo/issues/2
"""
class AuthenticationService:
pass4. Link Tests to Requirements
"""
Test user login functionality.
Verifies: #2 (REQ-F-AUTH-001: User Login)
Test Type: Integration
Priority: P0 (Critical)
"""
def test_user_login_success():
# Test implementation5. Link Pull Requests
## Description
Implements user authentication feature
## Related Issues
Fixes #2
Implements #5
Part of #1
## Traceability
- **Requirements**: #2 (REQ-F-AUTH-001)
- **Design**: #5 (ADR-SECU-001)
- **Tests**: #10 (TEST-AUTH-LOGIN-001)Python Automation Scripts
Available in scripts/:
generate-traceability-matrix.py- Generate REQ↔TEST↔CODE matrixtrace_unlinked_requirements.py- Find requirements without testsvalidate-traceability.py- Validate bidirectional linksscripts/generate-requirement-issues.py- Generate REQ issues from specsscripts/generate-test-issues.py- Generate TEST issues from requirementsscripts/validate-issue-traceability.py- Validate GitHub Issues traceability
Example usage:
# Find requirements without tests
python scripts/trace_unlinked_requirements.py
# Validate traceability
python scripts/validate-traceability.py
# Generate traceability matrix
python scripts/generate-traceability-matrix.py --output-htmlCI/CD Integration
GitHub Actions workflows validate traceability:
# .github/workflows/validate-traceability.yml
name: Validate Traceability
on: [pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate issue links
run: python scripts/validate-issue-traceability.py
- name: Check test coverage
run: python scripts/validate-trace-coverage.py
- name: Generate matrix
run: python scripts/generate-traceability-matrix.pyBest Practices
Always create issues before code - No code without linked issue
Use bidirectional links - Parent issues list children, children reference parents
Link PRs to issues - Use
Fixes #N,Implements #N,Part of #NInclude issue references in code - Docstrings, comments, commit messages
Validate traceability in CI - Block merges if links are missing
Keep issues up-to-date - Close when implemented and verified
Use labels consistently - Enables automated queries and reports
Querying Issues
# List all functional requirements
gh issue list --label "type:requirement:functional"
# Find requirements without tests
gh issue list --label "type:requirement:functional" --json number,title,labels \
| jq '.[] | select(.labels | map(.name) | contains(["status:verified"]) | not)'
# Show traceability for requirement #2
gh issue view 2 --json body | jq -r '.body' | grep -A 10 "## Traceability"
# List all open architecture decisions
gh issue list --label "type:architecture:decision" --state open🔍 Quality Assurance
Automated Checks
Standards compliance checking via GitHub Actions
Requirements traceability validation (GitHub Issues API)
Test coverage enforcement (XP: >80%)
Documentation completeness checks
Issue link validation (bidirectional traceability)
Review Gates
Each phase includes:
✅ Entry criteria checklist
✅ Phase activities checklist
✅ Exit criteria validation
✅ Standards compliance review
✅ Traceability validation (all requirements have tests)
📖 Documentation
Lifecycle Guide - Complete walkthrough of all phases
XP Practices Guide - How to apply XP techniques
Copilot Usage Guide - Maximizing Copilot effectiveness
Standards Reference - Quick reference to all standards
🛠️ Customization
Adding Custom Phases
Create folder:
XX-custom-phase/Add
.github/copilot-instructions.mdDefine applyTo patterns
Update root copilot-instructions.md
Extending Templates
Add templates to
spec-kit-templates/Follow Spec-Kit markdown format
Include standards references
Add examples
🤝 Contributing
This template is designed to be:
Forked for your organization
Customized to your processes
Extended with your practices
Shared with your teams
📄 License
[Specify your license here]
🔗 References
🚀 Get Started
Ready to build standards-compliant software with AI assistance? Start with Phase 01!
This server cannot be installed
Maintenance
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/zarfld/presonus-studiolive-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server