Verified conversions across 205 color spaces: CSS strings, gamut checks, .cube LUTs
Luala is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Photo shoots of you from your saved selfies: pick a pack, shoot, edit.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http luala-mcp https://luala.app/mcp
# 2 — ask your agent for something these tools do
# list_packs, get_pack, start_shoot and 16 more
Luala costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http luala-mcp https://luala.app/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
19 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Lists Luala's photo packs (a themed shoot of several photos of the user, made from their selfies) and mixes (one photo from each of several packs), with what all of a pack's photos cost and the price of one: a shoot can be any of a pack's shots, down to a single photo. Optionally only the packs for one use case.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| use_case | string | no | Only the packs for this use case. |
A pack's or mix's options (outfit, place, light, shots, shape and the attribute pickers), with ids, labels and defaults, and its price per photo. Each shot is one photo, and the user may pick any of them, from one to all (the default). start_shoot takes these ids.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| slug | string | yes | The pack's or mix's slug. |
Starts a shoot of a pack from the user's saved selfies, paid from their credits: one photo per picked shot, at the price get_pack gives. Unless the user has said, offer them the whole pack or only the shots they want, even one. Tell the user the price first and pass it as max_credits; the shoot is refused if it costs more. A photo takes about 20 seconds: follow them with get_shoot. If a call to th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| options | object | no | Option ids from get_pack: outfit, place, light, ratio, shots (a list of shot ids) and any attribute key. Anything left out keeps its default. |
| pack | string | yes | The pack's or mix's slug. |
| max_credits | integer | yes | The most the user agreed to pay. |
A shoot's photos: each one's id, whether it is ready, still working or failed (failed photos are refunded), each one's link in the Luala app (the link to give the user), and the shoot's page there; previews of the ready ones once none is working. While photos are working it waits up to 25 seconds for them before answering; call it again until none is working, telling the user how many are ready ea
| Parameter | Type | Required | Notes |
|---|---|---|---|
| shoot_id | integer | yes | — |
Makes an edited copy of one of the user's photos, paid from their credits. type change keeps the pose and framing and changes any of: outfit and place (ids from get_pack of the photo's pack), light, the attributes, and text, up to 300 characters of what to change. type zoom_out steps back one step. Pass the price the user agreed to as max_credits: the photo's prices from get_shoot or list_photos n
| Parameter | Type | Required | Notes |
|---|---|---|---|
| type | string | yes | — |
| text | string | no | — |
| light | string | no | — |
| photo_id | integer | yes | — |
| outfit | string | no | — |
| place | string | no | — |
| max_credits | integer | yes | — |
| beard | string | no | — |
| expression | string | no | — |
| glasses | string | no | — |
| hair_colour | string | no | — |
| hair_length | string | no | — |
| makeup | string | no | — |
Cuts a frame of the given shape out of one of the user's photos and upscales it to a full photo, paid from their credits. x, y and w are the frame's left edge, top edge and width as fractions of the photo (0 to 1); left out, the largest frame is centred. Pass the price the user agreed to as max_credits: the photo's prices from get_shoot or list_photos name it. If a call to this tool got no answer,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | number | no | — |
| y | number | no | — |
| w | number | no | — |
| ratio | string | yes | — |
| photo_id | integer | yes | — |
| max_credits | integer | yes | — |
Upscales one of the user's photos to 1K, 2K or 4K, paid from their credits. A photo is offered only the sizes larger than it and at most 4× its size; its prices from get_shoot or list_photos name them. Pass the price the user agreed to as max_credits. If a call to this tool got no answer, it may already have started: check list_photos before calling it again.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| size | string | yes | — |
| photo_id | integer | yes | — |
| max_credits | integer | yes | — |
Makes the same photo again, a new take of the same look, paid from the user's credits. Pass the price the user agreed to as max_credits: the photo's prices from get_shoot or list_photos name it. If a call to this tool got no answer, it may already have started: check list_photos before calling it again.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| photo_id | integer | yes | — |
| max_credits | integer | yes | — |
Cuts the person out of one of the user's photos, paid from their credits: on a clear (transparent) backdrop unless backdrop names a colour, #rrggbb (the app offers #ffffff, #e9e7e3, #3a3a3c, #000000, #1f2f4d, #bcd7ee, #f2e8d5, #b9c8b0). On a photo that is already a cutout it lays it on another backdrop. Pass the price the user agreed to as max_credits: the photo's prices from get_shoot or list_pho
| Parameter | Type | Required | Notes |
|---|---|---|---|
| photo_id | integer | yes | — |
| backdrop | string | no | — |
| max_credits | integer | yes | — |
Puts the person in one of the user's photos somewhere else, keeping their pose and framing, paid from their credits: scene is one of the app's scenes, or text says the place in up to 300 characters; a scene wins when both come. Pass the price the user agreed to as max_credits: the photo's prices from get_shoot or list_photos name it. If a call to this tool got no answer, it may already have starte
| Parameter | Type | Required | Notes |
|---|---|---|---|
| text | string | no | — |
| photo_id | integer | yes | — |
| scene | string | no | — |
| max_credits | integer | yes | — |
Changes the light, the camera or the look of one of the user's photos, paid from their credits: at most one pick per group (light, lens, angle, focus, look), and/or text, up to 300 characters of what to change. What is not picked stays as it is. light and look keep the pose, framing and scene; a lens, angle or focus pick re-imagines the same moment through that camera, so the framing changes. Pass
| Parameter | Type | Required | Notes |
|---|---|---|---|
| photo_id | integer | yes | — |
| max_credits | integer | yes | — |
| angle | string | no | — |
| focus | string | no | — |
| lens | string | no | — |
| light | string | no | — |
| look | string | no | — |
| text | string | no | — |
Repairs an old or damaged photo of the user's (a photographed print, most often one from list_photos with uploads), paid from their credits: repair fixes scratches, tears and stains, faces enhances them, colourise adds colour to a black and white one. size 1K is Standard, 2K High quality; the price is by size. Pass the price the user agreed to as max_credits: the photo's prices from get_shoot or l
| Parameter | Type | Required | Notes |
|---|---|---|---|
| size | string | yes | — |
| repair | boolean | no | — |
| photo_id | integer | yes | — |
| faces | boolean | no | — |
| max_credits | integer | yes | — |
| colourise | boolean | no | — |
Adds the main subject of another of the user's photos (with_photo_id: an object or a person, a cutout works well) into one of their photos, keeping its scene, framing and light, paid from their credits. with_photo_id may not be a selfie, nor photo_id itself. Pass the price the user agreed to as max_credits: the photo's prices from get_shoot or list_photos name it. If a call to this tool got no ans
| Parameter | Type | Required | Notes |
|---|---|---|---|
| photo_id | integer | yes | — |
| max_credits | integer | yes | — |
| with_photo_id | integer | yes | — |
Puts the clothes another of the user's photos shows (with_photo_id) on the person in one of their photos, paid from their credits; part top or bottom takes only that part of the outfit. with_photo_id may not be a selfie, nor photo_id itself. Pass the price the user agreed to as max_credits: the photo's prices from get_shoot or list_photos name it. If a call to this tool got no answer, it may alrea
| Parameter | Type | Required | Notes |
|---|---|---|---|
| part | string | no | — |
| photo_id | integer | yes | — |
| max_credits | integer | yes | — |
| with_photo_id | integer | yes | — |
With ids, those photos (up to 10), with a preview of each ready one once none is working: how to fetch an edit's result. While one is working it waits up to 25 seconds for it. Without, the user's latest shoots, newest first, five at a time; pass the answer's next as before for the five after. With uploads true, the photos the user added in the app (My photos) and those made from them, newest first
| Parameter | Type | Required | Notes |
|---|---|---|---|
| before | integer | no | — |
| uploads | boolean | no | — |
| ids | array | no | — |
Adds one photo to the user's My photos in Luala, free, so it can be edited: an old print to restore, clothes to try on, a photo to change. The answer is the saved photo with its photo_id and edit prices: when the user asked for an edit of it, tell them that edit's price, and once they agree make it with Luala's tool for it on this photo_id, never with another image tool. Pass the file the user att
| Parameter | Type | Required | Notes |
|---|---|---|---|
| size | integer | no | — |
| key | string | no | — |
| content_type | string | no | — |
| photo | object | no | The file the user attached. |
Adds one selfie to the user's selfie set in Luala, which shoots are made from, free: one face, clearly visible, up to 15 selfies in the set. Pass the file the user attached as photo. If you can't, but the file is in your sandbox, call with its content_type (image/jpeg, image/png or image/webp: convert a HEIC to JPEG first) and size in bytes, PUT the file to the answer's upload url with its headers
| Parameter | Type | Required | Notes |
|---|---|---|---|
| size | integer | no | — |
| key | string | no | — |
| content_type | string | no | — |
| photo | object | no | The file the user attached. |
For Luala's widget: whether the file staged at key was saved by add_photo or add_selfie (tool). Read-only.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| key | string | yes | — |
| tool | string | yes | — |
The user's credit balance, about how many photos it buys, and where to buy more.
No parameter schema on file.
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Luala or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| list_packs | no tags | |
| get_pack | no tags | |
| start_shoot | state-write | state-write: declares readOnlyHint: false |
| get_shoot | no tags | |
| edit | untrusted-inputstate-write | untrusted-input: keyword "fetch"; state-write: declares readOnlyHint: false |
| zoom_in | state-write | state-write: declares readOnlyHint: false |
| upscale | state-write | state-write: declares readOnlyHint: false |
| reroll | state-write | state-write: declares readOnlyHint: false |
| remove_background | state-write | state-write: declares readOnlyHint: false |
| replace_background | state-write | state-write: declares readOnlyHint: false |
| light_camera | state-write | state-write: declares readOnlyHint: false |
| restore | state-write | state-write: declares readOnlyHint: false |
| combine | state-write | state-write: declares readOnlyHint: false |
| try_on | state-write | state-write: declares readOnlyHint: false |
| list_photos | untrusted-input | untrusted-input: keyword "fetch" |
| add_photo | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| add_selfie | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| upload_status | no tags | |
| balance | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.19.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Luala can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.