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 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 (v1.3, atualizado v1.4). Sub-actions: list (todos com URL+status+tags+mcpReady), get (detalhe de 1 slug), publishable_url (formata URL /articles/<slug>). Use quando user pergunta 'que estúdios existem'. Estúdios cobertos: helen-voice (v1.4 mcpReady), musicator (v1.4 mcpReady), persona-sapiens (teste de autoconhecimento + arte, mcpReady), personagem-atlas (dossiê de personagem, UI-only), sapiens-shorts, sapiens-video, cena-visual, text-post-builder, comic-builder (tirinha/quadrinho, mcpReady via pipeline format=tirinha + sapiens_image), carrosel-editorial, comunidade, repertorio.",
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.24.6" }, { capabilities: { tools: {} }, instructions: SAPIENS_INSTRUCTIONS });
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.24.6 rodando via stdio (27 tools)");
256
+ console.error("mcp-sapiens v1.26.0 rodando via stdio (27 tools)");
@@ -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
  }
@@ -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.24.6",
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": {