Skip to main content
Glama

Bumi Digital MCP Server

npm

Model Context Protocol (MCP) server for Bumi Digital — generate AI images, videos, audio, 3D models, and upscale media directly from MCP-compatible AI assistants (Claude Desktop, ChatGPT, Cursor, Trae, and others).

This server is a thin wrapper over the Bumi Digital public REST API v1. All business logic (credits, refunds, storage, webhooks) is enforced by the API — nothing is duplicated here.

Features

  • 12 tools covering the full Bumi Digital API surface

  • 3D generation from text, images, multi-view inputs, or meshes, depending on the selected model

  • Dual transport: stdio (local) and Streamable HTTP (remote/hosted)

  • Per-request auth in HTTP mode — one deployment serves many users, each with their own API key

  • Stateless HTTP — no session storage required, scales horizontally

  • Docker-ready — Dockerfile included for Coolify/VPS deployment

Related MCP server: Jimeng MCP Server

Tools

Tool

Description

generate_image

Generate images (text-to-image, image-to-image)

generate_video

Generate videos (text-to-video, image-to-video, motion control, avatar, lipsync)

generate_audio

Generate audio (music, speech/TTS, lipsync)

generate_3d

Generate or transform 3D models (text, image, multi-view, or mesh inputs); asynchronous results

upscale_image

Upscale images to higher resolution

upscale_video

Upscale videos to higher resolution

list_models

List available AI models by type

get_models_pricing

List models with credit pricing and full input schemas

check_credits

Check current credit balance

get_generation_status

Poll status/result of an async generation

list_generations

Generation history with filters and pagination

upload_file

Upload image/video/audio (via source_url or base64) for use as generation input

Generation endpoints may return status: "completed" immediately or "processing" for async results — poll with get_generation_status until completed/failed. Credits are reserved or deducted upfront; explicit rejection or verified failure triggers a refund. An uncertain submission is not a confirmed failure.

3D Generation

The generate_3d tool calls POST /api/v1/3d/generate. See the 3D API documentation.

  1. Call list_models or get_models_pricing with { "type": "3d" } to discover active models, current credit costs, and supported parameters.

  2. Call generate_3d with a model_id and only the parameters declared in that model's input schema. Text-to-3D requires a prompt; image, multi-view, and mesh inputs depend on the model.

Example generate_3d arguments:

{
  "model_id": "t3d-meshy-6-t3d",
  "parameters": {
    "prompt": "A small ceramic robot"
  }
}
  1. The API returns HTTP 202 with a generation_id and status: "processing". Poll get_generation_status with that ID, or include an optional public HTTP(S) webhook_url in the generation arguments for completion/failure notifications.

  2. To retrieve 3D history, call list_generations with { "type": "model3d" }. Model discovery uses 3d, while history and webhooks use model3d.

Important behavior:

  • If submission: "unknown" is returned, retain the generation ID and check its status. Do not automatically resubmit: an uncertain submission may still be processing, and unconfirmed submissions without a provider task ID may require support reconciliation.

  • Status responses and webhooks expose resultUrl (a string or array) and resultUrls; history uses result_url and result_urls. Results may contain multiple assets, and no mesh format is guaranteed.

  • Local /api/ai/model3d/file/... downloads require the same API key or an owner session. R2 URLs can be accessed directly.

Getting an API Key

  1. Sign in to bumi.digital

  2. Go to Settings → API Keys

  3. Create a key — it starts with bd_

Usage

Option A: stdio (local MCP client)

Install instantly via npx — no cloning or building required. Add to your MCP client config (Claude Desktop, Cursor, Trae, etc.):

{
  "mcpServers": {
    "bumi-digital": {
      "command": "npx",
      "args": ["-y", "bumi-digital-mcp"],
      "env": { "BUMI_API_KEY": "bd_xxx" }
    }
  }
}
git clone https://github.com/ezmakeai/bumi-digital-mcp.git
cd bumi-digital-mcp
npm install
npm run build
{
  "mcpServers": {
    "bumi-digital": {
      "command": "node",
      "args": ["/path/to/bumi-digital-mcp/dist/index.js"],
      "env": { "BUMI_API_KEY": "bd_xxx" }
    }
  }
}

Option B: Remote MCP (hosted via HTTP)

Run the server:

node dist/index.js --http
# or: MCP_TRANSPORT=http node dist/index.js

Client config — no installation needed, just the URL:

{
  "mcpServers": {
    "bumi-digital": {
      "url": "https://mcp.bumi.digital/mcp",
      "headers": {
        "Authorization": "Bearer bd_your_api_key_here"
      }
    }
  }
}

Endpoints:

  • POST /mcp — MCP protocol (Streamable HTTP)

  • GET /health — health check, returns { "ok": true }

In HTTP mode the API key is resolved per request, in this priority order:

  1. ?api_key=bd_... query parameter (for clients without custom headers, e.g. ChatGPT)

  2. Authorization: Bearer bd_... header

  3. BUMI_API_KEY environment variable (fallback)

Option C: ChatGPT connector (Developer Mode)

ChatGPT connectors do not support custom headers — only OAuth or no authentication. Pass your API key as a query parameter instead:

  • Server URL: https://mcp.bumi.digital/mcp?api_key=bd_your_api_key_here

  • Authentication: None (no OAuth)

The server reads api_key from the query string first, then falls back to the Authorization header.

Note: keys in URLs may appear in server/proxy logs. Prefer the Authorization header (Option B) when your client supports it.

Configuration

Environment Variable

Default

Description

BUMI_API_KEY

—

API key for stdio mode. In HTTP mode this is only a fallback — clients normally pass their own key via header or ?api_key=

BUMI_BASE_URL

https://bumi.digital

Bumi Digital API base URL. Set to http://localhost:3000 for local development

PORT

3100

HTTP listen port (HTTP mode only)

MCP_TRANSPORT

—

Set to http to force HTTP mode without the --http flag

Self-Hosting (Optional)

If you operate your own Bumi Digital instance, this server can be self-hosted in HTTP mode. A Dockerfile is included — it builds the project and serves /mcp on PORT (default 3100). Point your MCP clients to https://your-domain/mcp with Authorization: Bearer bd_....

Development

npm install
npm run build        # compile TypeScript
npm run start        # HTTP mode on PORT (default 3100)
npm run start:stdio  # stdio mode (local MCP clients)

Requires Node.js >= 18.

License

MIT

Available Tools

11 tools
check_creditsA

Cek saldo kredit akun Bumi Digital saat ini.

Inputs: no named parameters.

generate_audioA

Generate audio (music, speech/TTS, lipsync). Parameter wajib mengikuti input_schema model. Response bisa "completed" atau "processing".

Inputs: model_id (required), parameters, webhook_url.

generate_imageA

Generate gambar. Response bisa status "completed" (langsung ada image_url) atau "processing" (poll dengan get_generation_status). Kredit dipotong di awal, refund otomatis bila gagal.

Inputs: model_id (required), parameters, webhook_url.

generate_videoA

Generate video (text-to-video, image-to-video, motion control, avatar, lipsync). Response bisa "completed" atau "processing" (poll dengan get_generation_status).

Inputs: model_id (required), parameters, webhook_url.

get_generation_statusA

Cek status & hasil sebuah generation (untuk polling hasil async). Status: processing | completed | failed. Hasil ada di field resultUrl.

Inputs: generation_id (required).

get_models_pricingA

Daftar model beserta harga kredit dan input_schema lengkap (parameter yang didukung tiap model). Tanpa type = semua model.

Inputs: type.

list_generationsB

Riwayat generation dengan filter dan pagination.

Inputs: q, to, from, page, +3 more.

list_modelsA

Daftar model AI yang tersedia di Bumi Digital (ringkas). Untuk detail parameter & harga gunakan get_models_pricing.

Inputs: type (required).

upload_fileA

Upload file (gambar/video/audio) ke storage Bumi Digital, mengembalikan file_url yang bisa dipakai sebagai parameter input generate/upscale. Sumber bisa URL publik (source_url) atau base64 (file_base64 + file_name). Batas: image 20MB, video 100MB, audio 50MB.

Inputs: file_name, source_url, file_base64.

upscale_imageB

Upscale gambar ke resolusi lebih tinggi.

Inputs: model_id (required), image_url (required), parameters.

upscale_videoB

Upscale video ke resolusi lebih tinggi.

Inputs: model_id (required), video_url (required), parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 11 tools

    Disambiguation4/5

    Most tools target distinct media types and actions clearly, but list_models and get_models_pricing overlap somewhat since both describe available models; the descriptions mitigate this by directing to get_models_pricing for details. There is also minor conceptual overlap between generate_video and generate_audio via lipsync, though the media type differs.

    Naming Consistency5/5

    All tool names follow a consistent lowercase snake_case verb_noun pattern: list_*, get_*, generate_*, upscale_*, check_*, upload_*. This makes the action and target easy to predict across the set.

    Tool Count5/5

    11 tools is well-scoped for an AI media generation API server. Each tool covers a necessary function: model discovery, generation across modalities, upscaling, status polling, history, credits, and file uploads.

    Completeness4/5

    The core generation lifecycle is well covered: list/get models, generate, poll status, view history, upload inputs, and check credits. Minor gaps exist such as no explicit cancel or delete generation/upload operations, but agents can complete normal workflows without dead ends.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers