sapiens-mcp 1.24.6 → 1.26.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/index.js +6 -5
- package/dist/tools/studios.js +33 -3
- package/dist/tools/video.js +42 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -84,7 +84,7 @@ const TOOLS = {
|
|
|
84
84
|
handler: search,
|
|
85
85
|
},
|
|
86
86
|
sapiens_studios: {
|
|
87
|
-
description: "Catálogo dos estúdios/experimentos Sapiens
|
|
87
|
+
description: "Catálogo dos estúdios/experimentos Sapiens + o SEU studio + a Emancipação. Sub-actions: mine (o Meu Studio do user: nível/marca/operador/ferramentas), list (todos com URL+status+tags+mcpReady), get (detalhe de 1 slug), publishable_url (formata URL /articles/<slug>), emancipar (INICIA o Nível 3: blueprint pra construir a casa PRÓPRIA do membro na infra dele, fora do Sapiens), module (guia de um módulo de infra: fundacao/sapiens-connect/telegram/email/auth). Use quando user pergunta 'que estúdios existem', 'qual o meu studio', ou 'quero montar meu site/minha casa própria'. Estúdios cobertos: helen-voice, musicator, persona-sapiens, personagem-atlas, sapiens-shorts, sapiens-video, cena-visual, text-post-builder, comic-builder, carrosel-editorial, comunidade, repertorio.",
|
|
88
88
|
schema: studiosSchema,
|
|
89
89
|
handler: studios,
|
|
90
90
|
},
|
|
@@ -109,7 +109,7 @@ const TOOLS = {
|
|
|
109
109
|
handler: shorts,
|
|
110
110
|
},
|
|
111
111
|
sapiens_video: {
|
|
112
|
-
description: "Sapiens Video — gera vídeo (qualquer membro logado; vídeo é caro, cobra as Sinapses da sua conta). Sub-action 'create' (recomendada): escolhe modelo + config e gera num call (cria a row + renderiza). Modelos: 'sapiens-video-seedance' (Seedance 2.0, cena+áudio nativo, 4-15s, 480/720/1080p, t2v/i2v), 'sapiens-video-kling' (Kling 3.0 Pro, anima imagem, 3-15s, sound opcional, i2v/t2v), 'sapiens-video-wan' (WAN 2.5, imagem que fala/canta com áudio+lip-sync, 5/10s, i2v), 'sapiens-video-kling-motion' (Motion transfer: passa o movimento de um vídeo pra uma imagem — PRECISA de pessoa com tronco visível na imagem E no vídeo), 'sapiens-video-lite/fast/quality' (Veo 3.1). Args create: model, prompt, durationSec, resolution ('480p'/'720p'/'1080p'), audio, aspectRatio. FRAME INICIAL/FINAL POR REFERÊNCIA (recomendado): startImageId/endImageId (id da sua galeria) ou startImageUrl/endImageUrl (url de galeria/Acervo/personagem) — resolvidos server-side igual à imagem, descubra via sapiens_reference. Alternativa base64: references (role 'start'=imagem i2v, 'end'=frame final, 'driving'=vídeo de movimento do Motion). Suporte a frame final varia por modelo. Custo server-side por config. Sub-action 'generate' (legado): renderiza um imageId de vídeo já criado no site. Retorna {success, url, imageId, cost}.",
|
|
112
|
+
description: "Sapiens Video — gera vídeo (qualquer membro logado; vídeo é caro, cobra as Sinapses da sua conta). Sub-action 'create' (recomendada): escolhe modelo + config e gera num call (cria a row + renderiza). Modelos: 'sapiens-video-seedance' (Seedance 2.0, cena+áudio nativo, 4-15s, 480/720/1080p, t2v/i2v), 'sapiens-video-kling' (Kling 3.0 Pro, anima imagem, 3-15s, sound opcional, i2v/t2v), 'sapiens-video-wan' (WAN 2.5, imagem que fala/canta com áudio+lip-sync, 5/10s, i2v), 'sapiens-video-kling-motion' (Motion transfer: passa o movimento de um vídeo pra uma imagem — PRECISA de pessoa com tronco visível na imagem E no vídeo), 'sapiens-video-lite/fast/quality' (Veo 3.1). Args create: model, prompt, durationSec, resolution ('480p'/'720p'/'1080p'), audio, aspectRatio. FRAME INICIAL/FINAL POR REFERÊNCIA (recomendado): startImageId/endImageId (id da sua galeria) ou startImageUrl/endImageUrl (url de galeria/Acervo/personagem) — resolvidos server-side igual à imagem, descubra via sapiens_reference. Alternativa base64: references (role 'start'=imagem i2v, 'end'=frame final, 'driving'=vídeo de movimento do Motion). Suporte a frame final varia por modelo. Custo server-side por config. Sub-action 'generate' (legado): renderiza um imageId de vídeo já criado no site. Retorna {success, url, imageId, cost}. VITRINE (sem custo): sub-action 'demos' lista os SEUS demo films (kind=demo do Estúdio de Vídeo) com slug + estado de vitrine; sub-action 'showcase' põe/tira um demo (por slug) do mini-cinema da /conectar-claude, com showcaseTag (chip de capacidade) e showcaseOrder (ordem asc). Fluxo: 'demos' pra achar o slug, depois 'showcase' com showcase=true. Só entra na vitrine pública se for a conta da casa.",
|
|
113
113
|
schema: videoSchema,
|
|
114
114
|
handler: video,
|
|
115
115
|
},
|
|
@@ -198,7 +198,7 @@ Música (sapiens_musicator) é fluxo de 4 passos, EM ORDEM:
|
|
|
198
198
|
4. get passe o trackId e fique polando o status até 'ready' (ou 'failed').
|
|
199
199
|
Pular pro lyrics/render sem create, ou sem os campos, sempre falha.
|
|
200
200
|
|
|
201
|
-
Vídeo (sapiens_video) action=create EXIGE 'model': sapiens-video-seedance | kling | wan | kling-motion | lite | fast | quality | omni. Sem model, falha de cara. O 'omni' (Gemini Omni) é SÓ text-to-video: texto vira clipe de 10s 720p com áudio nativo, ignora imagem/duração/resolução. Vídeo é o mais caro: confirme com o usuário antes.
|
|
201
|
+
Vídeo (sapiens_video) action=create EXIGE 'model': sapiens-video-seedance | kling | wan | kling-motion | lite | fast | quality | omni. Sem model, falha de cara. O 'omni' (Gemini Omni) é SÓ text-to-video: texto vira clipe de 10s 720p com áudio nativo, ignora imagem/duração/resolução. Vídeo é o mais caro: confirme com o usuário antes. Vitrine dos demos (sem custo): sapiens_video action=demos lista seus demo films com slug; action=showcase (slug + showcase=true/false + showcaseTag + showcaseOrder) cura o mini-cinema da /conectar-claude.
|
|
202
202
|
|
|
203
203
|
Imagem (sapiens_image) action=generate: prompt + model + aspectRatio. Referência via referenceImageUrls (galeria/Acervo/personagens) e/ou sourceImageIds. templateSlug aplica um super-prompt travado da casa.
|
|
204
204
|
|
|
@@ -206,6 +206,7 @@ SEU STUDIO vs geração BASE (não confunda, é o ponto): o usuário tem UM "Meu
|
|
|
206
206
|
- Criar SEGUINDO o studio (na cara dele): sapiens_image com useStudio=true. O servidor acha o studio e aplica marca + personagem + vibe + presets sozinho (o que você passar explícito vence). O retorno traz studioApplied=true. Use quando ele diz "no meu studio", "na minha marca", "do meu jeito", "como sempre".
|
|
207
207
|
- Geração AVULSA (Sapiens base, sem a identidade dele): sapiens_image SEM useStudio (studioApplied=false). Pra teste solto ou pedido fora da identidade. Não misture: ou é studio, ou é base.
|
|
208
208
|
- Antes de criar no studio, cheque com sapiens_studios action=mine (nível, marca, operador, ferramentas, a vibe da imagem). Se você pediu useStudio e voltar studioApplied=false, o user não tem studio montado: avise e aponte /dashboard/studio. Gerar no studio faz ele evoluir de nível.
|
|
209
|
+
- EMANCIPAÇÃO (Nível 3, o passo grande): quando o membro quer a casa PRÓPRIA dele (site/produto próprio, FORA do Sapiens), use sapiens_studios action=emancipar. Ele devolve o blueprint pra VOCÊ construir na infra DO MEMBRO (Vercel + Convex + domínio dele), começando pela Fundação e seguindo um módulo por vez (action=module module=<slug>). Confirme cada passo, nunca hospede no Sapiens, siga o gosto dele. É complexo: conduza com calma.
|
|
209
210
|
|
|
210
211
|
Tirinha / Comic (sapiens_pipeline format=tirinha + sapiens_image): fluxo de 2 FASES, decida o MODO antes de gerar pixel.
|
|
211
212
|
FASE 1 (roteiro): monte 3-6 painéis, cada um com a CENA visual e a FALA/legenda SEPARADAS. Salve em sapiens_pipeline create_production format=tirinha. O texto dos balões mora no payload (campos dialogue/caption), NUNCA dentro da imagem.
|
|
@@ -219,7 +220,7 @@ Mídia no Fórum (PADRÃO, faça sempre assim): a peça vai EMBEDADA num card es
|
|
|
219
220
|
Trilhas e Ritos de Fogo (sapiens_trilhas): 'list'/'get' pra navegar as trilhas; 'list_challenges' mostra os Ritos ativos + seu status; 'claim_mission' (missionId + proofText) envia a prova pra revisão do dono — o crédito em Sinapses sai na aprovação dele, não na hora. Não prometa Sinapse na hora do claim.
|
|
220
221
|
|
|
221
222
|
Voz da casa: 1ª pessoa, direto, anti-corporate, sem travessão. Pra bom entendedor, meia palavra basta.`;
|
|
222
|
-
const server = new Server({ name: "mcp-sapiens", version: "1.
|
|
223
|
+
const server = new Server({ name: "mcp-sapiens", version: "1.26.0" }, { capabilities: { tools: {} }, instructions: SAPIENS_INSTRUCTIONS });
|
|
223
224
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
224
225
|
tools: Object.entries(TOOLS).map(([name, t]) => ({
|
|
225
226
|
name,
|
|
@@ -252,4 +253,4 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
252
253
|
});
|
|
253
254
|
const transport = new StdioServerTransport();
|
|
254
255
|
await server.connect(transport);
|
|
255
|
-
console.error("mcp-sapiens v1.
|
|
256
|
+
console.error("mcp-sapiens v1.26.0 rodando via stdio (27 tools)");
|
package/dist/tools/studios.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { convexAction, getSessionToken } from "../convexClient.js";
|
|
2
|
+
import { convexAction, convexQuery, getSessionToken } from "../convexClient.js";
|
|
3
3
|
/**
|
|
4
4
|
* Catálogo dos estúdios/experimentos Sapiens (v1.3).
|
|
5
5
|
*
|
|
@@ -14,12 +14,18 @@ import { convexAction, getSessionToken } from "../convexClient.js";
|
|
|
14
14
|
*/
|
|
15
15
|
export const studiosSchema = z.object({
|
|
16
16
|
action: z
|
|
17
|
-
.enum(["list", "get", "publishable_url", "mine"])
|
|
18
|
-
.describe("mine = o SEU studio ('Meu Studio', singular): nível, marca, operador e ferramentas, pra você gerar com useStudio. list/get = catálogo de estúdios da casa. publishable_url = URL de artigo."
|
|
17
|
+
.enum(["list", "get", "publishable_url", "mine", "emancipar", "module"])
|
|
18
|
+
.describe("mine = o SEU studio ('Meu Studio', singular): nível, marca, operador e ferramentas, pra você gerar com useStudio. list/get = catálogo de estúdios da casa. publishable_url = URL de artigo. " +
|
|
19
|
+
"emancipar = INICIA a Emancipação (Nível 3 do Studio): puxa o blueprint-mestre pra VOCÊ (Claude) construir a casa PRÓPRIA do membro, na infra DELE (Vercel + Convex + domínio dele), FORA do Sapiens. Devolve a identidade do studio dele já hidratada + o índice de módulos + o guia da Fundação. " +
|
|
20
|
+
"module = puxa o guia de UM módulo de infra pra continuar a construção (ex: fundacao, sapiens-connect, telegram, email, auth)."),
|
|
19
21
|
studio: z
|
|
20
22
|
.string()
|
|
21
23
|
.optional()
|
|
22
24
|
.describe("Pra action=get: slug do estúdio (ex 'helen-voice', 'musicator', 'persona-sapiens', 'sapiens-shorts')."),
|
|
25
|
+
module: z
|
|
26
|
+
.string()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Pra action=module: slug do módulo de infra da emancipação. Prontos (com guia): fundacao, sapiens-connect, telegram, email, auth. Chegando (no índice, sem guia ainda): pagamentos, analytics."),
|
|
23
29
|
publishableId: z
|
|
24
30
|
.string()
|
|
25
31
|
.optional()
|
|
@@ -201,4 +207,28 @@ export async function studios(args) {
|
|
|
201
207
|
: "publishableId lookup ainda não suportado v1.3. Passe slug.",
|
|
202
208
|
};
|
|
203
209
|
}
|
|
210
|
+
// action=emancipar: o blueprint-mestre da Emancipação (Nível 3). O membro sai
|
|
211
|
+
// da casa do Sapiens e monta a PRÓPRIA, na infra dele, guiado pelo Claude dele.
|
|
212
|
+
if (args.action === "emancipar") {
|
|
213
|
+
const sessionToken = getSessionToken();
|
|
214
|
+
const res = await convexQuery("studioBlueprints:mcpEmanciparBlueprint", { sessionToken });
|
|
215
|
+
if (!res?.ok)
|
|
216
|
+
return res; // { ok:false, error } — ex: sem studio montado ainda
|
|
217
|
+
return {
|
|
218
|
+
...res,
|
|
219
|
+
howto: "Blueprint-mestre da Emancipação (Nível 3). VOCÊ (o Claude do membro) constrói a casa dele NUMA PASTA NOVA, fora deste projeto, com Vercel + Convex + domínio DO MEMBRO. O Sapiens NÃO hospeda a casa. Conduza assim: (1) leia o `blueprint` (guia da Fundação) e execute passo a passo, confirmando com o membro ANTES de criar conta ou gastar (domínio); (2) o selo <meta name=\"sapiens-studio\"> é OBRIGATÓRIO pra verificação; (3) com a casa no ar, o membro submete a URL no Sapiens (Rito 'Studio no Ar', que paga Sinapses); (4) pra cada próximo módulo do `modules` que estiver 'ready', chame sapiens_studios action=module module=<slug>. Um módulo por vez, sem atropelar. É um passo grande: vá com calma e no gosto do membro.",
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// action=module: o guia de UM módulo de infra, hidratado com a identidade do
|
|
223
|
+
// studio do membro. Chame depois da fundacao, um por vez.
|
|
224
|
+
if (args.action === "module") {
|
|
225
|
+
if (!args.module) {
|
|
226
|
+
throw new Error("action=module exige 'module' (slug do módulo de infra: fundacao, sapiens-connect, telegram, email, auth).");
|
|
227
|
+
}
|
|
228
|
+
const sessionToken = getSessionToken();
|
|
229
|
+
return await convexQuery("studioBlueprints:mcpModuleBlueprint", {
|
|
230
|
+
sessionToken,
|
|
231
|
+
module: args.module,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
204
234
|
}
|
package/dist/tools/video.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { convexAction, getSessionToken } from "../convexClient.js";
|
|
2
|
+
import { convexAction, convexQuery, convexMutation, getSessionToken } from "../convexClient.js";
|
|
3
3
|
/**
|
|
4
4
|
* Sapiens Video — gera vídeo (qualquer membro logado; vídeo é caro, cobra as
|
|
5
5
|
* Sinapses da conta do sessionToken).
|
|
@@ -8,6 +8,11 @@ import { convexAction, getSessionToken } from "../convexClient.js";
|
|
|
8
8
|
* - create: escolhe modelo + config e gera num call só (cria a row + renderiza).
|
|
9
9
|
* Habilita Seedance/Kling/WAN/Motion (WaveSpeed) e os Veo, sem o site.
|
|
10
10
|
* - generate: renderiza um imageId de vídeo já criado no site (legado).
|
|
11
|
+
* - demos: lista os SEUS demo films (kind=demo do Estúdio de Vídeo) + estado
|
|
12
|
+
* de vitrine. Sem custo. Base pra curar o mini-cinema da vitrine.
|
|
13
|
+
* - showcase: põe/tira um demo film (por slug) da vitrine /conectar-claude, com
|
|
14
|
+
* chip (showcaseTag) e ordem (showcaseOrder). Só entra na vitrine
|
|
15
|
+
* pública se for a conta da casa. Sem custo.
|
|
11
16
|
*
|
|
12
17
|
* Modelos (action=create):
|
|
13
18
|
* - sapiens-video-seedance Seedance 2.0 — cena com áudio nativo, 4-15s, 480/720/1080p (t2v/i2v)
|
|
@@ -36,7 +41,24 @@ const VIDEO_MODELS = [
|
|
|
36
41
|
"sapiens-video-omni",
|
|
37
42
|
];
|
|
38
43
|
export const videoSchema = z.object({
|
|
39
|
-
action: z.enum(["create", "generate"]),
|
|
44
|
+
action: z.enum(["create", "generate", "demos", "showcase"]),
|
|
45
|
+
// --- action=showcase (curadoria da vitrine /conectar-claude) ---
|
|
46
|
+
slug: z
|
|
47
|
+
.string()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe("action=showcase: slug do demo film a curar (descubra via action=demos)."),
|
|
50
|
+
showcase: z
|
|
51
|
+
.boolean()
|
|
52
|
+
.optional()
|
|
53
|
+
.describe("action=showcase: true põe na vitrine /conectar-claude, false tira."),
|
|
54
|
+
showcaseTag: z
|
|
55
|
+
.string()
|
|
56
|
+
.optional()
|
|
57
|
+
.describe("action=showcase: chip de capacidade do card (ex: 'Repertório', 'Galeria', 'Fórum'). Curto, até 24 chars."),
|
|
58
|
+
showcaseOrder: z
|
|
59
|
+
.number()
|
|
60
|
+
.optional()
|
|
61
|
+
.describe("action=showcase: ordem na trilha do mini-cinema (asc, 0..999; menor aparece primeiro)."),
|
|
40
62
|
// --- action=create ---
|
|
41
63
|
model: z
|
|
42
64
|
.enum(VIDEO_MODELS)
|
|
@@ -107,6 +129,24 @@ export const videoSchema = z.object({
|
|
|
107
129
|
});
|
|
108
130
|
export async function video(args) {
|
|
109
131
|
const sessionToken = getSessionToken();
|
|
132
|
+
if (args.action === "demos") {
|
|
133
|
+
return await convexQuery("videoSpecs:mcpListMyDemoFilms", { sessionToken });
|
|
134
|
+
}
|
|
135
|
+
if (args.action === "showcase") {
|
|
136
|
+
if (!args.slug) {
|
|
137
|
+
throw new Error("action=showcase exige slug (descubra via action=demos).");
|
|
138
|
+
}
|
|
139
|
+
if (typeof args.showcase !== "boolean") {
|
|
140
|
+
throw new Error("action=showcase exige showcase (true pra pôr, false pra tirar).");
|
|
141
|
+
}
|
|
142
|
+
return await convexMutation("videoSpecs:mcpSetVideoShowcase", {
|
|
143
|
+
sessionToken,
|
|
144
|
+
slug: args.slug,
|
|
145
|
+
showcase: args.showcase,
|
|
146
|
+
showcaseTag: args.showcaseTag,
|
|
147
|
+
showcaseOrder: args.showcaseOrder,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
110
150
|
if (args.action === "create") {
|
|
111
151
|
if (!args.model) {
|
|
112
152
|
throw new Error("action=create exige model (ex: sapiens-video-seedance, sapiens-video-kling, sapiens-video-wan, sapiens-video-kling-motion).");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sapiens-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.26.0",
|
|
4
4
|
"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.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|