MCP server for Sonilo AI music generation API
Project description
Sonilo MCP Server
An MCP (Model Context Protocol) server that exposes Sonilo's AI music generation API to MCP-compatible clients (Claude Desktop, Cursor, etc.).
Install
uvx sonilo-mcp
Or install with pip:
pip install sonilo-mcp
Audio Playback Dependencies
The play_audio tool requires PortAudio at runtime (for sounddevice). On macOS/Linux, install via:
- macOS:
brew install portaudio - Debian/Ubuntu:
sudo apt-get install libportaudio2
uvx sonilo-mcp and pip install will pull the Python bindings, but the system PortAudio library must be installed separately. The other tools (text_to_music, video_to_music, get_account_services, get_usage) work without PortAudio.
Configuration
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"sonilo": {
"command": "uvx",
"args": ["sonilo-mcp"],
"env": {
"SONILO_API_KEY": "sk_live_..."
}
}
}
}
Get your API key at https://platform.sonilo.com/dashboard/api-keys.
Codex
Add the server to ~/.codex/config.toml:
[mcp_servers.sonilo]
command = "uvx"
args = ["sonilo-mcp"]
[mcp_servers.sonilo.env]
SONILO_API_KEY = "sk_live_..."
Restart Codex (or start a new session) to load it, then run /mcp to confirm
sonilo is connected and its tools are listed.
Environment Variables
| Variable | Default | Description |
|---|---|---|
SONILO_API_KEY |
(required) | Bearer token. |
SONILO_API_URL |
https://api.sonilo.com |
Public API base URL. |
SONILO_MCP_BASE_PATH |
~/Desktop |
Default output directory and base for relative input paths. Also the confinement boundary (see below). |
SONILO_MCP_ALLOW_ANY_PATH |
false |
Set to true to let tools read/write files outside SONILO_MCP_BASE_PATH. |
TIME_OUT_SECONDS |
300 |
Generation timeout. |
File access & confinement
By default, the file tools (video_to_music input, play_audio, and any
output_directory) are confined to SONILO_MCP_BASE_PATH. Paths that
resolve outside it (after symlink resolution) are rejected. This limits the
blast radius if a client is tricked into reading or exfiltrating arbitrary
files. To opt out — e.g. to read a video from elsewhere on disk — set
SONILO_MCP_ALLOW_ANY_PATH=true.
Tools
| Tool | Description | Cost |
|---|---|---|
text_to_music(prompt, duration, output_directory?) |
Generate music from a text prompt. | ✅ |
video_to_music(video_path? | video_url?, prompt?, output_directory?) |
Generate music matched to a video. | ✅ |
get_account_services() |
List available services and limits. | ❌ |
get_usage(days=30) |
Show usage summary + per-day breakdown. | ❌ |
play_audio(input_file_path) |
Play a local audio file. | ❌ |
Tools marked ✅ make API calls that incur charges on your Sonilo account.
Output Format
Generated audio is saved as .m4a (AAC in MP4 container — this is what the backend currently emits). File names use the title returned by the backend (slugified) or a sonilo-<timestamp>.m4a fallback. When multiple parallel streams are returned, a -<index> suffix is appended.
Common Errors
| Message | What to do |
|---|---|
Invalid SONILO_API_KEY |
Verify the key at https://platform.sonilo.com/dashboard/api-keys. |
Insufficient minutes / Credit limit exceeded |
Top up at https://platform.sonilo.com/dashboard/billing. |
Rate limit exceeded |
Check get_account_services for your rpm/concurrency limits. |
Generation timed out |
Raise TIME_OUT_SECONDS. Check get_usage to confirm whether the backend completed and charged. |
Development
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sonilo_mcp-0.1.0.tar.gz.
File metadata
- Download URL: sonilo_mcp-0.1.0.tar.gz
- Upload date:
- Size: 18.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ffc437354ccf4f73f9440b276aec527a6adb7e7b0ef57be0d2fdb2a9c3d6ac4
|
|
| MD5 |
9d344095ba61eaa504eda5d2d0665192
|
|
| BLAKE2b-256 |
caa0e3dcbac195122af4fe1ad9a19455bbe6e126c8aedaf3f4a257ca04f474f1
|
File details
Details for the file sonilo_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sonilo_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e164e5bddaaf675630ecbd0777f09fb5e286b0cb98b0a262755468e83853b508
|
|
| MD5 |
c1a612304063f299a51e5924e52ccd73
|
|
| BLAKE2b-256 |
ff093b908559d5eeb9882cbc6d3ec6619b913fa4dc1609c825237242280f4d1c
|