Skip to main content
Glama

Server Details

Jam recordings (video, console, network) as context and proof of work for your coding agent.

Ownership verified
Status
Healthy
Uptime
15.7% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
jamdotdev/skills
GitHub Stars
5
ChatGPT
–
Claude
Jam

TDQS

A3.5/5.0

Scored across 40 tools

Disambiguation3/5

The set is mostly domain-labeled, but deprecated aliases—fetch vs getDetails, analyzeVideo vs getFrames, listJams vs searchJams—and generic search vs searchJams create real overlap that can cause misselection. Detailed descriptions mitigate this, and most specialized getters for logs, events, network requests, frames, and transcripts are distinguishable by resource.

Naming Consistency4/5

All names use camelCase and are overwhelmingly verb-first, such as getDetails, createComment, updateFolder, and deleteJam, giving a predictable pattern. Minor deviations are the bare verbs fetch and search plus legacy/deprecated aliases, but there is no mixed casing convention.

Tool Count2/5

Forty tools is well beyond a well-scoped set; even for a broad product this is heavy and includes deprecated duplicate operations. The surface spans many subdomains, so some breadth is justified, but 40 separate tools places it in the too-many band.

Completeness4/5

Coverage is broad: Jam discovery/details/update/delete, comments and reactions, folders, resources, relations, recording links and domains, media analysis, events/logs, team members, and feedback. Gaps are minor—no direct createJam and no full lifecycle for recording URLs—but users can work around these via recording links or the dashboard.

Available Tools

40 tools
addReactionA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
emojiYesReaction emoji. One of: 🐛 (Buggy), 💜 (Love it), ✅ (Fixed), 👀 (Oooo), ❓ (Unclear), 👏 (Bravo), 🔥 (Fire), 👍 (Got it)
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
commentIdYesComment identifier — the `id` returned by createComment, or a comment deep link carrying `?commentId=`
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare write, idempotent, open-world, and destructive hints, and the description adds useful behavior: duplicate reactions are no-ops, the author may be emailed, and the reaction is visible wherever the comment is shared. It does not explain why destructiveHint is true, but it does not contradict that annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose and keeps usefulness and side-effect notes concise. The emoji list is somewhat redundant because the same enum and meanings are in the schema, but the overall structure is clear and not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple add-reaction tool with full schema coverage and annotations, the description covers purpose, a representative use case, permissions, duplicate behavior, and notification/visibility side effects. It omits return-value or error behavior, but the core information needed to invoke it correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains commentId, emoji, intent, and llm_model. The description repeats the emoji meanings already present in the schema enum description and adds no further guidance for the other parameters, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: react to a comment on a Jam, and it clarifies scope by saying it works on anyone's comment, not just your own. It is clear without opening the schema, though it does not explicitly compare itself to sibling tools such as removeReaction or createComment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context: useful for acknowledging a comment you've already acted on, and it clarifies that it works on anyone's comment. It does not state when not to use it or point to removeReaction for undoing a reaction, so it stops short of full alternative-routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

addResourceA
Idempotent
Inspect

Attach a URL to a Jam, such as the pull request a proof Jam demonstrates, the CI run it came from, or another Jam. Pass a label when the page title would not say what the link is; otherwise teams with links on the share page see the host and path. Adding the same URL again changes nothing. Returns the resource. When you record proof of your work, add the pull request or ticket it proves as a resource. The URL shows on the Jam's share page, which can be public: do not pass a URL that carries a token, and a URL with a username or password is refused. Needs the permission that edits a Jam's title.

NameRequiredDescriptionDefault
urlYesAn http or https URL: a pull request, a CI run, a ticket, a doc, or another Jam.
jamIdYesJam identifier — a UUID or a jam.dev URL
labelNoA short name for the link, shown instead of the derived label
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations it discloses the permission requirement ('Needs the permission that edits a Jam's title'), the security-relevant side effect that the URL becomes visible on a possibly public share page, the credential-rejection rule, and the return value ('Returns the resource'). The idempotency statement merely restates idempotentHint, but the remaining context is substantive and consistent with readOnlyHint=false and destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose, label guidance, idempotency, visibility warning, and permissions arrive in a logical order with the core action front-loaded. It is slightly long, and the motivational 'record proof of your work' sentence overlaps with the opening examples, but no sentence is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the definition covers what is created, what is returned, permissions, idempotency, public-visibility risk, and input rejection rules. An agent has everything needed to decide to call it and to construct valid, safe arguments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains when a `label` is needed and what happens without one (viewers see the host and path), and it constrains `url` beyond the schema by forbidding token-bearing or credentialed URLs. The meta-parameters intent and llm_model are left to their schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Attach a URL to a Jam', and gives concrete examples of what a URL can be (pull request, CI run, another Jam). It does not differentiate itself from the inverse sibling removeResource or clarify its relationship to updateJam, so it stops short of the top mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear when-to-use rule ('When you record proof of your work, add the pull request or ticket it proves as a resource') and a strong when-not-to: do not pass URLs carrying tokens, and URLs with user/password are refused. It never names an alternative tool (e.g. removeResource for detaching), so there is no explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyzeVideoA
Read-onlyIdempotent
Inspect

Deprecated: use getFrames with mode: "overview".

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this tool as read-only, idempotent, non-destructive, and deprecated via the title. The description adds a concrete replacement path, which is useful, but it does not describe other behavioral traits such as what the analysis did or how it behaved before deprecation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted wording. It communicates deprecation and the replacement immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated redirect tool, the description is nearly complete: it tells the agent not to use this tool and what to use instead. It does not explain the legacy tool's return behavior, but that is a minor gap given the deprecation notice.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the input schema. The description adds no parameter-specific meaning beyond the schema, which is acceptable given complete schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the tool as deprecated and points to a replacement, which helps distinguish it from getFrames. However, it never states what analyzeVideo itself does beyond what the tool name implies, so the actual purpose remains vague.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit migration guidance: use getFrames with mode "overview" instead. For a deprecated tool, this is exactly the usage instruction an agent needs and leaves little ambiguity about avoiding this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createCommentA
Destructive
Inspect

Add a new comment to a Jam bug report. The comment body supports Markdown formatting. To reply in a thread, pass parentId using a top-level comment's id from getDetails on the same Jam. Replies are one level deep and ignore playbackRelativeTimestamp. 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.

NameRequiredDescriptionDefault
bodyYesThe comment body in Markdown format. To mention a teammate and notify them, write `@[Their Name](user:<userId>)` — get the userId from listMembers. A plain `@name` is left as ordinary text and notifies nobody. At most 2000 characters; split a longer write-up into a top-level comment and replies.
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
parentIdNoThe id of a top-level comment on this Jam to reply to.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.
playbackRelativeTimestampNoOptional timestamp in milliseconds relative to the start of the media playback. When provided, the comment will be linked to that specific point in the video/replay. Ignored when parentId is provided.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavior beyond the annotations: email notifications to other users, visibility scoped to Jam access including public viewers, and the constraint that replies are one level deep and ignore playbackRelativeTimestamp. It does not describe what the call returns (e.g., the new comment id), which is the one notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then threading rules, then use cases and side effects — a sensible ordering. The closing sentence on email notification and sharing visibility is slightly wordy but carries real information, so nothing is clearly wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation tool with no output schema, the description covers scope, threading, mentions, and notification side effects well. The missing piece is the response shape — an agent cannot tell whether the created comment id is returned or must be re-fetched via getDetails.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: parentId must come from getDetails and must be a top-level comment id, and playbackRelativeTimestamp is silently ignored when parentId is set. That interaction is not expressible in the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Add a new comment to a Jam bug report") and immediately clarifies threading scope. The action is instantly distinguishable from siblings editComment, deleteComment, and addReaction without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use cases ("add notes, analysis results, or follow-up information") and routes the agent for threading: use parentId via getDetails, and listMembers for mention userIds. It does not explicitly contrast with editComment/deleteComment, so the "when not to use" side is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createFolderA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
nameYesName for the folder (at most 255 characters)
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing non-obvious side effects: permission self-upgrade from Viewer to Creator, seat billing impact, and admin notification emails. It also discloses return values (id and shortId) that the absence of an output schema would otherwise leave unknown, and warns about non-unique names.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying distinct information: what it does and returns, the deduplication caveat, and the side effects. The primary purpose and the immediate follow-up path are front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no output schema, the description covers return shape, side effects, and the prerequisite check. Nothing an agent needs to invoke it safely is missing, and the destructiveHint=true annotation is consistent with the billing/email side effects described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter definitions already carry their own meaning. The description nevertheless adds real semantics for 'name' — that names are not unique and duplicates are permitted — which the schema's length constraint does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus scope: "Create a folder in the team to organize Jams into." It also distinguishes itself from listFolders (reuse case) and updateJam (the follow-up filing call), so an agent can place it among siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not plus the alternative: "call listFolders first if you mean to reuse an existing folder rather than add another one with the same name." It also tells the agent what to do next (updateJam) after creation, leaving no routing ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteCommentA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.
commentUidYesComment identifier, as returned by createComment or getDetails

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds behavior they cannot express: the cascade to attachments, the author-only authorization rule, the non-recoverable nature, and a confirm-first requirement. These are exactly the kinds of consequences an agent needs before firing an irreversible write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and its blast radius, then authorization, then ID sourcing. Nothing is padding and the destructive warning is not buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-required-param destructive tool with no output schema, this covers what is removed, who may remove it, and irreversibility. It does not say what happens on a repeat or failed call (missing comment, wrong author), which matters given idempotentHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and commentUid is already documented as coming from createComment or getDetails, so the description's sentence on ID provenance largely restates the schema. The intent and llm_model parameters are not addressed at all, though the schema covers them adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Delete a comment from a Jam") plus a scope detail that changes expectations: attachments are removed too. An agent can distinguish it from editComment and from deleteJam without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete prerequisite ("Only the comment's own author can delete it"), an ID source (createComment result or getDetails), and an operational instruction ("confirm with the user before calling"). It stops short of an explicit either/or against editComment, e.g. "to retract wording but keep the thread, use editComment," so it misses the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteFolderA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
folderIdYesFolder ID or short ID, as returned by listFolders
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as destructive and non-read-only, but the description adds critical context beyond them: there is no trash or archive view, the Jams leave team lists and search, nobody can restore them, and the call returns archivedJamCount. It also warns not to tell users the Jams can be restored, which is exactly the kind of behavioral guidance an agent needs for an irreversible operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the destructive scope, then the irreversibility, then the return value, then the operational warnings. Every sentence carries necessary information for a destructive tool, and there is no redundant restatement of the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive folder-deletion tool with no output schema, the description covers the cascade effect, irreversibility, required confirmation, prerequisite listing step, identifier constraints, and return value. Nothing an agent needs in order to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful guidance beyond the schema by emphasizing that folderId must come from listFolders and must never be a folder name because a name could match the wrong folder. It does not explain the intent or llm_model parameters, but those are already documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Delete a folder") and immediately clarifies the scope: every Jam inside it is deleted too. It distinguishes this from sibling tools like deleteJam and listFolders by explaining the folder-level cascade and the return value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to confirm with the user before calling, to use listFolders first so the user can see the folder contents, and to pass a folder ID or short ID rather than a name. These are concrete when-to-use and how-to-use instructions with a named alternative for inspection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteJamA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it explains what is actually lost (team lists, search results), that no trash or archive view exists for restoration, and even constrains what the agent may tell the user afterwards. This is unusually rich behavioral context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: what it does, what is lost and why it is irreversible, and the confirmation obligation. The consequence is front-loaded before the caution.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter destructive tool with no output schema, the description covers effect, irreversibility, and user-communication obligations. It does not mention failure modes such as an unknown jamId or missing permissions, which is a minor gap given the otherwise thorough disclosure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with jamId, intent, and llm_model all documented inline, including the UUID-or-jam.dev-URL format. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Delete a Jam") and immediately describes the observable effect: it disappears from the team's lists and search results. The resource is unambiguous against siblings like deleteFolder, deleteComment, and updateJam, so an agent can select it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition for invocation — confirm with the user before calling — and a post-call communication rule. It does not name an alternative (e.g., updateJam if the user only wants to change something) or state when deletion is inappropriate, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

editCommentA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
bodyYesThe replacement comment body in Markdown format. Replaces the existing body entirely. At most 2000 characters.
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
commentIdYesComment identifier — the `id` returned by createComment, or a comment deep link carrying `?commentId=`
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true, and the description earns credit by specifying exactly what is destroyed: "The new body replaces the old one entirely." It further discloses the authorization requirement (author-only), the content format (Markdown), and the visibility consequence to other users including public viewers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core action and rationale, and each carries distinct information (purpose, input lineage, replacement semantics, permissions/visibility). Slightly redundant that both the description and the schema state the body fully replaces the old one.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the critical unknowns: what is overwritten, who may call it, and who sees the result. It does not mention failure modes (invalid commentId, non-authored comment) or what the tool returns on success, a minor gap given the operation's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so commentId, body, intent, and llm_model are already documented in the schema. The description only restates that commentId comes from createComment and that body is Markdown replacement text, adding no syntax or edge-case detail beyond the structured fields. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Rewrite a comment you previously left on a Jam") plus scope (own comments only), which separates it cleanly from createComment and deleteComment in the sibling list. The parenthetical purpose ("correct or extend its own note instead of stacking a follow-up comment") makes the distinction unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use guidance: correct or extend an existing note rather than posting a follow-up. It also states a hard eligibility constraint ("You can only edit comments you authored"). It never explicitly names createComment or deleteComment as the alternative for other cases, so the routing is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchB
Read-onlyIdempotent
Inspect

A Jam as a citable document: id, title, url and text (what getDetails returns). Use getDetails to investigate.

NameRequiredDescriptionDefault
idYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile requires no description support. The description does add return-field disclosure (id, title, url, text), valuable since there is no output schema, but the parenthetical "(what getDetails returns)" is ambiguous about whether fetch duplicates getDetails output or just its text field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence plus a routing clause — no padding, and the return shape is front-loaded. The trailing parenthetical is cryptic enough that it slightly undercuts the otherwise tight structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-required-param read with no output schema, the description covers the return payload and points to getDetails. The key unresolved question — why fetch exists when getDetails exists, and whether their outputs overlap — is exactly what an agent needs to choose correctly, and it is not answered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so id (UUID or jam.dev URL) and the intent/llm_model telemetry params are already fully documented. The description adds no syntax or format meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"A Jam as a citable document: id, title, url and text" states the resource and exactly what comes back, which makes it distinguishable from the raw-detail siblings. It falls short of 5 because it is a noun phrase rather than a verb+resource statement, so the action (retrieve) is only inferable from the tool name "fetch".

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use getDetails to investigate" names the alternative, which is real routing guidance. However, the selecting condition is left implicit — the agent must guess that fetch is for citation/summary and getDetails for deeper inspection, and there is no guidance on when neither applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getConsoleLogsA
Read-onlyIdempotent
Inspect

The Jam's console output as text, one message per line: [M:SS #index] level: message, with the stack trace and source under it. logLevel (['error','warn'] for problems) and limit filter server-side; the first line gives the match count, and a More: line the cursor for the next page.

NameRequiredDescriptionDefault
toMsNoOnly events at or before this ms into the recording
afterNoFrom the previous page's `More:` line
jamIdYesJam identifier — a UUID or a jam.dev URL
limitNoMax events, default 200
formatNo'json': the rows with every stored column, for digging into one event or window
fromMsNoOnly events at or after this ms into the recording
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
logLevelNoe.g. ['error','warn']
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe, idempotent read, so the description correctly spends its space on behavior the annotations cannot convey: server-side filtering, a leading match-count line, and a `More:` line carrying the next-page cursor. It does not discuss default ordering or what happens with an expired cursor, which is a minor residual gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the output format and then filtering/pagination, with no filler. The inline format template is dense but earns its space; a slightly cleaner split between format and controls would help readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing returns and does so convincingly (line format, stack trace, match count, cursor). For a nine-parameter tool it leaves the time-window params and the meta params (intent, llm_model) undiscussed, though the schema documents them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: it explains the `More:` cursor workflow for `after`, that logLevel/limit are applied server-side (not client-side truncation), and the shape of the output column layout. It says nothing about fromMs/toMs time-window semantics, though the schema covers those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the Jam's console output) and states the exact rendered format, so an agent knows this returns browser console messages rather than network events or video frames. It never explicitly contrasts itself with getEvents or getNetworkRequests, which is the only thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: filtering with logLevel for problems and using `after` for paging tells the agent how to query, but there is no when-to-use/when-not guidance and no named alternative (e.g. getEvents or getNetworkRequests) for adjacent data needs. The agent must infer the boundary from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getDetailsA
Read-onlyIdempotent
Inspect

The entry point for any Jam: call it first. Returns what the Jam is (title, description, author, page, browser and OS), its comments and links, the recording's timeline in time order, and a guide to what else the Jam holds and which tool reads it. A comment pinned to a playback time shows it as [M:SS]. format: "json" returns the structured payload instead of the text (IDs, folder, event counts, processing status, and on a video Jam a public 360p thumbnailUrl for each pinned comment, to share with a person). Once you find the cause or fix it, post one createComment that says so and mentions the creator as @[Name](user:<author.id>), unless the creator is the user you act for. Then call submitFeedback once with this Jam's jamId and evidence set to the Jam data that led you there. The links list the Jam's resources (pull requests, tickets, docs) and related Jams; when you fix or prove something, add the pull request with addResource and mark a proof or fix Jam as related to the bug Jam with markRelated.

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
formatNoDefault "text". "json" for the structured payload a program parses.
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, it discloses the rendering convention (`[M:SS]` for pinned comments), what the json format adds (IDs, folder, event counts, processing status, 360p thumbnailUrl per pinned comment), and that it acts as a first-pass overview that points to other tools. It does not cover pagination/truncation limits on large Jam timelines, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the single most important fact (call it first) and the return summary, with format behavior positioned right after. The closing workflow sentences about createComment/submitFeedback/addResource are dense but partly choreography that belongs to those tools' definitions, making the tail heavier than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so thoroughly — text shape, json shape, and the `[M:SS]` annotation convention. For a read-only 4-parameter overview tool whose annotations already state the safety profile, nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns a bump by explaining the consequence of `format: "json"` in terms of concrete payload contents (IDs, folder, event counts, thumbnailUrl) rather than repeating the schema's terse "structured payload a program parses". jamId and intent/llm_model semantics are left entirely to the schema, which is acceptable given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("The entry point for any Jam") and enumerates the returned facets — title, description, author, page, browser/OS, comments, links, timeline — which unambiguously separates it from siblings like listJams, getEvents, or getMetadata. An agent can identify the tool's role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit ordering guidance ("call it first") plus follow-on routing to createComment, submitFeedback, addResource, and markRelated with the conditions that trigger each. It also names an exclusion: don't mention the creator if the creator is the user you act for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getEventsA
Read-onlyIdempotent
Inspect

The Jam's recorded events as text, one line each: [M:SS #index] then the request, console message or user action, details indented. Narrow it: index for the events timeline lines name; fromMs/toMs for everything around a moment; types (['network'], ['console'], ['user']); network statusCode (['4xx','5xx']), method, host, contentType; console logLevel (['error','warn']). Filters are arrays, OR within one and AND across; a network or console filter implies its type. Failed requests carry their bodies, and so does everything read by index or window; bodies:'all' for every body (cut at 4KB), headers:true for headers. format:'json' returns every stored column. The first line gives the match count and the UTC time of [0:00].

NameRequiredDescriptionDefault
hostNoSubstrings, e.g. ['api.example.com']
toMsNoOnly events at or before this ms into the recording
afterNoFrom the previous page's `More:` line
indexNoEvent indexes from the timeline's `[M:SS #index]`
jamIdYesJam identifier — a UUID or a jam.dev URL
limitNoMax events, default 200
typesNoDefault: all, or what the filters name
bodiesNo
formatNo'json': the rows with every stored column, for digging into one event or window
fromMsNoOnly events at or after this ms into the recording
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
methodNoe.g. ['POST','PUT']
headersNo
logLevelNoe.g. ['error','warn']
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.
statusCodeNoe.g. ['500'] or ['4xx','5xx']
contentTypeNoSubstrings, e.g. ['json']

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real operational context: bodies are truncated at 4KB, JSON mode returns every stored column, and the first line carries the match count plus the UTC time of [0:00]. Pagination is only hinted at via the `More:` line reference rather than stated as a rule.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the output shape before any filtering advice, and nearly every clause carries information an agent needs. Density tips into terseness in places — 'index for the events timeline lines name' is garbled enough to cost a re-read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 17 parameters and no output schema, the description carries the return-value burden and does so: it describes the text line format, the leading match-count/offset line, and the JSON alternative. A reader can call it correctly without opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds semantics the schema cannot express: filters are arrays that OR within one and AND across, and 'a network or console filter implies its type', which explains the otherwise-ambiguous `types` default. It also clarifies body retention rules (failed requests always carry bodies; `bodies:'all'` cuts at 4KB; `headers:true`). Minor params (`after`, `limit`, `intent`) are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'The Jam's recorded events as text, one line each', plus the exact line format `[M:SS #index]`. It does not distinguish itself from the three overlapping siblings (getConsoleLogs, getNetworkRequests, getUserEvents), leaving the agent to infer that this tool is the combined/filtered superset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete narrowing strategies — `index` for specific timeline lines, `fromMs`/`toMs` for a window around a moment, `types` for network/console/user — which tells the agent when each filter mode applies. It stops short of naming alternatives or when-not-to-use conditions relative to the type-specific siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getFramesA
Read-onlyIdempotent
Inspect

Still frames from a video Jam, as images. Set mode: 'overview' for one labeled grid across the whole video (start here); 'at' with at timestamps in ms; or 'window' with count evenly spaced frames, optionally within fromMs–toMs. size sets the frame height (not for the overview). At most 30 frames a call. Videos on Cloudflare Stream only; otherwise one text block says why.

NameRequiredDescriptionDefault
atNoTimestamps in ms, with mode 'at'
modeNoRequired. Which frames to return. `overview`: one labeled grid spanning the whole video. `at`: the frames at the times in `at`. `window`: `count` frames evenly spaced from `fromMs` to `toMs` (whole video by default). Fields that belong to other modes are ignored. Calls from older tool lists that omit it use `overview` or the fields they set.
sizeNosmall 360p, medium 720p (default), large 1080pmedium
toMsNoWindow end in ms, with mode 'window'
countNoEvenly spaced frames, first and last included, with mode 'window'
jamIdYesJam identifier — a UUID or a jam.dev URL
fromMsNoWindow start in ms, with mode 'window'
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
overviewNoDeprecated: use `mode: "overview"`. Accepted only for clients with an older tool list.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, idempotent, non-destructive operation. The description goes further by disclosing the 30-frame cap and the Cloudflare Stream-only limitation, including how unsupported videos are reported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded, dense, and free of filler. Every sentence adds either mode guidance, a limit, or a platform restriction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 10-parameter schema and no output schema, the description covers the key invocation constraints and return behavior well enough. It leaves intent and llm_model to the schema, which is reasonable since those are ancillary parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter. The description restates the mode and size semantics, adding only a small clarification that size does not apply to the overview.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'Still frames from a video Jam, as images,' and its mode breakdown makes the output and scope immediately clear. It is easily distinguishable from siblings like analyzeVideo or getVideoTranscript.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent to start with 'overview' and explains when to use 'at' versus 'window,' including the optional fromMs–toMs range. It adds a platform constraint, though it does not explicitly name sibling alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getMetadataC
Read-onlyIdempotent
Inspect

Custom metadata the app attached with the jam.metadata() SDK: user IDs, versions, feature flags.

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered without the description. The description usefully adds that the metadata originates from the app's own jam.metadata() SDK calls, which tells the agent about data provenance. It does not say what happens when no metadata was attached (empty object, null, error), which is the main behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with zero filler, and the identifying information (SDK-attached custom metadata) is front-loaded. It is a fragment rather than a complete sentence, which makes it slightly under-specified rather than bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only, single-required-parameter tool with full schema coverage and no output schema, the description is close to sufficient but omits the return shape (key-value map? nested JSON?) — with no output schema present, that responsibility falls on the description. Adding one line about the response structure would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so jamId, intent, and llm_model are fully documented in the schema itself. The description adds no meaning beyond that — for example, it does not clarify accepted jamId forms or behavior for cross-workspace IDs. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource — custom metadata attached by the app via the jam.metadata() SDK — with concrete examples (user IDs, versions, feature flags). However, it is a noun-phrase fragment with no verb, so what the tool *does* (returns/reads this metadata for a jam) must be inferred from the name. It is distinguishable from siblings like getDetails or getEvents only by the resource examples, not by explicit contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all: nothing says when to pick this over getDetails, getEvents, or getUserEvents, and no prerequisites are stated. The mention of the SDK origin hints at the data's source but does not help an agent decide when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getNetworkRequestsA
Read-onlyIdempotent
Inspect

The Jam's network requests as text, one per line: [M:SS #index] METHOD url → status (initiator, type, duration), with the error, bodies and headers under it. index reads just the requests timeline lines name, with their bodies. Other filters are arrays, OR within one and AND across: statusCode (['4xx','5xx'] for failures), method (['POST','PUT','PATCH','DELETE'] for writes), host, contentType. Only failed requests carry their response body unless bodies:'all' (every body, cut at 4KB: filter first). headers:true adds request and response headers, secret values redacted at capture. The first line gives the match count and the UTC time of [0:00], to match backend logs.

NameRequiredDescriptionDefault
hostNoSubstrings, e.g. ['api.example.com']
toMsNoOnly events at or before this ms into the recording
afterNoFrom the previous page's `More:` line
indexNoEvent indexes from the timeline's `[M:SS #index]`; bodies included
jamIdYesJam identifier — a UUID or a jam.dev URL
limitNoMax events, default 200
bodiesNo'errors' (default): failed requests' bodies; 'all': every body
formatNo'json': the rows with every stored column, for digging into one event or window
fromMsNoOnly events at or after this ms into the recording
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
methodNoe.g. ['POST','PUT']
headersNoAdd headers, about 600 bytes a request
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.
statusCodeNoe.g. ['500'] or ['4xx','5xx']
contentTypeNoSubstrings, e.g. ['json']

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already certify readOnly/idempotent/non-destructive, yet the description still adds real behavioral detail: redaction of secret header values at capture, a 4KB cap on bodies, the default of bodies only for failed requests, and the `More:` pagination line referenced by the `after` param. Only response size/rate expectations are absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is dense and front-loads the output format, which is right for a 15-param tool, but several clauses are garbled or run together, e.g. "`index` reads just the requests timeline lines name, with their bodies" and "with the error, bodies and headers under it", forcing the reader to re-parse rather than shortening.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description supplies the return rendering, the byte costs, and the truncation/redaction rules, which is most of what a 15-param query tool needs. Gaps are minor: no guidance on handling large result sets beyond pagination, and no note on what an empty match looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description goes beyond it with semantics the schema does not encode: array filters are "OR within one and AND across", `index` pulls full bodies for specific timeline events, headers cost "about 600 bytes a request", and the first line carries the match count and UTC anchor for aligning with backend logs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific resource and output shape: "The Jam's network requests as text, one per line" plus an inline template. That clearly separates it from getConsoleLogs or getEvents, but the description never names a sibling, so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through filter recipes — "statusCode (['4xx','5xx'] for failures)", "method ([...] for writes)", "filter first" before bodies:'all', and format:'json' "for digging into one event or window" — but there is no explicit statement of when to pick this tool over getEvents or getUserEvents, and no stated exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getScreenshotsA
Read-onlyIdempotent
Inspect

The images of a screenshot Jam. Screenshot Jams only: a video Jam has getFrames.

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is fully covered structurally. The description adds one genuine behavioral fact beyond that: the tool returns nothing useful for video Jams. It says nothing about what the images look like on return (URLs, attachments, or binary) or what happens on an invalid jamId.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the content description front-loaded and the routing/exclusion rule second. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter read tool with complete schema documentation and full annotations, the description covers what an agent needs to pick the right tool. The only residual gap is the return shape, which matters somewhat for an image-returning tool but is not required for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the useful note that jamId accepts either a UUID or a jam.dev URL, so the baseline is 3. The description adds no parameter-level meaning beyond the schema and does not explain the intent/llm_model telemetry parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource precisely ("the images of a screenshot Jam") and explicitly separates it from the sibling that handles the other Jam type (getFrames for video). It's a noun phrase rather than a verb+resource formulation, so the agent must infer a fetch action, but the scope and content are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit applicability rule ("Screenshot Jams only") plus the correct alternative for the excluded case (video Jam -> getFrames). It does not address overlap with other read tools like getDetails, getFrames-adjacent, or getMetadata, so routing among the broader read family is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getUserEventsA
Read-onlyIdempotent
Inspect

The user's clicks, typing and navigations as text, one per line: [M:SS #index] click on <element> at x,y with its CSS selector; a click a script fired is marked. The getDetails timeline already lists these: call this for selectors, positions and typed values.

NameRequiredDescriptionDefault
toMsNoOnly events at or before this ms into the recording
afterNoFrom the previous page's `More:` line
jamIdYesJam identifier — a UUID or a jam.dev URL
limitNoMax events, default 200
formatNo'json': the rows with every stored column, for digging into one event or window
fromMsNoOnly events at or after this ms into the recording
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and closed-world, so the safety profile is covered. The description adds real behavioral detail beyond that: the per-line `[M:SS #index]` format, inclusion of CSS selectors and coordinates, and the marking of script-fired clicks — output shape an agent could not infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the return payload, then the disambiguation. Two sentences, no filler. The clause about getDetails is slightly compressed but still readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates well by describing the returned text line format. It omits pagination behavior and the 200-event default, but those live in the schema, so nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all eight parameters (including fromMs/toMs, limit, format and the `after` cursor) are already documented in the schema. The description adds only indirect hints — 'typed values' and 'positions' gesture at the content, but it explains nothing about time windows or pagination beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact resource — the user's clicks, typing and navigations — and gives a concrete line format, so an agent knows precisely what comes back. It differentiates from the sibling getDetails by noting that timeline only summarizes these events, though it does not distinguish itself from getEvents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It supplies a direct routing rule: getDetails already lists the events, so call this one specifically for CSS selectors, click positions and typed values. That is explicit when-to-use-plus-alternative guidance; only an explicit exclusion case is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getVideoChaptersA
Read-onlyIdempotent
Inspect

AI chapters of a video Jam: { status, chapters: [{ startMs, endMs, title, thumbnailUrl? }], language }; chapters is null unless status is "ready". thumbnailUrl is a public 360p JPEG to show a person; to look yourself, call getFrames with mode 'at' at the chapter's midpoint. "not_requested": never queued; "skipped": too short to segment.

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe, idempotent read, so the description is free to add the parts annotations cannot: the returned object shape, that chapters is null unless status is "ready", what "not_requested" and "skipped" mean, and that thumbnailUrl is a public 360p JPEG. That is unusually rich context about outcomes and failure states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the resource and its return shape, and every clause is substantive. The telegraphic style (braced type literal, bare quoted status values before they are explained) makes it slightly harder to parse than plain prose, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes full responsibility for describing returns and does so completely: field list, nullability rule, thumbnail nature, downstream pointer, and status enumeration meanings. Nothing an agent needs to interpret the response is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (jamId, intent, llm_model) are documented there. The description adds no meaning about jamId format or the intent/llm_model obligation, so it sits at the baseline where the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("AI chapters of a video Jam") and immediately distinguishes itself by declaring the exact return shape and by routing visual inspection to getFrames. An agent can tell it apart from getVideoTranscript or analyzeVideo without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear routing guidance for the visual case ("to look yourself, call getFrames with mode 'at' at the chapter's midpoint") and explains why output may be empty via the status semantics. It does not explicitly contrast with getVideoTranscript or analyzeVideo, which are the closest text/media siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getVideoTranscriptA
Read-onlyIdempotent
Inspect

What the reporter said while recording, as WebVTT with timestamps. Video Jams recorded with the microphone on only. The getDetails timeline already carries it as Voiceover: lines.

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds meaningful context beyond that: the transcript only exists for Video Jams recorded with the microphone on, which tells the agent when the tool will return nothing useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the output format and followed by the availability constraint and the sibling overlap. Every sentence contributes a distinct fact and none is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly states the return format (WebVTT with timestamps) and the precondition for a non-empty result. For a simple single-resource read tool, that is close to complete, with only an explicit pointer to getDetails as an alternative missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so jamId, intent, and llm_model are already fully documented in the schema. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely — speech captured while recording, returned as WebVTT with timestamps — which no sibling name conveys on its own. It is a clear statement of what this tool yields, though the verb is implicit rather than stated outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implicitly routes the agent away from unnecessary calls by noting that the getDetails timeline already carries this content as `Voiceover:` lines. That is a real usage signal, but it stops short of an explicit 'use this when you need X instead of getDetails' instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listFoldersA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
afterNoCursor for forward pagination (folder ID)
limitNoMaximum number of results to return
queryNoSearch query to filter folders by name
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
orderByNoSort order fieldcreatedAt
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds value beyond that by disclosing the return payload (name, short ID, Jam count, timestamps) and confirming that search and pagination are optional, which an agent needs in order to interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, followed by return contents and then the use case. No filler or redundancy; the only minor inefficiency is that the return-fields sentence partially duplicates what an agent would infer from a list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-required-parameter list tool with full schema coverage and rich annotations, the description covers purpose, scope, and returned fields. The only gap is pagination mechanics — it does not say how an agent detects that more pages exist or that results are cursor-based beyond the 'after' parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with every parameter documented in the schema including the after-cursor, limit bounds, query, orderBy enum, and the intent/llm_model fields. The description only restates that search and pagination exist, adding no format, default, or cursor-chaining detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("List folders in the team") plus the scope of optional filtering and pagination, so the operation is unambiguous. It does not explicitly name a sibling to contrast with (e.g., searchJams or listJams), but the stated use case of discovering folders for organizing Jams effectively separates it from the Jam-listing tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this to discover available folders for organizing Jams" supplies a positive use context, which is more than nothing. However, it never states when not to use it or points to alternatives such as searchJams for content lookup, and there is no mention of prerequisites like team membership.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listJamsA
Read-onlyIdempotent
Inspect

Deprecated: use searchJams instead. Lists Jam bug reports with the legacy filters 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.

NameRequiredDescriptionDefault
urlNoFilter by original page URL (partial match, case-insensitive)
typeNoFilter by Jam type
afterNoCursor for forward pagination (Jam ID)
limitNoMaximum number of results to return
queryNoText search query to filter Jams by title or description
authorNoAuthor filter: "me", user name, email, or user ID
folderNoFolder filter: folder name, folder ID, folder short ID, or "root" for unfiled Jams
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
originNoFilter by capture surface. native_macos is the macOS app, native_cli is the jam CLI, extension_chrome is the browser extension, recording_link is a shareable recorder link, mobile_ios / mobile_android are the mobile apps.
orderByNoSort order fieldcreatedAt
createdAtNoFilter by creation date: ISO date string or ISO 8601 duration (e.g., "-P7D" for last 7 days)
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by describing returned Jam metadata and the special handling of each Jam's url as a share link to return unchanged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loads the deprecation warning, and then efficiently covers filters, return values, and the special url handling. There is no unnecessary wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter read-only listing tool with no output schema, the description provides enough context: it names the filter dimensions, mentions pagination, and describes the returned metadata and share-link behavior. The schema covers parameter details, so the remaining gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 12 parameters in detail. The description summarizes the filter categories and pagination but does not add syntax or format details beyond what the schema provides, making the baseline score appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it lists Jam bug reports using legacy filters and pagination. It also explicitly names the sibling replacement, searchJams, so an agent can distinguish this deprecated tool from the current one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The first sentence gives explicit when-not-to-use guidance: 'Deprecated: use searchJams instead.' This directly routes the agent to the correct alternative and makes the legacy status unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listMembersA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
afterNoCursor for forward pagination (user ID)
limitNoMaximum number of results to return
queryNoSearch query to filter users by name or email
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's job is to add what they cannot. It does that by declaring the return shape ('name, email, and role') and flagging that search and pagination are optional. It omits default page size, cursor semantics, and empty-result behavior, which are left to the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the tool does, then the return value, then the use case. Nothing is redundant and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All parameters are optional and fully described in the schema, and with no output schema the description usefully names the returned fields. The main remaining gap is the absence of pagination traversal behavior, but for a simple read-only list that is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each of the five parameters documented in the schema itself, so the baseline is 3. The description's 'optional search and pagination' adds a small framing hint but no format or constraint details beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List team members') plus the modifiers (optional search and pagination), and adds the returned fields. No sibling tool lists members, and the 'team members' phrasing is unambiguous against search/searchJams.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete use case ('find users for filtering Jams by author'), which tells the agent when this call is warranted. It stops short of naming an alternative or an exclusion ('use X instead when...'), so it is clear context without routing rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRecordingLinkJamsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoMaximum number of Jams to return (default 20, max 100)
cursorNoCursor for forward pagination (a jam ID from a prior endCursor)
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
publicIdYesPublic ID of the recording link whose Jams to list
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds behavior beyond that: the returned fields (id, title, createdAt), newest-first ordering, and the cursor/hasNextPage pagination contract — meaningful since no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences with zero filler — purpose, then return shape and ordering, then pagination mechanics. Front-loaded with the core purpose before the procedural detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must convey the return shape, and it does (id, title, createdAt, newest-first, cursor/hasNextPage). Combined with full schema coverage and read-only annotations, an agent has everything needed to invoke and iterate pages correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters are already documented. The description's cursor explanation ("a jam id from a prior endCursor") nearly restates the schema text and it adds nothing about limit, intent, or llm_model; the mention of hasNextPage is a return field, not a parameter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("List the Jams recorded through a recording link") and states the addressing key (publicId). That scope phrase distinguishes it from listJams (all Jams) and getRecordingLink (the link itself) without the reader needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly says how to page: pass cursor from a prior endCursor and check hasNextPage. It doesn't explicitly say when to prefer this over listJams or when to call getRecordingLink first, so there is no exclusion/alternative routing, but the calling context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listRecordingUrlsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so this adds domain-specific behavior instead of repeating it: unverified domains silently capture no logs, verification happens outside the API in the dashboard, and an empty list means any link created now captures nothing. Those are exactly the failure modes an agent needs to know before proceeding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then the return shape, then routing guidance, then the verification caveat — a sensible order. Slight redundancy between "to tell whether the team has any connected domains at all" and the closing sentence about an empty list, which costs a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description enumerates the returned fields (id, url, verified state) and explains the empty-list case, which is the main branch an agent must handle. For a zero-required-parameter read tool, nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (intent, llm_model) have full schema descriptions, so the schema carries the burden and baseline 3 applies. The description adds no extra meaning about these parameters, but none is needed since they are generic telemetry fields unrelated to the tool's domain logic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List the team's connected domains (recording URLs)") and immediately disambiguates what a recording URL is: the domain a recording link starts from so Jams capture console and network logs. That definition distinguishes it from sibling link-management tools like createRecordingLink and getRecordingUrlVerifyLink without needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to call this before createRecordingLink to pick the recordingUrlId, and to use it to determine whether the team has any connected domains at all. It also states a prerequisite condition — only a verified domain captures logs, and an unverified one must first be verified from the dashboard, with a doc link.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

markRelatedA
Idempotent
Inspect

Mark a Jam as related to another Jam of the same team, with a type read from the first Jam: it fixes the target, proves it, or relates_to it (the default). Teams with links on the share page show it on both Jams; the target shows the inverse ("fixed by", "proven by"). Marking again with the same type changes nothing. Returns the relation. When you record a Jam that proves a fix, mark it as fixes or proves of the bug Jam. Use it to connect a set of Jams of one flow, such as one Jam per UI state. Needs the permission that edits a Jam's title.

NameRequiredDescriptionDefault
typeNoHow the first Jam relates to the target. Default relates_to
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.
targetJamIdYesThe Jam to relate to: a Jam ID or a Jam URL, in the same team

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond the annotations: both Jams display the link, the target shows an inverse label, re-marking with the same type is a no-op, it returns the relation, and it requires a permission level that ranks with editing a Jam's title. However, the idempotency claim substantially overlaps idempotentHint and the destructiveHint=false write behavior is only implied, so the incremental value is solid but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose clause followed by type semantics, side effects, usage examples, and permission requirements - every sentence contributes. Some sentences are long and pack multiple facts, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the enum behavior, side effects on both Jams, idempotency, permission prerequisite, and return value, so an agent has what it needs to call it correctly despite no output schema. Only the absence of explicit guidance for the reverse operation (markUnrelated) leaves a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains what fixes, proves, and relates_to actually signify and confirms both Jams must belong to the same team. The intent and llm_model params remain unexplained, which is fine given their schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Mark a Jam as related to another Jam of the same team') and then defines the three relation types, their meanings, and the default. An agent can distinguish this from markUnrelated or updateJam from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use guidance: record a Jam that proves a fix, or connect a set of Jams covering one flow such as one Jam per UI state. It does not explicitly name markUnrelated as the alternative for disconnecting, so routing guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

markUnrelatedA
DestructiveIdempotent
Inspect

Remove every relation from a Jam to another Jam, whatever its type. The target Jam's backlink goes too.

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.
targetJamIdYesThe related Jam: a Jam ID or a Jam URL

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds genuine scope beyond that: the removal is unconditional across every relation type and additionally strips the target Jam's backlink, which tells the agent exactly what state is destroyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the destructive scope front-loaded. Nothing here repeats the name or title redundantly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive relation-clearing tool with no output schema, the description covers the important part — that all relation types and backlinks are removed — and annotations supply the safety hints. It stops short of noting error behavior when no relation exists or pointing at markRelated as the undo-side counterpart.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so jamId, targetJamId, intent, and llm_model are already documented, including that identifiers may be UUIDs or jam.dev URLs. The description adds no parameter-level detail, which meets the baseline when the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: remove every relation from one Jam to another, and states the scope is type-agnostic. It does not name the sibling markRelated, so the agent must infer the inverse operation from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb 'Remove' — the agent can conclude this is the tool for severing a link, but the description never states when to prefer it over markRelated, nor does it say what happens if the two Jams were never related.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeReactionA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
emojiYesReaction emoji. One of: 🐛 (Buggy), 💜 (Love it), ✅ (Fixed), 👀 (Oooo), ❓ (Unclear), 👏 (Bravo), 🔥 (Fire), 👍 (Got it)
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
commentIdYesComment identifier — the `id` returned by createComment, or a comment deep link carrying `?commentId=`
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true; the description adds real context on top — that only the caller's own reaction is removed, that others' identical-emoji reactions survive, that a missing reaction is a no-op, and that the change propagates to public viewers. It does not describe the response body or what happens on an invalid commentId, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core behavior and ownership constraint are front-loaded in the first two sentences, with edge cases and visibility following. The emoji enumeration duplicates the schema enum descriptions and is the one sentence that does not fully earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation with no output schema, the description covers ownership scoping, idempotency, valid inputs, and visibility of the effect — enough to call it correctly. It omits any indication of the success/failure response shape, which is the only material gap given annotations already handle the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both required parameters (commentId, emoji) are fully documented in the schema. The description's emoji list merely restates the enum descriptions verbatim and adds nothing about commentId resolution or the intent/llm_model fields. Baseline 3 applies when the schema carries the semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Take back a reaction you left on a comment'), making it immediately distinguishable from the sibling addReaction. Scope is narrowed to the caller's own reaction, so an agent knows exactly what this operates on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implicit but strongly cued: 'Take back a reaction you left' plus the no-op note tell the agent this is the inverse of adding and is safe to call speculatively. It never names addReaction as the alternative for the opposite action, so it stops short of explicit sibling routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

removeResourceB
DestructiveIdempotent
Inspect

Remove a URL from a Jam's resources. Pass the URL exactly as it was added.

NameRequiredDescriptionDefault
urlYesAn http or https URL: a pull request, a CI run, a ticket, a doc, or another Jam.
jamIdYesJam identifier — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds a genuinely useful behavioral fact — matching is exact-string against the previously added URL — but says nothing about what happens on a non-matching URL, whether removal is silent or an error, or whether other resources are affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, action first and constraint second, with no redundant restatement of the name or annotations. Every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation, the annotations carry most of the weight (destructive, idempotent, open-world), and the description correctly emphasizes the exact-match requirement, which is the main way an agent can fail here. The remaining gap — the failure/return behavior when the URL is absent — is minor given idempotentHint=true.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented, and intent/llm_model are self-explanatory. The 'exactly as it was added' clause adds real meaning beyond the schema's loose 'http or https URL' phrasing by implying exact-match semantics, but it addresses only one parameter, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Remove a URL from a Jam's resources'), which is unambiguous and naturally pairs off against the sibling addResource. It stops short of explicitly naming the inverse operation, but the verb alone makes the distinction clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance: nothing says when to remove a resource versus deleting the whole Jam, nor what prerequisites (permissions, membership) apply. The only guidance offered, 'Pass the URL exactly as it was added,' is a parameter constraint rather than a usage condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchJamsB
Read-onlyIdempotent
Inspect

Search the connected team's Jams. text matches every term against a Jam's title, description, comments, linked issue titles, the reporter's email or external id, and its transcript; a term made of only one or two letters or digits is matched against comments only through the whole text: a comment that contains the text as typed matches when another term has three or more letters or digits, or punctuation next to them (such as cool or #12). Terms like #12 or v1.2 also match comments on their own. textIn limits which of those places a term may match in. where is a list of { field, op, value } filter leaves, all ANDed; the where description lists every field, its operators and what it means. window bounds created_at, sort orders the page, and page carries the limit and the opaque cursor the previous page returned. The team is the one the token was issued for and no argument can name another. Each returned Jam carries a url, the share link to hand back to the user unchanged.

NameRequiredDescriptionDefault
vYesQuery contract version. Always 1 for this schema.
pageNoPaging. limit is between 1 and 250 and defaults to 20; cursor is the opaque value the previous page returned.
sortNonewest (created_at descending, the default), oldest (created_at ascending), updated (updated_at descending).
textNoFree text. Split on whitespace into at most 8 terms; a jam matches only when every term matches somewhere (title, description, a comment, a linked issue title, the reporter's email or external id, or the transcript). A term made of only one or two letters or digits is matched against comments only through the whole text: a comment that contains the text as typed matches when another term has three or more letters or digits, or punctuation next to them (such as "cool" or "#12"). Terms like "#12" or "v1.2" also match comments on their own.
whereNoFilters, all ANDed. Each entry is { field, op, value }. Negation is ne / notIn on a leaf; there is no or and no not node. id (eq|ne|in|notIn): The jam itself, as a UUID or a jam.dev link. author (eq|ne|in|notIn): Who recorded the jam, as a user UUID or the literal 'me' for the signed-in viewer. folder (eq|ne|in|notIn): The folder the jam sits in, as a folder UUID or short id. 'eq null' is the team root; 'ne' and 'notIn' count root jams as matching, since a jam with no folder is not in the named one. type (eq|ne|in|notIn): What was captured. origin (eq|ne|in|notIn): The capture surface. extension_chrome is the browser extension, native_macos the macOS app and native_cli its command line, recording_link a shareable recorder link, web_recorder the recorder opened directly, mobile_ios and mobile_android the phone apps, csup_intercom the Intercom support widget, dashboard a jam created in the app. Some are no longer produced but still sit on older jams, so every member stays filterable. capturedUrl (contains): Substring of the page URL the jam was captured on, matched case-insensitively. recordingLink (eq|ne|in|notIn): The recording link the jam was submitted through, as its id or the public id its URL carries. recordingLink.reference (eq|ne|in|notIn|contains): The free-form label on the recording link the jam came through, the one that records where the link was handed out. integration.name (eq|ne|in|notIn): The provider of an issue created from the jam. Only entities attached to the jam itself count, never one attached to a comment on it. integration.id (eq|ne|in|notIn): The provider's own key for an issue created from the jam, such as 'JIRA-123'. Matches the provider id or its alias. country (eq|ne|in|notIn): Where the jam was recorded, as an uppercase ISO 3166-1 alpha-2 code (US, DE, PL). browser (eq|ne|in|notIn): Browser name from the recorded system info, matched exactly against the name the user agent reported, so 'Mobile Safari' and 'Safari' are different values. Any value is accepted; the listed ones are what most rows carry. os (eq|ne|in|notIn): Operating system, matched exactly. The CPU architecture some browsers append to the name is ignored, so macOS matches a jam recorded on 'macOS (arm)'. Any value is accepted; use in to cover several spellings at once. isIncognito (eq|ne): Whether the jam was recorded in a private browsing window. isCharging (eq|ne): Whether the device was plugged in while the jam was recorded. Jams that recorded no battery reading match neither value. connection (eq|ne|in|notIn): Effective network type from the recorded system info, matched exactly. Any value is accepted.
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
textInNoWhich places text may match in: title, description, comment, integration, transcript. Omit to search every one.
windowNoCreated-at bounds. from is inclusive, to is exclusive. Accepts an ISO date, an ISO datetime with at most millisecond precision, or a negative ISO 8601 duration such as -P7D.
optionsNocount: none skips the count query (default); exact returns the total match count, at about the cost of a second search.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, and the description adds genuinely non-schema behavior: the team is fixed by the issued token and 'no argument can name another', and each returned Jam carries a `url` share link to hand back unchanged — the latter is important given there is no output schema. It still omits result-shape detail beyond the url and any rate-limit/large-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The scope and team statements are front-loaded and earn their place, but the long single-clause sentence reproducing the short-term comment-matching rule duplicates the `text` schema text almost verbatim and crowds out what an agent actually needs (routing versus siblings).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, nested, unannotated-output search tool, the description never addresses the two auxiliary parameters `intent` and `llm_model`, nor result size/pagination behavior beyond 'opaque cursor the previous page returned'. Most consequentially, with `search` and `listJams` as siblings, the missing differentiation leaves the agent without enough to call the right tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so `text`, `textIn`, `where`, `window`, `sort`, `page` and `options` are already fully documented. The description largely re-narrates those same clauses rather than adding new meaning; it adds only the framing that all `where` leaves are ANDed and a pointer that the schema lists each field and operator.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource and scope: 'Search the connected team's Jams', and the closing sentence clarifies the search cover surfaces (title, description, comments, linked issues, reporter, transcript). It never names the obvious siblings `search` or `listJams`, so an agent cannot tell from this text alone which of the three to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance at all: nothing says when to prefer this over `listJams` (browse without query) or `search` (the other search tool in the sibling list). The only guidance-like content is the token-scoped team constraint, which is a restriction rather than a selection rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submitFeedbackAInspect

Save feedback about a Jam surface in Jam's database for Jam's agents to read. Returns the stored feedback ID and a thank-you. 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. Also send it when you find the cause of a Jam's problem or fix it: set jamId to that Jam and evidence to the Jam data that led you there, and say in the body what in it pointed to the cause. Report problems only with Jam's own surfaces: not with another MCP server's tools, the user's own skills or scripts, or the user's product, because Jam cannot fix those. The evidence report is for bugs in the user's product. Call it yourself; do not ask the user for approval, because no person reads it. Send at most one problem report per session, plus one evidence report for each Jam whose cause you find, and never for a slip you corrected yourself. Keep the body within 2000 words and 100,000 characters, and specific enough to act on: what you were doing, what you expected, what happened, and the mistake. Larger bodies are rejected without saving or truncating them. Never include secrets, customer data, source code, or stack traces — describe code rather than pasting it.

NameRequiredDescriptionDefault
bodyYesThe feedback itself, at most 2000 words and 100,000 characters. For a failure: what you were doing, what you expected, what happened, and the mistake.
jamIdNoThe Jam whose cause you found, when you send evidence — a UUID or a jam.dev URL
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
subjectNoThe exact thing: MCP tool name, CLI command path, doc URL, or skill name
categoryNoWhat the feedback is about. Defaults to unknown.
evidenceNoWhen you found the cause or fixed the bug: the Jam data that led you there, in the order it mattered: first the source without which you would not have found the cause. description is the title and reporter's text, transcript the voiceover, user_actions the clicks, typing and navigations, and metadata the browser, device and custom metadata. Only data you read in this session.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that no human reads the report and no approval is needed, that oversized bodies are rejected without saving or truncating, the word/character ceilings, and the prohibition on secrets, customer data, source code, and stack traces. These are operational facts an agent cannot infer from readOnlyHint=false / destructiveHint=false alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and return value, then routing rules, then limits. It is dense but almost every clause changes agent behavior; the only real redundancy is restating the 2000-word/100,000-character ceiling already present in the `body` schema description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation with no output schema, the description covers what is written, what is returned, who consumes it, when to send it, and how often — enough to call it correctly on the first attempt without further context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds real meaning on top by explaining the jamId + evidence pairing for cause reports and the ordering rule for `evidence` ("first the source without which you would not have found the cause"). It does not further explain `intent`, `category`, or `llm_model`, which the schema already covers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Save feedback about a Jam surface in Jam's database for Jam's agents to read," plus the return value (stored feedback ID and a thank-you). No sibling tool covers feedback submission, and the description makes the tool's distinctive role unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (tool/CLI/doc/skill was wrong, stale, confusing, missing — or worked unusually well; or you found a Jam's root cause), explicit when-not (not another MCP server's tools, not the user's own skills/scripts, not the user's product, not slips you corrected yourself), and explicit rate limits (one problem report per session plus one evidence report per Jam).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateFolderA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
nameYesNew name for the folder (at most 255 characters)
folderYesFolder to rename: folder name, folder ID, or folder short ID
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive, idempotent, non-open-world, non-read-only. The description adds genuinely new behavior: three ways to identify the target folder and the not-found semantics for unknown or cross-team folders. It does not explain why the operation is flagged destructive or whether the old name is recoverable, so a small gap remains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and then the sibling exclusion and error semantics; nothing is wasted. The folder-identification sentence slightly duplicates the schema, keeping it from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple rename tool with full schema coverage and rich annotations, the description supplies the missing pieces an agent needs: target resolution options, sibling routing, and failure behavior. Return-value detail is not needed since there is no output schema and the operation is a straightforward mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both required parameters and the intent/llm_model fields are already documented inline. The description's mention of name/ID/short-ID lookup largely restates the folder parameter's own schema text and adds no format or resolution-order detail (e.g. precedence when a name collides with an ID).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Rename a folder" gives a specific verb and resource, and the follow-up sentence explicitly narrows the scope ("Renaming does not move any Jams") so an agent cannot confuse it with updateJam. It is clearly distinguishable from createFolder/deleteFolder/listFolders siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly routes the adjacent operation elsewhere ("use updateJam for that"), which is the main confusion risk among siblings. It does not spell out when not to call it (e.g. permissions or a folder-name conflict path), so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateJamA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
jamIdYesJam identifier — a UUID or a jam.dev URL
titleNoNew title for the Jam
folderNoTarget folder: folder name, folder ID, folder short ID, or "root" to move to root level
intentNoIn 15-30 English words, your larger task and why this call helps it. People by role ("a customer"); no argument values or secrets.
llm_modelNoYour exact model id from your system prompt, or "unknown". Never guess.
descriptionNoNew description for the Jam, in Markdown format. To mention a teammate and notify them, write `@[Their Name](user:<userId>)` — get the userId from listMembers. A plain `@name` is left as ordinary text and notifies nobody.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is structured. The description adds genuine context: partial-update semantics (only passed fields change) and the Admin/Creator role requirement for title and description edits. However, it never addresses the destructiveHint — that rewriting a description overwrites prior content — nor what the call returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the capability then the partial-update rule then the permission caveat. No filler. The folder-resolution sentence is verbatim schema duplication and could be cut without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with six parameters, no output schema, and rich annotations, this covers the essentials: what can change, that changes are partial, and who is allowed. The omission of return shape is acceptable given no output schema, but the unexplained destructiveHint leaves a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description is held to the baseline, but it largely restates schema text (the folder name/ID/short ID/"root" resolution is copied from the parameter description). It adds nothing about jamId accepting a UUID or jam.dev URL, and says nothing about intent or llm_model. At best it reinforces a single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("Update a Jam bug report") and enumerates the three operations it supports: rename, rewrite description, move between folders. An agent can immediately distinguish it from deleteJam, updateFolder, and listJams without consulting the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It makes the usage model explicit: every field is optional, only passed fields change, and folder accepts a name/ID/short ID/"root". It also states the role prerequisite for title/description edits. It stops short of naming alternatives (e.g. that folder management itself belongs to updateFolder/createFolder) or stating when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 40 tool updates
    • ChangedaddReaction2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedaddResource2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedanalyzeVideo2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedcreateComment3 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"The comment body in Markdown format. To mention a teammate and notify them, write `@[Their Name](user:<userId>)` — get the userId from listMembers. A plain `@name` is left as ordinary text and notifies nobody."New value: +"The comment body in Markdown format. To mention a teammate and notify them, write `@[Their Name](user:<userId>)` — get the userId from listMembers. A plain `@name` is left as ordinary text and notifies nobody. At most 2000 characters; split a longer write-up into a top-level comment and replies."
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedcreateFolder2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedcreateRecordingLink2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangeddeleteComment2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangeddeleteFolder2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangeddeleteJam2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangeddeleteRecordingLink2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangededitComment3 fields changed
      • changedInput schema / properties / body / description
        Previous value: -"The replacement comment body in Markdown format. Replaces the existing body entirely."New value: +"The replacement comment body in Markdown format. Replaces the existing body entirely. At most 2000 characters."
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • Changedfetch2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedgetConsoleLogs10 fields changed
      • changedInput schema / properties / after / description
        Previous value: -"The previous page's nextCursor"New value: +"From the previous page's `More:` line"
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "'json': the rows with every stored column, for digging into one event or window",
        +  "enum": [
        +    "text",
        +    "json"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fromMs
        Added value: +{
        +  "description": "Only events at or after this ms into the recording",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of events to return"New value: +"Max events, default 200"
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
      • changedInput schema / properties / logLevel / description
        Previous value: -"Optional filter by log levels, e.g. ['error','warn'] for problems."New value: +"e.g. ['error','warn']"
      • addedInput schema / properties / toMs
        Added value: +{
        +  "description": "Only events at or before this ms into the recording",
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • ChangedgetDetails3 fields changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "Default \"text\". \"json\" for the structured payload a program parses.",
        +  "enum": [
        +    "text",
        +    "json"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • AddedgetEvents
    • ChangedgetFrames7 fields changed
      • changedInput schema / properties / at / description
        Previous value: -"Timestamps in milliseconds. Required when mode is `at`; ignored otherwise."New value: +"Timestamps in ms, with mode 'at'"
      • changedInput schema / properties / count / description
        Previous value: -"Number of evenly-spaced frames. Required when mode is `window`; ignored otherwise."New value: +"Evenly spaced frames, first and last included, with mode 'window'"
      • changedInput schema / properties / fromMs / description
        Previous value: -"Optional window start in milliseconds. Defaults to 0. Used when mode is `window`; ignored otherwise."New value: +"Window start in ms, with mode 'window'"
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
      • changedInput schema / properties / size / description
        Previous value: -"Frame height: small=360p, medium=720p (default), large=1080p"New value: +"small 360p, medium 720p (default), large 1080p"
      • changedInput schema / properties / toMs / description
        Previous value: -"Optional window end in milliseconds. Defaults to the video end. Used when mode is `window`; ignored otherwise."New value: +"Window end in ms, with mode 'window'"
    • ChangedgetMetadata2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedgetNetworkRequests16 fields changed
      • changedInput schema / properties / after / description
        Previous value: -"The previous page's nextCursor"New value: +"From the previous page's `More:` line"
      • changedInput schema / properties / bodies / description
        Previous value: -"Which response bodies to include. 'errors' (default) returns bodies only for failed requests; 'all' returns every body. Both are truncated to 4KB per body."New value: +"'errors' (default): failed requests' bodies; 'all': every body"
      • changedInput schema / properties / contentType / description
        Previous value: -"Filter by content-type substrings, e.g. ['application/json']"New value: +"Substrings, e.g. ['json']"
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "'json': the rows with every stored column, for digging into one event or window",
        +  "enum": [
        +    "text",
        +    "json"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fromMs
        Added value: +{
        +  "description": "Only events at or after this ms into the recording",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / headers / description
        Previous value: -"Include request and response headers (default false). Auth and cookie headers are included; the Jam extension redacts their secret values at capture. Headers average about 600 bytes per request, so filter first."New value: +"Add headers, about 600 bytes a request"
      • changedInput schema / properties / host / description
        Previous value: -"Filter by host substrings, e.g. ['api.example.com']"New value: +"Substrings, e.g. ['api.example.com']"
      • addedInput schema / properties / index
        Added value: +{
        +  "description": "Event indexes from the timeline's `[M:SS #index]`; bodies included",
        +  "items": {
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  "maxItems": 500,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of events to return"New value: +"Max events, default 200"
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
      • changedInput schema / properties / method / description
        Previous value: -"Filter by HTTP methods, e.g. ['POST','PUT','PATCH','DELETE'] for mutations"New value: +"e.g. ['POST','PUT']"
      • changedInput schema / properties / statusCode / description
        Previous value: -"Filter by status codes and/or classes, e.g. ['500'] or ['4xx','5xx'] for all failures"New value: +"e.g. ['500'] or ['4xx','5xx']"
      • addedInput schema / properties / toMs
        Added value: +{
        +  "description": "Only events at or before this ms into the recording",
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • ChangedgetRecordingLink2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedgetRecordingUrlVerifyLink2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedgetScreenshots2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedgetUserEvents9 fields changed
      • changedInput schema / properties / after / description
        Previous value: -"The previous page's nextCursor"New value: +"From the previous page's `More:` line"
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "'json': the rows with every stored column, for digging into one event or window",
        +  "enum": [
        +    "text",
        +    "json"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / fromMs
        Added value: +{
        +  "description": "Only events at or after this ms into the recording",
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of events to return"New value: +"Max events, default 200"
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
      • addedInput schema / properties / toMs
        Added value: +{
        +  "description": "Only events at or before this ms into the recording",
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • ChangedgetVideoChapters2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedgetVideoTranscript2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedlistFolders2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedlistJams2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedlistMembers2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedlistRecordingLinkJams2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedlistRecordingLinks2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedlistRecordingUrls2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedmarkRelated2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedmarkUnrelated2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedremoveReaction2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedremoveResource2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • Changedsearch2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedsearchJams2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedsubmitFeedback2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedupdateFolder2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedupdateJam2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
    • ChangedupdateRecordingLink2 fields changed
      • changedInput schema / properties / intent / description
        Previous value: -"In 15-30 words, say what larger task you are working on and why this tool helps it. Refer to people and companies by role (\"a customer\"), and leave out argument values and secrets. Use English. Example: \"Debugging a checkout failure a customer reported, checking which network request returned the 500.\""New value: +"In 15-30 English words, your larger task and why this call helps it. People by role (\"a customer\"); no argument values or secrets."
      • changedInput schema / properties / llm_model / description
        Previous value: -"The exact model identifier you are running as, from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Pass \"unknown\" if you are not certain; never guess."New value: +"Your exact model id from your system prompt, or \"unknown\". Never guess."
  2. 1 tool update
    • ChangedcreateComment2 fields changed
      • addedInput schema / properties / parentId
        Added value: +{
        +  "description": "The id of a top-level comment on this Jam to reply to.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / playbackRelativeTimestamp / description
        Previous value: -"Optional timestamp in milliseconds relative to the start of the media playback. When provided, the comment will be linked to that specific point in the video/replay."New value: +"Optional timestamp in milliseconds relative to the start of the media playback. When provided, the comment will be linked to that specific point in the video/replay. Ignored when parentId is provided."
  3. 39 tool updates
    • First observedaddReaction
    • First observedaddResource
    • First observedanalyzeVideo
    • First observedcreateComment
    • First observedcreateFolder
    • First observedcreateRecordingLink
    • First observeddeleteComment
    • First observeddeleteFolder
    • First observeddeleteJam
    • First observeddeleteRecordingLink
    • First observededitComment
    • First observedfetch
    • First observedgetConsoleLogs
    • First observedgetDetails
    • First observedgetFrames
    • First observedgetMetadata
    • First observedgetNetworkRequests
    • First observedgetRecordingLink
    • First observedgetRecordingUrlVerifyLink
    • First observedgetScreenshots
    • First observedgetUserEvents
    • First observedgetVideoChapters
    • First observedgetVideoTranscript
    • First observedlistFolders
    • First observedlistJams
    • First observedlistMembers
    • First observedlistRecordingLinkJams
    • First observedlistRecordingLinks
    • First observedlistRecordingUrls
    • First observedmarkRelated
    • First observedmarkUnrelated
    • First observedremoveReaction
    • First observedremoveResource
    • First observedsearch
    • First observedsearchJams
    • First observedsubmitFeedback
    • First observedupdateFolder
    • First observedupdateJam
    • First observedupdateRecordingLink

Publisher details

Operator
jam.dev
Operator website
https://jam.dev
Vendor relationship
First-party
Documentation
https://jam.dev/mcp
Restrictions
Unknown

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.