Skip to main content
Glama

maginary-mcp

Server Details

AI image + video generation for agents: --flag prompt DSL, async generate/poll, x402 pay-per-use.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
maginaryai/maginary-mcp
GitHub Stars
1
Server Listing
maginary-mcp

TDQS

Score is being calculated.

Available Tools

16 tools
check_account_statusCheck account statusA
Read-onlyIdempotent
Inspect

Check account verification status, credit balance, and API key count.

Use this after ``create_account`` to poll whether the user has clicked the
verification link. Pass ``email`` + ``password`` (from ``create_account``)
for Basic auth, or omit both to use the configured API key.

Args:
    email: Account email (for Basic auth).
    password: Account password (for Basic auth).

Returns:
    Dict with ``verified`` (bool), ``email``, ``api_key_count``,
    ``credits_remaining``, ``uploads_remaining``.
ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoAccount email (for Basic auth). Omit to use API key.
passwordNoAccount password (for Basic auth).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses authentication behavior ('Pass email + password ... for Basic auth, or omit both to use the configured API key') and the polling context, which adds value beyond the readOnlyHint/idempotentHint annotations. It does not contradict the annotations and explains what the tool checks without claiming side effects.

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

Conciseness5/5

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

The description is front-loaded with the single-sentence purpose, followed by a compact usage scenario, args, and returns. Every sentence contributes: use case, auth mode, and expected output.

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 poll tool with two optional params and an output schema, the description covers purpose, when to call it, auth alternatives, and return fields. There is no missing operational detail an agent needs to invoke it safely and 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; the description adds useful coupling by saying the credentials come from create_account and that omitting both uses the API key. This gives the agent more operational guidance than the schema's standalone 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?

The opening sentence names a specific verb and resource—'Check account verification status, credit balance, and API key count'—and the Returns line reinforces what is queried. This clearly differentiates it from siblings like get_balance by covering verification and API key count in addition to balance.

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

Usage Guidelines4/5

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

It explicitly instructs when to use the tool: 'Use this after create_account to poll whether the user has clicked the verification link.' It does not mention when not to use it or name sibling alternatives such as get_balance, so it stops short of a full exclusion list.

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

checkoutCreate checkout linkAInspect

Create a Stripe checkout session for purchasing a product.

Returns a ``checkout_url`` — the user must open it in a browser to
complete payment. After payment, credits are provisioned automatically
via webhook. **Present the URL exactly as returned, including the
``#fragment`` — do not truncate, reformat, or strip any part of it.**

If the agent has a USDC wallet, skip this entirely — just call
``generate`` and the x402 protocol handles payment on-chain.

Args:
    product_id: Product ID from ``get_products``.
    email: Account email (for Basic auth during onboarding).
    password: Account password (for Basic auth during onboarding).

Returns:
    Dict with ``checkout_url``. On failure, an ``isError`` result — e.g.
    ``error: "email_not_verified"`` until the user clicks the
    verification link, or ``"auth"`` / ``"failed"``.
ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoAccount email (for Basic auth during onboarding).
passwordNoAccount password (for Basic auth).
product_idYesProduct ID from get_products.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

The description goes well beyond the annotations by explaining the checkout flow: the URL must be opened in a browser, payment is handled via webhook, credits are provisioned automatically, and the URL fragment must not be modified. It also discloses failure modes such as email_not_verified, auth, and failed. This is rich behavioral context for a mutation tool.

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

Conciseness4/5

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

The description is well-structured, front-loaded with the purpose, and uses formatting to highlight the critical URL-handling instruction. The Args block is somewhat redundant with the schema, but the overall length is justified by the important behavioral details and failure examples.

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?

The description is complete for an agent to select and invoke the tool correctly. It covers purpose, usage conditions, alternative routing, exact handling of the returned URL, post-payment behavior, and failure responses. The presence of an output schema further reduces the burden on the description.

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?

The input schema already provides 100% description coverage for all three parameters. The description's Args section essentially repeats the schema text, adding no new semantic meaning. It does reinforce that product_id comes from get_products, but that is already in the schema, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states a specific verb and resource: 'Create a Stripe checkout session for purchasing a product.' This distinguishes checkout from sibling tools like generate, create_account, or get_products. The title and description align well.

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

Usage Guidelines5/5

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

The description gives explicit routing guidance: if the agent has a USDC wallet, skip checkout and call generate instead. It also points to get_products for the product_id, clarifying the intended data source. This is strong when-to-use and when-not-to-use guidance.

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

configure_api_keyConfigure API keyA
Idempotent
Inspect

Activate an API key. Local (stdio) servers persist it; hosted does not.

Call this after ``manage_api_key(action='create')`` returns a ``raw_key``.
On a local server the key is saved to ``~/.config/maginary/api_key``
(chmod 600) and survives restarts. On the hosted server
(mcp.maginary.ai) nothing can be stored — auth is per-request: the
response will say ``persisted: false`` and the key must be sent as an
``Authorization: Bearer <key>`` header on every request (set it in the
MCP client's connection config).

Args:
    api_key: The full API key string returned by ``manage_api_key``.

Returns:
    Confirmation dict.
ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyYesFull API key string from manage_api_key.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds critical details beyond those: exact file path, chmod 600, persistence across restarts, hosted response 'persisted: false', and the requirement to send an Authorization: Bearer header. This is rich operational context 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?

The description is front-loaded with the core purpose and uses clear paragraphs for environment-specific behavior. It is somewhat long, but every sentence provides operational necessity—no filler. Slight verbosity around the hosted section keeps it from a 5.

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 single-parameter tool with full schema coverage, annotations, and an output schema, this description is complete. It covers the exact trigger (after create), environment differences, persistence behavior, and how to handle the non-persistent case, leaving no gaps for correct invocation.

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

Parameters3/5

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

Schema coverage is 100% and the schema already documents api_key as 'Full API key string from manage_api_key.' The description repeats that nearly verbatim, adding no new meaning. Baseline 3 is appropriate because the schema carries the parameter 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 ('Activate an API key') and clearly distinguishes from its sibling manage_api_key by positioning this as the step after creation. An agent can immediately tell this tool is for enabling/persisting a key, not for creating or managing it.

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 instructs to call this after manage_api_key(action='create') returns a raw_key, and provides environment-specific guidance: local persistence vs. hosted per-request authentication. This leaves no ambiguity about when to use the tool 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.

create_accountCreate accountAInspect

Create a new Maginary account for the given email address.

Returns the auto-generated password — display it to the user ONCE so they
can save it. A verification email is sent; the user must click the link
before the account can generate images.

After verification, use ``manage_api_key(action='create')`` with
``email`` + ``password`` to get an API key, then ``configure_api_key``
to activate it.

Args:
    email: The user's email address.

Returns:
    Dict with ``email``, ``password``, and ``message``. On failure, an
    ``isError`` result — e.g. ``error: "already_exists"`` (email taken:
    ask the user for their password or a different email),
    ``"rate_limited"``, or ``"failed"``.
ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesEmail address for the new account.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behaviors: the password is auto-generated and must be shown once, verification is required before generating images, and failures include already_exists, rate_limited, and failed. This meaningfully informs the agent about side effects and error handling without contradicting the annotation hints.

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

Conciseness5/5

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

The description is well-structured with Args and Returns sections, and every part earns its place: creation, one-time password display, verification, downstream API-key steps, and failure modes. It is detailed without being redundant.

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 tool with a verification side effect and downstream steps, the description covers the full lifecycle: what happens immediately, what the user must do, what the agent should do next, and what errors to expect. The output schema exists, and the description still adds useful return semantics, so nothing essential 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?

The schema already documents the email parameter at 100% coverage, so the baseline is 3. The description adds operational meaning by explaining that the email is used to create the account and by giving guidance on the already_exists failure, such as asking the user for their password or a different email. This goes beyond the schema but does not add format constraints.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Create a new Maginary account for the given email address.' It is clear and actionable, though it does not explicitly contrast itself with the sibling create_wallet_account, leaving the agent to infer the distinction from the 'Maginary account' wording.

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

Usage Guidelines4/5

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

The description gives a clear usage flow: create the account, show the password once, wait for verification, then use manage_api_key and configure_api_key. It does not explicitly state when not to use this tool or name alternatives, but the downstream instructions make the intended context concrete.

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

create_wallet_accountCreate wallet accountA
Destructive
Inspect

Create (or access) a Maginary account using a wallet signature.

Sign the message ``Maginary: authenticate <address> at <timestamp>.
This does not move funds.`` with EIP-191 ``personal_sign`` and pass all
three values. On success, an API key is returned immediately — no email
verification needed.

Use this when you have a wallet but no email. The returned ``api_key``
should be passed as ``Authorization: Bearer <key>`` in the MCP client
config, or via ``configure_api_key`` (stdio) / ``_meta["maginary/api_key"]``
(hosted, per-call).

If the wallet already has an account, returns the existing account with
a fresh API key.

Args:
    address: EVM wallet address (0x..., 42 chars).
    signature: Hex-encoded EIP-191 personal_sign of the auth message.
    timestamp: Unix epoch seconds used in the signed message (must be
        within the last 5 minutes).

Returns:
    Dict with ``address``, ``api_key`` (full key — show once),
    ``key_prefix``, ``created`` (bool), ``message``.
    On failure: ``isError`` with ``error`` = ``"validation"``,
    ``"signature_failed"``, or ``"rate_limited"``.
ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesEVM wallet address (0x..., 42 chars).
signatureYesHex EIP-191 personal_sign of the auth message.
timestampYesUnix epoch seconds used in the signed message.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint false and destructiveHint true, so the description must clarify the mutating nature. It does so by describing the creation/access flow and that a fresh API key is returned even for existing accounts. It also details the authentication message format and timestamp freshness constraint (5 minutes), adding meaningful behavioral context. It does not contradict the annotations, and the added details about the signing process and error codes (validation, signature_failed, rate_limited) enhance transparency.

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

Conciseness4/5

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

The description is well-structured with a clear intro paragraph, then Args and Returns sections. While it is fairly long, every sentence adds necessary information (message format, timestamp constraint, key usage, error handling). It is front-loaded with the core purpose and usage context, then details. No filler or redundancy; it earns its length.

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?

Given the complexity of a wallet-signature authentication flow, the description is remarkably complete. It covers the exact message to sign, parameter constraints, return values including api_key and key_prefix, error codes, and post-call usage (Bearer token, configure_api_key, _meta). The output schema is not provided, so the description's Returns section is the sole source for return format, and it is thorough. Nothing essential for an agent to call the 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 description coverage is 100% with each parameter briefly described, but the description adds critical semantics beyond the schema: it specifies the exact message to sign, the timestamp must be within the last 5 minutes, and the signature is EIP-191 personal_sign. This is essential for correct invocation and goes beyond the schema's one-line descriptions. The description also explains the relationship between timestamp and the signed message, which the schema alone does not convey.

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

Purpose5/5

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

The description clearly states the purpose: 'Create (or access) a Maginary account using a wallet signature.' It specifies the resource (account) and the method (wallet signature), and distinguishes itself from the sibling 'create_account' by noting the email-less workflow. The phrase 'Create (or access)' clarifies that it handles both new and existing accounts, which is precise and unambiguous.

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

Usage Guidelines5/5

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

The description explicitly provides usage context: 'Use this when you have a wallet but no email.' This signals the alternative (create_account for email users) and gives a clear decision rule. It also explains how to use the returned api_key via multiple channels, which guides the agent on subsequent actions. This is comprehensive and leaves no ambiguity about when to invoke this tool.

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

execute_actionRun action on imageAInspect

Run a follow-up action on a completed generation's image.

After ``generate`` → ``wait_for_generation``, the response's
``processing_result.available_actions`` lists what's possible per slot.
Call this tool with one of those action types.

Args:
    generation_uuid: UUID of the parent generation (from ``generate``).
    action_type: One of the values from ``available_actions`` — e.g.
        ``"upscale_2x"``, ``"upscale_1_5x"``, ``"vary_strong"``,
        ``"vary_subtle"``, ``"pan_left"``, ``"pan_right"``,
        ``"pan_up"``, ``"pan_down"``, ``"zoom_out_2x"``,
        ``"zoom_out_1_5x"``, ``"img2vid_basic"``, ``"reroll"``.
    parent_image_index: The slot index of the image to act on (0, 1,
        2, or 3 for a 4-image grid). Required for per-slot actions;
        omit for ``"reroll"`` (global action).
    prompt: Optional replacement prompt. For ``vary_*`` you can steer
        the variation with a new prompt; for ``img2vid_basic`` you can
        describe the desired motion.
    callback_url: Optional webhook URL (same as ``generate``).

Returns:
    The newly created child generation record (same shape as
    ``generate``'s return — poll it with ``wait_for_generation``).

    On failure, same ``isError`` contract as ``generate``:
    ``"auth"``, ``"payment_required"`` (with x402 challenge),
    or ``"failed"``.
ParametersJSON Schema
NameRequiredDescriptionDefault
promptNoOptional replacement prompt for vary/img2vid actions.
action_typeYesAction from available_actions, e.g. upscale_2x, vary_strong, img2vid_basic, reroll.
callback_urlNoHTTPS webhook URL for done/failed notifications.
generation_uuidYesUUID of the parent generation.
parent_image_indexNoSlot index (0-3) of the image to act on. Omit for global actions like reroll.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses the side effect of creating a new child generation record and instructs to poll it with wait_for_generation. It explicitly describes failure modes: 'auth', 'payment_required' (with x402 challenge), or 'failed', matching the generate contract. This goes well beyond the annotations (readOnlyHint false, openWorldHint true, idempotentHint false) by detailing auth and payment requirements, which is valuable for an agent to handle errors appropriately.

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

Conciseness5/5

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

The description is well-structured with a one-line summary, a workflow context sentence, and clearly labeled Args and Returns sections. It is front-loaded with the primary purpose, and every sentence adds actionable information. No fluff or redundancy; the length is justified by the tool's complexity and the need to explain action types and slot semantics.

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?

The description is complete for an agent to invoke correctly: it explains the prerequisite workflow, all parameters (with required/optional nuance), the return shape (including polling instruction), and error handling. With an output schema present, it still goes beyond by describing the child generation record and the isError contract. No critical information is missing for safe and correct usage.

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%, but the description enriches each parameter with context. For action_type it lists concrete examples (upscale_2x, vary_strong, etc.). It explains parent_image_index as a slot index (0-3) and clarifies when to omit it. For prompt it specifies steering variations or describing motion. It also notes callback_url is 'same as generate,' providing continuity. This adds meaning beyond the schema's terse field descriptions, though some params (callback_url) rely on prior knowledge.

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 clear, specific verb and resource: 'Run a follow-up action on a completed generation's image.' It distinguishes itself from sibling tools like generate (creates) and wait_for_generation (polls) by focusing on post-generation actions. The reference to available_actions and the list of action types leaves no ambiguity about the tool's scope.

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

Usage Guidelines4/5

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

It explicitly states the workflow: 'After generate → wait_for_generation, the response's processing_result.available_actions lists what's possible per slot. Call this tool with one of those action types.' This provides clear context for when to use the tool. It also gives guidance on per-slot vs. global actions (omit parent_image_index for reroll), but does not explicitly contrast with alternatives like calling generate again. Slight gap in explicit exclusion criteria, but context is sufficient.

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

generateGenerate image or videoAInspect

Kick off a generation via POST /api/gens/.

Args:
    prompt: The user's words, passed through as-is. Do NOT add flags the
        user did not ask for — no ``--ar``, no ``--flagship``, no model
        flags. Every extra flag costs credits; adding them unrequested is
        wrong. Standard quality is the default and is cheap; ``--flagship``
        is ~4× more expensive and must only be used when the user
        explicitly asks for best quality.

        If the user asks about quality or aspect ratio: ask them first
        (standard vs flagship, landscape vs portrait) before generating.

        Flags go at the END, only when the user asked:
        ``--1``/``--2``/``--3``/``--4`` = image count (default 4),
        ``--ar 16:9`` = aspect ratio, ``--flagship`` = best quality.
        Unknown flag: call ``get_parameter(name)`` first — never guess.

        Examples — user says "a fox": prompt is ``"a fox"``.
        User says "a fox, landscape, best quality":
        prompt is ``"a fox --ar 16:9 --flagship"``.

        **Image-to-image (img2img):** Place one or more public image URLs
        in the prompt, followed by editing instructions:
        ``"https://cdn.example.com/photo.webp reimagine as oil painting --ar 16:9"``
        The engine extracts URLs automatically and switches to img2img mode.
        Multiple URLs trigger multi-input mode (compositing/combining).
        Use ``upload_image`` first if images aren't already hosted.

        **Image-to-video:** Place an image URL in the prompt AND add
        ``--mp4`` plus video flags (``--5sec``, ``--1080p``). Or use
        ``execute_action`` with ``action_type="img2vid_basic"`` on a
        completed generation's image.

        **Style reference (--sref) is NOT img2img:** ``--sref <url>``
        copies the visual *style* of a reference image (colors, mood,
        composition) without using the image content as input. A bare URL
        in the prompt edits the actual image; ``--sref`` transfers style.

    callback_url: Optional HTTPS URL that will receive a webhook when the
        generation reaches done / failed. See
        https://maginary.ai/blog/webhooks-guide for signature verification.

Returns:
    On success, the created generation record. Key fields: ``uuid`` (use
    to poll), ``action_type``, ``processing_state``,
    ``expected_output_count``.

    On failure, an ``isError`` result instead (nothing is raised), with a
    JSON body whose ``error`` field is one of:

    - ``"auth"`` — no/invalid API key. Surface the message directly to
      the human.
    - ``"payment_required"`` — out of credits. The body carries
      ``billing_url`` and top-level x402 fields (``accepts``,
      ``resource``): either send the human to ``billing_url`` to top up,
      or pay programmatically via x402 (settle ``accepts[0]`` with USDC
      on Base and retry).
    - ``"demo_not_found"`` — ``--demo`` prompt has no matching seeded
      generation. ``available_demos`` lists valid prompts.
    - ``"failed"`` — anything else (invalid prompt, rate limit, backend
      or network error); see ``message``.

    x402 over MCP: a ``payment_required`` result also carries the x402
    fields at the top level (``accepts``, ``resource``); an x402-capable
    client signs ``accepts[0]`` and calls this tool again with the payment
    in ``_meta["x402/payment"]``. The settled call returns the generation
    with ``x402_receipt`` (and ``_meta["x402/payment-response"]``); a
    wallet's first settlement creates its account. Subsequent requests
    use wallet-signed auth headers (X-Wallet-Address/Signature/Timestamp)
    or pass an API key as ``_meta["maginary/api_key"]``.

Every flag that exists, and its state: Flags, live (35): --ar, --output-count (--1/--2/--3/--4), --seed, --transparent, --sref, --sw, --png, --jpg, --webp, --svg, --2k, --4k, --upscale, --vary, --varysubtle, --varystrong, --panleft, --panright, --panup, --pandown, --zoomout, --mp4, --video-resolution (--480p/--540p/--720p/--1024p/--1080p/--2160p / --4k (4k, Seedance 2 Pro)/--480p24 / --480p24fps/--540p24 / --540p24fps/--720p24 / --720p24fps/--1024p30 / --1024p30fps/--1080p24 / --1080p24fps), --video-fps (--24fps/--30fps/--50fps/--60fps), --video-duration (--4s / --4sec/--5s / --5sec/--6s / --6sec/--8s / --8sec/--10s / --10sec/--12s / --12sec), --flagship, --sora, --soralite, --nanobananapro, --nb2, --gpt2, --gpt2high, --seedance2, --seedance2pro, --demo. Partial (4, only some models honour them): --no, --zoomout2x, --zoomoutexpand, --zoomoutexpand2x. Reserved (2, the parser rejects them): --cref, --cw. Any other --flag is rejected with Unrecognized parameter. Details: get_parameter(name).

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesThe user's words as-is, flags at the end. Do NOT add flags the user did not ask for.
callback_urlNoHTTPS webhook URL for done/failed notifications.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, openWorldHint=true, etc.), the description discloses the POST endpoint, the credit cost of extra flags, the fact that errors are returned as isError instead of raised, and detailed error codes (auth, payment_required, demo_not_found, failed). It also explains x402 payment handling and non-idempotency, exceeding annotation coverage.

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

Conciseness4/5

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

The description is long but structured with clear sections and front-loaded with the main instruction. However, the exhaustive flag list at the end could be condensed by referencing get_parameter, making it slightly verbose though justified by the tool's 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?

Given the tool's complexity and rich output schema, the description covers return fields (uuid, action_type, etc.), error handling, payment flow, and integration with sibling tools. Nothing an agent needs to call correctly is missing.

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

Parameters5/5

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

While the schema already describes both parameters at 100% coverage, the description adds extensive semantics: how to format the prompt with flags at the end, img2img examples, style reference distinction, and callback_url usage. It even provides concrete prompt examples, greatly enriching 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?

The description clearly states the action ('Kick off a generation via POST /api/gens/') and the title confirms 'Generate image or video'. It distinguishes itself from siblings by explicitly instructing when to use upload_image, execute_action, and get_parameter, making the tool's purpose unambiguous.

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 provides explicit when-to-use guidance: tells the agent to ask the user about quality/aspect ratio before generating, to use upload_image first for unhosted images, to use execute_action for img2vid, and to use get_parameter for unknown flags. It also explains when not to add flags, with concrete examples.

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

get_balanceGet balanceA
Read-onlyIdempotent
Inspect

Check remaining credits and uploads for the authenticated account.

Args:
    email: Account email (for Basic auth).
    password: Account password (for Basic auth).

Returns:
    Dict with ``credits_remaining`` and ``uploads_remaining``.
ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoAccount email (for Basic auth).
passwordNoAccount password (for Basic auth).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description's 'Check' aligns with read-only behavior and adds the return structure (dict with credits_remaining and uploads_remaining), which is useful context. However, it does not disclose any additional traits like rate limits or authentication prerequisites beyond the parameters. With annotations in place, this is adequate but minimal.

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

Conciseness4/5

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

The description is concise and well-structured: a clear first sentence stating the purpose, followed by Args and Returns sections. It is front-loaded with the main action and does not contain verbose or redundant phrasing. The repetition of schema parameter descriptions is minor and typical, but it does not detract from overall efficiency.

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 balance-checking tool, the description is complete: it states what it does, the required inputs, and the output structure. It does not cover error conditions or alternative usage, but these are not critical for a basic operation. The return values are specified, and the tool's simplicity makes this sufficient for an agent 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?

The description's Args section repeats the parameter descriptions exactly as they appear in the input schema ('Account email (for Basic auth).'). Since schema coverage is 100%, the baseline is 3. The description adds no additional meaning or context about the parameters beyond what the schema already provides.

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 clearly states a specific action ('Check remaining credits and uploads') on a specific resource ('for the authenticated account'). This distinguishes it from siblings like check_account_status, which would cover broader account status. The verb and resource are explicit and unambiguous.

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?

The description provides no explicit guidance on when to use this tool versus alternatives such as check_account_status. It only describes the function, so usage is left to inference. There is no mention of exclusions or context that would help an agent decide between get_balance and other account-related tools.

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

get_generationGet generationA
Read-onlyIdempotent
Inspect

Fetch a generation by UUID (GET /api/gens/{uuid}/).

Args:
    uuid: The UUID returned by ``generate``.

Returns:
    The full generation record. If terminal, ``image_urls[]`` holds the
    finished outputs and ``processing_result.slots[]`` the per-slot detail.
    NOTE: a generation that failed server-side is a SUCCESSFUL tool call
    returning ``processing_state: "failed"`` — always check the state,
    never infer success from the absence of a tool error.

    **Follow-up actions:** A completed generation's
    ``processing_result.available_actions`` maps slot indices to valid
    action types. E.g. ``{"0": ["upscale_2x", "vary_strong", ...],
    "global": ["reroll"]}``. Use ``execute_action`` with the ``uuid``,
    a chosen ``action_type``, and the ``parent_image_index`` (the slot
    key as an int) to run an action.

    Hosted: a key obtained mid-session may be passed as
    ``_meta["maginary/api_key"]``.
ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesGeneration UUID from generate or execute_action.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnlyHint and idempotentHint annotations, the description reveals a critical failure-mode behavior: a server-side failed generation is still a successful tool call returning processing_state 'failed'. It also documents terminal return structure and available_actions, adding substantial interpretive context the annotations 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?

The description is front-loaded with the purpose and uses clear labeled sections (Args, Returns, NOTE, Follow-up actions). It is longer than minimal but each section contributes meaningful operational guidance; only the hosted _meta note feels slightly tangential.

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 one-parameter fetch tool with an output schema, the description covers how to interpret terminal vs failed states, what fields to inspect, and how to proceed with available actions. Nothing an agent needs to call it correctly or interpret its result 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 explains uuid as 'Generation UUID from generate or execute_action.' The description only restates that the UUID is returned by generate, adding little beyond what the schema provides.

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?

Description opens with 'Fetch a generation by UUID (GET /api/gens/{uuid}/)', giving a specific verb, resource, and endpoint. This clearly distinguishes it from siblings like generate, wait_for_generation, and execute_action, which handle creation, waiting, and post-processing actions respectively.

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

Usage Guidelines4/5

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

It states the UUID comes from generate and explicitly directs follow-up actions to execute_action with the uuid, action_type, and parent_image_index. It doesn't explicitly contrast with wait_for_generation, but the context of fetching and checking state is clear enough for an agent to select it appropriately.

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

get_parameterGet parameterA
Read-onlyIdempotent
Inspect

Return the full record for a single parameter (canonical name or alias).

Args:
    name: Parameter name with or without leading ``--`` (e.g. ``ar``,
        ``--ar``, ``aspect``). Case-insensitive.

Returns:
    The parameter dict. Not-found is an ``isError`` result — surface it
    rather than fabricating a param.
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesParameter name with or without --, e.g. ar, --ar, aspect.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, and non-destructive. The description adds valuable behavioral context: it specifies the return type ('parameter dict') and error handling ('Not-found is an isError result — surface it rather than fabricating a param'). This goes beyond the annotations and helps the agent avoid incorrect behavior.

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?

Concise and well-structured with an Args/Returns format. The main purpose is front-loaded, and every sentence adds value. No fluff or 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?

For a simple single-parameter get with an output schema present, the description covers everything an agent needs: the name format, case-insensitivity, return type, and error behavior. No important operational details are 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. The description adds meaningful extra semantics: it clarifies the name can be canonical or alias, that leading '--' is optional, and that matching is case-insensitive. This enriches understanding beyond the schema's terse example.

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 ('Return') and resource ('full record for a single parameter'), and explicitly notes it accepts canonical name or alias. This distinguishes it from siblings like list_parameters and search_parameters by focusing on a single known parameter.

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?

Implies usage for a single parameter but does not explicitly name alternatives or conditions for choosing this tool over list_parameters or search_parameters. The context signals show these siblings, and the description could have added 'use search_parameters when you don't know the exact name' for clearer routing.

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

get_productsGet productsA
Read-onlyIdempotent
Inspect

List available Maginary products/plans with pricing.

No authentication required. Use this to present purchase options to the
user. The ``novice_pack`` ($10, 150 credits) is the recommended starting
point.

Returns:
    Dict with ``count`` and ``products`` — each product carries ``id``,
    ``short_name``, ``title``, ``description``, ``price_cents``,
    ``credits``, ``uploads``, ``is_subscription``. (The backend sends a
    bare array; it is wrapped here because FastMCP validates tool output
    against the dict annotation and rejects a top-level list.)
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive Mendable. The description adds valuable behavioral detail: no authentication requiredks, and it explains the output wrapping workaround (backend sends a bare array that FastMCP would reject as a top-level list). This goes well beyond the annotations and is consistent with them.

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

Conciseness5/5

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

The description is front-loaded with the essential purpose and usage, then gives a compact, well-organized return format summary and a useful backend-wrapping note. Every sentence adds value; nothing is redundant.

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?

Given the tool has no parameters and annotations already declare its read-only, idempotent nature, the description covers everything an agent needs: what it returns, when to use it, and a noteworthy output-format quirk. The presence of an output schema also reduces the burden, but the description exceeds it.

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 has zero parametersaren't needed, so the description does not need to add parameter meanings. Per the rubric, 0 params receives a baseline of 4, and the description appropriately focuses on output and usage instead of nonexistent parameters.

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

Purpose5/5

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

The description states a specific verb and resource: 'List available Maginary products/plans with pricing.' This clearly distinguishes the tool from siblings like checkout, get_balance, and create_account, and the use case is immediately obvious.

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

Usage Guidelines4/5

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

The description gives explicit context for when to call it: 'Use this to present purchase options to the user.' It also notes that no authentication is required and highlights a recommended product. It stops short of naming alternatives or exclusions, but the usage context is clear.

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

list_parametersList parametersA
Read-onlyIdempotent
Inspect

List Maginary prompt-DSL parameters.

Args:
    category: Restrict to one category (e.g. ``composition``, ``video``,
        ``model``, ``outpaint``). Call with no filters once — the response's
        ``categories`` / ``statuses`` maps are the full taxonomy.
    status: Restrict to one status (``live``, ``mostly-dead``,
        ``unimplemented``).
    include_reserved: When False (default) drop ``unimplemented``
        (recognized-but-blocked) parameters from the result.

Returns:
    A dict with ``count``, ``source`` (``live`` vs. ``bundled-snapshot``),
    ``categories`` / ``statuses`` (the filter taxonomy), and ``parameters``
    (the array of matching entries).
ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status: live, mostly-dead, or unimplemented.
categoryNoFilter by category, e.g. composition, video, model, outpaint.
include_reservedNoInclude unimplemented (blocked) parameters.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context: it explains the meaning of include_reserved (dropping unimplemented parameters) and describes the response keys (count, source, categories/statuses, parameters). This goes beyond annotations and helps the agent understand the tool's output and filter semantics.

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

Conciseness5/5

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

The description is well-structured with Args and Returns sections, front-loading the core purpose in the first sentence. It is concise yet comprehensive, with no redundant information. Each sentence adds value, making it easy for an agent to parse quickly.

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?

The tool has an output schema, and the description explicitly outlines the return dict structure, covering count, source, categories/statuses, and parameters. All three parameters are optional and documented, and the description provides usage guidance. An agent has everything needed to invoke the tool correctly without missing critical details.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description enriches parameter meaning by providing concrete examples for category (e.g., composition, video) and explaining that include_reserved defaults to False and drops unimplemented parameters. It also suggests using no filters to get the full taxonomy, which adds usage context beyond the schema's basic 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?

The description clearly states the verb 'List' and the resource 'Maginary prompt-DSL parameters', making the tool's purpose explicit. It also details the filtering options and return structure, distinguishing it from siblings like search_parameters and get_parameter without ambiguity.

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

Usage Guidelines4/5

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

The description provides clear usage guidance, notably 'Call with no filters once — the response's categories / statuses maps are the full taxonomy.' This tells the agent when to use the tool and what to expect. However, it does not explicitly contrast with sibling tools like search_parameters, so it lacks explicit exclusions or alternative selection criteria.

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

manage_api_keyManage API keyA
Destructive
Inspect

Create, list, or revoke Maginary API keys (up to 10 per account).

Auth: pass ``email`` + ``password`` for Basic auth (onboarding), or omit
both to use the configured API key (normal operation).

Args:
    action: One of ``create``, ``list``, ``revoke``.
    name: Key name (required for ``create``).
    key_prefix: 8-char prefix of the key to revoke (required for ``revoke``).
    email: Account email (for Basic auth).
    password: Account password (for Basic auth).

Returns:
    For ``create``: dict with ``raw_key`` (the full key — show once, then
    use ``configure_api_key`` to activate it), ``key_prefix``, ``name``.
    For ``list``: dict with ``keys`` array.
    For ``revoke``: success/error message.
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoKey name (required for create).
emailNoAccount email (for Basic auth).
actionYesOne of: create, list, revoke.
passwordNoAccount password (for Basic auth).
key_prefixNo8-char prefix of key to revoke (required for revoke).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the annotations (destructiveHint=true) by disclosing the 10-key limit, the one-time display of raw_key, the requirement to use configure_api_key for activation, and the auth-mode switching behavior. This gives the agent concrete operational expectations without contradicting the structured metadata.

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

Conciseness5/5

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

The description is well-organized with clear sections for overview, auth, args, and returns. Each sentence contributes useful information, and the action-specific return behavior is structured for quick parsing. There is no filler or redundant restatement of the title.

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 multi-action tool with 5 parameters and no enums, the description covers all necessary operational details: what each action does, required vs. optional parameters, auth modes, account limit, and the expected return payloads. It also references the related activation tool, making the workflow complete for an agent.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful detail beyond the schema: it clarifies that key_prefix must be 8 characters, that name is required for create, that key_prefix is required for revoke, and it explains the return format for each action. This is more than the schema alone provides.

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 (create/list/revoke) with a specific resource (Maginary API keys) and a key constraint (up to 10 per account). It clearly distinguishes itself from the sibling configure_api_key by mentioning that activation is a separate step, so an agent can select this tool appropriately.

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

Usage Guidelines4/5

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

It provides explicit auth guidance (email+password for onboarding vs. configured API key for normal operation) and notes that after creating a key, configure_api_key should be used to activate it. It does not explicitly enumerate all alternatives or when not to use the tool, but the action field and sibling references make the intended usage clear.

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

search_parametersSearch parametersA
Read-onlyIdempotent
Inspect

Text-search over parameter names, aliases, descriptions, values, examples.

Args:
    query: Substring match, case-insensitive.
    category: Optional single-category restriction.
    include_reserved: Whether to include ``unimplemented`` parameters.

Returns:
    Dict with ``count``, ``source`` (``live`` vs. ``bundled-snapshot``),
    and ``parameters`` (ordered as they appear in the catalog).
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch term (case-insensitive substring match).
categoryNoFilter by category, e.g. composition, video, model.
include_reservedNoInclude unimplemented (blocked) parameters.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior, so the description adds value by disclosing search semantics (case-insensitive substring), the inclusion of unimplemented parameters via include_reserved, and the return distinction between live and bundled-snapshot sources. These details go beyond what the annotations provide.

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

Conciseness5/5

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

The description is compact, front-loaded with the core purpose, and uses a clear Args/Returns structure. Every sentence contributes meaningful information without repetition or 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?

The tool is simple, has an output schema, and all parameters are documented. The description fully covers search behavior, parameter roles, and return structure, including the live vs. bundled-snapshot source field and ordering guarantee. Nothing needed to invoke the tool 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%, so the schema already documents all parameters. The description mostly mirrors the schema, though it adds useful nuance such as 'single-category restriction' and clarifies that include_reserved covers 'unimplemented' parameters. This is adequate but does not substantially exceed the schema's existing documentation.

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 clearly states a specific verb ('Text-search') and a specific resource (parameter names, aliases, descriptions, values, examples), which distinguishes it from sibling tools like list_parameters or get_parameter. It also explains the search semantics in the first sentence, making the tool's role immediately obvious.

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

Usage Guidelines4/5

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

The description establishes clear context: it is for substring-based text search across parameter metadata. It does not explicitly name sibling tools or state when not to use them, but the 'Text-search' framing and the parameter-focused scope are sufficient to guide selection in most cases.

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

upload_imageUpload imageA
Idempotent
Inspect

Upload a local image and get a CDN URL for img2img or --sref.

Only available on local (stdio) connections.  On hosted/remote
connections, place an existing image URL directly in the prompt.

Place the returned ``url`` in a ``generate`` prompt:
``generate("https://cdn.maginary.ai/…/photo.webp reimagine as oil painting")``

Args:
    file_path: Path to an image file on disk (JPEG, PNG, WebP, HEIC).
    filename: Original filename.  Inferred from ``file_path`` if omitted.

Returns:
    Dict with ``url`` (the public CDN URL), ``exists`` (deduplicated),
    ``credits_deducted``, and ``message``.
ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoOverride filename. Inferred from file_path if omitted.
file_pathYesPath to a local image (JPEG, PNG, WebP, HEIC).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: the local-only constraint, the deduplication behavior (exists field), and the fact that credits are deducted. It doesn't explicitly state that the operation is a write/upload, but the description's 'Upload' verb and the credits_deducted return field make that clear. The description adds context beyond 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.

Conciseness5/5

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

The description is well-structured and front-loaded: the core purpose is in the first sentence, followed by the critical usage constraint, then a usage example, then parameter details. Every sentence earns its place, and the Args/Returns section is a clean, scannable format. No wasted words.

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?

The description is complete for an upload tool. It covers the purpose, the local-only constraint, the alternative for remote connections, how to use the result, parameter semantics, and the return value structure. The output schema exists, so return values are documented. The sibling tools are all different operations (generate, checkout, account management), so no confusion is possible. Nothing an agent needs to call this 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%, so the schema already documents both parameters (file_path and filename). The description adds a small amount of value by explaining that filename is inferred from file_path if omitted, which is also in the schema. It doesn't add format details or examples beyond what the schema provides, so a baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb ('Upload'), a resource ('a local image'), and the outcome ('get a CDN URL for img2img or --sref'). It clearly distinguishes this tool from siblings like generate or get_generation by focusing on the upload step. The title and description align, and the purpose is immediately understandable.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool: only on local (stdio) connections, and provides the alternative for hosted/remote connections (place an existing image URL directly in the prompt). It also gives a concrete usage example showing how to use the returned URL in a generate prompt. This is clear, actionable guidance that prevents misuse.

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

wait_for_generationWait for generationA
Read-onlyIdempotent
Inspect

Poll get_generation on a backoff until it reaches done / failed.

Args:
    uuid: The UUID returned by ``generate``.
    timeout_s: Return after this many seconds even if still running.
        Default 45 stays under the 60 s per-call limit most MCP clients
        enforce; a ``timeout`` result just means "call again". Only raise
        it (e.g. for video) on clients you know allow long tool calls.

Returns:
    The terminal generation record — which includes generations that
    failed server-side: those are SUCCESSFUL tool calls returning
    ``processing_state: "failed"`` with empty ``image_urls``, so always
    check the state. On tool failure, an ``isError`` result whose
    ``error`` field is ``"timeout"`` (``message`` names the last
    observed state — the generation keeps running server-side and can be
    re-fetched with ``get_generation`` later), ``"auth"``, or
    ``"failed"``.

    **Follow-up actions:** A ``done`` generation's
    ``processing_result.available_actions`` maps slot indices to valid
    action types — e.g. ``{"0": ["upscale_2x", "vary_strong",
    "pan_left", "zoom_out_2x", "img2vid_basic", ...], "global":
    ["reroll"]}``. Use ``execute_action`` with the ``uuid``, a chosen
    ``action_type``, and the ``parent_image_index`` (the slot key as an
    int) to run an action on a specific output image.
ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYesGeneration UUID to poll.
timeout_sNoMax seconds to wait before returning a timeout result.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnly, openWorld, idempotent), the description richly discloses behavior: it polls on a backoff, a timeout is a successful tool call with a specific error field, server-side failures appear as 'failed' processing_state with empty image_urls, and the generation keeps running after a timeout. It also details the error field values and follow-up actions, going well beyond the annotation safety profile.

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

Conciseness4/5

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

The description is long but purposefully structured with Args, Returns, and Follow-up actions sections. The core purpose is front-loaded in the first sentence. While dense, the detail on failure modes, timeout behavior, and follow-up actions is necessary for correct invocation, so every sentence earns its place. There is minor redundancy in the 'failed' explanation, but it is not excessive.

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?

The description covers polling behavior, timeout semantics, failure interpretation, error field values, and follow-up actions with execute_action. Given the tool's complexity and the presence of an output schema (which handles return shape), this is complete. An agent has everything needed to call the tool correctly and handle all outcomes.

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 schema already fully documents both parameters (100% coverage). The description adds meaningful context: uuid is the value returned by generate, and timeout_s default 45 stays under the 60s per-call limit, with a timeout result meaning 'call again.' This enriches parameter understanding beyond the schema 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?

The description opens with a specific verb and resource: 'Poll get_generation on a backoff until it reaches done / failed.' This clearly distinguishes it from generate (which starts a generation), get_generation (a single fetch), and execute_action (which runs follow-up actions). An agent can immediately understand the tool's unique role.

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

Usage Guidelines4/5

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

The description implies usage after calling generate and explains when to adjust timeout_s based on client call-length limits. It also clarifies that a timeout result means 'call again' rather than failure. However, it does not explicitly say 'use this instead of manually polling get_generation,' leaving that to inference.

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. 16 tool updates
    • First observedcheck_account_status
    • First observedcheckout
    • First observedconfigure_api_key
    • First observedcreate_account
    • First observedcreate_wallet_account
    • First observedexecute_action
    • First observedgenerate
    • First observedget_balance
    • First observedget_generation
    • First observedget_parameter
    • First observedget_products
    • First observedlist_parameters
    • First observedmanage_api_key
    • First observedsearch_parameters
    • First observedupload_image
    • First observedwait_for_generation

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.