---
name: jisu
description: Use jisu to create or transform images, video, speech and music, inspect media, and retrieve tasks, assets and CNY costs through the user's connected account.
---

# jisu

Use the connected jisu MCP tools, or the user's configured REST API and API Key. Never ask the user to paste a secret into the conversation. This skill does not install credentials or grant permission to spend money.

The API origin is `https://api.jisu.fun`; the MCP endpoint is `https://api.jisu.fun/mcp`. OAuth discovery is available at `https://api.jisu.fun/.well-known/oauth-protected-resource/mcp`. For schemas and setup, read `https://api.jisu.fun/openapi.json` and `https://docs.jisu.fun/quickstart`.

## Discover And Quote

Call `models.list`, then `models.get` for the chosen model. Only use models with `available: true`; preserve the user's requested model and specifications. The model's `input_schema` defines supported parameters. Do not invent model IDs, prices, provider compatibility or unavailable features.

Use `assets.import` for public HTTPS media. For local files, compute the exact byte size, actual MIME and lowercase SHA-256, then call `assets.upload.prepare` with `name`, `mime`, `size`, `checksum` and a stable `idempotency_key`. The local Agent sends raw bytes with HTTP PUT to the returned `upload.url`, using its returned headers. Treat `X-Upload-Token` as a secret scoped to this file; do not display it or attach the account API Key to that PUT. A remote MCP server cannot read a local path.

Call `assets.upload.complete` after the upload. Only `completed` supplies a usable `asset_id`; `uploaded` is not registered yet. Use `assets.upload.get` after an interrupted request and reuse the same upload and idempotency key. `UPLOAD_IN_PROGRESS`/`UPLOAD_BUSY` require retrying later. `UPLOAD_CONTENT_MISMATCH` allows resending the full file within the original expiry. Uploads expire in fifteen minutes; an expired upload requires a new preparation key. This flow does not support partial uploads. Repeat completion returns the original asset and does not recreate deleted resources. Reference registered platform IDs through `input.asset_ids`; obtain fresh download links through `assets.get`. REST equivalents and a local-file example are in `https://docs.jisu.fun/uploads`.

Call `pricing.quote` with the chosen model, capability, input and options. Present the model, material specifications and `max_amount` in CNY. The quote expires after five minutes. A price or model change requires a new quote.

## Execute Within Authorization

Use the user's existing spending authorization when it covers the quoted task and amount. Otherwise obtain authorization for that concrete quote before calling `tasks.create`. Respect any tighter user budget as well as the connection's cumulative CNY budget.

Create the task with `quote_id`, an optional title and an `idempotency_key` of 8 to 150 characters. Generate one key per intended creation and keep it for retries. With REST, pass the same value in the `Idempotency-Key` header. A repeated request with that key and the same body returns the original task.

Poll `tasks.get` at increasing intervals, up to 60 seconds, or resume from the task ID when the user returns. A timeout is not evidence of failure. `submission_unknown` means the original upstream submission is being checked: do not change keys or providers to resubmit it. Stop polling a terminal `succeeded`, `failed` or `canceled` task.

## Deliver And Explain Costs

A task is delivered only when its status is `succeeded` and its archived assets are available. Show the actual result, platform resource IDs and charged CNY amount. Regenerate expired signed links with `assets.get`, which returns `url`, `download_url` and `download_name`. Links last one hour and grant file access to their holder. Use stable asset IDs for follow-up work. File URLs support HEAD and single byte ranges for media playback.

Amounts are decimal strings with six places, not credits. A reservation is an amount in use; releasing it is not a refund. Read `wallet.get` and `billing.list` for authoritative balances and task charges. Never calculate charges from a supplier's credits.

`tasks.cancel` cancels local queued tasks atomically or requests cancellation from a supported Beatra channel. A REST 202 or `cancellation.status` of `requested`/`checking` is not confirmation that execution stopped. Continue querying the original task; do not create a replacement or promise released funds. Unsupported channels return `CANCEL_UNAVAILABLE`; `refused` and `unconfirmed` cancellation states also keep the original task running or being checked. Only task status `canceled` confirms cancellation and released reservation. A task that succeeds first is archived and billed normally. Repeated cancellation requests reuse the existing intent.

`assets.delete` is destructive and cannot remove a resource used by an active task. It immediately invalidates access and queues retriable storage cleanup; repeated deletion is idempotent. It preserves task and billing records. Obtain authorization for a deletion if the user did not already request it.

Voice clones are private to their owner and original provider channel. Social operations require a separately configured upstream authorization. Check the live tools and model directory for availability; these capabilities must not be represented as working solely because this document mentions them.

Authentication or scope errors require reconnecting or adjusting the intended permission. Insufficient balance, unavailable price or an unavailable model is a stopping condition. Do not switch accounts, alter budgets, silently substitute a model or imply that recharging is enabled.
