songcodedocs open songcode

MCP server

Add Songcode to an AI assistant. The server address, how signing in works, and every tool it offers.

The Songcode MCP server lets an assistant that speaks the Model Context Protocol ask Songcode for songs inside a conversation, change them and publish them. Its address is:

https://studio.songco.de/mcp

Songcode writes every song itself, on its own servers, the same way as in the app. Your assistant describes what you want and Songcode composes it; the assistant can then read the code, make exact edits and publish it. It works on the same text you see in the code view.

#Add it to an assistant

Any Songcode account can connect. Who pays for the writing is under who writes the songs.

Add a custom connector (some apps call it an integration or a remote MCP server) with the address above. The assistant opens a Songcode page in your browser: sign in, read what it is asking for, and press allow. That is the whole setup. There is no key to copy.

  • Claude: Settings, Connectors, Add custom connector.
  • ChatGPT: Settings, Apps and connectors, with developer mode on, then Create.
  • Claude Code: claude mcp add --transport http songcode https://studio.songco.de/mcp, then /mcp to sign in.
  • Cursor, VS Code and others: add a remote server with the address. Clients that take a header instead of signing in can send an API key: Authorization: Bearer sc_your_key. Without a plan, they can also send your model key in the same headers as the REST API, x-provider and x-provider-key, instead of saving one on the settings page.

Remove the connection from the assistant, or from mcp on the settings page, and it stops working at once.

#What it can do

Ask in plain words. “Make a slow lo-fi loop with a muted trumpet”, “turn the bass down 3 dB and take out the clap”, “write me a full drum and bass song and publish it”.

toolwhat it doeschanges anything
get_accountwho is signed in, the plan and its weekly usage, and whether Songcode can write for the accountno
list_genresevery genre a song can be asked forno
check_codechecks code you already have and says what is wrong, line by lineno
compose_songSongcode writes a new song from the request and saves it as a draftyes
add_stemSongcode writes one new part into a draftyes
rewrite_stemSongcode rewrites one part of a draftyes
get_compositiona song or stem Songcode is still writing, once it is doneno
list_songsyour drafts and published tracksno
get_songa draft or track, with its code and checkno
save_draftsaves code you already have, pasted or from a .ode file, as a new private draftyes
update_draftreplaces a draft’s code or titleyes
edit_draftexact changes: tempo, key, mix, rename, remove, replace or add a stemyes
publish_songmakes a public link anyone can playyes
delete_draftdeletes a draftyes
export_songthe song as .ode, .songcode or MIDIno

Each tool says whether it only reads, whether it can replace or remove something, and whether it reaches beyond your account (only publish_song, which makes a public link), so an assistant can ask you before the ones that change things.

#Who writes the songs

Songcode does, always. The assistant never writes ode itself: compose_song, add_stem and rewrite_stem send the request to Songcode, which writes, checks and fixes the song on its side and saves the draft. Songcode’s writing instructions never leave its servers, so every song follows the same craft as the app’s, whatever assistant asks for it.

What the assistant picks is the same as in the app. On a plan it sets quality:

qualitywhat you get
fastthe quickest song, and the least of the week
balancedbetween the two
extrathe strongest ordinary song (the default)
ultraultra compose: a longer, more composed full song that takes several minutes

On your own key it sets model (haiku, sonnet or opus on an Anthropic key, luna, terra or sol on an OpenAI key; default the largest) and reasoning (low, medium, high, xhigh or max on every model, and none on luna and terra). get_account tells the assistant which of the two applies.

A loop is back in under a minute. A full song can take a few minutes, ultra compose up to fifteen, and then the tool returns a job that get_composition reads once it is done.

What it costs depends on the account.

  • On a plan, there is no key to add. Songcode writes on models tuned for ode and takes the plan’s weekly usage, by how much it writes: a loop takes little, a full song more, ultra compose several times that, a stem very little, and fast far less than extra. Once the week is used up, buy extra usage on the settings page and it carries on.
  • Without a plan, Songcode writes with your own Anthropic or OpenAI key, as the app does when you bring a key, and your provider bills you for it. Save the key under model key for the API and MCP on the settings page: it is stored encrypted, never shown again, and opened only to write your songs. Clients that can set headers may send the key with each call instead (x-provider: anthropic or openai, x-provider-key: …); it is used for that call and never stored, and the tool waits for the whole song, so it suits loops and shorter songs best.

With neither a plan nor a key, the writing tools answer what to add, and everything else still works.

#Hearing it

In assistants that show app widgets (Claude and ChatGPT do), every tool that returns a song shows the songcode player under the answer: the title, tempo and key, a play button and a link to open the song in the app. It plays the song’s code with the Songcode Audio Engine, right in the conversation, drafts included. Every song also comes back with a link, https://studio.songco.de/d/… for a draft or /t/… once published. Open it to see the stems, edit the code and download audio. The server returns code and MIDI, not sound files: audio is rendered by the Songcode Audio Engine in the browser.

The player is the resource ui://songcode/player.html (MCP Apps, text/html;profile=mcp-app). It loads the Songcode Audio Engine and its sounds from https://studio.songco.de and nothing else.

#Sign-in for apps

The server is an OAuth 2.1 protected resource. Clients find everything from a 401:

protected resource metadatahttps://studio.songco.de/.well-known/oauth-protected-resource/mcp
authorization server metadatahttps://studio.songco.de/.well-known/oauth-authorization-server
authorizehttps://studio.songco.de/oauth/authorize
tokenhttps://studio.songco.de/oauth/token
dynamic client registrationhttps://studio.songco.de/oauth/register
revokehttps://studio.songco.de/oauth/revoke

PKCE with S256 is required. Clients can register dynamically (RFC 7591) or use a client ID metadata document (an HTTPS URL as the client_id). Every authorization response carries iss. Access tokens last an hour, refresh tokens 30 days, and a refresh token is replaced each time it is used. Tokens are bound to the resource they were asked for.

Three scopes, all asked for unless a client asks for fewer:

scopeallows
songs:readreading songs, the account, the guide
songs:writesaving, editing, publishing and deleting drafts
composehaving Songcode write songs and stems, on your plan or your own model key

The same token works on the REST API.

#Transport

Streamable HTTP, stateless: every request is a JSON-RPC message (or a batch of up to 20) in a POST, and every answer is JSON. There are no sessions and no server-sent stream. Protocol versions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05. 120 calls a minute for each connection.

#Your data

Songcode logs each tool call with its name, the status, how long it took and which app made it. Prompts and code are kept the same way as in the app. The assistant you use has its own policy for what you say to it. See the privacy policy.

esc