Nano Studio Pro

Nano Studio Pro的远程MCP服务器,一个内置搜索的个人资产仓库。不再让作品散落在本地文件夹、外部硬盘和十几个不同的应用中:你制作或上传的所有内容都会集中在一个地方,并在到达时进行检测扫描,视频和照片都包括在内,因此可以通过其中的物体、颜色、纹理和场景进行搜索。35个工具:快速检测感知搜索(文本、颜色、相似图像、浏览、项目边界框)、免费扫描、导入、项目和任务,以及图像生成、重样式、抠图、放大、图像转视频,以及带帧矩形的精灵或贴纸表。支持OAuth 2.1的流式HTTP;个人访问令牌作为备用。在重新生成之前先搜索。

托管 MCP 服务器

npx add-mcp 'https://nanostudiopro.com/api/mcp'

可安装到 Claude Code、Codex、Cursor 等客户端

文档

MCP server for your image library

Give Claude Desktop, Claude Code, or any host that speaks the Model Context Protocol one searchable home for your media. Upload or import any photo — yours or generated elsewhere — and your agent can find it again by the objects, colors, and scenes inside it, instead of hunting through folders. 35 tools — search, detections, assets, projects, generation, editing, cutouts, video, tasks — all backed by the same /v1 API documented at /docs.

Install

The quickest path is through the CLInsp mcp downloads and runs the MCP server on first use, so this is the whole setup:

curl -fsSL https://nanostudiopro.com/cli/nsp -o /usr/local/bin/nsp && chmod +x /usr/local/bin/nsp
claude mcp add --scope user nanostudio nsp mcpbash

Without the CLI, the server also runs as a single file. That copy is frozen at download time:

curl -fsSL https://nanostudiopro.com/cli/mcp -o /usr/local/bin/nsp-mcp \
  && sudo chmod +x /usr/local/bin/nsp-mcpbash

Pure Node.js, zero dependencies, single file. Requires Node 18+. Inspect the source at https://nanostudiopro.com/cli/mcp before installing if you like. Through the CLI the cached copy refreshes itself: every launch asks the server for its version and re-downloads when a newer one is out, so new tools arrive on the next reconnect (offline, the cache runs as is). Force it with nsp mcp --update. The standalone binary does not self-update; re-run the curl, or connect to the remote URL instead.

Sign in

nsp login   # optional — skip it and the first tool call signs you in from chatbash

The MCP server reads the same ~/.config/nsp/credentials.json the CLI writes — so one nsp login covers both. For headless use, set NANO_API_TOKEN:

NANO_API_TOKEN=sk_sf_live_... nsp mcpbash

Not signed in at all? Also fine — the first tool call starts a browser sign-in (RFC 8628 device flow) and hands the approval link to the agent. Approve it in the browser, tell the agent to retry, and the token is saved for next time.

Wire it up

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) and add:

{
  "mcpServers": {
    "nanostudio": {
      "command": "nsp",
      "args": ["mcp"]
    }
  }
}json

Quit Claude Desktop fully and reopen. The nanostudio server appears in the MCP panel.

Claude Code

claude mcp add --scope user nanostudio nsp mcpbash

--scope user makes the server available in every project. Use --scope project to scope it to a single repo (writes a .mcp.json).

Remote server — no install

The same tools are also hosted at https://nanostudiopro.com/api/mcp. Any MCP host that connects to a URL and can send an Authorization header works — nothing to download. In Claude Code:

claude mcp add --transport http --scope user nanostudio https://nanostudiopro.com/api/mcp \
  --header "Authorization: Bearer sk_sf_live_..."bash

Create the token in Settings · API Tokens or print an existing one with nsp token. The hosted server exposes the same tools minus the local-filesystem parameters (path, save_to), and project_id is always required.

OAuth hosts need no token at all: in a claude.ai or Claude Desktop custom connector, just paste https://nanostudiopro.com/api/mcp as the server URL — the host discovers the OAuth endpoints automatically, a browser window opens, and you approve the connection (choosing permissions and an optional daily credit cap) exactly like authorizing a device. Revoke it any time from Settings · Connected Apps.

Add to Cursor one-click install of the remote server in Cursor.

Tools

Find

Every image — generated here or uploaded from anywhere — is scanned on the way in, so the agent can look things up by the objects, colors, and textures inside them rather than guessing at filenames.

ToolWrapsCostWhat it does
searchGET /v1/searchfreeDetection-aware search across assets and generations — scope by project, filter by type/style/aspect/colors, browse newest, match a color, or find images similar to one you have; include_regions adds bounding boxes. Reaches inside indexed videos too: a matching hit can be the exact second of a clip (video_moment), and gen_type narrows to one kind (video, cutout, …).
get_detectionsGET /v1/detections/{id}freeWhat the detection engine sees: items, colors, textures, bounding boxes, scene narrative.
list_generationsGET /v1/generationsfreeGenerations in a project.
list_assetsGET /v1/assetsfreeUploads and reference images.
list_favoritesGET /v1/generations?favoritefreeFavorited (hearted) photos in a project, newest first — the shots the user marked as best.
get_assetGET /v1/assets/{id}freeFetch asset metadata.

Add to the library

Not just images made here. Any local file or URL can come in, and the scan that makes it searchable runs on the way through.

ToolWrapsCostWhat it does
upload_assetPOST /v1/assets3 cr + storageUpload from local path or remote URL. The scan that makes it searchable is the 3 credits.
import_imagePOST /v1/generations/upload3 cr + storageImport a local or remote image into a project timeline (no generation). The 3 credits are the scan that makes it searchable.
scan_imagePOST /v1/scans3 crRun the detection scan on an image that was never scanned.
delete_assetDELETE /v1/assets/{id}free (destructive)Permanently delete. Description warns the model to confirm with the user.

Organize

One project per folder, resolved by name — so a repo's imagery stays separate and searchable on its own.

ToolWrapsCostWhat it does
resolve_projectGET+POST /v1/projectsfreeFind a project by name or create it — idempotent. Backs the one-project-per-folder convention.
list_projectsGET /v1/projectsfreeProjects, newest first.
create_projectPOST /v1/projectsfreeCreate a new project.
get_projectGET /v1/projects/{id}freeFetch one project.

Create and edit

The generation surface, filing straight into the library above.

ToolWrapsCostWhat it does
generate_imagePOST /v1/generationscreditsGenerate on Nano Banana 2 or Pro, or GPT Image 2.5 Flare / Sunburst (`model`). Returns the image inline so the model can see it.
sheet_optionsGET /v1/sheets/optionsfreeThe menus a sheet is made from: kinds, grounds, styles, animation sequences by subject or game with frame counts per level, models. `family` + `type` drills into one type's frame lists.
generate_sheetPOST /v1/sheetscreditsOne image of several separate elements laid out to be cut out — an animation cycle, a sprite sheet, an icon set, stickers, props — planned, prompted and recorded server-side from ids. `dry_run` quotes.
get_sheet_atlasGET /v1/sheets/{id}/atlasfreeA sheet's frame rects, registration, fps, pivot and one tag per sequence, as Aseprite JSON for Phaser, Pixi, Godot, Unity.
plan_sheetPOST /v1/sheets/planfreeThe prompt-only door: the plan and the exact prompt, for generating elsewhere. Prefer generate_sheet.
restylePOST /v1/restylecreditsAI-edit an image: one-click product placement, item recolor/remove/add, merge, style transfer, plain-text edits.
cutoutPOST /v1/cutoutscreditsSubject cutout: transparent PNG, matte, and clean background plate.
get_cutoutGET /v1/cutouts/{id}freeFresh signed URLs for an existing cutout.
expand_imagePOST /v1/expandcreditsOutpaint to a bigger canvas / new aspect ratio.
upscale_imagePOST /v1/upscalecreditsRe-render at a higher resolution.
generate_videoPOST /v1/videosper secondMake a video from an image: Kling 3.0 / Omni / O1 / Motion Control, Veo 3.1 Lite or Gemini Omni Flash, with end frames, reference clips and stills. The priciest operation; quote it with dry_run first, deducted on completion.
get_videoGET /v1/videos/{task_id}freePoll a video job; returns signed video + preview URLs when done.

Account and tasks

Feature detection, budgeting, and the background-job surface.

ToolWrapsCostWhat it does
whoamiGET /v1/mefreeAuthenticated user, plan, credit balance.
get_metaGET /v1/metafreeServer version + capability flags for feature detection.
get_creditsGET /v1/account/creditsfreeWallet balance + token daily-cap status.
get_pricingGET /v1/pricingfreeCredit cost of every operation.
get_storageGET /v1/storagefreeStorage usage and quota.
list_tasksGET /v1/tasksfreeBackground tasks (generations, scans, exports).
get_taskGET /v1/tasks/{id}freeStatus of a single task.
cancel_taskPOST /v1/tasks/{id}/cancelfreeStop a running task. Description warns to confirm.
retry_taskPOST /v1/tasks/{id}/retryfreeRetry a failed task.

Image generation over MCP

The biggest reason to use the MCP server over the CLI is that generate_image returns the rendered PNG as an inline MCP image content block. Your LLM literally sees what it generated and can critique, refine, or call the tool again with adjustments — without the user having to copy a file path back into chat.

If you also want the file on disk, pass save_to: "./gen.png" — the file is written and the image still streams back to the model.

Costs are surfaced in the tool description so the model can budget. After every call the response includes credits_remaining so the model knows when to back off.

Sprite sheets and game assets over MCP

Ask any image model for “eight frames of a knight running” and you get a picture, not a sheet: frames at different sizes, touching each other, on a ground that will not key, and no file saying where frame three starts. Three tools take that whole job off the agent.

  • sheet_options returns the menus as data — kinds (icon set, sticker sheet, pixel sprites, animation, props), keyable grounds, styles, animation sequences by subject or by game genre with the frame count at each level of detail, and the models. Free.
  • generate_sheet takes those ids rather than prose. The grid, the gutters, the flat ground and the asserted frame count are decided server-side, so the agent cannot trim the one thing the prompt exists to protect: the count. dry_run quotes the credits before anything is spent.
  • get_sheet_atlas hands back every frame's pixel rectangle, the registration, the speed, the pivot and one animation tag per sequence, as the Aseprite-format JSON that Phaser, Pixi, Godot and Unity already import. Free.

The same three run the Sheets section of the app and the /v1/sheets endpoints; the announcement post walks through what a sheet is and how one is planned.

AI image editing over MCP

restyle edits an image you already have instead of generating a new one: recolor, remove or add a single item, place a product into a scene, merge two pictures, carry one image's style onto another, or just describe the change in plain words.

Targeting an item by name works because the picture was scanned on the way in. Call get_detections first — it is free, and it returns the exact item names, colors and boxes the engine saw, which are the names restyle expects. Guessing at “the jacket” when the scan recorded “navy bomber” is the usual reason an edit misses.

expand_image outpaints to a wider canvas or a new aspect ratio, and upscale_image re-renders at a higher resolution. Both cost credits and both file the result back into the same project, so the edit stays searchable next to its original.

Cutouts and background removal over MCP

cutout separates the subject from its background and returns three things, not one: the transparent PNG, the matte, and a clean plate of the background with the subject removed. The plate is what makes it useful for composition — you can put the subject somewhere else and still have the room it came out of.

Signed URLs expire; get_cutout hands back fresh ones for a cutout that already exists, free, so an agent never has to pay twice for the same subject. It works on any image in the library, including ones you imported.

Video generation over MCP

generate_video turns a still into a clip, with the model named in the call: Kling 3.0, Kling 3.0 Omni (reference clips and stills, up to 4K), Kling O1, Kling Motion Control (copy a real performance onto your still), Veo 3.1 Lite with sound, or Gemini Omni Flash, which also edits a finished clip from a description. End frames are supported where the model has them.

It is the most expensive operation on the server — priced per second, hundreds to thousands of credits a clip — so it is built to be quoted before it is run: dry_run returns the price and nothing is deducted until the render completes. get_video polls the job and returns signed video and preview URLs when it is done.

Finished clips are indexed like pictures: search reaches inside them and a hit can be the exact second of a clip rather than the whole file. See image and video search for agents.

Default project

generate_image, cutout, and import_image resolve project_id when the model omits it: first from the nearest .nsp.json (walking up from the working directory), then from default_project_id in your credentials file. Set the global fallback with nsp use <id>.

To pin a repo to its own project, drop {"default_project_id":"prj_..."} in a .nsp.json at its root — or skip the file entirely and let the agent call resolve_project with the folder name to find-or-create one. One project per folder keeps every repo's imagery separate and searchable on its own.

Import your own images over MCP

The tools are not only for images generated here. import_image and upload_asset accept any local file or URL — drop in existing product shots, artwork, or brand imagery. Every import runs through the same detection scan that powers search: detected objects, colors, and textures become instantly searchable, and any imported image can be cut out, used as a generation reference, or organized into projects like everything else.

Importing your existing images covers which tool to use for what, where imports land, and what the scan costs.

Prefer the terminal? The CLI has the same operations. Need the raw HTTP surface? The full API reference is one click away.