bumi-digital-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bumi-digital-mcpGenerate an image of a cozy cabin in the snow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bumi Digital MCP Server
Model Context Protocol (MCP) server for Bumi Digital — generate AI images, videos, audio, 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
11 tools covering the full Bumi Digital API surface
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 images (text-to-image, image-to-image) |
| Generate videos (text-to-video, image-to-video, motion control, avatar, lipsync) |
| Generate audio (music, speech/TTS, lipsync) |
| Upscale images to higher resolution |
| Upscale videos to higher resolution |
| List available AI models by type |
| List models with credit pricing and full input schemas |
| Check current credit balance |
| Poll status/result of an async generation |
| Generation history with filters and pagination |
| Upload image/video/audio (via |
Generation endpoints may return status: "completed" immediately or "processing" for async results — poll with get_generation_status until completed/failed. Credits are deducted upfront and refunded automatically on failure.
Getting an API Key
Sign in to bumi.digital
Go to Settings → API Keys
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.jsClient 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:
?api_key=bd_...query parameter (for clients without custom headers, e.g. ChatGPT)Authorization: Bearer bd_...headerBUMI_API_KEYenvironment 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_hereAuthentication: 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
Authorizationheader (Option B) when your client supports it.
Configuration
Environment Variable | Default | Description |
| — | API key for stdio mode. In HTTP mode this is only a fallback — clients normally pass their own key via header or |
|
| Bumi Digital API base URL. Set to |
|
| HTTP listen port (HTTP mode only) |
| — | Set to |
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 toolscheck_creditsA
Cek saldo kredit akun Bumi Digital saat ini.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. 'Cek' implies a read-only, non-mutating operation, but the description does not explicitly state side-effect safety, authentication needs, or what the response contains. This is adequate for a zero-parameter query but leaves room for more transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded Indonesian sentence that names the action and object with no filler. It is appropriately sized for a parameterless tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only balance check, the description conveys the essential information an agent needs to select and invoke the tool. It does not describe the response format, but the overall simplicity and clear purpose make the definition adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is fully covered by the empty properties object. The description therefore adds no parameter meaning, which is acceptable; the baseline for zero-parameter tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Cek') and clearly identifies the resource ('saldo kredit akun Bumi Digital'), making the tool's purpose unambiguous. It is easily distinguished from the sibling tools, which all concern models, generation, uploads, or status, none of which cover credit balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'saldo kredit ... saat ini' clearly frames the use case: querying the current credit balance. There are no explicit exclusion rules or named alternatives, but the sibling list contains no competing balance-check tool, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_audioA
Generate audio (music, speech/TTS, lipsync). Parameter wajib mengikuti input_schema model. Response bisa "completed" atau "processing".
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | ID model (lihat tool list_models / get_models_pricing untuk daftar model_id dan input_schema parameternya) | |
| parameters | No | Parameter sesuai input_schema model, mis. { prompt, aspect_ratio }. File input bisa berupa URL http(s), data URI base64, atau path /api/tmp/... | |
| webhook_url | No | URL webhook opsional yang dipanggil saat status completed/failed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It usefully reveals that the tool is asynchronous ('Response bisa completed atau processing') and that behavior is model-dependent, which is non-obvious. However, it does not disclose how results are retrieved after a 'processing' response (e.g., via get_generation_status), billing implications, or error/failure surfaces beyond the webhook mention in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded; no filler. The second sentence packs behavioral and parameter constraints efficiently. Minor deduction because of the mixed Indonesian/English phrasing and the somewhat ambiguous 'lipsync' term at the end, which slightly reduces scannability for an English-primary agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex, polymorphic, asynchronous tool with nested objects, no annotations, and no output schema, yet the description only states status values ('completed'/'processing') without explaining the follow-up workflow. It does not reference sibling tools like get_generation_status or list_generations for retrieving results, nor does it mention cost/credit implications (relevant given check_credits exists).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, hitting the high-coverage baseline of 3. The schema's own parameter descriptions already explain the model_id lookup path, file input formats (URL, data URI, /api/tmp/...), and the webhook's completed/failed behavior. The top-level description adds little beyond restating that parameters must follow the model's input_schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate') and resource ('audio') and enumerates the concrete sub-types (music, speech/TTS, lipsync), which clearly distinguishes it from sibling tools generate_image and generate_video. An agent can immediately identify what this tool produces without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Generate audio' phrasing implies the when-to-use vs. the image/video siblings, and 'Parameter wajib mengikuti input_schema model' gives a call-level constraint. However, there is no explicit when-not-to-use guidance, no named alternatives, and no mention that lipsync output might overlap with video-generation tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | ID model (lihat tool list_models / get_models_pricing untuk daftar model_id dan input_schema parameternya) | |
| parameters | No | Parameter sesuai input_schema model, mis. { prompt, aspect_ratio }. File input bisa berupa URL http(s), data URI base64, atau path /api/tmp/... | |
| webhook_url | No | URL webhook opsional yang dipanggil saat status completed/failed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It clearly explains the asynchronous response behavior (completed vs processing), the immediate availability of image_url upon completion, and the billing behavior: credits are deducted upfront and automatically refunded on failure. This is meaningful operational detail beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. It front-loads the core purpose ('Generate gambar') and then packs high-value behavioral guidance about response statuses, polling, and credit handling. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generation tool with no output schema, the description covers the most important runtime behaviors: asynchronous statuses, polling via get_generation_status, and credit/refund policy. It does not specify the exact response fields needed for polling (e.g., generation ID), but the explicit reference to get_generation_status gives the agent enough direction to proceed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the three parameters and describes the parameters object with examples and accepted file input formats. The tool description itself adds no parameter-level detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Generate gambar' (generate image). This directly states the tool's function and distinguishes it from sibling tools like generate_video and generate_audio by the image-specific scope, while the name reinforces the intent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete follow-up guidance: if the response status is 'processing', the agent should poll with get_generation_status. This tells the agent when to use a sibling tool. It does not explicitly list exclusions (e.g., do not use for video/audio), but the image-specific name and clear async instruction provide sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_videoA
Generate video (text-to-video, image-to-video, motion control, avatar, lipsync). Response bisa "completed" atau "processing" (poll dengan get_generation_status).
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | ID model (lihat tool list_models / get_models_pricing untuk daftar model_id dan input_schema parameternya) | |
| parameters | No | Parameter sesuai input_schema model, mis. { prompt, aspect_ratio }. File input bisa berupa URL http(s), data URI base64, atau path /api/tmp/... | |
| webhook_url | No | URL webhook opsional yang dipanggil saat status completed/failed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the asynchronous nature (completed vs. processing) and points to the polling tool, plus the schema mentions webhook callbacks at completed/failed. It does not discuss cost/credit effects, but the key runtime behavior is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the headline capability appears first, followed by the key lifecycle note and the polling reference. Every clause contributes information without boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a fairly complex tool (model-dependent parameters, optional webhook, async status), the description plus schema covers prerequisites, parameter routing, file input formats, and the polling follow-up. It omits some detail such as failure states in the main description, but those appear in the webhook_url schema description and are discoverable via get_generation_status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds genuine value by explaining that model_id must come from list_models/get_models_pricing, that parameters follow the model's own input_schema (with an example), and that file inputs may be URLs, data URIs, or /api/tmp paths. This exceeds what the bare schema properties convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Generate video') and expands the scope with concrete modalities (text-to-video, image-to-video, motion control, avatar, lipsync), which separates it from sibling tools like generate_image, generate_audio, and upscale_video. The name is not merely restated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides actionable guidance for the full workflow: find model_id/parameters via list_models/get_models_pricing and poll via get_generation_status when the response is 'processing'. It does not explicitly contrast with generate_image/generate_audio, but the covered preconditions and follow-up steps are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generation_statusA
Cek status & hasil sebuah generation (untuk polling hasil async). Status: processing | completed | failed. Hasil ada di field resultUrl.
| Name | Required | Description | Default |
|---|---|---|---|
| generation_id | Yes | ID generation dari response generate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds useful behavior information by enumerating the possible statuses ('processing | completed | failed') and revealing that the result is in the 'resultUrl' field. However, it does not describe response shape nuances, polling semantics, or what happens on failure beyond the status value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the core purpose, then adds the status values and result field. Every phrase earns its place, and there is no redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter polling tool with no output schema, the description conveys the essential details: purpose, statuses, and where to find the result. It could be slightly more complete by noting what the endpoint returns immediately or how to interpret failures, but the core context is fully present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already explains that generation_id comes from the generate response. The description does not need to add parameter-level detail, and it correctly relies on the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Cek status & hasil') and a clear resource ('sebuah generation'), and explicitly frames the tool as a polling mechanism for async results. This distinguishes it from generation and listing tools like generate_image and list_generations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'untuk polling hasil async' clearly indicates when to use the tool: after submitting an asynchronous generation. It does not explicitly state when not to use it or name alternatives, but the intended usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_models_pricingA
Daftar model beserta harga kredit dan input_schema lengkap (parameter yang didukung tiap model). Tanpa type = semua model.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter tipe model (opsional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the behavioral disclosure burden. It clearly indicates a read/listing operation and reveals the default behavior of returning all models when no type is specified. It does not mention return format, pagination, or whether some models might be omitted, but for a simple listing tool this is arguably adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the tool's purpose and immediately follows with the key default behavior. There is no redundant or filler content; every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partially explains the return content: models, credit prices, and per-model input_schema. However, it does not describe the response structure, units, or how the listed models are organized, leaving some ambiguity for an agent that must parse the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the single optional 'type' parameter with an enum and description. The description adds meaningful behavior beyond the schema by explicitly stating that omitting 'type' returns all models, which helps an agent understand the default semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Daftar' = list) and resource (models with credit prices and supported input_schema), which is specific. It subtly differentiates from the sibling 'list_models' by emphasizing pricing and per-model parameter schema, though it does not explicitly contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful usage context for the optional 'type' parameter via 'Tanpa type = semua model' (without type = all models). However, it gives no explicit guidance on when to use this tool instead of sibling 'list_models' or other generation tools, leaving the selection partially to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_generationsB
Riwayat generation dengan filter dan pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Cari di prompt/model | |
| to | No | Tanggal akhir (ISO 8601) | |
| from | No | Tanggal mulai (ISO 8601) | |
| page | No | Halaman (default 1) | |
| type | No | Filter tipe | |
| limit | No | Jumlah per halaman (default 20, maks 100) | |
| status | No | Filter status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns generation history and supports filtering and pagination, which conveys the read-only nature and basic behavior. However, it does not mention default sorting, whether only certain statuses are included by default, or what the response shape looks like, leaving moderate behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact Indonesian phrase that immediately conveys the core purpose with no filler or redundancy. Every word contributes meaning, and the key concepts (history, filter, pagination) are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 optional parameters and no output schema, the description is too thin. It does not explain what the returned list contains, whether results are ordered, or how this relates to get_generation_status for checking an individual generation's status. The schema covers parameter mechanics, but the broader invocation context remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter (q, to, from, page, type, limit, status) already has a descriptive explanation including enums and defaults. The description adds no parameter-specific meaning beyond the generic 'filter dan pagination' phrase, so it does not elevate the value beyond the schema's baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'Riwayat generation dengan filter dan pagination' (generation history with filter and pagination), which clearly indicates the tool lists generation records and supports filtering and pagination. It is distinguishable from sibling get_generation_status, which presumably targets a specific generation, and from generation creation tools. It lacks an explicit verb, but the tool name 'list_generations' reinforces the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_generation_status or check_credits. There is no mention of scenarios, exclusions, or which sibling would be more appropriate for a single generation lookup. The agent is left to infer usage entirely from the tool name and one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsA
Daftar model AI yang tersedia di Bumi Digital (ringkas). Untuk detail parameter & harga gunakan get_models_pricing.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Tipe model |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It communicates that the output is a summary ('ringkas') and scoped to available models, but it does not disclose output shape, type-filtering behavior, pagination, auth requirements, or rate limits. Adequate but with notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero padding: the first states the purpose, the second routes to the pricing sibling. The key information is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool, the description plus the input schema is nearly sufficient for correct invocation. It directs agents to get_models_pricing when richer data is needed. The main gap is the lack of an explicit return structure, but the low complexity and 'ringkas' qualifier mitigate that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'type' parameter already has an enum and description. The tool description adds no parameter-level detail beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb ('Daftar') and resource ('model AI yang tersedia di Bumi Digital'), and explicitly marks the output as '(ringkas)' or summarized. It also distinguishes itself from get_models_pricing, so an agent can select the right sibling without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the alternative tool and the condition for using it: 'Untuk detail parameter & harga gunakan get_models_pricing.' This gives clear when-not-to-use guidance and names the sibling, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file_name | No | Nama file beserta ekstensi (wajib bila memakai file_base64), mis. foto.png | |
| source_url | No | URL http(s) publik file yang akan di-upload ulang ke storage Bumi | |
| file_base64 | No | Konten file dalam base64 (alternatif dari source_url) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the per-type size limits (image 20MB, video 100MB, audio 50MB), the two input modes (source_url vs file_base64 + file_name), and the return value (file_url). It does not mention authentication or what happens if both source modes are used, but these are moderate omissions for an upload tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well ordered: it states the primary function and return value first, then the input sources, then the limits. Each clause contributes useful information with no redundant phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the complete upload workflow (upload → file_url → use in generate/upscale), both input methods, and size constraints, which is sufficient for a 3-parameter upload tool. The missing output schema is partially compensated by explicitly identifying the returned file_url. It does not specify behavior when both source_url and file_base64 are provided, but that is a minor edge case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage, so the baseline is 3. The description reinforces the source_url/file_base64 duality and the file_name requirement, but does not add new parameter-specific meaning beyond the schema. The size limits and downstream usage describe the operation as a whole, not individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the clear verb 'Upload' with a specific target ('storage Bumi Digital') and states the return value (file_url) as well as its downstream use as input for generate/upscale. This distinguishes it from the sibling generation and upscaling tools that consume the returned URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains the tool's role — to prepare files for use in generate/upscale by returning a file_url. It also details the two source modes (public URL vs base64) and implies when each is appropriate (file_name required with base64). It does not name sibling alternatives to exclude, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upscale_imageB
Upscale gambar ke resolusi lebih tinggi.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | ID model upscale-image | |
| image_url | Yes | URL http(s) publik gambar sumber (upload dulu dengan upload_file bila belum publik) | |
| parameters | No | Parameter tambahan sesuai input_schema model (mis. scale) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the high-level effect (higher resolution) and does not mention async execution, generation ID returns, cost implications, model selection, or non-destructive behavior. No behavioral context beyond the schema is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded sentence with no filler. It communicates the core purpose immediately and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a nested parameters object, the description is too sparse. It does not explain that this is an AI model-based transformation, that it returns a generation/job ID, or that model_id should be sourced from list_models. The schema covers parameters well, but the overall usage context remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with descriptions already provided for model_id, image_url, and parameters. The description adds no extra parameter meaning beyond the implication of scaling from 'higher resolution,' which the parameters field already hints at with the 'scale' example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Upscale gambar ke resolusi lebih tinggi' states a specific action and resource: upscaling an existing image to a higher resolution. It clearly differentiates from sibling tools like upscale_video (video vs image) and generate_image (generation vs enhancement). The verb and resource are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use on existing images but does not explicitly contrast with alternatives such as generate_image or upscale_video. However, the image_url parameter description adds a useful prerequisite: the image must have a public http(s) URL and should be uploaded via upload_file if it is not already public.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upscale_videoB
Upscale video ke resolusi lebih tinggi.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | ID model upscale-video | |
| video_url | Yes | URL http(s) publik video sumber (upload dulu dengan upload_file bila belum publik) | |
| parameters | No | Parameter tambahan sesuai input_schema model |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action ('upscale') and does not disclose whether the operation is asynchronous, consumes credits, returns a generation ID, or has any constraints such as file size or duration limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler or redundant content. It is front-loaded with the core purpose and earns its place without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description is too thin. It does not explain how to select a model, whether the process is asynchronous, or how to retrieve the result, despite siblings like get_generation_status and list_generations indicating such workflows exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters model_id and video_url are already documented in the schema. The description adds no parameter-level meaning, but the baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Upscale'), a clear resource ('video'), and the goal ('ke resolusi lebih tinggi' / to higher resolution). It clearly differentiates from sibling tools like upscale_image by targeting video, and from generate_video by being an upscaling operation rather than generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as upscale_image or generate_video. It does not mention prerequisites, exclusions, or any context that would help an agent decide to invoke it rather than another tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v1.0.0- First observed
check_credits - First observed
generate_audio - First observed
generate_image - First observed
generate_video - First observed
get_generation_status - First observed
get_models_pricing - First observed
list_generations - First observed
list_models - First observed
upload_file - First observed
upscale_image - First observed
upscale_video
TDQS
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for Qwen Image 3 AI image generation
MCP server for Luma Dream Machine AI video generation
MCP server for Google Veo AI video generation
MCP server for Wan AI video generation
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for AI-powered image, audio, and video generation, enabling media creation directly from Claude, Cursor, and other MCP clients.1141 npmMIT
- FlicenseNot gradedqualityCmaintenanceA Model Context Protocol server for AI image and video generation using Jimeng AI, enabling text-to-image, image composition, text-to-video, and image-to-video through Claude Desktop and other MCP clients.80-
- AlicenseBqualityCmaintenanceMCP server for generating images and audio using Google's Gemini AI models.22MIT
- AlicenseAqualityDmaintenanceMCP server for AI-powered media generation: images, videos, audio, and upscaling using 99 AI models.6MIT