MaxVideoAI
Server Details
Plan, compare, price, generate, and recover AI video from compatible MCP clients.
- Status
- Healthy
- Uptime
- 51.0% over 42 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- camgraphe/maxvideoai-plugin
- GitHub Stars
- 0
TDQS
Scored across 15 tools
Most tools target distinct stages or resources such as budgeting, quoting, confirmation, status, and delivery. Mild overlap exists among model-discovery tools (list_models/get_model_details/recommend_models) and result-handling tools (get_generation_status/list_recent_generations/present_generation/get_generation_download), but descriptions clearly indicate when each applies.
All 15 names use snake_case with a predictable verb_object pattern, e.g. calculate_project_budget, prepare_generation, get_generation_status, list_models. There is no mixed casing or inconsistent verb style.
15 tools sits at the upper end of the typical range but is justified by the domain breadth: model discovery, media import, budgeting, quoting, confirmation, status recovery, delivery, account, and funding. Each tool maps to a distinct lifecycle operation rather than a redundant wrapper.
The surface covers model discovery, media reference handling, budgeting, exact quoting, confirmation, status/recovery, presentation/download, account status, and top-up. Minor gaps such as explicit cancellation or media deletion exist, but the core generation lifecycle is well covered.
Available Tools
16 toolscalculate_project_budgetCalculate a MaxVideoAI project budgetARead-onlyInspect
Use this when the user needs current pricing estimates of concrete video production proposals, including single- or mixed-model shots, clip counts and explicit creative attempts. The host owns the creative plan and names each proposal; give mixed-model shots a factual rationale. Validate each selected mode with get_model_details. Compare proposals using the same output and attempts assumptions before calling an alternative cheaper or lower-cost. Separate base production from creative-attempt allowance: creative attempts are billable scenarios; technical failures follow the returned job and refund state. Estimates do not reserve a price or authorize generation. Prices use the connected environment and may differ between staging and production. If audio is always_generated or unavailable, omit settings.audio; only send it when optional. If aspectRatios is empty, omit aspectRatio; otherwise use a supported value. Do not use it to invent the creative plan, reserve a price, create a generation quote, inspect the wallet, or spend funds.
| Name | Required | Description | Default |
|---|---|---|---|
| proposals | Yes | One to four user-named video production proposals, including single-model or mixed-model approaches. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint/destructiveHint, it explains that estimates do not reserve price or authorize generation, notes environment pricing differences (staging vs production), describes how technical failures follow the job and refund state, and clarifies that creative attempts are billable while technical failures are not – all critical safety and side-effect context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long (~300 words) but every sentence carries meaning – usage triggers, exclusions, parameter conditions, and behavioral caveats. It is front-loaded with the core function and organized from general to specific, with no fluff, though it could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only estimation tool, it covers prerequisites (get_model_details), environment differences, parameter constraints, and exclusions. It omits explicit return-format details, but the absence of an output schema and the tool's purpose make the expected response (an estimate) inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% already, but the description adds actionable conditional logic: omit settings.audio when not optional, omit aspectRatio when mode.aspectRatios is empty, and separate base production from creative-attempt allowance. These go beyond the schema's declarative descriptions and help the agent construct valid requests.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement of purpose: 'current pricing estimates of concrete video production proposals.' It names specific scope (single- or mixed-model shots, clip counts, creative attempts) and explicitly lists non-uses ('invent the creative plan', 'reserve a price', 'create a generation quote', 'inspect the wallet', 'spend funds'), which clearly distinguishes it from generation and wallet tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It starts with 'Use this when' providing a clear trigger, and gives explicit exclusions. It advises comparing proposals on the same assumptions before calling an alternative cheaper/lower-cost, implying there are other pricing tools, though it doesn't name them. It also directs validation via get_model_details, which orients the agent to prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_generation_pricesCompare compatible MaxVideoAI generation pricesRead-onlyInspect
Use this when an open image/video model choice or requested alternatives need prices for a simple single-output brief. One read returns up to three compatible models with current customer prices, favoring different prices; fewer if fewer meet every constraint. Use actual imported owned assets, exact mode, reference roles/combinations and explicit duration/resolution/audio requirements. Unspecified presets are disclosed; do not silently change requirements. Include a baseline model for freshly calculated savings; disclose configurationDiffers and never compare currencies. Keep labels/explanations brief, with no routine lip-sync caveats; price alone does not prove quality. Do not use to substitute an explicitly chosen model. No quotes, wallet reads, reservations, spending or media generation. After choice inspect get_model_details and prepare_generation for a fresh exact quote, then wait for approval. Invite a different model, resolution, duration or budget for a new quote and price comparison. For multi-shot production/attempt allowances use calculate_project_budget.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| prompt | Yes | ||
| surface | Yes | ||
| settings | No | Explicit constraints only. Include durationSec for video. Leave unspecified resolution/framing null for disclosed supported presets. Never relax a requested value to get more models. | |
| references | No | ||
| baselineModelId | No | Reprice this exact model to calculate current savings. Never pass a remembered price. | |
| baselineSettings | No | When changing resolution or duration, supply the original quote settings to reprice that configuration. Null uses the current scenario. Never pass an old price. | |
| candidateModelIds | No | Only explicitly requested alternatives; null compares the live eligible catalog. Never replace a named model without approval. |
confirm_generationConfirm a MaxVideoAI generationADestructiveIdempotentInspect
Use only after explicit user approval of the exact fresh quote returned by prepare_generation. Display its exact price and wait for that approval first; ambiguous assent is not confirmation. This consumes the funding locked into the quote: wallet quotes may spend credits; an included trial does not. It contacts an external generation provider. A confirmation authorizes exactly one paid attempt and is consumed whether accepted, failed or refunded. A refund does not restore authorization. Every replacement is a new paid attempt requiring a fresh exact quote and new explicit user approval. Duplicate delivery of the identical confirmed request returns the existing job; never use this to retry a failed generation. After an ambiguous response, recover through get_generation_status or list_recent_generations rather than submitting a second paid attempt. An accepted job is not a completed result.
| Name | Required | Description | Default |
|---|---|---|---|
| quoteId | Yes | ||
| confirmed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond annotations by disclosing that it contacts an external provider, consumes funding, that refunds do not restore authorization, and that a confirmation is consumed even on failure or refund. It also aligns with idempotentHint by noting duplicate delivery returns the existing job, adding meaningful behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries critical information: preconditions, financial implications, idempotency, recovery. It is front-loaded with the most important usage rule and organized logically from precondition to consequences. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with financial and external side effects, no output schema, and high complexity, the description covers all essentials: when to call, what it does, what happens on duplicate, refund, failure, and how to recover. It even notes that an accepted job is not a completed result, ensuring the agent understands the full lifecycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It references quoteId as the 'exact fresh quote returned by prepare_generation' and implies confirmed must be true via 'explicit user approval'. While it doesn't name the parameters directly, it gives functional meaning to the quoteId and the confirmation flag, adding value beyond the schema's UUID and const true.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (confirm a generation), the exact precondition (after explicit user approval of the exact fresh quote from prepare_generation), and distinguishes it from siblings by specifying it consumes funding and authorizes exactly one paid attempt. It also clarifies that duplicate delivery returns an existing job, so it's clearly not a retry tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use only after explicit user approval' and details when not to use it (never to retry a failed generation). It even recommends recovery paths through get_generation_status or list_recent_generations for ambiguous responses, giving clear when/when-not and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reference_upload_linkUpload private reference mediaAInspect
Use this when the host cannot expose a file handle and the user needs a private image, video or audio reference. It creates a short-lived handoff for the requested media kind. A compatible UI host can show the in-chat multi-file importer; the exact returned browser destination is the manual fallback. For local files in Codex or Claude Code, create one link per file and use the packaged local helper. The helper reads local bytes: never send a raw local path to the MCP server, publish a public URL, or depend on Computer Use. After the importer or helper returns asset IDs, use them directly without relisting. After a browser upload is saved to the same connected MaxVideoAI library, call list_media by media kind. A handoff is not proof of upload completion. If the handoff fails, is denied or unavailable, explain the blocker and ask to authorize or retry it; do not invent a replacement URL. This does not start generation or modify an existing asset.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key behavioral traits: the handoff is short-lived, it is not proof of upload completion, and it fails or can be denied. It also states what the operation does not do (does not start generation or modify an existing asset), adding safety context beyond the basic destructiveHint/readOnlyHint flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but nearly every sentence carries operational value: when to use, fallback behavior, local-file guidance, safety cautions, and failure handling. It is front-loaded with the primary use case, though the density of caveats makes it less immediately scannable than it could be with light structuring.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is unusually complete. It explains the returned browser destination fallback, the importer and helper flow, what to do after asset IDs are returned, when to call list_media, and how to behave on failure. An agent has enough context to call this tool correctly and respond to outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but there is only one enum parameter. The description reinforces the semantics by naming all supported media kinds (image, video, audio) and framing kind as the requested media type, so an agent can confidently select a value. It could be slightly more explicit about the parameter name, but the meaning is clear from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it creates a short-lived handoff for private image, video, or audio reference media. It also distinguishes itself from related tools by explicitly noting it does not start generation or modify existing assets, so an agent can separate it from list_media and generation-oriented siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger condition: use it when the host cannot expose a file handle. It also provides concrete guidance for local files in Codex or Claude Code, including creating one link per file and using the packaged helper, plus a clear post-upload workflow with list_media. This is actionable and goes well beyond a generic statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_topup_linkCreate a MaxVideoAI top-up handoffAInspect
Use this when an exact prepared quote needs more credits. It creates a short-lived MaxVideoAI web handoff and invalidates the old short-lived quote. This tool does not take payment. Payment happens only on the MaxVideoAI website at the exact returned destination; never collect payment data or claim the browser step completed. After the user reports funding, call get_account_status, then a fresh prepare_generation (prepare_audio_generation for Audio). Display the fresh exact quote and wait for new explicit approval before confirmation. Funding is not generation approval; never automatically retry or generate.
| Name | Required | Description | Default |
|---|---|---|---|
| quoteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all default false values, so the description carries the full behavioral burden — and it delivers: it discloses the invalidation of the old quote, states that payment is not taken by the tool, and establishes that funding is not generation approval. The disclosed invalidation creates a mild tension with destructiveHint: false, but the side effect is openly declared so the agent is fully informed and no contradiction is flagged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by dense, safety-critical guidance; roughly 130 words with every sentence carrying operational weight. Slightly long for a one-parameter tool, but the workflow and prohibition content justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensively covers the trigger, side effects, non-actions, follow-up workflow, and the explicit approval gate for a tool with one parameter and no output schema. The main gap is the response shape — it references 'the exact returned destination' but never describes what the tool returns beyond a destination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never names quoteId explicitly, though the 'exact prepared quote' framing makes the parameter's referent inferable as the quote that needs credits. For a single required parameter this is adequate compensation, but it relies on inference rather than an explicit mapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — creates a short-lived MaxVideoAI web handoff and invalidates the old quote — prefixed with the trigger condition 'when an exact prepared quote needs more credits.' This clearly differentiates it from siblings such as create_reference_upload_link and prepare_generation, whose purposes are not payment top-up handoffs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit 'Use this when' trigger and later names the required follow-up sequence (get_account_status, then a fresh prepare_generation or prepare_audio_generation for Audio). It also gives explicit exclusions and prohibitions: never collect payment data, never claim the browser step completed, and never auto-retry or generate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_statusGet MaxVideoAI account statusARead-onlyInspect
Use this when the user asks which MaxVideoAI account is connected, its current credit balance, trial state, spending limits, or safe account destinations. Do not use it to reveal a private email, collect payment details, charge credits, change the wallet, or generate media.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and non-destructive; the description adds behavioral boundaries beyond that by stating it must not reveal private email, collect payments, charge credits, change the wallet, or generate media. It does not describe response shape or potential limitations, but the added exclusions are meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences: the first enumerates triggering intents, the second enumerates exclusions. Every clause earns its place, and there is no redundant restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, read-only annotations, and a clear enumeration of returned data (account, balance, trial state, spending limits, destinations), the description is sufficient for an agent to invoke and interpret the tool correctly. The only mildly opaque term, 'safe account destinations,' is a minor domain detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100%, so the baseline is 4. The description does not need to explain parameters; it adds value by enumerating the account-related data points an agent can expect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear resource (MaxVideoAI account) and the exact data the tool exposes: connected account, credit balance, trial state, spending limits, and safe account destinations. It also distances itself from sibling tools by excluding media generation, so an agent can distinguish it from get_generation_status and list_media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition ('when the user asks which MaxVideoAI account is connected...') and an explicit do-not-use list covering private email, payment details, charging credits, wallet changes, and media generation. This leaves no ambiguity about when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generation_downloadRefresh a MaxVideoAI generation downloadARead-onlyIdempotentInspect
Use this from the MaxVideoAI result app to create a fresh short-lived attachment URL for one completed owned generation.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | |
| download | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds practical behavioral context: the URL is short-lived, requires generation completion, and is ownership-scoped. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every clause contributes meaning: source context, action, freshness, scope, and ownership constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema and strong annotations, the description covers the key constraints: where to call it, what it returns, and what prerequisites apply. The only minor gap is not explicitly naming jobId as the generation ID, but this is easily inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only a bare jobId string with no descriptionholistically, and schema description coverage is 0%. The description implies jobId refers to a generation ('one completed owned generation') but never explicitly explains that jobId is the generation identifier, leaving some inference to the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: create a fresh short-lived attachment URL for a completed owned generation. It distinguishes this from sibling tools like get_generation_status, prepare_generation, and present_generation by naming the exact resource and outcome.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use it from the MaxVideoAI result app and only for completed owned generations. It does not explicitly name alternatives or when not to use it, but the context is sufficiently directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generation_statusGet a MaxVideoAI generation statusARead-onlyInspect
Use this to follow or recover one known owned generation, including after interruption or an ambiguous submission response. It returns safe current status, failure/refund state and MaxVideoAI library/workspace destinations without exposing prompts, provider details or private media. An accepted or running job is not completed: do not claim completion until terminal success. When retry is returned, wait at least retry.afterSeconds before calling retry.tool with retry.arguments; do not repeatedly check sooner. When retry is null, stop automatic polling. For a technical failure inspect the refund state; do not resubmit automatically. Every replacement is a new paid attempt requiring a fresh quote and approval. For a completed job use present_generation once to deliver the saved result. For Audio, preserve the original output and use the same recovery flow.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description reinforces this by saying it returns "safe current status" and does not expose prompts, provider details, or private media. It also adds important behavioral context: accepted/running jobs are not complete, retries have timing requirements, replacements are paid, and refund state should be checked after technical failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core use case and then adds dense, operational guidance. Every sentence carries meaningful behavioral or routing information, and there is no filler or repetition beyond what is necessary for safe use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explains the important parts of the response: current status, failure/refund state, destinations, and retry instructions. It also covers post-success behavior with present_generation and accounts for Audio jobs. For a single-parameter read-only status tool, this is complete enough for an agent to act correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes only jobId with min/max length, and schema description coverage is 0%. The description implies that jobId must refer to a known owned generation and mentions ambiguous submission responses, which hints at where the ID comes from. However, it never explicitly states how the jobId is obtained or validated, so the agent must infer the source from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific purpose: follow or recover one known owned generation, including after interruption or ambiguous submission. It also distinguishes the tool from sibling present_generation by explaining when to use that tool instead, and from list_recent_generations by focusing on a known single job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage rules: use for recovery/polling, wait at least retry.afterSeconds before retrying, stop polling when retry is null, avoid repeated checks, do not resubmit on technical failure, and use present_generation once the job is complete. This is strong, actionable guidance that also warns against common misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_detailsGet MaxVideoAI model detailsARead-onlyInspect
Use this when the user needs exact current capabilities, limits, evidence and reviewed official promptingSources for one known public MaxVideoAI model. Read the selected mode before budgeting or quoting: required fields, settings, reference roles/counts/kinds, per-file and combined durations, audio policy and limits. t2v creates video from text; i2v and i2v_standard animate a first/source image and may accept a last frame; ref2v uses image/video/audio references; fl2v requires first_frame and last_frame images; v2v edits source video; r2v uses ordered reference videos; extend uses ordered clips; a2v follows owned audio; retake replaces part of an owned clip; reframe changes its canvas. i2v_standard is the published Standard route; check live prices before calling it cheaper. Only live generation-enabled modes are executable. Honor assetRequired and conditional assetRequiredWhen: required references must be private MaxVideoAI assets, never arbitrary public HTTPS URLs. If aspectRatios is empty, omit aspectRatio; if non-empty, include a supported aspectRatio. When audio is always_generated or unavailable, omit settings.audio; only send it when optional. For GPT Image edits use source/reference images and an optional mask image with the mask role; custom resolution needs imageWidth and imageHeight from live constraints. For prompt help, use relevant reviewed official provider promptingSources and share the returned URL when useful; if empty, say no reviewed official source was returned; do not invent a guide or substitute web search. Provider guides inform prompt craft, not MaxVideoAI availability or pricing; live details also govern settings and execution. Do not use this for exact pricing, generation, hidden models, or provider guarantees.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Exact public MaxVideoAI model ID returned by list_models or recommend_models. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, it discloses important behaviors: only live generation-enabled modes are executable, required references must be private MaxVideoAI assets, aspectRatio and audio settings have specific omission rules, and empty promptingSources should be reported as absent rather than invented. These are practical behavioral traits an agent cannot infer from annotations or the simple input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is strong and front-loaded, but the description becomes a dense single-paragraph dump of mode semantics, asset rules, and generation guidance. Much of this is valuable, but the t2v/ref2v/v2v taxonomy could be condensed or moved to an output schema or separate reference; it is more verbose than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return-value semantics, and it does so extensively: mode classification, asset requirements, aspect ratio and audio handling, promptingSource behavior, and execution boundaries. It lacks precise detail on what 'evidence' covers, but overall it gives an agent enough context to invoke the tool and interpret common results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single `id` parameter is already fully documented in the schema as 'Exact public MaxVideoAI model ID returned by list_models or recommend_models'. The description adds 'one known public' but does not meaningfully enhance the parameter's meaning, so the baseline 3 for high schema coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence precisely states the resource ('one known public MaxVideoAI model') and what it returns ('exact current capabilities, limits, evidence and reviewed official promptingSources'). It also differentiates this tool from list/recommend siblings by requiring a known model, and explicitly rules out pricing and generation use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use condition ('when the user needs exact current capabilities...'), practical timing ('before budgeting or quoting'), and explicit exclusions ('Do not use this for exact pricing, generation, hidden models, or provider guarantees'). It does not name a specific sibling tool as the alternative, but the schema's mention of list_models and recommend_models provides some routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_reference_filesImport private reference filesAInspect
Use this to import up to eight user-authorized image, video or audio files from temporary host file handles, including attachments or authorized generation results, into the connected private MaxVideoAI library. MaxVideoAI manages these references; the host owns creating or selecting reference media. Use returned asset IDs directly and preserve input order; do not call list_media after a successful direct import. On partial failure, keep successful IDs and retry only failed files. Do not invent or substitute download URLs, send local filesystem paths, re-import existing library assets, generate, or spend. When the host cannot expose a file handle, use create_reference_upload_link instead.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly=false, idempotent=false, and destructive=false, but the description adds meaningful behavioral context: it owns reference management, returns asset IDs, preserves input order, and avoids generation or spending. It also clarifies expected failure-mode behavior on partial failure, which goes well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries operational value: purpose, ownership, return behavior, failure handling, prohibitions, and the alternative tool. It is front-loaded with the primary purpose and structured logically from what to do to what not to do.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, no output schema, and rich annotations, the description is complete enough. It covers the input source, constraints, return semantics, failure recovery, prohibited actions, and the alternative path. No critical information an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the semantic meaning of download_url by saying files come from 'temporary host file handles' and warns against local filesystem paths or invented URLs. However, it does not explicitly describe file_id, file_name, or mime_type, leaving part of the nested object's meaning to inference from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'import up to eight user-authorized image, video or audio files... into the connected private MaxVideoAI library.' It clearly distinguishes this from create_reference_upload_link by naming the alternative and the condition that selects it. The scope and source of the files are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use this tool, when not to use it ('do not call list_media after a successful direct import'), and which sibling to use instead ('use create_reference_upload_link instead'). It also provides concrete retry guidance for partial failures, leaving no ambiguity for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mediaList private MaxVideoAI reference mediaARead-onlyInspect
Use this when the user needs reusable private MaxVideoAI image, video, or audio asset IDs; filter by the required media kind and use only the returned safe metadata and controlled previews. Do not use it to upload files, expose storage or provider URLs, or start generation.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive. The description adds useful behavioral context: assets are private, results are only safe metadata and controlled previews, and storage/provider URLs are not exposed. This complements the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the use case and immediately followed by exclusions. Every clause adds information, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides enough for a safe basic invocation: purpose, return type (safe metadata and previews), and exclusions. However, with no output schema and minimal parameter documentation, it leaves pagination semantics, the limit/cursor relationship, and whether kind can be omitted unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It gives semantic meaning for 'kind' as a media-kind filter, but it does not explain 'limit' or 'cursor', pagination behavior, or the fact that the schema lists no required parameters while the description says 'required media kind'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the action (list) and precise resource (private MaxVideoAI reference media yielding image/video/audio asset IDs). It also explicitly disambiguates from uploads, exposing URLs, and generation, so an agent can distinguish it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit when-to-use condition: user needs reusable private asset IDs. It also gives clear when-not-to-use exclusions: not for uploading files, exposing storage/provider URLs, or starting generation. This provides strong selection guidance even without naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsList MaxVideoAI modelsARead-onlyInspect
Use this when the user needs current public MaxVideoAI image or video model capabilities, including audio and reference-image support. Every filtering field is nullable: send null when the user did not state that constraint, never a placeholder. Do not use it for generation, exact pricing, private models, or provider guarantees.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Exact public MaxVideoAI model ID, or null unless the user named one. | |
| mode | No | Requested generation mode, or null unless the user constrained it. | |
| audio | No | Whether the user explicitly requires or excludes audio, or null when unstated. | |
| limit | No | Maximum number of matching models requested by the user, or null for the service default. | |
| surface | No | Requested media surface, or null unless the user constrained it. | |
| resolution | No | Requested resolution, or null unless the user constrained it. | |
| aspectRatio | No | Requested aspect ratio, or null unless the user constrained it. | |
| maxDurationSec | No | Maximum duration requested by the user, or null. Never use 300 as a placeholder. | |
| referenceImages | No | Whether the user explicitly requires or excludes reference images, or null when unstated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond annotations: all filtering fields are nullable, null must be sent when a constraint is unstated, and placeholders are forbidden. It also clarifies the data scope as public rather than private or provider-guaranteed, which is useful for invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with the primary usage guidance front-loaded)SkipHere. Every sentence earns its place: when to use, null-handling rule, and explicit exclusions. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only filtering tool, the description explains scope, constraints, null semantics, and exclusions, which covers most invocation needs. There is no output schema and the description does not describe the exact return shape, but the phrase 'model capabilities' plus filter context makes the expected result reasonably inferable, leaving only a minor completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; each parameter already has a clear description like 'or null unless the user constrained it.' The description's global instruction that every filtering field is nullable reinforces the schema but does not add substantial new parameter-level meaning beyond what is already present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (list) applied to a clearly bounded resource: 'current public MaxVideoAI image or video model capabilities,' including audio and reference-image support. It further distinguishes itself by explicitly excluding generation, exact pricing, private models, and provider guarantees, so an agent can tell it apart from siblings like get_model_details or prepare_generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with 'Use this when the user needs current public...' and closes with 'Do not use it for generation, exact pricing, private models, or provider guarantees,' giving practical selection guidance. It does not name specific sibling tools as alternatives, but the exclusions effectively route agents away from clearly different operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_generationsList recent MaxVideoAI generationsARead-onlyInspect
Use this when a job identifier or submission response was lost, or the user returns to recent work. Recover a bounded page from the same connected user's MaxVideoAI library before considering any second paid submission. Filter by surface video, image or audio when known, preserve the existing job IDs and use get_generation_status for follow-up. Do not claim completion for accepted/running jobs or use this to generate, retry, or charge. Completed results can be delivered through present_generation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| status | No | ||
| surface | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=true, destructiveHint=false) already establish the tool is safe. The description adds context beyond annotations: it mentions bounded page, same connected user, and explicitly warns not to claim completion for accepted/running jobs or to charge. This adds value and aligns with annotations. Minor gap: doesn't detail pagination or rate limits, but given annotations, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with multiple sentences, each carrying weight. It is front-loaded with the primary use case and then provides constraints and alternatives. It could be slightly more concise by shortening the first sentence, but generally it is tight and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 optional parameters and no output schema, the description provides enough context to call it correctly: it explains the purpose, constraints (same user, bounded page), filtering, and follow-up. It doesn't explain return values, but that is not required without output schema. The only missing piece could be more explicit on pagination, but the term 'bounded' implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It directly mentions the 'surface' parameter (filter by surface video, image or audio), which adds semantic meaning. It references 'bounded page' implying limit/cursor semantics. However, it doesn't explain the 'status' parameter in detail, but the overall guidance on filtering is helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing recent MaxVideoAI generations for the same connected user. It specifies the resource (MaxVideoAI library) and the action (list recent), and distinguishes it from siblings like get_generation_status and present_generation. The purpose is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: when to use (when job ID lost or returning to recent work), what to do before considering a second paid submission, and alternatives (use get_generation_status for follow-up, present_generation for completed results). It also explicitly states when not to use it (do not use to generate, retry, or charge). This is exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_generationPrepare a MaxVideoAI generationInspect
Use this to validate a complete selected AI video or image request and save an exact short-lived quote. Read get_model_details for the selected mode first, including t2v, i2v, i2v_standard, ref2v, fl2v, v2v, r2v, extend, a2v, retake and reframe. It saves the quote but does not spend or generate. Display the exact price, currency and validated request, then stop and wait for explicit user approval before confirm_generation. Required private references must be present; if missing, no exact quote can be created. A project budget is only an estimate. For nullable inputs, omit or send null when not explicitly required by the selected mode’s live details or the user. For video duration use settings.durationSec, never settings.duration. Use only supported settings and ordered reference roles; never infer constraints from a sibling mode. Treat expiresAt as UTC; declare definitive expiry only on QUOTE_EXPIRED, not a local-date comparison. If credits are insufficient, use create_topup_link for this quote. Funding, discussion and ambiguous assent do not approve generation. Never substitute a named model or use a quote as a generation result. After the quote, briefly invite another model, resolution, duration or budget for a new quote and price comparison; use compare_generation_prices for actual savings, never guess.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| prompt | Yes | ||
| surface | Yes | ||
| engineId | Yes | ||
| settings | No | ||
| references | No | ||
| outputCount | No | Number of outputs. Video must use 1. Image limits are model-specific; read outputCount from get_model_details. | |
| schemaVersion | No |
present_generationPresent a MaxVideoAI generationARead-onlyInspect
Use this once to deliver a completed owned MaxVideoAI generation as inline video, image or original Audio in a compatible UI host. First verify completion with get_generation_status or list_recent_generations. Explain that the result is saved in the same connected MaxVideoAI library. If the host does not render the UI, use the returned resource link and library destination as fallback; never invent URLs. Do not poll, generate, retry, confirm, or charge with this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral context: the result is already saved in the connected library, the tool must not invent URLs, and it should not poll, retry, confirm, or charge. It does not fully specify the exact return payload shape, but the mention of 'returned resource link and library destination' gives a useful baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well ordered: primary purpose first, then mandatory verification, then fallback behavior, then explicit exclusions. Every sentence contributes actionable guidance and there is minimal redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter presentation tool with rich sibling context, the description covers the key operational aspects: verification, one-time use, UI fallback, URL safety, and persistence of the generation. The main gap is that jobId semantics are undefined, and there is no explicit return contract despite the absence of an output schema, but the description is otherwise sufficient for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one required parameter, jobId, with 0% schema description coverage, so the description carries the full burden. The description never explains what jobId means, where it comes from, or how it relates to a completed generation. The parameter name is somewhat self-explanatory, but the agent is left without explicit guidance on populating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'deliver a completed owned MaxVideoAI generation as inline video, image or original Audio in a compatible UI host.' It also distinguishes itself from siblings by explicitly saying 'Do not poll, generate, retry, confirm, or charge with this tool,' making it clear this is a presentation-only operation, not generation or status checking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use once after completion, and verify completion first with get_generation_status or list_recent_generations. It also provides fallback behavior for incompatible hosts and names exclusions such as no retry, no confirm, and no charge, which routes the agent away from unintended operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_modelsRecommend MaxVideoAI modelsARead-onlyInspect
Use this when the user is undecided or asks for advice on which AI video/image model fits a creative goal. Present the best-fit available executable model first, then strong alternatives from distinct model families when useful. Validate the selected mode with get_model_details. Nullable constraints must be null or omitted when unstated, never placeholders. Ask only for missing choices that change the result or budget. Clarify whether quality means story coherence, multi-shot continuity, reference/character fidelity, motion, audio or delivery resolution; never rank creative quality by resolution alone. Use calculate_project_budget on comparable proposals before calling an option cheaper or lower-cost. Mix models only when each shot has a factual rationale; do not force diversity or dilute a quality-first plan. Do not use when the user already chose a compatible model for validation, pricing or execution. Never substitute a named model without user approval. Use returned editorialGuidance: reference entries are reviewed starting points, alternative entries serve meaningful tradeoffs, and on_request entries are for explicit requests. Inspect reviewStatus, reviewedAt, rationale and provenance. Editorial preference is not measured quality or execution certification; a new version never inherits a review from its family. An idea, a prompt or a single asset can be a complete outcome; do not require a film or a multi-step recipe. Recommendations are capability matches with disclosed editorial preference. Do not use as an exact quote, generation command or guarantee that a provider will accept a request. Respect executable constraints and the user’s choice.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Exact public model ID to consider, or null unless the user named one. | |
| mode | No | Requested generation mode, or null unless the user constrained it. | |
| audio | No | Whether the user explicitly requires or excludes audio, or null when unstated. | |
| surface | No | Requested media surface, or null unless the user constrained it. | |
| useCase | No | Creative goal used only with reviewed MaxVideoAI model guidance, or null when unstated. | |
| priorities | No | Ordered user-stated factual priorities, most important first, or null when none of these values matches. For beautiful cinematography, expressive acting or smooth camera movement without an explicit listed priority, use null. highest_resolution requires a delivery-resolution preference such as 4K; it is not a proxy for overall creative quality. lower_cost requests a budget comparison when cheaper options are explicitly wanted. Asking what a project costs does not mean prefer the cheapest: keep priorities null and use calculate_project_budget for the estimate. | |
| resolution | No | Requested resolution, or null unless the user constrained it. | |
| aspectRatio | No | Requested aspect ratio, or null unless the user constrained it. | |
| maxDurationSec | No | Maximum duration requested by the user, or null. Never use 300 as a placeholder. | |
| referenceImages | No | Whether the user explicitly requires or excludes reference images, or null when unstated. | |
| excludedModelIds | No | Up to ten public model IDs to leave out of the recommendations, or null. | |
| preferredModelIds | No | Up to ten public model IDs the user would like considered when compatible, or null. | |
| budgetCeilingCents | No | Project budget ceiling in cents, or null when unstated; use calculate_project_budget for current comparable totals. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only/non-destructive; the description goes well beyond that by disclosing that output is a capability match with editorial preference, that editorial preference is not measured quality or execution certification, that a new version never inherits a family review, and by decoding returned editorialGuidance/reviewStatus/reviewedAt/rationale/provenance. It also states the mutation-adjacent constraint of not asking for placeholders and not forcing model diversity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense wall of text with the usage trigger front-loaded, which is good, but it repeats the same caveat family multiple times (editorial preference is not quality; not an exact quote/generation command; recommendations are capability matches) and mixes call-time guidance with output-interpretation guidance. For an advisory tool the volume is heavier than needed and sentences blur together.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries extra weight and does explain the key returned concepts (editorialGuidance categories, reviewStatus, reviewedAt, rationale, provenance) plus the mode-validation and budget-comparison workflow. It stops short of describing the full response shape or failure modes, leaving a small gap for a 13-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter interpretation rules the schema does not fully carry: nullable constraints must be null or omitted rather than placeholder values, and only missing choices that change result or budget should be asked for. It reinforces meaning for priorities and budgetCeilingCents by routing cost questions to calculate_project_budget instead of filling lower_cost.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific function (advise on / recommend AI video-image models for a creative goal) and distinguishes it from siblings by naming get_model_details for validation and calculate_project_budget for pricing. An agent can tell instantly that this is an advisory recommender, not a lister (list_models) or a detail lookup (get_model_details).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger ('when the user is undecided or asks for advice'), explicit exclusion ('Do not use when the user already chose a compatible model for validation, pricing or execution'), and named alternatives with conditions for delegating to get_model_details and calculate_project_budget. It also states a hard rule: never substitute a named model without user approval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
compare_generation_prices
1 tool update
- Changed
prepare_generation1 field changed- changed
Input schema / properties / settings / anyOfPrevious value: -[ - { - "additionalProperties": false, - "description": "Canonical MaxVideoAI settings only. Read the selected mode from get_model_details and include only compatible fields.", - "properties": { - "aspectRatio": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "If the selected mode aspectRatios list is non-empty, use one supported value. If it is empty, send null or omit this field." - }, - "audio": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Send only when the selected mode reports audio as optional; send null or omit when always_generated or unavailable." - }, - "background": { - "anyOf": [ - { - "enum": [ - "auto", - "transparent", - "opaque" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Use only when get_model_details reports a background setting for the selected image model." - }, - "cameraFixed": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "cfgScale": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "contextSec": { - "anyOf": [ - { - "minimum": 0, - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "cropEndX": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "cropEndY": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "cropStartX": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "cropStartY": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "durationSec": { - "anyOf": [ - { - "maximum": 86400, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "For video modes, use the exact key settings.durationSec for the requested duration in seconds; never send settings.duration. Send null when not applicable." - }, - "editDepthBlur": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "editFace": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "editKeyframeIndexes": { - "anyOf": [ - { - "maxLength": 4096, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "editNormalsAugmentation": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "editPoseStrength": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "editStrength": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "editTrajectorySparsity": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "enableWebSearch": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "exrExport": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "extendPosition": { - "anyOf": [ - { - "enum": [ - "start", - "end" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "fps": { - "anyOf": [ - { - "maximum": 240, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "guidanceScale": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "hdr": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "imageHeight": { - "anyOf": [ - { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "GPT Image family only: custom output height in pixels when resolution is custom." - }, - "imageWidth": { - "anyOf": [ - { - "exclusiveMinimum": 0, - "maximum": 9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "GPT Image family only: custom output width in pixels when resolution is custom." - }, - "limitGenerations": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "loop": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "modifyStrength": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "multiPrompt": { - "anyOf": [ - { - "items": { - "additionalProperties": false, - "properties": { - "durationSec": { - "maximum": 15, - "minimum": 1, - "type": "integer" - }, - "prompt": { - "maxLength": 512, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "prompt", - "durationSec" - ], - "type": "object" - }, - "maxItems": 6, - "minItems": 1, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Kling multi-shot scenes. Use only when get_model_details reports the multiPrompt setting; otherwise send null or omit it. Omit the top-level prompt text content for this form." - }, - "negativePrompt": { - "anyOf": [ - { - "maxLength": 4096, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "numFrames": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "outputFormat": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "promptExpansionMode": { - "anyOf": [ - { - "enum": [ - "balanced", - "quality" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Use only when get_model_details reports the promptExpansionMode setting for the selected mode." - }, - "quality": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "reframeGridPositionX": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "reframeGridPositionY": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "resolution": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Use one resolution supported by the selected mode from get_model_details, or null when not applicable." - }, - "retakeMode": { - "anyOf": [ - { - "enum": [ - "replace_audio", - "replace_video", - "replace_audio_and_video" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "safetyChecker": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - }, - "seed": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null - }, - "shotType": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "sourcePositionHeight": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "sourcePositionWidth": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "sourcePositionX": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "sourcePositionY": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "startTimeSec": { - "anyOf": [ - { - "minimum": 0, - "type": "number" - }, - { - "type": "null" - } - ], - "default": null - }, - "style": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "thinkingLevel": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ], - "default": null - }, - "watermark": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "description": "Canonical MaxVideoAI settings only. Read the selected mode from get_model_details and include only compatible fields.", + "properties": { + "aspectRatio": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "If the selected mode aspectRatios list is non-empty, use one supported value. If it is empty, send null or omit this field." + }, + "audio": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Send only when the selected mode reports audio as optional; send null or omit when always_generated or unavailable." + }, + "background": { + "anyOf": [ + { + "enum": [ + "auto", + "transparent", + "opaque" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Use only when get_model_details reports a background setting for the selected image model." + }, + "cameraFixed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "cfgScale": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "contextSec": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "cropEndX": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "cropEndY": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "cropStartX": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "cropStartY": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "documentUrl": { + "anyOf": [ + { + "format": "uri", + "maxLength": 4096, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Public HTTPS document reference; use only when reported by get_model_details. Mutually exclusive with webpageUrl and requires prompt expansion." + }, + "durationSec": { + "anyOf": [ + { + "maximum": 86400, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "For video modes, use the exact key settings.durationSec for the requested duration in seconds; never send settings.duration. Send null when not applicable." + }, + "editDepthBlur": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "editFace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "editKeyframeIndexes": { + "anyOf": [ + { + "maxLength": 4096, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "editNormalsAugmentation": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "editPoseStrength": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "editStrength": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "editTrajectorySparsity": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "enablePromptExpansion": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "enableWebSearch": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "exrExport": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "extendPosition": { + "anyOf": [ + { + "enum": [ + "start", + "end" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "fps": { + "anyOf": [ + { + "maximum": 240, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "guidanceScale": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "hdr": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "imageHeight": { + "anyOf": [ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "GPT Image family only: custom output height in pixels when resolution is custom." + }, + "imageWidth": { + "anyOf": [ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "GPT Image family only: custom output width in pixels when resolution is custom." + }, + "limitGenerations": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "loop": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "modifyStrength": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "multiPrompt": { + "anyOf": [ + { + "items": { + "additionalProperties": false, + "properties": { + "durationSec": { + "maximum": 15, + "minimum": 1, + "type": "integer" + }, + "prompt": { + "maxLength": 512, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "prompt", + "durationSec" + ], + "type": "object" + }, + "maxItems": 6, + "minItems": 1, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Kling multi-shot scenes. Use only when get_model_details reports the multiPrompt setting; otherwise send null or omit it. Omit the top-level prompt text content for this form." + }, + "negativePrompt": { + "anyOf": [ + { + "maxLength": 4096, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "numFrames": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "outputFormat": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "promptExpansionMode": { + "anyOf": [ + { + "enum": [ + "disabled", + "balanced", + "quality" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Use only when get_model_details reports the promptExpansionMode setting for the selected mode." + }, + "quality": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "reframeGridPositionX": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "reframeGridPositionY": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "resolution": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Use one resolution supported by the selected mode from get_model_details, or null when not applicable." + }, + "retakeMode": { + "anyOf": [ + { + "enum": [ + "replace_audio", + "replace_video", + "replace_audio_and_video" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "safetyChecker": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "seed": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "shotType": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "sourcePositionHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "sourcePositionWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "sourcePositionX": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "sourcePositionY": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "startTimeSec": { + "anyOf": [ + { + "minimum": 0, + "type": "number" + }, + { + "type": "null" + } + ], + "default": null + }, + "style": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "thinkingLevel": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null + }, + "watermark": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null + }, + "webpageUrl": { + "anyOf": [ + { + "format": "uri", + "maxLength": 4096, + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Public HTTPS webpage reference without login; use only when reported by get_model_details. Mutually exclusive with documentUrl and requires prompt expansion." + } + }, + "type": "object" + }, + { + "type": "null" + } +]
1 tool update
- Changed
recommend_models1 field changed- changed
Input schema / properties / priorities / descriptionPrevious value: -"Ordered user-stated factual priorities, most important first, or null when unstated. highest_resolution applies only when delivery resolution matters and is not a proxy for overall creative quality. Use lower_cost to request a project budget, not a price guess."New value: +"Ordered user-stated factual priorities, most important first, or null when none of these values matches. For beautiful cinematography, expressive acting or smooth camera movement without an explicit listed priority, use null. highest_resolution requires a delivery-resolution preference such as 4K; it is not a proxy for overall creative quality. lower_cost requests a budget comparison when cheaper options are explicitly wanted. Asking what a project costs does not mean prefer the cheapest: keep priorities null and use calculate_project_budget for the estimate."
15 tool updates
- First observed
calculate_project_budget - First observed
confirm_generation - First observed
create_reference_upload_link - First observed
create_topup_link - First observed
get_account_status - First observed
get_generation_download - First observed
get_generation_status - First observed
get_model_details - First observed
import_reference_files - First observed
list_media - First observed
list_models - First observed
list_recent_generations - First observed
prepare_generation - First observed
present_generation - First observed
recommend_models
Publisher details
- Operator
- MaxVideoAI
- Operator website
- https://maxvideoai.com/mcp
- Vendor relationship
- First-party
- Documentation
- https://maxvideoai.com/docs/mcp
- Trust center
- Unknown
- Restrictions
- A MaxVideoAI account and browser OAuth authorization are required. Paid generation starts only after the user approves the exact current quote. · Publisher source
Related MCP Connectors
Generate AI video from any MCP client. Pick the model, see the per-second price before you spend.
Build, run, schedule, and publish AI video pipelines to YouTube and TikTok from any MCP client.
Generate images, video, audio and short films with 140+ AI models from any MCP client.
AI video editor for agents and humans: timeline, captions, color, audio and generation as MCP tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to generate professional storyboards and videos from scripts or creative descriptions via MCP-compatible clients.20 npmMIT

PixVerse MCPofficial
AlicenseNot gradedqualityFmaintenanceEnables video generation from text, images, and more through MCP-compatible apps like Claude and Cursor.52MIT
AITuber MCP Serverofficial
AlicenseAqualityBmaintenanceCreate AI-powered videos from any MCP-compatible client. Generate videos with AI narration, visuals, and synced captions for short-form and long-form content.268 npm5MIT- AlicenseCqualityCmaintenanceEnables Claude, Cursor, or any MCP client to create consistent AI characters, generate Veo 3.1 and Omni videos, edit clips, build scenes, export MP4s, and chat with Google Flow's creative agent. Automates AI video production workflows such as reels, storyboards, and multi-shot stories through natural language, with credit guardrails and dry-run pricing.233MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.