Skip to main content
Glama

fattly — FATTLY CLI + MCP server

Generate AI images, video, voiceovers, music and UGC-style ads from your terminal — or straight from AI assistants like Claude, Cursor and VS Code via MCP.

50+ AI models in one account (Veo 3.1, Kling 3, Seedance, Nano Banana, GPT Image, ElevenLabs…) · pay with fattly.app credits that never expire.

npm CI License: MIT fattly MCP server


MCP (Claude, Cursor, VS Code)

The package is an MCP server — it lets AI assistants generate media through your FATTLY account.

Option A — Hosted (no install, sign in with OAuth)

Connect your client to the hosted server. No npm, no key to paste — you approve access in the browser.

https://fattly.app/api/mcp

In Claude: Settings → Connectors → Add custom connector → paste the URL. Full setup guide: https://fattly.app/claude-mcp

Option B — Local (npx, with an API key)

  1. On fattly.app open Dashboard → API keys and create a key.

  2. Add this to your client's MCP config:

{
  "mcpServers": {
    "fattly": {
      "command": "npx",
      "args": ["-y", "fattly", "mcp"],
      "env": {
        "FATTLY_API_KEY": "gpx_live_YOUR_KEY"
      }
    }
  }
}

Installing with an AI agent (Cline, Claude Code, Cursor)? Point it at llms-install.md.

Tools

Tool

What it does

Spends credits

fattly_credits

Current credit balance

no (read-only)

fattly_list_models

Models and their price in credits

no (read-only)

fattly_upload_image

Upload a local photo → URL for edit / image-to-video models

no

fattly_generate_image

Text-to-image and image editing (multi-image edits, face swap)

yes

fattly_generate_video

Text-to-video and image-to-video; waits for the mp4

yes

fattly_generate_audio

Voiceover (text-to-speech) or music

yes

Every tool carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint), so clients can ask before paid calls. Failed generations are refunded automatically. Content must be safe-for-work.

Related MCP server: mcp-media-engine

CLI

npm install -g fattly   # Node.js 18+
fattly login            # paste your gpx_live_… key
fattly credits
fattly models video

fattly generate "astronaut cat on Mars" --model nano-banana-2 --out cat.png
fattly video "ocean waves at sunset" --model kling-3-standard --out waves.mp4
fattly audio "Welcome to FATTLY" --voice Rachel --out voice.mp3
fattly audio "calm ambient" --music --seconds 30 --out music.mp3

Configuration

Variable

Purpose

FATTLY_API_KEY

API key (alternative to fattly login)

FATTLY_API_URL

API address override (default https://fattly.app)

The key saved by fattly login lives in ~/.fattly/config.json with owner-only permissions.

More

MIT © Fattly

Available Tools

6 tools
fattly_creditsCheck credit balanceA
Read-onlyIdempotent
Inspect

Shows the current credit balance on the FATTLY account. Read-only and free — call it before an expensive generation to make sure the user has enough credits.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces this with 'Read-only and free' and adds practical context about credit costs for generations, which goes slightly beyond the structured annotations.

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

Conciseness5/5

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

The description is two sentences with no wasted words. The core purpose is front-loaded, and the usage guidance is compact and actionable.

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 zero-parameter read-only tool, the description is largely complete. It explains what the tool does, that it is safe and free, and when to call it. It does not specify the exact return format, but that is not critical for this call pattern.

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 parameters and schema coverage is 100%, so parameter semantics are trivially complete. Per baseline guidance for zero-parameter tools, a score of 4 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 ('Shows') and resource ('current credit balance on the FATTLY account'), making the tool's purpose immediately clear. It also distinguishes itself from sibling generation tools by focusing on account balance rather than media generation.

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 explicitly tells the agent when to use this tool: before an expensive generation to verify sufficient credits. It does not mention explicit alternatives or when-not-to-use cases, but the context is clear and no sibling tool serves the same purpose.

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

fattly_generate_audioGenerate a voiceover or musicAInspect

Generates AI audio: a voiceover (mode=speech) from text, or music (mode=music) from a description. Returns a link to the mp3 file. Spends credits (price in fattly_list_models → audio); refunded automatically if the generation fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesspeech = voiceover, music = music.
textYesText to read (speech) or a music description (music).
voiceNoVoiceover voice, e.g. Rachel, Aria, George (speech only).
secondsNoMusic length: 15, 30 or 60 (music only).

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate a mutating, non-idempotent operation (readOnlyHint=false, idempotentHint=false). The description adds important behavioral context beyond annotations: the tool spends credits, the price is queryable via fattly_list_models, and credits are refunded automatically on failure. It also discloses the returned mp3 link, providing useful operating context.

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?

Three sentences with zero redundancy: the first establishes the core function and modes, the second the output, and the third the credit cost and refund behavior. Information is front-loaded and every sentence adds value.

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 4 parameters, 2 required, full schema coverage, and no output schema, the description is complete: it explains what the tool does, the two modes, the return format, and the cost/refund behavior. An agent has enough context to select and invoke the tool correctly without additional missing details.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description reinforces the meaning of mode and text ('voiceover from text' vs 'music from a description') but adds no new parameter semantics beyond what the schema already documents. The refund and mp3-link details concern behavior, not 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?

Clearly states a specific verb and resource: 'Generates AI audio', with two distinct modes (speech voiceover from text, music from a description) and a concrete output (link to mp3). This differentiates it from sibling generation tools like fattly_generate_image and fattly_generate_video.

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

Usage Guidelines4/5

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

Provides clear context for when to use the tool: when audio is needed, with the mode parameter selecting voiceover vs music. It also references fattly_list_models for pricing and mentions a refund on failure. It does not explicitly name sibling alternatives, but the audio-only scope and mode explanation make the intended usage obvious.

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

fattly_generate_imageGenerate an imageAInspect

Generates an AI image from a prompt (or edits uploaded images). Returns links to the finished images. Spends credits: model price × numImages (see fattly_list_models); fails with an error if the balance is too low, and credits are refunded automatically when a generation fails. Prompts must be safe-for-work.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoModel id (default nano-banana-2). List: fattly_list_models.
promptYesDescription of the image to generate.
numImagesNoNumber of images 1–4 (default 1).
aspectRatioNoAspect ratio, e.g. 1:1, 16:9, 9:16 (default 1:1).
inputImageUrlNoOptional single input image for editing / face-swap models — must be a fal URL. Get one by uploading a local photo with fattly_upload_image.
inputImageUrlsNoOptional MULTIPLE input images (fal URLs) for multi-image edit models like nano-banana-2-edit / nano-banana-pro-edit. Typical swap use: image #1 = the scene/frame to keep (background, framing, lighting), image #2 = the subject/face to place into that scene. Get each URL from fattly_upload_image.

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses credit spending, cost calculation, failure behavior when balance is too low, automatic refunds, and the safe-for-work constraint. Since annotations are all false and do not describe side effects, the description itself carries the full burden and does so well.

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?

Three sentences with no filler: the main action is front-loaded, followed by output format, cost/error behavior, and a safety constraint. Every sentence carries essential information for correctly invoking the tool.

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?

The description covers purpose, output, cost, failure, refunds, safety, and edit workflows, and the schema fills in parameter details. With no output schema present, mentioning that links are returned is useful, though link format/details and whether generation is synchronous are not specified.

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 all six parameters in detail, so the baseline is 3. The description adds value beyond the schema by explaining edit workflows, fal URL requirements, and the typical face-swap role of image #1 vs image #2, 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 states a specific verb and resource ('Generates an AI image') and expands scope to edits of uploaded images, immediately distinguishing itself from the video/audio generation siblings. It also says it returns links, making the core function unambiguous.

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?

Clear context is provided: the tool is for image generation from prompts or edits, with references to fattly_list_models for model choice and fattly_upload_image for obtaining fal URLs. It does not explicitly name generate_video/generate_audio as alternatives, but the media-specific wording makes the choice obvious.

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

fattly_generate_videoGenerate a videoAInspect

Generates an AI video from a prompt (or from a start image). Takes a few minutes — the tool waits (up to 10 min) and returns a link to the mp4 file. Video is the most expensive operation: it spends the model's credit price (see fattly_list_models), so confirm the model and cost with the user first. Credits are refunded automatically if the generation fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoVideo model id (default kling-3-standard), e.g. kling-3-pro, veo-3-1, veo-3-1-fast, seedance-2-5, hailuo-3, ltx-2-5. Full list with prices: fattly_list_models.
promptYesDescription of the video scene.
durationNoClip length in seconds (model dependent).
aspectRatioNoAspect ratio, e.g. 16:9, 9:16, 1:1 (default 16:9).
inputImageUrlNoOptional start image for image-to-video — must be a fal URL. Get one by uploading a local photo with fattly_upload_image.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are all false (readOnlyHint false, destructiveHint false, etc.), so the description carries the burden of behavioral disclosure. It covers the wait time (up to 10 min), automatic credit refund on failure, cost implications, and the return format (link to mp4). This goes beyond the annotations and provides useful context, though it doesn't detail edge cases like timeout 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?

The description is three sentences with no waste. It leads with the core action, then the critical cost/wait warning, and ends with the refund policy. Every sentence earns its place and is front-loaded.

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

Completeness4/5

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

With 5 parameters, no output schema, and all annotations false, the description covers the key behavioral aspects (wait, cost, refund, return link) and parameter prerequisites. It doesn't explain the output structure beyond a link, but since there is no output schema, that is acceptable. The only minor gap is not describing any potential error handling beyond refunds.

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%, giving a baseline of 3. The description adds meaningful context for the inputImageUrl parameter (must be a fal URL and how to obtain one) and reinforces model cost implications. While the schema already lists model examples, the description ties them to pricing via fattly_list_models, adding value.

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 tool generates an AI video from a prompt or start image, distinguishing it from siblings like generate_image, generate_audio, and upload_image. The verb 'generates' plus the resource 'AI video' is specific 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 Guidelines4/5

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

The description explicitly warns that video is the most expensive operation and instructs the agent to confirm model and cost with the user first, which is strong usage guidance. It also notes the waiting behavior and links to fattly_list_models for pricing, though it doesn't explicitly contrast with alternatives beyond that.

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

fattly_list_modelsList models and pricesA
Read-onlyIdempotent
Inspect

Returns available models and their cost in credits (images, video, audio). Read-only and free. Use before generating to pick the right model id and to tell the user what a generation will cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOptional category filter.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark it readOnlyHint, idempotentHint, and destructiveHint false. The description adds that it is 'free', which is not in the annotations, and that it returns model ids and credit costs. This is useful behavioral context beyond the structured fields and does not contradict 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 two sentences, front-loaded with the core return value, then usage guidance. Every clause earns its place with no fluff.

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 low-complexity tool with one optional parameter and no output schema, the description covers what it returns, when to use it, and its cost. A minor gap is that it doesn't explicitly state that omitting the category returns all models, but that is inferable from the schema's 'optional filter' phrasing.

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 single optional 'category' parameter is fully documented in the schema with an enum and description. The tool description loosely aligns with the enum values by listing 'images, video, audio', but it adds no new semantic detail beyond what the schema already provides, so the baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource: 'Returns available models and their cost in credits'. It names the categories (images, video, audio) and explicitly positions itself as the pre-generation lookup tool, distinguishing it from generation siblings like fattly_generate_image and from fattly_credits which likely reports account 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?

The description gives clear usage context: 'Use before generating to pick the right model id and to tell the user what a generation will cost.' This tells when to call it, though it does not explicitly name alternatives or state when not to use it, stopping just short of a full 5.

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

fattly_upload_imageUpload a local imageAInspect

Uploads a local image file (JPG, PNG or WEBP) to FATTLY and returns a public fal URL. Use this to turn a photo on disk into an inputImageUrl for editing / face-swap / image-to-video models: pass the returned URL as inputImageUrl to fattly_generate_image or fattly_generate_video. No credits are charged for the upload.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesAbsolute path to a local image file (JPG, PNG or WEBP), max 10 MB.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only report readOnly=false and destructive=false, so the description adds value by disclosing that no credits are charged and that a public URL is returned. This gives the agent useful behavioral and cost-related context beyond the generic 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?

Three short sentences, each earning its place: what the tool does, how to use the result, and a cost note. The core action is front-loaded without extraneous detail.

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

Completeness4/5

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

With no output schema, the description correctly explains the return value as a public fal URL and shows how it feeds into sibling tools. It is complete enough for a one-parameter upload utility, though it could briefly mention error behavior.

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 schema already documents filePath with absolute path, allowed formats, and the 10 MB limit, so schema coverage is 100%. The description adds little parameter-specific meaning beyond framing the intent; it stays at the baseline of relying on 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?

Description names the specific verb 'Uploads', the resource (local image file), and the result (public fal URL). It also clearly distinguishes the tool from sibling generation tools by explaining its role as a prerequisite for them.

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 clear context: use this tool to turn a local photo into an inputImageUrl for editing, face-swap, or image-to-video. It names the downstream tools but does not explicitly state when not to use it, so it stops short of a full when/when-not guide.

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. 2 tool updatesv0.1.2
    • Changedfattly_generate_image1 field changed
      • changedInput schema / properties / inputImageUrls / description
        Previous value: -"Optional MULTIPLE input images (fal URLs) for multi-image edit models like nano-banana-edit / nano-banana-pro-edit / seedream-v4-edit. Typical swap use: image #1 = the scene/frame to keep (background, framing, lighting), image #2 = the subject/face to place into that scene. Get each URL from fattly_upload_image."New value: +"Optional MULTIPLE input images (fal URLs) for multi-image edit models like nano-banana-2-edit / nano-banana-pro-edit. Typical swap use: image #1 = the scene/frame to keep (background, framing, lighting), image #2 = the subject/face to place into that scene. Get each URL from fattly_upload_image."
    • Changedfattly_generate_video1 field changed
      • changedInput schema / properties / model / description
        Previous value: -"kling-3-standard | veo-3-1 | sora-2 (default kling-3-standard)."New value: +"Video model id (default kling-3-standard), e.g. kling-3-pro, veo-3-1, veo-3-1-fast, seedance-2-5, hailuo-3, ltx-2-5. Full list with prices: fattly_list_models."
  2. 6 tool updatesv0.1.0
    • First observedfattly_credits
    • First observedfattly_generate_audio
    • First observedfattly_generate_image
    • First observedfattly_generate_video
    • First observedfattly_list_models
    • First observedfattly_upload_image

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct resource/action: credits, models, upload, image generation, video generation, audio generation. No two tools overlap in purpose; the generation tools are clearly separated by output modality.

Naming Consistency4/5

All tools share the 'fattly_' prefix and use a consistent verb_noun pattern (list_models, upload_image, generate_image). The only minor deviation is 'fattly_credits' which is a noun rather than a verb_noun like 'get_credits' or 'check_credits'.

Tool Count5/5

Six tools is well-scoped for a media generation server: one for account state, one for catalog/pricing, one for input preparation, and three for the core generation modalities. Each tool earns its place.

Completeness4/5

The core lifecycle is covered: check credits, list models, upload input, generate image/video/audio. Minor gaps exist (no tool to fetch a generation result by ID, no explicit cancel/delete), but the server's stated purpose of generating media is fully covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers