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/mcpProtocol: MCP 2.0 (Streamable HTTP)
Version: 2025-06-18
Authentication
The MCP server accepts two auth methods:
API Key
Authorization: Bearer radp_your_api_keyOAuth 2.1
For MCP clients that support OAuth (Claude, Cursor):
- Discovery:
GET /.well-known/oauth-authorization-server - Resource:
GET /.well-known/oauth-protected-resource/mcp - Register:
POST /oauth/register - Authorize:
GET /oauth/authorize(PKCE S256 required) - 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=code3. 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"