{"type":"agent-native.clip.context","version":2,"webmcp":{"protocol":"WebMCP","scope":"page-local","tools":[{"name":"clips-get-context","title":"Get clip context","description":"Read clip metadata, readiness, transcript status, and the HTTP API URLs. This works without a browser.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true}},{"name":"clips-get-transcript","title":"Get clip transcript","description":"Read bounded timestamped transcript segments. Use nextStartIndex to page through long transcripts without losing overlapping segments. For complete transcript text, follow sourceUrl to the HTTP transcript endpoint.","inputSchema":{"type":"object","properties":{"startMs":{"type":"number","minimum":0,"description":"Only return segments that overlap this start time."},"endMs":{"type":"number","minimum":0,"description":"Only return segments that overlap this end time."},"startIndex":{"type":"integer","minimum":0,"description":"Stable segment index for pagination; prefer nextStartIndex from the previous page."},"maxSegments":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of transcript segments to return."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true}},{"name":"clips-get-frame","title":"Get clip frame","description":"Get the clip's JPEG frame URL at a requested timestamp. Fetch the returned imageUrl as an image to inspect the video; its scoped access query is already included. On an error, inspect the JSON failureKind and nextStep: access needs a Share with agents link, media means the stored recording media could not be retrieved, processing means the frame request failed and may be retried or reported, unsupported means this source cannot provide frames through Clips and must not be retried, and expired means the owner must update the clip expiry before creating another link.","inputSchema":{"type":"object","properties":{"atMs":{"type":"number","minimum":0,"description":"Video timestamp in milliseconds; fetch the returned imageUrl as an image to inspect the frame."}},"required":["atMs"],"additionalProperties":false},"availability":"ready","annotations":{"readOnlyHint":true,"untrustedContentHint":true}}],"instructions":"For browser-independent access from any HTTP client, fetch the exact agentContextUrl and use its apis.context, apis.transcript, and apis.frame URLs. Keep the clip id and any agent_access query parameter exactly as provided on every request. Read the complete transcript from apis.transcript and fetch recommendedFrames[].url (or apis.frame.urlTemplate with atMs) as images to inspect the video. Do not stop at the transcript when frames are available. For any non-2xx response, inspect the JSON failureKind, error, and nextStep. If a context or transcript request has failureKind=access, explain that this link does not grant access; for a private clip, ask its owner to open the Clips Share menu, choose Share with agents, and send the generated link. If a frame request has failureKind=media while the context or transcript still works, explain that the stored recording media could not be retrieved and another share link will not fix it. If a frame request has failureKind=processing, follow nextStep; extraction or temporary storage failures do not mean the clip is missing or inaccessible. If a request has failureKind=expired, ask the owner to extend or remove the clip's expiry in the Share menu, save it, then create and send a new Share with agents link. If this clip page is already open in a WebMCP-capable browser, list its page tools for bounded read-only access; clips-get-transcript may omit fullText or return a truncated result, and its sourceUrl points to the HTTP transcript. Use nextStartIndex for transcript pagination so overlapping segments are not lost.","http":{"schema_version":"v1","browserRequired":false,"tools":[{"name":"clips-get-context","title":"Get clip context","description":"Read clip metadata, readiness, transcript status, and the HTTP API URLs. This works without a browser.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"parameters":{"type":"object","properties":{},"additionalProperties":false},"endpoint":"https://clips.agent-native.com/api/agent-context.json?id=A3fWy4lLi4dJ","method":"GET","responseType":"application/json"},{"name":"clips-get-transcript","title":"Get clip transcript","description":"Read bounded timestamped transcript segments. Use nextStartIndex to page through long transcripts without losing overlapping segments. For complete transcript text, follow sourceUrl to the HTTP transcript endpoint.","inputSchema":{"type":"object","properties":{"startMs":{"type":"number","minimum":0,"description":"Only return segments that overlap this start time."},"endMs":{"type":"number","minimum":0,"description":"Only return segments that overlap this end time."},"startIndex":{"type":"integer","minimum":0,"description":"Stable segment index for pagination; prefer nextStartIndex from the previous page."},"maxSegments":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of transcript segments to return."}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"parameters":{"type":"object","properties":{"startMs":{"type":"number","minimum":0,"description":"Only return segments that overlap this start time."},"endMs":{"type":"number","minimum":0,"description":"Only return segments that overlap this end time."},"startIndex":{"type":"integer","minimum":0,"description":"Stable segment index for pagination; prefer nextStartIndex from the previous page."},"maxSegments":{"type":"integer","minimum":1,"maximum":50,"description":"Maximum number of transcript segments to return."}},"additionalProperties":false},"endpoint":"https://clips.agent-native.com/api/agent-transcript.json?id=A3fWy4lLi4dJ","method":"GET","responseType":"application/json"},{"name":"clips-get-frame","title":"Get clip frame","description":"Get the clip's JPEG frame URL at a requested timestamp. Fetch the returned imageUrl as an image to inspect the video; its scoped access query is already included. On an error, inspect the JSON failureKind and nextStep: access needs a Share with agents link, media means the stored recording media could not be retrieved, processing means the frame request failed and may be retried or reported, unsupported means this source cannot provide frames through Clips and must not be retried, and expired means the owner must update the clip expiry before creating another link.","inputSchema":{"type":"object","properties":{"atMs":{"type":"number","minimum":0,"description":"Video timestamp in milliseconds; fetch the returned imageUrl as an image to inspect the frame."}},"required":["atMs"],"additionalProperties":false},"availability":"ready","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"parameters":{"type":"object","properties":{"atMs":{"type":"number","minimum":0,"description":"Video timestamp in milliseconds; fetch the returned imageUrl as an image to inspect the frame."}},"required":["atMs"],"additionalProperties":false},"endpoint":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs={atMs}","method":"GET","responseType":"image/jpeg"}]}},"instructions":["Use transcript.segments for timestamped spoken context.","Use the HTTP URLs in apis for browser-independent access. For complete transcript text, use apis.transcript. If this clip page is already open in a WebMCP-capable browser, list its read-only page tools for bounded access; WebMCP transcript results may omit fullText or be truncated, so follow sourceUrl for the complete transcript.","Keep the exact id and any agent_access query parameter from each supplied URL. When a frame request returns JSON, read failureKind, error, and nextStep. If failureKind=access, explain that the link does not grant access; for a private clip, ask the owner to open the Clips Share menu, choose Share with agents, and send the generated link. If failureKind=media, explain that the stored media could not be retrieved and another share link will not fix it. If failureKind=processing, follow nextStep. When clip.agentReadiness.state is preparing, wait clip.agentReadiness.retryAfterSeconds and fetch apis.context.url before retrying; do not treat the frame as missing media. If failureKind=expired, ask the owner to extend or remove the clip's expiry in the Share menu, save it, then create and send a new Share with agents link. Report the failing frame URL without its agent_access value.","This clip is readable as both text (transcript) and images (JPEG frames) — you can hear AND see it.","To SEE the screen, GET apis.frame.urlTemplate with atMs (returns image/jpeg). Start with recommendedFrames, then fetch additional frames around transcript timestamps that matter for the task."],"clip":{"id":"A3fWy4lLi4dJ","title":"[ENG-13439]: Fix Boolean Targeting in Builder Studio","description":"Builder Studio incorrectly treats a Boolean targeting attribute such as `is logged in = false` as the string `\"false\"`, so the target condition does not match and the content remains hidden. Local SDK changes fix the type handling: the content appears when `is logged in` is false and disappears when it is true.","publicPageUrl":"https://clips.agent-native.com/share/A3fWy4lLi4dJ","sourceProvider":null,"thumbnailUrl":"https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F704dd67b9e454f43a31178056dda00fb","animatedThumbnailUrl":null,"durationMs":125590,"duration":"126s","width":1280,"height":830,"hasAudio":true,"hasCamera":false,"status":"ready","agentReadiness":{"state":"ready","retryAfterSeconds":null,"instruction":null},"createdAt":"2026-09-01T10:49:30.927Z","updatedAt":"2026-09-01T10:55:41.704Z"},"apis":{"context":{"method":"GET","url":"https://clips.agent-native.com/api/agent-context.json?id=A3fWy4lLi4dJ"},"transcript":{"method":"GET","url":"https://clips.agent-native.com/api/agent-transcript.json?id=A3fWy4lLi4dJ"},"frame":{"method":"GET","urlTemplate":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs={timestampMs}","responseType":"image/jpeg","query":{"atMs":"Video timestamp in milliseconds. The endpoint returns image/jpeg."}}},"transcript":{"status":"ready","language":"en","failureReason":null,"retryAfterSeconds":null,"fullText":"Me: yeah so this is an issue with respect to the studio that we have builder studio and\n\nMe: a Boolean target in attribute. So here I have this page called Replace Studio for which I've added this type of targeting attribute. This is logged in is a custom attribute which is a Boolean type and what will happen is I want to see this page when the is logged in is false and the URL But this is so that you can see the results.\n\nMe: time I should see this content. But when I go to studio here I have it already and if you see here I have this you can ignore. I have logged in equal to false attribute based on which\n\nMe: we are making changes in the app.tsl6 of my local project that I have.\n\nMe: Yeah, that is not important. Main thing is here. When I now, actually this is false currently. So when it is false, it should have shown me the content. But it is currently not showing that content here. See if I toggle this also, there is no change that happens. Because it, what the main issue is that it's taking this and considering it as a string.\n\nMe: So even if it is false, it's a string false and because it's a string false, it assumes that it has a value and then it doesn't show the content.\n\nMe: And now this is a fix. I'm just connected to my local SDK changes and you can see now when the is logged in is off. You can see the content and when I turn it on, the content goes away as expected. Thank you.","segments":[{"startMs":0,"endMs":3739,"timestamp":"0:00","range":"0:00-0:03","text":"yeah so this is an issue with","source":"mic"},{"startMs":3739,"endMs":7478,"timestamp":"0:03","range":"0:03-0:07","text":"respect to the studio that we have","source":"mic"},{"startMs":7478,"endMs":9080,"timestamp":"0:07","range":"0:07-0:09","text":"builder studio and","source":"mic"},{"startMs":8467,"endMs":10773,"timestamp":"0:08","range":"0:08-0:10","text":"a Boolean target in attribute.","source":"mic"},{"startMs":10773,"endMs":14001,"timestamp":"0:10","range":"0:10-0:14","text":"So here I have this page called","source":"mic"},{"startMs":14001,"endMs":16307,"timestamp":"0:14","range":"0:14-0:16","text":"Replace Studio for which I've","source":"mic"},{"startMs":16307,"endMs":18680,"timestamp":"0:16","range":"0:16-0:18","text":"added this type of targeting attribute.","source":"mic"},{"startMs":18680,"endMs":21449,"timestamp":"0:18","range":"0:18-0:21","text":"This is logged in is a custom","source":"mic"},{"startMs":21449,"endMs":23427,"timestamp":"0:21","range":"0:21-0:23","text":"attribute which is a Boolean","source":"mic"},{"startMs":23427,"endMs":26202,"timestamp":"0:23","range":"0:23-0:26","text":"type and what will happen is I","source":"mic"},{"startMs":26202,"endMs":28977,"timestamp":"0:26","range":"0:26-0:28","text":"want to see this page when the","source":"mic"},{"startMs":28977,"endMs":31752,"timestamp":"0:28","range":"0:28-0:31","text":"is logged in is false and the","source":"mic"},{"startMs":31752,"endMs":32147,"timestamp":"0:31","range":"0:31-0:32","text":"URL","source":"mic"},{"startMs":32147,"endMs":33547,"timestamp":"0:32","range":"0:32-0:33","text":"But this is so that you can","source":"mic"},{"startMs":33547,"endMs":34147,"timestamp":"0:33","range":"0:33-0:34","text":"see the results.","source":"mic"},{"startMs":33529,"endMs":36127,"timestamp":"0:33","range":"0:33-0:36","text":"time I should see this content.","source":"mic"},{"startMs":36127,"endMs":39158,"timestamp":"0:36","range":"0:36-0:39","text":"But when I go to studio here","source":"mic"},{"startMs":39158,"endMs":42189,"timestamp":"0:39","range":"0:39-0:42","text":"I have it already and if you","source":"mic"},{"startMs":42189,"endMs":46000,"timestamp":"0:42","range":"0:42-0:46","text":"see here I have this you can","source":"mic"},{"startMs":46000,"endMs":49811,"timestamp":"0:46","range":"0:46-0:49","text":"ignore. I have logged in equal to","source":"mic"},{"startMs":49811,"endMs":51989,"timestamp":"0:49","range":"0:49-0:51","text":"false attribute based on","source":"mic"},{"startMs":51989,"endMs":52389,"timestamp":"0:51","range":"0:51-0:52","text":"which","source":"mic"},{"startMs":54379,"endMs":59179,"timestamp":"0:54","range":"0:54-0:59","text":"we are making changes in the app.tsl6","source":"mic"},{"startMs":59179,"endMs":63979,"timestamp":"0:59","range":"0:59-1:03","text":"of my local project that I have.","source":"mic"},{"startMs":65651,"endMs":67651,"timestamp":"1:05","range":"1:05-1:07","text":"Yeah, that is not important.","source":"mic"},{"startMs":67651,"endMs":69151,"timestamp":"1:07","range":"1:07-1:09","text":"Main thing is here.","source":"mic"},{"startMs":69151,"endMs":70314,"timestamp":"1:09","range":"1:09-1:10","text":"When I now,","source":"mic"},{"startMs":70314,"endMs":72251,"timestamp":"1:10","range":"1:10-1:12","text":"actually this is false currently.","source":"mic"},{"startMs":72251,"endMs":73584,"timestamp":"1:12","range":"1:12-1:13","text":"So when it is false,","source":"mic"},{"startMs":73584,"endMs":75451,"timestamp":"1:13","range":"1:13-1:15","text":"it should have shown me the content.","source":"mic"},{"startMs":75451,"endMs":77784,"timestamp":"1:15","range":"1:15-1:17","text":"But it is currently not showing that","source":"mic"},{"startMs":77784,"endMs":78451,"timestamp":"1:17","range":"1:17-1:18","text":"content here.","source":"mic"},{"startMs":78451,"endMs":80951,"timestamp":"1:18","range":"1:18-1:20","text":"See if I toggle this also,","source":"mic"},{"startMs":80951,"endMs":83451,"timestamp":"1:20","range":"1:20-1:23","text":"there is no change that happens.","source":"mic"},{"startMs":83451,"endMs":86760,"timestamp":"1:23","range":"1:23-1:26","text":"Because it, what the main issue is","source":"mic"},{"startMs":86760,"endMs":88651,"timestamp":"1:26","range":"1:26-1:28","text":"that it's taking this","source":"mic"},{"startMs":88651,"endMs":90651,"timestamp":"1:28","range":"1:28-1:30","text":"and considering it as a string.","source":"mic"},{"startMs":90680,"endMs":93013,"timestamp":"1:30","range":"1:30-1:33","text":"So even if it is false,","source":"mic"},{"startMs":93013,"endMs":95735,"timestamp":"1:33","range":"1:33-1:35","text":"it's a string false and because it's","source":"mic"},{"startMs":95735,"endMs":96902,"timestamp":"1:35","range":"1:35-1:36","text":"a string false,","source":"mic"},{"startMs":96902,"endMs":97680,"timestamp":"1:36","range":"1:36-1:37","text":"it assumes","source":"mic"},{"startMs":97680,"endMs":100597,"timestamp":"1:37","range":"1:37-1:40","text":"that it has a value and then","source":"mic"},{"startMs":100597,"endMs":102680,"timestamp":"1:40","range":"1:40-1:42","text":"it doesn't show the content.","source":"mic"},{"startMs":0,"endMs":2308,"timestamp":"0:00","range":"0:00-0:02","text":"And now this is a fix.","source":"mic"},{"startMs":2308,"endMs":5000,"timestamp":"0:02","range":"0:02-0:05","text":"I'm just connected to my local SDK","source":"mic"},{"startMs":5000,"endMs":7692,"timestamp":"0:05","range":"0:05-0:07","text":"changes and you can see now when","source":"mic"},{"startMs":7692,"endMs":10000,"timestamp":"0:07","range":"0:07-0:10","text":"the is logged in is off.","source":"mic"},{"startMs":10000,"endMs":13684,"timestamp":"0:10","range":"0:10-0:13","text":"You can see the content and when","source":"mic"},{"startMs":13684,"endMs":15789,"timestamp":"0:13","range":"0:13-0:15","text":"I turn it on,","source":"mic"},{"startMs":15789,"endMs":18947,"timestamp":"0:15","range":"0:15-0:18","text":"the content goes away as expected.","source":"mic"},{"startMs":18947,"endMs":20000,"timestamp":"0:18","range":"0:18-0:20","text":"Thank you.","source":"mic"}],"segmentCount":51},"comments":[],"commentCount":0,"commentsTruncated":false,"reactions":[],"reactionCount":0,"reactionsTruncated":false,"chapters":[],"recommendedFrames":[{"atMs":0,"timestamp":"0:00","reason":"opening frame","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=0"},{"atMs":3739,"timestamp":"0:03","reason":"transcript: respect to the studio that we have","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=3739"},{"atMs":7478,"timestamp":"0:07","reason":"transcript: builder studio and","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=7478"},{"atMs":10773,"timestamp":"0:10","reason":"transcript: So here I have this page called","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=10773"},{"atMs":14001,"timestamp":"0:14","reason":"transcript: Replace Studio for which I've","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=14001"},{"atMs":18680,"timestamp":"0:18","reason":"transcript: This is logged in is a custom","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=18680"},{"atMs":23427,"timestamp":"0:23","reason":"transcript: type and what will happen is I","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=23427"},{"atMs":28977,"timestamp":"0:28","reason":"transcript: is logged in is false and the","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=28977"},{"atMs":32147,"timestamp":"0:32","reason":"transcript: But this is so that you can","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=32147"},{"atMs":36127,"timestamp":"0:36","reason":"transcript: But when I go to studio here","url":"https://clips.agent-native.com/api/agent-frame.jpg?id=A3fWy4lLi4dJ&atMs=36127"}],"bugReport":null,"browserDiagnostics":null,"ctas":[]}