Skip to main content
Glama

Server Details

AI video, images, music & SFX: Seedance 2.5, Veo 3.1, Kling 3.0, Nano Banana Pro, 20+ models.

Ownership verified
Status
Healthy
Uptime
93.9% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
popcraft-ai/popcraft-mcp
GitHub Stars
0
Server Listing
Popcraft MCP

TDQS

A3.9/5.0

Scored across 27 tools

Disambiguation4/5

Most tools target clearly distinct resources or modalities, such as generate_image/video/audio/3d, upscale vs generate, and projects vs media library. However, the five media-ingestion tools and the two job-status tools overlap in purpose, so an agent can misselect without carefully reading the environment-specific guidance.

Naming Consistency3/5

All names use the popcraft_ prefix and snake_case, which keeps them readable. But action/resource order is mixed: generate_image and show_elements are verb_noun, while effects_show, job_display, models_explore, and media_upload are resource-first, so the pattern is not fully predictable.

Tool Count2/5

27 tools is above the well-scoped range and includes several alternative upload paths and workflow helpers. The breadth is partly justified by the multi-modal platform, but the set is heavy and would benefit from consolidation.

Completeness4/5

The core creative lifecycle is well covered: media import/upload, model/effect/element discovery, image/video/audio/3D generation, upscaling, 3D postprocessing, workflows, projects, history, and credits. Gaps remain in management operations such as updating or deleting projects, media, elements, or generations, and there is no job cancellation tool.

Available Tools

27 tools
popcraft_balanceCheck Popcraft CreditsA
Read-only
Inspect

Get the user's available Popcraft credits and current plan. For transaction history use popcraft_transactions (coming soon).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds only what data is returned (credits and plan) and notes that the alternative endpoint is 'coming soon' — useful, but no auth requirements, caching, or return-shape detail.

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

Conciseness5/5

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

Two short sentences, no waste, with the primary purpose front-loaded ahead of the alternative routing. The '(coming soon)' qualifier earns its place by warning the agent that the alternative may not work yet.

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

Completeness4/5

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

For a zero-parameter read with no output schema, the description states what comes back (credits and plan), which is the key missing piece. It falls short only on disambiguating from popcraft_show_plans_and_credits, the sibling that appears to answer a near-identical question.

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

Parameters4/5

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

The tool takes zero parameters, so the schema carries no semantics to supplement and the baseline is 4. The description correctly implies a no-argument, user-scoped read with nothing for the caller to configure.

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

Purpose4/5

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

States a specific verb and resource: getting the user's available credits and current plan. It is understandable on its own, but it does not address the closest sibling, popcraft_show_plans_and_credits, whose name suggests overlapping 'plan/credits' coverage — an agent cannot tell from the description alone which of the two to prefer.

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

Usage Guidelines3/5

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

It routes transaction-history queries to popcraft_transactions, which is a genuine when-to-use alternative. However, it gives no guidance for the much nearer sibling popcraft_show_plans_and_credits, so usage for the overlapping case 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.

popcraft_effects_showPopcraft Effects GalleryA
Read-only
Inspect

Browse Popcraft's curated video effects (特效) — cinematic camera moves, VFX, and viral looks, each defined by a reference video + recipe prompt — plus the user's own saved effects. Returns effect ids, names, categories, preview videos, and the full recipe. TO APPLY AN EFFECT: call popcraft_generate_video with model = the effect's default_model_id, a medias entry {value: reference_video_url, role: "video"}, and a prompt that combines the effect's prompt with the user's subject (add the user's start image as role "start_image" or "image" if they provided one). Optionally filter by category or a query substring match on the name.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoCase-insensitive substring match against effect names (English + Chinese)
categoryNoFilter to one category, e.g. "action", "fpv", "vfx"

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds valuable context beyond that — the exact return fields and the downstream apply workflow — but says nothing about pagination, result limits, or rate behavior.

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

Conciseness4/5

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

Front-loads purpose, then the apply workflow, then optional filters. Slightly long but each sentence (purpose, returns, application mapping, filters) earns its place with no redundancy.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating return fields and fully explaining the downstream application path. Nothing an agent needs to browse and then apply an effect is missing.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters (query, category) are already documented in the schema. The description restates the filtering behavior without adding syntax or format detail beyond what the schema provides, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (Browse) and resource (Popcraft's curated video effects), enumerates what the effects contain (reference video + recipe prompt) and what the tool returns (ids, names, categories, previews, recipe). Clearly distinguishable from siblings like popcraft_show_elements or popcraft_models_explore.

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

Usage Guidelines5/5

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

Explicitly routes the agent: to apply an effect it names the sibling popcraft_generate_video and spells out the exact model/medias/prompt mapping. It also states the optional filtering conditions (category or query substring), leaving little to inference.

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

popcraft_generate_3dGenerate 3D Model (Popcraft)AInspect

Generate a 3D mesh (GLB) with Tripo3D from a reference image (image-to-3D) or a text prompt (text-to-3D). Use when the user wants a 3D model, mesh, game asset, printable object, VTuber/character base, or "turn this picture into 3D". Pass image_url (a GCS url from popcraft_media_import_url, popcraft_media_upload, or a prior popcraft_generate_image result) for image-to-3D — a single clean subject on a plain background, front or 3/4 view, works best; for a character use an A-pose/T-pose front view. Omit image_url and pass prompt for text-to-3D. Defaults: model_version "tripo-v2.5" (best quality/cost), texture true, pbr true, quad false (triangles — set true for a quad mesh that is easier to edit/rig in Blender; Tripo then returns FBX), geometry_quality/texture_quality "standard" ("detailed" costs more). smart_low_poly produces a game-ready low-poly mesh. style applies a Tripo preset (e.g. "person:person2cartoon", "object:clay", "object:steampunk") — list them via popcraft_models_explore with type:"3d". Set get_cost:true to preflight the exact credit cost WITHOUT submitting — always do this the first time so the user can confirm. Generation takes ~1–3 minutes. On success an interactive result card is shown and refreshes itself — do NOT poll in a loop; call popcraft_job_display at most once if no card is visible. The finished result URL is a downloadable GLB (or FBX when quad=true) that also appears on the Popcraft /model-3d workspace, where it can be refined further with popcraft_postprocess_3d (retopology, retexture, stylize, mesh completion, format conversion). The result includes project — mention where it was saved when the user did not pick a project. Never tell the user how long the job will take or quote any estimate of generation time — the result card shows progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
pbrNoGenerate PBR material maps (default true; requires texture)
quadNoQuad topology instead of triangles (default false). Better for editing/rigging in Blender; output becomes FBX.
styleNoOptional Tripo style preset id, e.g. "person:person2cartoon", "object:clay" — see popcraft_models_explore type:"3d"
promptNoText prompt (required for text-to-3D; optional refinement hint with an image). Max 500 chars.
textureNoGenerate textures (default true). false = white untextured mesh, cheaper.
get_costNotrue = return the exact credit cost WITHOUT submitting
image_urlNoReference image as a GCS https URL (from popcraft_media_import_url / popcraft_media_upload / a prior result) or gs:// URI. Omit for text-to-3D.
face_limitNoTarget face count, 1000–50000. Omit for adaptive.
project_idNoFile the result into this Popcraft project (id from popcraft_projects). Omit to use the user's current/last-used project (or a default).
project_nameNoFile the result into the project with this title, creating it if needed. Ignored when project_id is set.
model_versionNoTripo model version — default "tripo-v2.5"; "tripo-p1" is premium quality, "tripo-turbo" is fastest/cheapest
smart_low_polyNoGame-ready low-poly output (default false)
negative_promptNoWhat to avoid in the model
texture_qualityNoTexture detail — default "standard"
geometry_qualityNoGeometry detail — default "standard"

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover only the safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false), leaving the description to add the operational detail, which it does: ~1-3 min runtime, self-refreshing result card, no polling, cost preflight without submission, output format GLB vs FBX under quad, and post-generation refinement path. Strong value beyond structured fields.

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

Conciseness4/5

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

Dense but front-loaded: the verb+resource and mode split come first, then inputs, then defaults, then runtime/polling behavior. Every sentence carries an instruction, though the paragraph runs long and packs defaults, quality tiers, and operational caveats into one block that could be split for scannability.

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

Completeness5/5

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

With 15 parameters, no required fields, and no output schema, the burden of explaining returns falls on the description, and it delivers: result is a downloadable GLB (FBX when quad=true), appears on the /model-3d workspace, includes a `project` field to report, and is refinable. Nothing essential to correct invocation is missing.

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

Parameters4/5

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

Schema description coverage is already 100%, so the 3 baseline applies; the description still adds real meaning by naming sensible defaults (model_version tripo-v2.5, texture/pbr true, quad false, quality standard), explaining cost/quality tradeoffs for 'detailed' and tripo-p1/turbo, and giving concrete style preset ids. It stops short of covering every parameter (e.g. face_limit, negative_prompt, project_name are left to the schema).

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

Purpose5/5

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

States a specific verb (generate) and resource (3D mesh/GLB) and explicitly splits the two modes: image-to-3D via image_url and text-to-3D via prompt. It also names the sibling it hands off to (popcraft_postprocess_3d) and the discovery tool (popcraft_models_explore), so an agent can separate it from generate_image, generate_video, and postprocess_3d without opening a schema.

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

Usage Guidelines5/5

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

Gives trigger conditions ('user wants a 3D model, mesh, game asset, printable object, VTuber base'), mode selection rules, preflight guidance (get_cost:true 'always do this the first time'), anti-polling instructions with the job_display fallback, and where to list styles. Alternatives and exclusions are named explicitly.

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

popcraft_generate_audioGenerate Audio (Popcraft)AInspect

STOP FIRST if the ask is a VOICEOVER, narration, an ad read, an audiobook or podcast segment, character lines, or a multi-line script — or if a generated voice came back sounding robotic, flat or rushed: call popcraft_get_workflow_instructions { workflow: "voiceover" } and follow it instead of calling this tool directly. It owns the voice lock, the words-per-second budget and the ElevenLabs v3 performance tags ([laughs], [whispers], [sighs]) that are the ONLY emotion control on this path — a one-shot prompt sounds like TTS. One short line, a sound effect or a music bed belongs here — call it directly, no workflow needed. Generate audio with Popcraft — voices, sound effects, and music — from a text prompt: speech (kind:"tts", default), sound effects (kind:"sfx"), or music/BGM (kind:"music"). kind:"tts" REQUIRES voice_id (from popcraft_list_voices) — there is no default voice and a call without it is rejected — EXCEPT on model:"seed-audio", where omitting voice_id means AUTO voice (the engine casts a fitting voice from the text) and voice_description designs one in natural language ("低沉沙哑的中年男声", "warm young female voice, brisk"). seed-audio's voice is NOT deterministic across calls — for any multi-take script pin a voice_id or use model:"seed-tts" (native zh/Asian-language preset voices, provider:"seed" in popcraft_list_voices, directed via free-text instruction — not spoken, not billed). Seed voices only work on seed models and ElevenLabs voices only on ElevenLabs models. ElevenLabs TTS adds three delivery controls: speech_rate (0.5–2.0, default 1; it also shortens the billed length, since speech is charged per second), emotion (one of neutral, happy, sad, angry, excited, calm, nervous, frustrated, whispers, cheerful — applies to the whole take), and stability (0–1, default 0.5: LOW makes the voice expressive and obedient to inline v3 tags like [laughs] or [whispers], HIGH makes it consistent but largely deaf to them — lower it when tags are not landing). All three are TTS-only and are reported back under adjustments as ignored if sent with another kind. For kind:"sfx" or kind:"music", pass duration (seconds) to control length; omitted, the model default length is used (fixed-length song models — suno-chirp-v5, lyria-3-clip, lyria-3-pro — ignore duration). Those three are also billed FLAT per generation, not per second: lyria-3-clip is 8 credits for a ~30s clip and lyria-3-pro 16 for a song up to ~3min, so they are far cheaper for a music bed than their catalog rate suggests at a glance. Music/BGM picks: lyria-3-clip (Google Lyria 3, ~30s clip, instrumental or vocal — the default choice for a bed) or lyria-3-pro (full song up to ~3min, pro tier); music-v1 bills per second and is the cheap option for a short loop. Full songs with real vocals: model:"suno-chirp-v5" + kind:"music" — describe the song in prompt, or pass lyrics (with [Verse]/[Chorus] markers) to have it sing YOUR words, steered by tags (e.g. "synthwave, energetic, female vocals"), plus optional title and instrumental. Suno renders TWO takes per generation from the same render (no extra cost); both are kept by default so the user can listen to both — pass keep_all_takes:false to keep only the primary take, and clip_index (0 or 1) to choose which take is primary. Pick model via popcraft_models_explore (type:"audio") if unsure. Set get_cost:true to preview the exact credit cost WITHOUT submitting. If a result carries recovery_tool, call that tool immediately; do not explain or ask first. On success, an interactive result card is shown to the user and refreshes itself automatically until the job finishes — do NOT poll or re-check status in a loop. Call popcraft_job_display at most once, and only if this client did not render a result card or the user asks about the job again later. The result includes project — the Popcraft project the output was filed into; when the user did not pass project_id/project_name, mention it briefly (e.g. "saved to ") so they know where it landed. Never tell the user how long the job will take or quote any estimate of generation time — the result card shows progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo"tts" = text-to-speech (default), "sfx" = sound effect, "music" = background music
tagsNokind:"music" (Suno): comma-separated style tags (genre, mood, vocal type), e.g. "lofi, chill, no drums" — the strongest steering lever when `lyrics` is set
modelYesPopcraft model id, e.g. an ElevenLabs voice/music/sfx model or suno-chirp-v5 for full songs — list via popcraft_models_explore (type:"audio")
titleNokind:"music" (Suno): song title
lyricsNokind:"music" (Suno): full lyric sheet with [Verse]/[Chorus] section markers — the model sings exactly these words (custom-lyrics mode)
promptYesText to speak (kind:"tts"), or a description of the sound/music to generate (kind:"sfx"/"music"). With `lyrics` set, this is ignored by the song model — a short style description is fine.
emotionNokind:"tts" only: delivery emotion, default "neutral". Applies to the WHOLE take — for a shift mid-line, use an inline ElevenLabs v3 tag ([laughs], [whispers], [sighs]) instead.
durationNoLength in seconds for kind:"sfx"/"music" — omit to use the model default length. Ignored for kind:"tts" (length falls out of the script) and by fixed-length song models (suno-chirp-v5, lyria-3-*).
get_costNotrue = return the exact credit cost WITHOUT submitting
voice_idNoREQUIRED for kind:"tts" (optional in this schema only because sfx/music do not take it): the voice to speak with, from popcraft_list_voices. There is no usable default — a TTS call without it is rejected. Exception: model:"seed-audio", where omitting it opts into auto/described voice. Use the SAME id for every take of one script.
stabilityNokind:"tts" only: 0..1, default 0.5. LOW = expressive and obedient to inline performance tags; HIGH = consistent and largely ignores them. Lower it when [laughs]/[whispers] are not landing; raise it when a long script drifts in tone between takes.
clip_indexNokind:"music" (Suno): which of the two rendered takes is the primary output — 0 (default) or 1
project_idNoFile the result into this Popcraft project (id from popcraft_projects). Omit to use the user's current/last-used project (or a default). Errors if you don't own it.
instructionNomodel:"seed-tts" only — one free-text sentence of voice direction (accent/dialect, emotion, pace, persona), e.g. "用四川话说,像给同事讲教程,语速适中". Not spoken and not billed. Keep a constant persona clause across takes of one script. Ignored on other models.
speech_rateNokind:"tts" only: speaking speed, 0.5 (half) to 2.0 (double), default 1. Prefer rewriting the script to fit a target length — this is for a deliberate delivery choice, not for cramming words in. Also shortens the billed length, since TTS is charged per second of speech.
instrumentalNokind:"music": music with no vocals (for Suno this applies in description mode only — with `lyrics` set, it is ignored)
project_nameNoFile the result into the project with this title, creating it if it doesn't exist. Ignored when project_id is set.
keep_all_takesNokind:"music" (Suno): also deliver the other rendered take as a second result (default true — both takes come from the same render at no extra cost). Pass false to keep only the primary take.
voice_descriptionNomodel:"seed-audio" only — describe the voice to design in natural language ("低沉沙哑的中年男声" / "energetic young female voice"). Omit BOTH this and voice_id for pure auto voice. Ignored on other models.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover readOnly/openWorld/idempotent/destructive; the description adds substantial context beyond them: per-second vs flat billing, speech_rate's effect on billed length, that a voice_id-less TTS call is rejected, non-determinism of seed-audio voice, recovery_tool handling, the self-refreshing result card, and the project-filing side effect. This is a genuine behavioral disclosure well above the annotation floor.

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

Conciseness4/5

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

Well front-loaded with the critical routing gate in the first sentence, then organized by kind/model. It is long, but the length is largely justified by 19 parameters, three generation kinds and multiple model-specific branches. A few operational instructions (job_display, no-polling) border on redundant with the result-card note.

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

Completeness5/5

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

No output schema exists, yet the description covers return-side behavior (result card, `adjustments`, `project`, `recovery_tool`) and model/billing constraints. An agent has everything needed to invoke it correctly and to interpret the result without a schema.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description exceeds that by explaining cross-parameter interactions the schema cannot: model/voice compatibility (seed vs ElevenLabs voices), that speech_rate/emotion/stability are TTS-only and reported as ignored otherwise, seed-audio's voice_id-or-voice_description auto behavior, and that lyrics overrides prompt for Suno.

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

Purpose5/5

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

States a specific verb (generate) + resource (audio) + full scope (voices, sound effects, music) and immediately distinguishes itself from the voiceover workflow via the STOP FIRST gate. An agent can tell it apart from siblings like popcraft_generate_image/video without opening any schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative (`popcraft_get_workflow_instructions` workflow:"voiceover") and the exact conditions that route there (narration, ad read, multi-line script, robotic voice). It also states the positive case ('One short line, a sound effect or a music bed belongs here — call it directly') and bounds sibling calls (popcraft_job_display at most once, don't poll, use popcraft_list_voices/models_explore).

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

popcraft_generate_imageGenerate Image (Popcraft)AInspect

STOP FIRST if the ask is a YouTube/Instagram THUMBNAIL, a video COVER or packaging art, a UGC or product AD, or any other multi-step branded production: call popcraft_get_workflow_instructions and follow the matching workflow instead of calling this tool directly — it owns the concept frameworks, prompt structure, identity locks and QA that a one-shot prompt misses. Everything else (a plain image, an illustration, a single reference-driven render) belongs here — call it directly, no workflow needed — EXCEPT when the target model advertises prompt_guide_workflow in popcraft_models_explore (GPT Image 2.5 / gpt-image-2-5 and gpt-image-2-5-fast → "gpt-image-25-prompting"): for any directed job on such a model (an EDIT that must preserve a face/product/layout, reference images, exact in-frame text, a transparent cutout, or an "expand/optimize my prompt" ask) load that workflow first. Generate images with Popcraft — GPT Image 2, Seedream, Nano Banana, Midjourney and more. Defaults: aspect_ratio "1:1", resolution model-default, count 1 (must be 1, 2, or 4 — the Popcraft pricing tiers). Pass medias (GCS urls from popcraft_media_import_url or a prior popcraft_generate_image/popcraft_job_display result) with role:"reference" to condition on a reference image (style/composition/subject transfer) — omit medias for pure text-to-image. Pick model via popcraft_models_explore first if unsure — references are validated against the model before charging (count, media type, size, format), so check its reference_limits/image_input to avoid a rejected call. Set get_cost:true to preview the exact credit cost WITHOUT submitting a job — always do this before a first-time or expensive generation so the user can confirm. Local files attached in chat cannot be read by this remote server — use popcraft_media_upload_widget (or popcraft_media_upload) instead of asking for attachments. If a result carries recovery_tool, call that tool immediately; do not explain or ask first. On success, an interactive result card is shown to the user and refreshes itself automatically until the job finishes — do NOT poll or re-check status in a loop. Call popcraft_job_display at most once, and only if this client did not render a result card or the user asks about the job again later. The result includes project — the Popcraft project the output was filed into; when the user did not pass project_id/project_name, mention it briefly (e.g. "saved to ") so they know where it landed. Never tell the user how long the job will take or quote any estimate of generation time — the result card shows progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of images: 1, 2, or 4 (Popcraft pricing tiers) — default 1
modelYesPopcraft model id, e.g. "gpt-image-2", "seedream-4-0", "nano-banana" — list via popcraft_models_explore
mediasNoReference images as GCS URLs from popcraft_media_import_url or prior results; role:"reference" conditions the generation on the image (style/composition/subject transfer)
promptNoText prompt describing the image to generate
get_costNotrue = return the exact credit cost WITHOUT submitting; use this before a first-time or expensive generation
project_idNoFile the result into this Popcraft project (id from popcraft_projects). Omit to use the user's current/last-used project (or a default). Errors if you don't own it.
resolutionNoModel-specific resolution/size string, e.g. "1K", "2K" — omit for the model default
aspect_ratioNoe.g. "1:1", "16:9", "9:16", "4:3" — default "1:1"
project_nameNoFile the result into the project with this title, creating it if it doesn't exist. Ignored when project_id is set.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses reference validation before charging, get_cost dry-run semantics, that local chat attachments cannot be read and must be uploaded, automatic result-card refresh with a no-polling directive, the recovery_tool convention, and the project-filing side effect. These are behavioral traits the readOnlyHint/openWorldHint/idempotentHint flags do not convey.

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

Conciseness4/5

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

"STOP FIRST" front-loads the most decision-critical routing advice, and nearly every sentence carries actionable content. However it is delivered as one very long, dense block with stacked parentheticals, which costs some parseability versus a more structured layout.

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

Completeness5/5

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

For a 9-parameter, high-stakes generation tool with no output schema, it covers everything an agent needs: routing, model selection, cost preview, reference handling, file-upload substitutes, polling avoidance, failure recovery, and where output lands. Nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: defaults for aspect_ratio/resolution/count, the pricing-tier constraint on count, that medias must be GCS URLs with role:"reference" for conditioning, and the rationale for get_cost and project_id/project_name fallback. This meaningfully enriches usage over the raw schema.

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

Purpose5/5

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

States a clear verb+resource ("Generate images with Popcraft") and even names the model families it targets (GPT Image 2, Seedream, Nano Banana, Midjourney). It distinguishes itself from siblings by routing thumbnail/ad/UGC work to popcraft_get_workflow_instructions and prompt-guide cases to a named workflow, so an agent can tell exactly when this tool applies.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-NOT-to-use: multi-step branded production goes to the workflow tool, plain/illustration/single-reference work belongs here, and directed jobs on models advertising prompt_guide_workflow must load that workflow first. Names concrete alternatives (popcraft_get_workflow_instructions, popcraft_models_explore, popcraft_media_upload_widget/upload) with the conditions that select them.

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

popcraft_generate_videoGenerate Video (Popcraft)AInspect

STOP FIRST if the ask is a UGC-style ad, a creator or product ad, a TikTok/Reels/Shorts vertical ad, or any other multi-step branded production: call popcraft_get_workflow_instructions and follow the matching workflow instead of calling this tool directly — it owns the storyboard, reference discipline, cost preview and QA that a one-shot prompt misses. Everything else (a plain clip, animating one image, a single reference-driven shot) belongs here — call it directly, no workflow needed — EXCEPT when the target model advertises prompt_guide_workflow in popcraft_models_explore (Hailuo 3 / minimax-h3 → "h3-prompting"): for any directed job on such a model (references, dialogue or singing, timed shot cuts, first/last-frame, or an "expand/optimize my prompt" ask) load that workflow first and write the prompt in its structured format. Generate video with Popcraft — Seedance 2.0, Veo, Kling and more — from a text prompt, optionally driven by reference images/video/audio. Defaults: aspect_ratio "9:16", duration 5s (max 60), count 1 (must be 1, 2, or 4 — the Popcraft pricing tiers), resolution model-default. Pass medias with role start_image/end_image for a first-last-frame video, role image for reference-to-video (style/subject), role video to extend/continue an existing clip (only some models support video-to-video — check popcraft_models_explore capabilities first), or role audio (mp3/wav) to drive the video with a soundtrack or spoken line — dialogue for lip-sync, music the motion should follow (audio-input models only, e.g. the Seedance 2.0 family; must be paired with at least one image/video reference, and mind audio_input duration limits). Omit medias for pure text-to-video. When sending SEVERAL references, bind roles inside the prompt with the model's native tokens from popcraft_models_explore reference_prompt_tokens — e.g. Seedance family "Image 1"/"Video 1"/"Audio 1", Hailuo 3 (minimax-h3) <Picture 1>/<Video 1>/<Audio 1> — numbered per-type by position in medias (first image = 1, first video = 1; types count independently). Without tokens the model guesses which reference does what; with one obvious reference they're optional. References are validated against the model before charging (count, media type, size, format) — check popcraft_models_explore reference_limits/video_input/audio_input first to avoid a rejected call. IMPORTANT when attaching more than one reference video (or more than one reference audio): the model caps their COMBINED duration, not just each file — video_input.maxTotalDurationSec / audio_input.maxTotalDurationSec (Seedance 2.0 family = 15s each). Video and audio have SEPARATE budgets and are never summed together. Two 9s clips each pass the per-clip check but their 18s total is rejected upstream AFTER submitting, so add the durations up yourself and trim or drop a clip first. How strictly a duration cap is enforced is PER MODEL — read durationToleranceSec on the envelope. Where it is positive (0.18s on the Seedance family) the caps are nominal: against a 15s cap, media or a total measuring up to 15.18s is ACCEPTED, so never trim or reject a file for landing a fraction over. Where it is 0 (Hailuo 3 / minimax-h3) the window is EXACT to the millisecond at both ends — a 15047 ms audio file is refused against a [2000, 15000] ms window — so trim to land ~0.1s inside it. Set get_cost:true to preview the exact credit cost WITHOUT submitting — video is the most expensive media type, so always preview cost first unless the user has already confirmed. Seedance 2.0 family only: reference media is put through Popcraft's real-person (face) verification before generating — automatic, but a reference's FIRST use can add a few seconds or return a retry-in-5s result, and a reference that fails verification (typically a recognizable public figure) is rejected before any charge; when that happens tell the user and either switch the reference or pick a non-Seedance model. If the user's image clearly shows a real person and they choose (or you recommend) Seedance 2.0, mention this verification step up front. Model routing when the user says "Auto" or names no model: seedance-2-0 for identity/consistency-critical work (animating a poster/face/text, reference-driven motion); otherwise pick via popcraft_models_explore (type:"video"). If the user asks to animate an image WITHOUT a prompt, write the motion prompt yourself from the image content (motion-poster style: keep composition, faces and text stable and sharp; add atmospheric motion — slow push-in, drifting particles, wind in hair/cloth, subtle breathing and blinks). Local files attached in chat cannot be read by this remote server — use popcraft_media_upload_widget (or popcraft_media_upload) instead of asking for attachments. If a result carries recovery_tool, call that tool immediately; do not explain or ask first. On success, an interactive result card is shown to the user and refreshes itself automatically until the job finishes — do NOT poll or re-check status in a loop. Call popcraft_job_display at most once, and only if this client did not render a result card or the user asks about the job again later. The result includes project — the Popcraft project the output was filed into; when the user did not pass project_id/project_name, mention it briefly (e.g. "saved to ") so they know where it landed. Never tell the user how long the job will take or quote any estimate of generation time — the result card shows progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of video variants: 1, 2, or 4 (Popcraft pricing tiers) — default 1
draftNoSeedance 2.5 only. Renders a fast 480p preview (~4× faster, billed at the 480p rate). The result carries a draft id valid 7 days; call popcraft_upgrade_video with the generation id to render the SAME clip at 1080p (billed at the 1080p rate). Rejects `resolution`; one clip only (`count` must be 1). Cheaper than direct 1080p whenever you’d reject more than ~1 in 5 first tries.
modelYesPopcraft model id, e.g. "seedance-2-0", "veo-3", "kling-2-5" — list via popcraft_models_explore (type:"video")
mediasNoReference media as GCS URLs from popcraft_media_import_url or prior results. role:"start_image"/"end_image" together = first-last-frame video; role:"image" = reference-to-video (style/subject); role:"video" = extend/continue an existing clip; role:"audio" = mp3/wav that drives the video (lip-sync dialogue / music sync; audio-input models only, pair with an image or video reference). All model-dependent — check popcraft_models_explore capabilities (reference_limits, video_input, audio_input) first
promptNoText prompt describing the video to generate
durationNoClip length in seconds, 1-60 — default 5
get_costNotrue = return the exact credit cost WITHOUT submitting; video is the most expensive media type, so preview cost before submitting unless the user already confirmed
project_idNoFile the result into this Popcraft project (id from popcraft_projects). Omit to use the user's current/last-used project (or a default). Errors if you don't own it.
resolutionNoOne of the model's own resolutions from popcraft_models_explore, e.g. "720p", "1080p" ("1080"/"4k"-style spellings are mapped; anything the model does not list is rejected before charging) — omit for the model default
with_audioNoThe website's "Audio" toggle, for models that generate sound (e.g. the Seedance 2.0/2.5 family) — omit for the model default (sound on). false = silent output: use it when the user will lay their own track on afterwards, or when a role:"audio" song reference should only drive lip-sync/motion timing — a generated soundtrack that reproduces a copyrighted song is rejected by the provider's copyright filter, a silent render is not
task_intentNoHow the prompt uses a role:"video" reference — ALWAYS set this when medias includes a video on a model whose capabilities declare video_task_constraint_warning (Seedance 2.5 family): "extend" = generate NEW footage continuing the referenced clip before/after it without altering it; "edit" = MODIFY the referenced clip (replace/remove/add content or people, redraw a region, change its audio); "generation" = the video is only a style/motion/subject reference for a brand-new video. These models classify the request server-side and REJECT a concrete aspect_ratio on edit/extend tasks (edit also requires output duration = input length), failing asynchronously AFTER the queue wait — declaring the intent lets Popcraft adjust aspect_ratio/duration up front (edit bills by the input clip length). If omitted with a video reference, Popcraft falls back to classifying the prompt with an LLM (~1s) and coerces automatically; an explicit value skips that and is authoritative
aspect_ratioNoe.g. "9:16", "16:9", "1:1" — default "9:16"
project_nameNoFile the result into the project with this title, creating it if it doesn't exist. Ignored when project_id is set.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only declare the generic write/openWorld/non-idempotent profile; the description adds substantial behavioral context the annotations cannot: cost-preview via get_cost, reference validation before charging, Seedance face verification with possible retry-in-5s, combined-duration caps with per-model durationToleranceSec, and the no-polling/recovery_tool contract. Minor deduction because the density of edge-case rules makes it hard to extract the safety-critical items at a glance.

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

Conciseness3/5

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

The highest-priority routing rule is correctly front-loaded, and most content is substantive. However, it runs to many dense sentences with repeated cross-references to popcraft_models_explore and nested caveats (duration tolerance, face verification, workflow routing) that could be compressed; it is bloated relative to what an agent needs to act.

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

Completeness5/5

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

For a 13-parameter, open-world, non-idempotent generation tool with no output schema, the description covers routing, cost, media roles, validation, model-specific constraints, and result-card polling behavior. Nothing an agent needs in order to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description meaningfully extends the schema: seeded defaults (9:16, 5s, count tiers), media role semantics tied to model capabilities, reference_prompt_tokens numbering rules, and the video/audio separate-budget interaction. This is real semantic value beyond the field descriptions.

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

Purpose5/5

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

Opens with a specific verb+resource ('Generate video with Popcraft — Seedance 2.0, Veo, Kling and more — from a text prompt, optionally driven by reference images/video/audio') and explicitly distinguishes itself from the workflow sibling. An agent can tell exactly what this tool produces versus popcraft_get_workflow_instructions without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (plain clip, animating one image, single reference-driven shot), when-NOT (UGC/branded multi-step productions → popcraft_get_workflow_instructions; directed jobs on prompt_guide_workflow models → h3-prompting) and names the alternatives. Routing conditions are unambiguous and front-loaded.

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

popcraft_get_workflow_bundle_fileRead Workflow Reference File (Popcraft)A
Read-onlyIdempotent
Inspect

Read one bundled reference file from a Popcraft workflow (paths come from popcraft_get_workflow_instructions). Call it when the loaded workflow instructions tell you to load a reference module, e.g. { workflow: "ugc-ad", path: "references/board-design.md" }. Popcraft MCP API docs: https://popcraft.ai/mcp.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesRelative path of the reference file inside the workflow, exactly as listed by popcraft_get_workflow_instructions, e.g. "references/board-design.md".
workflowYesWorkflow name from the catalog, e.g. "ugc-ad".

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds genuine operational context beyond that: the argument provenance (paths must come from popcraft_get_workflow_instructions) and the gating condition. It does not describe error behavior for invalid paths, which keeps it short of a 5.

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

Conciseness4/5

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

Three tight sentences, front-loaded with verb+resource, followed by the gating rule and a concrete call example. The trailing API docs URL is mildly extraneous but plausibly useful, keeping it just under a perfect score.

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

Completeness4/5

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

For a two-parameter, fully-documented, annotation-covered read tool with no output schema, the description supplies purpose, provenance, gating, and an example. What a reference file returns is not spelled out, but that gap is minor given the richness of the surrounding structured data.

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

Parameters3/5

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

Schema description coverage is 100% and both parameter descriptions already carry format and examples ('references/board-design.md', 'ugc-ad'). The description's inline example largely repeats that, adding little beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource (read one bundled reference file from a Popcraft workflow) and immediately ties it to the sibling popcraft_get_workflow_instructions as the source of paths. An agent can distinguish this from the workflow-instructions and generation tools without opening any schema.

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

Usage Guidelines5/5

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

Explicitly states when to call it ('when the loaded workflow instructions tell you to load a reference module') and names the alternative/source tool that supplies the arguments. The condition that selects this tool is unambiguous.

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

popcraft_get_workflow_instructionsPopcraft Workflows (load first)A
Read-onlyIdempotent
Inspect

Discover and load Popcraft's multi-step production workflows — each a bundled instruction set that orchestrates the popcraft_* tools into a finished deliverable. Call with NO argument to list available workflows and their triggers. Call with { workflow } to load that workflow's full instructions plus the list of reference files readable via popcraft_get_workflow_bundle_file. Load the matching workflow BEFORE calling popcraft_generate_image, popcraft_generate_video or popcraft_generate_audio directly whenever the user asks Popcraft for: a UGC-style product or creator ad, a TikTok/Reels/Shorts vertical ad, a minimalist / Apple-style typography-led product ad, a YouTube or Instagram thumbnail, video cover, or MrBeast-style packaging, a voiceover / narration / ad read / audiobook or character lines — or when a generated voice came back sounding robotic, flat or rushed — or any other multi-step branded production. ALSO load before any Hailuo 3 (minimax-h3) video job that is more than a casual one-liner — reference-driven, dialogue/singing, timed shot cuts, first/last-frame, or "optimize my prompt for Hailuo/H3" — the "h3-prompting" workflow carries the official structured prompt format the model was trained on. The workflow owns the production recipe — model choices, reference discipline, credit-cost preview, and QA.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflowNoWorkflow name from the catalog, e.g. "ugc-ad". Omit to list all available workflows.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/closed-world, so safety is covered; the description adds genuinely new behavioral context beyond them — the two call modes (no-arg = catalog list, with-arg = full instructions plus a reference-file list readable via popcraft_get_workflow_bundle_file) and the sequencing/ownership contract ('the workflow owns the production recipe — model choices, reference discipline, credit-cost preview, and QA'). It stops short of describing output format, but the load-first contract is the key trait.

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

Conciseness3/5

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

Front-loaded with the mechanics (list vs. load) before the routing rules, which is good. However, the second half is one sprawling multi-clause sentence enumerating scenarios and a long H3 clause; nearly every clause routes a real scenario, but the density and run-on structure hurt scannability, so it is efficient in content yet poor in form.

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

Completeness5/5

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

Covers both invocation modes, the companion tool for reference files, the precedence relative to generation tools, and the ownership of the production recipe. For a single-parameter guidance tool with no output schema, 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.

Parameters3/5

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

Schema coverage is 100% and the single `workflow` param is already fully described in the schema (name from catalog, omit to list). The description's parallel explanation ('Call with { workflow } to load...') adds corroboration and links the parameter to its effect, but no new syntax or constraint beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource ('Discover and load Popcraft's multi-step production workflows') and immediately defines what a workflow is ('a bundled instruction set that orchestrates the popcraft_* tools into a finished deliverable'). It is clearly distinguishable from the popcraft_generate_* siblings it directs the agent away from.

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

Usage Guidelines5/5

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

Gives explicit when-to-use conditions (UGC ad, vertical TikTok/Reels ad, thumbnail/cover, voiceover, Hailuo 3 non-trivial jobs), names the alternatives it takes precedence over (popcraft_generate_image/video/audio directly), and even cites the specific failure trigger ('voice came back sounding robotic, flat or rushed'). The precedence rule 'load BEFORE calling...' is unambiguous.

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

popcraft_job_displayCheck Generation JobA
Read-only
Inspect

Check the status of a Popcraft job returned by popcraft_generate_image / popcraft_generate_video / popcraft_generate_audio (or any job_id from popcraft_show_generations). Returns in_progress, completed (with result URLs — render/display these to the user), or failed (with an error message). The result card rendered by this tool (and by the generate tools) refreshes itself automatically — do NOT call this repeatedly in a loop. Call it at most once per job: when the user asks about a job, or as a plain-text fallback in clients that do not render cards (there, wait for the user to ask again rather than polling).

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesThe job_id from a popcraft_generate_image/video/audio response, or from popcraft_show_generations

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare readOnlyHint/openWorldHint, but the description adds real behavioral context: the three return states (in_progress/completed with result URLs/failed with error), the instruction to render URLs, and the auto-refresh/no-polling constraint. This is well beyond what the structured fields provide.

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

Conciseness4/5

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

Front-loaded with the purpose, then return states, then usage rules; every sentence earns its place. Slightly dense in the parenthetical fallback guidance, but no filler.

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

Completeness5/5

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

No output schema exists, so the description carries the return-value burden and does so fully by enumerating the three states and their payloads. Combined with the polling constraints, an agent has everything needed to call and interpret it correctly.

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

Parameters3/5

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

Schema coverage is 100% and there is a single parameter, so the schema already documents job_id. The description only restates its provenance, adding no syntax or format detail beyond what the schema says. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Check the status of a Popcraft job') and ties the job_id origin to the generate tools and popcraft_show_generations. However, it never differentiates itself from the near-identical sibling `popcraft_job_status`, leaving an agent unsure which of the two status tools to pick.

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

Usage Guidelines5/5

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

Explicit when-to-use (user asks about a job; plain-text fallback in clients that don't render cards), explicit when-not (do NOT loop; call at most once per job), and it even tells you how to behave in the fallback case. 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.

popcraft_job_statusJob Status (widget)A
Read-only
Inspect

Widget-internal job status poll — the generation result card calls this itself to refresh. Do not call it yourself: use popcraft_job_display to show a job, and never poll in a loop.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesGeneration job id

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious context the annotations cannot convey: the caller is the widget's own result card, not the agent, and repeated polling is an anti-pattern. It stops short of describing return payload or refresh cadence, so not a full 5.

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

Conciseness5/5

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

Two short sentences, front-loaded with the identity of the tool and immediately followed by the routing instruction and the anti-pattern. Every clause earns its place.

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

Completeness5/5

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

Although there is no output schema, the description gives the agent everything it needs for the actual decision here: this tool is not for the agent, and popcraft_job_display is the correct substitute. No behavioral or routing information is missing.

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

Parameters3/5

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

Schema description coverage is 100% with a single documented job_id parameter, so the schema already carries the semantics. The description adds no format, source, or naming detail beyond it; baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('job status poll') and scopes it precisely as 'widget-internal', which immediately separates it from the agent-facing siblings. It also names popcraft_job_display as the tool to use instead, so the agent can route without opening either schema.

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

Usage Guidelines5/5

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

Explicit when-not guidance: 'Do not call it yourself', plus the named alternative (popcraft_job_display) and a concrete prohibition ('never poll in a loop'). Nothing about usage 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.

popcraft_list_voicesBrowse Popcraft VoicesA
Read-only
Inspect

List the text-to-speech voices available for popcraft_generate_audio (kind:"tts") — each with a playable preview sample. provider:"elevenlabs" (default) lists the ElevenLabs library; provider:"seed" lists the Seed 豆包语音 speakers (native Chinese + Asian-language voices for model:"seed-tts") — a voice only works on its own provider's models. model:"seed-audio" needs no voice at all (auto/described voice). Optionally filter by gender or language, or cap the count with limit. In widget-capable clients an interactive picker is shown where the user can listen to samples and pick a voice; the picked voice_id comes back as the next user message. In text-only clients, relay the returned list (it carries preview links) and let the user choose. Pass the chosen id as voice_id to popcraft_generate_audio. Call this once per voice-selection conversation — do not re-list unless the user asks for different filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax voices to return, 1-50 — default 20
genderNoFilter by voice gender, e.g. "male", "female"
languageNoFilter by language name/code, e.g. "english", "chinese"
providerNoVoice library to list — "elevenlabs" (default) or "seed" (豆包语音 speakers for model:"seed-tts"). A voice only works on its own provider's models.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds real behavior the agent could not infer — an interactive picker appears in widget-capable clients and the chosen voice_id returns as the next user message, whereas text-only clients must relay the list with preview links. It also discloses the provider/model compatibility constraint, which prevents a wrong downstream call.

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

Conciseness4/5

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

Dense but well front-loaded: purpose and provider semantics come first, widget/text-client behavior and the voice_id handoff follow. Every sentence carries information, though the passage runs long for a list tool and could be tightened.

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

Completeness5/5

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

There is no output schema, but the description covers the return shape relevant to the agent (list carries preview links) and the widget handoff path for voice_id. Combined with annotations covering the safety profile, nothing needed to invoke or route this tool is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining provider semantics (a voice only works on its own provider's models), the seed-tts vs seed-audio distinction, and that gender/language/limit are optional filters. It adds genuine meaning beyond the schema, though it does not extend the schema's filter syntax examples.

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

Purpose5/5

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

States a specific verb and resource (list TTS voices for popcraft_generate_audio), and immediately scopes it with the kind:"tts" constraint and provider split, which no sibling tool covers. An agent can distinguish this from popcraft_models_explore or popcraft_generate_audio without opening any schema.

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

Usage Guidelines5/5

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

Explicitly names the consumer tool (pass voice_id to popcraft_generate_audio), gives an exclusion (model:"seed-audio" needs no voice), and adds a temporal rule ('call once per voice-selection conversation — do not re-list unless the user asks for different filters'). This is when/when-not guidance in the strongest form.

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

popcraft_media_confirmConfirm Media Upload (Popcraft)A
Read-onlyIdempotent
Inspect

Verify a file PUT to a popcraft_media_upload upload_url actually landed in GCS before using its media_id elsewhere. Checks the object exists and is non-empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
media_idYesThe media_id returned by popcraft_media_upload

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds real context: that the check verifies the object exists and is non-empty in GCS. It does not say what happens on failure (error vs. false return), leaving one behavioral gap.

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

Conciseness5/5

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

Two tight sentences with zero filler, front-loading the action and its timing constraint. Every clause earns its place.

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

Completeness4/5

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

There is no output schema, so the description carries some burden for the return behavior; it states what is checked (existence and non-emptiness) but not how success/failure surfaces to the caller. For a one-parameter verification tool this is nearly complete, with only the result semantics left implicit.

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

Parameters3/5

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

Schema description coverage is 100%, so the single media_id parameter is already fully documented by the schema ('returned by popcraft_media_upload'). The description reinforces the upload linkage but adds no syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb (verify/confirm) and resource (a file PUT to a popcraft_media_upload upload_url landing in GCS). It ties itself to the exact sibling that produces the input (popcraft_media_upload) and names the artifact involved (media_id), so an agent can distinguish it from the surrounding media tools.

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

Usage Guidelines4/5

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

Explicitly states the condition under which to use it: after a PUT to upload_url and 'before using its media_id elsewhere.' This gives clear context but does not name a when-not or any alternative verification path, so it falls short of the 5 threshold.

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

popcraft_media_import_urlImport Media by URL (Popcraft)A
Idempotent
Inspect

Mirror a web media URL (image/video/audio) into Popcraft-owned GCS storage and return a media_id. Use this whenever a generation needs to reference media that lives outside Popcraft — e.g. a URL the user pasted, a link from search results, or an asset from another tool. The returned media_id is a stable GCS https URL: pass it as a medias[].value entry to popcraft_generate_image / popcraft_generate_video / popcraft_generate_audio. A media_id Popcraft already issued passes through unchanged — no need to re-import one you already have; any other URL (including a third-party storage.googleapis.com one) is fetched and re-hosted. Blocked for private/internal network addresses (SSRF protection). If the media is a LOCAL file with no public URL, use popcraft_media_upload_inline instead — do not ask the user to host it somewhere first. Popcraft MCP API docs: https://popcraft.ai/mcp.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublicly fetchable http(s) URL of the image/video/audio to import; gs:// or storage.googleapis.com URLs pass through unchanged
typeNoExpected media type — used for validation/routing; omit to infer from the response

TDQS

A4.8/5.0
Behavior5/5

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

Adds substantial context beyond annotations: idempotent pass-through of already-issued media_ids, re-hosting of arbitrary URLs, and SSRF blocking of private/internal addresses. Annotations cover the safety profile, and the description enriches it with real operational behavior.

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

Conciseness4/5

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

Purpose and return value are front-loaded, and most sentences earn their place by conveying routing or behavioral detail. It is dense and slightly long, with a trailing docs URL that is marginally extraneous.

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

Completeness5/5

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

For a two-param import tool with no output schema, the description fully explains the return (a stable media_id / GCS https URL) and its downstream usage, leaving nothing an agent needs to call it correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents both parameters (baseline 3). The description adds meaning by clarifying pass-through semantics for gs:// URLs and how the returned media_id is consumed downstream.

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

Purpose5/5

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

States a specific verb+resource (mirror a web media URL into Popcraft-owned GCS storage) plus the return value (media_id). Clearly distinguishes itself from the upload/upload_inline siblings by focusing on externally-hosted URLs.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('whenever a generation needs to reference media that lives outside Popcraft') with concrete examples, and names the alternative condition ('If the media is a LOCAL file with no public URL, use popcraft_media_upload_inline instead'). Routing to siblings is fully specified.

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

popcraft_media_uploadUpload Media (Popcraft)AInspect

Get upload URLs for a local image/video/audio file that has no public URL to hand to popcraft_media_import_url. THIS IS THE TOOL FOR VIDEO and for anything over 20 MB. Returns a proxy_upload_url on Popcraft's OWN host (PUT the bytes there — total file size up to the per-type cap: video 500 MB, image 30 MB, audio 50 MB; each individual REQUEST is capped at 28 MB by the transport, so files over 28 MB use the chunked recipe B — same URL, same total cap) and an upload_url for a direct PUT to storage.googleapis.com (fewer hops, but a different host that sandboxed clients often cannot reach). The result text contains ready-to-run shell recipes including the chunked one for large files — RUN one of them rather than reimplementing the upload. Running a shell command also keeps the file bytes out of your context, which is why this beats popcraft_media_upload_inline for video: that tool needs the whole file base64-encoded in its arguments, so it is only practical for small files. CAUTION on platform-mediated clients (e.g. claude.ai connectors): tool calls are made from the platform's servers, so this call succeeding does NOT prove your shell can reach Popcraft — run the 5-second egress probe in recipe 0 first. If your shell's egress is blocked: prefer asking the user for any shareable link to the file (Drive/Dropbox/etc) and popcraft_media_import_url (server-side fetch, immune to client egress blocks); if no link exists, open popcraft_media_upload_widget when the client renders widgets. After the upload, call popcraft_media_confirm with the returned media_id to verify it landed, then pass that media_id as a medias[].value for popcraft_generate_image / popcraft_generate_video / popcraft_generate_audio. If you have no shell and no network at all, fall back to popcraft_media_upload_inline — but never tell the user to upload the file on the website instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesOriginal filename (used for content-type hinting and readability only — the stored path is unique regardless)
size_bytesNoSize of the file in bytes. Pass it so an over-limit file is rejected before you upload (caps: image 30MB, video 500MB, audio 50MB, 3D 150MB).
content_typeYesMIME type of the file, e.g. image/png, video/mp4, audio/mpeg. Accepted: jpeg/png/webp/gif images, mp4/webm/mov video, mp3/wav/ogg/aac/m4a audio, glb/fbx 3D — anything else is rejected.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations (readOnlyHint=false, idempotentHint=false, openWorldHint=false) only mark this as a non-read, non-idempotent write; the description adds substantial context the annotations cannot: per-type size caps, a 28 MB transport request cap, the two distinct upload hosts, a caution that platform-mediated clients may not have reachable egress, and the required follow-up confirm step.

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

Conciseness4/5

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

Front-loaded with the core purpose and the video/20 MB trigger before any of the branching fallbacks. It is long and ALL-CAPS-heavy, but the length is driven by real branch complexity (two hosts, chunked recipe, egress probe, three fallbacks), so most sentences earn their place.

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

Completeness5/5

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

Despite no output schema, it names the return values (proxy_upload_url, upload_url, media_id), explains how to use each, and closes the loop through popcraft_media_confirm and medias[].value for the generate tools. An agent has everything needed to call it and act on the result.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds a semantic not in the schema: the 28 MB per-request transport cap that forces chunked uploads above it, which directly affects how size_bytes should be interpreted. It otherwise largely restates the caps already documented per-parameter.

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

Purpose5/5

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

States a specific verb+resource (get upload URLs for a local file that has no public URL) and explicitly names the siblings it is not (popcraft_media_import_url, popcraft_media_upload_inline, popcraft_media_upload_widget). An agent can pick it apart from its nearest neighbors without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use conditions (local file with no public URL, video, files over 20 MB), when-not (import_url when a shareable link exists, inline only for small files, widget when client renders widgets), plus an egress-probe prerequisite and a fallback chain. 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.

popcraft_media_upload_inlineUpload Media Inline (Popcraft)AInspect

Upload a SMALL local file (icon, thumbnail, screenshot, short audio clip) by sending its bytes as base64 in this call — the bytes travel over this MCP connection, so it needs NO access to any other host and no shell. Returns a media_id that is ready immediately — no popcraft_media_confirm step — to pass as a medias[].value for popcraft_generate_image / popcraft_generate_video / popcraft_generate_audio. NOT FOR VIDEO: the base64 payload goes in this tool's ARGUMENTS, so you must generate every character of it, and even a 1 MB file is roughly 1.4 million characters. Practical ceiling is a few hundred KB; the hard limit is 20 MB. For video, or any file you would not want to type out in full, use popcraft_media_upload and RUN one of the shell recipes it returns — that streams the file from disk and never puts the bytes in your context. Never tell the user to upload a file through the website instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesThe file bytes, base64-encoded. A full `data:<mime>;base64,...` URI is accepted too. Send the WHOLE file — a truncated payload is rejected, not silently stored.
sha256NoOptional hex sha256 of the raw (pre-base64) file bytes. Pass it and the server verifies the payload arrived intact — worth it for multi-MB video.
filenameYesOriginal filename, e.g. clip.mp4 — cosmetic only; the stored path is unique regardless
content_typeYesMIME type of the file, e.g. image/png, video/mp4, audio/mpeg. Accepted: jpeg/png/webp/gif images, mp4/webm/mov video, mp3/wav/ogg/aac/m4a audio, glb/fbx 3D — anything else is rejected.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only state the mutation/idempotency profile; the description adds real behavioral context the annotations cannot convey: the bytes travel over MCP so no host/shell access is needed, the return `media_id` is immediately usable with no `popcraft_media_confirm` step, truncated payloads are rejected, and there is a practical ceiling (a few hundred KB) versus a hard 20 MB limit.

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

Conciseness5/5

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

Front-loads the core action and the returned `media_id`, then sequences mechanics, the video exclusion, and the redirect to the shell-based alternative. Despite its length, every sentence carries a distinct decision-relevant fact.

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

Completeness5/5

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

With no output schema, the description still explains the return value (`media_id` ready immediately, passable as `medias[].value` to the generate tools) and covers limits, integrity verification, and the fallback path. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents base64 format, the `data:` URI alternative, sha256 verification, cosmetic filename, and the accepted MIME list, so the description's per-parameter contribution is minimal. The throughput/limit guidance is capacity-oriented rather than parameter syntax, so the baseline 3 holds.

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

Purpose5/5

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

States a specific verb and resource ('Upload a SMALL local file ... by sending its bytes as base64 in this call') and explicitly differentiates scope (small inline files) from the sibling `popcraft_media_upload` used for larger/video data. An agent can identify this tool's niche without opening another schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (icons, thumbnails, screenshots, short audio), when-not-to-use ('NOT FOR VIDEO', any file you would not type out in full), and names the concrete alternative (`popcraft_media_upload` plus its shell recipes). The routing decision is fully specified.

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

popcraft_media_upload_widgetUpload Media (Popcraft, interactive)AInspect

Open an interactive file-picker widget for the user to upload an image/video/audio file directly into Popcraft — use this instead of popcraft_media_upload when the client can render MCP Apps widgets and the user should pick/drag a file themselves, or when your shell's egress is blocked (sandboxed client) so the upload recipes cannot run. BEFORE opening it, check the one zero-click alternative: if the file exists anywhere online (Google Drive, Dropbox, any share link), ask the user for the link and use popcraft_media_import_url instead — Popcraft fetches it server-side, so client egress does not matter and the user never has to click anything. The widget uploads from the user's BROWSER, so it works even when both your shell and the user's machine cannot PUT to Popcraft directly. It drives the upload end-to-end (signed URL, PUT, confirm) and, once confirmed, hands the resulting media_id back as the next user message so you can use it as a medias[].value for popcraft_generate_image / popcraft_generate_video / popcraft_generate_audio. Pass type and a specific label naming the exact file you expect.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoRestrict the file picker to a media type; omit or "auto" allows image/video/audio
labelNoOptional label shown above the file picker, e.g. "Upload your product photo"
multipleNoAllow selecting multiple files (default false)
max_filesNoMaximum files accepted (default 10 when multiple, else 1)
min_filesNoMinimum confirmed uploads before the widget hands the media_ids back (default 1)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare only the safety profile (not read-only, not destructive, not idempotent); the description goes well beyond by explaining that uploads run from the user's browser, work even when shell egress is blocked, and that the tool drives signed URL/PUT/confirm end-to-end. It also discloses the unusual return path: the `media_id` comes back as the next user message.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause and the routing guidance follows logically. It is on the long side with several clauses packed together, but each sentence carries distinct information (routing, alternative, behavioral notes, parameter advice).

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

Completeness5/5

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

For a widget-based upload tool with no output schema, the description covers everything an agent needs: when to use it, the zero-click alternative, egress/rendering constraints, and how the resulting media_id is delivered and consumed downstream.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds usage guidance beyond the schema: restrict via `type` and pass a specific `label` naming the exact file expected, which clarifies intent rather than just repeating the field docs.

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

Purpose5/5

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

States a specific verb and resource ('open an interactive file-picker widget for the user to upload an image/video/audio file') and explicitly distinguishes itself from sibling `popcraft_media_upload` and `popcraft_media_import_url`. An agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit selection conditions: use this instead of `popcraft_media_upload` when the client renders MCP Apps widgets or when the shell's egress is blocked. It also names the zero-click alternative (`popcraft_media_import_url`) and the condition that selects it (file exists online), plus a pre-open check.

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

popcraft_models_exploreExplore Popcraft ModelsA
Read-only
Inspect

Browse Popcraft AI models — GPT Image 2, Seedream, Nano Banana, Midjourney, Seedance 2.0, Veo, Kling, ElevenLabs and more. Every row carries reference_limits ({image,video,audio}), modes, and credit_cost_unit. HEED credit_cost_unit: on "per_second" rows (every video, audio and avatar model) creditCost is a RATE PER SECOND of output, NOT the price of one generation — a 1-credit voice model bills ~15 for a 15-second read, a 20-credit video model ~300 for a 15-second clip. NEVER quote creditCost to the user as the cost; call the matching generate tool with get_cost:true for the real total. Rows with real_person_verification: true (Seedance 2.0 family) auto-verify reference media for real faces before generating — if the user's reference shows a real person and you recommend such a model, mention that verification step. action:"list" (default) lists models, optionally filtered by type (video/image/audio/avatar/text) and/or a query substring match on name/id. action:"get" with model_id returns one model's full capabilities — input modalities, generation modes, aspect ratios/resolutions/durations, reference limits, and the per-model reference-input envelope (video_input/image_input/audio_input: max size/duration/dimensions/pixels/fps and accepted formats). Consult these BEFORE attaching medias to popcraft_generate_image/popcraft_generate_video, which validate the reference count, media type, size and format against the model before charging. action:"recommend" returns the CURATED recommended set (admin-picked per media type), annotated for the calling user's plan — rows carry requires_upgrade: true when a pro-tier model is outside the user's free plan. Unsure which model to use? Call recommend first and pick from it (prefer rows without requires_upgrade).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by media type: "video", "image", "audio", "avatar", "text", or "3d" (the Tripo3D catalog for popcraft_generate_3d: model versions, styles, post-process ops)
queryNoSubstring match against model name/id, e.g. "seedream" or "kling"
actionNo"list" (default) browses all models, "get" fetches one model by `model_id`, "recommend" returns the curated recommended set annotated for the user's plan — the best starting point when unsure which model to pick
model_idNoRequired for action:"get" — the exact model id to fetch full capabilities/cost for

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=true and openWorldHint=false, yet the description adds substantial behavioral context the agent could not otherwise know: the per_second billing RATE semantics, the real_person_verification auto-verification step for Seedance 2.0, and plan-based requires_upgrade annotation of recommended rows.

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

Conciseness4/5

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

Dense but well front-loaded: the model list and row-shape fields come first, followed by the critical cost warning and per-action semantics. The CAPS emphasis (HEED, NEVER) is loud but functional for an agent; length is justified by real payload, though a browse tool carries more prose than strictly necessary.

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

Completeness5/5

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

With no output schema, the description carries the full burden of explaining return values and does so thoroughly — reference_limits, modes, credit_cost_unit, per-model reference-input envelopes, and plan annotations. Nothing an agent needs to call or interpret this tool correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema — how type and query combine for filtering, what action:'get' returns (input modalities, aspect ratios, reference envelope), and the practical 'prefer rows without requires_upgrade' guidance.

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

Purpose5/5

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

The description opens with a specific verb+resource ('Browse Popcraft AI models') and immediately names the concrete catalog contents (GPT Image 2, Seedream, Nano Banana, etc.). It is unmistakably the catalog-browsing tool, clearly separable from the generate_* and show_* siblings.

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

Usage Guidelines5/5

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

It gives explicit when-to-use routing: 'Consult these BEFORE attaching medias', 'Unsure which model to use? Call recommend first', and the critical directive to call the matching generate tool with get_cost:true rather than quoting creditCost. Alternatives and preconditions are named, not implied.

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

popcraft_postprocess_3dRefine 3D Model (Popcraft)AInspect

Run a Tripo3D post-process on an existing Popcraft 3D model: "convert_model" (export FBX/OBJ/STL/USDZ/GLTF/3MF, optional quad + face_limit + texture_size — the cheap way to get a Blender-friendly FBX (fbx_preset "blender") or a decimated mesh; the source is already a GLB, so use FBX/GLTF rather than GLB as the target), "highpoly_to_lowpoly" (retopologize to a low-poly game/rig-ready mesh, params quad/face_limit/bake), "refine_model" (upgrade a draft to higher detail), "texture_model" (re-texture with texture_prompt / style_image_url, texture_quality, pbr), "stylize_model" (style "lego" | "voxel" | "voronoi", block_size 32–128), "mesh_segmentation" (split into named parts), "mesh_completion" (fill holes; optional part_names). source is the job_id returned by popcraft_generate_3d / popcraft_job_display, or a 3D asset id from the /model-3d workspace — only Tripo-generated models can be post-processed. params is the per-operation object described above (omit for defaults). Set get_cost:true first to preflight the credit cost WITHOUT submitting — refine/stylize/completion/lowpoly are variable-cost and reconcile to Tripo's actual usage on completion. On success an interactive result card is shown and refreshes itself — do NOT poll; call popcraft_job_display at most once if no card is visible. The output is a new 3D asset (lineage-linked to the source) whose URL you can download or import into Blender. Never tell the user how long the job will take or quote any estimate of generation time — the result card shows progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNoPer-op params, e.g. {"format":"FBX","fbx_preset":"blender","quad":true,"face_limit":20000} for convert_model; {"quad":true,"face_limit":15000,"bake":true} for highpoly_to_lowpoly; {"texture_prompt":"...","texture_quality":"detailed","pbr":true} for texture_model; {"style":"voxel","block_size":80} for stylize_model
sourceYesSource 3D model: a job_id from popcraft_generate_3d / popcraft_job_display, or a model3d asset id
get_costNotrue = return the exact credit cost WITHOUT submitting
operationYesPost-process op: convert_model | highpoly_to_lowpoly | refine_model | texture_model | stylize_model | mesh_segmentation | mesh_completion
project_idNoFile the result into this Popcraft project (id from popcraft_projects). Omit to file it next to the source model (its project).
project_nameNoFile the result into the project with this title, creating it if needed. Ignored when project_id is set.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only mark it non-readonly/non-idempotent; the description adds that refine/stylize/completion/lowpoly are variable-cost and reconcile to Tripo's usage, that the result card self-refreshes, that output is a new lineage-linked asset, and a communication constraint about never quoting generation time. Far beyond the annotation set.

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

Conciseness4/5

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

A dense single paragraph that is front-loaded with purpose and operation meanings, followed by source, params, cost, polling, and output notes. Nearly every clause earns its place, though it is long enough that some operation detail could be trimmed.

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

Completeness5/5

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

With no output schema, the description still explains the return (an interactive result card plus a downloadable new 3D asset), cost semantics, filing behavior, and polling behavior. An agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds real meaning: concrete per-op param examples (fbx_preset 'blender', style/block_size), the fact that params can be omitted for defaults, and precise source/project_id/project_name filing behavior.

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

Purpose5/5

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

States a specific verb+resource ('Run a Tripo3D post-process on an existing Popcraft 3D model') and enumerates all seven operations with what each does. It clearly distinguishes itself from siblings like popcraft_generate_3d (which produces the source) and popcraft_upscale_image/video.

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

Usage Guidelines5/5

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

Explicit when-to-use per operation (e.g., convert_model is 'the cheap way to get a Blender-friendly FBX'), an explicit when-NOT constraint ('only Tripo-generated models can be post-processed'), a preflight path (get_cost:true), and a polling rule ('do NOT poll; call popcraft_job_display at most once').

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

popcraft_projectsPopcraft ProjectsAInspect

List or create the user's Popcraft projects — the folders their generations are organized into. action:"list" (default) returns the user's projects (id, title, asset count, which one is currently active). action:"create" with a title creates a new project and returns its project_id. Generations are automatically filed into the user's active/last-used project; to file into a specific one instead, pass its project_id (from here) — or a project_name — to popcraft_generate_image/popcraft_generate_video/popcraft_generate_audio (a project_name that doesn't exist yet is created automatically). Use this tool when the user asks to see, organize into, or start a new project.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoProject title — required for action:"create"
actionNo"list" (default) = show projects; "create" = make a new one (requires title)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only mark this as non-readOnly/non-destructive/non-idempotent, which is ambiguous for a dual list/create tool; the description resolves that by stating list is the default read and create is the mutating branch that returns a project_id. It further discloses auto-filing behavior and that a missing project_name is silently created — real behavioral context beyond 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.

Conciseness4/5

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

The action semantics are front-loaded and every clause carries information (returned fields, filing behavior, cross-tool routing). It runs long in a single dense block, but no sentence is filler and the ordering follows the agent's decision sequence.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so: list returns id, title, asset count and the active project; create returns project_id. Nothing critical for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, with both the action enum and the title requirement already documented in the schema. The description restates the create/title dependency rather than adding format or validation detail, so 3 is the appropriate baseline when the schema does the heavy lifting.

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

Purpose5/5

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

States a concrete verb pair and resource ('List or create the user's Popcraft projects — the folders their generations are organized into'), and the gloss clarifies the entity precisely against siblings like popcraft_show_generations and popcraft_show_medias. An agent can tell what this tool owns without opening the schema.

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

Usage Guidelines5/5

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

Ends with explicit routing ('Use this tool when the user asks to see, organize into, or start a new project') and names the downstream alternatives (popcraft_generate_image/video/audio) plus the condition that selects them. It also documents the fallback that a non-existent project_name is auto-created, removing a common inference gap.

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

popcraft_show_elementsPopcraft Elements LibraryA
Read-only
Inspect

Browse the user's reusable Popcraft Elements — saved characters, objects, backgrounds, and styles, each backed by a reference image. TO USE AN ELEMENT IN A GENERATION: pass its image_url as a medias[].value entry — role "reference" for popcraft_generate_image (subject/style transfer), role "image" (or "start_image") for popcraft_generate_video — and mention the element by name in the prompt. Optionally filter by type (character/object/background/style) or a search substring on the name. In widget-capable clients an interactive grid is shown; a picked element comes back as the next user message. Call it when the user asks about their elements/characters or wants consistent subjects across generations.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter to one element type
limitNoMax elements to return, 1-50 — default 24
searchNoCase-insensitive substring match against element names

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds non-obvious behavior the annotations cannot convey: in widget-capable clients an interactive grid renders and a picked element arrives as the next user message. It stops short of describing pagination or the full element payload shape.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, followed by the highest-value instruction (how to actually use an element in a generation). The middle how-to-use block is dense but earns its place by linking to sibling tools; the widget note at the end is slightly tangential but short.

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

Completeness4/5

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

With no output schema, the description carries the return burden and does describe elements as backed by a reference image with an image_url, plus the widget-pick return path. It is nearly complete for a 3-param, read-only browse tool, though pagination and the full field list are left implicit.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description restates the type values and the substring-search semantics that the schema already documents, and never mentions limit or its 1-50/default-24 bounds. It adds usage framing but little parameter meaning beyond the schema.

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

Purpose5/5

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

States a specific verb (Browse) and resource (reusable Popcraft Elements: saved characters, objects, backgrounds, styles, each backed by a reference image), which cleanly separates it from siblings like popcraft_show_medias and popcraft_show_generations. An agent knows exactly what this returns without opening the schema.

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

Usage Guidelines5/5

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

Explicit trigger: 'Call it when the user asks about their elements/characters or wants consistent subjects across generations.' It also names the downstream alternatives (popcraft_generate_image, popcraft_generate_video) and the exact role values to use with each, so the agent knows both when to call this and what to do with the result.

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

popcraft_show_generationsPopcraft Generation HistoryA
Read-only
Inspect

List the current user's recent Popcraft generation jobs (image/video/audio), most recent first. Optionally filter by type and cap the count with limit (default 20, max 50). Use this to find a job_id from an earlier session, or to show the user their generation history — each item carries its full original params (model, aspect_ratio, prompt, credits) and result URLs, so a past result can be reused directly: pass its URL as a medias[].value in a new popcraft_generate_* call. Call it when the user asks to browse history; do NOT call it repeatedly as a post-generation poll step (the result card already live-updates). For a single job's live status use popcraft_job_display.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter to only this generation type
limitNoMax jobs to return, 1-50 — default 20

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real value beyond that: it discloses that each item carries its full original params (model, aspect_ratio, prompt, credits) and result URLs, and explains the reuse path via medias[].value in a popcraft_generate_* call. It does not mention pagination behavior or result-count limits beyond the cap, which keeps it short of a 5.

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

Conciseness4/5

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

Purpose and scope are front-loaded in the first sentence, followed by filtering, the reuse workflow, and the routing guidance. It is a dense paragraph with no filler, though it is long enough that the polling caveat and the job_display pointer could be tightened into one sentence.

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

Completeness5/5

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

There is no output schema, so the description carries the return-shape burden and does so by describing item contents (original params and result URLs) and ordering. Combined with the usage routing and annotation-covered safety profile, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters, including the enum and the 1-50 range. The description's restatement of type filtering and the limit default/max adds no syntax or semantics beyond the structured fields, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('List the current user's recent Popcraft generation jobs'), the resource subtypes (image/video/audio), and the ordering ('most recent first'). It also implicitly distinguishes itself from popcraft_job_display and popcraft_job_status by describing the history-browsing scope rather than live status.

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

Usage Guidelines5/5

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

Gives concrete use cases ('find a job_id from an earlier session', 'show the user their generation history'), an explicit negative ('do NOT call it repeatedly as a post-generation poll step'), and names the sibling to use instead for live status ('popcraft_job_display'). This is exactly the when/when-not/alternative pattern.

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

popcraft_show_mediasPopcraft Media LibraryA
Read-only
Inspect

Browse the current user's saved Popcraft media library — both uploaded/imported media and saved generation outputs — most recent first. Filter by type (image/video/audio) and/or source ("uploaded" vs "generated"), and page with limit (default 20, max 50) + offset. Each item carries a url — reuse any media directly by passing that url as a medias[].value in a popcraft_generate_image/popcraft_generate_video call (e.g. as a style/subject reference, or a start/end frame). Use this to find media the user already has rather than asking them to re-upload. For the history of generation JOBS (with status + job ids) use popcraft_show_generations; this tool lists the persisted asset LIBRARY. Personal library only — workspace/shared assets are not included.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter to one media type
limitNoMax items to return, 1-50 — default 20
offsetNoNumber of items to skip for pagination — default 0
sourceNo"uploaded" = media you uploaded/imported; "generated" = saved generation outputs

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint/openWorldHint; the description adds ordering (most recent first), scope exclusion (personal library only, no workspace/shared assets), and the behavioral trait that each item carries a reusable url. This cross-tool reuse semantic is context the structured fields do not provide.

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

Conciseness4/5

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

Front-loaded with purpose, then filters, then the high-value reuse tip, then sibling differentiation — each sentence earns its place. It is dense and runs long for a single paragraph, but there is no filler.

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

Completeness5/5

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

For a read-only filtered-list tool with no output schema, the description covers scope, ordering, filters, pagination, and even the practical downstream use of the returned url. Combined with readOnly annotations, an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description reinforces the defaults (limit default 20, max 50) and clarifies source semantics. It goes beyond the schema by explaining what the returned url field enables, though the four input parameters themselves are already fully documented in the schema.

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

Purpose5/5

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

States a specific verb and resource ('browse the current user's saved Popcraft media library') plus scope details (uploaded/imported vs generated outputs, sorted most recent first). It also explicitly contrasts itself with the sibling 'popcraft_show_generations' (job history vs persisted asset library), so an agent can disambiguate without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('find media the user already has rather than asking them to re-upload') and when-to-use-the-other ('For the history of generation JOBS ... use popcraft_show_generations'). It also documents the filter conditions (type/source) and pagination controls, leaving nothing to inference.

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

popcraft_show_plans_and_creditsShow Plans & Credits (Popcraft)A
Read-onlyIdempotent
Inspect

Show the user their current credit balance and plan with live plan/credit-pack pricing and direct purchase links — use this as the recovery step after a popcraft_generate_* call fails with insufficient credits, or whenever the user asks about pricing/plans/credits. Pass intent:"topup" (out of credits / buy more) or intent:"upgrade" (plan change / model locked) so the response is ordered for that purchase path. The returned text is ready-made, user-facing copy whose Markdown links point at the exact purchase pages — relay it verbatim (do NOT summarize, reorder, or drop the links; in widget-capable clients you may add that the pricing card above shows the same options).

ParametersJSON Schema
NameRequiredDescriptionDefault
intentNo"general" (default) orders by account state; "topup" leads with credit packs (out-of-credits recovery); "upgrade" leads with subscription plans

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds critical behavioral context the annotations cannot carry: the output is ready-made user-facing copy with Markdown links that must be relayed verbatim, with explicit prohibitions on summarizing, reordering, or dropping links. That is exactly the kind of non-obvious trait an agent needs.

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

Conciseness4/5

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

It is a dense single block, but it is front-loaded with the core purpose and every clause earns its place (trigger conditions, intent semantics, relay instructions). Slightly long, though nothing is redundant with structured fields.

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

Completeness5/5

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

There is no output schema, so the description carries the burden of describing the return value — and it does ('ready-made, user-facing copy whose Markdown links point at the exact purchase pages'), plus how to present it. For a zero-required-param read tool this is fully sufficient.

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

Parameters4/5

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

Schema coverage is 100% and the enum values are already documented, so the baseline is 3. The description adds value by explaining the consequence of each intent — topup/upgrade change how the response is 'ordered for that purchase path' — which the schema only hints at.

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

Purpose5/5

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

The description states a specific verb+resource ('Show the user their current credit balance and plan') and immediately scopes it beyond a bare balance call by adding 'live plan/credit-pack pricing and direct purchase links'. This lets an agent distinguish it from siblings like popcraft_balance or popcraft_transactions without opening their schemas.

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

Usage Guidelines5/5

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

It gives explicit triggers: 'use this as the recovery step after a `popcraft_generate_*` call fails with insufficient credits, or whenever the user asks about pricing/plans/credits.' It further routes between parameter choices (topup for out-of-credits, upgrade for model-locked). 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.

popcraft_transactionsPopcraft Credit TransactionsA
Read-only
Inspect

List the user's recent credit transactions (spend/refund/grant), newest first — use when the user asks where their credits went, for a spending history, or to verify a charge/refund. For the current balance use popcraft_balance; for plans and top-ups use popcraft_show_plans_and_credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax transactions to return, 1-50 — default 10

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds useful behavioral detail beyond that: newest-first ordering and the set of transaction types returned. It does not discuss pagination or the maximum result window (limit cap of 50), which is the only notable omission.

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

Conciseness5/5

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

Two tight sentences: purpose and ordering first, then the disambiguating alternatives. Every clause earns its place and nothing is repeated from the schema or annotations.

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

Completeness4/5

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

For a simple read-only listing with no output schema, the description supplies scope, ordering, and transaction categories, which is nearly everything an agent needs. It stops short of describing the per-transaction fields (amount, timestamp, source) an agent might present to a user.

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

Parameters3/5

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

With 100% schema description coverage on the single `limit` parameter, the schema already carries the semantics (1-50, default 10). The description adds nothing about result count or truncation, 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.

Purpose5/5

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

States a specific verb and resource ('List the user's recent credit transactions') and enumerates the transaction kinds (spend/refund/grant) plus ordering. It explicitly names the sibling tools that cover adjacent needs, so an agent can distinguish it without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit triggers ('where their credits went', 'spending history', 'verify a charge/refund') and routes the alternative cases to `popcraft_balance` for current balance and `popcraft_show_plans_and_credits` for plans/top-ups. Both when-to-use and when-to-use-something-else are covered.

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

popcraft_upgrade_videoUpgrade Draft to 1080p (Popcraft)A
Idempotent
Inspect

Render the 1080p final from a Seedance 2.5 DRAFT — the second and last step of draft mode. Pass the generation_id returned by popcraft_generate_video when it was called with draft: true (the result carries it as draft_generation_id). This does NOT re-roll the clip: it replays the draft's own prompt, references, seed, duration, aspect ratio and audio setting at 1080p, so the user gets exactly the video they approved, larger. Billed as a normal 1080p job on top of what the draft already cost — draft + final together run ~1.2× a straight 1080p render, so only take this step once the user has SEEN and approved the preview. The draft id is valid 7 days; after that the upgrade is refused and the clip has to be regenerated from scratch. Calling this twice on the same draft is safe — the second call returns the first upgrade and charges nothing. Set get_cost: true to quote the 1080p price WITHOUT submitting. On success an interactive result card is shown to the user and refreshes itself — do NOT poll; call popcraft_job_display at most once, and only if no card rendered or the user asks later. Never tell the user how long the job will take or quote any estimate of generation time — the result card shows progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
get_costNotrue = return the exact 1080p credit cost WITHOUT submitting. The draft is unaffected and nothing is charged
generation_idYesThe draft generation id — `draft_generation_id` from the popcraft_generate_video result that used `draft: true`, or the job id shown on its result card

TDQS

A4.7/5.0
Behavior5/5

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

Despite annotations covering safety, the description adds substantial behavioral context: cost model (~1.2x a straight 1080p render, billed on top of the draft), a 7-day validity window with refusal after expiry, idempotent double-call behavior that charges nothing the second time, and a no-polling contract. These go well beyond idempotentHint/openWorldHint.

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

Conciseness5/5

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

Front-loads the core action in the first clause, then layers billing, validity, idempotency, and polling rules. It is long but every sentence is actionable and nothing is redundant filler, which is appropriate given the billing and workflow complexity.

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

Completeness5/5

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

No output schema exists, yet the description covers return behavior (interactive self-refreshing result card), error/expiry behavior (7-day refusal), and side effects (charges, no re-roll). An agent has everything needed to call this correctly and to instruct the user.

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

Parameters3/5

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

Schema coverage is 100% and both parameters (generation_id, get_cost) are already fully documented in the schema, including the get_cost non-submitting semantics. The description restates the generation_id source and the quote-without-submitting behavior but adds no syntax, format, or edge-case detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Render the 1080p final from a ... DRAFT') and pins its scope as 'the second and last step of draft mode.' It implicitly distinguishes itself from popcraft_generate_video and popcraft_upscale_video by naming the draft workflow, and explicitly says it does NOT re-roll the clip.

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

Usage Guidelines5/5

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

Gives an explicit precondition ('only take this step once the user has SEEN and approved the preview'), an explicit alternative for progress checks ('call popcraft_job_display at most once, and only if no card rendered'), and a when-not (never quote generation time). Routing is unambiguous.

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

popcraft_upscale_imageUpscale Image (Popcraft)AInspect

Upscale and enhance an existing image to 2x or 4x with Topaz — use when the user asks to upscale, enhance, sharpen, or increase the resolution of an image. Pass the source image as a GCS URL (image_url from a prior generation result or popcraft_media_import_url); width and height (pixels) are optional hints — the server measures the real file and prices from that, so the cost is unaffected by what you pass. mode picks the Topaz model: "standard-mode" (default, general photos/faces), "face-recovery-mode" (degraded portraits), "art-and-anime" (illustrations/logos), "cgi-mode" (3D renders), "text-and-shapes" (screenshots/documents), "creative-mode" (re-imagine). This tool does not use prompt or count. Set get_cost:true to preflight the credit cost WITHOUT submitting. On success, an interactive result card is shown and refreshes itself automatically — do NOT poll; call popcraft_job_display at most once if no card is visible. The result includes project — the Popcraft project the output was filed into; when the user did not pass project_id/project_name, mention it briefly (e.g. "saved to "). Never tell the user how long the job will take or quote any estimate of generation time — the result card shows progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoTopaz mode — default "standard-mode"; see the description for when to pick the others
scaleNoUpscale factor: 2 (default) or 4
widthNoOptional source width hint (px); the server measures the real file for pricing
heightNoOptional source height hint (px); the server measures the real file for pricing
get_costNotrue = return the exact credit cost WITHOUT submitting
image_urlYesSource image as a GCS https URL (from a prior result or popcraft_media_import_url) or gs:// URI
project_idNoFile the result into this Popcraft project (id from popcraft_projects). Omit to use the user's current/last-used project (or a default). Errors if you don't own it.
project_nameNoFile the result into the project with this title, creating it if it doesn't exist. Ignored when project_id is set.

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: pricing is measured from the real file so width/height hints don't affect cost, the tool ignores prompt/count, get_cost preflights without submitting, a result card self-refreshes so the agent must not poll, and the result carries the target project. It also handles the async flow explicitly ('call popcraft_job_display at most once if no card is visible') and forbids quoting generation-time estimates, which the annotations do not convey.

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

Conciseness4/5

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

Dense but front-loaded: purpose and trigger come first, then parameter guidance, then pricing, then async/polling rules. Nearly every sentence carries operational weight, though the mode enumeration and the polling/result-card instructions make it long enough that the paragraph could be segmented for faster scanning.

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

Completeness4/5

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

For an 8-parameter, async job tool with no output schema, it covers a lot an agent needs: input source, pricing semantics, preflight flag, project filing, and the result-card lifecycle. It is not fully complete because one third of the mode enum values are unexplained, and the mode description in the schema points back to a description that never defines them.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description genuinely adds meaning: it maps modes to content types (faces, degraded portraits, illustrations/logos, 3D renders, screenshots/documents, re-imagine) and explains that width/height are advisory hints that do not affect cost. It is docked one point because the schema enum exposes nine modes (high-fidelity-mode, low-res-mode, standard-max are absent) while the description only explains six, leaving a gap that the schema's own text delegates back to the description.

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

Purpose5/5

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

States a specific verb + resource + scope: 'Upscale and enhance an existing image to 2x or 4x with Topaz.' The image resource immediately separates it from the sibling popcraft_upscale_video and popcraft_upgrade_video, and the 2x/4x constraint tells the agent what the tool can and cannot produce.

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

Usage Guidelines4/5

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

Gives an explicit trigger ('use when the user asks to upscale, enhance, sharpen, or increase the resolution of an image') and an operational precondition ('pass the source image as a GCS URL ... from a prior generation result or popcraft_media_import_url'). It does not explicitly name the image-vs-video alternative or state when NOT to use it, so it stops short of a 5.

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

popcraft_upscale_videoUpscale Video (Popcraft)AInspect

Upscale and enhance an existing video to 2x or 4x with Topaz — use when the user asks to upscale, enhance, sharpen, denoise, or convert a video to higher resolution. Pass the source as a GCS URL (video_url from a prior generation result or popcraft_media_import_url); width, height (pixels) and duration (seconds) are optional hints — the server measures the real file and prices from that, so the cost is unaffected by what you pass. mode picks the Topaz model: "live-action" (default, real footage), "detail", "sharpen", "theia-detail" (fine detail), "cgi" (3D renders). fps above 30 roughly doubles the cost. This tool does not use prompt or count. Set get_cost:true to preflight the credit cost WITHOUT submitting — video upscales are expensive, so preview first unless the user already confirmed. On success, an interactive result card is shown and refreshes itself automatically — do NOT poll; call popcraft_job_display at most once if no card is visible. The result includes project — the Popcraft project the output was filed into; when the user did not pass project_id/project_name, mention it briefly (e.g. "saved to "). Never tell the user how long the job will take or quote any estimate of generation time — the result card shows progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoOutput fps: 24, 30 (default), or 60 — above 30 roughly doubles the cost
modeNoTopaz mode — default "live-action"
scaleNoUpscale factor: 2 (default) or 4
widthNoOptional source width hint (px); the server measures the real file for pricing
heightNoOptional source height hint (px); the server measures the real file for pricing
durationNoOptional source duration hint (s); the server measures the real file for pricing
get_costNotrue = return the exact credit cost WITHOUT submitting; preview before submitting unless the user already confirmed
video_urlYesSource video as a GCS https URL (from a prior result or popcraft_media_import_url) or gs:// URI
project_idNoFile the result into this Popcraft project (id from popcraft_projects). Omit to use the user's current/last-used project (or a default). Errors if you don't own it.
project_nameNoFile the result into the project with this title, creating it if it doesn't exist. Ignored when project_id is set.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing cost behavior (fps above 30 roughly doubles cost), the get_cost preflight pattern, that no prompt/count is used, that the result card auto-refreshes so polling is forbidden, and project-filing consequences. This is rich operational context an agent cannot get from readOnlyHint/idempotentHint alone.

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

Conciseness4/5

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

Front-loads purpose, then layers cost, mode, and result-handling guidance efficiently. It is dense and lengthy, but nearly every sentence carries actionable information; minor trimming of the card/polling advice could tighten it further.

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

Completeness5/5

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

Despite no output schema, the description explains what the result contains (interactive card, `project` value) and how to handle it, plus cost and routing behavior. An agent has everything needed to invoke and follow up correctly on this 10-parameter mutation tool.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3), and the description adds real meaning beyond it: width/height/duration are non-authoritative hints that do not affect pricing because the server measures the file, plus glosses for the Topaz mode values. It stops short of full per-parameter documentation but meaningfully enriches the enum and hint semantics.

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

Purpose5/5

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

States a specific verb and resource ('Upscale and enhance an existing video to 2x or 4x with Topaz'), naming the engine and factors. It is clearly distinguishable from siblings like popcraft_upscale_image and popcraft_upgrade_video without opening their schemas.

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

Usage Guidelines4/5

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

Provides explicit trigger conditions ('use when the user asks to upscale, enhance, sharpen, denoise, or convert...'), mode-selection guidance, and a get_cost preflight workflow. It does not explicitly contrast against the sibling popcraft_upgrade_video or upscale_image, but the when-to-use context is strong.

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

Publisher details

Operator
Popcraft AI · Publisher source
Operator website
https://popcraft.ai
Vendor relationship
Not applicable
Trust center
Not applicable
Restrictions
Not applicable

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables generation and enhancement of videos through a unified entry point to 200+ video models (Kling, Hailuo, Seedance, Vidu, Wanxiang), covering text-to-video, image-to-video, start-end frame interpolation, reference-to-video, video upscaling, and digital-human talking-head clips. Built for short-video operations, ad placement, and drama teams that would otherwise juggle several platforms for a single clip.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Generate video from a prompt, from an image, or from up to thirty reference images, routed across the field of AI video models (Sora, Veo, Kling, Seedance, Hailuo, Wan and more). Quotes the credit cost before spending it and refunds a technical failure automatically.
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.