Skip to content

io.github.wilmendezofficial/postari

by wilmendezofficial · remote · no sign-in to list tools · v1.0.0 · published by GitHub user wilmendezofficial

Email marketing y transaccional AI-native: campañas, correos 1-a-1, contactos, flujos y métricas.

Final · 2Changes · 26

41 tools: 2 do something that can't be undone, 26 change things and 13 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http postari https://postari.io/api/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

41 tools

Can't be undone 2Claude Code: ask
  • account_statsMétricas globales de la cuenta (enviados, entregados, abrieron, hicieron clic, bajas, rebotes, contactos nuevos) en un rango de días de la zona horaria de la cuenta, ambos incluido…No findings

    Why it is in this group

    • The input addresses people (input.to): what it sends cannot be taken back.
    Description, as the server wrote it
    Métricas globales de la cuenta (enviados, entregados, abrieron, hicieron clic, bajas, rebotes, contactos nuevos) en un rango de días de la zona horaria de la cuenta, ambos incluidos; la cohorte es el día de ENVÍO de cada correo, la misma fuente que /metricas. avg_open_rate y avg_click_rate en % con 2 decimales sobre ENTREGADOS (avg_*_rate_fraction: alias deprecados en fracción). Si hay días aún sin calcular responde 503 metrics_recalculating: reintenta, nunca son sumas parciales. Rebote separado: bounced_hard / bounce_rate_hard (definitivo, el que se vigila) y bounced_soft / bounce_rate_soft (temporal), en % sobre enviados (bounce_rates_base: "sent"); null si el período no tiene el tipo medido, nunca un 0 inventado. total_bounces = definitivos + temporales. Ojo: en la ficha de campaña (get_campaign_stats) el mismo dato se llama bounce_hard_rate.
  • send_transactional_emailEnvía un correo transaccional 1-a-1 (cotización, recibo, bienvenida, recordatorio) a UNA dirección, usando una plantilla y variables.No findings

    Why it is in this group

    • The name "send_transactional_email" says "send": a word for sending, and what is sent cannot be taken back.
    Description, as the server wrote it
    Envía un correo transaccional 1-a-1 (cotización, recibo, bienvenida, recordatorio) a UNA dirección, usando una plantilla y variables. Síncrono. Requiere scope `send`.
Changes things 26Claude Code: ask
  • activate_flowPone la automatización en servicio (status active) o la pausa con paused:true.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Pone la automatización en servicio (status active) o la pausa con paused:true. OJO: activar NO hace que envíe — para eso hace falta armarla (arm_flow).
  • add_subscriber_to_listAñade un contacto (por email o contact_id) a una lista.No findings

    Why it is in this group

    • The name "add_subscriber_to_list" says "add": a word for a change.
    Description, as the server wrote it
    Añade un contacto (por email o contact_id) a una lista.
  • arm_flowARMA la automatización: a partir de aquí envía correos REALES sola.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    ARMA la automatización: a partir de aquí envía correos REALES sola. Exige confirm:"ARMAR ENVIOS" literal, haber probado el flujo antes, y que la cuenta permita envíos por agente. NO es retroactivo: solo entra quien cumpla el disparador de ahora en adelante.
  • clean_bounced_subscribersSaca de circulación a los contactos activos que tienen un rebote PERMANENTE (la dirección no existe) o 3 rebotes temporales seguidos sin ninguna señal de vida entre medio (ni entre…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Saca de circulación a los contactos activos que tienen un rebote PERMANENTE (la dirección no existe) o 3 rebotes temporales seguidos sin ninguna señal de vida entre medio (ni entregado, ni abierto, ni clic). Un rebote temporal suelto, como un buzón lleno, nunca saca a nadie. Deja escrito el motivo en el contacto. Sin `aplicar:true` solo devuelve el recuento por motivo, no cambia nada.
  • create_flowCrea una automatización.No findings

    Why it is in this group

    • The name "create_flow" says "create": a word for a change.
    Description, as the server wrote it
    Crea una automatización. NACE EN BORRADOR Y DESARMADA: no envía nada hasta que se pruebe, se active y se arme a propósito. El `graph` es el mismo formato que devuelve get_flow.
  • create_formCrea un formulario de captación y devuelve su URL pública y su código para embeber.No findings

    Why it is in this group

    • The name "create_form" says "create": a word for a change.
    Description, as the server wrote it
    Crea un formulario de captación y devuelve su URL pública y su código para embeber. Si no pasas campos, lleva uno de correo.
  • create_landingCrea una página de aterrizaje y devuelve su URL pública.No findings

    Why it is in this group

    • The name "create_landing" says "create": a word for a change.
    Description, as the server wrote it
    Crea una página de aterrizaje y devuelve su URL pública. `kind`: blocks (bloques de Postari) · code (HTML propio) · ai (desde un prompt) · iframe · external_url. Conéctale un formulario con form_id para que capte suscriptores.
  • create_launchCrea un LANZAMIENTO (curso, infoproducto, evento…) con sus etapas: es la unidad que agrupa los correos de una campaña con fechas.No findings

    Why it is in this group

    • The name "create_launch" says "create": a word for a change.
    Description, as the server wrote it
    Crea un LANZAMIENTO (curso, infoproducto, evento…) con sus etapas: es la unidad que agrupa los correos de una campaña con fechas. Si no pasas `stages` y el tipo es curso/infoproducto, siembra 8 etapas estándar (lead magnet → webinar → apertura de carrito → cierre).
  • create_listCrea una nueva lista de contactos.No findings

    Why it is in this group

    • The name "create_list" says "create": a word for a change.
    Description, as the server wrote it
    Crea una nueva lista de contactos.
  • create_segmentCrea un segmento: una regla de "quién entra" que se recalcula sola.No findings

    Why it is in this group

    • The name "create_segment" says "create": a word for a change.
    Description, as the server wrote it
    Crea un segmento: una regla de "quién entra" que se recalcula sola. Es lo que se usa para segmentar un lanzamiento sin duplicar listas.
  • create_subscriberCrea o actualiza (upsert) un contacto/suscriptor.No findings

    Why it is in this group

    • The name "create_subscriber" says "create": a word for a change.
    Description, as the server wrote it
    Crea o actualiza (upsert) un contacto/suscriptor. Si ya existe, lo actualiza sin duplicar.
  • create_tagCrea una etiqueta (idempotente: si ya existe devuelve la que hay, no la duplica).No findings

    Why it is in this group

    • The name "create_tag" says "create": a word for a change.
    Description, as the server wrote it
    Crea una etiqueta (idempotente: si ya existe devuelve la que hay, no la duplica).
  • create_templateCrea una plantilla propia de la cuenta, opcionalmente duplicando una del catálogo con from_template_id.No findings

    Why it is in this group

    • The name "create_template" says "create": a word for a change.
    Description, as the server wrote it
    Crea una plantilla propia de la cuenta, opcionalmente duplicando una del catálogo con from_template_id. Las del catálogo son compartidas y no se editan.
  • diagnose_deliverabilityDiagnóstico de ENTREGABILIDAD de la cuenta (últimos 28 días): rebotes, quejas de spam, aperturas y salud del dominio (DNS).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Diagnóstico de ENTREGABILIDAD de la cuenta (últimos 28 días): rebotes, quejas de spam, aperturas y salud del dominio (DNS). Devuelve un veredicto (sano/a_vigilar/en_riesgo) + acciones priorizadas. El rebote que se juzga (`bounce_rate`) es el DEFINITIVO; el temporal (buzón lleno) va aparte en `bounce_rate_temporal`. Tasas en % con 2 decimales: rebotes y quejas sobre ENVIADOS (umbrales sanos <2 % y <0,1 %); open_rate sobre ENTREGADOS, como account_stats. Úsalo antes de un envío grande o si los correos no llegan.
  • launch_campaignAGÉNTICA · Lanza una campaña de correo COMPLETA desde un brief en lenguaje natural.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    AGÉNTICA · Lanza una campaña de correo COMPLETA desde un brief en lenguaje natural. Postari GENERA el correo (asunto + diseño con la voz y el color de marca del tenant), lo arma sobre una lista y devuelve un BORRADOR con preview (preview_html). Por defecto NO envía: para enviar de verdad, vuelve a llamar con los mismos campos + confirm_send:true (o scheduled_at para agendar). Es la forma de "dile el objetivo y Postari lo logra". Requiere scope `write` (borrador) o `send` (enviar).
  • reactivate_bounced_subscriberDevuelve a tus envíos a un contacto que salió por un rebote TEMPORAL suelto (buzón lleno, servidor ocupado).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Devuelve a tus envíos a un contacto que salió por un rebote TEMPORAL suelto (buzón lleno, servidor ocupado). Solo funciona si el rebote fue temporal, el dominio no está bloqueado ni mal escrito (gmail.co, hormail.com: corrige la dirección; el 409 trae dominio_sugerido) y no se dio de baja ni marcó spam; si no, responde 409 con el motivo (por ejemplo, rebote definitivo: la dirección no existe). No reanuda flujos viejos ni envía la bienvenida. Úsalo en vez de update_subscriber con status "active".
  • set_campaign_audienceDefine A QUIÉN se le manda un correo y a quién NO: excluir por etiqueta, por lista entera o por haber recibido otra campaña.No findings

    Why it is in this group

    • The name "set_campaign_audience" says "set": a word for a change.
    Description, as the server wrote it
    Define A QUIÉN se le manda un correo y a quién NO: excluir por etiqueta, por lista entera o por haber recibido otra campaña. Devuelve el número REAL de destinatarios para confirmar antes de enviar. Si alguna referencia no existe, falla con 400 en vez de guardar a medias.
  • tag_subscribersAñade o quita una etiqueta a varios contactos (por emails o contact_ids).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Añade o quita una etiqueta a varios contactos (por emails o contact_ids).
  • test_flowPrueba una automatización enviándola de verdad a UN miembro de la cuenta (por defecto el dueño).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Prueba una automatización enviándola de verdad a UN miembro de la cuenta (por defecto el dueño). Es OBLIGATORIO antes de armar. No se puede usar para mandar correo a terceros: to_email tiene que ser de un miembro.
  • trigger_flowMete un contacto (por email o contact_id) en un flujo automático para que reciba esa secuencia.No findings

    Why it is in this group

    • The name "trigger_flow" says "trigger": a word for a change.
    Description, as the server wrote it
    Mete un contacto (por email o contact_id) en un flujo automático para que reciba esa secuencia.
  • update_flowEdita una automatización: nombre, disparador, pasos (graph) o estado.No findings

    Why it is in this group

    • The name "update_flow" says "update": a word for a change.
    Description, as the server wrote it
    Edita una automatización: nombre, disparador, pasos (graph) o estado. NO sirve para armar (eso es arm_flow, que exige confirmación); sí para DESARMAR con armed:false.
  • update_flow_emailEdita UN correo de una automatización (asunto, preheader, bloques o etiqueta) sin tocar el resto del flujo.No findings

    Why it is in this group

    • The name "update_flow_email" says "update": a word for a change.
    Description, as the server wrote it
    Edita UN correo de una automatización (asunto, preheader, bloques o etiqueta) sin tocar el resto del flujo. Más seguro que reescribir el graph entero.
  • update_formEdita un formulario: título, campos, lista donde caen las altas, doble opt-in, mensaje de gracias o activarlo/desactivarlo.No findings

    Why it is in this group

    • The name "update_form" says "update": a word for a change.
    Description, as the server wrote it
    Edita un formulario: título, campos, lista donde caen las altas, doble opt-in, mensaje de gracias o activarlo/desactivarlo.
  • update_landingEdita una página de aterrizaje: contenido, slug, formulario conectado o activarla/desactivarla.No findings

    Why it is in this group

    • The name "update_landing" says "update": a word for a change.
    Description, as the server wrote it
    Edita una página de aterrizaje: contenido, slug, formulario conectado o activarla/desactivarla. Cambiar el slug rompe la URL que ya se haya compartido (la respuesta avisa).
  • update_subscriberActualiza datos de un contacto existente (nombre, país, teléfono, etiquetas).No findings

    Why it is in this group

    • The name "update_subscriber" says "update": a word for a change.
    Description, as the server wrote it
    Actualiza datos de un contacto existente (nombre, país, teléfono, etiquetas). Solo envía esos campos: no cambia su estado de suscripción. Para devolver a alguien que salió por un rebote usa reactivate_bounced_subscriber. Quien se dio de baja o marcó spam solo vuelve por decisión propia (centro de preferencias del pie de los correos); un agente no puede resuscribirlo: el PUT /api/v1/subscribers/{email} con confirmar_resuscripcion:true es solo para una persona con su llave, queda auditado y desde el puente MCP responde 403 resuscripcion_no_disponible_para_agentes.
Only reads 13Claude Code: allow
  • get_agent_activityTransparencia "qué hizo la IA": lista las acciones de la cuenta originadas por un agente/IA (chat Atelier, API de agente, A2A) — qué se hizo, sobre qué y cuándo.No findings

    Why it is in this group

    • The name "get_agent_activity" says "get": a word for reading.
    Description, as the server wrote it
    Transparencia "qué hizo la IA": lista las acciones de la cuenta originadas por un agente/IA (chat Atelier, API de agente, A2A) — qué se hizo, sobre qué y cuándo. Para auditar lo que un agente ejecutó.
  • get_campaign_audience¿A cuánta gente le va a llegar este correo?No findings

    Why it is in this group

    • The name "get_campaign_audience" says "get": a word for reading.
    Description, as the server wrote it
    ¿A cuánta gente le va a llegar este correo? Devuelve los destinatarios REALES aplicando el filtro guardado, por el mismo camino que el envío: base = activos de la lista hoy, excluidos = los que quita el filtro, audience_live_total = el público de HOY. Si ya empezó a enviarse trae además recipients_snapshot (la foto del primer tick), excluded_on_send (tope de frecuencia y dominios bloqueados) y remaining_to_send. total_recipients es un alias deprecado de audience_live_total.
  • get_campaign_statsMétricas reales de una campaña leídas de los eventos en vivo: enviados, entregados, abrieron (únicos y aperturas registradas), clics únicos y registrados, clics de sistema, rebotes…No findings

    Why it is in this group

    • The name "get_campaign_stats" says "get": a word for reading.
    Description, as the server wrote it
    Métricas reales de una campaña leídas de los eventos en vivo: enviados, entregados, abrieron (únicos y aperturas registradas), clics únicos y registrados, clics de sistema, rebotes (bounce_hard_rate = definitivo, el que se vigila), bajas, quejas, ingresos USD atribuidos (ventas con clic o, sin clic, apertura de este correo antes de comprar; si la persona solo lo recibió la venta es «influida» y NO suma) y by_link (clics de contenido por URL). maturity: sending/paused = parcial, settling = enviada hace menos de 24 h. stale true = la lectura falló y las cifras no son de fiar. Definiciones: enviados = correos con sent_at; entregados = enviados − rebotados; abrieron = correos con apertura (píxel, webhook o clic); clics únicos = correos con clic en un enlace de contenido (baja, preferencias y pie aparte en clicked_system). Tasas en % con 2 decimales: entrega y rebote sobre ENVIADOS; apertura, clic, bajas y quejas sobre ENTREGADOS (rate_base "delivered"); ctor = clics únicos / abrieron. null = sin denominador, nunca 0 inventado. *_fraction son alias heredados en fracción 0-1 (deprecados).
  • get_formUn formulario con sus campos y sus KPIs recontados en vivo (form_kpis_v2): primary_count en primary_unit (people en captura, submissions en encuesta), people, submissions (envíos s…No findings

    Why it is in this group

    • The name "get_form" says "get": a word for reading.
    Description, as the server wrote it
    Un formulario con sus campos y sus KPIs recontados en vivo (form_kpis_v2): primary_count en primary_unit (people en captura, submissions en encuesta), people, submissions (envíos sin papelera), views, views_measured y conversion_rate (primary_count / views, % con 1 decimal, null si las vistas no están medidas). Mismas definiciones que list_forms. Si la lectura falla responde 503 metrics_unavailable (nunca un número sin avisar).
  • get_launchUn lanzamiento con sus etapas y las MÉTRICAS REALES de cada una (enviados, entregados, abrieron, clics únicos, bajas, ingresos USD atribuidos por clic o apertura, sin las ventas so…No findings

    Why it is in this group

    • The name "get_launch" says "get": a word for reading.
    Description, as the server wrote it
    Un lanzamiento con sus etapas y las MÉTRICAS REALES de cada una (enviados, entregados, abrieron, clics únicos, bajas, ingresos USD atribuidos por clic o apertura, sin las ventas solo «influidas») más el total; cada campaña se suma una sola vez. stages_sent de stages_total = etapas ya enviadas. metrics null en una etapa = todavía no tiene correo (no es 0). Es la forma de saber cómo va un lanzamiento. Definiciones: enviados = correos con sent_at; entregados = enviados − rebotados; abrieron = correos con apertura (píxel, webhook o clic); clics únicos = correos con clic en un enlace de contenido (baja, preferencias y pie aparte en clicked_system). Tasas en % con 2 decimales: entrega y rebote sobre ENVIADOS; apertura, clic, bajas y quejas sobre ENTREGADOS (rate_base "delivered"); ctor = clics únicos / abrieron. null = sin denominador, nunca 0 inventado. *_fraction son alias heredados en fracción 0-1 (deprecados).
  • get_subscriberBusca un contacto por su correo y devuelve sus datos, estado, etiquetas e historial básico.No findings

    Why it is in this group

    • The name "get_subscriber" says "get": a word for reading.
    Description, as the server wrote it
    Busca un contacto por su correo y devuelve sus datos, estado, etiquetas e historial básico. Si está rebotado trae `bounce: {tipo, subtipo, fecha, motivo, dominio_sugerido}` (tipo permanente o temporal; motivo rebote_permanente, rebote_temporal_repetido, rebote_temporal o rebote_sin_evento; dominio_sugerido si la dirección parece mal escrita, p. ej. gmail.co → gmail.com); si no, `bounce: null`.
  • list_campaignsLista las campañas/correos del tenant con sus métricas (metrics.*, desde los contadores que mantiene el reconciliador: durante un envío pueden ir unos minutos detrás de get_campaig…No findings

    Why it is in this group

    • The name "list_campaigns" says "list": a word for reading.
    Description, as the server wrote it
    Lista las campañas/correos del tenant con sus métricas (metrics.*, desde los contadores que mantiene el reconciliador: durante un envío pueden ir unos minutos detrás de get_campaign_stats). En este listado opened_total, clicked_total, clicked_system, delivered_confirmed, failed, bounced_hard, bounced_soft y bounce_hard_rate llegan en null (los contadores no los guardan; null = no medido, no 0): pídelos a get_campaign_stats. audience_count = «¿a cuántos?»: si ya empezó, la foto del envío; en borrador o programada, los ACTIVOS de la lista hoy ANTES del filtro guardado (audience_basis "list_active_before_filters"); el neto exacto lo da get_campaign_audience. Filtrable por estado (draft, scheduled, sending, sent). Definiciones: enviados = correos con sent_at; entregados = enviados − rebotados; abrieron = correos con apertura (píxel, webhook o clic); clics únicos = correos con clic en un enlace de contenido (baja, preferencias y pie aparte en clicked_system). Tasas en % con 2 decimales: entrega y rebote sobre ENVIADOS; apertura, clic, bajas y quejas sobre ENTREGADOS (rate_base "delivered"); ctor = clics únicos / abrieron. null = sin denominador, nunca 0 inventado. *_fraction son alias heredados en fracción 0-1 (deprecados).
  • list_flow_emailsLos correos de una automatización, cada uno con su node_id, su asunto y su URL propia para compartir con el cliente.No findings

    Why it is in this group

    • The name "list_flow_emails" says "list": a word for reading.
    Description, as the server wrote it
    Los correos de una automatización, cada uno con su node_id, su asunto y su URL propia para compartir con el cliente. Antes estos correos no tenían dirección: vivían enterrados en el flujo.
  • list_formsLista los formularios con sus KPIs.No findings

    Why it is in this group

    • The name "list_forms" says "list": a word for reading.
    Description, as the server wrote it
    Lista los formularios con sus KPIs. El número de cada formulario es primary_count en la unidad primary_unit: people = personas distintas (correo normalizado, sin papelera) en un formulario de captura; submissions = respuestas en una encuesta (is_survey true: una persona puede responder varias veces). people = personas distintas; submissions = envíos sin papelera (filas, repeticiones incluidas: NO es el número del formulario de captura); views = cargas del formulario (1 por navegador cada 24 h); views_measured false = la página que envía las altas no avisa de las visitas; conversion_rate = primary_count / views en % con 1 decimal (null si las vistas no están medidas). Los mismos números que la app.
  • list_landingsLista las páginas de aterrizaje con sus visitas, conversiones y tasa de conversión (conversion_rate = conversiones / visitas en % con 2 decimales y tope 100; null si aún no hubo vi…No findings

    Why it is in this group

    • The name "list_landings" says "list": a word for reading.
    Description, as the server wrote it
    Lista las páginas de aterrizaje con sus visitas, conversiones y tasa de conversión (conversion_rate = conversiones / visitas en % con 2 decimales y tope 100; null si aún no hubo visitas: no medible, no es 0 · cambio de contrato del 3-oct-2026, antes devolvía 0).
  • list_launchesLista los lanzamientos de la cuenta, con cuántas etapas tiene cada uno y cuántas ya están conectadas a un correo.No findings

    Why it is in this group

    • The name "list_launches" says "list": a word for reading.
    Description, as the server wrote it
    Lista los lanzamientos de la cuenta, con cuántas etapas tiene cada uno y cuántas ya están conectadas a un correo.
  • list_listsLista todas las listas de contactos con su tamaño: active_count = contactos ACTIVOS (a quienes les llega un envío) y total_count = todas las membresías (cualquier estado), de list_…No findings

    Why it is in this group

    • The name "list_lists" says "list": a word for reading.
    Description, as the server wrote it
    Lista todas las listas de contactos con su tamaño: active_count = contactos ACTIVOS (a quienes les llega un envío) y total_count = todas las membresías (cualquier estado), de list_sizes_v1, la misma fuente que la app. Una lista inteligente se mide evaluando su filtro (hoy no se envía a listas inteligentes); size_ok false = no se pudo medir y los conteos vienen en null. contacts_count es un alias deprecado de total_count.
  • list_subscribersLista contactos paginados (más recientes primero, cursor keyset).No findings

    Why it is in this group

    • The name "list_subscribers" says "list": a word for reading.
    Description, as the server wrote it
    Lista contactos paginados (más recientes primero, cursor keyset). Filtros: status (active|unsubscribed|bounced|complained), list_id (membresías físicas: una lista inteligente devuelve 0 filas; su tamaño está en list_lists (active_count / total_count) o en GET /api/v1/lists/{id}/count) y tag = nombre EXACTO de una etiqueta del catálogo (contact_tags, la misma fuente que /etiquetas). Desde el 3-oct-2026 tag ya no mira las etiquetas importadas (imported_tags): cada fila trae `tags` (importadas, como siempre) y `catalog_tags` (las del catálogo, las que filtra tag). include_count:true añade total_count; si el conteo no se puede hacer responde 503 count_unavailable, nunca 0.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http postari https://postari.io/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__postari__get_subscriber",
      "mcp__postari__list_subscribers",
      "mcp__postari__list_lists",
      "mcp__postari__list_campaigns",
      "mcp__postari__get_campaign_stats",
      "mcp__postari__get_agent_activity",
      "mcp__postari__list_launches",
      "mcp__postari__get_launch",
      "mcp__postari__list_flow_emails",
      "mcp__postari__list_forms",
      "mcp__postari__get_form",
      "mcp__postari__list_landings",
      "mcp__postari__get_campaign_audience"
    ],
    "ask": [
      "mcp__postari__send_transactional_email",
      "mcp__postari__create_subscriber",
      "mcp__postari__update_subscriber",
      "mcp__postari__reactivate_bounced_subscriber",
      "mcp__postari__clean_bounced_subscribers",
      "mcp__postari__create_list",
      "mcp__postari__add_subscriber_to_list",
      "mcp__postari__tag_subscribers",
      "mcp__postari__trigger_flow",
      "mcp__postari__account_stats",
      "mcp__postari__launch_campaign",
      "mcp__postari__diagnose_deliverability",
      "mcp__postari__create_launch",
      "mcp__postari__link_campaign_to_launch_stage",
      "mcp__postari__create_flow",
      "mcp__postari__update_flow",
      "mcp__postari__test_flow",
      "mcp__postari__activate_flow",
      "mcp__postari__arm_flow",
      "mcp__postari__update_flow_email",
      "mcp__postari__create_form",
      "mcp__postari__update_form",
      "mcp__postari__create_segment",
      "mcp__postari__create_template",
      "mcp__postari__create_tag",
      "mcp__postari__create_landing",
      "mcp__postari__update_landing",
      "mcp__postari__set_campaign_audience"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as postari. Review it before you use it.