MCP

MCP Server

Connect AI agents and coding tools to the Rad TV API via the Model Context Protocol.

Connect your AI assistant to Rad TV. The MCP server gives AI agents and coding tools like Claude, Cursor, and Windsurf direct access to 34 tools for publishing videos, managing content, YouTube sync, and more — without writing any GraphQL.

Endpoint

POST https://api.rad.live/mcp
GET  https://api.rad.live/mcp

Protocol: MCP 2.0 (Streamable HTTP) Version: 2025-06-18

Authentication

The MCP server accepts two auth methods:

API Key

Authorization: Bearer radp_your_api_key

OAuth 2.1

For MCP clients that support OAuth (Claude, Cursor):

  1. Discovery: GET /.well-known/oauth-authorization-server
  2. Resource: GET /.well-known/oauth-protected-resource/mcp
  3. Register: POST /oauth/register
  4. Authorize: GET /oauth/authorize (PKCE S256 required)
  5. Token: POST /oauth/token

See the OAuth section below for full flow details.

Connecting

Claude Code / Claude Desktop

Add to your MCP configuration:

{
  "mcpServers": {
    "radtv": {
      "url": "https://api.rad.live/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Cursor

Add to your MCP settings:

{
  "mcpServers": {
    "radtv": {
      "url": "https://api.rad.live/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Programmatic (JSON-RPC)

Initialize with JSON-RPC:

# Initialize
curl -X POST https://api.rad.live/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": { "name": "my-client", "version": "1.0" }
    }
  }'

# List tools
curl -X POST https://api.rad.live/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list"
  }'
const response = await fetch('https://api.rad.live/mcp', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY',
  },
  body: JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'initialize',
    params: {
      protocolVersion: '2025-03-26',
      capabilities: {},
      clientInfo: { name: 'my-client', version: '1.0' },
    },
  }),
});

const init = await response.json();
console.log(init.result.serverInfo);
// { name: "radtv-api", version: "2025-06-18" }
import requests

response = requests.post(
    "https://api.rad.live/mcp",
    headers={
        "Content-Type": "application/json",
        "Authorization": "Bearer YOUR_API_KEY",
    },
    json={
        "jsonrpc": "2.0",
        "id": 1,
        "method": "initialize",
        "params": {
            "protocolVersion": "2025-03-26",
            "capabilities": {},
            "clientInfo": {"name": "my-client", "version": "1.0"},
        },
    },
)

init = response.json()
print(init["result"]["serverInfo"])

OAuth 2.1 Flow

For MCP clients that use OAuth instead of direct API keys:

1. Register Client

curl -X POST https://api.rad.live/oauth/register \
  -H "Content-Type: application/json" \
  -d '{
    "redirect_uris": ["http://127.0.0.1:9999/callback"],
    "client_name": "My MCP Client"
  }'

Returns a client_id and client_secret.

2. Authorize (PKCE S256)

GET https://api.rad.live/oauth/authorize
  ?client_id=radcl_...
  &redirect_uri=http://127.0.0.1:9999/callback
  &code_challenge=<S256_CHALLENGE>
  &code_challenge_method=S256
  &state=<RANDOM_STATE>
  &response_type=code

3. Exchange Code for Tokens

curl -X POST https://api.rad.live/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=authorization_code&code=AUTH_CODE&code_verifier=VERIFIER&client_id=radcl_...&client_secret=SECRET&redirect_uri=http://127.0.0.1:9999/callback"

Returns an access_token and refresh_token.

4. Refresh Tokens

curl -X POST https://api.rad.live/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=refresh_token&refresh_token=radr_...&client_id=radcl_...&client_secret=SECRET"

Sections

On this page