Dreambooth Studio
Server Details
Ask about your Dreambooth Studio photobooths: sessions, revenue, credits, projects, device status.
- Status
- Healthy
- Uptime
- 100.0% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Dreambooth-Studio/dreambooth-mcp
- GitHub Stars
- 0
- Server Listing
- dreambooth-mcp
TDQS
Scored across 22 tools
Each tool has a clearly distinct purpose, and descriptions explicitly guide when to use one over another (e.g., check_generation vs. get_booth_draft vs. get_project; refine_booth vs. update_booth_draft). Money-related tools (get_revenue_summary, get_wallet_transactions, get_credits) have nuanced but well-documented boundaries, minimizing misselection.
Nearly all tools follow a consistent snake_case action_object pattern (start_frame, create_booth, get_project). The only minor deviation is connection_status, a noun phrase rather than a verb-led name, but it remains readable and consistent in casing.
22 tools is on the high side for a single server and exceeds the typical 3–15 sweet spot; however, the domain is broad (booth design, frame design, account, analytics) and each tool appears to have a distinct role. Still, the count feels heavy and could likely be consolidated.
The surface covers creation and analytics well but has notable gaps: no tools to update or delete existing booths, filters, or frames (explicitly sent to dashboard), and no way to list existing frames or filters. These missing operations could cause agent failures for common lifecycle requests, though core creation workflows are supported.
Available Tools
22 toolscheck_generationCheck background workARead-onlyIdempotentInspect
Report on background work started by start_frame, refine_frame, start_booth, refine_booth or create_booth. Always pass the jobId that the start/refine/create call returned — keep it for the rest of the conversation, because an id keeps working for the full 15 minutes even if the connection re-authenticates partway through, and calling with no arguments does not. With no arguments it reports the most recent job of any kind, which is a convenience for when the id was lost, not the normal way to call it. Designing a booth takes 1-3 minutes, a redraw about a minute, creating a booth 2-6 minutes: tell the operator that, then poll about every 15 seconds. While it says 'running', nothing exists yet — relay the progress line if there is one, tell the operator it is still going, and wait 10-15 seconds before calling again rather than polling tightly. When it says 'done': a frame job carries imageUrl, threadId and generationId (a preview — nothing saved until save_frame); a booth design carries draft{…} (a draft — nothing created until create_booth); a booth creation carries booth{slug, boothUrl, projectId} — the one case where something now exists. This reads a status and creates nothing, so it is always safe to call.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | No | The id a start/refine/create tool returned. Pass it whenever you have it. Omit only if it was lost, which falls back to the most recent job listed for this connection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| what | Yes | |
| booth | No | |
| draft | No | |
| error | No | |
| jobId | No | |
| state | Yes | |
| layout | No | |
| imageUrl | No | |
| progress | No | |
| threadId | No | |
| canvasWidth | No | |
| canvasHeight | No | |
| dashboardUrl | No | |
| generationId | No | |
| placeholderCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, and the description reinforces this by saying it 'creates nothing' and 'is always safe to call.' It goes well beyond the annotations by explaining that 'running' means nothing exists yet, that frame and design outputs are only previews/drafts until saved or created, and that booth creation is the one case where something exists afterward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense and front-loaded: purpose, calling convention, polling cadence, and per-status payload meanings each appear in a logical order. Every sentence earns its place because removing any section would lose operational details needed for correct use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the annotations cover safety, the description still adds the missing operational picture: time estimates, polling intervals, what each done-state payload means, and the distinction between previews, drafts, and created resources. An agent can call this tool correctly end-to-end based on the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already describes jobId, the description adds important operational meaning: the id must be kept for the conversation, works for 15 minutes even across re-authentication, and omitting it silently falls back to the most recent job. This is exactly the kind of parameter behavior an agent needs to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Report on background work') and explicitly names the five starting tools it complements. This clearly distinguishes check_generation from all sibling tools such as start_frame or save_frame.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit calling rules: always pass the returned jobId, use the no-argument form only as a recovery fallback, and poll every 15 seconds while waiting. It also tells the agent to wait 10-15 seconds rather than polling tightly and explains what to do with the results, which is actionable guidance an agent can follow without guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_accountConnect a Dreambooth accountAInspect
Connect this conversation to the person's Dreambooth Studio account. The answer's status says what happened. already_connected: an account is connected; nothing to do. awaiting_approval: it returns a link the person opens in their own browser to sign in with Google and approve. A Google account with the same email as an existing Dreambooth account connects that account. Ask them to open it and say when they are done; do not call this tool again while waiting. use_client_sign_in: this client connects accounts through its own app or connector settings, where they can sign in with an email and password or with Google, so no link is returned. Ask them to connect Dreambooth there (the client also asks by itself when a tool needs an account), then repeat their question. Either way, someone who has no Dreambooth account yet gets one when they sign in. Call this when another tool reports that no account is connected, or when someone asks to connect or switch accounts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| No | ||
| status | Yes | already_connected | awaiting_approval | use_client_sign_in |
| authUrl | No | Open in a browser to approve. Present only with awaiting_approval. |
| message | Yes | |
| expiresInMinutes | No | |
| createsAccountIfNeeded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag it as non-readonly, open-world, non-idempotent. The description goes well beyond that, enumerating the three possible statuses, explaining that a link is returned for awaiting_approval but not for use_client_sign_in, that accounts are created on first sign-in, and that repeated calls while pending are improper. This is rich behavioral context an agent could not infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and then structured by status branch, which is the right shape. It is somewhat long and repeats the 'ask them to...' instruction pattern, but nearly every sentence carries an actionable distinction (link vs no link, don't recall while waiting).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an OAuth-style connect flow with an output schema covering status, the description supplies everything an agent needs: trigger conditions, per-status handling, and the constraint against premature re-invocation. Return-value mechanics are correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is no parameter semantics to document; the description correctly avoids inventing any. Per the zero-parameter baseline this caps at 4 rather than 5, since there is no schema content for the description to enrich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Connect this conversation to the person's Dreambooth Studio account') and the scope of the action. It is clearly distinguishable from siblings like connection_status or check_generation, which merely report state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call: 'Call this when another tool reports that no account is connected, or when someone asks to connect or switch accounts.' It also gives a when-not-to-act rule ('do not call this tool again while waiting'), which is unusually strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_statusCheck Dreambooth connectionARead-onlyIdempotentInspect
Whether this conversation currently has a Dreambooth account connected, and which one. Call this if you are unsure whether to run connect_account first. Cheap and read-only — it does not contact Dreambooth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| Yes | ||
| phase | Yes | |
| message | Yes | |
| connected | Yes | |
| waitingSeconds | Yes | How long the current device flow has been pending |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive traits. The description adds genuinely new context beyond those: 'Cheap and read-only — it does not contact Dreambooth.' This discloses that no network call occurs, which is valuable and not derivable from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with the core purpose, followed by usage guidance and behavioral disclosure. Every sentence earns its place with no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple parameterless status check: the description covers purpose, when to call, and behavior (no external contact), while annotations carry the safety profile and the output schema presumably documents the return value. Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing the description must explain; the 100% schema coverage and 0-param signature make parameter documentation a non-issue. The baseline for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: report whether a Dreambooth account is connected to the current conversation and which one. It implicitly distinguishes itself from siblings — it concerns connection state, not projects, credits, revenue, or wallet data — and names its direct sibling (connect_account) for contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit, actionable guidance: 'Call this if you are unsure whether to run connect_account first.' This names the relevant alternative and the condition that selects this tool. It lacks an explicit when-not-to-use clause, but for a cheap status check that is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_boothCreate the boothAInspect
Create the booth from a finished draft — the step that makes something real, live at its public link. Call it only after the operator has seen the draft via check_generation and agreed to create it; the title and link name (slug) default to the draft's unless the operator chose others. It reads the draft first (so everything set with update_booth_draft — settings, frames, filters, AI effect — is carried), checks the link name, draws the booth's own three photo-strip frames (3 images, up to five minutes), adds three starter frames from the catalogue and the Studio's default 'Normal' filter the way dreambooth.app/new does, then creates the booth with the draft's welcome design, background, colour theme and capture mode. Frames saved with save_frame and filters made with create_filter on this connection are carried automatically; ids can also be passed. Tell the operator it takes 2-6 minutes. Returns a job id; check_generation reports progress and, when done, the booth's public link, id and a dashboard link. If the link name is taken it stops before drawing anything — ask for another and call again. Creating twice with different link names makes two booths. The booth is live (unlisted) at once; there is no tool that edits or deletes a booth — changes happen in the dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | The link name: lowercase letters, digits and single hyphens (dreambooth.app/<slug>). Leave unset to use the draft's proposed slug. | |
| title | No | The booth's name. Leave unset to use the draft's title (as shown by check_generation / set with update_booth_draft). | |
| draftId | Yes | The draft to create, from check_generation. | |
| frameIds | No | Ids of frames to include — e.g. a frame the operator just saved with save_frame. Starter frames are added anyway. | |
| filterIds | No | Ids of filters to include — e.g. one the operator just made with create_filter. The default 'Normal' filter is added anyway. | |
| captureMode | No | Leave unset to keep what the draft proposed ('standard' = classic strip, 'frame-based' = frame mode). | |
| aiEffectTitle | No | The title of a public AI effect to add, exactly as the operator named it. Leave unset for none. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| slug | No | |
| what | Yes | |
| error | No | |
| jobId | Yes | |
| state | Yes | |
| draftId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are sparse (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) and carry no contradiction — the description's mutation claim matches readOnlyHint=false, and idempotentHint=false matches 'creating twice makes two booths'. The description then goes far beyond annotations: it discloses the slow async nature (2-6 minutes, frames up to five minutes), that it reads draft state first, the early-stop failure mode when the slug is taken, that the booth is live/unlisted immediately, and the side effects of adding starter frames and the default filter. This is exemplary behavioral disclosure for a mutating, non-idempotent tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long (13 sentences), but it is front-loaded with purpose and logically sequenced: purpose → precondition → process → parameter defaults → timing → return value → failure mode → idempotency caveat → edit/delete limitation. Every sentence carries unique information for a genuinely complex tool (7 params, async, stateful, non-idempotent). There is slight redundancy in enumerating the draft-carried fields and the drawn-frame steps, but for this complexity the density is justified. A 5 would require trimming; 4 is fair.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool this complex — asynchronous, stateful, non-idempotent, with side effects and a failure path — the description is remarkably complete. It covers preconditions (draft seen and approved), the full process (read draft, check slug, draw frames, add starters/filter, create), timing (2-6 min), the return shape (job id; check_generation yields link, id, dashboard link), the slug-collision recovery path, and the absence of any edit/delete tool. The output schema exists and handles return details, so the description's inclusion of return context is bonus. The only omission, authentication requirements, is covered by sibling tools connect_account/connection_status and annotations. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter (slug, title, draftId, frameIds, filterIds, captureMode, aiEffectTitle) already carries a solid schema description with patterns and 'leave unset' defaults, so the baseline is 3. The description adds genuine value beyond the schema by explaining the cross-tool relationship: 'Frames saved with save_frame and filters made with create_filter on this connection are carried automatically; ids can also be passed.' This clarifies that frameIds/filterIds are optional overrides on top of auto-carried state — context the schema alone cannot convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening phrase 'Create the booth from a finished draft — the step that makes something real, live at its public link' states a specific verb (create), a precise resource (booth), and the defining precondition (finished draft, going live). This cleanly distinguishes it from siblings like update_booth_draft (draft editing), check_generation (progress reporting), and start_booth. An agent can tell them apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call it ('only after the operator has seen the draft via check_generation and agreed to create it'), which sibling to rely on afterward (check_generation reports progress and the public link), and what NOT to expect ('there is no tool that edits or deletes a booth — changes happen in the dashboard'). The non-idempotency warning ('Creating twice with different link names makes two booths') is critical routing guidance. Nothing 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.
create_filterCreate a photo filterAInspect
Create a new photo filter on this operator's account from a description of the look they want — 'warm and slightly faded', 'high contrast black and white'. Translate the description into the adjustment numbers yourself; the ranges are in the schema. Call this only when the operator asks for a filter to be CREATED. It does not change an existing filter, and there is no tool that does — to edit or delete one, send them to the dashboard. Creating the same filter twice makes two filters, so do not retry a call that may have gone through.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | What the operator will see in their filter list. Use their words if they named it; otherwise a short descriptive name, not 'Untitled'. | |
| isPublic | No | Leave unset unless the operator explicitly asks for the filter to be shared. Default is private to their account. | |
| adjustments | Yes | Only include what the operator asked to change. An omitted adjustment keeps its neutral value; sending every field at its neutral value creates a filter that does nothing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| kind | Yes | |
| name | No | |
| isPublic | No | |
| previewUrl | No | |
| adjustments | No | |
| dashboardUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal a non-read-only, non-idempotent operation, and the description adds concrete behavioral context: creating the same filter twice yields two filters, no existing filter is modified, and retries after uncertainty should be avoided. This adds real value beyond the annotations rather than contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose and translation duty, explicit trigger condition, edit/delete routing, and non-idempotency warning. It is compact enough to read quickly while conveying all operation-critical guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex create operation with nested parameters, an output schema, and annotations, the description covers the ambiguous natural-language-to-numbers mapping, the no-edit/delete limitation, and the duplicate risk. Nothing needed for correct invocation is missing; response shape is already supplied by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a description, so the baseline is high. The description still adds useful semantics by instructing the agent to translate look descriptions into adjustment numbers, to include only what the operator asked to change, and to treat omitted adjustments as neutral. That is valuable but not essential given the schema's already detailed parameter docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: create a new photo filter on the operator's account from a natural-language description. It also distinguishes itself from siblings by explicitly stating there is no edit/delete tool, so an agent won't confuse this with duplicate_project or preview_filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition — 'Call this only when the operator asks for a filter to be CREATED' — plus an explicit exclusion: it does not change an existing filter and edit/delete requests should be sent to the dashboard. It also advises against retrying calls that may have gone through, which is directly actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_projectDuplicate a boothAInspect
Copy one of this operator's existing booths, with all of its settings, into a new one. Use it when they want another booth 'like' one they already run — a second location, a one-off event, a variant to experiment on. Call list_projects first to get the project id; the operator will name the booth, not its id. The copy is named after the original and is not published at the original's public address, so it is safe to make and they can rename it in the dashboard. To design a NEW booth from a description, use start_booth instead of this; there is no tool that edits or deletes a booth that already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The id of the booth to copy, from list_projects. Not its name or slug. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| kind | Yes | |
| slug | No | |
| title | No | |
| isActive | No | |
| copiedFrom | No | |
| dashboardUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is not read-only, not idempotent, and not destructive. The description adds meaningful behavior: the copy is named after the original, is not published at the original's public address, is safe to make, and can be renamed in the dashboard. No annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then efficiently covers when to use, prerequisites, side effects, and alternatives. Every sentence contributes useful guidance with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, a high-coverage schema, and an output schema, the description is fully complete. It covers use cases, prerequisite steps, post-copy behavior, safety, renaming, and the relevant alternative tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented as the id from list_projects, not a name or slug. The description reinforces this but adds no genuinely new semantic detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Copy') and resource ('one of this operator's existing booths'), and clarifies it copies settings into a new booth. It also distinguishes itself from start_booth, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('when they want another booth like one they already run'), names the prerequisite list_projects call, and directs users to start_booth for building a NEW booth from a description. This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_booth_draftRead a booth draftARead-onlyIdempotentInspect
Read a booth draft by its draftId — the same summary check_generation gives for a finished design, plus everything the draft has been given since (settings, chosen frames, filters, AI effect). Use it when the job from start_booth is no longer tracked, to show the draft again before create_booth, or to confirm what update_booth_draft applied. Reads only; nothing is generated or created. A draft lives 7 days on the operator's account.
| Name | Required | Description | Default |
|---|---|---|---|
| draftId | Yes | The draft, from check_generation or a previous tool result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| what | Yes | |
| draft | No | |
| error | No | |
| jobId | Yes | |
| state | Yes | |
| draftId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable non-obvious context: reads-only with no generation/creation, a 7-day lifetime on the operator's account, and that the result includes the full draft state accumulated since check_generation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler; the core read behavior and key scoping detail are front-loaded, followed by concrete use cases and the lifetime constraint. Every sentence contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with a full output schema and safety annotations, the description covers behavior, usage timing, data scope, and retention. Nothing essential is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning by specifying the draft is identified by draftId and that the value originates from check_generation or a previous tool result. This helps the agent source the parameter correctly beyond the schema's pattern and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('Read') and resource ('booth draft by its draftId') and differentiates it from related tools by noting it returns the same summary as check_generation plus accumulated draft data. It is clearly distinguishable from create_booth and update_booth_draft.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete when-to-use scenarios: when the start_booth job is untracked, before create_booth, or to confirm update_booth_draft changes. It does not explicitly name tools to avoid, but the referenced workflow tools make the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creditsGet AI credits and planARead-onlyIdempotentInspect
This operator's remaining AI credit balance and their current subscription plan, including when it ends. Call this when they ask how many credits are left, whether they can still run AI effects, or what plan they are on. Credits are separate from wallet money — do not confuse the two.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | Subscription package name |
| credits | Yes | AI credits remaining. NOT money — see get_wallet_transactions for that. |
| videoCredits | No | |
| sessionCredits | No | |
| subscriptionEndDate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a behavioral nuance by noting credits are separate from wallet money, which is beyond the read-only/idempotent annotations. It does not contradict the annotations, though it does not elaborate on side effects (which are unnecessary given the annotations).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear functional statement followed by usage guidance and a clarifying note, all in two sentences without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It provides sufficient context for the agent to decide when to call the tool, including the distinction from wallet transactions. It does not mention error cases or output format, but that is not essential for selection given the output schema is noted as existing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the description correctly remains silent on parameter details. There is nothing to add beyond the empty schema, and the coverage is effectively complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the operator's remaining AI credit balance and subscription plan, and explicitly distinguishes it from wallet money, making its purpose unambiguous even without seeing the output schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit call scenarios: 'when they ask how many credits are left, whether they can still run AI effects, or what plan they are on,' which directly guides the agent on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gallery_statsGet gallery statisticsARead-onlyIdempotentInspect
How much media this operator's booths have produced: total, still active, and expired past the retention window. Call this when the operator asks how many photos or videos a booth has taken, or whether media is being lost to retention. Returns counts only, not the media itself.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Limit to one booth. Omit for every booth this operator owns. | |
| includeExpired | No | Count media past its retention window too (default false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| totalCount | Yes | |
| activeCount | No | Still inside the retention window |
| expiredCount | No | Past retention and no longer downloadable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, side-effect-free read. The description adds value by clarifying the return payload ('counts only, not the media itself') and the retention-window behavior. This goes beyond what annotations convey, giving the agent concrete expectations about the output shape and scope. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences that immediately state the core purpose and then give a concrete usage trigger. It front-loads the most critical information (what it returns) and then explains when to use it. There is zero filler or redundant phrasing; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With the annotations covering safety, the schema fully documenting parameters, and an output schema present (though not shown), the description covers everything an agent needs to call this tool correctly. It explains the return type (counts only), the scoping to booths, and the retention nuance. Nothing essential is missing for a read-only statistics tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both projectId and includeExpired having clear descriptions. The tool description itself does not add any parameter-specific meaning beyond what the schema already provides; it only implies the general context of booths and retention. Since the schema fully documents the parameters, the description adds no extra semantic value, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement of what the tool does: it reports how much media an operator's booths have produced, broken into total, still active, and expired past retention. This is a specific verb-resource pair that clearly distinguishes it from sibling tools like get_sessions or get_revenue_summary. The phrasing 'Returns counts only, not the media itself' further disambiguates the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to call it: 'Call this when the operator asks how many photos or videos a booth has taken, or whether media is being lost to retention.' This gives clear triggering conditions. It does not name alternative tools for contrast, but the guidance is specific enough that an agent can decide without confusion. A minor omission is not stating when NOT to use it, but the positive triggers are strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet one booth in detailARead-onlyIdempotentInspect
Full detail for a single booth: its name, public link, currency, screen size, and the live status of the device running it — whether it is online, when it was last seen, app version, and camera/printer/internet state. Call this when the operator asks about one specific booth, or whether a booth is working. Get the project id from list_projects first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project id from list_projects |
Output Schema
| Name | Required | Description |
|---|---|---|
| devices | Yes | Empty when device monitoring is unavailable — not an error |
| project | Yes | |
| deviceCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, and the description adds no conflicting side effects. It clarifies that the returned status is live, though it does not mention error or rate-limit behavior; given the annotations, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the tool's purpose and output fields, followed by clear usage guidance and a prerequisite. There is no redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the description enumerates the output fields and use cases, the tool is fully specified for an agent to call correctly. It names the prerequisite tool and the distinguishing scenario, covering all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with a meaningful description for projectId, and the tool description reinforces that the id should come from list_projects first. This goes beyond the schema by providing the source of the parameter value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get' a single booth's full detail, listing specific fields (name, public link, currency, screen size, live device status). It is distinct from siblings like list_projects and get_sessions, so an agent can easily select this tool for one specific booth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to call this tool when the operator asks about one specific booth or whether a booth is working. It also instructs to get the project id from list_projects first, providing clear operational guidance and preventing misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revenue_summaryGet revenue summaryARead-onlyIdempotentInspect
Business revenue from this operator's photobooth sessions across EVERY payment channel — gateway payments, cash vouchers (cash collected at the booth) and discount vouchers — grouped by month or day and by currency, with extra-print revenue and AI-effect purchases reported separately. Use this for any question about income, revenue or omzet. It is also the right tool when wallet earnings look too small: cash and voucher money never reaches the wallet ledger, so for operators who take cash the wallet figure legitimately understates income.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date, ISO YYYY-MM-DD. Omit for all time. | |
| from | No | Start date, ISO YYYY-MM-DD. Omit for all time. | |
| groupBy | No | Bucket size (default month) |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| from | No | |
| found | No | |
| source | No | Which ledger the figures came from |
| totals | No | |
| buckets | No | |
| groupBy | No | |
| mixedCurrency | No | |
| reconciliation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnlyHint, idempotentHint, non-destructive), which is confirmed and not contradicted. The description adds genuinely useful behavioral context beyond the annotations: the fact that revenue includes cash and vouchers that bypass the wallet ledger, and that below-minimum-reporting threshold amounts are never recorded — disclosure that helps the agent interpret results correctly rather than trust a misleadingly low wallet figure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the primary purpose. There is minor redundancy (the cash/voucher channel enumeration appears both at the start and in the wallet explanation), but each sentence earns its place — the wallet-routing note is critical disambiguation. A tighter single-sentence pass could trim a few words without harming clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, 0-required tool with a rich output schema and complete annotations, the description is complete: it covers purpose, all revenue channels, grouping dimensions, currency, the extra-print/AI-effect subcategory, and the wallet understatement edge case. The output schema handles return-value details, so nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description doesn't need to re-document parameters. It reinforces the groupBy semantics by referencing grouping ('grouped by month or day and by currency') and adds the 'omzet' term that expands the query vocabulary the agent can map to this tool. No contradictions, and it doesn't over-repeat what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Business revenue from this operator's photobooth sessions') and enumerates the exact scope: every payment channel, grouping by month/day and currency, with extra-print and AI-effect revenue reported separately. It clearly distinguishes itself from siblings like get_wallet_transactions by explicitly flagging the wallet-vs-revenue distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('Use this for any question about income, revenue or omzet') and an exclusion with rationale: it is the right tool when wallet earnings look too small because cash/voucher money never reaches the wallet ledger. This proactively prevents the most likely misrouting to get_wallet_transactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sessionsGet photo sessionsARead-onlyIdempotentInspect
List the photo sessions recorded on this operator's booths, with totals. Call this when the operator asks how busy a booth has been, how many sessions ran in a period, or wants to inspect individual sessions. Supports date ranges, per-booth filtering, payment status and payment channel. For money totals rather than session counts, use get_revenue_summary instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many sessions to return (default 20, max 100) | |
| endDate | No | ISO date (YYYY-MM-DD) for the end of the range, inclusive | |
| startDate | No | ISO date (YYYY-MM-DD) for the start of the range, inclusive | |
| projectIds | No | Comma-separated project ids to limit the range to specific booths | |
| paymentSource | No | Payment channel, e.g. gateway, cash-voucher, discount-voucher | |
| sessionStatus | No | Session status filter | |
| transactionStatus | No | Payment status filter, e.g. settlement, pending |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | Sessions matching the filter, across all pages |
| returned | Yes | How many are in this response |
| sessions | Yes | |
| totalPages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat these. The description adds no extra behavioral context (e.g., auth, rate limits), but it does not contradict the annotations. Adequate given the existing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the primary action, and avoids redundancy. It efficiently covers purpose, usage, and alternatives without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (context signal), the description does not need to explain return values. It provides the purpose, when to use, and a clear alternative tool, which is sufficient context for an agent to decide when to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each of the 7 parameters having its own description. The tool description reinforces the date-range, per-booth filtering, payment status, and payment channel parameters but adds no new information beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool lists photo sessions with totals, and explicitly distinguishes it from get_revenue_summary by focusing on session counts rather than money totals. The verb 'List' and resource 'photo sessions' are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to call the tool ('when the operator asks how busy a booth has been, how many sessions ran in a period, or wants to inspect individual sessions') and when not to ('For money totals... use get_revenue_summary instead'). No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_transactionsGet wallet transactionsARead-onlyIdempotentInspect
This operator's wallet ledger: gateway earnings, withdrawals and refunds, newest first. Use for questions about the wallet, payouts or withdrawals. Do NOT use it to answer 'how much did I earn' — the wallet excludes cash and voucher income entirely, so for operators who take cash it understates real revenue. Use get_revenue_summary for income.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date, ISO YYYY-MM-DD | |
| from | No | Start date, ISO YYYY-MM-DD | |
| limit | No | Max rows (default 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | Rows matching the filter, across all pages |
| returned | Yes | |
| truncated | Yes | |
| transactions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful context about the data scope (excludes cash/voucher income, newest first) and the ordering, which goes beyond the annotations. It does not describe any side effects, but given the readOnly annotation, none are expected. The description is transparent about what data is included and what is not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long. The first sentence defines the content and ordering of the ledger. The second sentence provides usage guidance and the distinction from get_revenue_summary. It is tight, focused, and every word contributes to clarifying the tool's purpose and appropriate use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides all necessary context for an agent to decide when to use this tool: it explains the data scope, the ordering, the intended use cases, and the crucial caveat about cash/voucher income. It also points to the correct sibling tool for income queries, ensuring the agent selects the right tool for the user's intent. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters (from, to, limit) with descriptions and types. The tool description does not add any additional semantic meaning beyond what the schema already provides. Since the schema is complete, the description does not need to elaborate, but it also doesn't enhance understanding of the parameters. This is a baseline score for when schema handles the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it returns the operator's wallet ledger with gateway earnings, withdrawals, and refunds, ordered newest first. It also explicitly distinguishes it from get_revenue_summary by noting that wallet excludes cash and voucher income, and directs users to the sibling tool for income questions. This leaves no ambiguity about the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool (for questions about the wallet, payouts, or withdrawals) and when not to (for income questions, since it understates revenue for cash operators). It even names the alternative tool (get_revenue_summary) to use instead. This gives clear, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList boothsARead-onlyIdempotentInspect
List the photobooth projects this operator owns, with id, name, public link slug, whether it is active, and its currency. Call this first whenever the operator names a booth — you need the project id to filter any other tool by booth. Does not return booth designs or page layouts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| projects | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by specifying the exact fields returned and explicitly stating what is NOT included (designs, layouts), which helps set expectations. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The first sentence front-loads the key purpose and fields, the second provides usage guidance and a negative. Every clause contributes necessary information, and the description is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, an output schema exists to document return values, and annotations cover the read-only nature, the description provides all necessary context: what it returns, when to call it, and what it doesn't cover. An agent has everything needed to invoke it correctly without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there is nothing to describe. The baseline for 0 params is 4, and the description appropriately adds no unnecessary parameter detail. It doesn't need to compensate for schema gaps because there are no parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('photobooth projects this operator owns'), and enumerates the returned fields (id, name, public link slug, active status, currency). It also differentiates from siblings by positioning itself as the first call needed to obtain project IDs for filtering other tools, which clearly separates it from get_project and other getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Call this first whenever the operator names a booth' and explains why (you need the project id to filter any other tool by booth). It also states what it does not return ('Does not return booth designs or page layouts'), giving clear exclusion criteria. This is direct and actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_filterPreview a photo filterARead-onlyIdempotentInspect
Show what a filter would look like BEFORE creating it: the Studio renders its sample photo (or the operator's own preview photo, if they set one in the dashboard) through the exact pipeline the booth uses, and returns an image URL. Free and read-only — call it whenever the operator is designing a filter, adjust the numbers from their reaction ('warmer', 'less contrast'), preview again, and call create_filter with the same adjustments only once they are happy. Some adjustments (shadows, highlights, whites, blacks, clarity, dehaze, vibrance, texture) are applied by the booth but cannot be shown here; the result lists them as notPreviewed so you can say so. Nothing is created by this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| adjustments | Yes | Only include what the operator asked to change. An omitted adjustment keeps its neutral value; sending every field at its neutral value creates a filter that does nothing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | Yes | |
| sample | Yes | |
| previewed | Yes | |
| previewUrl | Yes | |
| adjustments | Yes | |
| notPreviewed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=true and destructiveHint=false, the description adds meaningful behavior beyond those signals: it uses either a sample photo or the operator's dashboard preview photo, runs the exact booth pipeline, returns an image URL, and reports certain adjustments as notPreviewed. It ends with 'Nothing is created by this tool,' reinforcing the read-only nature without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loads the core purpose, and every sentence carries useful information about behavior, usage, or limitations. It is slightly redundant with the annotations ('Free and read-only', 'Nothing is created'), but that redundancy is mild and reinforces the read-only contract rather than wasting space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations cover safety/idempotence, the output schema covers return values, and the schema covers all parameter semantics, the description fills the remaining contextual gaps: when to use it, how to iterate with create_filter, and what to tell the operator about non-previewed adjustments. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides excellent coverage of every adjustment parameter with descriptions and ranges, so the baseline is 3. The description adds extra value by naming which specific adjustments (shadows, highlights, whites, blacks, clarity, dehaze, vibrance, texture) cannot be previewed and will be listed as notPreviewed, which is parameter-level behavioral information not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement of what the tool does: 'Show what a filter would look like BEFORE creating it,' then explains the rendering pipeline and that it returns an image URL. It clearly distinguishes this from the sibling create_filter by emphasizing that nothing is created, so an agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call it 'whenever the operator is designing a filter,' gives an iterative workflow ('adjust the numbers from their reaction... preview again'), and tells the agent to switch to 'create_filter with the same adjustments only once they are happy.' It also warns about non-previewable adjustments, giving the agent concrete guidance on how to handle the output honestly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refine_boothRefine a booth draftADestructiveInspect
Change a booth draft from start_booth, using the draftId check_generation returned. what='welcome' redraws the welcome screen from an instruction ('warmer colours', 'bigger headline', 'less clutter') while keeping the design; add orientation 'phone' or 'laptop' to redraw only that screen (1 redraw) — without it both screens are redrawn (2). what='app-background' redraws the calmer backdrop behind the rest of the booth (1 redraw). what='everything' rebuilds the whole draft from a NEW full description (spends 1 of the draft's 3 full generations) — only when the operator wants a different booth, not a tweak. A draft has 5 redraws in total; check_generation reports what is left. Title, headline, link name and colours cannot be edited directly: they change only through a redraw instruction, or at create time (title, slug). Returns a job id; call check_generation. Call only when the operator asks for a change — never iterate on your own.
| Name | Required | Description | Default |
|---|---|---|---|
| what | Yes | Which part to change. 'everything' is a full rebuild from a new description. | |
| draftId | Yes | The draft to change, from check_generation's result for start_booth. | |
| instruction | Yes | For 'welcome' / 'app-background': what to change, in the operator's words, up to 300 characters — the current design is kept and only this is applied. For 'everything': the new full description of the booth, up to 1000 characters. | |
| orientation | No | Only with what='welcome': redraw just the phone (portrait) or laptop (landscape) screen. Omit to redraw both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| what | Yes | |
| error | No | |
| jobId | Yes | |
| state | Yes | |
| draftId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructive/non-idempotent/open-world; the description goes well beyond them by disclosing the redraw budget (5 redraws, 3 full generations), the exact cost of each 'what' and orientation combination, what cannot be edited directly, and that it returns a job id to be polled via check_generation. This is exactly the operational context an agent needs before consuming a scarce resource.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded with the most important constraints, but it reads as one long paragraph mixing usage rules, budget accounting, and parameter semantics. All content earns its place; minor structural cost only.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, budget-limited mutation tool with an output schema, the description covers prerequisites, mode semantics, budget accounting, and the required follow-up call. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description still adds real meaning: it explains enumeration members ('everything' rebuilds from a NEW full description), the interaction between 'welcome' and orientation (1 vs 2 redraws, omit to redraw both), and per-mode instruction intent and limits beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('change a booth draft') plus the exact resource ('from start_booth', identified by check_generation's draftId), and clearly separates itself from siblings like update_booth_draft and refine_frame by describing a redraw-based mutation rather than a direct edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when/when-not guidance: 'Call only when the operator asks for a change — never iterate on your own,' and routes 'everything' to the case where the operator 'wants a different booth, not a tweak.' It also names check_generation as the required follow-up and pre-requisite source of draftId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refine_frameRefine a photo frame designAInspect
Ask for a changed version of a frame in an existing design thread — 'darker', 'less ornament', 'make the flowers smaller', 'more gold'. Call it with the threadId that check_generation returned for start_frame, and ONLY when the operator asks for a change: every call spends part of the account's free daily allowance, so never iterate on your own initiative. It returns immediately with a job id; call check_generation for the new preview. Earlier versions in the thread stay available to save_frame, so a change the operator dislikes loses nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | What to change, in the operator's words. It is read with the whole thread as context, so 'the same but darker' works; there is no need to repeat the original description. | |
| threadId | Yes | The design thread, from check_generation's result for start_frame. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| what | Yes | |
| error | No | |
| jobId | Yes | |
| state | Yes | |
| threadId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false and destructiveHint=false, but the description adds crucial behavioral context: each call consumes part of the daily allowance, it returns immediately with a job id, and earlier thread versions remain available to save_frame, so reversibility is guaranteed. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: examples of prompts, required threadId source, strict when-to-use rule with cost rationale, immediate-return behavior, and retention guarantee. The most important constraints are front-loaded, and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's mutation profile, async behavior, cost implications, and interaction with sibling tools, the description covers all needed aspects: what it does, when to call it, how to get threadId, what to do after the call, and that changes are lossless. The output schema covers the return value, so nothing further is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds meaningful semantics: prompt is interpreted with thread context, so phrases like 'the same but darker' work without repeating the original, and threadId comes from check_generation's result for start_frame. This clarifies usage beyond the raw parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb action ('Ask for a changed version of a frame') and identifies the resource as an existing design thread, with concrete examples like 'darker' and 'make the flowers smaller'. It clearly distinguishes this tool from siblings such as start_frame (creating) and check_generation (polling).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ('ONLY when the operator asks for a change'), when not to use it ('never iterate on your own initiative'), where threadId comes from, and directs the agent to call check_generation for the resulting preview. The cost warning provides a clear reason for the constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_frameSave a generated frameAInspect
Save one generation from a design thread as a real frame in this operator's frame list, with its photo windows cut out. Call it only when the operator has chosen a result — pass the threadId and generationId that check_generation returned for it. This CREATES a frame: saving the same generation twice makes two frames, so do not retry a call that may have gone through. The frame is private to the account unless the operator explicitly asks for it to be shared. After saving, the operator picks the frame in a booth's frame settings; this tool does not assign it to a booth, and there is no tool that edits or deletes a frame.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | What the operator will see in their frame list. Use their words if they named it; otherwise derived from the description. | |
| isPublic | No | Leave unset unless they explicitly ask to share it. Default is private to their account. | |
| threadId | Yes | The design thread the generation belongs to. | |
| generationId | Yes | The generation to save, from check_generation. Each version in a thread has its own id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| name | No | |
| state | Yes | |
| frameId | No | |
| isPublic | No | |
| threadId | No | |
| canvasWidth | No | |
| canvasHeight | No | |
| dashboardUrl | No | |
| generationId | No | |
| thumbnailUrl | No | |
| placeholderCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations: it explains the non-idempotent behavior concretely ('saving the same generation twice makes two frames, so do not retry a call that may have gone through'), the privacy default ('private to the account unless explicitly asked to share'), and the lifecycle limitation (no edit/delete tool). Annotations already flag idempotentHint=false, but the description adds actionable consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each carrying essential information. The core action is front-loaded, the critical warning about duplicate saves is placed early, and the final sentence addresses scope boundaries. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with an output schema, the description is complete: it covers side effects, privacy, booth assignment, non-idempotency, and the absence of edit/delete tools. An agent has all the context needed to invoke correctly and set expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 provenance beyond the schema: it tells the agent that threadId and generationId come from check_generation, and that name should use the operator's words if provided. This connects parameters to the workflow, which is meaningful additional semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'save one generation... as a real frame in this operator's frame list, with its photo windows cut out.' It clearly differentiates from siblings like check_generation, refine_frame, and start_frame by naming the exact output and context. An agent can tell this is the frame-creation step, not a preview or edit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call it only when the operator has chosen a result' and instructs to pass the threadId and generationId returned by check_generation. It also states what this tool does not do: it does not assign the frame to a booth, and no tool edits or deletes frames. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch Dreambooth documentationRead-onlyIdempotentInspect
Search the Dreambooth Studio documentation and FAQ. Call this before answering any question about the product, hardware, printing, booth setup, guest payments, or troubleshooting — answer from the docs rather than from memory. Pages about Dreambooth's own plans and billing come back as a link only: share the link, and do not quote prices, plans or trials in the conversation. Works without a connected account.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 5) | |
| query | Yes | Search terms, in English or Indonesian | |
| locale | No | Docs language (default en) |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| locale | Yes | |
| results | Yes | |
| resultCount | Yes |
start_boothDesign a new boothAInspect
Design a complete photobooth (a 'booth') for this operator from a description — the Studio designs the welcome screen for phone and laptop, the in-booth background, the colour theme, the capture mode, a title and a link name, exactly as dreambooth.app/new does. Before calling, gather in chat what /new would ask and put ALL of it in the prompt: the occasion or business, the vibe or style, colours, and the language the booth should speak — there is no separate questions step. It returns a job id immediately; call check_generation, and do NOT describe the booth as designed or created until that says done. The result is a DRAFT with a draftId: nothing is in the operator's booth list until create_booth. Every call makes a new draft and spends 1 of its 3 full generations, and an account may start 10 drafts an hour — never call it speculatively or twice for one request; change a draft with refine_booth instead.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | The booth, in the operator's words plus what you gathered: occasion or business, vibe and style, colours, mood, anything that must appear. Up to 1000 characters. Do not name brands, characters or franchises; the image model refuses them. | |
| language | No | The language the booth's own text should be in, as a code: 'id', 'en', 'es'. Defaults to English — ask if the operator's booth is not in English. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| what | Yes | |
| error | No | |
| jobId | Yes | |
| state | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond what annotations already reveal (mutation, non-idempotent, non-destructive), the description discloses the async job-id behavior, the need to poll via check_generation, the cost of 1 of 3 full generations per call, the 10-drafts-per-hour rate limit, and that every call creates a brand-new draft. No statement contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries necessary operational information: the design scope, the pre-call gathering step, async completion, draft semantics, generation cost, rate limit, and the correct sibling for changes. It is front-loaded with the primary function and then flows logically through the call lifecycle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—asynchronous generation, quota consumption, rate limits, draft versus final state, and multiple sibling relationships—the description covers everything an agent needs to call it correctly and safely. The output schema handles return values, so the description does not need to explain those.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning beyond field names: it instructs the agent to gather occasion/business, vibe/style, colours, and language before composing the prompt, and warns against naming brands, characters, or franchises because the image model refuses them. This materially improves prompt quality beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Design a complete photobooth...' and enumerates exactly what the Studio produces (welcome screen, background, colour theme, capture mode, title, link name). It also distinguishes itself from siblings by clarifying the result is a DRAFT, not a finalized booth, which separates it from create_booth and refine_booth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-call guidance: gather in chat what /new would ask, put all of it in the prompt, then call check_generation and wait for done before treating the booth as designed. It also gives exclusions and alternatives: never call speculatively or twice, use refine_booth for changes, and use create_booth to bring the draft into the operator's booth list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_frameStart designing a photo frameAInspect
Start designing a new photo frame for this operator's booths from a description of the look they want — 'batik motifs in warm gold', 'minimal Scandinavian, lots of white space'. It opens a design thread and makes the FIRST version. It returns immediately with a job id; call check_generation to see the result, and do NOT describe the frame as made until that says so. The result is a preview in the thread — nothing is in the operator's frame list until save_frame is called with the generation they choose. To change a result, call refine_frame with the threadId that check_generation returns, rather than starting again. Every generation spends part of the account's free daily allowance, so do not call this speculatively, twice for the same request, or while another generation is still running.
| Name | Required | Description | Default |
|---|---|---|---|
| shape | No | The shape the photos are cut to. Defaults to rectangular. Not every layout comes in every shape; the Studio picks the closest available. | |
| layout | Yes | How many photos and how they sit. 'strip-3': the classic photo strip — 3 photos stacked, printed as a pair on a 4x6; 'strip-4': a taller strip — 4 photos stacked, printed as a pair on a 4x6; 'grid-4': 4 photos in a 2x2 grid on one 4x6; 'hero-3': one large photo with two smaller ones beneath it; 'pair-2': two landscape photos, one above the other. Ask if it is not obvious from what the operator said; 'strip-3' is what most people mean by a photobooth strip. | |
| prompt | Yes | What the frame should look like, in the operator's own words where possible: decoration, colour, mood, occasion. Not the photo slots — those come from the layout. Do not name brands, characters or franchises; the image model refuses them. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| what | Yes | |
| error | No | |
| jobId | Yes | |
| state | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the call is asynchronous and returns a job id, the result is only a preview, nothing enters the operator's frame list until save_frame, and each generation consumes the account's free daily allowance. This goes well beyond the readOnly/destructive hints already provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries operational value—purpose, asynchronous behavior, persistence path, refinement path, and cost warning. It is front-loaded with the tool's core purpose and then layers critical caveats in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex async generation tool, this description covers the full lifecycle: initiation, result checking, refinement, persistence, and cost implications. The output schema covers return details, so nothing needed to call and handle this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description enriches the parameters: it clarifies that prompt should be in the operator's own words and not include brands, explains layout meanings including the 'strip-3' default expectation, and notes that the Studio picks the closest shape when a layout doesn't support the requested one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Start designing a new photo frame' from a description of the desired look, and clarifies it 'opens a design thread and makes the FIRST version.' It clearly differentiates itself from sibling tools like check_generation, refine_frame, and save_frame by naming each one's role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing: call check_generation to see the result, call refine_frame with the threadId to change a result rather than starting again, and call save_frame to persist. It also gives negative guidance—do not call speculatively, twice for the same request, or while another generation is running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_booth_draftChange a booth draft's settingsADestructiveIdempotentInspect
Change a booth draft without a redraw: its title, link name, welcome button text, colours, capture mode, language, which frames and filters it carries, its AI effect, and the page settings the dashboard editor offers (photo count, countdown, timeouts, GIF/recording, retake, checkout, payment, result). Use it after check_generation shows the draft and the operator asks for one of these; what it sets is applied when create_booth runs. It cannot change the welcome headline or subtext of an AI-designed welcome (those are painted into the image — use refine_booth), and prices or packages are set in the dashboard. Answers at once with the updated draft, applied (what landed) and rejected (what did not, and why) — relay a rejection as a sentence, never as success. It never touches a booth that already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | The proposed link name (dreambooth.app/<slug>): lowercase letters, digits, single hyphens. Checked for availability; a taken one is reported, not stored. | |
| title | No | The booth's name (used as the title at create time). | |
| draftId | Yes | The draft to change, from check_generation or get_booth_draft. | |
| palette | No | Theme colours as #RRGGBB: primaryColor, secondaryColor, backgroundColor. Only the ones given change. | |
| subtext | No | Welcome subtext; same rule as headline. | |
| frameIds | No | Frames the booth should carry (replaces the draft's list): e.g. one saved with save_frame, or catalogue ids. create_booth adds starter frames anyway. | |
| headline | No | Welcome headline. Only drafts whose welcome is laid out as text accept it; on an AI-designed welcome it is painted into the image and the reply says to use refine_booth. | |
| language | No | Language code of the booth's own text: 'id', 'en', 'es'. | |
| settings | No | Page settings, as the dashboard editor has them, keyed by page: welcome{startWithPayment}, capture{captureCount 1-10, captureCountdown 1-15, prepTimeout, captureTimeout, selfPhotoDuration, gifEnabled, gifSpeed, recordingEnabled, recordingSpeed}, retake{enabled, retakeTimeout, maxRetakeCount, maxRetakeSession}, select{enabled, selectionTimeout}, frame{displayFrameTitle}, filter{enabled, useLivePreview, applyAfterCapture}, checkout{enabled, checkoutTimeout, promoEnabled}, payment{enabled, paymentTimeout}, result{resultTimeout, askUserConsent, emailEnabled, reprintEnabled, reprintTimeout}. Prices and packages are set in the dashboard, not here. | |
| filterIds | No | Filters the booth should carry (replaces the draft's list): e.g. one made with create_filter. The default 'Normal' is added anyway. | |
| buttonText | No | The welcome screen's button label, e.g. 'Mulai' or 'Start'. | |
| captureMode | No | 'standard' = classic strip, 'frame-based' = frame mode. | |
| aiEffectTitle | No | The title of a public AI effect to add, exactly as the operator named it; an empty string removes the one chosen before. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| what | Yes | |
| draft | No | |
| error | No | |
| jobId | Yes | |
| state | Yes | |
| applied | No | |
| draftId | Yes | |
| rejected | No | |
| slugAvailable | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description adds genuinely new behavior: what it sets lands only at create_booth time, that it 'never touches a booth that already exists', and that partial failures come back as applied/rejected that must be relayed as a rejection rather than success. This is non-obvious operational detail an agent could not infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the field enumeration comes first, then the routing condition, then exclusions, then return behavior. Every sentence earns its place, though the opening enumeration is long enough to be a little heavy for a single unbroken paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation tool with nested settings, the description covers scope, trigger, exclusions, partial-application semantics, and return handling even though an output schema exists. Nothing material an agent needs before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 further: frameIds/filterIds replace the draft's list, aiEffectTitle as an empty string removes the prior effect, and the slug is availability-checked ('a taken one is reported, not stored'). These add semantics beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Change a booth draft') and then enumerates exactly which settings it covers, so the agent knows the scope without opening the schema. It is clearly distinguished from refine_booth (AI welcome art) and from dashboard-only concerns (prices/packages).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: 'Use it after check_generation shows the draft and the operator asks for one of these', plus two named exclusions with alternatives ('cannot change... use refine_booth', 'prices or packages are set in the dashboard'). When-to-use and when-not-to-use are both present.
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 tool update
- Changed
search_docs1 field changed- added
Input schema / properties / query / maxLengthAdded value: +200
1 tool update
- Changed
connect_account2 fields changed- changed
Output schema / properties / authUrl / descriptionPrevious value: -"Open in a browser to approve. Absent when already connected."New value: +"Open in a browser to approve. Present only with awaiting_approval." - changed
Output schema / properties / status / descriptionPrevious value: -"already_connected | awaiting_approval"New value: +"already_connected | awaiting_approval | use_client_sign_in"
5 tool updates
- Added
create_booth - Added
get_booth_draft - Added
refine_booth - Added
start_booth - Added
update_booth_draft
7 tool updates
- Added
check_generation - Added
create_filter - Added
duplicate_project - Added
preview_filter - Added
refine_frame - Added
save_frame - Added
start_frame
1 tool update
- Changed
get_project3 fields changed- added
Output schema / properties / project / properties / screenSize / additionalPropertiesAdded value: +false - added
Output schema / properties / project / properties / screenSize / propertiesAdded value: +{ + "height": { + "type": "number" + }, + "width": { + "type": "number" + } +} - changed
Output schema / properties / project / properties / screenSize / typePrevious value: -"string"New value: +"object"
10 tool updates
- First observed
connect_account - First observed
connection_status - First observed
get_credits - First observed
get_gallery_stats - First observed
get_project - First observed
get_revenue_summary - First observed
get_sessions - First observed
get_wallet_transactions - First observed
list_projects - First observed
search_docs
Related MCP Connectors
Look up Momence members, class schedules, bookings and memberships, and handle front-desk actions.
Ask your customer portal and CRM anything, in plain English
- AgentioOAuthcom.agentio
Ask about your Agentio campaigns, Creator deals, and performance on YouTube and Meta. Read-only.
Ask your Rent Manager portfolio anything: live, read-only financials, rent roll, leasing.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables querying DeepVLab account statistics and model usage analytics, including login, user profile, usage analytics, and cost calculation.1Apache 2.0
- FlicenseAqualityBmaintenanceProvides AI assistants access to YOUREPT CRM admin data, including leads, students, teachers, lessons, payments, payouts, and financial reports, enabling natural-language queries about business metrics.17-
- AlicenseAqualityFmaintenanceProvides real-time Stripe subscription analytics including MRR, churn, failed payments, and expiring trials. Enables AI assistants to answer business health questions like 'How's my business doing?'8MIT
- FlicenseAqualityCmaintenanceEnables AI clients to query AxonHub admin data through natural language, including instance status, projects, channels, models, requests, and usage statistics, with read-only safeguards and sensitive-field redaction.8-
Glama MCP Gateway
Add one secure layer between your agents and this server.