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 ✓
Quick start
Add https://mcp.luw.ai/mcp to your client and sign in to Luw.ai. Nothing to install, no key to copy: signing in creates one for you. New accounts get free credits. To disconnect, delete that key on the API page.
Settings → Connectors → Add custom connector, paste https://mcp.luw.ai/mcp, then Connect and sign in to Luw.ai.
claude mcp add --transport http luw https://mcp.luw.ai/mcp --scope user
Then type /mcp, pick luw and sign in.
Settings → Apps & Connectors → Advanced settings, turn on Developer mode, then Create: URL https://mcp.luw.ai/mcp, authentication OAuth, and sign in.
Click Add to Cursor above, or add to ~/.cursor/mcp.json:
{
"mcpServers": {
"luw": { "url": "https://mcp.luw.ai/mcp" }
}
}
Cursor shows Needs login next to luw; click it to sign in.
Click Install in VS Code above, or add to .vscode/mcp.json:
{
"servers": {
"luw": { "type": "http", "url": "https://mcp.luw.ai/mcp" }
}
}
VS Code asks you to sign in the first time a tool runs.
For a client that can't sign in, create a key at app.luw.ai/dashboard/api and send it as a header:
{
"mcpServers": {
"luw": {
"url": "https://mcp.luw.ai/mcp",
"headers": { "Authorization": "Bearer YOUR_LUW_API_KEY" }
}
}
}
If it can neither sign in nor send headers, 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 give it image URLs, or use the local setup below.
Local: work with files on your computer
The local server runs on your machine with npx, so it can read paths like ~/Desktop/room.jpg. It needs Node.js 18+ and an API key from app.luw.ai/dashboard/api.
claude mcp add luw --scope user --env LUW_API_KEY=YOUR_LUW_API_KEY -- npx -y @luw-ai/mcp
Or install it as a plugin. Claude Code asks for your key and keeps it in secure storage:
claude plugin marketplace add Luvi-io/luw-mcp
claude plugin install luw@luw-ai
One click: download luw.mcpb, double-click it, paste your API key. No Node.js needed.
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" }
}
}
}
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"luw": {
"command": "npx",
"args": ["-y", "@luw-ai/mcp"],
"env": { "LUW_API_KEY": "YOUR_LUW_API_KEY" }
}
}
}
Add to .vscode/mcp.json. VS Code asks for your key and keeps it in its secret storage:
{
"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 ~/.config/devin/mcp_config.json (Windows: %APPDATA%\devin\mcp_config.json). Older Windsurf versions use ~/.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" }
gemini extensions install https://github.com/Luvi-io/luw-mcp
Gemini CLI asks for your key and keeps it in the system keychain. Or add to ~/.gemini/settings.json:
{
"mcpServers": {
"luw": {
"command": "npx",
"args": ["-y", "@luw-ai/mcp"],
"env": { "LUW_API_KEY": "YOUR_LUW_API_KEY" }
}
}
}
Click Add to Kiro above, confirm, then replace YOUR_LUW_API_KEY in Kiro's MCP config.
Windows: if npx isn't found, use "command": "cmd", "args": ["/c", "npx", "-y", "@luw-ai/mcp"].
What you can ask
- "Redesign this bedroom (
~/Downloads/bedroom.jpg) as Mid-Century Modern, 3 variations." - "This listing photo is an empty room. Stage it as a cozy Scandinavian living room."
- "Render my sketch
plan-sketch.pngas a photoreal modern villa at golden hour." - "Change the floor in this kitchen to herringbone oak." (segments the floor, then swaps the material)
- "Remove all the furniture from this room."
- "Put this chair photo on a terrazzo floor in a sunlit gallery for an ad."
- "Turn this render into a drone fly-through video."
- "Make a 3D model of this armchair from these 3 photos."
- "Seamless blue zellige tile texture, 1024px."
- "Ask ArchiGPT how to improve the feng shui of this floor plan."
Built-in prompts show up as slash commands or prompt templates in your client: redesign_room, stage_empty_room, sketch_to_render, product_shot.
Tools
Every generation uses your Luw.ai credits. Variations are billed one generation each.
Luw Studio: edit your 3D projects
Luw Studio designs buildings in 3D. With the studio tools, your assistant edits your Studio projects directly: rooms, walls, doors and windows, stairs, roofs, furniture and finishes. Each edit is saved to the project as it is made, and a Studio tab that has the project open shows it within seconds.
- Hosted: add
https://mcp.luw.ai/studioinstead of/mcp(same sign-in). It has every hosted tool plus the studio tools. - Local: add
studiotoLUW_TOOLSETS, e.g.LUW_TOOLSETS=generate,archigpt,personas,projects,studio.
"In my Luw Studio project Beach House, add a 3×4 m bedroom east of the living room with a window, and furnish it."
The scene tools are Pascal's open-source MCP tools (MIT), running on the same core as Luw Studio, with its catalog (Luw's own pieces included) and its defaults. They don't use credits. A project last saved by the previous Luw Studio is readable; open it once in Studio to edit it here. luw://studio/guide is the building guide the assistant reads first.
Resources
Read-only context you can attach to a conversation. In Claude Code, type @luw: to pick one; other clients that support resources offer them as attachments.
How it works
- Local files just work. Any image argument accepts an
https://URL, a local path (~/Desktop/room.jpg), or adata: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. - You see the results. Finished images are embedded in the tool result, so Claude and other clients show them inline. Set
LUW_OUTPUT_DIRto also save every result to disk. - Long jobs don't time out. A call waits up to 50 seconds and streams progress to clients that show it. If a job like a video takes longer, the tool returns a
processing_urland the assistant collects it withluw_get_result, without generating (or paying) twice. - Never billed twice. Every generation request carries an
Idempotency-Key, so if a network error forces a retry, Luw.ai returns the original job instead of charging again. - Masks are handled for you.
luw_segmentreturns masks as URLs, so "change the floor" becomes segment ⟶ magic wand with no manual masking. - Fast startup. The package is one bundled file with zero dependencies, so
npxdownloads a single ~0.9 MB package and starts right away.
Configuration
Self-hosting the remote server
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. Each request brings its own key in Authorization: Bearer …, X-Luw-Api-Key, or ?api_key=. Set LUW_MCP_OAUTH_SECRET to also let clients sign in to Luw.ai instead (OAuth); the sign-in hands the client an ordinary 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.
Development
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
node scripts/vendor-pascal.mjs ../luwstudio2 # rebuild vendor/: Pascal core + MCP as Luw Studio runs them
Support
- API reference: luw-ai.gitbook.io/api
- Issues: GitHub Issues
- Email: [email protected]
MIT © Luvi Technologies, Inc.