MCP server
Drive Nano Studio Pro from Claude Desktop, Claude Code, or any host that speaks the Model Context Protocol. 17 tools — projects, generations, assets, tasks, search — all backed by the same /v1 API documented at /docs.
Install
curl -fsSL https://nanostudiopro.com/cli/mcp -o /usr/local/bin/nsp-mcp \
&& sudo chmod +x /usr/local/bin/nsp-mcpbashPure Node.js, zero dependencies, single file. Requires Node 18+. Inspect the source at https://nanostudiopro.com/cli/mcp before installing if you like.
Sign in
nsp login # if you don't already have the CLI, install it from /docs/cli firstbashThe 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_... /usr/local/bin/nsp-mcpbashWire it up
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) and add:
{
"mcpServers": {
"nanostudio": {
"command": "/usr/local/bin/nsp-mcp"
}
}
}jsonQuit Claude Desktop fully and reopen. The nanostudio server appears in the MCP panel.
Claude Code
claude mcp add --scope user nanostudio /usr/local/bin/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).
Tools
| Tool | Wraps | Cost | What it does |
|---|---|---|---|
whoami | GET /v1/me | free | Authenticated user, plan, credit balance. |
get_credits | GET /v1/account/credits | free | Wallet balance + token daily-cap status. |
get_pricing | GET /v1/pricing | free | Credit cost of every operation. |
get_storage | GET /v1/storage | free | Storage usage and quota. |
list_projects | GET /v1/projects | free | Projects, newest first. |
create_project | POST /v1/projects | free | Create a new project. |
get_project | GET /v1/projects/{id} | free | Fetch one project. |
generate_image | POST /v1/generations | 4–16 cr | Generate. Returns the image inline so the model can see it. |
list_generations | GET /v1/generations | free | Generations in a project. |
list_assets | GET /v1/assets | free | Uploads and reference images. |
upload_asset | POST /v1/assets | storage | Upload from local path or remote URL. |
get_asset | GET /v1/assets/{id} | free | Fetch asset metadata. |
delete_asset | DELETE /v1/assets/{id} | free (destructive) | Permanently delete. Description warns the model to confirm with the user. |
list_tasks | GET /v1/tasks | free | Background tasks (generations, scans, exports). |
get_task | GET /v1/tasks/{id} | free | Status of a single task. |
cancel_task | POST /v1/tasks/{id}/cancel | free | Stop a running task. Description warns to confirm. |
search | GET /v1/search | free | Semantic search across assets and generations. |
generate_image — the headline tool
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.
Default project
generate_image and list_generations both resolve project_id from default_project_id in your credentials file if the model doesn't pass one. Set it from the CLI with nsp use <id> (or just run nsp gen once and pick interactively).
Prefer the terminal? The CLI has the same operations. Need the raw HTTP surface? The full API reference is one click away.