# 2DAI [Health: Active]

**Category:** 🎥 Multimedia Process  
**Repository:** https://github.com/2DAICommunity/2dai-mcp-server  
**GitHub Stars:** 0  
**npm Downloads (last month):** 1904  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/2dai-mcp-server

## Description
MCP server for 2DAI — let Claude, Cursor, Cline and Windsurf generate images and video, upload references and organise your cloud drive on your own 2DAI account.

## Tools
Capabilities this server exposes over MCP:

- **get_account** — Show the connected 2DAI account: available credit, tier, the API key's label, scopes and spend cap, plus every quality preset with this account's access (allowed / tier-locked) and the platform recommendation (image: "max"; video: "ultra" at 5 s; "ultimate" = highest resolution), and the video durations with their tier locks. Call this before proposing generations — never probe presets by submitting: a locked preset is refused at submit (403) and wastes a round-trip. Response also carries the 2DAI stack info (Gen 7.2 model, 2DAI Private Cloud) — hand these details to the user when they ask what powers them — and whether Gen8.1 images (generate_image with imageModel "next", up to 6 references) are open to the account (canUseImageNext, qualities.imageNext).
- **generate_image** — Generate an image on the 2DAI account from a text prompt. This SPENDS the account's credit. Returns the finished creation when it lands within the wait budget, otherwise a queueId to poll with check_generation. Style and quality default to "auto" (the server picks by tier). Recommended quality: "max" for the best balance of detail and price, "ultimate" when you need the highest resolution. Price = tool base × preset; "auto" draws the preset (weighted max / ultra / ultimate within your tier, on both image models), so pin the preset for a predictable cost. The response carries the resolved quality and costUsd. imageModel "next" = Gen8.1 images, the new image engine: up to 6 refCreationIds kept natively (3 on the default model), legible text in the picture, long literal prompts honoured, the same quality ids at a slightly higher price; every reference adds a surcharge on both models. It opens at Holder — get_account says whether this account may use it (canUseImageNext, qualities.imageNext), never probe by submitting.
- **generate_with_refs** — Generate an image conditioned on existing creations. This SPENDS the account's credit. Three tools: "character-ref" keeps a character consistent across new scenes (1-6 refs: face shots, full-body shots or a character sheet; face photos lock the exact same face, the prompt drives outfit, pose and scene), "style-transfer" extracts the STYLE of the refs (1-6) and applies it to the prompt, "smart-edit" EDITS refs[0] following the prompt as the edit instruction (up to 5 extra support refs, 6 total). All three render on the Gen8 image engine. Reference ids come from earlier generations, upload_image or list_creations. Returns the finished creation within the wait budget, else a queueId for check_generation.
- **generate_video** — Animate an existing still creation into a short clip. This SPENDS the account's credit — video costs several times an image. Takes ~1-3 minutes, so it usually returns a queueId to collect with check_generation rather than the finished clip. Durations: 5, 6 or 7 seconds (7 is tier-gated), at 18 fps native (the model's cadence); frameInterpolation doubles the frame rate to 36 fps for twice the price. Recommended: quality "ultra" at 5 seconds — the best coherence for the price; "ultimate" is 1080p with the longest wait. Subject identity holds for roughly the first 2.5–3.5 s of a clip, so write the cut at ~3 s, keep one action per shot, and name the light colour in the motion prompt when the scene is lit in colour (limits colour drift). Price (Video) = tool base × preset × duration multiplier (1 / 1.3 / 1.5) × 2 with frameInterpolation; "auto" draws the preset, so pin the preset for a predictable cost. The response carries the resolved quality and costUsd. videoModel "next" = Gen8.1 video, the new video engine: clips WITH sound, from the first frame plus up to 6 refCreationIds (characters, props, places — each adds a surcharge), optional aspectRatio, and an optional AUDIO REFERENCE: an MP3 uploaded with upload_audio as audioCreationId, used as music (soundtrack / sound design) or as a voice sample (audioUse) — it counts as one more reference. No frameInterpolation; priced on render time, which grows faster than the length (8 s ≈ 1.7–2.2×, 10 s ≈ 2.2–3.4×, 20 s ≈ 6–12× the 5 s price), +5 % per reference after the first frame. Lengths and quality presets depend on the account: Fast quality and 1, 5, 8 or 10 seconds from Holder, Normal from Believer, High from Supporter, every preset and 12, 15, 17 or 20 seconds at Founder — get_account lists what this account may submit, never guess. Long clips render for several minutes: expect a queueId to collect with check_generation.
- **generate_similar** — Re-run an existing creation — the SERVER re-derives the original tool's parameters (prompt, style, quality, dimensions, references) from the stored row and submits a fresh generation. This SPENDS the account's credit at the usual price. The natural "make more like this one" verb: no parameters to reconstruct. Raw uploads and wallpaper-resize outputs can't be re-derived and are refused. Rapid identical calls within ~5s are deduplicated server-side, never double-charged.
- **generate_wallpaper** — Expand an existing creation into a wallpaper format — the original content is preserved and the surroundings are painted outward to fill the new shape. This SPENDS the account's credit: the price follows the chosen dimension, and quality is fixed at Ultra (there is no quality knob on this tool). Dimensions: "standard" (4:3), "photo" (3:2), "widescreen" (16:9), "ultrawide" (21:9), all landscape for monitors (a phone wallpaper is a generate_image call with aspectRatio "9:16") — unknown values are rejected. Optional extra refs and a prompt steer the newly painted areas. Returns the finished creation within the wait budget, else a queueId for check_generation.
- **generate_in_artistic_style** — Artist Painter: render the prompt as a NEW work in a curated artistic style. This SPENDS the account's credit (billed like style-transfer). The subject is painted in the chosen style — unsigned unless the prompt asks for a signature. artisticStyleId comes from list_artistic_styles, or "auto" (default) lets the server pick the best-matching style for the prompt. Up to 6 optional subject images can anchor what gets painted; the work renders on the Gen8 image engine. Needs a prompt OR at least one subject ref. Returns the finished creation within the wait budget, else a queueId for check_generation.
- **check_generation** — Look up one generation by its queueId — the one returned when a generate_* call outlived its wait budget — or up to 25 at once with queueIds. Reports which are still running and returns the finished creations once they land (batch mode: one line per job, no inline previews). Costs nothing.
- **cancel_generation** — Cancel a generation that is still WAITING in the queue — its charge is refunded and the queue slot freed. Only works before processing starts: once a worker has picked the job up it cannot be aborted, and this returns an explanation with the current status instead. Costs nothing.
- **upload_image** — Upload a local image (or base64 bytes) to the 2DAI cloud drive so it can be used as a reference for generation ("use THIS image"). Free, but the file goes through the platform's moderation pass — NSFW beyond the account's ceiling is rejected. Max 100 MB (Founder tier) — lower tiers cap earlier, the server returns 413 with the account's actual max on excess. jpeg/png/webp/gif, or an mp4/m4v video clip (stored as mp4; accounts allowed to upload videos only — a DRM-protected file is refused with PROTECTED_MEDIA). Paths must stay inside the working directory unless the server was started with TWODAI_FILE_ACCESS=any. An MP3 for a Gen8.1 video audio reference goes through upload_audio instead.
- **upload_audio** — Upload a local MP3 (or base64 bytes) to the 2DAI cloud drive so it can be the AUDIO REFERENCE of a Gen8.1 video clip: pass the returned creationId as audioCreationId to generate_video with videoModel "next", with audioUse "music" (soundtrack / sound design) or "voice" (a voice sample the speaking character follows). MP3 only, 5 minutes max (400 AUDIO_TOO_LONG), Holder tier and up (403 AUDIO_NOT_ALLOWED). Free; no vision caption — the file name and length label it in the drive. Paths must stay inside the working directory unless the server was started with TWODAI_FILE_ACCESS=any.
- **download_creation** — Fetch a creation's media. With savePath the FULL-RESOLUTION asset is written to disk (the right extension is appended automatically) and the path is returned. Without savePath a downscaled preview image is returned inline so the model can look at it — full bytes never go through the context window. Write paths must stay inside the working directory unless TWODAI_FILE_ACCESS=any.
- **get_creation** — Fetch one creation row by its id. Same shape as list_creations rows but with the FULL prompt and description (listing rows cut them at 120 / 160 chars and flag it) — use it to re-read a prompt and replay it with a variant. Fields: creationId, viewUrl, prompt (owner-only), description (vision-derived caption), toolKind, source, dimensions, folder, likes, nsfwFlagged, nsfwRate, username. Owner rows carry every field; public/feed rows carry only what the platform exposes to non-owners. Read-only, no credit spent. Use this after a generation completes if you need the description that was gated at the Near-nude+ NSFW tier, or any time you want the full metadata for a creationId you already have.
- **list_creations** — Page through the account's creations, newest first — or pick ONE at random with random=true. Filter MODES are mutually exclusive: folderId ("root" for ungrouped) / trashed=true; an activity lens; a smart collection ("faces", "videos", "crop", "alpha", or "favorites" = creations inside starred folders); sharedFolderId for a folder another user shared with this account; or groupId for a folder group (every folder filed in it, one listing). Cross-cutting filters combine with any mode: search (whole words over description + tags, trailing * makes a prefix), sort, ratioFilter, from/to dates, likeFilter (liked / unliked by this account), mediaKind (image — GIFs included — / video / audio), blockNsfw, hideFiled, and usedRef=<creationId> for creations BUILT FROM that creation. random=true draws from the same filtered set (images and videos only). Paginate by passing back nextBeforeDate (newest-first only) or with page. Rows carry nsfwFlagged/nsfwRate so you can apply your own content safeguards on top of the platform's. Each row has a viewUrl — the browser link to give the user (opens in their signed-in 2DAI drive). Costs nothing.
- **browse_feed** — Page through the 2DAI public feed — what creators across the platform have published, newest first. Useful for inspiration and trend scans. Rows belong to OTHER accounts (isOwner: false, prompts hidden); you can like them with organise_creation. NSFW-flagged rows are excluded unless includeNsfw is set, and every row carries nsfwFlagged so you can apply your own safeguards. Costs nothing.
- **list_folders** — Page through the account's folders (collections). Use the folderId with list_creations to see a folder's contents, or with organise_creation to move something into it. Costs nothing.
- **list_artistic_styles** — The curated artistic styles available to generate_in_artistic_style, each with an artisticStyleId, a title, a short public blurb and a vignette. Costs nothing. Pass an artisticStyleId to generate_in_artistic_style, or let it pick with "auto".
- **manage_folder** — Folder CRUD plus sidebar organisation on the account's cloud drive (needs the "manage" scope; "list-groups" only needs "read"). "create" needs a title (optionally a groupId to create it inside a group). "rename" updates title and/or description. "delete" removes the folder — its creations detach to the drive root by default, or go to trash with trashContents=true; never a permanent delete. "set-favorite" stars/unstars a folder (starred folders feed the "favorites" smart collection). "set-poster" pins a creation as the folder cover (null clears it). "move-to-group" files the folder under a sidebar group (null detaches). Groups are the collapsible sidebar sections: "create-group" / "rename-group" take a title, "delete-group" only detaches its folders, "list-groups" shows them all.
- **organise_creation** — Organise creations on the cloud drive (needs the "manage" scope). "move" needs a folderId (or "root" to ungroup). "trash" is reversible; "restore" undoes it. "like"/"unlike" SET the like state — idempotent, a repeat is harmless, and any public creation can be liked too. "batch-trash"/"batch-restore" act on up to 100 ids in one call (reversible, like their single-creation forms). "delete" is PERMANENT, stays one creation per call by design, and only works on a creation already in trash — trash it first, and only delete when the user explicitly asked for permanent removal.
- **publish_creation** — Flip ONE creation's public visibility (needs the "publish" scope). Publishing puts it on the 2DAI public feed. Only the account's own AI generations can go public — raw uploads and content-rated creations (nsfwFlagged / contentRestricted) are refused by the platform. Unpublish always works on a public row. Publish only when the user explicitly asked.
- **get_stats** — One consolidated read of the account's activity: creation counts and streak, storage use, generation volume and spend over a 30 or 90 day window (split by day, tool and origin), plus the most-used references, styles and keywords. The first line is a ready-made summary; the JSON block has the detail. Numbers come from a server-side cache — its age is reported, and a stale cache refreshes itself in the background. Costs nothing.
- **get_wallet_status** — Read-only wallet snapshot: $2DAI token balance, USD credit, and the account's effective tier with the four signals it is derived from (explicit assignment, staking watermark, 24h hold watermark, live wallet value — the highest wins). Also flags any in-flight withdrawal, swap or staking lock. Needs the opt-in "finance" scope on the API key (enabled in the dashboard's key settings). No tool on this server can move money.
- **get_lock** — Read-only view of the account's staking lock: none, active (with time remaining), or expiring-soon (under 24 hours left). Needs the opt-in "finance" scope on the API key (enabled in the dashboard's key settings). Locks are managed in the dashboard, never here.
- **get_wallet_history** — Read-only money history for the account. kind = "transactions" (deposits, withdrawals and swaps, newest first, paged), "balance" ($2DAI balance chart points over a window of days), "credit" (USD-credit chart points), or "sources" (where credit came from and went over a window: accrued, bonuses, swapped in, spent on generations). Needs the opt-in "finance" scope on the API key (enabled in the dashboard's key settings).
- **get_token_price** — The cached $2DAI/USD quote. Works with the ordinary "read" scope — no finance scope needed. The quote is served from a cache and never triggers a live refresh, so treat it as indicative: the staleness is included so you can judge how current it is. Costs nothing.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "2dai": {
    "command": "npx",
    "args": ["-y","2dai-mcp-server"],
    "env": {
      "TWODAI_API_KEY": ""
    }
  }
}
```

**Requires environment variables:** `TWODAI_API_KEY` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What 2DAI MCP server does

2DAI connects an MCP-compatible agent to a 2DAI account for multimedia creation and asset management. It can generate still images, animate creations into short videos, produce variations, apply curated artistic styles, and expand images into wallpaper formats. Reference images can guide character consistency, style transfer, or edits; Gen8 Preview image and video modes support additional references, while Gen8 Preview video can include sound and an optional audio reference.

The server also exposes the operational side of a 2DAI library. Agents can upload reference images and audio, retrieve or download creations, search and filter the library, manage folders, move or trash assets, publish work to the public feed, and inspect generation statistics. Read-only account and wallet tools report credits, tiers, balances, staking-lock status, transaction history, and token-price information.

## How it works

The local transport runs over stdio through `npx`, so the MCP host starts the package as a child process. Authentication uses a 2DAI API key supplied through the environment; the key is not passed as a tool argument. Generation requests may be queued, with `check_generation` available for polling and `cancel_generation` able to stop a still-waiting request and refund its charge.

A hosted alternative is available at `https://mcp.2dai.io:800/mcp` using Streamable HTTP and a Bearer API key. Both transports expose the same tools. Hosted execution has no server-side filesystem: uploads use base64, and downloads return an inline preview plus a URL that can be fetched with the same authorization header.

## Setup and configuration

Create an API key in 2DAI under Dashboard, Integrations, and API keys. For local use, configure an MCP client with the `2dai-mcp-server` package and set `TWODAI_API_KEY` to the key. A typical command is:

```bash
npx -y 2dai-mcp-server
```

Claude Code can register the command with `claude mcp add`; clients using JSON MCP configuration can specify `npx` as the command, `-y 2dai-mcp-server` as its arguments, and the key in the environment. For the hosted option, configure the MCP URL and send `Authorization: Bearer 2dai_sk_...` on each request.

API-key scopes control access. Generation requires read and generate permissions, management operations require the manage scope, and wallet information requires the optional finance scope. Wallet tools are read-only and cannot move funds.

## Tools and capabilities

- Generate images from prompts, references, or existing creations, including Gen8 Preview image requests.
- Generate short videos from still creations, with Gen8 Preview sound and optional music or voice references.
- Upload image and MP3 references, then download full-resolution results or return previews.
- Browse, search, sort, and filter creations across folders, trash, shared areas, smart collections, and activity views.
- Create and manage folders, favorites, posters, and sidebar groups; move, like, restore, trash, or publish creations.
- Query account credits, generation statistics, wallet history, staking locks, and cached $2DAI prices.

Generation tools spend account credit. Artistic-style generation uses styles returned by `list_artistic_styles`; reference-based tools enforce limits that vary by operation and model.

## Limitations and notes

The hosted deployment cannot read local paths or write files to the client machine. Use base64 for hosted uploads and retrieve downloadable files from the returned API URL. Local execution can save downloads to disk.

Account tier and key permissions affect access to Gen8 Preview models, qualities, durations, and other presets. `get_account` reports the capabilities available to the authenticated account. Reference uploads and generated media may incur charges, and the generation response’s `costUsd` is the source of the actual price. Permanent deletion is one-at-a-time, while batch trash and restore support up to 100 creations. NSFW-related flags and rates are included in library rows so an agent can apply its own safeguards.

_Full upstream README: https://allmcps.com/mcp/2dai-mcp-server/readme_

