aicrm-mcp 0.6.0 → 0.6.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/README.md CHANGED
@@ -47,6 +47,6 @@ claude mcp add aicrm -- npx -y aicrm-mcp
47
47
  npx -y aicrm-mcp skill install aicrm-integrate --project
48
48
  ```
49
49
 
50
- Depois é só pedir: *"integre o formulário de contato deste projeto com o funil Vendas do AICRM"*. O agente lê os funis e os campos obrigatórios, mostra o mapeamento, cria uma chave de teste no `.env`, escreve o código com o SDK `@aicrm/sdk`, roda e confere nos logs. A chave de produção só é criada com o seu ok.
50
+ Depois é só pedir: *"integre o formulário de contato deste projeto com o funil Vendas do AICRM"*. O agente lê os funis e os campos obrigatórios, mostra o mapeamento, cria uma chave de teste no `.env`, escreve o código com o SDK `@aicrm-dev/sdk`, roda e confere nos logs. A chave de produção só é criada com o seu ok.
51
51
 
52
52
  As permissões são aplicadas pelo servidor: um vendedor consegue tudo o que faz no app, e recebe "peça a um admin" nas ações de admin. O guia completo de uso está no SKILL.md (`aicrm-mcp skill`).
package/dist/cli.js CHANGED
@@ -1216,7 +1216,7 @@ function registerIntegrationTools(server) {
1216
1216
  },
1217
1217
  withApi(async (api) => {
1218
1218
  const s = await api.get("/integrations/status");
1219
- const next = !s.hasTestKey ? "Crie uma chave de teste com create_api_key." : !s.firstLead ? "Escreva o c\xF3digo com o SDK @aicrm/sdk e rode; confira em list_api_logs." : !s.hasLiveKey ? "Quando a pessoa aprovar, crie a chave de produ\xE7\xE3o (create_api_key mode live) e troque no ambiente de produ\xE7\xE3o." : "Integra\xE7\xE3o completa. Se quiser, limpe os leads de teste com clear_test_leads.";
1219
+ const next = !s.hasTestKey ? "Crie uma chave de teste com create_api_key." : !s.firstLead ? "Escreva o c\xF3digo com o SDK @aicrm-dev/sdk e rode; confira em list_api_logs." : !s.hasLiveKey ? "Quando a pessoa aprovar, crie a chave de produ\xE7\xE3o (create_api_key mode live) e troque no ambiente de produ\xE7\xE3o." : "Integra\xE7\xE3o completa. Se quiser, limpe os leads de teste com clear_test_leads.";
1220
1220
  return text({
1221
1221
  test_key: s.hasTestKey,
1222
1222
  first_lead: s.firstLead ? `${s.firstLead.name} em ${s.firstLead.funnelName} \u203A ${s.firstLead.stageName}${s.firstLead.isTest ? " (teste)" : ""}` : null,
@@ -1984,7 +1984,7 @@ function registerManageTools(server) {
1984
1984
  }
1985
1985
 
1986
1986
  // src/server.ts
1987
- var DEVELOPER_INSTRUCTIONS = "Voc\xEA est\xE1 conectado ao AICRM como Desenvolvedor: seu trabalho \xE9 integrar o sistema desta pessoa ao CRM pela API p\xFAblica, com o SDK @aicrm/sdk. Voc\xEA n\xE3o v\xEA leads nem o time, s\xF3 a estrutura (get_integration_schema), suas chaves e os logs. Roteiro: 1) get_integration_schema; 2) ache no c\xF3digo de onde v\xEAm os leads e mostre \xE0 pessoa o mapeamento campo \u2192 campo do CRM (inclusive os obrigat\xF3rios) antes de escrever; 3) create_api_key em modo test, que grava a chave no .env sem mostr\xE1-la; 4) npm i @aicrm/sdk e escreva o c\xF3digo com externalId; 5) rode e confira em list_api_logs, corrigindo pelos how_to_fix; 6) s\xF3 com o ok da pessoa, create_api_key mode live (confirm_live) e clear_test_leads. Chave secreta (aicrm_sk_) nunca vai para o navegador: no site use publishable. Se a skill aicrm-integrate estiver instalada, siga-a.";
1987
+ var DEVELOPER_INSTRUCTIONS = "Voc\xEA est\xE1 conectado ao AICRM como Desenvolvedor: seu trabalho \xE9 integrar o sistema desta pessoa ao CRM pela API p\xFAblica, com o SDK @aicrm-dev/sdk. Voc\xEA n\xE3o v\xEA leads nem o time, s\xF3 a estrutura (get_integration_schema), suas chaves e os logs. Roteiro: 1) get_integration_schema; 2) ache no c\xF3digo de onde v\xEAm os leads e mostre \xE0 pessoa o mapeamento campo \u2192 campo do CRM (inclusive os obrigat\xF3rios) antes de escrever; 3) create_api_key em modo test, que grava a chave no .env sem mostr\xE1-la; 4) npm i @aicrm-dev/sdk e escreva o c\xF3digo com externalId; 5) rode e confira em list_api_logs, corrigindo pelos how_to_fix; 6) s\xF3 com o ok da pessoa, create_api_key mode live (confirm_live) e clear_test_leads. Chave secreta (aicrm_sk_) nunca vai para o navegador: no site use publishable. Se a skill aicrm-integrate estiver instalada, siga-a.";
1988
1988
  async function currentRole() {
1989
1989
  const creds = await loadCredentials();
1990
1990
  if (!creds) return "";
@@ -1994,13 +1994,13 @@ async function currentRole() {
1994
1994
  async function startServer() {
1995
1995
  const role = await currentRole();
1996
1996
  if (role === "developer") {
1997
- const dev = new McpServer({ name: "aicrm", version: "0.6.0" }, { instructions: DEVELOPER_INSTRUCTIONS });
1997
+ const dev = new McpServer({ name: "aicrm", version: "0.6.1" }, { instructions: DEVELOPER_INSTRUCTIONS });
1998
1998
  registerIntegrationTools(dev);
1999
1999
  await dev.connect(new StdioServerTransport());
2000
2000
  return;
2001
2001
  }
2002
2002
  const server = new McpServer(
2003
- { name: "aicrm", version: "0.6.0" },
2003
+ { name: "aicrm", version: "0.6.1" },
2004
2004
  {
2005
2005
  instructions: 'AICRM \xE9 um CRM de vendas. Workspaces cont\xEAm funis; funis cont\xEAm etapas e leads. Status do lead: open, won, lost. Workspaces, funis, etapas e vendedores podem ser referenciados por nome. Valores monet\xE1rios est\xE3o em reais (BRL). Use get_dashboard/get_forecast para metas e proje\xE7\xF5es estat\xEDsticas (Monte Carlo bayesiano). Para "o que eu fa\xE7o hoje?", use get_today_plan: lista os leads que mais ajudam a bater a meta, com motivo e a\xE7\xE3o sugerida. Cada workspace pode ter campos personalizados (ex.: Cidade, Porte) e esconder campos padr\xE3o: veja list_fields. Em create_lead/update_lead, preencha-os em custom_fields usando o nome do campo. Lead ganho n\xE3o troca de funil: para levar o cliente adiante (ex.: Aquisi\xE7\xE3o \u2192 Relacionamento), use handoff_lead ou next_funnel em mark_won, que criam um lead novo ligado ao ganho. Antes de importar um CSV desconhecido, rode import_leads_csv com dry_run=true para revisar o mapeamento de colunas. Pap\xE9is: admin configura tudo (estrutura, campos, comiss\xF5es, pap\xE9is); manager (Master) lidera o time s\xF3 nos workspaces dele: v\xEA todos os leads, importa e distribui, reatribui e exclui leads, define metas (set_goals), pausa/libera vendedores, usa modo TV e convida vendedores; member \xE9 o vendedor. Admins e Masters n\xE3o recebem leads automaticamente (distribui\xE7\xE3o e rod\xEDzio v\xE3o s\xF3 para vendedores), mas podem assumir um lead de prop\xF3sito. Funis com auto_assign distribuem leads sem vendedor por desempenho; quem passa um dia \xFAtil sem nenhuma a\xE7\xE3o no funil para de receber at\xE9 um Master ou admin liberar: veja get_distribution, release_seller e pause_seller. O servidor aplica as permiss\xF5es do usu\xE1rio logado: se uma a\xE7\xE3o for negada, explique que precisa de um admin ou Master. A\xE7\xF5es destrutivas (delete_*, archive_field, revoke_*) exigem confirma\xE7\xE3o expl\xEDcita da pessoa antes.'
2006
2006
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aicrm-mcp",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "MCP server for AICRM — operate your CRM from Claude, Opencode and other MCP clients.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: aicrm-integrate
3
- description: Integrar um sistema (site, landing page, formulário, checkout, webhook de pagamento, ERP, app) ao AICRM para que os leads caiam no funil de vendas, usando o SDK @aicrm/sdk e as ferramentas de integração do MCP aicrm (get_integration_schema, create_api_key, send_test_lead, list_api_logs). Use quando a pessoa pedir para mandar leads, contatos, cadastros ou pedidos para o AICRM ou para o CRM, conectar um formulário ao funil, ou criar/depurar uma integração com o AICRM, mesmo sem dizer "SDK" ou "API".
3
+ description: Integrar um sistema (site, landing page, formulário, checkout, webhook de pagamento, ERP, app) ao AICRM para que os leads caiam no funil de vendas, usando o SDK @aicrm-dev/sdk e as ferramentas de integração do MCP aicrm (get_integration_schema, create_api_key, send_test_lead, list_api_logs). Use quando a pessoa pedir para mandar leads, contatos, cadastros ou pedidos para o AICRM ou para o CRM, conectar um formulário ao funil, ou criar/depurar uma integração com o AICRM, mesmo sem dizer "SDK" ou "API".
4
4
  ---
5
5
 
6
6
  # Integrar com o AICRM
@@ -64,12 +64,12 @@ Chame `create_api_key` com `mode: "test"`:
64
64
  A ferramenta grava a chave, grava `AICRM_API_URL` quando a API não é a padrão (`https://api.aicrm.dev`) e põe o `.env` no `.gitignore`. Você recebe só o prefixo. Se o projeto tiver um `.env.example`, acrescente lá o nome da variável **sem valor**.
65
65
 
66
66
  ### Passo 5: escrever o código
67
- Instale com o gerenciador do projeto (`npm i @aicrm/sdk`, `pnpm add @aicrm/sdk`, `yarn add @aicrm/sdk` ou `bun add @aicrm/sdk`). Depois de instalar, a referência completa do SDK está em `node_modules/@aicrm/sdk/README.md`.
67
+ Instale com o gerenciador do projeto (`npm i @aicrm-dev/sdk`, `pnpm add @aicrm-dev/sdk`, `yarn add @aicrm-dev/sdk` ou `bun add @aicrm-dev/sdk`). Depois de instalar, a referência completa do SDK está em `node_modules/@aicrm-dev/sdk/README.md`.
68
68
 
69
69
  Servidor (Node, Next.js route handler, Express, edge):
70
70
 
71
71
  ```ts
72
- import { AICRM } from "@aicrm/sdk";
72
+ import { AICRM } from "@aicrm-dev/sdk";
73
73
 
74
74
  const aicrm = new AICRM(); // lê AICRM_API_KEY (e AICRM_API_URL, se houver) do ambiente
75
75
 
@@ -91,7 +91,7 @@ export async function onLead(input: { nome: string; email: string; cidade: strin
91
91
  Navegador, com chave pública (o funil já vem da chave):
92
92
 
93
93
  ```ts
94
- import { AICRM } from "@aicrm/sdk";
94
+ import { AICRM } from "@aicrm-dev/sdk";
95
95
  const aicrm = new AICRM(import.meta.env.VITE_AICRM_KEY);
96
96
  const { error } = await aicrm.leads.create({ name, email, phone, metadata: { pagina: location.pathname } });
97
97
  ```