sapiens-mcp 1.26.0 → 1.26.1

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
@@ -64,7 +64,7 @@ const TOOLS = {
64
64
  handler: community,
65
65
  },
66
66
  sapiens_article: {
67
- description: "CRUD direto de artigos do blog Sapiens (v1.1). Sub-actions: get (by slug, retorna doc completo pra edit local), update (patch em title/excerpt/tldr/content/tags/etc, NÃO toca status/column/format), publish (status='published', set publishedAt), unpublish (volta pra draft), delete (irreversível). Pra criar artigo novo use sapiens_quote_pop (quote ou pop) ou sapiens_pipeline action=create_draft_article_and_source (cru, vira source).",
67
+ description: "CRUD direto de artigos do blog Sapiens (v1.2). Sub-actions: get (by slug, retorna doc completo pra edit local), update (patch em title/excerpt/tldr/content/tags/etc + VISUAIS: thumbnailUrl capa webp, ogImageUrl JPEG do preview social, bodyImages array das ilustrações inline, conceptMap mapa visual — pra recapear um artigo num novo estilo; NÃO toca status/column/format), publish (status='published', set publishedAt), unpublish (volta pra draft), delete (irreversível). Pra criar artigo novo use sapiens_quote_pop (quote ou pop) ou sapiens_pipeline action=create_draft_article_and_source (cru, vira source).",
68
68
  schema: articleSchema,
69
69
  handler: article,
70
70
  },
@@ -220,7 +220,7 @@ Mídia no Fórum (PADRÃO, faça sempre assim): a peça vai EMBEDADA num card es
220
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.
221
221
 
222
222
  Voz da casa: 1ª pessoa, direto, anti-corporate, sem travessão. Pra bom entendedor, meia palavra basta.`;
223
- const server = new Server({ name: "mcp-sapiens", version: "1.26.0" }, { capabilities: { tools: {} }, instructions: SAPIENS_INSTRUCTIONS });
223
+ const server = new Server({ name: "mcp-sapiens", version: "1.26.1" }, { capabilities: { tools: {} }, instructions: SAPIENS_INSTRUCTIONS });
224
224
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
225
225
  tools: Object.entries(TOOLS).map(([name, t]) => ({
226
226
  name,
@@ -253,4 +253,4 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
253
253
  });
254
254
  const transport = new StdioServerTransport();
255
255
  await server.connect(transport);
256
- console.error("mcp-sapiens v1.26.0 rodando via stdio (27 tools)");
256
+ console.error("mcp-sapiens v1.26.1 rodando via stdio (27 tools)");
@@ -39,6 +39,34 @@ export const articleSchema = z.object({
39
39
  content: z.string().optional(),
40
40
  tags: z.array(z.string()).optional(),
41
41
  thumbnailUrl: z.string().optional(),
42
+ ogImageUrl: z
43
+ .string()
44
+ .optional()
45
+ .describe("update: JPEG scraper-safe pro preview social (og:image/twitter:image). Ao recapear um artigo, troque junto com thumbnailUrl (webp), senão o card de compartilhamento do WhatsApp/LinkedIn fica com a imagem antiga."),
46
+ bodyImages: z
47
+ .array(z.object({
48
+ url: z.string(),
49
+ alt: z.string(),
50
+ caption: z.string().optional(),
51
+ prompt: z.string().optional(),
52
+ model: z.string().optional(),
53
+ imageId: z.string().optional(),
54
+ generatedAt: z.number().optional(),
55
+ }))
56
+ .optional()
57
+ .describe("update: SUBSTITUI as ilustrações inline do corpo (tabela article_visuals). Passe o array COMPLETO (não faz merge) — todas as imagens que o artigo deve ter, na ordem. O conjunto antigo vai pro histórico (manual_replace). Use pra recapear artigo num novo estilo. url tem que ser host Sapiens (Bunny/Convex)."),
58
+ conceptMap: z
59
+ .object({
60
+ url: z.string(),
61
+ alt: z.string(),
62
+ caption: z.string().optional(),
63
+ prompt: z.string().optional(),
64
+ model: z.string().optional(),
65
+ imageId: z.string().optional(),
66
+ generatedAt: z.number().optional(),
67
+ })
68
+ .optional()
69
+ .describe("update: substitui o mapa visual (conceptMap) do artigo."),
42
70
  seoDescription: z.string().optional(),
43
71
  readingTimeMinutes: z.number().optional(),
44
72
  category: z.string().optional(),
@@ -108,6 +136,9 @@ export async function article(args) {
108
136
  content: args.content,
109
137
  tags: args.tags,
110
138
  thumbnailUrl: args.thumbnailUrl,
139
+ ogImageUrl: args.ogImageUrl,
140
+ bodyImages: args.bodyImages,
141
+ conceptMap: args.conceptMap,
111
142
  seoDescription: args.seoDescription,
112
143
  readingTimeMinutes: args.readingTimeMinutes,
113
144
  category: args.category,
@@ -22,6 +22,10 @@ const MODELS = [
22
22
  "civitai-wai-illustrious", // anime Illustrious · 400
23
23
  "civitai-nova-anime-xl", // anime Illustrious · 400
24
24
  "civitai-pony-v6", // Pony Diffusion V6 XL, a base nº1 do Civitai · 400
25
+ // fal.ai (Krea-2 Turbo 12B + LoRA de realismo, ~4s). Grupo Degen (+18, checker
26
+ // off). SEM referência: o endpoint krea-2/turbo/lora é text-to-image puro.
27
+ "fal-krea2-realism", // Krea-2 + LoRA realismo (gokaygokay) · 600 · txt2img
28
+ "fal-krea2-realism-v2", // Krea-2 + LoRA realismo alt (RudySen), pro A/B · 600 · txt2img
25
29
  ];
26
30
  export const imageSchema = z.object({
27
31
  action: z.enum(["generate", "request_generation", "compose"]),
@@ -29,7 +33,7 @@ export const imageSchema = z.object({
29
33
  model: z
30
34
  .enum(MODELS)
31
35
  .optional()
32
- .describe("Default 'nano-banana-2' (Flash 3.1 com refs). 'nano-banana-max' (Pro 3) = qualidade alta. 'gpt-image-2-low/high' = Azure. 'grok-2-image'/'grok-2-image-quality' = xAI Grok Imagine (moderação frouxa +18, aceita refs e aspect; quality é mais fiel pra character lock). DEGEN (uncensored, gate +18): 'wavespeed-chroma' (fotorrealista rápido), 'wavespeed-flux2' (Flux.2 Klein), 'wavespeed-flux-nsfw' (flux+LoRA NSFW, Ousadia regulável via loraIntensity), 'wavespeed-klein-anime' (Flux.2 Klein + LoRA anime, inteligente+controlável), 'wavespeed-klein-anime-plus' (Klein anime +18, Ousadia regulável) = WaveSpeed rápido; 'civitai-wai-illustrious'/'civitai-nova-anime-xl' (anime), 'civitai-pony-v6' (Pony V6 XL, base nº1) = Civitai sdcpp rápido."),
36
+ .describe("Default 'nano-banana-2' (Flash 3.1 com refs). 'nano-banana-max' (Pro 3) = qualidade alta. 'gpt-image-2-low/high' = Azure. 'grok-2-image'/'grok-2-image-quality' = xAI Grok Imagine (moderação frouxa +18, aceita refs e aspect; quality é mais fiel pra character lock). DEGEN (uncensored, gate +18): 'wavespeed-chroma' (fotorrealista rápido), 'wavespeed-flux2' (Flux.2 Klein), 'wavespeed-flux-nsfw' (flux+LoRA NSFW, Ousadia regulável via loraIntensity), 'wavespeed-klein-anime' (Flux.2 Klein + LoRA anime, inteligente+controlável), 'wavespeed-klein-anime-plus' (Klein anime +18, Ousadia regulável) = WaveSpeed rápido; 'civitai-wai-illustrious'/'civitai-nova-anime-xl' (anime), 'civitai-pony-v6' (Pony V6 XL, base nº1) = Civitai sdcpp rápido. 'fal-krea2-realism'/'fal-krea2-realism-v2' (Krea-2 Turbo 12B + LoRA de realismo, fal.ai, ~4s, fotorrealismo forte) = SÓ txt2img (não aceita referência)."),
33
37
  aspectRatio: z
34
38
  .enum(["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"])
35
39
  .optional()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sapiens-mcp",
3
- "version": "1.26.0",
3
+ "version": "1.26.1",
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": {