streamable-httpMITupdated 2mo ago
Tiny, zero-dependency clients + MCP manifest for the Tunova music API โ generate music with Suno (v5.5) over a simple REST or MCP interface. Generation is async and billed only on success: a failed render refunds itself.
What can you do with tunova?
Tunova SDK
Tiny, zero-dependency clients + MCP manifest for the Tunova music API โ generate music with Suno (v5.5) over a simple REST or MCP interface. Generation is async and billed only on success: a failed render refunds itself.
- Python โ
python/tunova.pyโ stdlib only, Python 3.8+. - Node / TypeScript โ
node/tunova.tsโ Node 18+ (fetchbuilt in). - MCP โ
server.jsonโ hosted Streamable-HTTP server athttps://api.tunova.ai/mcp.
Get a key (50 free tokens, no card) at https://tunova.ai. Full reference: https://api.tunova.ai/docs ยท live status: https://tunova.ai/status.
Tunova is an independent service, not affiliated with or endorsed by Suno. Tracks come from paid Suno plans; review Suno's terms for your use case.
Python
pip install tunova
from tunova import Tunova
t = Tunova("sk_live_โฆ")
job = t.generate("warm lo-fi piano to study to", model="v5.5")
print(job["clips"][0]["audio_url"] if job["status"] == "complete" else job["error"])
Prefer no install? python/tunova.py is stdlib-only โ vendor the single file and import it.
Node / TypeScript
npm i tunova
import { Tunova } from "tunova";
const t = new Tunova(process.env.TUNOVA_API_KEY!);
const job = await t.generate("warm lo-fi piano to study to", { model: "v5.5" });
console.log(job.status === "complete" ? job.clips[0]?.audio_url : job.error);
Both generate() calls submit a job and poll until the track is delivered. Prefer fire-and-forget?
Use submit() with a callback_url and take an HMAC-signed webhook instead.
MCP โ give an AI agent the power to make music
claude mcp add --transport http tunova https://api.tunova.ai/mcp \
--header "X-API-Key: sk_live_โฆ"
Tools: generate_song ยท wait_for_song ยท check_song. Same API key, same billed-on-success rule.
Verifying webhooks
If you pass callback_url, Tunova POSTs the terminal job with
X-Webhook-Signature: sha256=<hmac> over <X-Webhook-Timestamp>.<rawBody>, keyed with your
whsec_โฆ secret (view/rotate it on the dashboard's API-keys page). Verify against the raw body
before parsing โ both SDKs ship a verifier (Tunova.verify_webhook / verifyWebhook).
License
MIT โ see LICENSE. The SDK code is yours to use freely; your use of the Tunova API is governed by the terms.
Install
Add tunova to your client. Pick the one you use.
claude mcp add --transport http tunova https://api.tunova.ai/mcpcodex mcp add tunova --url https://api.tunova.ai/mcp{
"mcpServers": {
"tunova": {
"url": "https://api.tunova.ai/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"tunova": {
"type": "http",
"url": "https://api.tunova.ai/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"tunova": {
"url": "https://api.tunova.ai/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"tunova": {
"serverUrl": "https://api.tunova.ai/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
Score
39 / 100
Incomplete
- Documentation22/25
- Maintenance16/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 58 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 0.1.1Latest | Jul 5, 2026 |
| 0.1.0 | Jun 14, 2026 |