WAVE Developers
Registry code: 616caa3938f8c235
Media infrastructure for the agentic internet.
- endpoint
- https://developer.wave.online/mcp
- door code
- 9e350c9adfe46542
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is WAVE Developers live?
- Yes — it answered the hub's last check (checked 25d ago). It answered 99% of checks over the last 30 days.
- Is WAVE Developers free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does WAVE Developers have?
- 59 tools: perception_close, pricing_manifest_create, wave_av_remux, wave_publish_braid_audio, wave_stop_braid_audio, wave_delete_caption_job, wave_detect_clips, wave_delete_clip, ….
- Is WAVE Developers safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.3%· all time 100%
last good check
of 59 tools
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- live → degraded· timeout after 20000ms
- unknown → live
- topic
- media generation video
- used for
- access media apis
- call media tools over mcp
- takes → gives
- text → text, data
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
wave_get_analytics_engagement open 45d ago
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.)
{ "type": "object", "properties": { "to": { "type": "string", "format": "date-time", "description": "Range end (ISO 8601 timestamp). Defaults to now." }, "from": { "type": "string", "format": "date-time", "description": "Range start (ISO 8601 timestamp). Defaults to 30 days before `to`." } }, "additionalProperties": false }arguments 16 lineswave_get_analytics_overview open 45d ago
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.)
{ "type": "object", "properties": { "to": { "type": "string", "format": "date-time", "description": "Range end (ISO 8601 timestamp). Defaults to now." }, "from": { "type": "string", "format": "date-time", "description": "Range start (ISO 8601 timestamp). Defaults to 30 days before `to`." } }, "additionalProperties": false }arguments 16 lineswave_get_analytics_top_content open 45d ago
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.)
{ "type": "object", "properties": { "to": { "type": "string", "format": "date-time", "description": "Range end (ISO 8601 timestamp). Defaults to now." }, "from": { "type": "string", "format": "date-time", "description": "Range start (ISO 8601 timestamp). Defaults to 30 days before `to`." }, "limit": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1 } }, "additionalProperties": false }arguments 22 lineswave_get_billing open 45d ago
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.)
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 lineswave_get_billing_usage open 45d ago
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.)
{ "type": "object", "properties": { "to": { "type": "string", "format": "date", "description": "Range end (YYYY-MM-DD). Defaults to today." }, "from": { "type": "string", "format": "date", "description": "Range start (YYYY-MM-DD). Defaults to the start of the current month." } }, "additionalProperties": false }arguments 16 lineswave_list_captions open 45d ago
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.)
{ "type": "object", "$defs": { "JobStatus": { "enum": [ "pending", "processing", "completed", "failed", "cancelled" ], "type": "string" } }, "properties": { "page": { "type": "integer", "default": 1, "minimum": 1 }, "status": { "$ref": "#/$defs/JobStatus" }, "per_page": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1 }, "video_id": { "type": "string" } }, "additionalProperties": false }arguments 35 lineswave_download_captions open 45d ago
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.)
{ "type": "object", "required": [ "job_id", "language" ], "properties": { "format": { "enum": [ "srt", "vtt", "txt", "json" ], "type": "string", "default": "srt" }, "job_id": { "type": "string" }, "language": { "type": "string" } }, "additionalProperties": false }arguments 26 lineswave_list_clips open 44d ago
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.)
{ "type": "object", "$defs": { "JobStatus": { "enum": [ "pending", "processing", "completed", "failed", "cancelled" ], "type": "string" } }, "properties": { "page": { "type": "integer", "default": 1, "minimum": 1 }, "status": { "$ref": "#/$defs/JobStatus" }, "category": { "type": "string" }, "per_page": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1 }, "video_id": { "type": "string" } }, "additionalProperties": false }arguments 38 lineswave_get_clip open 45d ago
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.)
{ "type": "object", "required": [ "clip_id" ], "properties": { "clip_id": { "type": "string" } }, "additionalProperties": false }arguments 12 lineswave_engine_capabilities open 45d ago
The media-engine capability contract (GET /v1/engine/capabilities. Billed and authorized exactly as the HTTP route: this tool re-enters the same gateway pipeline, so scope, metering and x402 apply unchanged.)
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 lineswave_gpu_status open 45d ago
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.)
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 lineswave_list_transcriptions open 44d ago
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.)
{ "type": "object", "$defs": { "JobStatus": { "enum": [ "pending", "processing", "completed", "failed", "cancelled" ], "type": "string" } }, "properties": { "page": { "type": "integer", "default": 1, "minimum": 1 }, "status": { "$ref": "#/$defs/JobStatus" }, "per_page": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1 } }, "additionalProperties": false }arguments 32 lineswave_get_transcription open 44d ago
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.)
{ "type": "object", "required": [ "transcription_id" ], "properties": { "transcription_id": { "type": "string" } }, "additionalProperties": false }arguments 12 lineswave_get_usage open 45d ago
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.)
{ "type": "object", "properties": { "to": { "type": "string", "description": "Range end (YYYYMMDD). Defaults to today." }, "from": { "type": "string", "description": "Range start (YYYYMMDD). Defaults to today." } }, "additionalProperties": false }arguments 14 lineswave_list_chapters open 44d ago
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.)
{ "type": "object", "required": [ "video_id" ], "properties": { "video_id": { "type": "string" } }, "additionalProperties": false }arguments 12 lineswave_list_voices open 44d ago
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.)
{ "type": "object", "properties": { "category": { "enum": [ "premade", "cloned", "professional" ], "type": "string" }, "language": { "type": "string" } }, "additionalProperties": false }arguments 17 lineswave_get_compose_proposal open 45d ago
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.)
{ "type": "object", "required": [ "proposal_id" ], "properties": { "proposal_id": { "type": "string", "pattern": "^prp_[A-Za-z0-9_-]+$" } }, "additionalProperties": false }arguments 13 lineslist_supported_protocols open 45d ago
Returns the machine-payment protocols this gateway accepts (the same list /.well-known/payments.json publishes), each with the credential header a paying agent sends.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linesidentity_resolve open 45d ago
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.
{ "type": "object", "required": [ "did" ], "properties": { "did": { "type": "string", "description": "The DID to resolve" } }, "additionalProperties": false }arguments 13 linespricing_manifest_list open 45d ago
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.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linesfacilitator_status open 45d ago
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.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linespricing_manifest_get open 45d ago
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.
{ "type": "object", "required": [ "slug" ], "properties": { "slug": { "type": "string", "pattern": "^[a-z0-9-]{3,48}$", "description": "the manifest slug" } }, "additionalProperties": false }arguments 14 lineswave_get_caption_job open 45d ago
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.)
{ "type": "object", "required": [ "job_id" ], "properties": { "job_id": { "type": "string" } }, "additionalProperties": false }arguments 12 linesperception_close unknown never probed
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.
{ "type": "object", "required": [ "subscription_id" ], "properties": { "subscription_id": { "type": "string", "description": "The psub_ subscription id returned by perception_subscribe." } }, "additionalProperties": false }arguments 13 linespricing_manifest_create unknown never probed
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.
{ "type": "object", "required": [ "slug", "title", "tiers" ], "properties": { "slug": { "type": "string", "pattern": "^[a-z0-9-]{3,48}$", "description": "per-org manifest slug" }, "tiers": { "type": "array", "items": { "type": "object", "required": [ "id", "name", "price_usdc_micro", "rail", "billing", "features" ], "properties": { "id": { "type": "string", "pattern": "^[A-Za-z0-9_-]{1,32}$", "description": "tier id" }, "name": { "type": "string", "maxLength": 80, "description": "display name" }, "rail": { "enum": [ "x402", "card", "both" ], "type": "string" }, "billing": { "enum": [ "per_op", "monthly_cap", "volume" ], "type": "string" }, "features": { "type": "array", "items": { "type": "string", "maxLength": 200 } }, "price_usdc_micro": { "type": "string", "pattern": "^\\d{1,12}$", "description": "integer micro-USDC string (e.g. \"500000\" = $0.50). Rail law: below 500000 the rail must be x402; card requires >= $0.50." } }, "additionalProperties": true }, "maxItems": 20, "minItems": 1 }, "title": { "type": "string", "maxLength": 120 }, "payout": { "type": "string", "maxLength": 200, "description": "optional payout destination note" }, "contact": { "type": "string", "maxLength": 200, "description": "optional buyer contact (email/URL)" } }, "additionalProperties": true }arguments 87 lineswave_av_remux unknown never probed
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.)
{ "type": "object", "$defs": { "AvRemuxRequest": { "type": "object", "required": [ "videoUrl", "audioUrl", "container" ], "properties": { "audioUrl": { "type": "string", "format": "uri", "description": "Source for the separate Dante/AES67 audio track." }, "videoUrl": { "type": "string", "format": "uri", "description": "Source for local IP video (RTP H.264)." }, "container": { "enum": [ "mpegts", "fmp4" ], "type": "string", "description": "Output container for the synchronized stream." }, "outputUrl": { "type": "string", "format": "uri", "description": "Optional presigned destination to PUT the resulting container to. Omitted → returned inline." } }, "description": "`org` is derived from the caller's authenticated principal, not sent in the body." } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/AvRemuxRequest" } }, "additionalProperties": false }arguments 48 lineswave_publish_braid_audio unknown never probed
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.)
{ "type": "object", "$defs": { "BraidPublishRequest": { "type": "object", "required": [ "ns", "sources" ], "properties": { "ns": { "type": "string", "description": "Namespace for the published track. Republishing the same ns replaces the prior machine." }, "sources": { "type": "array", "items": { "type": "object", "required": [ "label", "track" ], "properties": { "url": { "type": "string", "format": "uri" }, "path": { "type": "string" }, "label": { "type": "string" }, "track": { "type": "string" } } }, "description": "Named audio sources to braid into one interleaved multichannel track. Each source needs a `label`/`track` and either a `url` or a `path`." }, "windowMs": { "type": "integer", "description": "Braid window size in milliseconds. Defaults to the machine-config default when omitted." }, "sampleRate": { "type": "integer", "description": "Sample rate for the braided track. Defaults to the machine-config default when omitted." } }, "description": "`org` is derived from the caller's authenticated principal, not sent in the body." } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/BraidPublishRequest" } }, "additionalProperties": false }arguments 62 lineswave_stop_braid_audio unknown never probed
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.)
{ "type": "object", "required": [ "ns" ], "properties": { "ns": { "type": "string" } }, "additionalProperties": false }arguments 12 lineswave_delete_caption_job unknown never probed
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.)
{ "type": "object", "required": [ "job_id" ], "properties": { "job_id": { "type": "string" } }, "additionalProperties": false }arguments 12 lineswave_detect_clips unknown never probed
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.)
{ "type": "object", "$defs": { "ClipDetectRequest": { "type": "object", "required": [ "videoId" ], "properties": { "videoId": { "type": "string" }, "maxClips": { "type": "integer" }, "categories": { "type": "array", "items": { "type": "string" } }, "maxDuration": { "type": "number", "default": 60 }, "minDuration": { "type": "number", "default": 5 }, "sensitivity": { "type": "number", "default": 0.5, "maximum": 1, "minimum": 0 } } } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/ClipDetectRequest" } }, "additionalProperties": false }arguments 48 lineswave_delete_clip unknown never probed
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.)
{ "type": "object", "required": [ "clip_id" ], "properties": { "clip_id": { "type": "string" } }, "additionalProperties": false }arguments 12 lineswave_gpu_infer unknown never probed
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.)
{ "type": "object", "required": [ "body" ], "properties": { "body": { "type": "object", "properties": { "input": { "type": "object", "additionalProperties": true }, "model": { "type": "string" } } } }, "additionalProperties": false }arguments 21 lineswave_mint_moq_subscribe_token unknown never probed
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.)
{ "type": "object", "required": [ "ns", "track" ], "properties": { "ns": { "type": "string", "pattern": "^[a-z0-9-]{1,64}$", "maxLength": 64, "minLength": 1, "description": "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": { "type": "string", "pattern": "^[a-z0-9-]{1,64}$", "maxLength": 64, "minLength": 1, "description": "MoQ track name within the namespace. Lowercase alphanumeric and dashes, 1–64 characters." } }, "additionalProperties": false }arguments 24 lineswave_realtime_history unknown never probed
Recent event history for a channel (GET /v1/realtime/channels/{channel}/history. Requires the `realtime: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.)
{ "type": "object", "required": [ "channel" ], "properties": { "limit": { "type": "integer", "default": 50, "maximum": 50 }, "channel": { "type": "string" } }, "additionalProperties": false }arguments 17 lineswave_realtime_presence unknown never probed
Current presence for a channel (GET /v1/realtime/channels/{channel}/presence. Requires the `realtime: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.)
{ "type": "object", "required": [ "channel" ], "properties": { "channel": { "type": "string" } }, "additionalProperties": false }arguments 12 lineswave_realtime_publish unknown never probed
Publish an event to a channel (POST /v1/realtime/channels/{channel}/publish. Requires the `realtime: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.)
{ "type": "object", "required": [ "channel", "body" ], "properties": { "body": { "type": "object", "required": [ "event" ], "properties": { "data": { "description": "Arbitrary JSON payload for the event." }, "event": { "type": "string", "description": "Event name, e.g. `caption.cue`, `sentiment.tick`, `clip.created`, `stream.started`." } } }, "channel": { "type": "string" } }, "additionalProperties": false }arguments 28 lineswave_search unknown never probed
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.)
{ "type": "object", "$defs": { "SearchRequest": { "type": "object", "required": [ "query" ], "properties": { "topK": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1 }, "query": { "type": "string", "maxLength": 1000 }, "namespace": { "enum": [ "streams", "users", "clips", "transcripts", "all" ], "type": "string", "default": "streams" } } } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/SearchRequest" } }, "additionalProperties": false }arguments 43 lineswave_search_analytics unknown never probed
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.)
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 lineswave_search_index unknown never probed
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.)
{ "type": "object", "$defs": { "SearchIndexDoc": { "type": "object", "required": [ "id", "namespace", "text" ], "properties": { "id": { "type": "string" }, "text": { "type": "string" }, "title": { "type": "string" }, "metadata": { "type": "object" }, "namespace": { "enum": [ "streams", "users", "clips", "transcripts" ], "type": "string" } } }, "SearchIndexRequest": { "type": "object", "required": [ "id", "namespace", "text" ], "properties": { "id": { "type": "string" }, "docs": { "type": "array", "items": { "$ref": "#/$defs/SearchIndexDoc" } }, "text": { "type": "string" }, "title": { "type": "string" }, "metadata": { "type": "object" }, "namespace": { "enum": [ "streams", "users", "clips", "transcripts" ], "type": "string" } } } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/SearchIndexRequest" } }, "additionalProperties": false }arguments 82 lineswave_search_delete unknown never probed
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.)
{ "type": "object", "required": [ "id", "namespace" ], "properties": { "id": { "type": "string" }, "namespace": { "enum": [ "streams", "users", "clips", "transcripts" ], "type": "string" } }, "additionalProperties": false }arguments 22 lineswave_create_transcription unknown never probed
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.)
{ "type": "object", "$defs": { "TranscriptionCreate": { "type": "object", "required": [ "sourceId", "sourceType" ], "properties": { "model": { "type": "string", "default": "default" }, "language": { "type": "string" }, "sourceId": { "type": "string" }, "sourceType": { "enum": [ "video", "audio" ], "type": "string" }, "punctuation": { "type": "boolean", "default": true }, "speakerLabels": { "type": "boolean", "default": false }, "wordTimestamps": { "type": "boolean", "default": false } } } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/TranscriptionCreate" } }, "additionalProperties": false }arguments 52 lineswave_create_chapter unknown never probed
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.)
{ "type": "object", "$defs": { "ChapterCreate": { "type": "object", "required": [ "title", "startTime", "endTime" ], "properties": { "title": { "type": "string" }, "endTime": { "type": "number" }, "startTime": { "type": "number" }, "description": { "type": "string" } } } }, "required": [ "video_id", "body" ], "properties": { "body": { "$ref": "#/$defs/ChapterCreate" }, "video_id": { "type": "string" } }, "additionalProperties": false }arguments 40 lineswave_detect_chapters unknown never probed
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.)
{ "type": "object", "$defs": { "ChapterDetectRequest": { "type": "object", "properties": { "maxChapters": { "type": "integer" }, "minDuration": { "type": "number", "default": 30 }, "includeThumbnails": { "type": "boolean", "default": true }, "includeDescriptions": { "type": "boolean", "default": true } } } }, "required": [ "video_id" ], "properties": { "body": { "$ref": "#/$defs/ChapterDetectRequest" }, "video_id": { "type": "string" } }, "additionalProperties": false }arguments 37 lineswave_clone_voice unknown never probed
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.)
{ "type": "object", "$defs": { "VoiceCloneRequest": { "type": "object", "required": [ "name", "audioFiles" ], "properties": { "name": { "type": "string" }, "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "audioFiles": { "type": "array", "items": { "type": "string", "format": "uri" }, "maxItems": 25, "minItems": 1 }, "description": { "type": "string" } } } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/VoiceCloneRequest" } }, "additionalProperties": false }arguments 44 lineswave_generate_speech unknown never probed
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.)
{ "type": "object", "$defs": { "VoiceGenerateRequest": { "type": "object", "required": [ "voiceId", "text" ], "properties": { "text": { "type": "string" }, "model": { "type": "string", "default": "eleven_multilingual_v2" }, "style": { "type": "number", "default": 0, "maximum": 1, "minimum": 0 }, "voiceId": { "type": "string" }, "stability": { "type": "number", "default": 0.5, "maximum": 1, "minimum": 0 }, "timestamps": { "type": "boolean", "default": false, "description": "When true, the resulting VoiceGeneration includes character-level `alignment` (start/end times) so clients can render karaoke highlighting and derive caption cues. Backed by the engine's with-timestamps mode.\n" }, "outputFormat": { "type": "string", "default": "mp3_44100_128" }, "similarityBoost": { "type": "number", "default": 0.75, "maximum": 1, "minimum": 0 } } } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/VoiceGenerateRequest" } }, "additionalProperties": false }arguments 60 lineswave_create_compose_proposal unknown never probed
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.)
{ "type": "object", "$defs": { "ComposeProposalCreate": { "type": "object", "required": [ "intent" ], "properties": { "flowId": { "type": "string", "pattern": "^flw_[A-Za-z0-9_-]{4,64}$", "description": "Optional id of an existing flow this proposal belongs to." }, "intent": { "type": "string", "maxLength": 280, "minLength": 1, "description": "What the caller wants composed, in plain language. Sanitized and capped server side." }, "context": { "type": "object", "properties": { "referer": { "type": "string", "maxLength": 200 } }, "description": "Optional retrieval hints. Ordering only: nothing here is rendered, logged or sent to a model." }, "budgetUsd": { "type": "number", "minimum": 0, "description": "Optional ceiling in USD. A proposal whose minimum total exceeds it is refused at run time." } }, "description": "POST /v1/compose request body. Validated by parseComposeRequest (compose-route.ts)." } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/ComposeProposalCreate" } }, "additionalProperties": false }arguments 49 lineswave_resolve_compose_ingest unknown never probed
Resolve a run input into a probed source (stage -1) (POST /v1/compose/ingest/resolve. 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.)
{ "type": "object", "$defs": { "ComposeRunInput": { "type": "object", "oneOf": [ { "required": [ "url" ] }, { "required": [ "uploadId" ] } ], "properties": { "url": { "type": "string", "format": "uri", "maxLength": 2048, "description": "An https URL naming a public host." }, "uploadId": { "type": "string", "pattern": "^[A-Za-z0-9_-]{8,128}$" } }, "description": "The caller's own input into stage 0. EXACTLY ONE of `url` or `uploadId`. `url` is validated (https only, no userinfo credentials, no private or metadata host) and hashed. It is never dereferenced, echoed or logged." }, "ComposeIngestResolveCreate": { "type": "object", "required": [ "input" ], "properties": { "input": { "$ref": "#/$defs/ComposeRunInput" } }, "description": "POST /v1/compose/ingest/resolve body: the same input a run takes." } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/ComposeIngestResolveCreate" } }, "additionalProperties": false }arguments 54 lineswave_run_compose_proposal unknown never probed
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.)
{ "type": "object", "$defs": { "ComposeRunInput": { "type": "object", "oneOf": [ { "required": [ "url" ] }, { "required": [ "uploadId" ] } ], "properties": { "url": { "type": "string", "format": "uri", "maxLength": 2048, "description": "An https URL naming a public host." }, "uploadId": { "type": "string", "pattern": "^[A-Za-z0-9_-]{8,128}$" } }, "description": "The caller's own input into stage 0. EXACTLY ONE of `url` or `uploadId`. `url` is validated (https only, no userinfo credentials, no private or metadata host) and hashed. It is never dereferenced, echoed or logged." }, "ComposeRunCreate": { "type": "object", "required": [ "proposalId", "input" ], "properties": { "input": { "$ref": "#/$defs/ComposeRunInput" }, "budgetUsd": { "type": "number", "minimum": 0, "description": "Ceiling in USD for this run. Exceeded means 402, not a partial run." }, "proposalId": { "type": "string", "pattern": "^prp_[A-Za-z0-9_-]+$", "description": "A proposal the calling org owns." }, "idempotencyKey": { "type": "string", "pattern": "^[A-Za-z0-9_.:-]{8,200}$", "description": "Replay guard. The same key with a different input is a 409 COMPOSE_RUN_CONFLICT, never a second run." } }, "description": "POST /v1/compose/run request body. Validated by parseRunRequest (compose-run-lib.ts)." } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/ComposeRunCreate" } }, "additionalProperties": false }arguments 70 lineswave_create_upload unknown never probed
Create a presigned upload for a Composer source (POST /v1/uploads. 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.)
{ "type": "object", "$defs": { "ComposeUploadCreate": { "type": "object", "required": [ "contentType", "sizeBytes" ], "properties": { "sizeBytes": { "type": "integer", "maximum": 524288000, "minimum": 1 }, "contentType": { "enum": [ "video/mp4", "video/quicktime", "audio/mp4", "audio/x-m4a", "audio/wav", "audio/x-wav" ], "type": "string" } }, "description": "POST /v1/uploads body." } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/ComposeUploadCreate" } }, "additionalProperties": false }arguments 40 linesperception_subscribe unknown never probed
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.
{ "type": "object", "required": [ "stream" ], "properties": { "task": { "type": "string", "description": "Optional natural-language perception task (what to watch for)." }, "model": { "type": "string", "description": "Optional vision model id (default claude-haiku)." }, "stream": { "type": "string", "description": "Stream ref: a whep:// / srt:// URI, a CF Stream /webRTC/play URL, or a 32-hex CF live-input uid." } }, "additionalProperties": true }arguments 21 lineswave_mint_moq_publish_token unknown never probed
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.)
{ "type": "object", "required": [ "ns", "track" ], "properties": { "ns": { "type": "string", "pattern": "^[a-z0-9-]{1,64}$", "maxLength": 64, "minLength": 1, "description": "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": { "type": "string", "pattern": "^[a-z0-9-]{1,64}$", "maxLength": 64, "minLength": 1, "description": "MoQ track name within the namespace. Lowercase alphanumeric and dashes, 1–64 characters." }, "header_x_wave_declare_protocol": { "type": "string", "description": "Optional declared origin protocol for billing (e.g. `moq`). Ignored unless recognized and authorized for this org; never rejects the mint." } }, "additionalProperties": false }arguments 28 lineswave_analyze_text unknown never probed
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.)
{ "type": "object", "required": [ "body" ], "properties": { "body": { "type": "object", "required": [ "text" ], "properties": { "text": { "type": "string" }, "includeTopics": { "type": "boolean", "default": false }, "includeEmotions": { "type": "boolean", "default": false } } } }, "additionalProperties": false }arguments 28 lineswave_delete_transcription unknown never probed
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.)
{ "type": "object", "required": [ "transcription_id" ], "properties": { "transcription_id": { "type": "string" } }, "additionalProperties": false }arguments 12 lineswave_update_clip unknown never probed
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.)
{ "type": "object", "$defs": { "ClipUpdate": { "type": "object", "properties": { "title": { "type": "string" }, "endTime": { "type": "number" }, "startTime": { "type": "number" }, "description": { "type": "string" } } } }, "required": [ "clip_id" ], "properties": { "body": { "$ref": "#/$defs/ClipUpdate" }, "clip_id": { "type": "string" } }, "additionalProperties": false }arguments 34 lineswave_create_sentiment_analysis unknown never probed
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.)
{ "type": "object", "$defs": { "SentimentAnalysisCreate": { "type": "object", "required": [ "sourceId", "sourceType" ], "properties": { "text": { "type": "string" }, "sourceId": { "type": "string" }, "sourceType": { "enum": [ "video", "audio", "text", "chat" ], "type": "string" }, "includeTopics": { "type": "boolean", "default": false }, "includeSummary": { "type": "boolean", "default": false }, "includeEmotions": { "type": "boolean", "default": false }, "segmentAnalysis": { "type": "boolean", "default": false } } } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/SentimentAnalysisCreate" } }, "additionalProperties": false }arguments 54 lineswave_create_clip unknown never probed
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.)
{ "type": "object", "$defs": { "ClipCreate": { "type": "object", "required": [ "source", "in" ], "properties": { "in": { "type": "string", "pattern": "^\\d+(\\.\\d+)?(s|m)$", "description": "Clip start offset, a time string like \"5s\" or \"2m\" (0-10m)." }, "fit": { "enum": [ "contain", "cover", "scale-down" ], "type": "string", "default": "contain" }, "out": { "type": "string", "pattern": "^\\d+(\\.\\d+)?(s|m)$", "description": "Clip end offset, a time string. Provide `out` or `duration`, not both." }, "width": { "type": "integer", "maximum": 2000, "minimum": 10 }, "height": { "type": "integer", "maximum": 2000, "minimum": 10 }, "source": { "type": "string", "minLength": 1, "description": "A recording id the gateway resolves to an org-scoped source URL." }, "formats": { "type": "array", "items": { "enum": [ "mp4", "spritesheet", "m4a", "frame" ], "type": "string" }, "default": [ "mp4" ], "description": "`frame` produces a single JPEG still at `in` and needs neither `out` nor `duration`." }, "quality": { "enum": [ "720p", "1080p", "4k" ], "type": "string", "default": "720p" }, "duration": { "type": "string", "pattern": "^\\d+(\\.\\d+)?(s|m)$", "description": "Output clip length, a time string (1s-60s). Provide `out` or `duration`, not both." }, "sourceType": { "enum": [ "recording_id" ], "type": "string", "default": "recording_id", "description": "Only `recording_id` is accepted — a raw storage key (`r2_key`) is rejected outright (cross-tenant read protection)." }, "visibility": { "enum": [ "public", "private" ], "type": "string", "default": "private" }, "spritesheetFrames": { "type": "integer", "default": 30, "maximum": 120, "minimum": 1 } }, "description": "The real live-route request contract. `videoId` is NOT accepted — the live route requires `source` (a recording id) instead." } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/ClipCreate" } }, "additionalProperties": false }arguments 110 lineswave_av_demux unknown never probed
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.)
{ "type": "object", "$defs": { "AvDemuxRequest": { "type": "object", "required": [ "sourceUrl" ], "properties": { "sourceUrl": { "type": "string", "format": "uri", "description": "Synchronized MPEG-TS or fMP4 container to split back into video + Dante audio." }, "audioOutputUrl": { "type": "string", "format": "uri", "description": "Optional presigned destination for the demuxed Dante/AES67 audio output." }, "videoOutputUrl": { "type": "string", "format": "uri", "description": "Optional presigned destination for the demuxed RTP H.264 video output." } }, "description": "`org` is derived from the caller's authenticated principal, not sent in the body." } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/AvDemuxRequest" } }, "additionalProperties": false }arguments 38 lineswave_batch_operations unknown never probed
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.)
{ "type": "object", "required": [ "body" ], "properties": { "body": { "type": "object", "required": [ "operations" ], "properties": { "operations": { "type": "array", "items": { "type": "object", "required": [ "method", "path" ], "properties": { "body": { "description": "The operation's JSON body (mutating methods only)" }, "path": { "type": "string", "description": "An enforced /v1 route" }, "method": { "enum": [ "GET", "HEAD", "POST", "PUT", "PATCH", "DELETE" ], "type": "string" } } }, "maxItems": 25, "minItems": 1 } } } }, "additionalProperties": false }arguments 49 lineswave_create_caption_job unknown never probed
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.)
{ "type": "object", "$defs": { "CaptionJobCreate": { "type": "object", "required": [ "videoId" ], "properties": { "style": { "type": "string", "default": "default" }, "videoId": { "type": "string" }, "speakerLabels": { "type": "boolean", "default": false }, "sourceLanguage": { "type": "string", "default": "en" }, "targetLanguages": { "type": "array", "items": { "type": "string" } } } } }, "required": [ "body" ], "properties": { "body": { "$ref": "#/$defs/CaptionJobCreate" } }, "additionalProperties": false }arguments 43 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your agent card — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id616caa3938f8c235.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/616caa3938f8c235/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/616caa3938f8c235?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
How much of the published card is filled in. Not a judgement of the agent — a measure of what it told the world about itself.
Places where the published card departs from the specification. Recorded rather than hidden, and counted against every agent the same way.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.
Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.
- dev.wave.online wave-mcp
- docs.wave.online wave-docs
- api.wave.online WAVE Gateway
- wave.online WAVE
- anchor.wave.online WAVE
- agents.wave.online WAVE for Agents