Model Context Protocol

SoundDeal, as tools your agent can call

Connect SoundDeal to Claude or any MCP client and it can benchmark a deal term against real contracts, define what a clause means, analyze a contract in your account, and draft a negotiation brief from your side of the table — without you leaving the conversation.

Endpoint · Streamable HTTP

https://www.sounddeal.com/api/mcp

The surface

Seven tools

Three need no account at all — an agent can benchmark and define terms straight away. The other four act on your own contracts and need you to connect your SoundDeal account.

list_deal_typesPublic

The 11 deal types SoundDeal analyzes, each with a plain-English summary and the two sides the negotiation has.

get_deal_benchmarksPublic

Percentile bands for advances, royalty rates, producer points, splits, term length and recoupment, plus distributions for structural terms. Aggregates only — never an individual deal.

explain_deal_termPublic

Plain-English definition and market context for a contract term — recoupment, cross-collateralization, reversion, MFN, controlled composition.

analyze_dealAccountanalyses:write

Runs the full analysis on a contract and saves it to your account. Returns the deal health score, financial terms, red flags, redlines and missing clauses. Requires deal_type — use list_deal_types to choose — plus exactly one of contract_text or file_url. Uses one analysis from your plan.

get_analysisAccountanalyses:read

Reads an analysis already in your account. Free.

list_analysesAccountanalyses:read

Lists your saved analyses, newest first. Free.

generate_negotiation_briefAccountanalyses:write

A prioritized negotiation strategy for one analyzed contract, argued from one side of the table. Saves the brief to your account and spends from your daily Claude budget on a cache miss; cached per (analysis, side), so asking again for the same side is free.

Authentication

Two ways in

The public tools need no credentials. For the four that touch your own contracts, pick whichever fits how you are connecting.

OAuth · for Claude

Connect your account

Add SoundDeal as a connector and Claude walks you through signing in. You will see exactly which permissions are being asked for and can approve or refuse each connection. Nothing is shared until you say so, and you can disconnect at any time from Connected Apps.

Permissions are granular: benchmarks:read for public market data, analyses:read to open your contracts, and analyses:write to analyze new ones on your behalf.

API key · for code

Send a bearer token

Already have a SoundDeal API key? Send it as Authorization: Bearer sd_live_… and every account tool works against your own account. This is the simplest path for scripts, the Claude API, and anything non-interactive.

There is no consent screen on this path, because there is no third party to consent to — you minted the key. That also makes it all-or-nothing: a key used here carries all three permissions above, and does not expire until you revoke it. Treat one like a password.

Create an API key →

Either way, the limits are the same ones you already have. An analysis run through MCP uses one analysis from your plan, exactly as if you had uploaded the contract on the website. Requests are rate limited per key, and per IP for anonymous callers.

Setup

Connecting

Claude · web, desktop and mobile

1

Open connector settings

In Claude, go to Settings → Connectors, then choose Add custom connector.

2

Paste the endpoint

https://www.sounddeal.com/api/mcp
3

Sign in and approve

Claude will send you to SoundDeal to sign in and show you what the connection is asking for. Approve it and the tools appear in your conversations. If you only want market benchmarks and no access to your contracts, approve just that permission.

Claude Code

Add the server from your terminal:

claude mcp add --transport http sounddeal https://www.sounddeal.com/api/mcp

Then run /mcp inside Claude Code and pick sounddeal to sign in. Or configure it by hand in .mcp.json:

{
  "mcpServers": {
    "sounddeal": {
      "type": "http",
      "url": "https://www.sounddeal.com/api/mcp"
    }
  }
}

Claude API · mcp_servers

The MCP connector in the Messages API takes the endpoint directly. Pass a SoundDeal API key as the authorization_token to reach the account tools, or omit it for the public ones.

curl https://api.anthropic.com/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "anthropic-beta: mcp-client-2025-04-04" \
  -d '{
    "model": "claude-sonnet-4-6",
    "max_tokens": 4096,
    "messages": [
      { "role": "user", "content": "What is a typical producer royalty for a UK deal?" }
    ],
    "mcp_servers": [
      {
        "type": "url",
        "url": "https://www.sounddeal.com/api/mcp",
        "name": "sounddeal",
        "authorization_token": "YOUR_SOUNDDEAL_API_KEY"
      }
    ]
  }'

Any other MCP client

SoundDeal speaks Streamable HTTP at https://www.sounddeal.com/api/mcp. Server-Sent Events as a separate transport is not offered — it was removed from the MCP spec in the 2025-03-26 revision.

Authorization follows the MCP spec: an unauthorized request returns 401 with a WWW-Authenticate header pointing at /.well-known/oauth-protected-resource, so a spec-compliant client can discover the authorization server and start the flow on its own. Authorization code + PKCE (S256) and refresh tokens are supported; clients may identify themselves with a client ID metadata document or register dynamically.

Calling a public tool with plain curl:

curl -sS https://www.sounddeal.com/api/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "get_deal_benchmarks",
      "arguments": { "deal_type": "producer-uk-eu" }
    }
  }'

And with an API key, for an account tool:

curl -sS https://www.sounddeal.com/api/mcp \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -H "authorization: Bearer sd_live_your_key_here" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "list_analyses",
      "arguments": {}
    }
  }'

Worth knowing

Before you wire it up

Benchmarks are aggregates, never contracts

get_deal_benchmarks returns percentile bands and distributions computed across deals analyzed through SoundDeal. It never returns an individual contract or a term traceable to one, and any metric computed from fewer than five deals is withheld — the tool says so rather than dropping it silently. Each figure carries its sample size and the date it was computed, so an agent can judge how much weight it supports.

Your contracts stay yours

A contract analyzed through MCP is saved to your account and is not added to SoundDeal's aggregate benchmark data. The website asks you that question explicitly when you upload; a tool call cannot ask anyone, so the answer defaults to no. See Trust, AI Assistants and Connector Access in our Privacy Policy, and Automated and Agent Access in our Terms for how uploads and connector access are handled.

analyze_deal is not free, and not idempotent

Each call spends one analysis from your plan and runs a full LLM analysis, which can take a couple of minutes on a long contract. It is annotated idempotentHint: false for a reason: calling it twice on the same contract produces two analyses and spends two credits. If a call times out on the client side, the analysis usually still completes — check list_analyses before running it again. To re-read something already analyzed, use get_analysis, which is free.

deal_type is required, and is not detected for you

analyze_deal will not guess what kind of agreement it is looking at. Call list_deal_types and choose — it returns every valid value with a plain-English summary of what that deal is. This is deliberate: the deal type selects which market norms the contract is judged against, so a producer agreement scored as a recording deal comes back confidently wrong rather than obviously wrong. If the contract does not make the type clear, ask rather than guess. The website detects the type on upload; that detection reads the uploaded file directly and is not reachable from a tool call yet.

Send exactly one contract, and make file_url a direct link

analyze_deal needs exactly one of pasted contract_text or a file_url pointing straight at a PDF, DOCX or TXT (up to 20MB). Neither is optional as a pair: a call with deal_type alone has no contract to read and comes back as an error, and a call with both is also refused rather than resolved — two inputs are two different documents, and guessing wrong would analyze the wrong contract and still spend an analysis. Both errors are free and name the parameter to fix. A Drive or Dropbox share page is a web page, not a file, and will not work. Only public https URLs are fetched; private and internal addresses are refused. Scanned PDFs with no text layer need the website, which can OCR them.

It is not legal advice

SoundDeal supplements a qualified music attorney; it does not replace one. Every tool here is informational, including the negotiation brief. Consult counsel before signing, amending or terminating a contract.

Point your agent at it

The benchmark and glossary tools work right now, with no account. Sign in when you want it reading your own deals.