Arumi
Generate AI images, video and audio with 55 models, priced in credits before you generate.
Should I use this
Quality & Safety
Findings (2)
- LOWin get_generation
- LOWin quote
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"arumi": {
"url": "https://api.arumi.ai/mcp"
}
}
}Remote endpoints
https://api.arumi.ai/mcpstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟡complete_upload(upload_id)
Finish an upload after the PUT; returns the asset_id to pass in a generation's references.
Input Schema
{
"type": "object",
"properties": {
"upload_id": {
"type": "string"
}
},
"required": [
"upload_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"asset_id": {
"type": "string"
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"duration_seconds": {
"type": "number"
}
},
"required": [
"asset_id",
"kind",
"name"
],
"additionalProperties": false
}🟡create_upload(file_name, content_type, size_bytes, sha256, width, ...)
Start uploading one of the user's files to use as a reference. PUT the file's bytes to upload_url with exactly the returned headers, then call complete_upload.
Input Schema
{
"type": "object",
"properties": {
"file_name": {
"type": "string",
"description": "the file's name, with its extension"
},
"content_type": {
"type": "string",
"description": "for example image/png, image/jpeg, video/mp4, audio/mpeg"
},
"size_bytes": {
"type": "integer"
},
"sha256": {
"type": "string",
"description": "the file's SHA-256 as 64 lower-case hex characters (shasum -a 256)"
},
"width": {
"type": "integer",
"description": "required for images: width in pixels"
},
"height": {
"type": "integer",
"description": "required for images: height in pixels"
}
},
"required": [
"file_name",
"content_type",
"size_bytes",
"sha256"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"upload_id": {
"type": "string"
},
"upload_url": {
"type": "string"
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"expires_at": {
"type": "string"
},
"next": {
"type": "string"
}
},
"required": [
"upload_id",
"upload_url",
"headers",
"expires_at",
"next"
],
"additionalProperties": false
}🟢generate(model, prompt, parameters, references, max_credits, ...)
Start a generation with the user's credits. It is refused, with nothing charged, when it would cost more than max_credits. Returns at once with a generation_id: call get_generation until it has succeeded or failed.
Input Schema
{
"type": "object",
"properties": {
"model": {
"type": "string",
"description": "the model id from list_models"
},
"prompt": {
"type": "string",
"description": "what to make; for speech models the text to read"
},
"parameters": {
"type": "object",
"description": "the model's settings by key (get_model); any left out take the model's default",
"additionalProperties": true
},
"references": {
"type": [
"null",
"object"
],
"properties": {
"images": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "asset ids of uploaded images (complete_upload), in the order of the model's image slots"
},
"videos": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "asset ids of uploaded videos, in the order of the model's video slots"
},
"audio": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "asset ids of uploaded audio files, in the order of the model's audio slots"
}
},
"description": "uploaded files the model works from",
"additionalProperties": false
},
"max_credits": {
"type": "integer",
"description": "the most credits the user agreed to spend on this generation; it is refused when the quote is higher"
},
"idempotency_key": {
"type": "string",
"description": "optional, 16-128 characters [A-Za-z0-9._:-]: repeating a call with the same key returns the same generation instead of making another"
}
},
"required": [
"model",
"max_credits"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"generation_id": {
"type": "string"
},
"model": {
"type": "string"
},
"modality": {
"type": "string"
},
"status": {
"type": "string",
"description": "queued, processing, succeeded, failed or unknown"
},
"progress": {
"type": "integer"
},
"created_at": {
"type": "string"
},
"credits": {
"type": "object",
"properties": {
"reserved": {
"type": "integer"
},
"charged": {
"type": "integer"
},
"state": {
"type": "string",
"description": "reserved while it runs; settled when charged; released when nothing was charged"
}
},
"required": [
"reserved",
"charged",
"state"
],
"additionalProperties": false
},
"outputs": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
},
"duration_ms": {
"type": "integer"
}
},
"required": [
"url",
"kind"
],
"additionalProperties": false
}
},
"text": {
"type": "string"
},
"error": {
"type": [
"null",
"object"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
}
},
"required": [
"code",
"message",
"retryable"
],
"additionalProperties": false
},
"prompt": {
"type": "string"
},
"tip": {
"type": "string"
}
},
"required": [
"generation_id",
"model",
"modality",
"status",
"progress",
"created_at",
"credits"
],
"additionalProperties": false
}🟢get_balance
The user's Arumi credits: available, held by running generations, and owed. 1 credit = 0.01 USD.
Input Schema
{
"type": "object",
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": {
"type": "integer"
}
}🟢get_generation(generation_id)
A generation's status; once it has succeeded, links to its results, and what it charged.
Input Schema
{
"type": "object",
"properties": {
"generation_id": {
"type": "string"
}
},
"required": [
"generation_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"generation_id": {
"type": "string"
},
"model": {
"type": "string"
},
"modality": {
"type": "string"
},
"status": {
"type": "string",
"description": "queued, processing, succeeded, failed or unknown"
},
"progress": {
"type": "integer"
},
"created_at": {
"type": "string"
},
"credits": {
"type": "object",
"properties": {
"reserved": {
"type": "integer"
},
"charged": {
"type": "integer"
},
"state": {
"type": "string",
"description": "reserved while it runs; settled when charged; released when nothing was charged"
}
},
"required": [
"reserved",
"charged",
"state"
],
"additionalProperties": false
},
"outputs": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
},
"duration_ms": {
"type": "integer"
}
},
"required": [
"url",
"kind"
],
"additionalProperties": false
}
},
"text": {
"type": "string"
},
"error": {
"type": [
"null",
"object"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
}
},
"required": [
"code",
"message",
"retryable"
],
"additionalProperties": false
},
"prompt": {
"type": "string"
},
"tip": {
"type": "string"
}
},
"required": [
"generation_id",
"model",
"modality",
"status",
"progress",
"created_at",
"credits"
],
"additionalProperties": false
}🟢get_model(model)
One model's prompt limit, the reference files it takes, and its settings with their allowed values and defaults.
Input Schema
{
"type": "object",
"properties": {
"model": {
"type": "string",
"description": "the model id from list_models"
}
},
"required": [
"model"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"maker": {
"type": "string"
},
"modality": {
"type": "string"
},
"prompt": {
"type": "object",
"additionalProperties": true
},
"reference_inputs": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"kind": {
"type": "string"
},
"role": {
"type": "string"
},
"min": {
"type": "integer"
},
"max": {
"type": "integer"
},
"max_bytes": {
"type": "integer"
},
"file_types": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
}
}
},
"required": [
"name",
"kind",
"min",
"max"
],
"additionalProperties": false
},
"description": "in order: references of one kind fill these slots in turn"
},
"settings": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"values": {
"type": [
"null",
"array"
],
"items": true
},
"min": {
"type": [
"null",
"number"
]
},
"max": {
"type": [
"null",
"number"
]
},
"default": true,
"required": {
"type": "boolean"
},
"optional": {
"type": "boolean",
"description": "left out unless given"
},
"only_when": {
"type": "string"
},
"help": {
"type": "string"
}
},
"required": [
"key",
"name"
],
"additionalProperties": false
}
}
},
"required": [
"id",
"name",
"maker",
"modality",
"settings"
],
"additionalProperties": false
}🟢list_generations(limit)
The user's latest generations, newest first, made on the site or through any of their keys.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "how many, newest first (1–20, default 10)"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"generation_id": {
"type": "string"
},
"model": {
"type": "string"
},
"modality": {
"type": "string"
},
"status": {
"type": "string",
"description": "queued, processing, succeeded, failed or unknown"
},
"progress": {
"type": "integer"
},
"created_at": {
"type": "string"
},
"credits": {
"type": "object",
"properties": {
"reserved": {
"type": "integer"
},
"charged": {
"type": "integer"
},
"state": {
"type": "string",
"description": "reserved while it runs; settled when charged; released when nothing was charged"
}
},
"required": [
"reserved",
"charged",
"state"
],
"additionalProperties": false
},
"outputs": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"kind": {
"type": "string"
},
"duration_ms": {
"type": "integer"
}
},
"required": [
"url",
"kind"
],
"additionalProperties": false
}
},
"text": {
"type": "string"
},
"error": {
"type": [
"null",
"object"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
}
},
"required": [
"code",
"message",
"retryable"
],
"additionalProperties": false
},
"prompt": {
"type": "string"
},
"tip": {
"type": "string"
}
},
"required": [
"generation_id",
"model",
"modality",
"status",
"progress",
"created_at",
"credits"
],
"additionalProperties": false
}
}
}🟢list_models(modality)
The models the user can generate with, by kind (image, video, audio, text). get_model gives one model's inputs and settings.
Input Schema
{
"type": "object",
"properties": {
"modality": {
"type": "string",
"description": "only this kind: image, video, audio or text"
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"additionalProperties": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"maker": {
"type": "string"
},
"modality": {
"type": "string"
},
"featured": {
"type": "boolean"
},
"takes": {
"type": "string"
}
},
"required": [
"id",
"name",
"maker",
"modality",
"takes"
],
"additionalProperties": false
}
}
}🟢quote(model, prompt, parameters, references)
What a generation would cost, in credits, without making it. Tell the user before generating.
Input Schema
{
"type": "object",
"properties": {
"model": {
"type": "string",
"description": "the model id from list_models"
},
"prompt": {
"type": "string",
"description": "what to make; for speech models the text to read"
},
"parameters": {
"type": "object",
"description": "the model's settings by key (get_model); any left out take the model's default",
"additionalProperties": true
},
"references": {
"type": [
"null",
"object"
],
"properties": {
"images": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "asset ids of uploaded images (complete_upload), in the order of the model's image slots"
},
"videos": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "asset ids of uploaded videos, in the order of the model's video slots"
},
"audio": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "asset ids of uploaded audio files, in the order of the model's audio slots"
}
},
"description": "uploaded files the model works from",
"additionalProperties": false
}
},
"required": [
"model"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"model": {
"type": "string"
},
"credits": {
"type": "integer",
"description": "what is reserved; for a fixed price also what is charged"
},
"estimated_credits": {
"type": "integer"
},
"exact": {
"type": "boolean",
"description": "true when the price is fixed; false when the model decides part of it and only up to credits is charged"
},
"usd": {
"type": "string",
"description": "credits in US dollars at 1 credit = 0.01 USD"
}
},
"required": [
"model",
"credits",
"estimated_credits",
"exact",
"usd"
],
"additionalProperties": false
}Community
Evidence