### Install Jam SDK Source: https://jam.dev/docs/debug-a-jam/devtools/custom-logs Install the Jam SDK using npm or yarn. This is the first step to enabling custom logs. ```bash npm install '@jam.dev/sdk' # or: yarn add '@jam.dev/sdk' ``` -------------------------------- ### Ask a Question via HTTP GET Source: https://jam.dev/docs/company/security-privacy-and-compliance Use this method to perform an HTTP GET request on the documentation index with the `ask` parameter to get a direct answer to a specific question. The question should be self-contained and in natural language. ```http GET https://jam.dev/docs/company/security-privacy-and-compliance-policy.md?ask= ``` -------------------------------- ### Install Jam Recorder and Capture Scripts Source: https://jam.dev/docs/administration/set-up-a-custom-recording-domain Paste this snippet into the `` tag of your site to initialize Jam's recorder and capture scripts. Ensure your Team ID is correctly set in the `jam:team` meta tag. This script should be installed on all pages or at least the URL that will host your recording route. ```html ``` -------------------------------- ### Ask a Question via GET Request Source: https://jam.dev/docs/docs Use this GET request to query the documentation index with a natural language question. The response includes a direct answer and relevant excerpts. ```http GET https://jam.dev/docs/debug-a-jam/devtools.md?ask= ``` -------------------------------- ### Intercom Fin Workflow Webhook Example Request Source: https://jam.dev/docs/request-a-jam/intercom-fin-ai This is an example JSON payload structure for configuring a webhook in Intercom Fin. Ensure 'event' and 'payload' fields are correctly set. ```json { "event": "some string", "payload": {} } ``` -------------------------------- ### Sample Webhook Payload for intercom.recorder.recorded Source: https://jam.dev/docs/integrations/webhooks This is an example of the data structure received when a customer records and submits their screen via Intercom. ```json { "id": "evt_12345", "type": "intercom.recorder.recorded", "created_at": "2025-09-09T12:00:00Z", "data": { "conversationId": "215470686832743", "jamId": "9573a43b-3ec9-49ab-b7e4-bf6cfc4bdfc", "recording_url": "https://jam.dev/r/rec_12345" } } ``` -------------------------------- ### Verify Domain URL Format Source: https://jam.dev/docs/administration/set-up-a-custom-recording-domain When verifying your domain in Jam's Recording Links settings, provide the URL where the Jam scripts are installed. This can be a root domain or a specific path. ```text example.com ``` ```text example.com/recorder ``` -------------------------------- ### Implement Product Feedback with Jam MCP Source: https://jam.dev/docs/debug-a-jam/mcp Use this prompt to have an AI create an implementation plan for product feedback recorded in a Jam. ```prompt I recorded product feedback in a Jam. Create an implementation plan for the changes requested in this Jam: ``` -------------------------------- ### Initialize SDK with Custom Blur Selectors Source: https://jam.dev/docs/request-a-jam/recording-links/auto-blur-sensitive-content-in-requested-jams Pass custom CSS selectors to the `initialize` function to define which elements should be blurred. This can be a single string, an array of strings, or a function that returns either. ```javascript import * as jam from "@jam.dev/recording-links/sdk"; // `blurSelectors` can be a static string: jam.initialize({ blurSelectors: ".my-custom-blur-class" }); // or an array of static strings jam.initialize({ blurSelectors: [".blur-class-1", ".blur-class-2"] }); // or a runtime function that evaluates to either of the above jam.initialize({ blurSelectors: () => `.my-${Math.ceil(Math.random() * 100)}-blur-class` }) ``` -------------------------------- ### Initialize Jam Metadata Source: https://jam.dev/docs/debug-a-jam/devtools/custom-logs Call `jam.metadata()` once in your app's root to set up a function that captures live debug data whenever a Jam is submitted. The provided function should return an object containing the metadata. ```javascript // In the root of your app, the place where // you would initialize your app's stores and // render React onto your root element import { jam } from "@jam.dev/sdk"; // We call the jam.metadata function once. // The function we pass into it is called whenever // a Jam is captured, so the data inside is always // live and never stale. jam.metadata(() => { return { userId: 5492, teamId: 'd3b59ce8-95f1-410c-bb5e-9dc598599336', timeSincePageLoad: performance.now(), a: { nested: ['object', 'or', 'array'] } // and any other debug data you'd need }); ``` -------------------------------- ### Configure Jam MCP for Cursor (HTTP/SSE) Source: https://jam.dev/docs/debug-a-jam/mcp Add Jam MCP server configuration to Cursor using the `>MCP: Add Server` command, selecting HTTP (Server-Sent Events). This method configures the server URL and type. ```json { "servers": { "Jam": { "url": "https://mcp.jam.dev/mcp", "type": "http" } } } ``` -------------------------------- ### Basic JamLog Usage in iOS Source: https://jam.dev/docs/record-a-jam/jam-for-ios/setting-up-logging-in-ios Import the Jam framework and use its logging functions like debug, info, warn, and error. ```swift import Jam Jam.debug("Hello world!") ``` -------------------------------- ### Configure Jam MCP for Cursor (SSE) Source: https://jam.dev/docs/debug-a-jam/mcp Add Jam MCP server configuration to Cursor using the `>MCP: Add Server` command, selecting HTTP (Server-Sent Events). This method configures the server URL and type. ```json { "mcp": { "servers": { "Jam": { "type": "http", "url": "https://mcp.jam.dev/mcp" } } } } ``` -------------------------------- ### Integrate JamLog with SwiftLog Source: https://jam.dev/docs/record-a-jam/jam-for-ios/setting-up-logging-in-ios Bootstrap the SwiftLog system to use JamLogHandler for sending logs to Jam.dev. ```swift import JamSwiftLog import Logging LoggingSystem.bootstrap { JamLogHandler(label: $0) } ``` -------------------------------- ### Configure Jam MCP Server in VS Code / Windsurf Source: https://jam.dev/docs/debug-a-jam/mcp/personal-access-tokens Add your PAT as a Bearer token to your `mcp.json` file for VS Code or Windsurf. This configuration specifies the Jam server's type, URL, and authorization headers. ```json { "servers": { "Jam": { "type": "http", "url": "https://mcp.jam.dev/mcp", "headers": { "Authorization": "Bearer jam_pat_..." } } } } ``` -------------------------------- ### Analyze Customer Jams for Issues Source: https://jam.dev/docs/debug-a-jam/mcp This prompt instructs an AI to analyze customer Jams, perform root-cause analysis, and organize findings into work packages, creating Linear tickets. ```prompt Analyze these Jams, perform root-cause analysis, and organize them into efficient work packages to minimize engineers’ context switching; create Linear tickets from the analysis. ``` -------------------------------- ### Configure privacy selectors with SDK Source: https://jam.dev/docs/request-a-jam/recording-links/auto-blur-sensitive-content-in-requested-jams Initialize the Jam.js SDK with the `blurSelectors` option to define which elements should be blurred. This method is suitable for dynamic configurations or when working within a JavaScript-heavy application. ```javascript jam.initialize({ blurSelectors: ".secret-stuff" }); ``` -------------------------------- ### Configure Jam MCP for Cursor (HTTP) Source: https://jam.dev/docs/debug-a-jam/mcp Manually add Jam MCP server configuration to Cursor by editing the `mcp.json` file. This method is for HTTP or Server-Sent Events connections. ```json { "mcpServers": { "jam": { "url": "https://mcp.jam.dev/mcp" } } } ``` -------------------------------- ### Enable Jam Blur on Custom Domain Source: https://jam.dev/docs/request-a-jam/recording-links Use the `data-jam-blur` attribute to explicitly control blur behavior for sensitive content when using Jam on your own domain. ```html
Sensitive content
``` -------------------------------- ### Debug Issues with Jam MCP Source: https://jam.dev/docs/debug-a-jam/mcp Use this prompt to have an AI analyze a Jam, cross-reference it with the codebase, and prepare an implementation plan for fixing issues. ```prompt Review this Jam and analyze the problem, cross-reference it with the existing codebase, and prepare a detailed plan for implementation. ``` -------------------------------- ### Add Jam MCP Server via CLI Source: https://jam.dev/docs/debug-a-jam/mcp Use the `claude mcp add` command to configure the Jam MCP server in your terminal. This command registers the Jam MCP endpoint for use with Claude. ```bash claude mcp add Jam https://mcp.jam.dev/mcp -t http -s user ``` -------------------------------- ### Configure Jam MCP for OpenCode Source: https://jam.dev/docs/debug-a-jam/mcp Configure Jam MCP for OpenCode by editing the `opencode.json` file. This specifies the remote type and URL for the Jam MCP service. ```json { "$schema": "https://opencode.ai/config.json", "mcp": { "jam": { "type": "remote", "url": "https://mcp.jam.dev/mcp" } } } ``` -------------------------------- ### Configure Jam MCP Server in Cursor Source: https://jam.dev/docs/debug-a-jam/mcp/personal-access-tokens Add your PAT as a Bearer token to the MCP configuration for Cursor. This JSON snippet defines the Jam server details, including the authorization header. ```json { "mcpServers": { "Jam": { "url": "https://mcp.jam.dev/mcp", "headers": { "Authorization": "Bearer jam_pat_..." } } } } ``` -------------------------------- ### Integrate JamLog with Existing SwiftLog Handlers Source: https://jam.dev/docs/record-a-jam/jam-for-ios/setting-up-logging-in-ios Use MultiplexLogHandler to combine JamLogHandler with existing SwiftLog handlers, such as StreamLogHandler. ```swift import JamSwiftLog import Logging LoggingSystem.bootstrap { MultiplexLogHandler([ StreamLogHandler.standardOutput(label: $0), JamLogHandler(label: $0) ]) } ``` -------------------------------- ### Configure Jam.js Blur Selectors with Meta Tags Source: https://jam.dev/docs/request-a-jam/recording-links/auto-blur-sensitive-content-in-requested-jams When embedding Jam.js via script tags, use `` tags in the HTML head to specify custom blur selectors. Multiple meta tags can be used, and selectors can be comma-separated. ```html ... ... ``` -------------------------------- ### Opt-in to blur content with data attribute Source: https://jam.dev/docs/request-a-jam/recording-links/auto-blur-sensitive-content-in-requested-jams Use the `data-jam-blur` attribute on an HTML element to specify that its content should be blurred during recording. ```html {ccNumber} ```