> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reallyquickemails.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Servidor MCP

> Conecta tu cuenta de ReallyQuickEmails a Claude, Cursor u otro cliente de IA y opera tu proyecto conversando.

El **servidor MCP** de ReallyQuickEmails expone tu proyecto mediante el [Model Context Protocol](https://modelcontextprotocol.io). Conéctalo a claude.ai, Claude Desktop, Cursor o Claude Code y tu asistente podrá consultar tus contactos, campañas, métricas y automatizaciones respondiendo en lenguaje natural.

<Info>
  Tu asistente puede **consultar** datos, **modificar** contactos y segmentos, **crear campañas en borrador** (que tú revisas y envías desde la app), **inscribir contactos en automatizaciones** e incluso **enviar correo** — cada capacidad detrás de su propio permiso, que tú concedes al crear la clave. **Crear automatizaciones completas por chat llega próximamente.**
</Info>

La conexión es segura por diseño:

* **El servidor no guarda credenciales de tu base de datos.** Autentica cada llamada con tu clave MCP y la reenvía a la API; el proyecto se resuelve desde la clave, nunca desde lo que pida el asistente. Una clave de un proyecto no puede leer otro.
* **Cada clave lleva sus propios permisos.** El asistente solo ve y solo puede usar las herramientas que sus permisos habilitan.
* **La revocas cuando quieras** y el acceso se corta en la siguiente llamada.

***

## Desde claude.ai (lo más rápido)

En claude.ai no necesitas crear ninguna clave a mano ni editar archivos de configuración:

<Steps>
  <Step title="Agregar el conector">
    Abre **Configuración → Conectores → Agregar conector personalizado** y pega la URL:

    ```
    https://mcp.reallyquickemails.com/mcp
    ```
  </Step>

  <Step title="Autorizar">
    Claude te lleva a una pantalla de ReallyQuickEmails. Inicia sesión si no lo estabas, elige el
    **proyecto** que quieres conectar, marca si además de leer quieres permitir **crear y editar**, y
    pulsa **Autorizar**.

    Eso es todo: la app emite la clave por ti y el conector queda listo.
  </Step>
</Steps>

<Info>
  La clave que se emite aparece en **Integraciones → API Keys → Claves MCP**, con el nombre del
  cliente que conectaste. Para desconectar el conector, revócala ahí.
</Info>

<Warning>
  Por esta vía **nunca se concede `sends:execute`** (enviar correo real). Si quieres que tu
  asistente envíe por ti, crea la clave a mano con ese permiso y conéctalo por el método de abajo.
</Warning>

***

## Con una clave (Claude Desktop, Cursor, Claude Code)

Los clientes que aceptan headers en su configuración usan tu clave MCP directamente.

<Steps>
  <Step title="Crear una clave MCP">
    1. Entra al [dashboard](https://app.reallyquickemails.com) y selecciona tu proyecto.
    2. En el menú lateral abre **Integraciones → API Keys**.
    3. Baja hasta la sección **Claves MCP** y pulsa **Crear clave**.
    4. Ponle un nombre y marca los **permisos** que quieres conceder (ver [Permisos](#permisos)). Concede solo los que el asistente necesite.
    5. Copia la clave (`rqe_mcp_...`).

    <Warning>
      La clave completa se muestra **una sola vez**. Si la pierdes, revócala y crea una nueva. No la pegues en código del lado del cliente ni en repositorios.
    </Warning>

    <Warning>
      Las claves del **API REST** (`sk_proj_...`) **no funcionan en el MCP** — devuelven 401. El MCP usa su propio tipo de clave (`rqe_mcp_...`), con permisos granulares, que se crea en esta misma sección.
    </Warning>
  </Step>

  <Step title="Conectar tu cliente de IA">
    Usa el endpoint `https://mcp.reallyquickemails.com/mcp` con tu clave en el header `X-API-Key`.

    <Tabs>
      <Tab title="Claude Desktop">
        Abre **Settings → Developer → Edit Config** y agrega tu servidor. También puedes editar `claude_desktop_config.json` a mano:

        ```json theme={null}
        {
          "mcpServers": {
            "reallyquickemails": {
              "url": "https://mcp.reallyquickemails.com/mcp",
              "headers": { "X-API-Key": "rqe_mcp_tu_clave" }
            }
          }
        }
        ```

        Reinicia Claude Desktop. El servidor aparece en el selector de herramientas.
      </Tab>

      <Tab title="Cursor">
        Edita `~/.cursor/mcp.json` (global) o `.cursor/mcp.json` (por proyecto):

        ```json theme={null}
        {
          "mcpServers": {
            "reallyquickemails": {
              "url": "https://mcp.reallyquickemails.com/mcp",
              "headers": { "X-API-Key": "rqe_mcp_tu_clave" }
            }
          }
        }
        ```

        Actívalo en **Settings → MCP**.
      </Tab>

      <Tab title="Claude Code">
        Agrégalo con un comando:

        ```bash theme={null}
        claude mcp add reallyquickemails \
          --transport http \
          https://mcp.reallyquickemails.com/mcp \
          --header "X-API-Key: rqe_mcp_tu_clave"
        ```

        Verifícalo con `claude mcp list`.
      </Tab>
    </Tabs>
  </Step>

  <Step title="Verificar la conexión">
    Pídele a tu asistente algo simple, por ejemplo:

    > ¿A qué proyecto de ReallyQuickEmails estoy conectado?

    Llamará a la herramienta `whoami` y responderá con el nombre de tu proyecto y los permisos de la clave. Si en cambio ves un error de autorización, revisa que copiaste la clave completa y que no está revocada.
  </Step>
</Steps>

***

## Permisos

Cada clave concede uno o más permisos. El asistente **no ve** las herramientas cuya autorización no le diste, y si intenta usarlas de todos modos, la llamada se rechaza.

| Permiso             | Habilita                                                                                                  |
| ------------------- | --------------------------------------------------------------------------------------------------------- |
| `contacts:read`     | Contactos, su actividad, eventos, remitentes, dominios y lista de supresión                               |
| `contacts:write`    | Crear/actualizar contactos, tags, atributos, eventos y supresión                                          |
| `campaigns:read`    | Campañas y sus reportes de métricas                                                                       |
| `campaigns:write`   | Crear campañas **en borrador** (nunca las envía)                                                          |
| `reports:read`      | Métricas agregadas del proyecto en un rango de fechas                                                     |
| `segments:read`     | Segmentos y sus reglas                                                                                    |
| `segments:write`    | Crear segmentos                                                                                           |
| `templates:read`    | Plantillas (metadatos, no el cuerpo del email)                                                            |
| `templates:write`   | Crear plantillas de email desde HTML                                                                      |
| `automations:read`  | Automatizaciones y sus reportes                                                                           |
| `automations:write` | Inscribir contactos en automatizaciones activas                                                           |
| `sends:execute`     | **Enviar correo real.** El permiso más sensible — concédelo solo si quieres que el asistente envíe por ti |

<Tip>
  Empieza con el mínimo. Si solo quieres que el asistente analice el desempeño de tus campañas, `campaigns:read` y `reports:read` bastan. Los permisos de escritura (`:write`) concédelos solo si quieres que el asistente modifique tus datos.
</Tip>

<Warning>
  Los permisos de escritura modifican tus datos reales. Solo `sends:execute` envía correo directamente, pero ten presente que **agregar un tag, registrar un evento o inscribir en una automatización activa puede resultar en un envío** si tienes flujos configurados con esos triggers. Concédelos con intención.
</Warning>

***

## Herramientas disponibles

<AccordionGroup>
  <Accordion title="Contactos — contacts:read">
    | Herramienta            | Qué hace                                              |
    | ---------------------- | ----------------------------------------------------- |
    | `list_contacts`        | Lista contactos con búsqueda por email o nombre       |
    | `get_contact`          | Un contacto por su UUID, con sus datos y segmentos    |
    | `get_contact_activity` | Qué le pasó a un contacto: emails recibidos y eventos |
    | `list_events`          | Eventos personalizados registrados en el proyecto     |
    | `get_suppression_list` | Direcciones suprimidas que no recibirán email         |
    | `list_senders`         | Remitentes verificados del proyecto                   |
    | `list_domains`         | Dominios de envío y su estado de autenticación        |
  </Accordion>

  <Accordion title="Campañas — campaigns:read">
    | Herramienta           | Qué hace                                                                 |
    | --------------------- | ------------------------------------------------------------------------ |
    | `list_campaigns`      | Campañas con su estado y contadores                                      |
    | `get_campaign_report` | Métricas de una campaña: enviados, entregados, aperturas, clics, rebotes |
  </Accordion>

  <Accordion title="Métricas, segmentos, plantillas y automatizaciones">
    | Herramienta             | Permiso            | Qué hace                                                                                                                       |
    | ----------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
    | `get_metrics`           | `reports:read`     | Métricas agregadas del proyecto en un rango                                                                                    |
    | `list_segments`         | `segments:read`    | Segmentos con su tamaño y su regla                                                                                             |
    | `list_templates`        | `templates:read`   | Plantillas del proyecto (metadatos)                                                                                            |
    | `get_template`          | `templates:read`   | Una plantilla CON su contenido: HTML final y fuente editable — para verificar asunto, preheader, links y cuerpo contra la base |
    | `list_automations`      | `automations:read` | Automatizaciones con su estado y su disparador real                                                                            |
    | `get_automation`        | `automations:read` | Una automatización CON su grafo de nodos y conexiones — para auditar un flujo antes de activarlo                               |
    | `get_automation_report` | `automations:read` | Desempeño de una automatización: enviados, abiertos, clics                                                                     |
    | `get_automation_runs`   | `automations:read` | Los runs de una automatización: para quién disparó, cuándo y en qué terminó                                                    |
  </Accordion>

  <Accordion title="Diagnóstico — integrations:read">
    Para responder "¿por qué no disparó mi flujo?" sin esperar a soporte.

    | Herramienta                      | Qué hace                                                                                                 |
    | -------------------------------- | -------------------------------------------------------------------------------------------------------- |
    | `get_shopify_integration_status` | Salud de la integración Shopify: webhooks suscritos vs esperados, eventos recibidos, entregas rechazadas |
    | `list_checkout_events`           | Checkouts de Shopify que llegaron a la plataforma, con su estado de procesamiento                        |
    | `diagnose_automation`            | Camina la cadena completa del carrito abandonado y nombra el primer eslabón roto                         |
  </Accordion>

  <Accordion title="Escritura — contacts:write / segments:write / campaigns:write / automations:write">
    Modifican datos reales. Ninguna de estas envía correo directamente, pero las marcadas pueden disparar automatizaciones activas que sí envíen.

    | Herramienta            | Permiso             | Qué hace                                                                                                                  |
    | ---------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------- |
    | `upsert_contacts`      | `contacts:write`    | Crea o actualiza hasta 1000 contactos por email, con atributos y segmentos. Puede disparar flujos de contacto nuevo       |
    | `add_tags`             | `contacts:write`    | Agrega tags a un contacto existente (unión, sin duplicados). Puede disparar flujos por tag                                |
    | `set_attributes`       | `contacts:write`    | Agrega o actualiza atributos de un contacto existente (los demás se conservan)                                            |
    | `track_event`          | `contacts:write`    | Registra un evento personalizado (compra, registro…). Puede disparar flujos por evento                                    |
    | `suppress_email`       | `contacts:write`    | Agrega direcciones a la lista de supresión (dejan de recibir correo)                                                      |
    | `create_segment`       | `segments:write`    | Crea un segmento vacío; se llena después desde la app                                                                     |
    | `create_template`      | `templates:write`   | Crea una plantilla de email desde HTML y devuelve el link para abrirla en el editor. Las imágenes deben ser URLs públicas |
    | `create_campaign`      | `campaigns:write`   | Crea una campaña **siempre en borrador** — tú la revisas, completas y envías desde la app                                 |
    | `enroll_in_automation` | `automations:write` | Inscribe un contacto en una automatización **activa** — el flujo corre de inmediato y puede enviarle correo               |
  </Accordion>

  <Accordion title="Envío — sends:execute">
    | Herramienta  | Qué hace                                                                                                                                                                                                                      |
    | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `send_email` | **Envía un correo real de inmediato** (hasta 50 destinatarios), desde un remitente verificado del proyecto. Soporta `idempotency_key`: la misma clave dentro de 24 h devuelve el resultado anterior en vez de enviar de nuevo |

    <Warning>
      `send_email` no es un borrador y no se puede deshacer. Concede `sends:execute` solo a claves cuyo asistente deba enviar por ti, y revócala si dejas de necesitarlo.
    </Warning>
  </Accordion>

  <Accordion title="Identidad — sin permiso">
    | Herramienta | Qué hace                                                                                    |
    | ----------- | ------------------------------------------------------------------------------------------- |
    | `whoami`    | El proyecto al que pertenece la clave y sus permisos. Cualquier clave válida puede llamarla |
  </Accordion>
</AccordionGroup>

***

## Modo partner (gestiona tu cartera de clientes)

Si eres un **partner** que administra varios clientes (cada uno un proyecto RQE), puedes conectar el MCP con tu **partner-key** (`sk_partner_...`) en vez de una key de proyecto. En ese modo, **una sola conexión** opera a nivel organización y expone 3 herramientas para gestionar tu cartera:

| Herramienta        | Qué hace                                                                           |
| ------------------ | ---------------------------------------------------------------------------------- |
| `list_clients`     | Lista tus proyectos-cliente (id, nombre, slug, estado).                            |
| `create_client`    | Crea un proyecto-cliente nuevo y devuelve su `api_key` (`sk_proj_`) para operarlo. |
| `get_client_stats` | Métricas 30 días (envíos, entregas, aperturas, clics) de un cliente.               |

```json theme={null}
{
  "mcpServers": {
    "reallyquickemails-partner": {
      "url": "https://mcp.reallyquickemails.com/mcp",
      "headers": { "Authorization": "Bearer sk_partner_xxxxxxxxxxxx" }
    }
  }
}
```

<Info>
  El modo partner opera **por organización**: `list_clients`/`get_client_stats` solo ven proyectos de tu org, y `create_client` los crea dentro de ella. Para operar un cliente en detalle (enviar, contactos, campañas), usa su `api_key` de proyecto con el MCP normal. Detalle de los endpoints en [Partner / Provisioning](/api-reference/partner).
</Info>

## Revocar una clave

En **Integraciones → API Keys → Claves MCP**, pulsa **Revocar** en la clave. El acceso se corta en la siguiente llamada; el asistente que la use recibirá un error de autorización. La clave revocada queda listada para tu registro, sin poder reactivarse.

## Preguntas frecuentes

<AccordionGroup>
  <Accordion title="¿En qué se diferencia de mi API Key normal?">
    Tu API Key (`sk_...`) da acceso completo a la API, incluido el envío de correo, y está pensada para tu propio backend. La clave MCP (`rqe_mcp_...`) tiene permisos granulares y está pensada para conectar un asistente de IA de terceros con exactamente el acceso que decidas. Nunca pegues tu `sk_...` en un cliente de IA.
  </Accordion>

  <Accordion title="¿El asistente puede enviar correos o borrar datos?">
    Puede enviar correo **solo** si le concediste `sends:execute` — sin ese permiso, ni siquiera ve la herramienta de envío. Las campañas que crea nacen siempre en borrador y las envías tú desde la app. No borra contactos ni datos: no existen herramientas de borrado. Cada capacidad es un permiso separado que concedes explícitamente al crear la clave.
  </Accordion>

  <Accordion title="¿Puede crear automatizaciones (flujos) completas?">
    Todavía no — llega **próximamente**. Hoy puede inscribir contactos en automatizaciones que ya construiste (con `automations:write`) y consultar su desempeño, pero el diseño del flujo (nodos, triggers, condiciones) se hace desde la app.
  </Accordion>

  <Accordion title="¿Puedo tener varias claves?">
    Sí. Es buena práctica una clave por cliente o por uso, cada una con el mínimo de permisos, para poder revocar una sin afectar al resto.
  </Accordion>

  <Accordion title="¿Por qué claude.ai no me deja pegar la clave?">
    Porque no la necesita. Los conectores de claude.ai no tienen campo para headers: se conectan por OAuth, así que en vez de pedirte una clave te llevan a una pantalla de ReallyQuickEmails donde eliges proyecto y permisos, y la app emite la clave por ti. Es el mismo tipo de clave (`rqe_mcp_...`) y la ves y revocas en el mismo lugar.
  </Accordion>
</AccordionGroup>
