_ registry / mcp streamable-http · checked 8h ago

audora

https://audora.music

Registry code: d84250b6c144d985

api record

This is Audora's MCP server. Audora releases music: distribution to Spotify, Apple Music and 140+ stores through the same network the major labels use, with the artwork, the bios and the release campaign made alongside it.

Connected to an artist's Audora account, you can build a release with them from start to finish: fill in their artist profile, add tracks and albums with the full metadata the stores demand, enter song credits, upload masters and cover art, and get a release ready for them to submit. The artist reviews and submits it themselves, and everything you do arrives as work they can…

endpoint
https://audora.music/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is audora live?
Yes — it answered the hub's last check (checked 8h ago). It answered 99% of checks over the last 30 days.
Is audora free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does audora have?
52 tools: get_track, list_albums, find_online, set_track_credits, confirm_my_music, import_catalog, answer_release_question, list_releases, ….
Is audora safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
98.9%

90 days 98.6%· all time 98.6%

latency
1,732ms

last good check

priced tools
0

of 52 tools

_ answered our checks, 90 days 435 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • prepare a music release for distribution
  • manage artist profile and tracks
  • import an artist catalog
  • run a release promo campaign
takes → gives
text, audio, images → data
tools
10 reads13 changes data2 sends messages
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 52 tools
52 auth-required 52 of 52 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • get_track auth-required 30d ago

    One track with its billed artists and its song credits.

    mcp-tool

    {
      "type": "object",
      "required": [
        "track_id"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "track_id": {
          "type": "string",
          "description": "The track's id, from list_tracks."
        }
      },
      "additionalProperties": false
    }
    arguments 17 lines
  • list_albums auth-required 30d ago

    Every album in this account, newest first.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • find_online auth-required never probed

    Runs Audora's own lookup of what the artist has already published (streaming profiles, releases, their site and social profiles), or reads where one is and what it found. Use it only when you cannot search the web yourself: otherwise look the artist up with your own search, check with them that you found the right artist, and fill their page with update_profile. With action "start" it begins one, which takes 1–2 minutes; the artist gets a few a day, shared with Soundcheck in Audora. The account's first lookup is free and each later one costs credits and needs the artist's spend permission: start with dry_run: true to read the price, tell the artist, then start with confirm_cost_credits. With action "status" (the default) it reads the newest lookup, or the one named by run_id. Every fact comes with the pages it was read on. It never changes the artist's profile: when it is done, call propose_profile so the artist keeps what is theirs in Audora.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "link": {
          "type": "string",
          "description": "For start: one page the artist is on (Apple Music, Deezer, SoundCloud, YouTube, Bandcamp, their site, Instagram), as a full https:// address. It is the best starting point. A Spotify link is kept as theirs but never opened, so another page starts the lookup better."
        },
        "action": {
          "enum": [
            "start",
            "status"
          ],
          "type": "string",
          "description": "\"start\" a new lookup, or read its \"status\". Default: status."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "not_me": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "For start: names of earlier matches the artist said are not them."
        },
        "run_id": {
          "type": "string",
          "description": "For status: a particular lookup. Default: the newest."
        },
        "dry_run": {
          "type": "boolean",
          "description": "For start: true to read what the lookup costs without starting it."
        },
        "confirm_cost_credits": {
          "type": "number",
          "description": "For start: the price a dry run quoted and you told the artist. Needed for a lookup that is not free."
        }
      },
      "additionalProperties": false
    }
    arguments 42 lines
  • set_track_credits auth-required never probed

    Replace a track's song credits with this list. Every track needs at least one songwriter, one performer and one producer before its release can be submitted. These are real people: ask the artist, and never invent a name to satisfy the requirement.

    mcp-tool

    {
      "type": "object",
      "required": [
        "track_id",
        "credits"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "credits": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": true
          },
          "description": "Each entry: name, role (songwriter | performer | producer | studio | compositional | label_personnel). A performer also takes performer_type (primary | featured | non_featured, default primary) and instrument: what they played or sang, spelled exactly as in get_requirements' `performer_roles` list (e.g. \"Vocals - Lead Vocals\"). The release cannot be submitted until every performer has one, and, on a track billing two or more artists, each of them has a performer credit under that name with a real role; a performer sent without one is saved and named in `warnings`. Songwriters and producers take no instrument. studio, compositional and label_personnel are optional credits (a mastering engineer, an arranger, an A&R coordinator): each takes credit_role, from that kind's list in get_requirements' `contributors.optional_credits` (e.g. \"Mastering Engineer\"), and never counts toward the three a track needs. The list replaces every credit on the track, these included."
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would replace, without writing anything."
        },
        "track_id": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
    arguments 29 lines
  • confirm_my_music auth-required never probed

    "That's me": record the candidates the ARTIST said are theirs (a catalog can be split across pages). Only ids find_my_music offered. Ask the artist. Never confirm on a guess.

    mcp-tool

    {
      "type": "object",
      "required": [
        "deezer_ids"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "deezer_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The candidates' ids the artist picked."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and it happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 24 lines
  • import_catalog changes data auth-required never probed

    Start bringing the chosen records into the catalog, within the plan's room. Covers come in only when the artist said they are theirs to use (rights_confirmed: true, their own words, recorded as their consent); otherwise every record comes in with its codes and the cover is left to upload.

    mcp-tool

    {
      "type": "object",
      "required": [
        "items"
      ],
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "deezer_album_id",
              "include"
            ],
            "properties": {
              "include": {
                "type": "boolean"
              },
              "deezer_album_id": {
                "type": "string"
              }
            }
          }
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and it happens once."
        },
        "rights_confirmed": {
          "type": "boolean",
          "description": "Only true when the artist said the covers are theirs to use."
        }
      },
      "additionalProperties": false
    }
    arguments 39 lines
  • answer_release_question changes data auth-required never probed

    Send the ARTIST'S answer to a question Audora asked about their release (see get_release_questions). Ask the artist and relay what they say. Never answer for them and never guess: an answer can be a statement about rights or ownership that Audora relies on. Audora is told it came through their assistant. The release status does not change; Audora reads the answer and moves the release on.

    mcp-tool

    {
      "type": "object",
      "required": [
        "release_id",
        "answer"
      ],
      "properties": {
        "answer": {
          "type": "string",
          "description": "The artist's answer, in their words. Up to 4000 characters."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the question is open, without sending anything."
        },
        "release_id": {
          "type": "string"
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the answer is sent once."
        }
      },
      "additionalProperties": false
    }
    arguments 29 lines
  • list_releases auth-required 30d ago

    Every release in this account with where it has reached (status_label: Draft, Submitted, Changes asked, Going to the stores, Ready for release day, Live, Rejected, Takedown asked, Taken down, Released elsewhere), including anything Audora asked about.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • list_campaigns auth-required 30d ago

    Every Promo campaign in this account, with its window, whether it is ahead, running or over, and how many posts are to look at, scheduled, posted or did not go out. A release's campaign is kind release; between releases a campaign is a month (kind between_releases), and none starts by itself: start_campaign with between_releases plans the next one. Also lists upcoming releases that have no campaign yet, and campaigns being planned right now.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • list_todos reads auth-required 30d ago

    Every open to-do the artist sees on their pages, most urgent first: what it is, how urgent, where it is fixed and the tool that fixes it from here. Each has a key; closable says whether close_todo can close it.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • close_todo changes data auth-required never probed

    Close one to-do the artist does not want to see, exactly as closing it in Audora does: it comes back by itself when what it is about changes. A track's or album's missing details are not closed: they are fixed.

    mcp-tool

    {
      "type": "object",
      "required": [
        "key"
      ],
      "properties": {
        "key": {
          "type": "string",
          "description": "The to-do's key, from list_todos."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • set_todo_done auth-required never probed

    Mark one checklist item done, or not done again: the tick in Audora.

    mcp-tool

    {
      "type": "object",
      "required": [
        "todo_id",
        "done"
      ],
      "properties": {
        "done": {
          "type": "boolean"
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "todo_id": {
          "type": "string",
          "description": "From list_release_todos."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 25 lines
  • list_events reads auth-required 30d ago

    The shows, release parties and listening parties the artist has posted, with who is invited and who is coming, and their drafts (saved, not posted, seen by nobody else). Artist connections only: Scene is between artists.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • save_event auth-required never probed

    Save the artist's own show, release party or listening party, or change one (pass event_id). It is saved as a DRAFT that only the artist sees, with whatever is known (only kind is needed), unless you pass post: true. Posting puts it on Scene for artists on Audora (and on the public page when is_public) and needs a title, starts_at and a place: a city and a country, and/or an online link. Post only when the artist asked for it to go out. An event already posted stays posted, so its changes need the same. Inviting artists or Audora stays the artist's to do in Audora; an edit keeps what they chose. Artist connections only.

    mcp-tool

    {
      "type": "object",
      "required": [
        "event"
      ],
      "properties": {
        "post": {
          "type": "boolean",
          "description": "true puts it on Scene now (needs title, starts_at and a place). Leave out to save a draft."
        },
        "event": {
          "type": "object",
          "required": [
            "kind"
          ],
          "properties": {
            "city": {
              "type": [
                "string",
                "null"
              ]
            },
            "kind": {
              "enum": [
                "show",
                "release_party",
                "listening_party"
              ],
              "type": "string"
            },
            "line": {
              "type": [
                "string",
                "null"
              ],
              "description": "One line about it, in the artist's words."
            },
            "title": {
              "type": "string"
            },
            "country": {
              "type": [
                "string",
                "null"
              ],
              "description": "The country's name as Audora's country list writes it (get_requirements has the list), e.g. Sweden."
            },
            "ends_at": {
              "type": [
                "string",
                "null"
              ],
              "description": "ISO date and time, or null."
            },
            "is_public": {
              "type": "boolean",
              "description": "Show it on the artist's public page once posted. Defaults: on for a show, off for a party."
            },
            "starts_at": {
              "type": "string",
              "description": "ISO date and time."
            },
            "time_zone": {
              "type": "string",
              "description": "IANA zone where it happens, e.g. Europe/Stockholm. Needed with starts_at."
            },
            "online_url": {
              "type": [
                "string",
                "null"
              ],
              "description": "https link, for one online."
            },
            "release_id": {
              "type": [
                "string",
                "null"
              ],
              "description": "A party for one of the artist's releases (once it is out)."
            },
            "ticket_url": {
              "type": [
                "string",
                "null"
              ],
              "description": "https link to tickets or info."
            },
            "venue_name": {
              "type": [
                "string",
                "null"
              ]
            }
          }
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "event_id": {
          "type": "string",
          "description": "To change one; leave out to save a new one."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 110 lines
  • cancel_event auth-required never probed

    Cancel one of the artist's events. Everyone invited or coming is told. Artist connections only.

    mcp-tool

    {
      "type": "object",
      "required": [
        "event_id"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "event_id": {
          "type": "string"
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • find_my_music reads auth-required 30d ago

    Find which artist on Deezer (and Apple Music) is this artist, to bring their released records in: the confirmed one, or candidates to show the artist. A link to their music (Deezer, Spotify or Apple, artist or record) searches from that instead of the name.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "link": {
          "type": "string",
          "description": "Optional: a link to the artist's music."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • preview_catalog_import reads auth-required never probed

    The records of the confirmed artist, newest first and 50 a page, with their codes, date and type, matched against the catalog: new, already in the catalog, or in conflict with another account. total says how many there are in all. Also the plan's room for songs and albums.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "page": {
          "type": "integer",
          "minimum": 0,
          "description": "Optional: which page, 0 the newest (the default)."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "deezer_album_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional: only these records."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • get_stats auth-required 30d ago

    Streams, saves and growth per track, which stores and playlists the listening comes from, TikTok use, the audience's age and gender, how the artist's promotion posts performed, and their followers. For the whole catalog, when the artist has connected their own Songstats account, it also gives their numbers across the web (listeners, followers, playlist reach, socials, Shazam, charts), the cities they are listened to in now, the playlists carrying them and dated events. The same numbers the artist sees in Audora. Use it to answer "how is my release doing", to write a pitch or bio from real numbers, or to suggest where to focus next. When a figure is missing, say "not reported yet", never zero.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "album_id": {
          "type": "string",
          "description": "Every track on one album or EP."
        },
        "track_id": {
          "type": "string",
          "description": "One track. Leave out both ids for the whole catalog, which also includes posts, followers and audience."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • get_profile reads auth-required 30d ago

    The artist profile as Audora holds it.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • report_gap sends messages auth-required 30d ago

    Call this whenever the artist asks for something there is no tool for, or a tool refuses in a way you cannot work around. It files the ask in Audora's support inbox, where a person reads it, and it shows in the artist's Settings › Support. Call it before you tell the artist no. It changes nothing in their catalog, and it is the only way the ask reaches anyone.

    mcp-tool

    {
      "type": "object",
      "required": [
        "asked_for"
      ],
      "properties": {
        "note": {
          "type": "string",
          "description": "Anything that would help Audora understand the ask."
        },
        "asked_for": {
          "type": "string",
          "description": "What the artist wanted, in their own words as far as you can keep them."
        },
        "tool_tried": {
          "type": "string",
          "description": "The tool you tried or looked for, if there was one."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • send_feedback sends messages auth-required never probed

    Send Audora feedback it will read, as one of these kinds. missing_capability: a change you would need to do what the artist wants. connector_improvement: how this connector could work better for an assistant, such as a confusing tool, a missing field or a result that did not tell you enough. product_improvement: how Audora itself could serve artists better. bug: something that looks broken. other: anything else. It goes into Audora's support inbox and shows in the artist's Settings › Support, so write it for a person: what you were trying to do, what got in the way and what would have helped. Use it when you notice something worth fixing. You do not need the artist's permission, but set artist_asked to true when the artist asked for it. For a plain "there is no tool for that", report_gap is enough.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind",
        "summary",
        "details"
      ],
      "properties": {
        "kind": {
          "enum": [
            "missing_capability",
            "connector_improvement",
            "product_improvement",
            "bug",
            "other"
          ],
          "type": "string",
          "description": "What this is about."
        },
        "tool": {
          "type": "string",
          "description": "The tool this is about, if it is about one."
        },
        "details": {
          "type": "string",
          "description": "What you or the artist were trying to do, what got in the way and the change that would have helped. Up to 5000 characters. No passwords, tokens or other secrets."
        },
        "summary": {
          "type": "string",
          "description": "One line someone at Audora can triage from. Up to 120 characters."
        },
        "artist_asked": {
          "type": "boolean",
          "description": "True when the artist asked for this or said it; false or omitted when it is your own observation."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • propose_profile auth-required never probed

    Puts a finished find_online lookup in front of the artist in Audora and returns the link to it. The artist confirms it is them and keeps what is right there. This call writes nothing to their profile, and you should not copy the findings into update_profile yourself. Their Home says their assistant found something to look at.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "run_id": {
          "type": "string",
          "description": "The lookup to propose. Default: the newest."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • create_track auth-required never probed

    Create a track from its metadata. The audio and the cover art are uploaded separately. Pass idempotency_key if you might retry, so a timeout does not leave two tracks.

    mcp-tool

    {
      "type": "object",
      "required": [
        "fields"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "fields": {
          "type": "object",
          "description": "The fields to set, by the `name` get_requirements gives each one.",
          "additionalProperties": true
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would replace, without writing anything."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the create happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • update_track auth-required never probed

    Amend a track's metadata. Refused once its release has been submitted: a submitted release carries a frozen copy, and changing the catalog underneath it is the artist's own decision, because it costs credits.

    mcp-tool

    {
      "type": "object",
      "required": [
        "track_id",
        "fields"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "fields": {
          "type": "object",
          "description": "The fields to set, by the `name` get_requirements gives each one.",
          "additionalProperties": true
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to see what would change, and what it would replace, without writing anything. Use it before overwriting words the artist wrote."
        },
        "track_id": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • set_album_tracks auth-required never probed

    Put these tracks on this album, in this order. Replaces whatever was on it. A track left out is taken off the album, not deleted.

    mcp-tool

    {
      "type": "object",
      "required": [
        "album_id",
        "track_ids"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would replace, without writing anything."
        },
        "album_id": {
          "type": "string"
        },
        "track_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "In running order."
        }
      },
      "additionalProperties": false
    }
    arguments 28 lines
  • finalize_upload changes data auth-required never probed

    Audora reads the file you uploaded (the file itself, not its name) and attaches it only if it meets the upload spec. A master that is secretly an MP3, or a cover that is not square or is under 3000 pixels, is refused here and the file is removed. Passing here is not the same as being releasable: a release also needs a stereo master and a square RGB JPG cover of 3000–6000 px, which check_readiness reports on.

    mcp-tool

    {
      "type": "object",
      "required": [
        "upload_id"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "A short name, for an artist image."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "upload_id": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • save_release_draft auth-required never probed

    Write the release details for a track or album as a DRAFT. A draft costs nothing, can be changed and goes nowhere until the artist says so. Returns a draft_hash identifying exactly what you prepared, and release_rules: everything the track or album still needs to meet the stores' rules (master format, cover, sub-genre, languages, countries, performer roles) before it can be submitted. An older track or album usually needs some of it. A draft saves even when it is unfinished: a release date sooner than the stores take is saved and comes back in `warnings`, and submitting refuses it until it is changed.

    mcp-tool

    {
      "type": "object",
      "required": [
        "type",
        "item_id"
      ],
      "properties": {
        "type": {
          "enum": [
            "track",
            "album"
          ],
          "type": "string"
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "item_id": {
          "type": "string",
          "description": "The track's or album's id."
        },
        "release": {
          "type": "object",
          "description": "The release fields, by the names get_requirements(entity: \"release\") gives them, for example { \"release_type\": \"single\", \"scheduled_date\": \"2026-11-20\", \"description\": \"...\", \"pitching_directly\": \"...\", \"release_timeline\": \"...\", \"artist_quotes\": \"...\" }. Add \"splits\" for royalty splits. Send only what you are setting.",
          "additionalProperties": true
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • get_release_questions auth-required 30d ago

    Questions Audora's reviewers asked about the artist's releases (for example, whether the rights to a remix are cleared), with the whole conversation. A release with an unanswered question does not go out until the artist answers. Omit release_id for every open question.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "release_id": {
          "type": "string",
          "description": "One release, including a closed conversation. Omit for all open questions."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • whoami auth-required never probed

    Returns the account this connection acts in (an artist's, or a label's with its roster), what this connection is allowed to do, where the result is reviewed, and next_steps: what to offer the artist next, worked out from the account. Call this first, and again whenever you are unsure whose catalog you are working in. On a label connection, pass `artist` to see one roster artist's account.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • get_requirements reads auth-required 30d ago

    Every field Audora needs, with its exact limit in characters or words, the closed list to choose from where there is one, and the accepted file formats and sizes. Call this BEFORE filling anything in. The limits differ per field: some are refused when exceeded and some only flagged. What blocks a release is set by Audora, and it changes.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "entity": {
          "enum": [
            "artist",
            "track",
            "track_artist",
            "contributor",
            "album",
            "release",
            "split",
            "files"
          ],
          "type": "string",
          "description": "Narrow to one kind of thing. Omit for everything."
        },
        "release_type": {
          "enum": [
            "single",
            "ep",
            "album",
            "compilation"
          ],
          "type": "string",
          "description": "Narrow to the fields this kind of release needs. An album needs more than a single."
        }
      },
      "additionalProperties": false
    }
    arguments 31 lines
  • get_limits reads auth-required 30d ago

    The plan, whether distribution is included, credits remaining, and the track, album and storage allowances. Check before uploading or preparing a submission.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • check_readiness auth-required 30d ago

    For one track or one album: everything Audora still needs before that release could be submitted, and anything worth a second look that does not block it. That includes the stores' intake rules, checked against the uploaded master and cover themselves (a stereo WAV, FLAC or Apple Lossless master at a rate the stores take; square RGB JPG 3000–6000 px). Call this after writing, and again before telling the artist something is ready.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "album_id": {
          "type": "string",
          "description": "Check an album or EP. Give this or track_id, not both."
        },
        "track_id": {
          "type": "string",
          "description": "Check a single. Give this or album_id, not both."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • update_profile changes data auth-required never probed

    Set artist details: name, country, genre, tone, description, main markets, Promo's post language, the three bios and links. Send only the fields you are changing. Call get_requirements first for the exact limits. An over-long value is refused with the number it got.

    mcp-tool

    {
      "type": "object",
      "required": [
        "fields"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "fields": {
          "type": "object",
          "description": "The fields to set, by the `name` get_requirements gives each one.",
          "additionalProperties": true
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to see what would change, and what it would replace, without writing anything. Use it before overwriting words the artist wrote."
        }
      },
      "additionalProperties": false
    }
    arguments 22 lines
  • update_album auth-required never probed

    Amend an album's details. Refused once its release has been submitted.

    mcp-tool

    {
      "type": "object",
      "required": [
        "album_id",
        "fields"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "fields": {
          "type": "object",
          "description": "The fields to set, by the `name` get_requirements gives each one.",
          "additionalProperties": true
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to see what would change, and what it would replace, without writing anything. Use it before overwriting words the artist wrote."
        },
        "album_id": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • request_upload changes data auth-required never probed

    Ask for a one-time address to upload a master, cover art, a logo or an artist photo to. You need the file's NAME, nothing else. Never ask the artist how big a file is. PUT the file to the address you get back, then call finalize_upload, which reads the file itself and checks the size, the format and the account's storage against it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind",
        "filename"
      ],
      "properties": {
        "kind": {
          "enum": [
            "audio",
            "cover_art",
            "logo",
            "artist_image"
          ],
          "type": "string"
        },
        "bytes": {
          "type": "number",
          "description": "Optional. The size in bytes, IF you already know it: it saves a doomed upload. Never ask anyone for it. The server measures the file when it arrives."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "album_id": {
          "type": "string"
        },
        "filename": {
          "type": "string",
          "description": "The file's own name, with its extension. Audio is .wav, .flac or .m4a (Apple Lossless); images are .png, .jpg or .webp. A release going out through Audora needs a stereo master and a .jpg cover (square, 3000–6000 px, RGB). Other images upload but cannot be a release cover."
        },
        "track_id": {
          "type": "string",
          "description": "Required for audio; for cover art, give this or album_id."
        },
        "mime_type": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
    arguments 41 lines
  • get_campaign auth-required 30d ago

    One campaign as Promo's calendar: every post by day and lane, with its words, hashtags, picture or video, status, and schedule_check: exactly what Audora's Schedule would decide about it now, and in the artist's words what it still needs.

    mcp-tool

    {
      "type": "object",
      "required": [
        "campaign_id"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "campaign_id": {
          "type": "string",
          "description": "From list_campaigns."
        }
      },
      "additionalProperties": false
    }
    arguments 17 lines
  • promo_results reads auth-required 30d ago

    The posts that went out, best first, with their latest reach, likes, comments, shares, saves and views, the totals over the window, and the followers on each connected account. A missing number is not reported yet, never zero. what_works: per platform, the angles and posting hours that have beaten the artist's usual most often, from their own posts only, with how many posts each rests on.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "days": {
          "type": "number",
          "description": "How far back, 1–365 days. Default 90."
        },
        "limit": {
          "type": "number",
          "description": "How many posts to list, 1–50. Default 10."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • start_campaign changes data auth-required never probed

    Start a campaign for an upcoming release, or a month between releases (between_releases: true, from tomorrow; none starts by itself, so start the next month the same way when one ends). A release already out gets no campaign of its own: its start is made between releases with its song first (the answer says between_releases: true). Audora writes the campaign (every post's day, time, words and what picture or video it needs) at a price that grows with its size (2 a week is the least, Every day the most; the dry run's quote.plan says it), charged when it starts and returned if the plan fails; starting it needs the artist's spend permission. Nothing is made: fill each post from the artist's Library with update_post, or have Audora make one with make_posts (priced then). A campaign is planned in moments: one video or picture posted the same day on every connected account it fits, with words for each account. Each moment costs 1 credit to go out, all its accounts included, only when it is scheduled. The answers about the song (the_story, key_lyrics, key_moments, what_works, sonic_references, note) are the Start panel's: optional, filled from what Audora knows when left out, and they turn on posts that use them. A release (or the time between releases) can run several campaigns at once, each with its own language, lead market and accounts; one that would copy a live campaign in all three is refused (a dry run's quote.duplicate_of names it, quote.live_campaigns lists them). Planned posts fit around the posts other campaigns already have on the same accounts: one video and one picture a day per account. Use dry_run first to see the posts, the price and those answers (quote.answers), tell the artist, then start with confirm_cost_credits.

    mcp-tool

    {
      "type": "object",
      "required": [
        "lanes",
        "size"
      ],
      "properties": {
        "note": {
          "type": "string",
          "description": "Optional, ≤ 200 characters: \"Anything we should know?\", anything else the planner should know, in the artist's words. Left out: the last campaign's for this release, if any."
        },
        "size": {
          "enum": [
            "light",
            "steady",
            "loud"
          ],
          "type": "string",
          "description": "How often: light is 2 moments a week, steady 4 a week, loud every day (a video moment and a picture moment each day, so every account posts every day). A release campaign runs 5 weeks before release day and 2 after (49 days: light 14 moments, steady 28, loud 98), its moments climbing toward release day; between releases a month (30 days: light 9, steady 17, loud 60). A release closer than 5 weeks has fewer days and so fewer moments. The dry run quotes the exact moments and posts."
        },
        "about": {
          "enum": [
            "song",
            "artist"
          ],
          "type": "string",
          "description": "Between releases only: what the campaign is about. \"song\" (with about_track_id, one of the artist's songs) or \"artist\" (posts about who they are, their sound and their artist page; no line is kept). Left out: planned as before."
        },
        "lanes": {
          "type": "array",
          "items": {
            "enum": [
              "instagram",
              "story",
              "facebook",
              "tiktok",
              "youtube"
            ],
            "type": "string"
          },
          "description": "Where the posts go. Only lanes with a connected account are planned."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would do, without writing anything."
        },
        "accounts": {
          "type": "object",
          "properties": {
            "tiktok": {
              "type": "string"
            },
            "youtube": {
              "type": "string"
            },
            "facebook": {
              "type": "string"
            },
            "instagram": {
              "type": "string"
            }
          },
          "description": "Optional, for an artist with more than one account on a platform: which account each platform posts through, as the account's id, @handle or name (a dry run's quote.accounts lists them). Every post of the campaign is tied to its account and never goes out on another. Left out for a platform: the account the newest campaign in this language used there, else the artist's main account."
        },
        "the_story": {
          "type": "string",
          "description": "Optional, ≤ 5000 characters: \"The story behind it\", in the artist's own words. Where it was written, what happened, who it is for. Posts tell it in your words. Never write it for them."
        },
        "key_lyrics": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional, up to 2: \"A line that matters\", word for word from the song's lyrics (get_track has them). A line not in the lyrics is refused; a song with no lyrics takes a line the artist types; an instrumental takes none."
        },
        "release_id": {
          "type": "string",
          "description": "The release (from list_releases or list_campaigns' can_start). Or use between_releases."
        },
        "what_works": {
          "type": "string",
          "description": "Optional, ≤ 2000 characters: \"What worked before\", in the artist's words. A post, a format or a time that did well for you. Posts can take the same shape again."
        },
        "key_moments": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "date",
              "label"
            ],
            "properties": {
              "date": {
                "type": "string",
                "description": "YYYY-MM-DD, still ahead."
              },
              "kind": {
                "enum": [
                  "show",
                  "release_party",
                  "listening_party",
                  "other"
                ],
                "type": "string",
                "description": "show, a party, or other."
              },
              "label": {
                "type": "string",
                "description": "What happens, in the artist's words."
              },
              "event_id": {
                "type": "string",
                "description": "A Scene event's id (list_events): its own date, place and link are used."
              },
              "link_url": {
                "type": "string",
                "description": "Optional https link for tickets or info."
              }
            }
          },
          "description": "Optional, up to 6: \"Something coming up\". A show, a video, a date that matters. Posts lead up to it. Left out: Scene's public shows and parties inside the campaign's days."
        },
        "lead_market": {
          "enum": [
            "us",
            "uk",
            "eu",
            "nordics",
            "dach",
            "france",
            "latam",
            "japan",
            "kpop",
            "china",
            "india",
            "mena",
            "africa",
            "anz",
            null
          ],
          "type": [
            "string",
            "null"
          ],
          "description": "Optional: where most of the listeners for this campaign are. Every post is timed for that market's clock. null: timed where the artist is. Left out: the last campaign's market, else the first market on the artist's page (a dry run's quote.markets says which)."
        },
        "lyric_video": {
          "type": "boolean",
          "description": "Optional: the campaign's first made video shows the song's words in time with the song. Audora times the lyrics when the campaign starts (free), so that video comes about 10 minutes later. false: no video shows lyrics. Left out: on when the song's lyrics can be timed. A dry run's quote.lyric_video says the song and where its lyrics stand (to_time, timing, timed, or why not: no_lyrics, instrumental, language, no_master)."
        },
        "loop_opt_out": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "dimension",
              "platform",
              "value"
            ],
            "properties": {
              "value": {
                "type": "string"
              },
              "platform": {
                "enum": [
                  "instagram",
                  "story",
                  "facebook",
                  "tiktok",
                  "youtube"
                ],
                "type": "string"
              },
              "dimension": {
                "enum": [
                  "angle",
                  "hour_band",
                  "picture_source"
                ],
                "type": "string"
              }
            }
          },
          "description": "Optional: what the artist does not want Audora to lean on in this campaign, from a dry run's quote.from_results (Start a campaign's \"From your results\": the angles, hours and picture sources the artist's own post results say have done best, each line with its count). Pass a line's opt_out entries for each line the artist unticks; that choice is then made as it is for everyone, for this campaign only. Left out: every line is planned with. Each post still gets one try at something new either way. quote.from_results is null when there is no line."
        },
        "post_language": {
          "enum": [
            "en-US",
            "en-GB",
            "sv",
            "nb",
            "da",
            "fi",
            "is",
            "de",
            "nl",
            "fr",
            "es-ES",
            "es-419",
            "pt-BR",
            "pt-PT",
            "it",
            "zh-CN",
            "zh-TW",
            "ja",
            "ko"
          ],
          "type": "string",
          "description": "Optional: the language every post in this campaign is written in, with the text on its pictures and videos. Left out: the artist's Post language, else the language the artist's own post results have done best in (when their results are in 2 or more languages and one holds 4 or more and beats their usual most often), else the language the release's songs are sung in, else en-US. A dry run's quote.post_language says which and why; its results names the language their results favor, also when their Post language is another (offer it, never assume it). It is the campaign's, never written back to the artist."
        },
        "about_track_id": {
          "type": "string",
          "description": "With about: \"song\", the song the campaign is about (list_tracks)."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        },
        "replace_plan_id": {
          "type": "string",
          "description": "Optional: start that campaign over (an id from list_campaigns, for the same release or between releases). Its posts not yet scheduled are removed once the new campaign is written; scheduled ones stay and go out."
        },
        "between_releases": {
          "type": "boolean",
          "description": "True for a month between releases instead of a release's campaign."
        },
        "picture_fallback": {
          "enum": [
            "stock",
            "new",
            "ask"
          ],
          "type": "string",
          "description": "Optional: what fills a post the artist's own photos and cover do not cover, when Audora is asked to make it (make_posts, or in the app). stock: free Pixabay stock photos, always made into the artist's cards (people and brands left out; not offered for a song about drugs, sex or politics). new: Audora draws a new picture. ask: those posts wait for the artist to pick a photo in the app. Stock and new cost the same (the artist's own photos and cover are free). Left out: the artist's last answer, else stock. A dry run's quote.picture_fallback says the starting choice and whether stock may be used."
        },
        "sonic_references": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional, up to 5 names: \"Artists you sound like\". Left out: the Artist page's reference artists."
        },
        "key_lyrics_track_id": {
          "type": "string",
          "description": "The song the lines are from: one of the release's songs, or between releases any of the artist's. Left out: the release's songs are tried; between releases, the artist's newest songs with lyrics."
        },
        "confirm_cost_credits": {
          "type": "number",
          "description": "The price a dry run quoted (charged_at_start: the plan at its size) and you told the artist. Required to start."
        }
      },
      "additionalProperties": false
    }
    arguments 257 lines
  • update_post auth-required never probed

    Change a post's words, hashtags, link, day, time, its picture or video (from the Library), or the angle its words take. Send only what changes. Returns the post with schedule_check: what Schedule would decide now. A post already scheduled can be changed only with the schedule permission; one already handed to its platform's own schedule (Facebook, YouTube) or one that went out cannot be changed here.

    mcp-tool

    {
      "type": "object",
      "required": [
        "post_id"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "The day it goes out, YYYY-MM-DD, inside the campaign's window. A draft may be saved with a day gone by; Schedule asks for one still ahead (schedule_check says so)."
        },
        "time": {
          "type": "string",
          "description": "The time it goes out, HH:MM 24-hour, in the artist's own time zone."
        },
        "angle": {
          "enum": [
            "pin_angle.hook_object",
            "pin_angle.listener_pov",
            "pin_angle.lyric_line_on_beat",
            "pin_angle.occasion_day",
            "pin_angle.one_answerable_question",
            "pin_angle.ordinary_scene_contrast",
            "pin_angle.place_light_and_weather",
            "pin_angle.place_named_in_words",
            "pin_angle.release_fact_card",
            "pin_angle.repeat_what_worked",
            "pin_angle.scene_vocabulary",
            "pin_angle.show_coming_up",
            "pin_angle.story_line_that_nearly_went",
            "pin_angle.story_place",
            "pin_angle.tail_section",
            "pin_angle.uploaded_asset_hero"
          ],
          "type": "string",
          "description": "Which of Audora's post angles the words take (the key names it: listener_pov is the listener's side of the song, tail_section a part of the track no other post used, hook_object an object the song names, and so on). Audora counts how each angle does for the artist, and promo_results' what_works shows the result. get_campaign shows each post's angle."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "caption": {
          "type": "string",
          "description": "The words of the post, as they will be published. The lane's limit and Audora's text rules apply (no placeholders, nothing that points back at another post)."
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would do, without writing anything."
        },
        "post_id": {
          "type": "string",
          "description": "The post's id (post_id from get_campaign or promo_this_week)."
        },
        "hashtags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Up to 12 hashtags, with or without #. Replaces the list."
        },
        "link_url": {
          "type": [
            "string",
            "null"
          ],
          "description": "A web address the post links to, or null to remove it."
        },
        "media_asset_id": {
          "type": "string",
          "description": "A picture (for a picture post) or a video (for a video post) already in the artist's Library, by its media asset id. Audora does not make pictures or videos through this connection."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 77 lines
  • keep_post changes data auth-required never probed

    Bring a skipped post, or one that did not go out, back as a draft to schedule. A draft is already kept.

    mcp-tool

    {
      "type": "object",
      "required": [
        "post_id"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "post_id": {
          "type": "string",
          "description": "The post's id (post_id from get_campaign or promo_this_week)."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • skip_post changes data auth-required never probed

    Skip a post so it does not go out. It stays on the campaign and keep_post brings it back. Skipping a post that is already scheduled takes it out of the queue and returns its posting credit, and needs the schedule permission.

    mcp-tool

    {
      "type": "object",
      "required": [
        "post_id"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "post_id": {
          "type": "string",
          "description": "The post's id (post_id from get_campaign or promo_this_week)."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • list_release_todos auth-required 30d ago

    With release_id: the release's "Around the release" checklist (pitch, pre-save, Canvas, lyrics, release day and the weeks after), each with when it is due, why, where it is done and whether it is done. Without: the artist's "Set up once" list (Instagram ready to post, photos and clips for the posts, claiming the store profiles, the bio link).

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "release_id": {
          "type": "string",
          "description": "The release (list_releases). Leave out for \"Set up once\"."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • list_media reads auth-required 30d ago

    The artist's pictures or videos in Audora's Library, newest first, searchable by name and filterable by category (Brand kit, Logo, Cover art, Promo, a platform, Made by Audora, Uploaded, Found online, Stock footage). Each has a media_asset_id (what update_post takes) and a preview link valid for an hour.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "kind": {
          "enum": [
            "images",
            "videos"
          ],
          "type": "string",
          "description": "Pictures (default) or videos."
        },
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "offset": {
          "type": "integer",
          "minimum": 0
        },
        "search": {
          "type": "string",
          "description": "Words in the item's name, or the artist, track or album it belongs to."
        },
        "categories": {
          "type": "array",
          "items": {
            "enum": [
              "branding",
              "logo",
              "cover-art",
              "promo",
              "tiktok",
              "instagram",
              "youtube",
              "facebook",
              "ai-generated",
              "uploaded",
              "found-online",
              "stock"
            ],
            "type": "string"
          },
          "description": "Only items in every one of these."
        }
      },
      "additionalProperties": false
    }
    arguments 53 lines
  • catalog_import_status reads auth-required never probed

    The latest import (or the one named): how many records are in, and each record's outcome.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "job_id": {
          "type": "string"
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • set_track_artists changes data auth-required never probed

    Replace who a track is billed to: the "Artist & Guest feat. Guest" line on every store. Send the whole list in billing order, as the artist tells you, with at least one `primary`. Nobody is added for you: the account's own artist is on the list only if you send it, so ask, and Send refuses a song with no primary artist. `primary` and `with` make up the main credit; `featured` and `remixer` become the "feat." part. A `primary` artist besides the account's own is a collaboration: ask the artist whether they have all the rights needed for it, and send rights_confirmed: true only when they say yes. Without it the call is refused and nothing is written. A song billing two or more names also needs each credited with set_track_credits under that name with a real role. The songwriter, performer and producer credits are a different list, set with set_track_credits.

    mcp-tool

    {
      "type": "object",
      "required": [
        "track_id",
        "artists"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "artists": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name",
              "role"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "Exactly as it should read on the store."
              },
              "role": {
                "enum": [
                  "primary",
                  "featured",
                  "with",
                  "remixer"
                ],
                "type": "string"
              }
            }
          },
          "description": "Everyone billed, in billing order. An empty list clears the billing: the song then has no billed artist."
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would replace, without writing anything."
        },
        "track_id": {
          "type": "string"
        },
        "rights_confirmed": {
          "type": "boolean",
          "description": "Required as true when the list has a `primary` artist besides the account's own. Ask the artist first, in these words: \"I have all the rights needed for this collaboration\". Send true only when they confirm it. Never assume it: it is recorded as their legal confirmation."
        }
      },
      "additionalProperties": false
    }
    arguments 51 lines
  • add_version auth-required never probed

    Make another take of a song as its own track, linked to the original: a clean edit, an instrumental, acoustic, live, a remix, your own words, or the explicit original. It starts with the song's credits, lyrics and store answers; the audio, ISRC, UPC and release are its own. Counts as a song on the plan. `other_primary_artists` in the answer did not come across: tell the artist.

    mcp-tool

    {
      "type": "object",
      "required": [
        "track_id",
        "kind"
      ],
      "properties": {
        "kind": {
          "enum": [
            "clean_edit",
            "instrumental",
            "acoustic",
            "live",
            "remix",
            "something_else",
            "explicit_original"
          ],
          "type": "string",
          "description": "clean_edit is marked Clean and named Radio Edit. instrumental leaves the lyrics out. explicit_original is marked Explicit, with no version words, for a Clean song with no explicit version."
        },
        "words": {
          "type": "string",
          "description": "For something_else: what this version is, such as Slowed. Never an artist's name, and never Clean or Explicit."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would write, without writing anything."
        },
        "remixer": {
          "type": "string",
          "description": "For remix: who remixed it. Ask the artist; they get the Remixer role."
        },
        "track_id": {
          "type": "string",
          "description": "The song to add a version of."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the add happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 47 lines
  • create_album changes data auth-required never probed

    Create an album or EP. Put tracks on it afterward with set_album_tracks.

    mcp-tool

    {
      "type": "object",
      "required": [
        "fields"
      ],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "fields": {
          "type": "object",
          "description": "The fields to set, by the `name` get_requirements gives each one.",
          "additionalProperties": true
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would replace, without writing anything."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the create happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • set_first_listen changes data auth-required never probed

    Switch a release on or off the list other artists on Audora see on release day, to give it a first listen. Refused for a release out more than four weeks ago or released elsewhere.

    mcp-tool

    {
      "type": "object",
      "required": [
        "release_id",
        "on"
      ],
      "properties": {
        "on": {
          "type": "boolean"
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "release_id": {
          "type": "string",
          "description": "From list_releases."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and it happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 25 lines
  • list_tracks auth-required 30d ago

    Every track in this account, newest first.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • add_post changes data auth-required never probed

    Add a post to a campaign on one lane and day, as Promo's + does, with its words, the angle they take and a picture or video from the Library if you have them. It is a post on its own, not part of a moment, and a draft until it is scheduled.

    mcp-tool

    {
      "type": "object",
      "required": [
        "campaign_id",
        "lane",
        "date"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "The day it goes out, YYYY-MM-DD, inside the campaign's window. A draft may be saved with a day gone by; Schedule asks for one still ahead (schedule_check says so)."
        },
        "lane": {
          "enum": [
            "instagram",
            "story",
            "facebook",
            "tiktok",
            "youtube"
          ],
          "type": "string",
          "description": "Where it goes."
        },
        "time": {
          "type": "string",
          "description": "The time it goes out, HH:MM 24-hour, in the artist's own time zone."
        },
        "angle": {
          "enum": [
            "pin_angle.hook_object",
            "pin_angle.listener_pov",
            "pin_angle.lyric_line_on_beat",
            "pin_angle.occasion_day",
            "pin_angle.one_answerable_question",
            "pin_angle.ordinary_scene_contrast",
            "pin_angle.place_light_and_weather",
            "pin_angle.place_named_in_words",
            "pin_angle.release_fact_card",
            "pin_angle.repeat_what_worked",
            "pin_angle.scene_vocabulary",
            "pin_angle.show_coming_up",
            "pin_angle.story_line_that_nearly_went",
            "pin_angle.story_place",
            "pin_angle.tail_section",
            "pin_angle.uploaded_asset_hero"
          ],
          "type": "string",
          "description": "Which of Audora's post angles the words take (the key names it: listener_pov is the listener's side of the song, tail_section a part of the track no other post used, hook_object an object the song names, and so on). Audora counts how each angle does for the artist, and promo_results' what_works shows the result. get_campaign shows each post's angle."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "caption": {
          "type": "string",
          "description": "The words of the post, as they will be published. The lane's limit and Audora's text rules apply (no placeholders, nothing that points back at another post)."
        },
        "dry_run": {
          "type": "boolean",
          "description": "True to check the call and see what it would do, without writing anything."
        },
        "hashtags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Up to 12 hashtags, with or without #. Replaces the list."
        },
        "link_url": {
          "type": [
            "string",
            "null"
          ],
          "description": "A web address the post links to, or null to remove it."
        },
        "campaign_id": {
          "type": "string",
          "description": "From list_campaigns."
        },
        "media_asset_id": {
          "type": "string",
          "description": "A picture (for a picture post) or a video (for a video post) already in the artist's Library, by its media asset id. Audora does not make pictures or videos through this connection."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Send the same key if you retry, and the change happens once."
        }
      },
      "additionalProperties": false
    }
    arguments 90 lines
  • promo_this_week auth-required 30d ago

    What goes out in the next days across every campaign, what in that time is not scheduled yet (and so will not go out unless it is), and what did not go out lately and needs the artist. last_week: the week that ended, as the Last week sheet on Promo shows it: each post that went out with its numbers and where it stands against the artist's own usual on its platform, the one that did best, their music beside the week before, and what works best so far from their own results.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "days": {
          "type": "number",
          "description": "How many days ahead, 1–14. Default 7."
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • design_in_audora auth-required never probed

    Audora can design a logo, cover art, brand colors and typefaces, artist photos, and promotion posts and short videos for the artist. Those are made inside Audora, not through this connection: call this to get the exact page to send the artist to, with a sentence on what they will find there. Use it whenever the artist wants a logo, artwork, a cover, visuals, photos or promo video made.

    mcp-tool

    {
      "type": "object",
      "required": [
        "what"
      ],
      "properties": {
        "what": {
          "enum": [
            "logo",
            "cover_art",
            "palette",
            "typography",
            "artist_photos",
            "promotion"
          ],
          "type": "string"
        },
        "artist": {
          "type": "string",
          "description": "Only when you are connected as a label: the roster artist this call is for — their artist_user_id from list_roster, or their exact artist name. Required for every artist tool on a label connection. Leave it out on an artist's own connection."
        },
        "album_id": {
          "type": "string",
          "description": "For cover_art on an album or EP."
        },
        "track_id": {
          "type": "string",
          "description": "For cover_art on a single."
        }
      },
      "additionalProperties": false
    }
    arguments 32 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id d84250b6c144d985.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/d84250b6c144d985/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/d84250b6c144d985/badge.svg)](https://brick.blue/agent/d84250b6c144d985?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.