Todas as tools MCP
Esta referência descreve as 18 tools registradas no Infinity Flow. Os caminhos REST são relativos a https://infinityflow.stream/api/v1. Argumentos são objetos JSON estritos: campos desconhecidos são rejeitados. IDs e requestKeys dos exemplos são placeholders; use IDs retornados pela sua conta e gere um UUID novo para cada nova intenção de criação.
Índice, permissões e exemplos de argumentos
Seção intitulada “Índice, permissões e exemplos de argumentos”Cada scope listado é obrigatório, além de plano base ativo e direito à automação. {} significa sem argumentos. Os nomes de saída correspondem aos formatos exatos abaixo.
| Tool | Scope | REST | Exemplo de argumentos | Saída |
|---|---|---|---|---|
get_account |
account:read |
GET /account |
{} |
Account |
get_usage |
usage:read |
GET /usage |
{} |
Usage |
list_models |
account:read |
GET /models |
{} |
Models |
list_projects |
projects:read |
GET /projects |
{} |
Projects |
create_project |
projects:write |
POST /projects |
{"requestKey":"11111111-1111-4111-8111-111111111111","name":"Campaign"} |
CreatedProject |
update_project |
projects:write |
PATCH /projects/{id} |
{"id":"22222222-2222-4222-8222-222222222222","name":"Campaign 2"} |
OK |
delete_project |
projects:write |
DELETE /projects/{id} |
{"id":"22222222-2222-4222-8222-222222222222"} |
OK |
list_references |
references:read |
GET /references |
{} |
References |
upload_reference |
references:write |
POST /references |
{"requestKey":"33333333-3333-4333-8333-333333333333","projectId":"22222222-2222-4222-8222-222222222222","filename":"reference.png","data":"BASE64_IMAGE_BYTES"} |
UploadedReference |
delete_reference |
references:write |
DELETE /references/{id} |
{"id":"33333333-3333-4333-8333-333333333333"} |
OK |
create_video |
generations:write |
POST /generations |
{"requestKey":"44444444-4444-4444-8444-444444444444","prompt":"A forest at sunrise","aspect":"16:9"} |
GenerationResult |
create_image |
generations:write |
POST /generations |
{"requestKey":"55555555-5555-4555-8555-555555555555","prompt":"A forest at sunrise","aspect":"9:16"} |
GenerationResult |
create_batch |
generations:write |
POST /batches |
{"requestKey":"66666666-6666-4666-8666-666666666666","items":[{"prompt":"A forest at sunrise","aspect":"16:9","mediaKind":"video"}]} |
BatchResult |
get_batch |
generations:read |
GET /batches/{id} |
{"id":"66666666-6666-4666-8666-666666666666"} |
BatchResult |
get_generation |
generations:read |
GET /generations/{id} |
{"id":"77777777-7777-4777-8777-777777777777"} |
GenerationResult |
list_generations |
generations:read |
GET /generations |
{"projectId":"22222222-2222-4222-8222-222222222222"} |
Generations |
cancel_generation |
generations:write |
POST /generations/{id}/cancel |
{"id":"77777777-7777-4777-8777-777777777777"} |
OK |
get_download_url |
media:read |
GET /generations/{id}/outputs/0/download-ticket |
{"id":"77777777-7777-4777-8777-777777777777"} |
DownloadTicket |
Campos de entrada por tool
Seção intitulada “Campos de entrada por tool”| Tools | Campos obrigatórios | Opcionais e comportamento |
|---|---|---|
get_account, get_usage, list_models, list_projects, list_references |
Nenhum | Nenhum |
create_project |
requestKey: UUID; name: string sem espaços nas extremidades, 1–100 caracteres |
Nenhum; mesma chave/nome recupera a criação original |
update_project |
id: UUID do projeto; name: string sem espaços nas extremidades, 1–100 caracteres |
Nenhum |
delete_project |
id: UUID do projeto |
Nenhum; trabalho não concluído ou referências usadas por pedidos pendentes podem bloquear a exclusão |
upload_reference |
requestKey: UUID; projectId: UUID; filename: 1–150 caracteres; data: bytes da imagem em base64 |
Não recebe URL remota ou data URL; até 11.200.000 caracteres base64 e 8 MiB decodificados; tipo real da imagem validado |
delete_reference |
id: UUID da referência |
Nenhum; referências usadas por trabalho pendente ficam protegidas |
create_video, create_image |
requestKey: UUID e campos obrigatórios de GenerationInput |
Opcionais de GenerationInput; não envie mediaKind nem model: a tool escolhe o tipo |
create_batch |
requestKey: UUID; items: array com 1–100 objetos GenerationInput |
Também respeita o plano: Creator 3, Pro 20, Enterprise 100; sem requestKey em cada item |
get_batch |
id: UUID do lote |
Nenhum |
get_generation, cancel_generation, get_download_url |
id: UUID da geração |
Nenhum; índice de saída sempre 0 |
list_generations |
Nenhum | cursor: string até 100 caracteres, repita nextCursor sem alterar; projectId: UUID para filtrar; página fixa de até 24 itens |
GenerationInput
Seção intitulada “GenerationInput”| Campo | Obrigatoriedade | Tipo e valores aceitos |
|---|---|---|
prompt |
Obrigatório | String não vazia, sem espaços nas extremidades, até 4.000 caracteres |
aspect |
Obrigatório | 16:9 ou 9:16 |
title |
Opcional | String até 100 caracteres |
projectId |
Opcional | UUID do seu projeto privado |
referenceIds |
Opcional | Array de até 3 UUIDs distintos de referência |
referenceId |
Opcional | UUID de uma referência, campo de compatibilidade |
durationSeconds |
Opcional | Somente 10; não habilita duração arbitrária |
outputCount |
Opcional | Somente 1; use lote para vários jobs |
mediaKind |
Somente itens do lote | video ou image; omitido significa vídeo |
model |
Somente itens do lote | studio-video ou studio-image; deve corresponder ao tipo |
Use uma convenção de campo de referência de forma consistente. As entradas continuam sujeitas à validação de ownership e geração; aceitar o schema não contorna essas verificações. A tool de imagem aceita os campos compartilhados de duração/saída, mas duração não configura animação de imagem. Consulte list_models; não existe campo público de resolução.
Envelopes de sucesso e falha
Seção intitulada “Envelopes de sucesso e falha”Uma tool bem-sucedida retorna o JSON REST sem alteração em structuredContent.result e o mesmo JSON serializado em content[0].text:
{ "structuredContent": { "result": { "generation": { "id": "77777777-7777-4777-8777-777777777777", "state": "queued" } } }, "content": [ { "type": "text", "text": "{\"generation\":{\"id\":\"77777777-7777-4777-8777-777777777777\",\"state\":\"queued\"}}" } ]}A geração foi abreviada para ilustrar o envelope; o formato completo está abaixo. Criações são aceitas de forma assíncrona (status REST 202), não concluídas na chamada. O payload da tool não expõe o status HTTP REST nem seu header Location.
Falhas de execução retornam isError: true e bloco textual contendo o JSON de erro. Exceções usam {error:{code,message,requestId,details?,usage?}}. Erros de domínio delegados podem retornar o formato existente {error: string}; confira isError e interprete o corpo sem presumir campos iguais em todos os erros. Erros de protocolo/schema e autenticação HTTP ocorrem fora do envelope de execução da tool.
{ "isError": true, "content": [ { "type": "text", "text": "{\"error\":{\"code\":\"INSUFFICIENT_SCOPE\",\"message\":\"This credential does not permit this operation.\",\"requestId\":\"88888888-8888-4888-8888-888888888888\"}}" } ]}Formatos completos de saída
Seção intitulada “Formatos completos de saída”Estes formatos descrevem structuredContent.result. ? significa opcional, null é valor JSON; timestamps ISO são strings UTC ISO 8601. Timestamps de projeto/referência são milissegundos Unix, não strings ISO.
Account = { account: { id: UUID, name: string }, entitlements: { planId: "legacy"|"creator"|"pro"|"enterprise"|null, active: boolean, automationEnabled: boolean, dailyVideoLimit: integer|null, maxBatchSize: integer, maxOutstandingJobs: integer, maxActiveGenerations: 1, priority: integer, legacyPriceLocked: boolean, basePriceMinor: integer|null, currency: string|null, market: string|null, intervalMonths: integer|null, validFrom: epochMilliseconds, validUntil: epochMilliseconds|null, policyVersion: string }}Usage = { date: "YYYY-MM-DD", timeZone: "America/Sao_Paulo", resetsAt: ISO, limit: integer|null, reserved: integer, consumed: integer, remaining: integer|null}Models = { models: [ { id: "studio-video", kind: "video", durationSeconds: 10, aspects: ["16:9","9:16"], maxReferences: 3 }, { id: "studio-image", kind: "image", aspects: ["16:9","9:16"], maxReferences: 3 }] }Projects = { projects: [{id: UUID, name: string, createdAt: epochMilliseconds, updatedAt: epochMilliseconds}] }CreatedProject = { project: {id: UUID, name: string, created: epochMilliseconds, updated: epochMilliseconds} }References = { references: [{id: UUID, projectId: UUID, filename: string, mime: string, size: integer, createdAt: epochMilliseconds}] }UploadedReference = { reference: {id: UUID, filename: string} }GenerationResult = { generation: Generation }BatchResult = { batch: {id: UUID, generations: Generation[]} }Generations = { generations: Generation[], nextCursor: string|null }OK = { ok: true }DownloadTicket = { url: string }Generation = { id: UUID, projectId: UUID, batchId?: UUID|null, batchIndex?: integer|null, title: string, mediaKind: "video"|"image", model: "studio-video"|"studio-image", aspect: "16:9"|"9:16", state: "queued"|"processing"|"succeeded"|"failed"|"cancelled"|"attention_required", createdAt: ISO, updatedAt: ISO, readyAt: ISO|null, expiresAt: ISO|null, outputs: [{ index: 0, mime: string, kind: "video"|"image", size: integer, downloadAvailable: boolean, expiresAt: ISO, downloadUrl: string|null, playUrl: string|null, thumbnailUrl: string|null }]}outputs fica vazio antes do resultado disponível. URLs dentro de Generation apontam para endpoints REST autenticados; a URL de get_download_url é assinada temporariamente, com validade de até 90 segundos, reduzida perto da expiração da mídia. Nunca encaminhe o header Authorization Infinity Flow para o host de armazenamento. Mídia disponível por 24 horas do ready time; solicite novo ticket nessa janela se necessário.
list_projects retorna até 100 registros; list_references, até 100. Não retornam cursor. list_generations retorna até 24 e nextCursor anulável. get_batch preserva a ordem de apresentação dos itens; não promete execução paralela nem naquela ordem.
Regras operacionais e erros
Seção intitulada “Regras operacionais e erros”Persista requestKey e payload antes de chamar create_project, upload_reference, create_video, create_image ou create_batch. MCP transforma requestKey no header REST Idempotency-Key. Reutilize os dois após timeout; alterar o payload com a mesma chave produz IDEMPOTENCY_CONFLICT. IDs JSON-RPC não são chaves duráveis de geração. Renomear, excluir e cancelar não recebem requestKey.
Admissão do lote é tudo ou nada; resultados posteriores são por geração. Cancelamento retorna {ok:true} quando permitido, não um novo objeto Generation. Lease ativo ou submissão iniciada podem gerar conflito; cancelamento não repete nem cancela cegamente trabalho pago incerto.
Erros comuns: INVALID_CREDENTIAL (autenticação expirada/revogada), AUTOMATION_REQUIRED (plano/adicional), INSUFFICIENT_SCOPE, REQUEST_RATE_LIMIT, DAILY_VIDEO_LIMIT, BATCH_LIMIT, INVALID_PARAMETER, INVALID_CURSOR, INVALID_REFERENCE, REFERENCE_TOO_LARGE, IDEMPOTENCY_CONFLICT e NOT_FOUND. Alguns conflitos de domínio usam REQUEST_REJECTED. Consulte uso/reset na falha de cota; não troque de chave para contorná-la. Trate falhas HTTP de autenticação/taxa antes de interpretar resultado de tool.
Para transporte e autorização: conexão e OAuth. Detalhes REST e erros estão na referência da API.