Conversation
Remote MCP https://api.wave.online/mcp with optional WAVE_API_KEY (person path only). Lean skills: wave-media, wave-transcribe, wave-captions, wave-render, wave-clips, wave-x402-call, wave-openapi. Listing copy per Scout Keep.
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueComment |
Reviewer's GuideScaffolds the Sequence diagram for the WAVE dual-auth callsequenceDiagram
participant Agent
participant MCP as WAVE_MCP
participant Gateway as WAVE_Gateway
participant Payment as x402_Base_USDC
Agent->>MCP: Call media tool
alt WAVE_API_KEY is set
MCP->>Gateway: Authorization: Bearer key
Gateway-->>MCP: Media result
else No API key
MCP->>Gateway: Unpaid media call
Gateway-->>MCP: HTTP 402 challenge
MCP->>Payment: Settle challenge
Payment-->>MCP: Protocol credential
MCP->>Gateway: Retry with x402 credential
Gateway-->>MCP: Media result
end
MCP-->>Agent: Return real result
State diagram for WAVE plugin connection and paymentstateDiagram-v2
[*] --> unconnected
unconnected --> connected_no_key: connect MCP
connected_no_key --> connected_with_key: optional Bearer configured
connected_no_key --> payment_required_402: media call returns 402
payment_required_402 --> connected_no_key: x402 settled and retry succeeds
connected_with_key --> [*]
connected_no_key --> [*]
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
4 issues found across 12 files
Confidence score: 2/5
mcp.jsonleavesWAVE_API_KEYunwired, so the documented Bearer person-path authentication can fail; reference the variable from the MCPcommand/args/environment configuration and verify the auth flow..cursor-plugin/plugin.jsonresolvesmcp.jsonandskills/*within.cursor-plugin/, where those resources are absent, so packaged installations may not load the server or clips skill; align the packaged paths or include the referenced files.LICENSEchanges the repository from Apache-2.0 to MIT, potentially removing patent and NOTICE/attribution protections for existing contributions; confirm contributor consent and the intended relicensing scope before merging.skills/wave-clips/SKILL.mddeclares no meters while the skill and README describe gateway metering, creating inconsistent billing behavior or documentation; make the meter declaration match the gateway contract.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name=".cursor-plugin/plugin.json">
<violation number="1" location=".cursor-plugin/plugin.json:19">
P2: A plugin packaged/installed from this directory resolves `mcp.json` and `skills/*` relative to `.cursor-plugin/`, but that directory only contains `plugin.json` — `mcp.json` and `skills/` live at the repository root. The MCP and skills referenced here won't be found. The sibling root `plugin.json` also declares this MCP under a different field name (`mcpServers`) with `./skills/` paths, so the two manifests diverge. Either point these paths at the actual files (`../mcp.json`, `../skills/...`) or keep a single manifest and align the field names.</violation>
</file>
<file name="LICENSE">
<violation number="1" location="LICENSE:1">
P2: This change relicenses the whole repository from Apache-2.0 to MIT. Apache-2.0 grants an explicit patent license and imposes contributor attribution/NOTICE terms; MIT drops both. Relicensing existing Apache-2.0-covered code also requires consent from every prior contributor. Confirm the downgrade is intentional and sign off on it before merge, especially given the x402/payment code in this repo.</violation>
</file>
<file name="mcp.json">
<violation number="1" location="mcp.json:9">
P2: The declared `WAVE_API_KEY` is never wired into the MCP server config, so the Bearer person-path auth documented in the README cannot work. Cursor's `mcp.json` only applies variables referenced in `command`/`args`/`env`/`url`/`headers`; the `wave` entry has no `headers` block referencing `${WAVE_API_KEY}`. As a result, configured keys are silently dropped and calls fall through to the unauthenticated x402 path. Add an explicit header mapping to the server entry (and drop the unused `variables` block if it is not a supported key).</violation>
</file>
<file name="skills/wave-clips/SKILL.md">
<violation number="1" location="skills/wave-clips/SKILL.md:4">
P3: The clips skill declares an empty `meters: []` list while its body claims clips are metered through the gateway ("Meters re-enter gateway per PRODUCT-TRUTH"), and README.md maps clips to a gateway meter. Every other metered skill in this batch names its meter explicitly (wave_transcription_minutes, wave_caption_minutes, wave_render_minutes). As written, an agent selecting this skill gets no meter identifier to attribute usage against, so metering/attribution for clips could be dropped. Name the clips meter (e.g. `wave_clip_minutes`) or, if clips genuinely are unmetered, remove the metering claim from the body so the two don't contradict.</violation>
</file>
Architecture diagram
sequenceDiagram
participant Agent as Agent (MCP Client)
participant WAVE as WAVE MCP Server
participant API as WAVE API
participant Payer as x402 Payer
Note over Agent,WAVE: Plugin Registration & Discovery
Agent->>WAVE: Connect to MCP (https://api.wave.online/mcp)
WAVE-->>Agent: Tools discovered (transcribe, captions, render, clips)
alt No API Key (Agent/x402 path)
Agent->>WAVE: Call capability (e.g., transcribe)
WAVE->>API: Forward request (no Bearer)
API-->>WAVE: HTTP 402 Payment Required
WAVE-->>Agent: Return 402 challenge
Agent->>Payer: Resolve x402 challenge
Payer-->>Agent: Payment credential
Agent->>WAVE: Retry with settlement header
WAVE->>API: Forward authenticated request
API-->>WAVE: Result (transcript, captions, render)
WAVE-->>Agent: Return media result
else Optional API Key (Person path)
Agent->>WAVE: Call capability + Authorization: Bearer
WAVE->>API: Forward with bearer token
alt Valid key
API-->>WAVE: Result
WAVE-->>Agent: Return media result
else Invalid SPEND_CAP_TIER_BLOCKED
API-->>WAVE: 402 SPEND_CAP_TIER_BLOCKED
WAVE-->>Agent: Return spend cap error (needs card)
end
end
Note over Agent,WAVE: OpenAPI/Discovery (unmetered)
Agent->>WAVE: facilitator_status / discovery
WAVE-->>Agent: Status + x402 rails
Agent->>API: Fetch OpenAPI spec (https://api.wave.online/openapi.json)
API-->>Agent: OpenAPI document (authority for paths/schemas)
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| "skills/wave-x402-call", | ||
| "skills/wave-openapi" | ||
| ], | ||
| "mcp": "mcp.json" |
There was a problem hiding this comment.
P2: A plugin packaged/installed from this directory resolves mcp.json and skills/* relative to .cursor-plugin/, but that directory only contains plugin.json — mcp.json and skills/ live at the repository root. The MCP and skills referenced here won't be found. The sibling root plugin.json also declares this MCP under a different field name (mcpServers) with ./skills/ paths, so the two manifests diverge. Either point these paths at the actual files (../mcp.json, ../skills/...) or keep a single manifest and align the field names.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At .cursor-plugin/plugin.json, line 19:
<comment>A plugin packaged/installed from this directory resolves `mcp.json` and `skills/*` relative to `.cursor-plugin/`, but that directory only contains `plugin.json` — `mcp.json` and `skills/` live at the repository root. The MCP and skills referenced here won't be found. The sibling root `plugin.json` also declares this MCP under a different field name (`mcpServers`) with `./skills/` paths, so the two manifests diverge. Either point these paths at the actual files (`../mcp.json`, `../skills/...`) or keep a single manifest and align the field names.</comment>
<file context>
@@ -0,0 +1,20 @@
+ "skills/wave-x402-call",
+ "skills/wave-openapi"
+ ],
+ "mcp": "mcp.json"
+}
</file context>
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| See the License for the specific language governing permissions and | ||
| limitations under the License. | ||
| MIT License |
There was a problem hiding this comment.
P2: This change relicenses the whole repository from Apache-2.0 to MIT. Apache-2.0 grants an explicit patent license and imposes contributor attribution/NOTICE terms; MIT drops both. Relicensing existing Apache-2.0-covered code also requires consent from every prior contributor. Confirm the downgrade is intentional and sign off on it before merge, especially given the x402/payment code in this repo.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At LICENSE, line 1:
<comment>This change relicenses the whole repository from Apache-2.0 to MIT. Apache-2.0 grants an explicit patent license and imposes contributor attribution/NOTICE terms; MIT drops both. Relicensing existing Apache-2.0-covered code also requires consent from every prior contributor. Confirm the downgrade is intentional and sign off on it before merge, especially given the x402/payment code in this repo.</comment>
<file context>
@@ -1,201 +1,21 @@
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+MIT License
+
+Copyright (c) 2026 WAVE / wave-av
</file context>
| } | ||
| }, | ||
| "variables": { | ||
| "WAVE_API_KEY": { |
There was a problem hiding this comment.
P2: The declared WAVE_API_KEY is never wired into the MCP server config, so the Bearer person-path auth documented in the README cannot work. Cursor's mcp.json only applies variables referenced in command/args/env/url/headers; the wave entry has no headers block referencing ${WAVE_API_KEY}. As a result, configured keys are silently dropped and calls fall through to the unauthenticated x402 path. Add an explicit header mapping to the server entry (and drop the unused variables block if it is not a supported key).
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At mcp.json, line 9:
<comment>The declared `WAVE_API_KEY` is never wired into the MCP server config, so the Bearer person-path auth documented in the README cannot work. Cursor's `mcp.json` only applies variables referenced in `command`/`args`/`env`/`url`/`headers`; the `wave` entry has no `headers` block referencing `${WAVE_API_KEY}`. As a result, configured keys are silently dropped and calls fall through to the unauthenticated x402 path. Add an explicit header mapping to the server entry (and drop the unused `variables` block if it is not a supported key).</comment>
<file context>
@@ -0,0 +1,15 @@
+ }
+ },
+ "variables": {
+ "WAVE_API_KEY": {
+ "description": "Optional person-path API key. When set, clients may send Authorization: Bearer <WAVE_API_KEY>. Not required for agent/x402 path.",
+ "required": false,
</file context>
| --- | ||
| name: wave-clips | ||
| description: use when creating, detecting, or managing WAVE clips / highlights | ||
| meters: [] |
There was a problem hiding this comment.
P3: The clips skill declares an empty meters: [] list while its body claims clips are metered through the gateway ("Meters re-enter gateway per PRODUCT-TRUTH"), and README.md maps clips to a gateway meter. Every other metered skill in this batch names its meter explicitly (wave_transcription_minutes, wave_caption_minutes, wave_render_minutes). As written, an agent selecting this skill gets no meter identifier to attribute usage against, so metering/attribution for clips could be dropped. Name the clips meter (e.g. wave_clip_minutes) or, if clips genuinely are unmetered, remove the metering claim from the body so the two don't contradict.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/wave-clips/SKILL.md, line 4:
<comment>The clips skill declares an empty `meters: []` list while its body claims clips are metered through the gateway ("Meters re-enter gateway per PRODUCT-TRUTH"), and README.md maps clips to a gateway meter. Every other metered skill in this batch names its meter explicitly (wave_transcription_minutes, wave_caption_minutes, wave_render_minutes). As written, an agent selecting this skill gets no meter identifier to attribute usage against, so metering/attribution for clips could be dropped. Name the clips meter (e.g. `wave_clip_minutes`) or, if clips genuinely are unmetered, remove the metering claim from the body so the two don't contradict.</comment>
<file context>
@@ -0,0 +1,13 @@
+---
+name: wave-clips
+description: use when creating, detecting, or managing WAVE clips / highlights
+meters: []
+endpoints:
+ - /v1/clips
</file context>
| meters: [] | |
| meters: [wave_clip_minutes] |
Summary
Test plan
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by Sourcery
Introduce the WAVE Cursor/Agent plugin scaffold for metered media operations through remote MCP with optional API-key and x402 payment paths.
New Features:
Enhancements:
Build:
Documentation:
Chores: