Model Context Protocol

34 LUVI tools inside Claude and ChatGPT

LUVI is an MCP server. Connect it once and your assistant can pick a model, quote the cost, generate, file the result and read it back, all against your own LUVI account and credits. Each tool below is explained in plain words; open “What the assistant reads” under any tool for the exact description the connector sends.

Claude (claude.ai)

  1. 1Open Settings → Connectors → Add custom connector.
  2. 2Name it LUVI and paste the endpoint below.
  3. 3Sign in with your LUVI account when Claude asks, and approve the connection.
  4. 4Start a chat and ask for a video; Claude quotes the cost before it spends credits.

ChatGPT

  1. 1Open Settings → Security and login and turn on Developer mode.
  2. 2Go to Plugins, press +, create an app and paste the endpoint below.
  3. 3Sign in with your LUVI account when ChatGPT asks, and approve.
  4. 4In a chat, turn on the LUVI app under Developer mode and ask for what you need.
Endpointhttps://www.luvicreator.com/api/mcp·OAuth sign-in with your LUVI account; nothing is shared with the assistant's provider.

Step-by-step guides

Generate

Generate

generate

Starts a video, image, audio or 3D generation on the model you chose and spends credits from your account. LUVI fills in the model's default settings. If too many of your generations are already running, it waits in line and starts by itself.

Inputs: modelId, prompt, parameters, projectId, folderId

What the assistant reads (in English)

Submit a generation on a LUVI model. Charges the caller’s LUVI credits. Returns a generationId immediately (async) — poll get_generation_status until "completed". You only need the prompt and any reference(s): LUVI fills each model’s default parameters (resolution, format, …) automatically so the result matches its web app — pass a parameter only to override a default. When you DO override one, first call get_model_schema for that model’s exact keys, CASE-SENSITIVE enum values and numeric ranges: a guessed key or a value in the wrong case/format (e.g. "2K" vs the schema’s "2k") is silently dropped and the default is used instead. References go INSIDE `parameters`: either a public URL, or — to build on something already in the user’s library — the `referenceUri` string (luvi://asset/…) from list_library / get_asset, which LUVI resolves server-side. Put the reference at the model’s schema key if you know it; a common alias (image / images / reference / reference_image) is accepted and remapped. If projectId is omitted, results land in a per-connection auto-project (named after your connection). When the account already runs the most generations LUVI allows at once, the request is QUEUED instead of refused: you still get a generationId at once, it starts by itself when a slot frees, and nothing is charged until it starts — keep polling get_generation_status with that id.

Quote the cost

read-only
estimate_cost

Works out how many credits a generation will cost, with the same pricing the charge uses, so you see the price before anything is spent.

Inputs: modelId, parameters, prompt

What the assistant reads (in English)

Estimate how many LUVI credits a generation will cost, using the same pricing the charge will use. Call this before `generate` to show the user the cost. Pass the SAME `parameters` you will pass to `generate`, references included — several models price per input image or per second of the source media, so a quote made without them is too low.

Get the result

read-only
get_generation_status

Follows a generation from its place in the queue until it is done, then shows images and plays audio in the chat, gives shareable links and reports the credits it actually cost.

Inputs: generationId

What the assistant reads (in English)

Check a generation by id. While queued, returns its place in line (it starts by itself); while processing, returns its status. When completed, embeds image and audio results inline (images render, audio plays in-chat) AND returns direct URLs that open with no login (7-day signed; audio/video play in the browser), plus a login-gated LUVI deep-link for editing — and `creditsCharged`, what this one generation actually took off the account (the ledger figure the account page shows under Billing → Transactions, not an estimate).

Cancel a queued generation

cancel_generation

Removes a generation that is still waiting in line, so it never starts and costs nothing. One that has already started cannot be stopped and is charged when it finishes; the tool says so.

Inputs: generationId

What the assistant reads (in English)

Cancel a generation that is still QUEUED (waiting for one of the account’s running generations to finish). It never starts and costs nothing. A generation that has already started cannot be stopped — the provider offers no cancel — and is charged when it finishes; this tool says so instead of pretending. Pass the generationId returned by `generate`.

Read a model's exact settings

read-only
get_model_schema

Lists every setting a model accepts, with its allowed values and defaults, so the assistant sets resolution, duration or aspect ratio correctly instead of guessing.

Inputs: modelId

What the assistant reads (in English)

Return the EXACT parameter contract for a model: every parameter key, its type, the allowed enum values (CASE-SENSITIVE), numeric range, default, and the keys where reference media (image/video/audio URLs) must go. Call this BEFORE generate whenever you set ANY parameter (resolution, size, aspect ratio, duration, output format, quality, …) or attach a reference — the remote schema is authoritative and a guessed key or a value in the wrong case/format is silently dropped, so the model falls back to its default (e.g. you ask for 2K and get 1K). Send back exactly the keys and values listed here, at the reference keys listed here.

Browse the models

read-only
list_models

Lists every active LUVI model for video, image, audio and 3D, so the assistant can pick the right one for your job.

Inputs: category, search

What the assistant reads (in English)

List LUVI’s active AI generation models (image, video, 3D, audio). Use this first to discover which model id to pass to `generate`. Returns id, name, provider, category and capabilities.

Prompt engine

Read the prompt manual

read-only
get_prompt_manual

Gives the assistant LUVI's prompting guide for the chosen model, so it writes the prompt the way that model understands best.

Inputs: modelId

What the assistant reads (in English)

Return LUVI’s proprietary prompt manual for a model (reference syntax, camera vocabulary, forbidden tokens, emotion handling, length/identity limits, §citations). Call this BEFORE writing a prompt for `generate`: if a manual exists, follow it exactly then verify with check_prompt; if not, write a normal prompt. This is the LUVI Prompt Engine.

Check the prompt

read-only
check_prompt

Checks a drafted prompt against the model's manual and returns a corrected version before anything is generated.

Inputs: modelId, prompt

What the assistant reads (in English)

Recheck a drafted prompt against LUVI’s manual for the model. Returns rule violations (each with its manual citation) plus a deterministically-corrected prompt. Call this AFTER writing the prompt and BEFORE `generate`: apply the correctedPrompt, resolve any warnings, then generate.

Workflows

Create a workflow

create_workflow

Starts an empty workflow: a chain of models, prompts and references you can review on the canvas before it runs.

Inputs: name, projectId

What the assistant reads (in English)

Create an empty LUVI workflow (a node graph) and return its id plus a link the user can open. A workflow is a PLAN: you wire models, prompts and references together, the user reviews it on the canvas, and the server executes it deterministically. Follow this with get_workflow_ports (to learn each model’s exact port names) and wire_workflow (to write the nodes and edges). If projectId is omitted, the per-connection auto-project is used, the same one generate falls back to.

See how models connect

read-only
get_workflow_ports

Tells the assistant which inputs each model in a workflow takes, so it wires them correctly.

Inputs: modelIds

What the assistant reads (in English)

Return the exact PORT contract for one or more models: the id of every input port, what media it accepts, how many items it takes, whether it is required, and whether the model takes a prompt. Call this BEFORE wire_workflow. A generator’s media in-port id IS the provider parameter key, so `targetHandle` on an edge must be one of the ids listed here — there is nothing to guess and nothing to alias. (get_model_schema is the companion for parameter VALUES; this is for wiring.)

Build the workflow

wire_workflow

Adds nodes and connections to a workflow. Everything is checked before it is saved, so a wrong connection comes back as an error instead of a failed paid run.

Inputs: flowId, nodes, edges, replace

What the assistant reads (in English)

Write the nodes and edges of a LUVI workflow. The graph is VALIDATED before it is saved: unknown ports, wrong media kinds (an audio slot fed a video), over-filled slots, unfilled required slots, missing prompts, unknown parameters, out-of-range values and cycles are all returned as errors and NOTHING is written. Fix them and call again. Node variants: "input/text-prompt" (a prompt source), "media/buffer" (a reference SOURCE when you set `ref`, or a result SINK when something is wired into it), "operator/prompt-merge" (joins two prompts), "generator/model" (calls a LUVI model — set `modelId`). Every generator needs a media/buffer sink wired to its `out` port so its result is kept. Call get_workflow_ports first: a generator’s media in-port ids are the model’s real parameter keys. By default this REPLACES the graph; pass replace:false to merge into what is already there. Changing a saved node’s modelId is a hard break — the response carries a rebindProposal telling you exactly which wires to move.

Quote a workflow

read-only
estimate_workflow

Shows what a whole workflow will cost in credits, node by node, next to your balance.

Inputs: flowId

What the assistant reads (in English)

Preview what a whole workflow will cost in LUVI credits, per node and in total, and compare it with the account balance. Uses the same billing path as the real charge, so the number here is the number that will be spent. Some nodes are marked approximate — character-priced audio cannot be quoted before the text is final, and a model priced per second of INPUT media cannot be quoted before the upstream node has produced that media.

Run a workflow

run_workflow

Starts the workflow and spends credits, but only if you allowed the assistant to run it on the canvas with a credit ceiling and an expiry. Otherwise it hands you a link to press Run yourself.

Inputs: flowId

What the assistant reads (in English)

Start a run of a LUVI workflow. This SPENDS the account’s credits, so it only works when the owner has armed the workflow for Claude on the canvas (a credit ceiling plus an expiry). If it is not armed, or the ceiling is used up, this returns the link for the owner to press Run themselves — that is a normal outcome, not an error, and you should hand them the link rather than retrying. Poll get_workflow_run for progress and results.

Read a workflow

read-only
get_workflow

Shows a workflow's nodes and connections, and anything that would stop it from running.

Inputs: flowId

What the assistant reads (in English)

Read a LUVI workflow: its nodes, its wires, and the current validation issues. Use it to inspect a graph before editing it with wire_workflow, or to see why one will not run.

Follow a run

read-only
get_workflow_run

Shows the progress and results of every step in a workflow run, and the credits charged so far.

Inputs: runId

What the assistant reads (in English)

Check a workflow run: per-node status, what each node produced, credits actually charged so far, and any error. Poll this every few seconds while the status is "queued" or "running". Image results are embedded inline once the run finishes; do not present a result before its node reads "completed".

List your workflows

read-only
list_workflows

Shows your workflows, most recently edited first, with a link to each.

Inputs: projectId

What the assistant reads (in English)

List the caller’s LUVI workflows, most recently updated first, with a link to each. Pass projectId to filter to one project. Use get_workflow to read a graph’s contents.

Library and projects

Browse your library

read-only
list_library

Lists everything you have generated and uploaded, newest first, filtered by project, folder or media type, so the assistant can find earlier work and build on it.

Inputs: projectId, folderId, mediaType, search, favoritesOnly, includePreviews, limit, cursor

What the assistant reads (in English)

Browse the caller’s LUVI library — everything they have generated plus everything they have uploaded, newest first, across their own and shared projects. Use this to answer “what do I have”, to find an earlier piece of work, or to pick an existing asset to build on. Every item carries a `referenceUri` (luvi://asset/…): pass that string inside `generate`’s `parameters` at the model’s reference key to edit or riff on that asset, and a `creditsCharged` — what its generation cost, from the same ledger the account page bills from. Paginate with `cursor`.

Open one item

read-only
get_asset

Shows a single item from your library with a share link, what it cost and a reference the assistant can use in the next generation.

Inputs: assetId

What the assistant reads (in English)

Fetch one library asset by its `assetId` (from list_library). Embeds the image inline so it can be shown to the user, and returns its `referenceUri` for reuse in `generate`, a no-login share link for generated results, and `creditsCharged` — what the generation behind it cost.

Search your library

read-only
search

Finds your generations and uploads by words in their prompt or file name. ChatGPT uses it to look through your work.

Inputs: query

What the assistant reads (in English)

Search the caller’s LUVI library — everything they generated or uploaded — by a free-text query matched against generation prompts and uploaded filenames. Returns a list of results, each with an `id`, `title` and `url`; pass an `id` to `fetch` to read the full record. (This is the ChatGPT / Deep Research compatibility entrypoint; list_library exposes richer filters.)

Open a search result

read-only
fetch

Returns the full details of one search result: prompt, model, media type, size and cost.

Inputs: id

What the assistant reads (in English)

Fetch the full record for one library asset by the `id` returned from `search`. Returns `id`, `title`, `text` (a description of the prompt, model, media type, dimensions and the credits its generation cost), `url` and `metadata`. (ChatGPT / Deep Research compatibility entrypoint; get_asset returns the same asset with an inline image and share link.)

List your projects

read-only
list_projects

Shows your projects and the ones shared with you. When you name none, results go to a project created for the connection.

What the assistant reads (in English)

List the LUVI projects the caller can open — their own plus any shared with them (`shared: true`). Pass a project id to `generate`/`list_folders`/`list_library` to work inside it. If you omit projectId on `generate`, results go to an auto-created project named after your connection (e.g. "ChatGPT Studio").

Create a project

create_project

Creates a new project in your account so the next results land in it.

Inputs: name, description

What the assistant reads (in English)

Create a new LUVI project with a given name in the caller’s account. Returns its id — pass that as `projectId` to `generate` so results land in this project. (Omitting projectId on generate instead uses a per-connection auto-project.)

List folders

read-only
list_folders

Shows the folders inside a project.

Inputs: projectId

What the assistant reads (in English)

List folders inside a LUVI project you have access to.

Create a folder

create_folder

Creates a folder in a project, inside another folder if you like, so new results can be filed straight into it.

Inputs: projectId, name, parentFolderId, description

What the assistant reads (in English)

Create a new folder inside a LUVI project you have access to. Returns its id — pass that as `folderId` to `generate` so results land in this folder. Optionally nest it under an existing parent folder (from list_folders) in the same project.

Rename a folder

rename_folder

Changes a folder's name; everything inside it and every existing reference stays the same.

Inputs: folderId, name

What the assistant reads (in English)

Rename a folder in a LUVI project you have access to. Pass the folderId from list_folders. Only the name changes — the folder keeps its id, its place in the tree, and everything inside it, so any assetId or reference you already have stays valid.

Move items into a folder

move_to_folder

Sorts results and uploads that are already in your library into a folder of the same project, or back to the project root.

Inputs: assetIds, folderId

What the assistant reads (in English)

Move generations and/or uploads that ALREADY exist in the library into a folder (or back to the project root). Use this to organize existing results — e.g. after generating a batch, sort them into folders you created. `generate`’s folderId only routes NEW results; this moves ones already made. Pass assetIds from list_library ("gen:<uuid>:<idx>" or "upload:<uuid>") and the target folderId from list_folders (or null / omit to move to the project root). The folder must be one you have access to and must be in the same project as the assets — if any asset belongs to another project, nothing is moved; assets you do not own are skipped.

Move a folder to the trash

delete_folder

Puts a folder and the folders inside it in the trash for 24 hours. The files are not deleted; they stay in your library at the project root.

Inputs: folderId

What the assistant reads (in English)

Move a folder (and any folders nested inside it) to the trash. The files inside are NOT deleted — they stay in the library and appear at the project root while the folder is in the trash. Recoverable with restore_folder for 24 hours, after which the folder itself is removed for good and its contents simply stay at the root. Pass the folderId from list_folders. To empty a folder without removing it, use move_to_folder instead.

Restore a folder

restore_folder

Brings a trashed folder back within 24 hours, with its files where they were.

Inputs: folderId

What the assistant reads (in English)

Undo a delete_folder within its 24-hour window: the folder comes back with its contents exactly where they were, along with any folders that were nested inside it. If the folder was inside another trashed folder, that parent is restored too — otherwise the folder would have nowhere to sit. Pass the folderId that delete_folder returned. After 24 hours the folder is gone and this will report it as not found; the files it held are not lost, they are at the project root.

Upload

Upload a file directly

create_upload_ticket

When Claude can run code, it uploads a file you attached to the chat straight into your project, with no browser step: images up to 50 MB, other files up to 1 GB.

Inputs: projectId, folderId

What the assistant reads (in English)

PREFERRED way to get a LOCAL/attached image, video, or audio file INTO a LUVI project — no browser, no manual drag. Returns a short-lived signed ticket + a ready-to-run script that uploads the file straight to storage (works for large videos/audio, not just small images). Use it like this: (1) call this tool with the target projectId (and optional folderId); (2) in CODE EXECUTION, find the user’s attached file on the sandbox filesystem (it is typically under /mnt/user-data/uploads/ — list that directory); (3) set FILE_PATH in the returned script to its real path and run the script (Python); (4) it prints a JSON response whose referenceUri you pass to generate. Limits: images up to 50MB, other files up to 1024MB. iPhone .mov videos are accepted (converted to MP4 after upload). Images are always stored as JPEG or PNG — HEIC, WebP, AVIF, GIF, TIFF, BMP and SVG are accepted and converted on upload (PNG when the image has transparency, JPEG otherwise), so never convert them yourself first (call get_upload_limits for the exact contract). Requirements: the user must have code execution enabled with network egress. If their sandbox Domain allowlist is "All domains" (the usual setting once egress is on), it works with no extra setup. If they use a Custom allowlist, the file bytes PUT goes straight to storage, so that allowlist must include the S3 storage host (luvi-content-creator-storage.s3.us-east-1.amazonaws.com, or *.amazonaws.com) in addition to www.luvicreator.com. If code execution is unavailable, use get_upload_link instead (a browser link the user drops the file into). If projectId is omitted, the per-connection auto-project is used; folderId (from list_folders) targets a folder.

Get an upload link

read-only
get_upload_link

Gives you a link that opens LUVI's upload window in your browser, already set to the right project and folder, for a file on your computer or attached to the chat.

Inputs: projectId, folderId

What the assistant reads (in English)

Return a ready-to-use LUVI link that opens the upload dialog in the user’s browser, pre-pointed at a project (and optionally a folder inside it). Use this whenever the user has a LOCAL image, video, or file — e.g. one they attached to this chat — that you cannot upload yourself: MCP cannot receive an attached file’s bytes, so the user must drop it in through this link. Hand them the link; once they confirm the upload finished, find the new asset with list_library and pass its referenceUri to generate. If projectId is omitted, the per-connection auto-project is used (the same one generate falls back to); pass folderId (from list_folders) to land the file inside a specific folder.

Check upload limits

read-only
get_upload_limits

Tells the assistant the maximum file sizes and which formats are accepted or converted, before it tries an upload.

What the assistant reads (in English)

Return the exact limits for uploading a LOCAL/attached file via create_upload_ticket (or get_upload_link): the max size for images vs. other files, the accepted formats per media type, how images are stored (always JPEG or PNG — other image formats are converted on upload), and what is rejected (ICO/PSD/JPEG XL images; .mov video is accepted and converted to MP4 after upload). Call this before uploading a large or unusual file so you can tell the user up front whether it will go through.

Account

See which account is connected

read-only
get_account

Shows the LUVI account the assistant is signed in as, so you can confirm it before anything is generated.

What the assistant reads (in English)

Show which LUVI account this connection is authenticated as — email, display name — and the connection’s name. Call this to answer "which LUVI account am I connected to?" / to confirm identity before generating.

Check your balance

read-only
get_credit_balance

Shows your credit balance and how much this connection can still spend under its cap.

What the assistant reads (in English)

Return the caller’s LUVI credit balance, plus this connection’s spend cap and remaining budget.

See what you spent

read-only
list_transactions

Lists your credit history as it appears under Account → Billing: every charge, purchase and refund, with the prompt and model behind each generation.

Inputs: sinceDays, type, limit, offset

What the assistant reads (in English)

The caller’s LUVI credit ledger, newest first — every generation charge, purchase, refund, bonus and adjustment, exactly what they see in Account → Billing → Transactions. Use this for any “what have I spent”, “what did today/this month cost”, “what did I make and for how much” question. Each generation charge carries the generation id, its prompt and the model name, so it doubles as a costed history of what the account produced. Amounts are CREDITS, signed the way the ledger stores them (negative = spent); the response also totals the window. Never estimate spend from estimate_cost when this tool can report the real charge.

Which models can it use?

Every model in the public catalogue, with the same prices and parameters. Browse the model catalogue

Questions

What can Claude or ChatGPT do with LUVI?

Pick a model, read its exact settings, quote the cost in credits, generate video, image, audio and 3D, build and run multi-step workflows, bring your own files in, and read back your library and spending. That is 34 tools, all acting on your own LUVI account.

Does connecting LUVI spend credits?

No. Credits are spent only when a generation or a workflow run starts, and the assistant can quote the price first with estimate_cost. Every charge appears under Account → Billing, like any other.

Which assistants work with it?

claude.ai on the web and desktop, Claude Code, and ChatGPT with developer mode. Claude Code signs in with an access token you create under Account → Integrations; any other MCP client that sends that token works the same way.

Can the assistant use a file from my computer?

Yes. It can give you an upload link that opens LUVI's upload window in your browser, or, when Claude can run code, upload a file you attached to the chat directly. Images can be up to 50 MB and other files up to 1 GB.

How do I limit what the assistant can spend?

Under Account → Integrations you can set a credit cap for each connection; once it is reached, that connection stops generating. Revoke removes the connection at once, and nothing it already made is deleted.

Can the assistant change my password or payment details?

No. It signs in through LUVI's own page and works only through these 34 tools, and none of them can change your password, payment methods or team.