AI interior, exterior and landscape design, photoreal rendering, image editing, video and 3D.
You: Redesign ~/Desktop/living-room.jpg in Japandi style, give me 2 options.
Claude: ⟶ luw_interior_design ✓ 2 designs in 21s [shows both images]
You: Love the first one. Make the sofa green velvet, then turn it into a fly-through video.
Claude: ⟶ luw_edit_image ⟶ luw_generate_video ✓
1. Get an API key at app.luw.ai/dashboard/api. New accounts get free credits.
2. Add Luw.ai to your client. Pick one:
claude mcp add luw --scope user --env LUW_API_KEY=YOUR_LUW_API_KEY -- npx -y @luw-ai/mcp
No-install alternative (hosted server):
claude mcp add --transport http luw https://mcp.luw.ai/mcp --header "Authorization: Bearer YOUR_LUW_API_KEY"
One click: download luw.mcpb, double-click it, paste your API key. Nothing else to install.
Or add this to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"luw": {
"command": "npx",
"args": ["-y", "@luw-ai/mcp"],
"env": { "LUW_API_KEY": "YOUR_LUW_API_KEY" }
}
}
}
Click Add to Cursor above and replace YOUR_LUW_API_KEY, or add to ~/.cursor/mcp.json:
{
"mcpServers": {
"luw": {
"command": "npx",
"args": ["-y", "@luw-ai/mcp"],
"env": { "LUW_API_KEY": "YOUR_LUW_API_KEY" }
}
}
}
Click Install in VS Code above. VS Code asks for your key and keeps it in its secret storage. Or add to .vscode/mcp.json:
{
"inputs": [{ "type": "promptString", "id": "luw_api_key", "description": "Luw.ai API key", "password": true }],
"servers": {
"luw": {
"command": "npx",
"args": ["-y", "@luw-ai/mcp"],
"env": { "LUW_API_KEY": "${input:luw_api_key}" }
}
}
}
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"luw": {
"command": "npx",
"args": ["-y", "@luw-ai/mcp"],
"env": { "LUW_API_KEY": "YOUR_LUW_API_KEY" }
}
}
}
codex mcp add luw --env LUW_API_KEY=YOUR_LUW_API_KEY -- npx -y @luw-ai/mcp
Or in ~/.codex/config.toml:
[mcp_servers.luw]
command = "npx"
args = ["-y", "@luw-ai/mcp"]
env = { LUW_API_KEY = "YOUR_LUW_API_KEY" }
Add to ~/.gemini/settings.json:
{
"mcpServers": {
"luw": {
"command": "npx",
"args": ["-y", "@luw-ai/mcp"],
"env": { "LUW_API_KEY": "YOUR_LUW_API_KEY" }
}
}
}
| URL | https://mcp.luw.ai/mcp |
| Transport | Streamable HTTP |
| Auth header | Authorization: Bearer YOUR_LUW_API_KEY |
{
"mcpServers": {
"luw": {
"url": "https://mcp.luw.ai/mcp",
"headers": { "Authorization": "Bearer YOUR_LUW_API_KEY" }
}
}
}
If your client only accepts a URL and can't send headers (for example ChatGPT connectors), use https://mcp.luw.ai/mcp?api_key=YOUR_LUW_API_KEY. Anyone who has that URL can spend your credits, so keep it private.
The hosted server is stateless and stores nothing. Your key goes straight to the Luw.ai API on each request. It can't read files from your computer, so pass image URLs, or use the local npx setup to work with local files.
Windows: if npx isn't found, use "command": "cmd", "args": ["/c", "npx", "-y", "@luw-ai/mcp"]. Requires Node.js 18 or later. The Claude Desktop extension bundles everything it needs.
~/Downloads/bedroom.jpg) as Mid-Century Modern, 3 variations."plan-sketch.png as a photoreal modern villa at golden hour."Built-in prompts show up as slash commands or prompt templates in your client: redesign_room, stage_empty_room, sketch_to_render, product_shot.
| Tool | What it does | Credits |
|---|---|---|
luw_interior_design | Redesign a room in any style; empty_room for virtual staging | 1 |
luw_exterior_design | Redesign a facade or building exterior | 1 |
luw_sketch_to_render | Sketch or drawing to photoreal render | 1 |
luw_render | 3D, CAD or clay view to photoreal render | 1 |
luw_edit_image | Edit any image with a sentence (Magic Prompt); 2K/4K | 1 |
luw_magic_wand | Masked edit: replace, remove, or apply a material | 1 |
luw_landscape_design | Gardens and outdoor areas, matched to climate and sun | 1 |
luw_image_tools | upscale 2/4/8×, expand, remove_furniture, vectorize to SVG | 1 |
luw_background | Remove a background, or replace it with a generated scene | 1 |
luw_segment | Object masks (all objects, or by prompt) as image URLs | 1 |
luw_generate_image | Text to image (Fluw), or format: "svg" for vectors | 2 |
luw_generate_pattern | Seamless, tileable textures and patterns | 1 |
luw_generate_video | Image to cinematic video with 12 camera motions | 10 (20 with Symphony) |
luw_image_to_3d | Photos to a textured 3D model (GLB) | 3 (8 with Symphony) |
luw_archigpt | Chat with ArchiGPT, an AI architect (accepts images) | 1 per ~3k words |
luw_get_result | Collect a long-running job (free) | 0 |
luw_list_options | Valid styles, room and building types, camera motions, materials (free) | 0 |
luw_upload_file | Upload a file to Luw.ai storage and get a URL (free) | 0 |
luw_run_model | Call any Luw.ai model with raw API parameters | varies |
luw_personas | Personas: reusable style identity, training images and slots | 0 |
luw_projects | Projects (boards), folders and media | 0 |
luw_team | Enterprise: credits, usage, members, invitations (opt-in) | 0 |
Every generation uses your Luw.ai credits. Variations are billed one generation each.
https:// URL, a local path (~/Desktop/room.jpg), or a data: URI. Local files are uploaded to Luw.ai storage as temporary files (deleted after 12 hours) and cached for the session, so repeated edits don't upload the same file again.LUW_OUTPUT_DIR to also save every result to disk.processing_url and the assistant collects it with luw_get_result, without generating (or paying) twice.Idempotency-Key, so if a network error forces a retry, Luw.ai returns the original job instead of charging again.luw_segment returns masks as URLs, so "change the floor" becomes segment ⟶ magic wand with no manual masking.npx downloads a single ~260 KB package and starts right away.| Variable | Default | |
|---|---|---|
LUW_API_KEY | (required) | Your API key (get one). LUW_API_TOKEN also works. |
LUW_OUTPUT_DIR | (off) | Also download results (images, videos, GLB, SVG) into this folder |
LUW_TOOLSETS | all except team | Comma-separated list from generate, archigpt, personas, projects, team, or all |
LUW_WAIT_TIMEOUT_SECONDS | 50 | How long a call waits before returning a processing_url. Raise it for clients with long tool timeouts, such as Claude Code. |
LUW_INLINE_IMAGES | true | Embed result images in tool output |
LUW_API_BASE_URL | https://api.luw.ai/v2 | API endpoint override |
The same package serves the hosted Streamable HTTP endpoint:
npx -y @luw-ai/mcp --http --port 8080 --host 0.0.0.0 # MCP at /mcp, health at /health
docker build -t luw-mcp . && docker run -p 8080:8080 luw-mcp
It's stateless and holds no secrets. Each request brings its own key in Authorization: Bearer …, X-Luw-Api-Key, or ?api_key=. It deploys to Vercel as-is (vercel.json is included), and a Procfile is included for Heroku. See docs/maintainers.md for deployment and release steps.
npm ci
npm test # unit and protocol tests (no network)
npm run build # bundles dist/cli.js
npm run inspector # try every tool in the MCP Inspector
LUW_API_KEY=... npm run smoke # live checks against the real API (free)
LUW_API_KEY=... npm run smoke -- --paid # plus one real generation (1 credit)
npm run mcpb # build/luw.mcpb, the Claude Desktop extension
MIT © Luvi Technologies, Inc.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @luw-ai/mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"ai-luw-mcp": {
"command": "npx",
"args": [
"-y",
"@luw-ai/mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceLuw.ai works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.