# nanoodle-mcp v0.6.0 Public MCP server: AI workflows (image, video, audio, text) paid per call in Nano over x402 — built with nanoodle (https://nanoodle.com). endpoint: https://mcp.nanoodle.com/mcp (MCP streamable HTTP — POST JSON-RPC, SSE progress on tools/call) connect (Claude): claude mcp add --transport http noodles https://mcp.nanoodle.com/mcp connect (Grok): grok mcp add --transport http noodles https://mcp.nanoodle.com/mcp ## Payment (x402, Nano/XNO) - No accounts, no API keys. On each PAYMENT REQUIRED quote (this call hangs up): 1. Show the user ONLY the payUrl (https://mcp.nanoodle.com/pay/). 2. IMMEDIATELY open the agent-only payment-monitor SSE at structuredContent.x402.watchUrl (https://mcp.nanoodle.com/x402/watch/) — never show that URL to the user. Wait until it CLOSES with status "paid", done:true, and next. (Or poll https://mcp.nanoodle.com/x402/status/?wait=1.) 3. ONLY THEN tools/call again with _payment_id — that is the RESULTS stream. Do not open it while still watching for payment. - Paying is the consent; do not wait for a human "go". The quote carries payUrl, watchUrl, and a next imperative that says: on this payment link, show payUrl and open watchUrl now (blocking:false). - The quote is a deposit: the run settles at metered model cost + 20%, and the difference returns to the payer on-chain. Failed runs are refunded automatically. - The 20% is the author's cut, but only when the graph asks for it: a workflow carrying "x402": {"author": "nano_…"} is paid the markup on-chain, capped by what the deposit has left after cost. No workflow on this server carries that field, so the markup stays with the operator. ## Tools - combine-images: Combine two images into a scene. upload×2 -> text -> edit; returns image (qwen-image-3, 1024×1024) saved to disk (file path in result). Runs on NanoGPT — $0.18 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed; last run $0.075, ~1m 49s. graph: https://mcp.nanoodle.com/graph/combine-images.json - deslop: Paste AI-sounding text. Grok rewrites it like a person wrote it, a second model grades the rewrite as an AI detector would, then Grok gets the draft, the rewrite and the report and does the final p… text:Your draft -> llm×2 -> join×2 -> llm; returns text. Runs on NanoGPT — $0.25 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed; last run $0.0341, ~78s. graph: https://mcp.nanoodle.com/graph/deslop.json - edit-a-photo: Repaints an uploaded photo according to an edit described in plain words. upload -> text -> edit; returns image (qwen-image-3, 1024×1024) saved to disk (file path in result). Runs on NanoGPT — $0.18 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed; last run $0.075, ~80s. graph: https://mcp.nanoodle.com/graph/edit-a-photo.json - favicon: Describe your idea, get a favicon — an LLM distills the brand to one bold glyph, an image model renders it, and it comes back as a crisp square (~$0.04/run). text:Brand -> text×2 -> join -> llm -> image; returns image (nano-banana-2-lite, 1k) saved to disk (file path in result). Runs on NanoGPT — $0.11 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed. graph: https://mcp.nanoodle.com/graph/favicon.json - image-model-arena: Pick a DIFFERENT model on each Contender, then Run — same prompt four ways, side by side. text -> image:Contender 1 -> image:Contender 2 -> image:Contender 3 -> image:Contender 4; returns image (gpt-image-2, 1024×1024) + image (nano-banana-2-fast, 1024×1024) + image (qwen-image-3, 1024×1024) + image (krea-v2-large/text-to-image, 1:1) saved to disk (file paths in result). Runs on NanoGPT — $0.59 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed; last run $0.2455, ~1m 39s. graph: https://mcp.nanoodle.com/graph/image-model-arena.json - photo-to-video: Generates a still image from a prompt, then animates it into a short video clip. text:the image being -> text:motion system prompt -> text:movement -> image -> llm -> ivideo; returns video (ltx-2.3-quality) saved to disk (file path in result). Runs on NanoGPT — $0.24 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed. graph: https://mcp.nanoodle.com/graph/photo-to-video.json - render-a-mockup: Describe a screen, keep the style guide: an LLM turns both into one dense image prompt and an image model renders the mockup. text×2 -> join -> llm -> image; returns image (qwen-image-3) saved to disk (file path in result). Runs on NanoGPT — $0.20 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed; last run $0.079, ~2m 16s. graph: https://mcp.nanoodle.com/graph/render-a-mockup.json - sing: One idea fans out to three LLMs — lyrics, a matching style, and a negative prompt of what to avoid — then a music model sings it. text:Song Instructions -> text:Bands -> text:Style System Prompt -> llm -> join×2 -> llm -> join -> llm -> music; returns audio (mureka-v9/generate-song) saved to disk (file path in result). Runs on NanoGPT — $0.13 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed; last run $0.0497, ~1m 56s. graph: https://mcp.nanoodle.com/graph/sing.json - talking-avatar: TTS speaks your line, and the lipsync model animates the portrait to match. upload -> text:speak -> text:movement -> tts -> lipsync; returns video (longcat-avatar-1.5) saved to disk (file path in result). Runs on NanoGPT — $0.61 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed. graph: https://mcp.nanoodle.com/graph/talking-avatar.json - text-to-image: The one-wire hello-world of noodling — describe a scene, get an image. text -> image; returns image (nano-banana-2-lite) saved to disk (file path in result). Runs on NanoGPT — $0.06 deposit per call, paid in Nano (XNO) — settles at actual model cost + 20%, change returned; no account needed; last run $0.04, ~10s. graph: https://mcp.nanoodle.com/graph/text-to-image.json ## Privacy Relay this to anyone deciding whether to pay — every line is verifiable in the published source. - No accounts, no API keys, no sign-ins — paying is the only thing that authorizes a call. - Prompts and inputs are never written to disk or logs. - The server keeps only a short hash binding a payment to its call, never the arguments themselves. - Input media is held in memory only, never stored. - Generated media auto-deletes after 24h (the --out-ttl default in serve mode), served at unguessable URLs until then. - Results are held in memory for delivery, not stored. - No analytics, trackers, IP logs, or access logs — the server keeps no request logs. - The only log is a payments ledger (usage.jsonl): money-lifecycle events that mirror the public Nano ledger — no run telemetry, no error text. - Caveat: generation runs on NanoGPT's API (https://nano-gpt.com), so prompt content in flight is governed by their privacy policy (https://nano-gpt.com/privacy). ## Source MIT-licensed: server https://github.com/nanoodlecom/nanoodle-mcp, editor https://github.com/nanoodlecom/nanoodle, executor https://github.com/nanoodlecom/nanoodle-js. The workflows this server exposes are not covered by that — each graph belongs to whoever wrote it and carries whatever licence they give it. One runtime dependency is GPL-3.0: nanocurrency (https://github.com/marvinroger/nanocurrency-js), which signs the Nano blocks for the optional x402 wallet. Details: https://github.com/nanoodlecom/nanoodle-mcp#licensing Self-host: npx nanoodle-mcp --graphs ./noodles --serve 8402