Agent skill
jam
Jam.dev API for bug reporting. Use when user mentions "Jam", "bug report", "screen recording", or asks about issue capture.
Install this agent skill to your Project
npx add-skill https://github.com/vm0-ai/vm0-skills/tree/main/jam
SKILL.md
Jam
Use the Jam API to access bug reports, debugging telemetry, console logs, network requests, and user events captured by the Jam browser extension.
Official docs:
https://jam.dev/docs/debug-a-jam/mcp
When to Use
Use this skill when you need to:
- Retrieve bug report details including metadata, reporters, and context
- Access console logs with error messages and stack traces from recorded sessions
- Inspect network requests to debug API failures, slow responses, or HTTP errors
- Review user events such as clicks, inputs, and page navigations
- Get screenshots from recorded bug reports for visual inspection
- Analyze video recordings to extract insights and detect issues
- List and search Jams across your workspace by text, type, folder, author, URL, or date
- Add comments to Jam recordings for collaboration
Prerequisites
- Sign up at Jam and install the browser extension
- Go to Settings > Integrations > AI Agents in your Jam workspace
- Click Create token, specify a name, choose an expiration window (7 days to 1 year), and select scopes:
- mcp:read - View Jam details, logs, events, and network activity
- mcp:write - Move Jams between folders and add comments
- Copy the token immediately (it is only shown once)
Token format: jam_pat_<random-characters>
export JAM_TOKEN="jam_pat_your-token-here"
How to Use
Jam exposes its API through an MCP (Model Context Protocol) server at https://mcp.jam.dev/mcp. All interactions use JSON-RPC 2.0 over HTTP with Bearer token authentication. You need to initialize the MCP session first, then call tools.
Base URL
- MCP endpoint:
https://mcp.jam.dev/mcp
1. Initialize MCP Session
Start an MCP session to get a session URL for subsequent requests.
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"vm0","version":"1.0.0"}}}' -D /tmp/jam_headers.txt | jq .
After initialization, check the response headers for the Mcp-Session-Id or use the session URL from the response. Save the session URL for subsequent calls:
SESSION_URL=$(grep -i "location:" /tmp/jam_headers.txt | tr -d '\r' | awk '{print $2}')
If no redirect location is returned, use the same endpoint with the session ID from the response headers.
2. List Available Tools
Discover all available MCP tools.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq '.result.tools[] | {name, description}'
3. List Jams
Search and filter Jams in your workspace.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "listJams",
"arguments": {}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
Filter by text, type, folder, author, URL, or date:
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "listJams",
"arguments": {
"text": "login bug",
"type": "recording"
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
4. Get Jam Details
Get a quick snapshot of a Jam including who made it, what happened, and which tools to try next. Replace JAM_ID with the actual Jam identifier (the URL slug or ID from listJams).
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "getDetails",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID"
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
5. Get Console Logs
Retrieve console logs from a Jam session, filtered by log level and count.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "getConsoleLogs",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID",
"logLevel": "error",
"limit": 50
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
Available logLevel values: error, warn, info, log, debug.
6. Get Network Requests
List all HTTP requests captured during the Jam recording, with optional filters.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 6,
"method": "tools/call",
"params": {
"name": "getNetworkRequests",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID",
"statusCode": 500,
"limit": 20
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
Filter parameters: statusCode (HTTP status code), contentType (e.g., application/json), host (e.g., api.example.com), limit (max results).
7. Get User Events
Read user interactions including clicks, inputs, and page navigations in plain language.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 7,
"method": "tools/call",
"params": {
"name": "getUserEvents",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID"
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
8. Get Screenshots
Extract screenshots from screenshot-type Jams for visual inspection.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 8,
"method": "tools/call",
"params": {
"name": "getScreenshot",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID"
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
9. Get Video Transcript
Retrieve spoken captions from video Jams in WebVTT format with timestamps.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 9,
"method": "tools/call",
"params": {
"name": "getVideoTranscript",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID"
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
10. Analyze Video
Use AI-powered analysis on Jam video recordings to extract insights, detect issues, and get structured feedback.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "analyzeVideo",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID"
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
11. Get Custom Metadata
Access custom key-value metadata set via the jam.metadata() SDK in your application.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "getMetadata",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID"
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
12. List Folders
Browse available folders in your Jam workspace.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 12,
"method": "tools/call",
"params": {
"name": "listFolders",
"arguments": {}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
13. List Team Members
Browse team members in your Jam workspace.
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 13,
"method": "tools/call",
"params": {
"name": "listMembers",
"arguments": {}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
14. Add a Comment
Add a Markdown comment to a Jam recording (requires mcp:write scope).
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 14,
"method": "tools/call",
"params": {
"name": "createComment",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID",
"comment": "Investigated this issue - the root cause is a race condition in the auth middleware."
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
15. Move a Jam to a Folder
Move a Jam to a different folder (requires mcp:write scope).
Write to /tmp/jam_request.json:
{
"jsonrpc": "2.0",
"id": 15,
"method": "tools/call",
"params": {
"name": "updateJam",
"arguments": {
"jamUrl": "https://jam.dev/c/JAM_ID",
"folder": "Triaged Bugs"
}
}
}
Then run:
curl -s -X POST "https://mcp.jam.dev/mcp" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv JAM_TOKEN)" -d @/tmp/jam_request.json | jq .
Guidelines
- Initialize first: Always initialize an MCP session before calling tools. The session persists across multiple tool calls
- Use temp files for JSON: Write JSON payloads to
/tmp/jam_request.jsonto avoid shell quoting issues with nested JSON - Token scopes matter:
mcp:readis sufficient for read operations (getDetails, getConsoleLogs, etc.). Usemcp:writeonly when you need to create comments or move Jams - Token expiration: PATs have mandatory expiration dates (7 days to 1 year). Plan for token rotation
- Jam URLs: Most tools require a
jamUrlparameter. Use the full URL formathttps://jam.dev/c/JAM_ID - Debugging workflow: Start with
getDetailsfor an overview, then usegetConsoleLogs(filter byerror),getNetworkRequests(filter by 4xx/5xx status codes), andgetUserEventsto build a complete picture - Rate limits: Jam enforces rate limits on their API. If you receive HTTP 429 responses, implement backoff
- MCP protocol: All requests use JSON-RPC 2.0 format with
method: "tools/call"and tool-specific arguments
Didn't find tool you were looking for?