sapiens-mcp 1.91.2 → 1.92.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/registry.js +3 -3
- package/dist/skills.js +18 -2
- package/dist/tools/distribution.js +10 -4
- package/dist/tools/meta.js +22 -0
- package/dist/tools/musicator.js +22 -1
- package/package.json +1 -1
package/dist/registry.js
CHANGED
|
@@ -75,7 +75,7 @@ export const TOOLS = {
|
|
|
75
75
|
handler: image,
|
|
76
76
|
},
|
|
77
77
|
sapiens_meta: {
|
|
78
|
-
description: "Utilitários transversais: start (porta de entrada do primeiro contato — sem login ensina a conectar, com login mostra saldo/tier + primeiros poderes com exemplo pronto + 'comece por aqui'), login (conecta a conta com o código de sapiensinteticos.com/conectar-claude, salva a sessão localmente; ela vale 90 dias e renova sozinha a cada uso), logout (desconecta de verdade: revoga a chave no servidor e apaga o token local), whoami (tier user/admin + saldo + email), credits (saldo agregado), subscription (plan + status + saldo por bucket subscription/grants/free + warnings low/critical), formats (schemas por formato), health (inclui a versão do MCP), version (qual versão do sapiens-mcp está REALMENTE rodando + se é a última do npm; não exige login; use pra saber se o client pegou a versão nova ou ficou preso em cache do npx), app_url (URLs canônicas). Use credits/subscription antes de gerar imagem pra avisar se vai estourar.",
|
|
78
|
+
description: "Utilitários transversais: start (porta de entrada do primeiro contato — sem login ensina a conectar, com login mostra saldo/tier + primeiros poderes com exemplo pronto + 'comece por aqui'), login (conecta a conta com o código de sapiensinteticos.com/conectar-claude, salva a sessão localmente; ela vale 90 dias e renova sozinha a cada uso), logout (desconecta de verdade: revoga a chave no servidor e apaga o token local), whoami (tier user/admin + saldo + email), credits (saldo agregado), subscription (plan + status + saldo por bucket subscription/grants/free + warnings low/critical), formats (schemas por formato), health (inclui a versão do MCP), version (qual versão do sapiens-mcp está REALMENTE rodando + se é a última do npm; não exige login; use pra saber se o client pegou a versão nova ou ficou preso em cache do npx), app_url (URLs canônicas), precos (a tabela de preço do membro em duas carteiras separadas, com regras próprias: app = cada motor do App em Sinapses, com o detalhe por resolução e por segundo de vídeo e o link do card em /motores; api = a API da conta, com saldo próprio em dólar: preço por imagem, a partir de no vídeo (o exato pela cotação grátis) e texto por milhão de tokens com midia=texto. Sinapse não se converte em dólar. Pra comparar com fal.ai, WaveSpeed ou outro serviço que cobra em dólar, use a parte api. midia recorta, busca filtra pelo nome). Use credits/subscription antes de gerar imagem pra avisar se vai estourar.",
|
|
79
79
|
schema: metaSchema,
|
|
80
80
|
handler: meta,
|
|
81
81
|
},
|
|
@@ -140,7 +140,7 @@ export const TOOLS = {
|
|
|
140
140
|
handler: helen,
|
|
141
141
|
},
|
|
142
142
|
sapiens_musicator: {
|
|
143
|
-
description: "Musicator — loop completo de música via voz Sapiens, sem precisar da UI (qualquer logado; lyrics 300 / render 3000 Sinapses). Sub-actions: 'create' (cria brief+track draft num passo, custo 0, devolve trackId), 'lyrics' (gera letra PT + stylePrompt EN; passe trackId pra GRAVAR na track e deixar pronta pra render, ou sem trackId pra só receber o texto inline; 300 sinapses), 'list' (suas tracks: id/título/status/áudio), 'get' (detalhe de uma track pra acompanhar render — status/áudio/letra), 'render' (schedula synth
|
|
143
|
+
description: "Musicator — loop completo de música via voz Sapiens, sem precisar da UI (qualquer logado; lyrics 300 / render 3000 Sinapses). Sub-actions: 'create' (cria brief+track draft num passo, custo 0, devolve trackId), 'lyrics' (gera letra PT + stylePrompt EN; passe trackId pra GRAVAR na track e deixar pronta pra render, ou sem trackId pra só receber o texto inline; 300 sinapses), 'list' (suas tracks: id/título/status/áudio), 'get' (detalhe de uma track pra acompanhar render — status/áudio/letra), 'render' (schedula o synth num trackId pronto, assíncrono fire-and-forget, 3/min; `model` escolhe o motor: 'pro' Lyria 3.5 (default), 'clip' Lyria 3 Clip, 'mureka' Mureka 9.5, 'minimax' MiniMax Music 2.6, 'elevenlabs' ElevenLabs Music com `durationSeconds` 30/60/120/180; preço fixo por faixa, menos o ElevenLabs, que cobra pela duração: puxe a skill 'musica' pra tabela antes de disparar), 'publish' (publica uma faixa PRONTA do user no Acervo da Comunidade — aba Músicas — com eco no Chat e Fórum; CURADO: só admin/dono, custo 0, idempotente), 'list_public' (lê o Acervo público de músicas da Comunidade, sem custo, sem login). Fluxo cheio: create → lyrics(trackId) → render → get (poll status: rendering → ready/failed) → publish (dono). Tudo escopado por dono (só mexe nas suas tracks).",
|
|
144
144
|
schema: musicatorSchema,
|
|
145
145
|
handler: musicator,
|
|
146
146
|
},
|
|
@@ -277,7 +277,7 @@ REGRA DE OURO:
|
|
|
277
277
|
- DUAS PORTAS, lado a lado: Sinapse (sapiens_image, sapiens_video: nada pra configurar) ou a CHAVE DA PESSOA num provedor (fal, Kie, WaveSpeed, Replicate, OpenRouter, Sogni, a própria placa), que custa zero aqui. No MCP instalado, sapiens_pontes gera com a chave que mora na máquina dela (fal, Kie, WaveSpeed, Replicate, OpenRouter) e traz a peça pro acervo; no remoto, ela gera no harness dela e traz por sapiens_gallery action=ingest. sapiens_meta action=pontes diz o que ela já tem configurado: se tiver chave, ofereça as duas portas antes de gastar Sinapse. A chave NUNCA passa pelo Sapiens (nem em arg, nem no chat). Skill 'pontes'.
|
|
278
278
|
- REGRA DO TIMEOUT: geração SÍNCRONA pode estourar o teto de ~120s do cliente e voltar 'Timeout' MESMO tendo gerado e COBRADO. Nunca repita às cegas: confira antes onde o resultado cairia (a tabela de onde conferir está na skill 'primeiros-passos').
|
|
279
279
|
- "sessionToken expirado" = refaça login: sapiens_meta action=login com o código de sapiensinteticos.com/conectar-claude.
|
|
280
|
-
- sapiens_meta action=formats devolve os schemas por formato; action=whoami diz tier (user/admin) + saldo. sapiens_image e sapiens_video action=models trazem o catálogo com o preço ATUAL: consulte em vez de chutar custo.
|
|
280
|
+
- sapiens_meta action=formats devolve os schemas por formato; action=whoami diz tier (user/admin) + saldo. sapiens_image e sapiens_video action=models trazem o catálogo com o preço ATUAL: consulte em vez de chutar custo. Preço do App em Sinapses e da API em dólar (carteiras separadas, uma nunca vira a outra): sapiens_meta action=precos.
|
|
281
281
|
|
|
282
282
|
MODO COMPANHIA: sapiens_meta action=start e action=whoami podem trazer um bloco 'companion'. Quando vier companion.active=true, você INCORPORA aquele Sintético (a voz dele, o avatar, o oi dele) continuando a operar na conta e nas Sinapses do USUÁRIO. Puxe a skill 'companhia' antes de fazer isso. Se vier 'characterOffer', siga o que ele manda: são personagens que o usuário escreveu e que podem entrar em cena, e quem OFERECE é você, na hora em que a conversa encostar num deles. Só personagem de autoria dele; a alma de personagem alheio não sai por aqui.
|
|
283
283
|
|
package/dist/skills.js
CHANGED
|
@@ -72,7 +72,8 @@ Não despeje a lista inteira de tools. O start guia.
|
|
|
72
72
|
- \`sapiens_meta action=whoami\`: tier (user/admin) e saldo.
|
|
73
73
|
- \`sapiens_meta action=formats\`: os schemas por formato.
|
|
74
74
|
- \`sapiens_meta action=version\`: qual versão está rodando de verdade e se é a última. Não exige login.
|
|
75
|
-
- \`sapiens_image action=models\` e \`sapiens_video action=models\`: catálogo vivo com o preço ATUAL. Consulte em vez de chutar custo
|
|
75
|
+
- \`sapiens_image action=models\` e \`sapiens_video action=models\`: catálogo vivo com o preço ATUAL. Consulte em vez de chutar custo.
|
|
76
|
+
- \`sapiens_meta action=precos\`: a tabela de preço em duas carteiras separadas: o App em Sinapses (por resolução e por segundo de vídeo) e a API em dólar, com saldo próprio. Sinapse não vira dólar. "A API sai mais barata que a fal.ai / WaveSpeed?" se responde com a parte \`api\`.`,
|
|
76
77
|
},
|
|
77
78
|
{
|
|
78
79
|
name: "voz-da-casa",
|
|
@@ -183,6 +184,20 @@ Acervo de outra pessoa você lê, mas só o que ela deixou público.
|
|
|
183
184
|
3. **render**: passe o \`trackId\` pronto pra sintetizar o áudio (3000 Sinapses, assíncrono, teto de 3/min).
|
|
184
185
|
4. **get**: passe o \`trackId\` e vá polando o status até 'ready' (ou 'failed').
|
|
185
186
|
|
|
187
|
+
## Qual motor no render
|
|
188
|
+
|
|
189
|
+
\`model\` escolhe o motor. Sem ele, sai no Lyria 3.5.
|
|
190
|
+
|
|
191
|
+
- \`pro\`: Lyria 3.5, faixa inteira até 3 min. Único que lê imagem de referência.
|
|
192
|
+
- \`clip\`: Lyria 3 Clip, rascunho de 30s pra testar a ideia.
|
|
193
|
+
- \`mureka\`: Mureka 9.5, faixa inteira, aguenta letra de até 5.000 caracteres.
|
|
194
|
+
- \`minimax\`: MiniMax Music 2.6, faixa inteira até 5 min. Letra de 10 a 3.000 caracteres.
|
|
195
|
+
- \`elevenlabs\`: ElevenLabs Music, a pessoa escolhe a duração em \`durationSeconds\` (30, 60, 120 ou 180; sem ele, 120). Letra até 3.500 caracteres.
|
|
196
|
+
|
|
197
|
+
Todos custam o mesmo render fixo, menos o ElevenLabs, que cobra pela duração (\`durationSeconds\`): 30s 1300, 60s 2550, 120s 5050, 180s 7600 Sinapses. Diga o número e confirme antes de disparar o de 3 min.
|
|
198
|
+
|
|
199
|
+
Letra maior que o teto do motor é recusada ANTES de cobrar, com o tamanho na mensagem: corte a letra ou troque de motor. \`negativePrompt\` e \`seed\` só valem no Lyria.
|
|
200
|
+
|
|
186
201
|
Pular pro lyrics ou render sem create, ou sem os campos, falha sempre. É o erro número um deste fluxo.
|
|
187
202
|
|
|
188
203
|
Depois de pronta: \`action=publish\` põe a faixa no Acervo da Comunidade (só admin/dono, custo 0, idempotente). A publicação já nasce com player no Fórum, veja a skill \`forum\`.
|
|
@@ -946,8 +961,9 @@ Baixe e leia ANTES de escrever o código. Num agente com pasta de skills, ele en
|
|
|
946
961
|
## O que vale saber já
|
|
947
962
|
|
|
948
963
|
- Base: \`https://www.sapiensinteticos.com/api/v1\`, com \`Authorization: Bearer <chave>\`. No SDK da OpenAI, só troque o \`baseURL\`.
|
|
949
|
-
- Preço: abaixo do oficial de quem fez o modelo. Quando a oferta da hora sai mais cara, a chamada paga um pouco mais, nunca acima do máximo que \`GET /models\` mostra. O valor de cada chamada volta no header \`x-sapiens-charge-usd\`.
|
|
964
|
+
- Preço: abaixo do oficial de quem fez o modelo. Quando a oferta da hora sai mais cara, a chamada paga um pouco mais, nunca acima do máximo que \`GET /models\` mostra. O valor de cada chamada volta no header \`x-sapiens-charge-usd\`. Pra pôr o preço da API ao lado de outro provedor (fal.ai, WaveSpeed): \`sapiens_meta action=precos\`, parte \`api\`.
|
|
950
965
|
- Vídeo cota de graça antes (\`POST /videos/quote\`), aceita \`webhook_url\` pra avisar quando termina e devolve a \`url\` do mp4 guardado. Falha do motor volta pro saldo sozinha.
|
|
966
|
+
- Saldo que acabou volta 402 \`insufficient_balance\` com \`recharge_url\` no erro: o código da pessoa deve mostrar esse link (recarga no cartão ou em stablecoin) em vez de só falhar.
|
|
951
967
|
- Uma chamada de teste antes de qualquer lote. Nunca vídeo em laço.`,
|
|
952
968
|
},
|
|
953
969
|
];
|
|
@@ -79,6 +79,7 @@ const CHANNELS = [
|
|
|
79
79
|
"bluesky-8",
|
|
80
80
|
"bluesky-9",
|
|
81
81
|
"bluesky-10",
|
|
82
|
+
"bluesky-11",
|
|
82
83
|
"farcaster",
|
|
83
84
|
"telegram",
|
|
84
85
|
// Canais de personagem no Telegram (telegram-2 = Aria, telegram-3 = Arak,
|
|
@@ -134,11 +135,16 @@ const CHANNELS = [
|
|
|
134
135
|
"tiktok-up",
|
|
135
136
|
"youtube-up",
|
|
136
137
|
"instagram-up",
|
|
137
|
-
//
|
|
138
|
+
// O segundo trio (11/10/2026), no profile de outra linhagem.
|
|
139
|
+
"tiktok-up-2",
|
|
140
|
+
"youtube-up-2",
|
|
141
|
+
"instagram-up-2",
|
|
142
|
+
// O X do Obsolete Human, pelo Buffer próprio do selo. O linkedin-page-2 saiu
|
|
143
|
+
// em 11/10/2026: o selo não tem LinkedIn, e o servidor recusa o canal com o
|
|
144
|
+
// motivo (convex/shared/canaisAposentados.ts) pra quem roda versão velha.
|
|
138
145
|
"x-buffer-2",
|
|
139
146
|
"x-buffer-3",
|
|
140
147
|
"x-buffer-4",
|
|
141
|
-
"linkedin-page-2",
|
|
142
148
|
// Vagas numeradas de conta extra.
|
|
143
149
|
"instagram-3",
|
|
144
150
|
"instagram-4",
|
|
@@ -178,7 +184,7 @@ export const distributionSchema = z.object({
|
|
|
178
184
|
channel: z
|
|
179
185
|
.enum(CHANNELS)
|
|
180
186
|
.optional()
|
|
181
|
-
.describe("queue: o canal de destino. Obrigatório. Conta extra da mesma rede é um canal próprio: bluesky-2 a bluesky-5 são OUTRAS contas no Bluesky, telegram-2 é o canal da Aria, telegram-3 o da Arak, telegram-4 o da Helen e telegram-5 o do Borderless no Telegram (o telegram é o da casa), instagram-pro e instagram-3..5 outras no Instagram, x-buffer-2
|
|
187
|
+
.describe("queue: o canal de destino. Obrigatório. Conta extra da mesma rede é um canal próprio: bluesky-2 a bluesky-5 são OUTRAS contas no Bluesky, telegram-2 é o canal da Aria, telegram-3 o da Arak, telegram-4 o da Helen e telegram-5 o do Borderless no Telegram (o telegram é o da casa), instagram-pro e instagram-3..5 outras no Instagram, x-buffer-2 o X do Obsolete Human (selo de arte, em inglês, voice obsolete-human), e assim por diante. A peça sai pela conta de quem assina ela, então case o canal com a aba (`voice`) antes de despachar: peça de personagem no canal de outro só aparece como erro depois de publicada, no perfil errado. Case também o canal com a MÍDIA (ver assetKind): canal de vídeo não recebe foto, canal de imagem não recebe vídeo, e o servidor recusa na fila."),
|
|
182
188
|
copy: z
|
|
183
189
|
.string()
|
|
184
190
|
.optional()
|
|
@@ -186,7 +192,7 @@ export const distributionSchema = z.object({
|
|
|
186
192
|
replyText: z
|
|
187
193
|
.string()
|
|
188
194
|
.optional()
|
|
189
|
-
.describe("queue: o COMENTÁRIO que sai junto do post, pra onde vai o link (a copy fica sem ele e fecha apontando pro comentário). Só dois lugares publicam: o X pelo Buffer (x-buffer, x-buffer-2..4) e o X da API própria (x), como resposta no mesmo fio, teto 280; e a Página do LinkedIn pelo Buffer (linkedin-page
|
|
195
|
+
.describe("queue: o COMENTÁRIO que sai junto do post, pra onde vai o link (a copy fica sem ele e fecha apontando pro comentário). Só dois lugares publicam: o X pelo Buffer (x-buffer, x-buffer-2..4) e o X da API própria (x), como resposta no mesmo fio, teto 280; e a Página do LinkedIn pelo Buffer (linkedin-page), como primeiro comentário, teto 1250. Threads (threads, threads-pro, threads-3..5), LinkedIn Perfil (linkedin) e o resto NÃO publicam comentário: lá o link mora na própria copy. O servidor recusa a peça com replyText num canal que não publica, e recusa o comentário acima do teto com a contagem; nada é cortado calado."),
|
|
190
196
|
hashtags: z.array(z.string()).optional().describe("queue/edit: sem o #, o servidor limpa. Em edit, a lista troca a inteira (vazia tira todas)."),
|
|
191
197
|
publicTitle: z
|
|
192
198
|
.string()
|
package/dist/tools/meta.js
CHANGED
|
@@ -58,11 +58,20 @@ export const metaSchema = z.object({
|
|
|
58
58
|
"subscription",
|
|
59
59
|
"version",
|
|
60
60
|
"pontes",
|
|
61
|
+
"precos",
|
|
61
62
|
]),
|
|
62
63
|
code: z
|
|
63
64
|
.string()
|
|
64
65
|
.optional()
|
|
65
66
|
.describe("Código XXXX-XXXX gerado (logado) em sapiensinteticos.com/conectar-claude. Só pra action=login."),
|
|
67
|
+
midia: z
|
|
68
|
+
.enum(["imagem", "video", "musica", "voz", "texto"])
|
|
69
|
+
.optional()
|
|
70
|
+
.describe("Só pra action=precos: recorta a tabela numa mídia. Sem ela vêm imagem, vídeo, música e voz (o texto da API é longo e só vem com midia=texto)."),
|
|
71
|
+
busca: z
|
|
72
|
+
.string()
|
|
73
|
+
.optional()
|
|
74
|
+
.describe("Só pra action=precos: filtra pelo nome do motor ou do modelo da API (ex: 'seedance', 'nano banana'), sem acento nem caixa."),
|
|
66
75
|
});
|
|
67
76
|
const APP_URL = "https://sapiensinteticos.com";
|
|
68
77
|
const FORMAT_GUIDE = {
|
|
@@ -587,6 +596,19 @@ export async function meta(args) {
|
|
|
587
596
|
};
|
|
588
597
|
}
|
|
589
598
|
const sessionToken = getSessionToken();
|
|
599
|
+
if (args.action === "precos") {
|
|
600
|
+
// A tabela do membro: Sinapses, o dólar da loja (médio e faixa por pacote)
|
|
601
|
+
// e o preço da API quando o motor também está nela. É o que o agente usa
|
|
602
|
+
// pra comparar com fal.ai e WaveSpeed sem chutar câmbio.
|
|
603
|
+
const tabela = await convexQuery("precos:mcpTabela", {
|
|
604
|
+
sessionToken,
|
|
605
|
+
...(args.midia ? { midia: args.midia } : {}),
|
|
606
|
+
...(args.busca ? { busca: args.busca } : {}),
|
|
607
|
+
});
|
|
608
|
+
if (!tabela)
|
|
609
|
+
return { ok: false, error: "A tabela de preço é só pra conta ativa." };
|
|
610
|
+
return tabela;
|
|
611
|
+
}
|
|
590
612
|
if (args.action === "whoami") {
|
|
591
613
|
// mcpGetMySubscription usa requireMcpSession sem admin (qualquer logado
|
|
592
614
|
// com token de acesso cheio; chave da voz e OAuth de parceira não passam),
|
package/dist/tools/musicator.js
CHANGED
|
@@ -10,7 +10,9 @@ import { convexAction, convexQuery, getSessionToken } from "../convexClient.js";
|
|
|
10
10
|
* trackId, só devolve o texto inline (300 sinapses).
|
|
11
11
|
* - list: lista as tracks do próprio user (id, título, status, áudio).
|
|
12
12
|
* - get: detalhe de uma track (status/áudio/letra) — pra acompanhar render.
|
|
13
|
-
* - render: schedula o synth
|
|
13
|
+
* - render: schedula o synth numa track pronta. Motor em `model` (Lyria 3.5
|
|
14
|
+
* default, Lyria 3 Clip, Mureka 9.5, MiniMax Music 2.6, ElevenLabs
|
|
15
|
+
* Music). 3000 sinapses; ElevenLabs cobra pela duração.
|
|
14
16
|
* - publish: publica uma faixa PRONTA do user no Acervo da Comunidade (aba
|
|
15
17
|
* Músicas) + eco no Chat e Fórum. CURADO: só admin (dono). Custo 0.
|
|
16
18
|
* - list_public: lê o Acervo público de músicas da Comunidade (sem custo, sem
|
|
@@ -71,6 +73,19 @@ export const musicatorSchema = z.object({
|
|
|
71
73
|
.number()
|
|
72
74
|
.optional()
|
|
73
75
|
.describe("Pra action=render: seed pra reprodutibilidade do synth."),
|
|
76
|
+
model: z
|
|
77
|
+
.enum(["pro", "clip", "mureka", "minimax", "elevenlabs"])
|
|
78
|
+
.optional()
|
|
79
|
+
.describe("Pra action=render: motor da faixa. 'pro' = Lyria 3.5 (default, faixa inteira até 3 min, lê imagem de referência). " +
|
|
80
|
+
"'clip' = Lyria 3 Clip (rascunho de 30s). 'mureka' = Mureka 9.5 (faixa inteira, letra até 5.000 caracteres). " +
|
|
81
|
+
"'minimax' = MiniMax Music 2.6 (faixa inteira até 5 min, letra de 10 a 3.000 caracteres). " +
|
|
82
|
+
"'elevenlabs' = ElevenLabs Music (duração escolhida em durationSeconds, letra até 3.500 caracteres). " +
|
|
83
|
+
"Preço: o mesmo render fixo em todos, menos 'elevenlabs', que cobra pela duração (tabela na skill 'musica'; confirme com a pessoa antes). " +
|
|
84
|
+
"Só o Lyria lê imagem de referência; negativePrompt e seed são ignorados nos motores de fora do Lyria."),
|
|
85
|
+
durationSeconds: z
|
|
86
|
+
.number()
|
|
87
|
+
.optional()
|
|
88
|
+
.describe("Pra action=render com model='elevenlabs': duração da faixa em segundos, uma de 30, 60, 120 ou 180 (default 120). Ignorado nos outros motores."),
|
|
74
89
|
});
|
|
75
90
|
export async function musicator(args) {
|
|
76
91
|
// list_public é o Acervo público de músicas da Comunidade (sem custo, sem
|
|
@@ -139,6 +154,12 @@ export async function musicator(args) {
|
|
|
139
154
|
stylePromptOverride: args.stylePromptOverride,
|
|
140
155
|
negativePrompt: args.negativePrompt,
|
|
141
156
|
seed: args.seed,
|
|
157
|
+
// Só vão quando escolhidos: servidor anterior a 11/out/2026 não conhece os
|
|
158
|
+
// dois args e recusaria o pedido inteiro.
|
|
159
|
+
...(args.model ? { model: args.model } : {}),
|
|
160
|
+
...(args.model === "elevenlabs" && args.durationSeconds !== undefined
|
|
161
|
+
? { durationSeconds: args.durationSeconds }
|
|
162
|
+
: {}),
|
|
142
163
|
});
|
|
143
164
|
}
|
|
144
165
|
if (args.action === "publish") {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.92.0",
|
|
4
4
|
"mcpName": "com.sapiensinteticos/sapiens",
|
|
5
5
|
"description": "MCP server pra operar o Sapiens Sintéticos (sapiensinteticos.com) pelo Claude Code: gerar imagem, escrever artigo, voz, música e mais, na sua conta. Login pelo código de sapiensinteticos.com/conectar-claude.",
|
|
6
6
|
"type": "module",
|