Jam

Read Jam bug reports with the console logs, network traces, and repro steps captured alongside them. Sign in with Jam to connect.

OAuthCode & CI34 tools
Tools

What Jam exposes.

Every tool below is one this server advertised the last time Omniio refreshed it, under the jam__ namespace. Your agent never loads them all — it searches, and gets the few that match.

34 tools
  • jam__addReaction3 arguments · 2 required

    React to a comment on a Jam — useful for acknowledging a comment you've already acted on. Works on anyone's comment, not just your own. Adding a reaction you already left is a no-op. Supported emoji: 🐛 (Buggy), 💜 (Love it), ✅ (Fixed), 👀 (Oooo), ❓ (Unclear), 👏 (Bravo), 🔥 (Fire), 👍 (Got it). This can notify the comment author by email and is visible wherever the comment is shared.

    RequiredcommentIdemoji

  • jam__analyzeVideo2 arguments · 1 required

    Analyze a video Jam to identify user goals, issues, and feedback, including visual observations, interactions, and technical indicators. If analysis is not yet available, try again later.

    RequiredjamId

  • jam__createComment4 arguments · 2 required

    Add a new comment to a Jam bug report. The comment body supports Markdown formatting. Use this to add notes, analysis results, or follow-up information to a Jam. This can notify other users by email, and the comment is visible to people who can access the Jam, including public viewers when sharing permits it.

    RequiredjamIdbody

  • jam__createFolder2 arguments · 1 required

    Create a folder in the team to organize Jams into. Returns the folder's id and shortId, so a follow-up updateJam call can file a Jam into it right away. Folder names are not unique — call listFolders first if you mean to reuse an existing folder rather than add another one with the same name. If your membership permits self-upgrade, this can promote you from Viewer to Creator, affect seat billing, and email team admins.

    Requiredname

  • jam__createRecordingLink8 arguments · 1 required

    Create a reusable recording link that lets anyone with the URL record and submit a new Jam. Optionally target a folder and set an expiration date. IMPORTANT — logs require a connected domain: a link only captures console and network logs when it starts recording from one of the team's connected domains (a recording URL). A link created with no recordingUrlId produces a generic recorder link that captures NO logs. Before creating, call listRecordingUrls and ask the user which connected domain to record from — don't guess. If the team has no connected domains, warn the user the link won't capture logs and point them to the dashboard to connect one (https://jam.dev/docs/custom-recording-domain) before creating a logs-less link. If your membership permits self-upgrade, this can promote you from Viewer to Creator, affect seat billing, and email team admins. It also emits a recording-link-created webhook event for configured subscribers.

    Requiredname

  • jam__deleteComment2 arguments · 1 required

    Delete a comment from a Jam, along with its attachments. Only the comment's own author can delete it, so in practice this removes a comment you posted through createComment. Destructive and not recoverable: confirm with the user before calling. Comment IDs come from createComment's result or from getDetails.

    RequiredcommentUid

  • jam__deleteFolder2 arguments · 1 required

    Delete a folder and every Jam inside it. The Jams leave the team's lists and search and nobody on the team can bring them back — the dashboard has no trash or archive view to restore them from. Returns how many Jams went with the folder, as `archivedJamCount`. Destructive and not recoverable: confirm with the user before calling, never tell them the Jams can be restored afterwards, and use listFolders first so they can see what the folder holds. Takes a folder ID or short ID from listFolders, never a folder name — a name could match the wrong folder.

    RequiredfolderId

  • jam__deleteJam2 arguments · 1 required

    Delete a Jam. It leaves the team's lists and search results, and nobody on the team can bring it back — the dashboard has no trash or archive view to restore it from. Destructive and not recoverable: confirm with the user before calling, and never tell them the Jam can be restored afterwards.

    RequiredjamId

  • jam__deleteRecordingLink2 arguments · 1 required

    Delete a recording link by its publicId, so it stops accepting new recordings. This is a soft delete: existing Jams recorded through it are untouched. Returns the publicId and the deletedAt timestamp. An unknown, already-deleted, or another team's publicId reads as not-found.

    RequiredpublicId

  • jam__editComment3 arguments · 2 required

    Rewrite a comment you previously left on a Jam, so an agent can correct or extend its own note instead of stacking a follow-up comment. Takes the comment ID returned by createComment. The new body replaces the old one entirely and is Markdown. You can only edit comments you authored. Changes are visible to people who can access the Jam, including public viewers when sharing permits it.

    RequiredcommentIdbody

  • jam__fetch2 arguments · 1 required

    Retrieve comprehensive metadata and details for a specific Jam bug report. Returns essential information including: unique identifiers, author details, description, timestamps (created/updated), type (video/screenshot), and associated metadata. This is the primary entry point for analyzing any Jam - always call this tool first to understand the context before using other tools.

    Requiredid

  • jam__getConsoleLogs5 arguments · 1 required

    Retrieve browser console output captured during the Jam session. Includes JavaScript errors, warnings, info messages, debug logs, and stack traces. The response is a JSON envelope. logLevel (an array — e.g. ['error','warn'] for problems) and limit apply server-side, and the envelope reports `total` matching logs — if you get fewer than `total`, narrow the filter or page with `after`. Critical for identifying runtime errors, debugging application state issues, and understanding the sequence of events leading to bugs.

    RequiredjamId

  • jam__getDetails2 arguments · 1 required

    Retrieve comprehensive metadata and details for a specific Jam bug report. Returns essential information including: unique identifiers, author details, description, timestamps (created/updated), type (video/screenshot), and associated metadata. This is the primary entry point for analyzing any Jam - always call this tool first to understand the context before using other tools.

    RequiredjamId

  • jam__getFrames8 arguments · 1 required

    Extract still frames (thumbnails) from a video Jam recording as images, so you can see what was on screen. Use exactly one mode. Set `overview: true` to get one overview grid: N frames evenly spaced across the whole video (N scales with duration), stitched into a single image with each cell labeled by timestamp — the fastest way to orient on a visual jam. Or specify `at` (a list of timestamps in milliseconds) or a window (`fromMs`, `toMs`, `count`) to sample evenly-spaced frames across a range; each is returned as an image preceded by a `t=<ms>` text anchor. Use `size` to trade detail for context budget (small=360p, medium=720p, large=1080p; not applied to the overview grid). Only works for video Jams whose recording is available on Cloudflare Stream; ineligible Jams return a single text block explaining why. Frames per call are capped at 30.

    RequiredjamId

  • jam__getMetadata2 arguments · 1 required

    Retrieve custom metadata set via the jam.metadata() SDK. Returns key-value pairs defined by the application developer, such as user IDs, app versions, feature flags, or any custom debugging context.

    RequiredjamId

  • jam__getNetworkRequests9 arguments · 1 required

    Extract network activity logs captured during the Jam session. Returns HTTP/HTTPS requests and WebSocket frames including: URLs, methods (GET/POST/etc), status codes, headers, payloads, response times, and error details. The response is a JSON envelope. Filters apply server-side — each is an array, values OR within a filter, filters AND across: statusCode (e.g. ['4xx','5xx'] for all failures), contentType, host, method (e.g. ['POST','PUT'] for mutations), plus limit and after (page cursor). The envelope reports `total` matching events (if you get fewer, narrow the filter or page with `after`), and by default carries response bodies only for FAILED requests: pass bodies:'all' when you need the payload of a request that succeeded but returned the wrong data (bodies truncated to 4KB, flagged per row). Essential for debugging API issues, failed requests, CORS problems, and performance bottlenecks.

    RequiredjamId

  • jam__getRecordingLink2 arguments · 1 required

    Get a single recording link by its publicId. Returns the link's name, type, target folder, expiration, and the number of Jams recorded through it (jamsCreated). Use listRecordingLinkJams to page through those Jams.

    RequiredpublicId

  • jam__getRecordingUrlVerifyLink2 arguments · 1 required

    Start verifying a connected domain (recording URL) so recorded Jams from it capture console and network logs. Returns a verifyUrl a HUMAN must open in a browser where the Jam extension or snippet is live on that domain — the recorder there confirms Jam is present and marks the domain verified. This tool does NOT verify the domain itself; it only hands back the link. After the user opens it, poll listRecordingUrls until the domain shows verified: true (the link expires in 5 minutes). Use this instead of sending the user to the dashboard to connect a domain.

    Requiredurl

  • jam__getScreenshots2 arguments · 1 required

    Retrieve visual screenshots and image attachments from screenshot-type Jams. Returns image data that can be analyzed for UI issues, visual bugs, layout problems, or design inconsistencies. Note: This tool only works with Jams of type 'screenshot' - use getDetails first to verify Jam type.

    RequiredjamId

  • jam__getUserEvents4 arguments · 1 required

    Access the complete timeline of user interactions captured in the Jam. Returns chronological sequence of: clicks, keyboard inputs, form submissions, navigation events, scroll actions, and other DOM interactions. The full timeline is returned by default and is small enough to read whole — pass limit only to cap the output, and page with `after` if a capped response reports a `nextCursor`. Invaluable for reproducing bugs and understanding user behavior patterns that triggered issues.

    RequiredjamId

  • jam__getVideoChapters2 arguments · 1 required

    Retrieve AI-generated chapters for a video Jam recording: titled segments with start/end timestamps outlining the recording's timeline. Returns { status, chapters, language }; chapters is null unless status is "ready". Chapters are text only — each is { startMs, endMs, title }. To see what a chapter looked like on screen, call getFrames with `at` set to a timestamp inside the chapter's span; the midpoint reads best, because chapter starts are usually transition frames. Status "not_requested" means chapter generation was never queued for this jam; "skipped" means the video was too short to segment.

    RequiredjamId

  • jam__getVideoTranscript2 arguments · 1 required

    Retrieve the speech transcript (captions) from a video Jam recording in WebVTT format with timestamps. Only available for video Jams where the microphone was enabled during recording. Use this to understand what the user said while recording the bug report.

    RequiredjamId

  • jam__listFolders5 arguments

    List folders in the team with optional search and pagination. Returns folder metadata including name, short ID, Jam count, and timestamps. Use this to discover available folders for organizing Jams.

  • jam__listJams11 arguments

    List Jam bug reports with filtering and pagination. Search by text, filter by type (video/screenshot/replay), origin (capture surface), folder, author, URL, or creation date. Returns Jam metadata including title, origin, author, folder, and timestamps. Each returned Jam carries a url, the share link to hand back to the user unchanged: it carries search attribution. Use this to find specific Jams or browse the team's bug reports. Filter by origin instead of calling getDetails per Jam when ranking or counting by capture surface.

  • jam__listMembers4 arguments

    List team members with optional search and pagination. Returns user metadata including name, email, and role. Use this to find users for filtering Jams by author.

  • jam__listRecordingLinkJams4 arguments · 1 required

    List the Jams recorded through a recording link, addressed by the link's publicId. Returns each Jam's id, title, and createdAt (newest first), plus cursor pagination. Pass `cursor` (a jam id from a prior `endCursor`) to fetch the next page; `hasNextPage` indicates whether more remain.

    RequiredpublicId

  • jam__listRecordingLinks4 arguments

    List the team's recording links, newest first, with cursor pagination. Returns each link's publicId, name, and type. Pass `cursor` (a publicId from a prior `endCursor`) to fetch the next page; `hasNextPage` indicates whether more remain. Revoked links are excluded unless `includeRevoked` is true.

  • jam__listRecordingUrls1 argument

    List the team's connected domains (recording URLs) — the domains a recording link can start from so recorded Jams capture console and network logs. Returns each domain's id, url, and verified state. Use this before createRecordingLink to pick the recordingUrlId to record from, and to tell whether the team has any connected domains at all. Only a verified domain captures logs; an unverified one must be verified from the dashboard first (https://jam.dev/docs/custom-recording-domain). An empty list means the team has no connected domains, so any link created now captures no logs.

  • jam__removeReaction3 arguments · 2 required

    Take back a reaction you left on a comment. Only removes your own reaction; other people's reactions with the same emoji are untouched. Removing a reaction you never left is a no-op. Supported emoji: 🐛 (Buggy), 💜 (Love it), ✅ (Fixed), 👀 (Oooo), ❓ (Unclear), 👏 (Bravo), 🔥 (Fire), 👍 (Got it). Changes are visible to people who can access the Jam, including public viewers when sharing permits it.

    RequiredcommentIdemoji

  • jam__search2 arguments · 1 required

    Find a video Jam in the connected team by extracting its UUID from a query string, jam.dev URL, or pasted text. Returns at most one result. Does not search titles or return screenshot or replay Jams; use listJams for text search and other Jam types.

    Requiredquery

  • jam__submitFeedback4 arguments · 1 required

    Send feedback about a Jam surface to the Jam team, which files it as an issue for triage. Use it when a Jam MCP tool, CLI command, doc page, or skill was wrong, stale, confusing, or missing something — and when one worked unusually well. Show the user the exact text and get their approval before calling: this reaches a human, and an unapproved or duplicate report wastes their time. Send at most one per session, and never for a slip you corrected yourself. Keep the body under 200 words and specific enough to act on: what you were doing, what you expected, what happened, and the mistake. Never include secrets, customer data, source code, or stack traces — describe code rather than pasting it.

    Requiredbody

  • jam__updateFolder3 arguments · 2 required

    Rename a folder. Identify the folder by name, folder ID, or folder short ID. Renaming does not move any Jams — use updateJam for that. An unknown folder, or one belonging to another team, reads as not-found.

    Requiredfoldername

  • jam__updateJam5 arguments · 1 required

    Update a Jam bug report: rename it, rewrite its description, or move it between folders. Every field is optional — only the ones you pass are changed. Use folder name, folder ID, folder short ID, or "root" to move to the root level. Editing the title or description requires an Admin or Creator role.

    RequiredjamId

  • jam__updateRecordingLink8 arguments · 1 required

    Update a recording link by its publicId. Only the fields you pass are changed. Use it to rename the link, change the destination folder for future recordings, set the default Jam title, change the reference, set an expiration, or replace the metadata. Unknown or other-team links return not-found; revoked links cannot be edited. Existing Jams are not moved.

    RequiredpublicId

Connecting

Three steps, and the last one is not yours.

01

Point a client at Omniio

One URL, authorized once by your client. If you already use Omniio, this step is done.

02

Switch Jam on

Authorize it from your library; the grant is yours and stays yours.

03

Ask for what you need

The agent searches, reads the one schema it picked, and runs it. You do not name the tool.

claude code
claude mcp add --transport http omniio https://mcp.omniio.dev
Code & CI

Others in the same category.

They share the endpoint, so having more than one on costs you nothing in context — the search decides which is relevant.

Browse the whole library