soundraw-game-bgm
# Soundraw Game BGM MCP Server
An MCP (Model Context Protocol) server that enables AI agents to generate game background music. Uses **DeepSeek** for intelligent scene analysis and parameter generation, and **Soundraw B2B API V3** for actual music generation.
### š¶ Why Game Developers ā¤ļø This
Modern games use dynamic, adaptive music ā but composing custom BGM is costly and time-consuming.
**soundraw-game-bgm automates composition** by analyzing your game scenes and generating royalty-free background music that *fits the mood and gameplay context*.
It even outputs ready-to-use integration code for **Unity** and **Unreal Engine** so you can drop the track in with no extra engineering work.
## Architecture
```
Game Dev Agent (Claude/Cursor)
ā calls MCP tool
MCP Server (soundraw-game-bgm)
ā uses DeepSeek API for reasoning
DeepSeek analyzes game context
ā generates Soundraw parameters (moods, genres, themes, tempo, energy)
Soundraw API generates actual music
ā async: returns request_id ā poll for result
Game Dev Agent receives share_link + audio_url
```
## Features
- **Cost-Optimized**: Uses DeepSeek (~90% cheaper than Claude) for scene analysis
- **4 MCP Tools**: Full suite for game audio needs
- **Real Soundraw API**: Uses B2B API V3 with proper async handling
- **Engine Integration**: Auto-generated code snippets for Unreal, Unity, and Godot
- **Adaptive Audio**: Stem muting for dynamic game audio layers
## Installation
```bash
git clone https://github.com/yksanjo/soundraw-game-bgm.git
cd soundraw-game-bgm
npm install
npm run build
```
## Configuration
Create a `.env` file:
```env
DEEPSEEK_API_KEY=sk-your-deepseek-api-key
SOUNDRAW_API_KEY=your-soundraw-bearer-token
```
## Testing API Connections
Before using the MCP server, verify your API keys work:
```bash
# Quick test (checks API connections only)
npm run test:apis
# Full test (generates a 10-second track - uses API credits)
npm run test:apis:full
```
Expected output:
```
š® Soundraw Game BGM MCP Server - API Test
==================================================
Testing DeepSeek API
==================================================
API Key: sk-xxxxxx...
ā
DeepSeek Response: "DeepSeek OK"
==================================================
Testing Soundraw API Connection
==================================================
API Key: xxxxxxxxxx...
ā
Soundraw Account: Number of queries: X from ...
==================================================
Testing Soundraw Tags Endpoint
==================================================
ā
Available genres for "Epic" mood: Orchestra, Electronica...
ā
Available themes: Gaming, Cinematic...
==================================================
Test Summary
==================================================
ā
DeepSeek API
ā
Soundraw Connection
ā
Soundraw Tags
ā Music Generation (skipped without --full flag)
š Core APIs working! Ready to use the MCP server.
```
## MCP Tools
### 1. `generate_bgm`
Generate background music based on game scene description.
**Input:**
```json
{
"scene": "boss_fight",
"game_genre": "dark_souls_like",
"intensity": "high",
"mood": "epic",
"duration_seconds": 60,
"engine": "unreal",
"file_format": "m4a"
}
```
**Output:**
```json
{
"share_link": "https://soundraw.io/edit_music?m=...",
"audio_url": "https://..../final_xxx.m4a",
"request_id": "...",
"duration_seconds": 60,
"bpm": 140,
"timestamps": [{"start": 0, "end": 15, "energy": "Low"}, ...],
"file_format": "m4a",
"integration_code": "// Unreal Engine 5 integration...",
"deepseek_reasoning": "Boss fights need epic orchestral...",
"soundraw_params": {"moods": ["Epic", "Dark"], "genres": ["Orchestra"], ...}
}
```
### 2. `get_bgm_variations`
Generate variations of existing BGM.
**Input:**
```json
{
"share_link": "https://soundraw.io/edit_music?m=...",
"variation_type": "similar",
"length": 60
}
```
Or customize energy/stems:
```json
{
"share_link": "https://soundraw.io/edit_music?m=...",
"variation_type": "customize",
"energy_preset": "building",
"mute_stems": ["me"]
}
```
**Stem codes:** `bc` (backing), `bs` (bass), `dr` (drums), `me` (melody), `fe` (fill end), `ff` (fill start)
### 3. `adaptive_layer_control`
Generate multiple versions with different stems muted for adaptive audio.
**Input:**
```json
{
"share_link": "https://soundraw.io/edit_music?m=...",
"layers_to_keep": ["drums", "bass", "melody", "backing"]
}
```
**Output:** Separate audio URLs for each layer + JavaScript integration code for runtime mixing.
### 4. `scene_transition_music`
Generate transition music between scenes.
**Input:**
```json
{
"from_scene": "peaceful village exploration",
"to_scene": "intense boss battle",
"transition_type": "stinger",
"duration_seconds": 15
}
```
**Transition Types:**
- `fade`: Gradual energy shift
- `stinger`: Dramatic accent
- `crossfade`: Smooth blend
## Usage with Claude Code
Add to `~/.mcp.json`:
```json
{
"mcpServers": {
"soundraw-game-bgm": {
"command": "node",
"args": ["/path/to/soundraw-game-bgm/dist/index.js"],
"env": {
"DEEPSEEK_API_KEY": "sk-your-key",
"SOUNDRAW_API_KEY": "your-bearer-token"
}
}
}
}
```
Then restart Claude Code and try:
```
Generate epic boss battle music for my Dark Souls-like game, 60 seconds, with Unreal Engine integration code
```
## Soundraw API Parameters
The server maps game scenes to these Soundraw parameters:
**Moods:** Angry, Busy & Frantic, Dark, Dreamy, Elegant, Epic, Euphoric, Fear, Funny & Weird, Glamorous, Happy, Heavy & Ponderous, Hopeful, Laid Back, Mysterious, Peaceful, Restless, Romantic, Running, Sad, Scary, Sentimental, Sexy, Smooth, Suspense
**Genres:** Acoustic, Hip Hop, Beats, Funk, Pop, Drum n Bass, Trap, Tokyo night pop, Rock, Latin, House, Tropical House, Ambient, Orchestra, Electro & Dance, Electronica, Techno & Trance, Jersey Club, Drill, R&B, Lofi Hip Hop, World, Afrobeats, Christmas
**Themes:** Ads & Trailers, Broadcasting, Cinematic, Corporate, Comedy, Cooking, Documentary, Drama, Fashion & Beauty, Gaming, Holiday Season, Horror & Thriller, Motivational & Inspiring, Nature, Photography, Sports & Action, Technology, Travel, Tutorials, Vlogs, Wedding & Romance, Workout & Wellness
**Tempo:** low (<100 bpm), normal (100-125 bpm), high (>125 bpm)
**Energy Levels:** Muted, Low, Medium, High, Very High
## Development
```bash
# Run in development mode (watches for changes)
npm run dev
# Type check
npm run typecheck
# Build
npm run build
# Run built version
npm start
# Test API connections
npm run test:apis
```
## Cost
| Component | Purpose | Cost |
|-----------|---------|------|
| DeepSeek | Scene analysis ā Soundraw params | ~$0.001/request |
| Soundraw | Music generation | Per your B2B plan |
DeepSeek handles the reasoning at ~90% less cost than Claude API.
## License
MIT
TDQS
Scored across 4 tools
Each tool has a distinct purpose (generation, adaptation, variation, transition). Some slight overlap between adaptive_layer_control and get_bgm_variations regarding stems, but descriptions clarify the different contexts (real-time mixing vs. variation creation).
All tools follow a consistent verb_noun pattern in snake_case (e.g., generate_bgm, get_bgm_variations). No mixing of conventions or irregular naming.
Four tools cover the essential functionalities for game background music generation: initial generation, adaptive layering, variations, and transitions. This is well-scoped and not excessive.
The set covers core operations but lacks a tool for listing or deleting existing BGMs. Otherwise, the lifecycle from generation to adaptation to variation to transition is well-covered.