Developer docs

MCP reference.

Wire ClipCabinet into any MCP-aware client. Bearer auth, seven tools, JSON responses, no surprises.

Setup

Paste this into the MCP config file for your client. The exact path depends on the client (Claude Code reads .mcp.json in your project root; Claude Desktop has its own config file). Mint a token at /settings/tokens.

.mcp.json
{
  "mcpServers": {
    "clipcabinet": {
      "type": "http",
      "url": "https://mcp.clipcabinet.com/mcp",
      "headers": {
        "Authorization": "Bearer kg_xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Authentication

Bearer token in the Authorization header. Tokens are SHA-256 hashed at rest; we never store the plaintext after you copy it once. Each token authenticates as the user who minted it. Tokens never expire and have no scopes today. Revoke from /settings/tokens.

Tools

Seven tools cover the surface of your clip library. All responses are JSON; media URLs are 1-hour signed.

list_recordings

Recent clips for the authenticated user, newest first.

Parameters
limit
integer, 1-100, default 20
since
ISO-8601 timestamp, optional
kind
"video" | "screenshot", optional
Example
{ "limit": 5, "kind": "video" }
search_recordings

Semantic search across the user's clips. Vector cosine over title + summary embeddings.

Parameters
query
string, required
limit
integer, 1-50, default 10
kind
"video" | "screenshot", optional
Example
{ "query": "figma alignment bug", "limit": 5 }
get_recording

Full clip detail: transcript, frames with captions, artifacts, plus signed URLs for video, audio, image, contextImage.

Parameters
id
string, recording id
Example
{ "id": "cmokuzps0000355mi4lufpkqa" }
search_within_recording

Semantic search inside one clip's transcript turns and frame captions.

Parameters
id
string, recording id
query
string, required
limit
integer, 1-50, default 10
Example
{ "id": "cmokuzps...", "query": "what was the error" }
get_frame

The frame closest to the given timestamp, with caption and signed URL.

Parameters
recordingId
string
timestampMs
integer, milliseconds
Example
{ "recordingId": "cmokuzps...", "timestampMs": 134500 }
get_audio_clip

Extract a slice of audio between two timestamps. Returns a signed URL, or an `audio_unavailable` error for screenshot clips.

Parameters
recordingId
string
startMs
integer
endMs
integer, must exceed startMs
Example
{ "recordingId": "cmokuzps...", "startMs": 130000, "endMs": 140000 }
list_artifacts

Every URL, error message, code snippet, file path, or ticket id extracted across the user's clips.

Parameters
kind
filter by artifact kind, optional
since
ISO-8601 timestamp, optional
limit
integer, 1-200, default 50
Example
{ "kind": "url", "limit": 20 }

Sample tool call

What the agent does when you ask it about a clip:

Sample dialogue
> what was the error I hit at the end of the figma walkthrough?

↳ At [2:14] you opened the Inspector and saw:
   "Cannot read properties of undefined (reading 'fills')"
   It came after you tried to copy a layer style from a hidden frame.
   Source: recording figma-layout-debug, artifact #3.

Troubleshooting

  • 401 unauthorized. Token missing, mistyped, or revoked. Check that the token starts with kg_.
  • No clips returned. The clip might still be processing. Status of processing means transcripts and embeddings aren't ready yet.
  • audio_unavailable. You called get_audio_clip against a screenshot clip. Use get_recording to read the image URL instead.