Skip to main content
Glama

sapiens_character

Personagens (character sheets) do Sapiens (a tabela influencers): personagem reutilizável com imagens (pra character-lock em geração) + alma (systemPrompt), tudo amarrado à conta do dono do token (sem admin). Sub-actions: list_public (catálogo global de personagens públicos do Explorar; cada um traz mainImageUrl/imageUrls usáveis direto como referenceImageUrls em sapiens_image; sem custo, sem login), get (detalhe de 1 por characterId, público+ativo qualquer um vê, draft/privado só o dono; systemPrompt só volta pro dono), list_mine (os personagens do próprio user, inclui drafts/privados), create (cria rascunho na conta: name + gender + opcional form/title/systemPrompt), add_image (adiciona imagem ao próprio personagem via imageUrl público OU sourceImageId da galeria; 1ª vira principal), set_card (edita alma/título/lema em inglês/nome/nome por extenso/forma do próprio), set_presence (escreve onde o personagem existe FORA da casa: redes sociais por handle, Fanvue, site e o email dele, este último privado), set_passport (escreve o PASSAPORTE dele: como ACERTAR este ser, que é outra coisa de quem ele é. Guarda o descriptor de geração em inglês pra colar verbatim, o negative travado que fica sempre ligado, os locks (o que TRAVA nele, um por entrada, que é a lista que vira as perguntas da conferência), as refs por PAPEL (proporção, rosto, tatuagem: ref sem papel ninguém sabe usar), as recipes medidas por tipo de peça (com o prompt VERBATIM, porque o valor está na palavra exata que funcionou) e o discarded, o que já foi recusado. Esse último não é enfeite: o motor traz de volta o que ninguém proibiu, então ideia descartada sem negativo escrito volta sozinha na leva seguinte. É MERGE por campo, então mandar só o negative não apaga o descritor, e campo vazio apaga. Só o DONO lê: receita de produção não sai em personagem público. Em action=get ele volta em duas formas, passport (campo a campo, o que se reedita) e passportPrompt (o bloco já montado pra colar). Preencha sempre que uma rodada medir algo que a próxima não deve redescobrir: é o que faz a receita viajar pra fora do repo), activate (tira do rascunho e libera o personagem pra USAR nas gerações do dono; exige ≥1 imagem. NÃO torna público: quem publica é set_visibility, e ativar é gesto reversível e privado), set_visibility (isPublic true=Explorar+slug / false=privado), set_hidden (hidden true tira o personagem da TELA do dono: some da lista de personagens e as peças geradas com ele saem da galeria de fotos, vídeos e rascunhos do dono, voltando pelo filtro Ocultos; hidden false devolve. É o gesto de quem vai compartilhar tela. Não despublica, não apaga, não sai dos seletores de geração, e personagem oculto não publica até ser mostrado. Grátis. O list_mine traz hidden em cada personagem). GESTÃO de imagem (por url, pegue as urls atuais em action=get campo imageUrls): remove_image (tira uma), set_main_image (define a principal), reorder_images (nova ordem via orderedUrls, posição 0=principal), e delete (apaga o personagem, permanente). FORMA (form, o que tipo de CORPO ele tem: human default, humanoid, animal (bicho real), creature (ser inventado), object, abstract): não é enfeite de cadastro, é o que a ficha, as figurinhas e o vídeo leem pra decidir se descrevem rosto e mãos ou silhueta e postura, e é ele que impede uma criatura de voltar desenhada como pessoa. Mande no create sempre que o personagem não for gente; personagem que já existe sem ele conserta com set_card form=creature. Ausente = human, que é o que a casa desenhava antes do campo existir. NOME E NOME POR EXTENSO (name e fullName): name é como o personagem é CHAMADO e é o que toda tela desenha; fullName é o nome inteiro, pra quem tem apelido ('Crow Girl' na tela, 'Kaia Crowe' por extenso). Um não substitui o outro, e o extenso não mexe no slug da página nem no cartão de nome do vídeo: batizar personagem que já existe não muda endereço publicado nem assinatura de peça que já saiu. Vem em action=get e list_mine no campo fullName (null = ainda sem nome por extenso). TRAÇO (style, em que TÉCNICA ele é feito: auto default, realista, anime, manhwa, 3d, custom): irmão da forma, e a divisão é limpa, a forma diz que CORPO é esse e o traço diz como ele é DESENHADO. As mesmas três peças leem daqui. No 'auto' a peça não afirma técnica nenhuma e as imagens de referência mandam; 'realista' é fotografia, 'anime' é cel shading com contorno de tinta, 'manhwa' é pintura de webtoon, '3d' é render com material e oclusão, 'custom' usa a linha escrita em styleNote (até 140 caracteres, ex: aquarela sobre papel texturizado). Mande sempre que o personagem tiver técnica definida: até ago/2026 a ficha cravava vocabulário de desenho e devolvia personagem fotográfico virado em ilustração. Conserto sem custo em quem já existe: set_card style=realista. PRESENÇA (set_presence, de graça): o ENDEREÇO do personagem, o que faltava pra ele existir fora da ficha. socials é {rede: handle} nas redes instagram, tiktok, youtube, x, threads, bluesky, twitch, spotify, fanvue, patreon, onlyfans, telegram; websiteUrl é o site dele e email é o email do personagem, o que cadastra e recupera as contas dele nas redes. As redes e o site são PÚBLICOS; o email é PRIVADO e fica só com o dono, mesmo com o personagem publicado, porque email é chave de conta e isca de spam, não canal de contato. Em action=get e list_public de personagem de OUTRA pessoa, o campo simplesmente não vem. É MERGE: mandar {fanvue:'helen'} não apaga o instagram, e pra apagar uma rede se manda ela vazia. O que volta em action=get são as duas formas, presence (o handle cru, que é o que se reedita) e presenceLinks (o link já montado, pra mostrar sem remontar URL na mão). Vale a pena preencher quando o personagem TEM conta de verdade: é o que separa uma ficha de um ser com endereço, e a página pública dele desenha as redes e o site (nunca o email). FICHA (generate_sheet, COBRA 650 Sinapses, o preço do GPT Image 2.5 Sunburst, que desenha; se ele recusar, a ficha refaz no Nano Banana 2.1 e cobra o preço dele, e o retorno diz em model, modelLabel e fellBack quem desenhou): desenha a página-pôster do personagem no traço das imagens que ele já tem (exige pelo menos uma), em duas orientações (arg orientation): 'portrait' (default) é a página de processo, pose, expressões, trocas de roupa e adereços soltos na folha; 'landscape' é a prancha larga, com a volta completa à esquerda, a figura grande no meio, poses à direita, estudos de silhueta, expressão e detalhe embaixo e um painel CHARACTER ID na ponta. A personalidade sai da alma (systemPrompt) e é ela que escolhe roupa e objeto, então personagem com alma escrita rende ficha melhor. Cada geração é um estilo NOVO e elas acumulam no personagem (campo sheetUrls em action=get), nenhuma apaga a anterior, e a ficha já entra na galeria dele como referência das próximas gerações. É geração síncrona: se voltar Timeout, cheque action=get antes de repetir, senão cobra duas vezes. STICKERS (generate_stickers, COBRA 550 Sinapses): desenha 5 stickers do personagem DE UMA VEZ. Uma folha só, em 2K, com as cinco figuras separadas sobre um fundo verde chroma, recortada por código em peças 512x512 transparentes abaixo de 100KB (o teto do WhatsApp). É por isso que sai o preço de UMA imagem em 2K e não de cinco: quem paga é a folha. As peças entram no pack do personagem (um por personagem, os lotes acumulam) e já ficam no picker de expressão do dono, no chat e no Fórum. Arg moods: até 5 humores do vocabulário comum por slug (kkkkk, amei, isso, hmm, chega, que, aff, bora, socorro, seinao, valeu, ainao, seila, ideia, calma, contatudo, perfeito, euavisei, naovourir, zzz, somaisum, sextou, merecido, quedia, tudobem); faltando, a casa completa com os mais usados. Arg hint: direcionamento curto do autor (roupa, adereço, clima), até 140 caracteres. Arg stickerTier: 'folha' (default) é esse lote de cinco, desenhado no Nano Banana 2.1; 'unica' (COBRA 900 Sinapses) desenha UM sticker por vez no Gemini 3 Pro, o motor mais fiel da casa, com a figura sozinha no quadro e o dobro de pixel por peça, e leva só o PRIMEIRO mood da lista. Pra encher o pack, folha; pra traço difícil ou a reação que vira a cara do personagem, a unica. Ao oferecer a escolha, diga o NOME DO MOTOR e o que ele troca: adjetivo vago de acabamento não informa nada a quem vai pagar. Os dois caem no MESMO pack e acumulam. Sem legenda queimada na imagem, de propósito: modelo erra acento em português, então o rótulo fica na row e serve de busca no picker. Exige pelo menos uma imagem no personagem (é dela que sai a cara) e é geração síncrona: se voltar Timeout, cheque sapiens_gallery antes de repetir. Quando a resposta vem com ok=false, a folha foi gerada e paga mas o corte falhou; ela está na galeria e o recorte de novo é de graça, pela web. Publicar o pack na vitrine e o carimbo da casa (que é o que põe no picker de todo mundo) são gestos da web, não desta tool. PLACAS (generate_plates, COBRA 550 Sinapses): seis ângulos do mesmo rosto numa geração só, no Nano Banana 2.1 em 2K, recortados por código em seis referências com PAPEL: perfil, camera-alta, camera-baixa, frontal, cabeca-baixa e outro-lado, cada um com uma expressão diferente. Não é vitrine (isso é a ficha): é a referência feita pra máquina. Referência trava o ângulo da câmera, então quando a cena pede perfil, passe a placa de perfil em referenceImageUrls. As placas ficam FORA de imageUrls de propósito, porque placa de perfil como referência genérica puxa toda peça pro perfil; elas voltam em action=get no campo plates ([{role, url}]). As placas ACUMULAM: cada geração soma seis, e a que não serve sai com remove_image. Em plates o lote mais novo vem primeiro, cada lote na ordem da grade, então a primeira placa de um papel é a mais nova. Sai das fotos do personagem (exige pelo menos uma) e, quando ele tem passaporte, o descritor dele entra no pedido. Só personagem com rosto de gente (form human ou humanoid): pra bicho, criatura, objeto ou forma abstrata o servidor recusa antes de cobrar. O perfil puro e a câmera alta às vezes voltam amolecidos pro frontal; quando esses dois ângulos importarem, confira as placas antes de usar. Geração síncrona: se voltar Timeout, cheque action=get antes de repetir. Resposta com ok=false quer dizer grade gerada e paga com o corte falho; o recorte de novo é de graça, pela web. CHARACTER VIDEO (a ficha que anda): o personagem atravessa 6 mundos em 12s, trocando de roupa em cada um, com som gerado junto, e o último plano fecha a peça com ele parando e encarando a câmera. A peça volta FECHADA pelas duas portas (tela e agente), sem ninguém pedir: o personagem se apresenta no cartão de nome por cima do fim do último plano, com o LEMA em inglês embaixo (o campo titleEn, escrito uma vez em set_card), e só depois a casa assina. Quem não tem lema recebe o subtítulo que o roteiro inventou naquele take, e ele muda no take seguinte. O fecho é asset, não geração: zero Sinapse a mais, e é fail-open, então a resposta traz closed e nameCard dizendo o que entrou de verdade em vez de prometer um cartão que não está no arquivo. Pra colocar esse cartão num vídeo que JÁ existe, o caminho é a ficha do take na web (gaveta do fecho, 'Apresentação do personagem'), também sem custo. Exige FICHA gerada (é dela que saem a cara e o guarda-roupa), não só imagem. Duas actions, nesta ordem: plan_video (COBRA 50 Sinapses) devolve os 6 planos que a alma do personagem escolheu, com ambiente, ato, enquadramento e roupa. Cada plano vem nas duas línguas: em inglês (setting/act/wardrobe, que é o que vai pro motor) e em português (settingPt/actPt/wardrobePt). MOSTRE a versão em português pro autor, o público da casa é brasileiro e roteiro que ele lê de través não é roteiro aprovado; peça de novo quantas vezes ele quiser, porque trocar sai por 50 e o take errado sai por milhares. replan_shot (COBRA 15 Sinapses) reescreve UM plano e não toca nos outros cinco: os seis são cenas independentes, então quando o autor gosta de quatro e implica com um, troque só aquele em vez de sortear tudo de novo (mande os 6 planos em shots, o número em shotIndex, e o que ele quer diferente em shotHint; volta só o plano trocado, e é você que remonta o roteiro). Depois generate_video (COBRA) renderiza, com os planos aprovados no arg shots e o MOTOR no arg videoTier: 'draft' (5.400 Sinapses) é o Seedance 2.0 Mini, metade do preço, que tropeça em mão, pouca luz e câmera rápida, e 'final' (8.640 Sinapses) é o Seedance 2.0 Fast, que segura o que o Mini erra. A peça é a MESMA nos dois (mesmos 6 planos, 12s, 720p, com som), então ofereça pelo nome do motor e pelo que ele troca, nunca por adjetivo vago de acabamento. Vertical ou horizontal pelo arg orientation. Chamar generate_video SEM shots funciona, mas escreve um roteiro novo às cegas e cobra igual: não faça isso sem o autor ter visto o que vai receber. É geração demorada: se voltar Timeout, cheque sapiens_gallery antes de repetir. Resposta com pending: true (sem url) quer dizer ACEITO E COBRADO: o servidor continua renderizando sozinho (até 25 min) e a peça chega na ficha já fechada; NÃO repita a chamada, isso cobraria de novo, confira depois em sapiens_gallery. Fluxo de criação: create → add_image (1+) → set_card (opcional) → activate. PARE AÍ. O personagem nasce e continua PRIVADO, e é assim que ele serve pro dono: dá pra gerar, referenciar e iterar sem ninguém ver. set_visibility isPublic=true é o gesto de PUBLICAR no Explorar, com slug público, e nÃO é passo de fluxo: só chame quando o dono pedir pra publicar aquele personagem, com essas palavras. Na dúvida, não publique e pergunte. Pra usar um personagem público como referência numa geração, pegue mainImageUrl em list_public/get e passe em sapiens_image referenceImageUrls.

Input Schema

NameRequiredDescriptionDefault
formNoPra create/set_card: que tipo de CORPO o personagem tem. 'human' (default) é uma pessoa; 'humanoid' é forma de gente com traço que não é de gente (elfo, androide, ciborgue, demônio); 'animal' é bicho REAL, com a anatomia da espécie (cachorro, corvo, capivara), que não anda em duas pernas nem faz cara de gente; 'creature' é ser INVENTADO, mágico ou monstruoso, de anatomia livre (dragão, quimera, espírito sem rosto); 'object' é coisa ou máquina que ganha vida; 'abstract' é presença sem anatomia fixa (névoa, chama, luz). Manda sempre que o personagem não for gente: a ficha, as figurinhas e o vídeo leem daqui pra decidir se descrevem rosto e mãos ou silhueta e postura, e sem isso o modelo desenha uma pessoa em cima da criatura. Ausente no create = human.
hintNoPra generate_stickers: direcionamento curto do autor (roupa, adereço, clima). Tempera a folha, não substitui a receita. Máximo 140 caracteres.
nameNoPra create (obrigatório) ou set_card (renomear): nome do personagem. É o APELIDO, o nome pelo qual ele é conhecido, e é o que TODA tela desenha.
refsNoPra set_passport: as referencias por PAPEL, [{role, url, imageId}]. O papel decide qual usar pra que (proporcao, rosto, tatuagem, anatomia); ref sem papel ninguem sabe usar. A ref manda mais que adjetivo.
emailNoPra set_presence: o email do personagem, o que cadastra e recupera as contas dele nas redes. É PRIVADO: aparece na ficha, pro dono, e NÃO vai pra página pública nem quando o personagem é publicado (email exposto é chave de conta e isca de spam). String vazia apaga.
limitNoPra list_public: quantos retornar (default 100, max 200).
locksNoPra set_passport: o que TRAVA nele, um item por entrada (tatuagem nos dois antebracos, choker de argola). Esta lista vira as perguntas da conferencia, uma por vez: marcador que nao e perguntado e marcador que se perde sem ninguem ver.
moodsNoPra generate_stickers: até 5 humores do vocabulário comum, por slug. Faltando ou inválido, a casa completa com os mais usados. No tier 'unica' só o PRIMEIRO da lista é desenhado. Slugs: kkkkk, amei, isso, hmm, chega, que, aff, bora, socorro, seinao, valeu, ainao, seila, ideia, calma, contatudo, perfeito, euavisei, naovourir, zzz, somaisum, sextou, merecido, quedia, tudobem.
shotsNoPra generate_video e replan_shot: os 6 planos APROVADOS pelo autor (o que voltou de plan_video, com as edições dele). Precisa ser exatamente 6, na ordem. Devolva os planos INTEIROS, com os campos pt junto, como vieram. Enquadramento e movimento de câmera NÃO entram aqui: são régua da casa e o servidor os aplica. Sem este campo o generate_video escreve um roteiro novo e cobra igual.
styleNoPra create/set_card: em que TÉCNICA o personagem é feito. 'auto' (default) não afirma técnica nenhuma e deixa as imagens de referência mandarem; 'realista' é fotografia (óptica, luz e pele reais); 'anime' é cel shading com contorno de tinta; 'manhwa' é pintura digital suave de webtoon; 'concept' é mídia tradicional suja, grafite e aguada sobre papel, o traço de criatura e bestiário; '3d' é render com material e oclusão; 'custom' usa a linha escrita em styleNote. Irmão de `form`, e a divisão é limpa: a forma diz que CORPO é esse, o traço diz como ele é DESENHADO. Mande sempre que o personagem tiver técnica definida: até ago/2026 a ficha cravava vocabulário de desenho e devolvia personagem fotográfico virado em ilustração. Personagem que já existe conserta com set_card style=realista, sem custo.
titleNoPra create/set_card: subtítulo curto (ex: 'A guia do Sapiens').
actionYes
genderNoPra create: 'masculino' | 'feminino' | 'nao-binario'. Default 'nao-binario'.
hiddenNoPra set_hidden: true = oculta o personagem da tela do dono (some da lista de personagens e as peças dele saem da galeria de fotos e vídeos do dono, voltando pelo filtro Ocultos), false = mostra de novo. Não mexe em isPublic.
isMainNoPra add_image: marca esta como a imagem principal (avatar). 1ª imagem já vira main sozinha.
hashtagNoPra set_presence: a HASHTAG do personagem, sem #, numa palavra ('AriaMaiven'). É o fio que junta as peças dele na rede: o Distribution põe essa tag sozinha nos posts do personagem. Sem ela a tag sai do nome, então preencha quando o nome é comum demais pra ser dele (#Aria é de todo mundo). Espaço e pontuação o servidor tira. String vazia apaga.
recipesNoPra set_passport: a receita medida por tipo de peca, [{kind, engine, prompt, note}]. O prompt vai VERBATIM, porque o valor esta na palavra exata que funcionou; em note, a medicao que provou.
socialsNoPra set_presence: as contas dele por rede, {rede: handle}. Redes aceitas: instagram, tiktok, youtube, x, threads, bluesky, twitch, spotify, fanvue, patreon, onlyfans, telegram. Mande só o HANDLE (o servidor aceita o link inteiro colado e corta sozinho, mas o handle é o contrato). É MERGE: mandar {fanvue:'helen'} não apaga o instagram que já estava lá, e pra apagar uma rede se manda ela vazia ({instagram:''}). Rede fora da lista é ignorada em silêncio.
titleEnNoPra create/set_card: o MESMO subtítulo em inglês, o lema do personagem. Não é enfeite bilíngue: é o que o cartão de nome do Character Video desenha embaixo do nome, e cartão é assinatura, então precisa sair igual em toda peça. Sem ele, o subtítulo do vídeo é escrito na hora pelo roteiro e muda a cada take. Teto de 48 caracteres, que é o que cabe numa linha do cartão.
fullNameNoPra create/set_card: o nome do personagem POR EXTENSO, quando o `name` é um apelido ('Crow Girl' é como ela é chamada, 'Kaia Crowe' é quem ela é). Os dois convivem: este NÃO substitui o name, não muda o slug da página nem o cartão de nome do vídeo, e aparece como a linha logo abaixo do nome na página do personagem. String vazia apaga. Até 80 caracteres. Ausente = personagem que se chama de um jeito só.
imageUrlNoPra add_image: URL pública da imagem (Bunny CDN / Convex storage). Use a `url` que sapiens_image/sapiens_gallery devolvem. Pra remove_image/set_main_image: a url da imagem JÁ no personagem (pegue via action=get, campo imageUrls, ou sheetUrls pra apagar uma ficha, ou plates[].url pra apagar uma placa).
isPublicNoPra set_visibility: true = público no Explorar (gera slug), false = privado.
negativeNoPra set_passport: os negativos travados deste personagem, sempre ligados em toda geracao. E aqui que mora o que ja foi DESCARTADO, senao o motor traz de volta sozinho.
shotHintNoPra replan_shot: o que o autor quer diferente naquele plano ('outro clima', 'sem água', 'de noite'). Tempera o plano novo, não substitui a régua da peça. Opcional: sem ele, o servidor só escreve outro plano.
discardedNoPra set_passport: o que foi descartado, [{what, why}]. Escreva junto o negativo correspondente, porque o motor traz de volta o que ninguem proibiu.
shotIndexNoPra replan_shot: qual dos 6 planos reescrever (1 a 6). Os outros cinco ficam exatamente como estão.
styleNoteNoPra create/set_card, só vale com style='custom': o traço em UMA linha (ex: 'aquarela sobre papel texturizado, cor lavada'). Até 140 caracteres; sem ela o custom cai no automático.
videoTierNoPra generate_video: qual MOTOR desenha. 'draft' (default) é o Seedance 2.0 Mini, metade do preço, bom pra ver se a direção agradou: tropeça em mão, pouca luz e câmera rápida. 'final' é o Seedance 2.0 Fast, que segura o que o Mini erra. Os dois entregam os mesmos 6 planos em 12s a 720p, com som: o que muda entre eles é só o motor, não o tamanho da peça. Ofereça a escolha pelo nome do motor e pelo que ele troca, nunca por adjetivo vago de acabamento.
descriptorNoPra set_passport: o descritor de geracao dele em INGLES, pra colar verbatim no prompt. E o texto que faz o motor desenhar ESTE ser e nao um parecido. Manda vazio pra apagar.
websiteUrlNoPra set_presence: o site próprio do personagem. Aceita sem protocolo ('helenai.wtf'), que o servidor completa com https. String vazia apaga.
characterIdNoID do personagem (influencers:_id). Obrigatório em get/add_image/set_card/activate/set_visibility/generate_sheet. Descubra via list_public ou list_mine.
orderedUrlsNoPra reorder_images: as urls das imagens do personagem na nova ordem (posição 0 = principal). url ausente vai pro fim, nenhuma se perde. Pegue as urls atuais via action=get.
orientationNoPra generate_sheet: 'portrait' (default) é a página de processo vertical, composição livre, sem texto. 'landscape' é a prancha larga: volta completa à esquerda, figura grande no meio, poses à direita, estudos de silhueta/expressão/detalhe embaixo e painel CHARACTER ID na ponta. As duas acumulam no personagem, uma não substitui a outra.
stickerTierNoPra generate_stickers: qual dos dois caminhos. 'folha' (default) é o lote, cinco stickers de UMA folha 2K no motor rápido, o preço de uma imagem por cinco peças. 'unica' desenha UM sticker por vez no motor mais fiel da casa (Gemini 3 Pro), com a figura sozinha no quadro: custa mais por peça e é o que salva traço difícil ou reação que vai virar a cara do personagem. Na dúvida, ou pra encher o pack, use 'folha'.
systemPromptNoPra create/set_card: a 'alma' do personagem (personalidade, jeito de falar, contexto). Usado no chat e como guia de geração.
sourceImageIdNoPra add_image: alternativa ao imageUrl, o ID de imagem da SUA galeria (generatedImages:_id, via sapiens_gallery action=list). O backend resolve a url e confere que é sua.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / sourceImageId / description
      Previous value: -"Pra add_image: alternativa ao imageUrl — ID de imagem da SUA galeria (generatedImages:_id, via sapiens_gallery action=list). O backend resolve a url e confere que é sua."New value: +"Pra add_image: alternativa ao imageUrl, o ID de imagem da SUA galeria (generatedImages:_id, via sapiens_gallery action=list). O backend resolve a url e confere que é sua."
  2. First observed

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark the tool as write-capable and open-world, but the description discloses crucial behavior: Sinapses costs for generation actions, synchronous timeout handling, pending:true meaning accepted and billed, email privacy, hidden effects, and permanent deletion. This is substantially beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely long, with large prose blocks that repeat cost and privacy warnings and restate schema details. It front-loads the resource and action list, but is not concise or easily scannable for a 36-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 21 sub-actions, 36 parameters, no output schema, and minimal annotations, the description is remarkably complete: it covers creation flow, costs, failure modes, return fields such as passport/passportPrompt, hidden, plates, and cross-tool handoffs. An agent has enough information to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 97%, so the input schema already documents nearly every parameter in detail. The description reinforces relationships like form versus style and name versus fullName, but mostly repeats action-level semantics rather than adding new parameter syntax or constraints, fitting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely as 'Personagens (character sheets) do Sapiens' and enumerates the full set of sub-actions. It also distinguishes the tool from siblings such as sapiens_image and sapiens_gallery by explaining that it manages reusable character records tied to the token owner's account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: the creation flow create → add_image → set_card → activate, when to publish via set_visibility versus activating, when to use list_public versus get/list_mine, and when not to call generate_video without approved shots. It also explains set_hidden versus set_visibility and when to stop and ask the owner before publishing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.