nanostudio
Remote MCP server for Nano Studio Pro, a personal asset repository with search built in.
What it can do
- Whoami: Authenticated user, plan, and credit balance. Free.
- Get Meta: Server version + capability flags for feature detection. Free, no side effects.
- Get Credits: Wallet balance and (if the token has one) rolling-24h daily-cap status. Free.
What data it sees
Do you need an account
No: the server works without sign-in
Remote MCP server for Nano Studio Pro, a personal asset repository with search built in. Stop losing work across local folders, external drives and a dozen different apps: everything you make or upload lands in one place and is detection-scanned on arrival, videos as well as photos, so it is searchable by the objects, colors, textures and scenes inside it. 35 tools: fast detection-aware search (text, color, similar-image, browse, item bounding boxes), free scans, imports, projects and tasks, plus image generation, restyle, cutouts, upscaling, image-to-video, and sprite or sticker sheets with frame rects. Streamable HTTP with OAuth 2.1; personal access tokens as fallback. Search before you regenerate.
Server tool list (35)
Raw names from tools/list. Only developers need these.
| whoami | Authenticated user, plan, and credit balance. Free. |
| get_meta | Server version + capability flags for feature detection. Free, no side effects. |
| get_credits | Wallet balance and (if the token has one) rolling-24h daily-cap status. Free. |
| get_pricing | Live credit cost of every operation: image tiers per model (generate_*, generate_pro_*, generate_gpt_*), restyle, cutouts, scans, and the per-second video rows (video_<model>_sec_<size>[_ref][_audio]; Veo is fixed video_veo_lite_<s>s_<res>). Free. For a whole clip's price use generate_video with dry_run — it multiplies for you. |
| sheet_options | FREE. The menus a sheet is made from, so nothing is invented: kinds, keyable grounds, art styles (photographic, drawn, painted), animation sequences by subject (kind frames) or by game type (kind sprites) with frame counts per detail level, the levels, and the image models with their resolution ceilings. No arguments = the index, ids and one-liners. family + type = that type's sequences with their full frame lists. The ids go straight into generate_sheet. |
| generate_sheet | Makes ONE image holding several separate elements laid out so each can be cut out: an animation cycle, a sprite sheet, an icon set, stickers, props. COSTS CREDITS: one image at the planned tier; quote with dry_run:true first, free. The asserted count, the keyable ground, no lines or labels, a grid whose cells cut cleanly and cells big enough to use are all built here, so never write this prompt yourself and never call generate_image for a sheet. Pick by job: - An animation of one subject (a walk, a face laughing, a coin spinning): kind frames + sequences from sheet_options ({family, type, id, level}; smooth = an in-between after every drawing, the default) + subject + art_style (photograph, film-still, studio-portrait, render-3d, stop-motion for a real subject; inked-cel, anime-cel, watercolour and the rest for a drawn one). - Pixel-art game sprites: kind sprites + sequences by game type. No art_style: pixel art is the style. - Icons, stickers, props: kind + items, one short description each. Returns the generation, the plan (grid, cell px, warnings), the sequences recorded and the prompt. get_sheet_atlas then gives frame rects and tags for any engine. |
| get_sheet_atlas | FREE. For a sheet you own (its generation id): every frame's pixel rect, the per-frame registration, fps, pivot and one animation tag per sequence, as Aseprite JSON that Phaser, Pixi, Godot and Unity import. Ask this instead of measuring gutters in the pixels. |
| plan_sheet | FREE. The prompt-only door to sheets: takes what generate_sheet takes and returns the plan and the exact prompt, for generating elsewhere with generate_image (pass prompt, aspect_ratio, resolution and model UNCHANGED). Prefer generate_sheet, which keeps the prompt server-side and quotes with dry_run. |
| get_storage | Storage usage and quota. Free. |
| list_projects | Lists the user's projects, most-recently-updated first. |
| create_project | Creates a new project. Returns its id. Free. |
| get_project | Fetches a single project by id. |
| resolve_project | Finds a project by exact name (case-insensitive) or creates it if none matches. Idempotent and free. Use this to follow the one-project-per-folder convention: resolve the folder's name, then pass the returned project_id to other tools. |
| generate_image | Generates an AI image. COSTS CREDITS (call get_pricing: generate_* for Nano Banana 2, generate_pro_* for Nano Banana Pro, generate_gpt_* for GPT Image 2.5). Returns the image inline plus id and credits_remaining. Attach references with reference_asset_ids (up to 14). Pick `model` for the job: Nano Banana 2 (default) for light, texture, mood and speed; Nano Banana Pro when structure and proportion must hold exactly; GPT 2.5 Flare for text you can actually read (labels, packaging, signs); GPT 2.5 Sunburst for the same with more care over references, slower. GPT tops out at 2K. |
| list_generations | Lists generations in a project, newest first. |
| list_favorites | Lists the FAVORITED (hearted) photos in a project, newest first — the images the user has marked as liked. Each item includes an image_url you can open to view the photo. Use this to look at a project's best/liked shots. |
| import_image | Imports a remote image (by url) into a project timeline (no AI). Counts against storage. |
| list_assets | Lists the user's assets (uploads + references). |
| upload_asset | Uploads a remote image (by url) as a reusable reference asset. Returns the new asset id. Pass category:"product" together with project_id to add it to that project's product photos (products column); without project_id a product asset is stored but shown in no project. |
| get_asset | Fetches metadata for a single asset by id. |
| delete_asset | Permanently deletes an asset. DESTRUCTIVE — confirm with the user first. |
| search | Detection-aware search across the user's assets and generations — matches what the scanner SAW inside each image (item names, colors, textures, scene), not just titles or prompts. Modes: text (default; requires query), color (ranks by closeness to a hex color), similar (ranks by likeness to an anchor image), browse (no query; newest first — use it to explore the library). Scope with project_id; set include_regions to get each hit's detected items with bounding boxes. Text results can include the matched instant INSIDE an indexed video: such hits carry is_video plus a video_moment object (time_ms = the exact millisecond). Filter to one category with gen_type (e.g. gen_type:"video" for clips only). |
| list_tasks | Lists background tasks (generations, uploads, scans, exports). |
| get_task | Status of a single task by id. Use to poll long-running operations. |
| cancel_task | Cancels a running task. Confirm with the user first; spent credits are not refunded. |
| retry_task | Retries a failed task. |
| cutout | Subject cutout (transparent PNG + clean plate). COSTS CREDITS. Source: exactly one of generation_id, asset_id, or url. |
| get_cutout | Fresh signed URLs for an existing cutout by generation_id. Free. |
| get_detections | What the detection engine sees in an image: item names, categories, textures, colors, and bounding boxes (0-1000 normalized), plus a scene narrative. Free. Use it to 'see' an image's contents, or to pick item names for restyle. 404 = never scanned; run scan_image first. |
| scan_image | Runs the detection scan on a generation or asset (items, colors, textures, scene). Costs credits (see get_pricing); takes ~5-20s and returns when done. Results power search and get_detections. Usually unnecessary — every generation and import is scanned automatically. |
| restyle | Edits an existing image with AI. COSTS CREDITS (generate_* pricing, like generate_image). Always creates a NEW generation; the original is untouched. Modes: plain-text edit (just instructions); one-click product placement (action bring + reference_id — places the reference's product into the scene at true scale, relit); recolor/remove/add items (use get_detections for item names); merge two images (merge_bias 0=reference dominates, 100=base dominates); art-style transfer (action style + style_intensity 0-100). reference_id can be an asset OR a generation you own. |
| expand_image | Outpaints an existing generation to a bigger canvas / new aspect ratio — the model extends the scene beyond the original edges. COSTS CREDITS (generate_* by output resolution). Creates a NEW generation in the source's own project. Optionally restrict directions with extend, or zoom out with zoom < 1. |
| upscale_image | Re-renders an existing generation at a higher resolution (sharper detail). COSTS CREDITS (generate_* at the TARGET resolution). Creates a NEW generation in the source's own project. |
| generate_video | Makes a video from an image the user owns (generation or upload). MOST EXPENSIVE operation: priced per second, charged when the clip completes, purchased credits only. Async: poll get_video. Quote with dry_run:true (free), then confirm the number with the user. Pick by job (credits per second, std/pro): - Bring a still to life: kling-v3, the default. 120/160; sound +40; 4K 600; 3-15s; lands on end_frame_id. - Cheapest clip WITH sound: veo-3.1-lite-generate-preview. 4, 6 or 8s; 8s = 280 total (1080p 440); end_frame_id. - Keep an existing clip's acting with a new person or scene: kling-v3-omni + reference_video_id (180/240, silent) + up to 3 reference_image_ids. Without a clip: kling-v3 prices, and 6 stills instead of 3. - Same at 120/160 when 10s, 1080p and silence are enough: kling-video-o1 + the clip. Without a clip it costs what kling-v3 costs and does less. - Copy a dance or gesture from a real clip onto the person in the still: kling-motion-control. 180/240 per second of the clip (3-30s), silent. - Edit a finished clip by describing the change, or sound plus reference stills: gemini-omni-1.1-flash. 140 at 720p (1080p 290, 4K 430, upscales); 3-10s chosen by the model, so state the length in the prompt; up to 3 reference_image_ids; end_frame_id. Reference clips are finished video ids (list_generations). |
| get_video | Status of a video job by task_id (from generate_video). Poll every ~15-30s until completed/failed; on completion returns signed video_url + preview_url. Free (the video's credits settle on completion). Kling 3.0 takes about 2 minutes; Omni, Motion Control, Veo and Gemini Omni 3-6. |