PicoBerry

io.github.UModeler由 GitHub 帳號 UModeler 發布v0.1.7更新於 Oct 29, 2026

An AI 3D workspace for games, VR, and beyond. Generate, remesh, texture, and animate 3D assets.

已驗證STDIO僅桌面媒體與設計AI 與機器學習

概覽

AI 產生的概覽

PicoBerry 讓 AI 助理產生、重拓撲、貼圖並製作 3D 模型與圖片動畫,消耗預付的 PicoBerry 點數。

可以做什麼
  • 查詢可用引擎、動畫預設與點數餘額
  • 依文字提示產生圖片,可用參考圖引導
  • 由文字、單張圖片或 2–4 張有序視圖產生 3D 模型
  • 把一張參考圖拆解成爆炸式的零件板圖片
  • 對既有 3D 資產做重拓撲、PBR 重新貼圖與自動綁定動畫
  • 查詢任務狀態、等待完成、瀏覽資產並匯出 GLB、FBX 或 OBJ
適用情境
適合希望助理在對話中直接產出可用於遊戲的 3D 草稿、貼圖或動畫,並在匯出到 Unity 或 Blender 前反覆調整(重拓撲、重新貼圖、綁定)的情境。產生流程是非同步的,3D 任務可能需要數分鐘。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node.js。需設定環境變數 PICOBERRY_API_KEY(在 PicoBerry 儀表板建立的 pb_live_ 金鑰),且已完成購買(訂閱或一次性點數包)。PICOBERRY_API_BASE 為選用,預設指向 PicoBerry API 主機。僅支援桌面用戶端。
安裝前請注意
每次產生、重拓撲、貼圖與動畫呼叫都會花費預付點數,建議先用 list_models 查看費用。API 金鑰只顯示一次,應像密碼一樣保管。結果連結為短期有效的簽章網址,需儘快下載。本機圖片檔案會上傳到 PicoBerry,產生的資產屬於草稿,適合原型與迭代。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 PicoBerry,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[PicoBerry]

PicoBerry MCP Server

Generate 3D models, images, and animations for game and 3D workflows from any MCP client — Claude Code, Cursor, Claude Desktop, Cline — with no HTTP glue. A thin wrapper over the PicoBerry /v1 API, so you get PicoBerry's multi-engine pipeline directly inside your agent. Several 3D and image engines sit behind one API; call list_models for the live set and each engine's cost. Generated assets are drafts — useful for prototyping and iteration, and can be reviewed or refined for your project.

📖 Full reference: API + MCP docs · PicoBerry API

There's no separate subscription for the MCP or the API. Generation spends the same prepaid PicoBerry credits as the web app, per engine, at rates you can read with list_models before you spend anything. (Using the API does require a completed purchase — see Get an API key.)

Install

No install needed — run it with npx:

jsonc
// Claude Code:  .mcp.json   ·   Claude Desktop:  claude_desktop_config.json{  "mcpServers": {    "picoberry": {      "command": "npx",      "args": ["-y", "@picoberry/mcp-server"],      "env": {        "PICOBERRY_API_KEY": "pb_live_xxxxxxxxxxxxxxxx"      }    }  }}

Cursor uses the same shape in ~/.cursor/mcp.json.

Get an API key

Sign in at https://picoberry.ai, open the API Keys tab in your dashboard, and hit Create key. The key is shown once — copy it immediately and treat it like a password.

API access needs a completed purchase: a subscription or a one-off credit pack. A purchase entitles you permanently — you don't need a current subscription. (An active paid subscription works too, of course.)

Environment variables

VarRequiredDefaultNotes
PICOBERRY_API_KEY✅—pb_live_...
PICOBERRY_API_BASE—https://api.picoberry.aileave unset unless you were given a different host

Tools

ToolWhat it does
list_modelsEngines + credit cost for a category (3d / image / parts-board / remesh / texture / animate). Call before generating — don't hardcode engines.
list_animation_presetsAnimation preset ids, per engine family (tripo / meshy / pb), with optional substring filter. pb is PB Animation's motion list; each item carries body.
get_creditsCurrent credit balance.
generate_imageText → image (+ optional reference image URLs). count (1–4) makes several images in one call → assets[], wait on each id.
generate_3d_from_textText → 3D model (GLB).
generate_3d_from_imageImage → 3D model. Single: image_url or local image_path. Multi-view (2–4 views, higher fidelity): image_urls or image_paths, ordered [front, left, back, right] — tripo*/meshy6/hunyuan-3.x only.
parts_boardDecompose one image into an exploded parts-board image (server-fixed engine). Input asset_id, image_url, or local image_path; feed the result to generate_3d_from_image for a parts-separated mesh.
remeshRetopologize an existing 3D asset → new asset.
textureRe-texture (PBR) an existing 3D asset → new asset.
animateAuto-rig (+ optionally animate) an existing 3D asset → new asset. Tripo/Meshy rig humanoids; PB Animation (pb-rig + body: humanoid / quadruped / other) also rigs four-legged and other characters — quadrupeds are rig-only for now.
get_assetStatus + result URLs for one asset.
wait_for_assetPoll until an asset finishes (or times out), then return it.
list_my_assetsBrowse your generated assets.
download_assetExport a completed 3D asset (glb / fbx / obj) → signed URL.

How generation works

Generation is asynchronous:

  1. generate_3d_from_text({ prompt }) → returns an asset { id }.
  2. wait_for_asset({ asset_id: id }) → polls until taskStatus === 2 (succeeded).
  3. Read the result URL from files.model (GLB) or files.image (PNG).

taskStatus: 0 pending · 1 processing · 2 succeeded · 3 failed. Result URLs are signed and short-lived — download promptly. Errors come back with an actionable message (e.g. an unknown engine returns the list of valid names).

Example (in an agent)

"Make a low-poly treasure chest, retopo it to 3k tris, and give me a Unity FBX."

list_models(category="3d")                         → pick an enginegenerate_3d_from_text(prompt="low-poly treasure chest")  → { id: A }wait_for_asset(asset_id=A)                          → taskStatus 2remesh(asset_id=A, polycount=3000)                  → { id: B }wait_for_asset(asset_id=B)download_asset(asset_id=B, format="fbx", texture_preset="unity")  → signed URL

Use it alongside Blender MCP

Run this next to blender-mcp and the agent can generate with PicoBerry, then import into Blender in one flow:

jsonc
{  "mcpServers": {    "picoberry": { "command": "npx", "args": ["-y", "@picoberry/mcp-server"], "env": { "PICOBERRY_API_KEY": "pb_live_..." } },    "blender":   { "command": "uvx", "args": ["blender-mcp"] }  }}

Develop

bash
npm installnpm run build      # tsc → dist/PICOBERRY_API_KEY=pb_live_... npm start

Release

Run Actions → Publish → Run workflow (or push a v* tag). It publishes to npm and then to the official MCP registry, in that order — the registry validates by fetching the package's npm metadata and matching its mcpName against server.json's name, so npm has to land first. A guard step checks every invariant (name/version agreement, namespace casing, version not already on npm) before anything is published, because npm versions are immutable and a failed half-publish burns the number.

Bump version in both package.json and server.json (version and packages[0].version) — the guard fails the run if they disagree.

One-time setup — no secrets. Both publishes authenticate over the workflow's GitHub OIDC token (id-token: write). There is nothing to store or rotate.

The only step is telling npm to trust this workflow. On npmjs.com go to @picoberry/mcp-server → Settings → Trusted publishing → GitHub Actions and enter:

FieldValue
Organization or userUModeler
Repositorypicoberry-mcp
Workflow filenamepublish.yml
Environment name(leave empty)
Allowed actionsnpm publish

The workflow filename must match exactly — it is part of what npm verifies.

The MCP registry needs no setup at all: mcp-publisher exchanges the Actions OIDC token, and the registry grants io.github.<repository_owner>/* from the token's repository_owner claim. That covers io.github.UModeler/picoberry-mcp and avoids the interactive browser login (which additionally requires org Owner).

Trusted Publishing needs npm >= 11.5.1, so the workflow runs on Node 24 (npm 11.x). Node 22 still bundles npm 10.9 and would fail — the node-version pin is load-bearing. A guard step fails the run early if the runner ever ships an older npm.

The namespace is compared byte-exactly — io.github.UModeler/..., matching the GitHub org's login. A lowercased io.github.umodeler/... is rejected 403.

After publishing, claim the Glama listing — unclaimed servers get limited discoverability, and awesome-mcp-servers gates its PRs on a Glama badge in CI.

License

MIT

來源:README.md,提交 71cb944

工具

14

list_models

List available generation engines/models and their credit cost for a category. Call this before generating instead of hardcoding engine names. Returns [{ name, label, cost, paidOnly, supportsMultiView, supportsUltraMode, ultraCost, ... }] — use `name` as the engine/model value. NOTE: the two 3D surfaces are SEPARATE catalogs — `3d` is text-to-3D, `image-to-3d` is image-to-3D. An unrecognized category silently falls back to `3d`, so a guessed value returns a plausible list that is missing image-only engines.

輸入參數category

list_animation_presets

List animation preset ids for the `animate` tool. Presets are engine-specific (Tripo ~97 / Meshy ~675) — pick one from the SAME engine you animate with. Optionally filter with a case-insensitive substring.

輸入參數enginesearch

get_credits

Get the current PicoBerry credit balance for the authenticated key.

無需輸入參數。

generate_image

Generate a 2D image from a text prompt (async). Returns an asset { id }; then call wait_for_asset (or poll get_asset) until taskStatus=2 and read files.image (PNG URL). Costs credits — see list_models(category='image'). Omit `model` for the default. Up to 4 reference image URLs can guide the result (best with nano-banana).

輸入參數modelprompt必填aspect_ratioreference_image_urls

generate_3d_from_text

Generate a game-ready 3D model (GLB) from a text prompt (async). Returns an asset { id }; call wait_for_asset (or poll get_asset) until taskStatus=2 and read files.model (GLB URL). Costs credits — see list_models(category='3d'). Omit `engine` for the default.

輸入參數engineprompt必填texturepolycount

generate_3d_from_image

Generate a 3D model (GLB) from one image, or from 2–4 views of the same subject (multi-view → higher-fidelity geometry), async. Single: `image_url` (any public http/https image, or a prior generation's files.image) OR `image_path` (a local file, uploaded directly — no hosting needed). Multi-view: `image_urls` OR `image_paths`, ordered [front, left, back, right] (2–4 views). Not every engine takes multi-view — check `supportsMultiView` from list_models(category='image-to-3d'); unsupported engines return 400. Local files win over URLs. Then wait_for_asset and read files.model. Costs credits — see list_models(category='image-to-3d') (NOT category='3d', which is the text-to-3D catalog and omits image-only engines).

輸入參數enginetextureimage_urlpolycountimage_pathimage_urlsultra_modeimage_paths

parts_board

Decompose one reference image into an exploded "parts board" image (async) — the subject laid out as separated components on one canvas. Input: `asset_id` (an existing IMAGE asset you own), `image_url` (a public http/https image), OR `image_path` (a local file, uploaded directly). Engine/resolution/prompt are server-fixed — no params. Returns an asset { id }; call wait_for_asset (or poll get_asset) until taskStatus=2 and read files.image (the board PNG). Feed that image to generate_3d_from_image for a parts-separated mesh. Costs 80 credits — see list_models(category='parts-board'). Precedence when several are set: image_path > asset_id > image_url.

輸入參數asset_idimage_urlimage_path

remesh

Retopologize an existing 3D asset into a NEW asset (async). Costs credits — see list_models(category='remesh') (pb-remesh is cheapest). wait_for_asset → files.model.

輸入參數engineasset_id必填polycount

texture

Re-texture an existing 3D asset (PBR) into a NEW asset (async). Describe the desired look in `prompt`. Costs credits — see list_models(category='texture'). wait_for_asset → files.model.

輸入參數enginepromptasset_id必填

animate

Auto-rig an existing 3D character asset and apply an animation, producing a NEW asset (async). Pick `preset` from list_animation_presets for the SAME engine. Costs credits — see list_models(category='animate'). wait_for_asset → files.model.

輸入參數enginepresetasset_id必填

get_asset

Get a generation's status + result. taskStatus: 0=pending 1=processing 2=succeeded 3=failed. When succeeded, files.{model,image,thumbnail,textures} hold signed result URLs (short TTL — download promptly). On failure, read errorDetail.

輸入參數asset_id必填

wait_for_asset

Poll an asset until it finishes (taskStatus 2 or 3) or the timeout elapses, then return the final asset. Use right after generate_* / remesh / texture / animate. 3D generations can take several minutes.

輸入參數asset_id必填timeout_secondspoll_interval_seconds

list_my_assets

List your generated assets (newest first, owner-scoped) for browsing/sync. Filter by category (3d/image/…) or keyword.

輸入參數pagelimitkeywordcategory

download_asset

Export a completed 3D asset and get a short-lived signed download URL. glb = a single self-contained file. fbx/obj download as a .zip bundle (model + textures; + Unity .meta files when texture_preset='unity') — unzip before importing. For Unity use fbx (there is no built-in glb importer).

輸入參數nameformatasset_id必填texture_preset

版本歷史

2
  1. v0.1.7最新Oct 22, 2026
  2. v0.1.6Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分