Media

Money

Dispatch

Company

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.

ParameterTypeRequiredDescription
didstringyesThe 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.

ParameterTypeRequiredDescription
streamstringyesStream ref: a whep:// / srt:// URI, a CF Stream /webRTC/play URL, or a 32-hex CF live-input uid.
taskstringnoOptional natural-language perception task (what to watch for).
modelstringnoOptional 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.

ParameterTypeRequiredDescription
subscription_idstringyesThe 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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
camera_idstringyes
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
limitintegerno
offsetintegerno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
production_idstringyes
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.)

ParameterTypeRequiredDescription
production_idstringyes
bodyobjectyes
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.)

ParameterTypeRequiredDescription
production_idstringyes
bodyobjectyes
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.)

ParameterTypeRequiredDescription
limitintegernoMaximum number of streams to return.
offsetintegerno
status"idle" · "live" · "ended"noFilter 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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
stream_idstringyes
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.)

ParameterTypeRequiredDescription
stream_idstringyes
fromstringnoRange start (ISO 8601 timestamp).
tostringnoRange 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.)

ParameterTypeRequiredDescription
stream_idstringyes
limitintegerno
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.)

ParameterTypeRequiredDescription
stream_idstringyes
bodyobjectno
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.)

ParameterTypeRequiredDescription
stream_idstringyes
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.)

ParameterTypeRequiredDescription
stream_idstringyes
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.)

ParameterTypeRequiredDescription
stream_idstringyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
nsstringyes
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.)

ParameterTypeRequiredDescription
nsstringyesMoQ 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.
trackstringyesMoQ track name within the namespace. Lowercase alphanumeric and dashes, 1–64 characters.
header_x_wave_declare_protocolstringnoOptional 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.)

ParameterTypeRequiredDescription
nsstringyesMoQ 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.
trackstringyesMoQ 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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
video_idstringno
statusobjectno
categorystringno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
clip_idstringyes
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.)

ParameterTypeRequiredDescription
clip_idstringyes
bodyobjectno
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.)

ParameterTypeRequiredDescription
clip_idstringyes
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.)

ParameterTypeRequiredDescription
header_idempotency_keystringnoA replayed key returns the original result without re-charging.
bodyobjectyes
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.)

ParameterTypeRequiredDescription
job_idstringyesThe 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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
video_idstringno
statusobjectno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
job_idstringyes
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.)

ParameterTypeRequiredDescription
job_idstringyes
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.)

ParameterTypeRequiredDescription
job_idstringyes
languagestringyes
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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
statusobjectno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
transcription_idstringyes
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.)

ParameterTypeRequiredDescription
transcription_idstringyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
category"premade" · "cloned" · "professional"no
languagestringno
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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
statusstringno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
project_idstringyes
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.)

ParameterTypeRequiredDescription
project_idstringyes
bodyobjectno
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.)

ParameterTypeRequiredDescription
project_idstringyes
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.)

ParameterTypeRequiredDescription
project_idstringyes
bodyobjectno
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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
statusobjectno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
type"upscale" · "denoise" · "stabilize" · "color_correct" · "super_resolution"no
statusobjectno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
room_idstringyes
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.)

ParameterTypeRequiredDescription
room_idstringyes
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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
line_idstringno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
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.)

ParameterTypeRequiredDescription
bodyobjectno
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.)

ParameterTypeRequiredDescription
pageintegerno
per_pageintegerno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
show_idstringyes
pageintegerno
per_pageintegerno
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.)

ParameterTypeRequiredDescription
show_idstringyes
bodyobjectyes
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>"}}}'

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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
idstringyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.

ParameterTypeRequiredDescription
slugstringyesper-org manifest slug
titlestringyes
tiersobject[]yes
contactstringnooptional buyer contact (email/URL)
payoutstringnooptional 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.

ParameterTypeRequiredDescription
slugstringyesthe 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.)

ParameterTypeRequiredDescription
fromstringnoRange start (YYYY-MM-DD). Defaults to the start of the current month.
tostringnoRange 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.)

ParameterTypeRequiredDescription
fromstringnoRange start (YYYYMMDD). Defaults to today.
tostringnoRange 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.)

ParameterTypeRequiredDescription
fromstringnoRange start (ISO 8601 timestamp). Defaults to 30 days before to.
tostringnoRange 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.)

ParameterTypeRequiredDescription
fromstringnoRange start (ISO 8601 timestamp). Defaults to 30 days before to.
tostringnoRange 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.)

ParameterTypeRequiredDescription
fromstringnoRange start (ISO 8601 timestamp). Defaults to 30 days before to.
tostringnoRange end (ISO 8601 timestamp). Defaults to now.
limitintegerno
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.)

ParameterTypeRequiredDescription
video_idstringyes
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.)

ParameterTypeRequiredDescription
video_idstringyes
bodyobjectyes
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.)

ParameterTypeRequiredDescription
video_idstringyes
bodyobjectno
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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.)

ParameterTypeRequiredDescription
proposal_idstringyes
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.)

ParameterTypeRequiredDescription
bodyobjectyes
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>"}}}'