Every tool an MCP client can call on WAVE: 96 tools, one per gateway route, enumerated from the hosted endpoint https://api.wave.online/mcp (tools/list, server wave-mcp v0.1.0). The page regenerates when the server changes, so what is listed is what answers.
See the MCP server page for connecting a client and issuing a key.
Call shape
Each tool below carries its own call. tools/list needs no key; tools/call carries the key in the Authorization header. A tool answers with the gateway's result for its route: 2xx with the payload, 402 with the x402 payment terms an agent pays per call, 403 SCOPE_INSUFFICIENT naming the scope the key lacks, 404 for an unknown id.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
Discovery and identity
facilitator_status
Returns WAVE facilitator health: which protocols are wired, which rails are supported, and the public endpoint URLs to point your x402-hono / agents/x402 config at.
Takes no parameters.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"facilitator_status","arguments":{}}}'
list_supported_protocols
Returns the protocol ids registered in the gateway's multi-protocol dispatcher.
Takes no parameters.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_supported_protocols","arguments":{}}}'
identity_resolve
Resolve a did:wave- / did:pkh: identity string to its public DID document fields. did:wave-platform → returns the URL of the signed platform DID document. did:pkh → returns chain + address.
| Parameter | Type | Required | Description |
|---|---|---|---|
did | string | yes | The DID to resolve |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"identity_resolve","arguments":{"did":"<did>"}}}'
Streams and live control
perception_subscribe
Open an agentic live-media perception subscription (ADR-0004 #85): attach an agent as a WHEP/SRT viewer over any supported transport and receive a normalized receive descriptor + subscription_id + the D7 meter binding. Returns 503 (PERCEPTION_UNCONFIGURED) until perception is armed.
| Parameter | Type | Required | Description |
|---|---|---|---|
stream | string | yes | Stream ref: a whep:// / srt:// URI, a CF Stream /webRTC/play URL, or a 32-hex CF live-input uid. |
task | string | no | Optional natural-language perception task (what to watch for). |
model | string | no | Optional vision model id (default claude-haiku). |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"perception_subscribe","arguments":{"stream":"<stream>"}}}'
perception_close
Close an agentic perception subscription by its subscription_id (ADR-0004 #85). Returns { ok } on close, or a not_found note for an unknown/already-closed id. 503 until perception is armed.
| Parameter | Type | Required | Description |
|---|---|---|---|
subscription_id | string | yes | The psub_ subscription id returned by perception_subscribe. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"perception_close","arguments":{"subscription_id":"<subscription_id>"}}}'
wave_list_cameras
List registered cameras (GET /v1/cameras. Requires the cameras:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
Takes no parameters.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_cameras","arguments":{}}}'
wave_register_camera
Register a camera (POST /v1/cameras. Requires the cameras:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_register_camera","arguments":{"body":"<body>"}}}'
wave_control_camera
Send a control command to a camera (POST /v1/cameras/{cameraId}/control. Requires the cameras:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
camera_id | string | yes | |
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_control_camera","arguments":{"camera_id":"<camera_id>","body":"<body>"}}}'
wave_moderate_content
Moderate content (POST /v1/moderate. Requires the moderate:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_moderate_content","arguments":{"body":"<body>"}}}'
wave_list_productions
List productions (GET /v1/productions. Requires the productions:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | no | |
offset | integer | no | |
status | "setup" · "rehearsal" · "live" · "paused" · "ended" | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_productions","arguments":{}}}'
wave_create_production
Create a production (POST /v1/productions. Requires the productions:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_production","arguments":{"body":"<body>"}}}'
wave_get_production
Get a production (GET /v1/productions/{productionId}. Requires the productions:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
production_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_production","arguments":{"production_id":"<production_id>"}}}'
wave_switch_production_camera
Switch a production's camera (POST /v1/productions/{productionId}/camera. Requires the productions:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
production_id | string | yes | |
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_switch_production_camera","arguments":{"production_id":"<production_id>","body":"<body>"}}}'
wave_set_production_overlay
Show, hide, or update a production's graphic overlay (POST /v1/productions/{productionId}/overlay. Requires the productions:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
production_id | string | yes | |
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_set_production_overlay","arguments":{"production_id":"<production_id>","body":{}}}}'
wave_list_streams
List streams (GET /v1/streams. Requires the streams:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | no | Maximum number of streams to return. |
offset | integer | no | |
status | "idle" · "live" · "ended" | no | Filter by stream status. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_streams","arguments":{}}}'
wave_create_stream
Create a stream (POST /v1/streams. Requires the streams:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_stream","arguments":{"body":"<body>"}}}'
wave_get_stream
Get a stream (GET /v1/streams/{streamId}. Requires the streams:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
stream_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_stream","arguments":{"stream_id":"<stream_id>"}}}'
wave_get_stream_analytics
Get a stream's analytics (GET /v1/streams/{streamId}/analytics. Requires the streams:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
stream_id | string | yes | |
from | string | no | Range start (ISO 8601 timestamp). |
to | string | no | Range end (ISO 8601 timestamp). |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_stream_analytics","arguments":{"stream_id":"<stream_id>"}}}'
wave_list_stream_highlights
List a stream's highlights (GET /v1/streams/{streamId}/highlights. Requires the streams:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
stream_id | string | yes | |
limit | integer | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_stream_highlights","arguments":{"stream_id":"<stream_id>"}}}'
wave_mark_stream_highlight
Mark a highlight (POST /v1/streams/{streamId}/highlights. Requires the streams:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
stream_id | string | yes | |
body | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_mark_stream_highlight","arguments":{"stream_id":"<stream_id>"}}}'
wave_start_stream
Start a stream (POST /v1/streams/{streamId}/start. Requires the streams:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
stream_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_start_stream","arguments":{"stream_id":"<stream_id>"}}}'
wave_get_stream_status
Get a stream's status (GET /v1/streams/{streamId}/status. Requires the streams:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
stream_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_stream_status","arguments":{"stream_id":"<stream_id>"}}}'
wave_stop_stream
Stop a stream (POST /v1/streams/{streamId}/stop. Requires the streams:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
stream_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_stop_stream","arguments":{"stream_id":"<stream_id>"}}}'
Media transport
wave_av_demux
Demux one container back into separate video + Dante audio (POST /v1/av/demux. Requires the av:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_av_demux","arguments":{"body":"<body>"}}}'
wave_av_remux
Mux synchronized IP video + Dante audio into one container (POST /v1/av/remux. Requires the av:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_av_remux","arguments":{"body":"<body>"}}}'
wave_publish_braid_audio
Publish a braided audio track (POST /v1/braid/publish. Requires the moq:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_publish_braid_audio","arguments":{"body":"<body>"}}}'
wave_stop_braid_audio
Stop a braided audio publish (DELETE /v1/braid/publish/{ns}. Requires the moq:write scope on your WAVE API key. DESTRUCTIVE: permanently deletes the target resource and cannot be undone; confirm before calling. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
ns | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_stop_braid_audio","arguments":{"ns":"<ns>"}}}'
wave_mint_moq_publish_token
Mint a MoQ publish join-token (POST /v1/moq/publish/{ns}/{track}. Requires the moq:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
ns | string | yes | MoQ namespace. Lowercase alphanumeric and dashes, 1–64 characters. The same value is bound into the minted token's claims and re-checked by the relay against the session it opens. |
track | string | yes | MoQ track name within the namespace. Lowercase alphanumeric and dashes, 1–64 characters. |
header_x_wave_declare_protocol | string | no | Optional declared origin protocol for billing (e.g. moq). Ignored unless recognized and authorized for this org; never rejects the mint. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_mint_moq_publish_token","arguments":{"ns":"<ns>","track":"<track>"}}}'
wave_mint_moq_subscribe_token
Mint a MoQ subscribe join-token (GET /v1/moq/subscribe/{ns}/{track}. Requires the moq:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
ns | string | yes | MoQ namespace. Lowercase alphanumeric and dashes, 1–64 characters. The same value is bound into the minted token's claims and re-checked by the relay against the session it opens. |
track | string | yes | MoQ track name within the namespace. Lowercase alphanumeric and dashes, 1–64 characters. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_mint_moq_subscribe_token","arguments":{"ns":"<ns>","track":"<track>"}}}'
Render and clips
wave_list_clips
List clips (GET /v1/clips. Requires the clips:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no | |
video_id | string | no | |
status | object | no | |
category | string | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_clips","arguments":{}}}'
wave_create_clip
Create a clip (POST /v1/clips. Requires the clips:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_clip","arguments":{"body":"<body>"}}}'
wave_detect_clips
Start AI clip detection (POST /v1/clips/detect. Requires the clips:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_detect_clips","arguments":{"body":"<body>"}}}'
wave_get_clip
Get a clip (GET /v1/clips/{clipId}. Requires the clips:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
clip_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_clip","arguments":{"clip_id":"<clip_id>"}}}'
wave_update_clip
Update a clip (PATCH /v1/clips/{clipId}. Requires the clips:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
clip_id | string | yes | |
body | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_update_clip","arguments":{"clip_id":"<clip_id>"}}}'
wave_delete_clip
Delete a clip (DELETE /v1/clips/{clipId}. Requires the clips:write scope on your WAVE API key. DESTRUCTIVE: permanently deletes the target resource and cannot be undone; confirm before calling. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
clip_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_delete_clip","arguments":{"clip_id":"<clip_id>"}}}'
wave_render_video
Render a video from a Brief (x402-payable) (POST /v1/render. Requires the render:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
header_idempotency_key | string | no | A replayed key returns the original result without re-charging. |
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_render_video","arguments":{"body":"<body>"}}}'
wave_render_poll
Poll an async render job (GET /v1/render/{jobId}. Requires the render:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | The render job id returned when the render was started asynchronously. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_render_poll","arguments":{"job_id":"<job_id>"}}}'
Captions and transcription
wave_list_captions
List caption jobs (GET /v1/captions. Requires the captions:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no | |
video_id | string | no | |
status | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_captions","arguments":{}}}'
wave_create_caption_job
Create a caption job (POST /v1/captions. Requires the captions:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_caption_job","arguments":{"body":"<body>"}}}'
wave_get_caption_job
Get a caption job (GET /v1/captions/{jobId}. Requires the captions:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_caption_job","arguments":{"job_id":"<job_id>"}}}'
wave_delete_caption_job
Delete a caption job (DELETE /v1/captions/{jobId}. Requires the captions:write scope on your WAVE API key. DESTRUCTIVE: permanently deletes the target resource and cannot be undone; confirm before calling. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_delete_caption_job","arguments":{"job_id":"<job_id>"}}}'
wave_download_captions
Download captions (GET /v1/captions/{jobId}/download. Requires the captions:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | |
language | string | yes | |
format | "srt" · "vtt" · "txt" · "json" | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_download_captions","arguments":{"job_id":"<job_id>","language":"<language>"}}}'
wave_list_transcriptions
List transcriptions (GET /v1/transcribe. Requires the transcribe:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no | |
status | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_transcriptions","arguments":{}}}'
wave_create_transcription
Create a transcription (POST /v1/transcribe. Requires the transcribe:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_transcription","arguments":{"body":"<body>"}}}'
wave_get_transcription
Get a transcription (GET /v1/transcribe/{transcriptionId}. Requires the transcribe:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
transcription_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_transcription","arguments":{"transcription_id":"<transcription_id>"}}}'
wave_delete_transcription
Delete a transcription (DELETE /v1/transcribe/{transcriptionId}. Requires the transcribe:write scope on your WAVE API key. DESTRUCTIVE: permanently deletes the target resource and cannot be undone; confirm before calling. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
transcription_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_delete_transcription","arguments":{"transcription_id":"<transcription_id>"}}}'
Voice and speech
wave_clone_voice
Clone a voice from audio samples (POST /v1/voice/clone. Requires the voice:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_clone_voice","arguments":{"body":"<body>"}}}'
wave_generate_speech
Generate speech from text (POST /v1/voice/generate. Requires the voice:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_generate_speech","arguments":{"body":"<body>"}}}'
wave_list_voices
List available voices (GET /v1/voice/voices. Requires the voice:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
category | "premade" · "cloned" · "professional" | no | |
language | string | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_voices","arguments":{}}}'
Editor and studio
wave_list_projects
List editor projects (GET /v1/editor/projects. Requires the editor:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no | |
status | string | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_projects","arguments":{}}}'
wave_create_project
Create an editor project (POST /v1/editor/projects. Requires the editor:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_project","arguments":{"body":"<body>"}}}'
wave_get_project
Get a project (GET /v1/editor/projects/{projectId}. Requires the editor:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
project_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_project","arguments":{"project_id":"<project_id>"}}}'
wave_update_project
Update a project (PATCH /v1/editor/projects/{projectId}. Requires the editor:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
project_id | string | yes | |
body | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_update_project","arguments":{"project_id":"<project_id>"}}}'
wave_delete_project
Delete a project (DELETE /v1/editor/projects/{projectId}. Requires the editor:write scope on your WAVE API key. DESTRUCTIVE: permanently deletes the target resource and cannot be undone; confirm before calling. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
project_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_delete_project","arguments":{"project_id":"<project_id>"}}}'
wave_export_project
Export a project (POST /v1/editor/projects/{projectId}/export. Requires the editor:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
project_id | string | yes | |
body | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_export_project","arguments":{"project_id":"<project_id>"}}}'
wave_list_sentiment_analyses
List sentiment analyses (GET /v1/sentiment. Requires the sentiment:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no | |
status | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_sentiment_analyses","arguments":{}}}'
wave_create_sentiment_analysis
Create a sentiment analysis (POST /v1/sentiment. Requires the sentiment:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_sentiment_analysis","arguments":{"body":"<body>"}}}'
wave_analyze_text
Analyze text directly (POST /v1/sentiment/analyze. Requires the sentiment:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_analyze_text","arguments":{"body":{}}}}'
wave_list_enhancements
List enhancement jobs (GET /v1/studio-ai/enhancements. Requires the studio-ai:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no | |
type | "upscale" · "denoise" · "stabilize" · "color_correct" · "super_resolution" | no | |
status | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_enhancements","arguments":{}}}'
wave_create_enhancement
Create an enhancement job (POST /v1/studio-ai/enhancements. Requires the studio-ai:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_enhancement","arguments":{"body":"<body>"}}}'
wave_preview_enhancement
Generate enhancement preview (POST /v1/studio-ai/preview. Requires the studio-ai:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_preview_enhancement","arguments":{"body":"<body>"}}}'
Collaboration, phone and podcast
wave_list_collab_rooms
List collaboration rooms (GET /v1/collab/rooms. Requires the collab:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no | |
status | "waiting" · "active" · "ended" | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_collab_rooms","arguments":{}}}'
wave_create_collab_room
Create a collaboration room (POST /v1/collab/rooms. Requires the collab:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_collab_room","arguments":{"body":"<body>"}}}'
wave_get_collab_room
Get a room (GET /v1/collab/rooms/{roomId}. Requires the collab:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
room_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_collab_room","arguments":{"room_id":"<room_id>"}}}'
wave_delete_collab_room
Delete a room (DELETE /v1/collab/rooms/{roomId}. Requires the collab:write scope on your WAVE API key. DESTRUCTIVE: permanently deletes the target resource and cannot be undone; confirm before calling. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
room_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_delete_collab_room","arguments":{"room_id":"<room_id>"}}}'
wave_list_calls
List calls (GET /v1/phone/calls. Requires the phone:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no | |
line_id | string | no | |
direction | "inbound" · "outbound" | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_calls","arguments":{}}}'
wave_make_call
Make a call (POST /v1/phone/calls. Requires the phone:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_make_call","arguments":{"body":"<body>"}}}'
wave_list_phone_lines
List phone lines (GET /v1/phone/lines. Requires the phone:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_phone_lines","arguments":{}}}'
wave_provision_phone_line
Provision a phone line (POST /v1/phone/lines. Requires the phone:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_provision_phone_line","arguments":{}}}'
wave_list_podcast_shows
List podcast shows (GET /v1/podcast/shows. Requires the podcast:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
page | integer | no | |
per_page | integer | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_podcast_shows","arguments":{}}}'
wave_create_podcast_show
Create a podcast show (POST /v1/podcast/shows. Requires the podcast:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_podcast_show","arguments":{"body":"<body>"}}}'
wave_list_podcast_episodes
List episodes for a show (GET /v1/podcast/shows/{showId}/episodes. Requires the podcast:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
show_id | string | yes | |
page | integer | no | |
per_page | integer | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_podcast_episodes","arguments":{"show_id":"<show_id>"}}}'
wave_create_podcast_episode
Create an episode (POST /v1/podcast/shows/{showId}/episodes. Requires the podcast:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
show_id | string | yes | |
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_podcast_episode","arguments":{"show_id":"<show_id>","body":"<body>"}}}'
Search
wave_search
Hybrid search (dense + sparse → RRF) over streams/clips/transcripts, tenant-isolated (POST /v1/search. Requires the search:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_search","arguments":{"body":"<body>"}}}'
wave_search_analytics
Own-org query insights (top / zero-result / trending) (GET /v1/search/analytics. Requires the search:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
Takes no parameters.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_search_analytics","arguments":{}}}'
wave_search_index
Index (upsert) one doc or a batch (POST /v1/search/index. Requires the search:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_search_index","arguments":{"body":"<body>"}}}'
wave_search_delete
Delete one indexed doc (idempotent) (DELETE /v1/search/index/{id}. Requires the search:write scope on your WAVE API key. DESTRUCTIVE: permanently deletes the target resource and cannot be undone; confirm before calling. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | yes | |
namespace | "streams" · "users" · "clips" · "transcripts" | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_search_delete","arguments":{"id":"<id>","namespace":"streams"}}}'
Inference and engine
wave_batch_operations
Execute a batch of operations in one request (POST /v1/batch. Requires the batch:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_batch_operations","arguments":{"body":{}}}}'
wave_engine_capabilities
The media-engine capability contract (GET /v1/engine/capabilities. Requires the engine:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
Takes no parameters.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_engine_capabilities","arguments":{}}}'
wave_gpu_status
GPU plane status (GET /v1/gpu/infer. Requires the gpu:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
Takes no parameters.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_gpu_status","arguments":{}}}'
wave_gpu_infer
Dispatch a GPU inference job on the WAVE-hosted GPU plane (POST /v1/gpu/infer. Requires the gpu:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_gpu_infer","arguments":{"body":{}}}}'
Pricing and account
pricing_manifest_create
Create or update the caller org's pricing-page manifest (pricing-pages E2; MCP rendering of POST /v1/pricing/manifests). Input is a PricingManifest: slug, title, tiers[] (id, name, price_usdc_micro, rail, billing, features), optional contact/payout. The rail law is enforced server-side: a tier priced below $0.50 must be rail x402. Requires the pricing:write scope; acts as the verified caller org only.
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | yes | per-org manifest slug |
title | string | yes | |
tiers | object[] | yes | |
contact | string | no | optional buyer contact (email/URL) |
payout | string | no | optional payout destination note |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"pricing_manifest_create","arguments":{"slug":"<slug>","title":"<title>","tiers":[]}}}'
pricing_manifest_list
List the caller org's pricing-page manifests (MCP rendering of GET /v1/pricing/manifests). Returns { org, manifests: [{ slug, title, status, updated_at }] }. Requires the pricing:read scope.
Takes no parameters.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"pricing_manifest_list","arguments":{}}}'
pricing_manifest_get
Read one of the caller org's pricing-page manifests by slug (MCP rendering of GET /v1/pricing/manifests/:slug). Returns { org, slug, status, updated_at, manifest }. Requires the pricing:read scope.
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | yes | the manifest slug |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"pricing_manifest_get","arguments":{"slug":"<slug>"}}}'
wave_get_billing_usage
Get billed usage for a date range (GET /v1/billing/usage. Requires the billing:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | no | Range start (YYYY-MM-DD). Defaults to the start of the current month. |
to | string | no | Range end (YYYY-MM-DD). Defaults to today. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_billing_usage","arguments":{}}}'
wave_get_usage
Get raw per-dimension usage (GET /v1/usage. Requires the usage:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | no | Range start (YYYYMMDD). Defaults to today. |
to | string | no | Range end (YYYYMMDD). Defaults to today. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_usage","arguments":{}}}'
Other tools
wave_get_analytics_engagement
Get account-wide engagement analytics (GET /v1/analytics/engagement. Requires the analytics:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | no | Range start (ISO 8601 timestamp). Defaults to 30 days before to. |
to | string | no | Range end (ISO 8601 timestamp). Defaults to now. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_analytics_engagement","arguments":{}}}'
wave_get_analytics_overview
Get an account-level analytics overview (GET /v1/analytics/overview. Requires the analytics:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | no | Range start (ISO 8601 timestamp). Defaults to 30 days before to. |
to | string | no | Range end (ISO 8601 timestamp). Defaults to now. |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_analytics_overview","arguments":{}}}'
wave_get_analytics_top_content
Get top content by usage (GET /v1/analytics/top-content. Requires the analytics:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | no | Range start (ISO 8601 timestamp). Defaults to 30 days before to. |
to | string | no | Range end (ISO 8601 timestamp). Defaults to now. |
limit | integer | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_analytics_top_content","arguments":{}}}'
wave_get_billing
Get the current billing account (GET /v1/billing. Requires the billing:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
Takes no parameters.
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_billing","arguments":{}}}'
wave_list_chapters
List chapters for a video (GET /v1/videos/{videoId}/chapters. Requires the chapters:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
video_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_list_chapters","arguments":{"video_id":"<video_id>"}}}'
wave_create_chapter
Create a chapter (POST /v1/videos/{videoId}/chapters. Requires the chapters:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
video_id | string | yes | |
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_chapter","arguments":{"video_id":"<video_id>","body":"<body>"}}}'
wave_detect_chapters
Start AI chapter detection (POST /v1/videos/{videoId}/chapters/detect. Requires the chapters:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
video_id | string | yes | |
body | object | no |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_detect_chapters","arguments":{"video_id":"<video_id>"}}}'
wave_create_compose_proposal
Compose a plan from a plain-language intent (POST /v1/compose. Requires the composer:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_create_compose_proposal","arguments":{"body":"<body>"}}}'
wave_get_compose_proposal
Read a stored proposal by id (GET /v1/compose/proposals/{proposalId}. Requires the composer:read scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
proposal_id | string | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_get_compose_proposal","arguments":{"proposal_id":"<proposal_id>"}}}'
wave_run_compose_proposal
Run a stored proposal once (POST /v1/compose/run. Requires the composer:write scope on your WAVE API key. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
| Parameter | Type | Required | Description |
|---|---|---|---|
body | object | yes |
curl -s -X POST https://api.wave.online/mcp \
-H "Authorization: Bearer $WAVE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"wave_run_compose_proposal","arguments":{"body":"<body>"}}}'