WAVE MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WAVE_API_KEY | Yes | Your WAVE API key | |
| WAVE_BASE_URL | No | API base URL | https://wave.online |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| wave_list_streamsA | List streams in your WAVE account (GET /v1/streams), with pagination and status filtering |
| wave_create_streamC | Create a new stream (POST /v1/streams) with a Cloudflare Stream live input |
| wave_start_streamA | Start a stream by its ID (POST /v1/streams/{id}/start) |
| wave_stop_streamB | Stop an active stream by its ID (POST /v1/streams/{id}/stop) |
| wave_get_stream_healthA | Get the current status document for a stream (GET /v1/streams/{id}/status): connection state, viewer count, and quality indicators |
| wave_get_stream_metricsA | Get analytics for a single stream (GET /v1/streams/{id}/analytics): views, watch time, and geographic/device breakdown over an optional date range |
| wave_mark_highlightA | Mark a moment in a stream as a highlight for later clipping (POST /v1/streams/{id}/highlights) |
| wave_list_productionsB | List multi-camera productions in your WAVE account (GET /v1/productions) |
| wave_create_productionB | Create a new multi-camera production (POST /v1/productions) |
| wave_get_viewersA | Get account-wide viewer engagement analytics (GET /v1/analytics/engagement) over an optional date range |
| wave_get_subscriptionA | Get the current billing account (GET /v1/billing): plan, Stripe customer status, and subscription state |
| wave_get_usageA | Get billed usage for a date range (GET /v1/billing/usage), defaulting to the current month |
| wave_switch_cameraC | Switch the program or preview bus to a different camera index in a multi-camera production (POST /v1/productions/{id}/camera) |
| wave_create_clipA | Create a clip from a recording (POST /v1/clips). |
| wave_show_graphicA | Show or hide a graphics overlay in a production (POST /v1/productions/{id}/overlay) |
| wave_control_cameraA | Send a control command to a managed camera (POST /v1/cameras/{id}/control). |
| wave_moderate_chatA | Moderate a chat message in a live stream (POST /v1/moderate): block, flag, or allow it |
| wave_start_captionsA | Transcribe an audio clip and optionally run a fast-LLM step over the transcript (POST /v1/live/pipeline, multipart). This processes ONE provided audio chunk through WAVE's live pipeline — it does not attach a persistent caption feed to a live stream. Requires the account's live pipeline feature to be enabled; a 404 means it is not armed for this account |
| wave_voice_converseA | Drive a full headless conversation with the WAVE voice agent: bind the agent to a room, send a WAV of the caller's speech (16-bit LE 48 kHz PCM, mono or stereo), and receive the agent's spoken reply as raw 16-bit LE 48 kHz stereo PCM written to outPath. No browser, no WebRTC. |
| wave_design_extractB | Run @wave-av/pen-extract's |
| wave_design_contractA | Compose a design-contract.json from an already-extracted pen-extract dir, then validate it against the schema + acceptance-tests catalogue. Returns the validator line, key counts, and the written path. |
| wave_design_measureA | Run @wave-av/loc-study's |
| wave_design_contract_checkA | Validate an existing design-contract.json against the schema + acceptance-tests catalogue, no compose. |
| wave.askA | Propose a WAVE flow (product + MCP tool + price shape) for a media-processing goal stated in plain language (captions/clips/dub/realtime/identity/x402/...). Reads only: checks a bundled, measured snapshot of the product/skill/tool manifests (knowledge/*.json) — never the live network. Never executes: calls no other tool, signs no payment, and makes no side-effecting or network request. Returns a proposal object for you to call yourself; always carries the literal |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| stream | A WAVE stream with its configuration and status |
| production | A WAVE studio production session |
TDQS
Scored across 24 tools
Each tool maps to a distinct resource/action pair: design extraction, contract validation, stream lifecycle, camera control, billing reads, and analytics. Even similar-sounding tools like wave_design_contract vs wave_design_contract_check are clearly separated by compose-vs-validate semantics, and wave_get_viewers vs wave_get_stream_metrics are distinguished by account-wide vs single-stream scope.
Most tools follow a consistent wave_<verb>_<noun> pattern across streams, productions, billing, and camera actions. Minor deviations like wave_design_contract (noun as operation), wave_voice_converse (noun-verb order), and wave.ask (dot separator instead of underscore) keep it from a 5.
With 24 tools spanning design, productions, streams, billing, camera control, captions, voice, and a meta-planning tool, the server feels like an API grab-bag rather than a tightly scoped set. Most tools have a concrete purpose, but the count is on the heavy side for an MCP server.
Core workflows are present for stream lifecycle, production switching, design extraction/validation, analytics, and camera commands. However, there are notable gaps: wave_create_clip and wave_control_camera depend on recording/camera IDs with no discovery tool, and most resources lack update/delete operations.