Skip to main content
Glama

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 by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 42 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
maginaryai/maginary-mcp
GitHub Stars
1
Server Listing
maginary-mcp

TDQS

A4.2/5.0

Scored across 16 tools

Disambiguation4/5

Each tool has a clearly distinct purpose: account management, billing, generation, polling, parameter lookup, and upload are all separated. The only potential overlap is between get_generation and wait_for_generation, but wait_for_generation explicitly wraps polling, and the descriptions distinguish them well (one-shot fetch vs backoff polling).

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (check_account_status, create_account, get_balance, manage_api_key, etc.) with no deviations in case or style. The pattern is predictable and readable throughout.

Tool Count4/5

16 tools is slightly higher than typical but justified by the breadth of the domain (account lifecycle, billing, generation, parameters, upload, follow-up actions). It's not bloated; each tool appears to earn its place, though a few (e.g., get_parameter vs list_parameters vs search_parameters) could arguably be consolidated.

Completeness4/5

The surface covers account creation, authentication, API key management, balance checking, product listing, checkout, image generation, polling, follow-up actions, upload, and parameter introspection. Minor gaps exist: no explicit cancel/delete generation tool, and no direct way to update account details, but agents can work around these.

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``.
NameRequiredDescriptionDefault
emailNoAccount email (for Basic auth). Omit to use API key.
passwordNoAccount password (for Basic auth).

Output 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"``.
NameRequiredDescriptionDefault
emailNoAccount email (for Basic auth during onboarding).
passwordNoAccount password (for Basic auth).
product_idYesProduct ID from get_products.

Output 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.
NameRequiredDescriptionDefault
api_keyYesFull API key string from manage_api_key.

Output 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"``.
NameRequiredDescriptionDefault
emailYesEmail address for the new account.

Output 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"``.
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

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"``, ``"img2img_basic"``, ``"img2img_inpaint"``,
        ``"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: Required for ``img2img_basic``, where it is the edit
        instruction (e.g. ``"make the hat red"``; flags such as ``--2``
        or ``--flagship`` may follow it), and for ``img2img_inpaint``,
        where it is the instruction followed by ``--mask <shapes>``
        (e.g. ``"make the hat red --mask rect(.2,.1 .8,.4)"``; the
        instruction may be empty to just redo the area). Optional otherwise: 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"``.
NameRequiredDescriptionDefault
promptNoPrompt for the action. Required for img2img_basic (the edit instruction) and img2img_inpaint (the instruction, which may be empty, plus --mask <shapes>); optional replacement prompt for vary/img2vid.
action_typeYesAction from available_actions, e.g. upscale_2x, vary_strong, img2img_basic, img2img_inpaint, 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

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 are present (non-read-only, non-idempotent, open-world), but the description adds substantial context beyond them: the call creates a child generation record that must be polled, and failures follow the same ``isError`` contract as ``generate`` with ``auth``, ``payment_required`` (x402 challenge) and ``failed`` cases. That is exactly the kind of downstream-behavior disclosure annotations cannot express.

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

Conciseness4/5

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

Front-loaded purpose followed by Args/Returns blocks; the 14-item action-type list earns its place because the schema defines no enum for action_type. It is longer than strictly necessary, with a few restatements of schema-documented behavior, but nothing is padding.

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, stateful tool with an output schema and annotations, the description supplies the missing connective tissue: ordering relative to generate/wait_for_generation, where to source action names, required-vs-optional parameter rules, and the failure contract. An agent has everything needed to invoke it correctly on the first try.

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 already 100%, so a 3 is the floor, and the description goes further by stating per-slot requirements (parent_image_index required except for ``reroll``) and the ``--mask <shapes>`` / flag syntax for ``img2img_inpaint``, which the schema's brief one-liner omits. Some overlap remains with the schema's own prompt and action_type text, keeping this out of 5 territory.

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 ('Run a follow-up action on a completed generation's image') and positions it precisely in the pipeline after generate → wait_for_generation, which cleanly separates it from both siblings. An agent can tell this is the post-generation image-editing tool without opening the schema.

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

Usage Guidelines4/5

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

Gives a clear precondition chain (only after ``generate`` → ``wait_for_generation``) and tells the agent where valid inputs come from (``processing_result.available_actions``), plus which actions are global vs per-slot. It does not state an explicit when-not-to-use or name a competing sibling as an exclusion, so it falls short of a 5.

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

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).

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

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``.
NameRequiredDescriptionDefault
emailNoAccount email (for Basic auth).
passwordNoAccount password (for Basic auth).

Output 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"]``.
NameRequiredDescriptionDefault
uuidYesGeneration UUID from generate or execute_action.

Output 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.
NameRequiredDescriptionDefault
nameYesParameter name with or without --, e.g. ar, --ar, aspect.

Output 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.)
NameRequiredDescriptionDefault

No parameters

Output 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).
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

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.
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

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).
NameRequiredDescriptionDefault
queryYesSearch term (case-insensitive substring match).
categoryNoFilter by category, e.g. composition, video, model.
include_reservedNoInclude unimplemented (blocked) parameters.

Output 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``.
NameRequiredDescriptionDefault
filenameNoOverride filename. Inferred from file_path if omitted.
file_pathYesPath to a local image (JPEG, PNG, WebP, HEIC).

Output 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_1_5x", "img2img_basic", "img2img_inpaint",
    "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.
NameRequiredDescriptionDefault
uuidYesGeneration UUID to poll.
timeout_sNoMax seconds to wait before returning a timeout result.

Output 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?

Well beyond the readOnly/idempotent/openWorld annotations, the description discloses the backoff polling strategy, the 45s default tied to the 60s MCP per-call limit, and a precise error taxonomy ('timeout', 'auth', 'failed') with the crucial distinction that server-side 'failed' generations are still successful tool calls with empty image_urls. This is exactly the behavioral context annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with the core behavior, then structured Args/Returns/follow-up sections. It is verbose and the timeout semantics are restated in both the arg paragraph and the Returns block, but nearly every sentence carries operational information.

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 polling tool with an output schema, a single required param, and no nesting, this covers everything an agent needs: termination states, timeout semantics, error branches, and how to chain into execute_action using available_actions slot indices. Nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: timeout_s defaults to 45 to stay under the 60s client limit, a timeout is non-fatal since the generation keeps running, and which uuids are valid (those returned by generate). uuid adds no meaning beyond the schema, but timeout_s is meaningfully enriched.

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 first sentence names a specific verb (poll) and resource (get_generation), plus the termination condition (done/failed). It clearly distinguishes itself from the one-shot sibling get_generation and from generate, so an agent can pick it without opening either schema.

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

Usage Guidelines4/5

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

It gives a concrete when-to-use context (waiting on a generate uuid), explains what a timeout result means ('call again'), and warns when to raise timeout_s (video, permissive clients). It routes follow-up work to execute_action, but never explicitly states the alternative (e.g. 'use get_generation for a single non-blocking check'), which keeps it just short of a 5.

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

Tool Schema Changelog

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

  1. 1 tool update
    • Changedexecute_action2 fields changed
      • changedInput schema / properties / action_type / description
        Previous value: -"Action from available_actions, e.g. upscale_2x, vary_strong, img2vid_basic, reroll."New value: +"Action from available_actions, e.g. upscale_2x, vary_strong, img2img_basic, img2img_inpaint, img2vid_basic, reroll."
      • changedInput schema / properties / prompt / description
        Previous value: -"Optional replacement prompt for vary/img2vid actions."New value: +"Prompt for the action. Required for img2img_basic (the edit instruction) and img2img_inpaint (the instruction, which may be empty, plus --mask <shapes>); optional replacement prompt for vary/img2vid."
  2. 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.