@creativeproject/creative-plann-mcp 0.1.1 → 0.1.3

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/server.js CHANGED
@@ -30,6 +30,14 @@ export function createServer(client) {
30
30
  "Publicar é irreversível. Se o token não tiver permissão de publicar,",
31
31
  "deixe o post pronto e agendado e informe que a liberação é humana —",
32
32
  "não tente contornar a recusa por outro caminho.",
33
+ "",
34
+ "Depois de publicado, `get_performance` mede o resultado. Duas regras",
35
+ "valem em toda métrica: `null` é \"a rede não reporta isto\", diferente",
36
+ "de zero, que é um resultado medido; e o histórico é cumulativo — cada",
37
+ "leitura é o total até aquele dia, então somar leituras conta o mesmo",
38
+ "alcance duas vezes. Antes de dizer que o desempenho caiu, confira",
39
+ "`accountsWithoutInsights`: conta por reconectar derruba os totais sem",
40
+ "que nada tenha piorado.",
33
41
  ].join("\n"),
34
42
  });
35
43
  registerTools(server, client);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,gEAAgE;QAChE,wEAAwE;QACxE,uCAAuC;QACvC,EAAE;QACF,4DAA4D;QAC5D,uEAAuE;QACvE,cAAc;QACd,YAAY,EAAE;YACZ,uEAAuE;YACvE,mDAAmD;YACnD,EAAE;YACF,yEAAyE;YACzE,0EAA0E;YAC1E,8EAA8E;YAC9E,EAAE;YACF,qEAAqE;YACrE,iEAAiE;YACjE,gFAAgF;YAChF,EAAE;YACF,sEAAsE;YACtE,qEAAqE;YACrE,iDAAiD;SAClD,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CACF,CAAC;IAEF,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC5C;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,gEAAgE;QAChE,wEAAwE;QACxE,uCAAuC;QACvC,EAAE;QACF,4DAA4D;QAC5D,uEAAuE;QACvE,cAAc;QACd,YAAY,EAAE;YACZ,uEAAuE;YACvE,mDAAmD;YACnD,EAAE;YACF,yEAAyE;YACzE,0EAA0E;YAC1E,8EAA8E;YAC9E,EAAE;YACF,qEAAqE;YACrE,iEAAiE;YACjE,gFAAgF;YAChF,EAAE;YACF,sEAAsE;YACtE,qEAAqE;YACrE,iDAAiD;YACjD,EAAE;YACF,sEAAsE;YACtE,wEAAwE;YACxE,uEAAuE;YACvE,sEAAsE;YACtE,mEAAmE;YACnE,uEAAuE;YACvE,yBAAyB;SAC1B,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CACF,CAAC;IAEF,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -2,7 +2,7 @@ import type { McpServer } from "@modelcontextprotocol/server";
2
2
  import type { CreativePlannClient } from "../client.js";
3
3
  /**
4
4
  * Ferramentas agrupadas por domínio: descobrir onde atuar, ver o trabalho,
5
- * alterá-lo. Separar por arquivo mantém cada módulo legível conforme a API
6
- * cresce, e deixa claro onde entra uma ferramenta nova.
5
+ * alterá-lo e medir o que saiu. Separar por arquivo mantém cada módulo legível
6
+ * conforme a API cresce, e deixa claro onde entra uma ferramenta nova.
7
7
  */
8
8
  export declare function registerTools(server: McpServer, client: CreativePlannClient): void;
@@ -1,14 +1,16 @@
1
1
  import { registerContextTools } from "./context.js";
2
2
  import { registerPlanningTools } from "./planning.js";
3
3
  import { registerAuthoringTools } from "./authoring.js";
4
+ import { registerPerformanceTools } from "./performance.js";
4
5
  /**
5
6
  * Ferramentas agrupadas por domínio: descobrir onde atuar, ver o trabalho,
6
- * alterá-lo. Separar por arquivo mantém cada módulo legível conforme a API
7
- * cresce, e deixa claro onde entra uma ferramenta nova.
7
+ * alterá-lo e medir o que saiu. Separar por arquivo mantém cada módulo legível
8
+ * conforme a API cresce, e deixa claro onde entra uma ferramenta nova.
8
9
  */
9
10
  export function registerTools(server, client) {
10
11
  registerContextTools(server, client);
11
12
  registerPlanningTools(server, client);
12
13
  registerAuthoringTools(server, client);
14
+ registerPerformanceTools(server, client);
13
15
  }
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAA2B;IAC1E,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAA2B;IAC1E,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from "@modelcontextprotocol/server";
2
+ import type { CreativePlannClient } from "../client.js";
3
+ /**
4
+ * Como o post performou depois de publicado.
5
+ *
6
+ * Duas armadilhas que as descrições precisam evitar, porque erram o relatório
7
+ * inteiro se passarem batido:
8
+ *
9
+ * - `null` não é zero. Zero foi medido; null é "esta rede não reporta isto".
10
+ * - O histórico é cumulativo: cada leitura é o total até aquele dia. Somar as
11
+ * leituras contaria o mesmo alcance várias vezes.
12
+ */
13
+ export declare function registerPerformanceTools(server: McpServer, client: CreativePlannClient): void;
@@ -0,0 +1,63 @@
1
+ import * as z from "zod/v4";
2
+ import { COMPANY_ARG, guard, path, READ_ONLY } from "../shared.js";
3
+ const PERIOD = z
4
+ .enum(["7d", "30d", "90d"])
5
+ .optional()
6
+ .describe("Janela do relatório. Padrão: 30d.");
7
+ /**
8
+ * Como o post performou depois de publicado.
9
+ *
10
+ * Duas armadilhas que as descrições precisam evitar, porque erram o relatório
11
+ * inteiro se passarem batido:
12
+ *
13
+ * - `null` não é zero. Zero foi medido; null é "esta rede não reporta isto".
14
+ * - O histórico é cumulativo: cada leitura é o total até aquele dia. Somar as
15
+ * leituras contaria o mesmo alcance várias vezes.
16
+ */
17
+ export function registerPerformanceTools(server, client) {
18
+ server.registerTool("get_performance", {
19
+ title: "Ver desempenho da empresa",
20
+ description: "Resultado dos posts publicados num período: totais, variação contra o " +
21
+ "período anterior e o desempenho fatiado por rede, formato, campanha, " +
22
+ "pilar editorial e objetivo. " +
23
+ "Responde 'o que está funcionando?' numa chamada só. " +
24
+ "Atenção: `null` numa métrica significa que a rede não reporta aquilo — " +
25
+ "é diferente de zero, que é um resultado medido. Confira " +
26
+ "`accountsWithoutInsights` antes de concluir que o desempenho caiu: " +
27
+ "conta por reconectar derruba os totais sem que nada tenha piorado.",
28
+ inputSchema: z.object({ company: COMPANY_ARG, period: PERIOD }),
29
+ annotations: READ_ONLY,
30
+ }, guard(({ company, ...query }) => client.get(`/companies/${path(company)}/performance`, query)));
31
+ server.registerTool("list_post_performance", {
32
+ title: "Ranquear posts publicados",
33
+ description: "Posts publicados no período com as métricas de cada um, ordenáveis. " +
34
+ "Use `order: 'asc'` com `sort: 'engagementRate'` para achar o que NÃO " +
35
+ "funcionou — costuma ser mais útil que ver o topo. " +
36
+ "Posts ainda sem coleta ficam no fim em qualquer ordem, porque são " +
37
+ "ausência de dado e não resultado ruim.",
38
+ inputSchema: z.object({
39
+ company: COMPANY_ARG,
40
+ period: PERIOD,
41
+ sort: z
42
+ .enum(["reach", "impressions", "reactions", "engagementRate", "publishedAt"])
43
+ .optional()
44
+ .describe("Padrão: publishedAt."),
45
+ order: z.enum(["asc", "desc"]).optional().describe("Padrão: desc."),
46
+ limit: z.number().int().min(1).max(100).optional(),
47
+ }),
48
+ annotations: READ_ONLY,
49
+ }, guard(({ company, ...query }) => client.get(`/companies/${path(company)}/performance/posts`, query)));
50
+ server.registerTool("get_post_performance", {
51
+ title: "Ver desempenho de um post",
52
+ description: "Métricas de um post por rede, com o histórico de coletas desde a " +
53
+ "publicação — é o histórico que separa 'post fraco' de 'post ainda " +
54
+ "ganhando tração'. " +
55
+ "Os valores do histórico são CUMULATIVOS: cada leitura é o total até " +
56
+ "aquele dia, não o ganho do dia. Para o número atual use `current`; " +
57
+ "somar as leituras contaria o mesmo alcance várias vezes. " +
58
+ "`insightsBlockedBy` explica a ausência de métricas quando houver.",
59
+ inputSchema: z.object({ postId: z.string().min(1) }),
60
+ annotations: READ_ONLY,
61
+ }, guard(({ postId }) => client.get(`/posts/${path(postId)}/performance`)));
62
+ }
63
+ //# sourceMappingURL=performance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/tools/performance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,MAAM,GAAG,CAAC;KACb,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAC1B,QAAQ,EAAE;KACV,QAAQ,CAAC,mCAAmC,CAAC,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAiB,EACjB,MAA2B;IAE3B,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,wEAAwE;YACxE,uEAAuE;YACvE,8BAA8B;YAC9B,sDAAsD;YACtD,yEAAyE;YACzE,0DAA0D;YAC1D,qEAAqE;YACrE,oEAAoE;QACtE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC/D,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAC9B,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAC7D,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,sEAAsE;YACtE,uEAAuE;YACvE,oDAAoD;YACpD,oEAAoE;YACpE,wCAAwC;QAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,CAAC;iBACJ,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;iBAC5E,QAAQ,EAAE;iBACV,QAAQ,CAAC,sBAAsB,CAAC;YACnC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;SACnD,CAAC;QACF,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAC9B,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,CACnE,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,mEAAmE;YACnE,oEAAoE;YACpE,oBAAoB;YACpB,sEAAsE;YACtE,qEAAqE;YACrE,2DAA2D;YAC3D,mEAAmE;QACrE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CACxE,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@creativeproject/creative-plann-mcp",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Servidor MCP do Creative Plann — permite que uma IA planeje, escreva e organize posts nas redes sociais das empresas da sua organização.",
5
5
  "license": "MIT",
6
6
  "type": "module",