/** * El nodo de Mailchimp como AI toolkit: sus seis operaciones como herramientas * que un AI Node, un servidor MCP o un agente de voz pueden llamar. * * ## Qué pidió Ariel (2026-09-27) * * Primero lo probó como cliente —«pruébalo así como está»— y después «crees el * AI Toolkit del MailChimp». Sus decisiones: * * - **Las 3 + lecturas**: además de dar de alta, etiquetar y meter en un * journey, el modelo puede buscar un contacto, listar las audiencias y * los merge fields de una. Sin eso escribe a ciegas. * - **La audiencia del nodo, abrible**: nace limitado a la audiencia del * nodo (`toolkitScope: 'node'`) y el dueño lo abre a todas (`any`), como * la base de Airtable. * - **El estado lo decide el dueño**: `upsert_contact` NO tiene `status`. Un * contacto nuevo nace con el «Status if the contact is new» del nodo * (`pending` por defecto, que manda el correo de confirmación). Dar de * alta como `subscribed` a quien no lo pidió es un problema legal, y no * es algo que deba decidir un modelo. * * Hasta ese día Mailchimp tenía `aiEnabled` pero exponía el nodo como UNA * herramienta sin operación, como RSS antes de rehacerse. * * ## El esquema * * Sólo `string`, `number` y `boolean` (lo que admite MCP): los merge fields * van como JSON en un `string`, y los tags como se escriben en la caja — * `vip, -trial`, el menos quita—. */ import type { CampoDeToolkit } from './argumentos-de-toolkit.js'; export type MailchimpToolkitOperation = 'upsertContact' | 'setTags' | 'triggerJourney' | 'getContact' | 'listAudiences' | 'listMergeFields'; export interface MailchimpToolkitParameter { name: string; type: 'string' | 'number' | 'boolean'; description: string; required: boolean; } export interface MailchimpToolkitSpec { operation: MailchimpToolkitOperation; label: string; toolName: string; description: string; parameters: MailchimpToolkitParameter[]; destructive?: boolean; /** Nace bloqueada en el nodo; el dueño la desbloquea. Ver `toolkits.ts`. */ bloqueadaPorDefecto?: boolean; } /** Los parámetros que el nodo puede traer configurados: el modelo los omite y * se usa la audiencia del nodo. */ export declare const MAILCHIMP_TOOLKIT_DEFAULTABLE: readonly ["audience_id"]; /** Hasta dónde llega el modelo. `node` (el de fábrica): la audiencia del nodo. * `any`: cualquier audiencia de la cuenta. */ export declare const MAILCHIMP_TOOLKIT_ALCANCES: readonly ["node", "any"]; export type MailchimpToolkitAlcance = (typeof MAILCHIMP_TOOLKIT_ALCANCES)[number]; /** Cuántas audiencias o merge fields trae un listado. Fijo, como el resto de * topes desde que decide el LLM: una cuenta rara vez tiene más. */ export declare const MAILCHIMP_TOOLKIT_LISTADO_MAXIMO = 100; export declare const MAILCHIMP_TOOLKIT_SPECS: MailchimpToolkitSpec[]; export declare const MAILCHIMP_TOOLKIT_SPECS_BY_TOOL_NAME: Readonly>; export declare const MAILCHIMP_TOOLKIT_CAMPOS: Readonly>>>; /** Los campos de single operation que el toolkit NO expone, y por qué. El * test de paridad los salta con nombre, no en silencio. */ export declare const MAILCHIMP_TOOLKIT_FUERA: Readonly>;