# Referencia de herramientas MCP

> Referencia completa de todas las herramientas que expone el servidor MCP de graph8

Source: https://docs.graph8.com/es/developers/mcp-tools/

Referencia de todas las herramientas que expone el servidor MCP de graph8. Para la configuración y los modos (`dev` / `gtm` / `all`), consulte la página del [Servidor MCP](https://docs.graph8.com/developers/mcp/).

Número de herramientas por modo:

| Modo | Cantidad | Incluye |
|------|------:|----------|
| `dev` | 17 | Repositorio, instalación, escaneo, formularios, KB, campañas |
| `gtm` | 23 | Campañas de Studio, KB, ICPs, personas, contexto global |
| `all` | 35+ | Todas las herramientas que se listan a continuación (predeterminado para OAuth remoto) |

Todas las herramientas aceptan argumentos JSON y devuelven una cadena codificada en JSON en la respuesta MCP. Las herramientas marcadas como **destructivas** crean registros reales, envían mensajes reales, consumen créditos o varias de estas acciones a la vez. Confirme con el usuario antes de invocarlas.

> **Caution: Las herramientas de escritura tienen efectos secundarios**
> Las herramientas listadas bajo la anotación "destructivas" escriben en su CRM, envían datos a plataformas publicitarias o CRMs externos, envían mensajes a contactos o consumen créditos. Confirme siempre la intención y los parámetros con el usuario antes de invocarlas.

---

## Contactos

### `g8_search_contacts`

Busca contactos que ya están en su base de datos CRM. Solo lectura. Use esta herramienta para encontrar personas que ya conoce. Para prospectar nuevos leads, use `g8_find_contacts`.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `email` | string | no | Coincidencia exacta con el correo de trabajo |
| `list_id` | string | no | Filtrar por ID de lista de contactos |
| `name` | string | no | Coincidencia parcial en nombre o apellido |
| `job_title` | string | no | Coincidencia parcial en cargo |
| `seniority_level` | string | no | Coincidencia exacta (p. ej. `C-Suite`, `VP`, `Director`, `Manager`) |
| `company_name` | string | no | Coincidencia parcial en nombre de empresa |
| `country` | string | no | Coincidencia exacta en país |
| `page` | integer | no | Número de página, predeterminado `1` |
| `limit` | integer | no | Elementos por página, predeterminado `50`, máx. `200` |

**Responde**: `GET /contacts`. Devuelve una lista paginada de registros de contactos.

**Ejemplo**

```json
{
  "seniority_level": "VP",
  "company_name": "acme",
  "country": "US",
  "limit": 25
}
```

---

### `g8_find_contacts`

Busca prospectos que aún no tiene en su CRM dentro del índice de datos abiertos de graph8 (más de 700M de registros). Solo lectura, pero **se cobran créditos por cada registro devuelto**.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `filters` | array of objects | sí | Cada filtro es `{field, operator, value}` |
| `page` | integer | no | Predeterminado `1` |
| `limit` | integer | no | Predeterminado `25`, máx. `200` |

**Campos de filtro disponibles**: `first_name`, `last_name`, `work_email`, `job_title`, `seniority_level`, `job_department`, `role`, `linkedin_url`, `city`, `state`, `country`, `company_name`, `company_domain`, `company_industry`, `company_employee_count`, `company_revenue`, `company_founded_year`.

**Operadores**: `any_of`, `contains`, `all_of`, `none_of`, `is_empty`, `is_not_empty`, `between`, `exists`.

**Responde**: `POST /search/contacts`.

**Ejemplo**

```json
{
  "filters": [
    {"field": "seniority_level", "operator": "any_of", "value": ["VP", "Director"]},
    {"field": "company_industry", "operator": "contains", "value": ["SaaS"]},
    {"field": "company_employee_count", "operator": "between", "value": [50, 500]}
  ],
  "limit": 50
}
```

---

### `g8_create_contact`

Crea un contacto en su CRM. Use esta herramienta después de `g8_lookup_person` para persistir un prospecto, o para agregar un contacto manualmente. Devuelve el nuevo `contact_id` (necesario para `g8_add_to_sequence` y `g8_add_to_list`).

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `work_email` | string | sí | Dirección de correo de trabajo |
| `first_name` | string | no | Nombre |
| `last_name` | string | no | Apellido |
| `job_title` | string | no | Cargo |
| `company_domain` | string | no | Dominio de la empresa (p. ej. `acme.com`) |
| `linkedin_url` | string | no | URL del perfil de LinkedIn |
| `direct_phone` | string | no | Teléfono directo |
| `mobile_phone` | string | no | Teléfono móvil |
| `seniority_level` | string | no | Nivel jerárquico (p. ej. `VP`) |
| `city` | string | no | Ciudad |
| `state` | string | no | Estado o provincia |
| `country` | string | no | País |
| `list_id` | integer | no | Agregar opcionalmente a esta lista de inmediato |

**Responde**: `POST /contacts`. Devuelve el registro del contacto, incluido `contact_id`.

> **Caution:**
> Escribe un registro real en el CRM. Confirme con el usuario antes de invocarla.

---

### `g8_enrich_contacts`

Enriquece contactos existentes del CRM con datos de terceros mediante el sistema de cascada multiproveedor de graph8. Se ejecuta de forma asíncrona y devuelve un `job_id`. **Se cobran créditos por contacto.**

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `contact_ids` | array of integers | sí | IDs de contactos del CRM a enriquecer |
| `list_id` | integer | sí | Lista a la que pertenecen los contactos (requerida para el seguimiento de trabajos) |
| `mode` | string | no | `live` (por defecto — ejecuta el enriquecimiento y cobra créditos) o `preview` (simulación, devuelve costo y plan de proveedores sin cobrar) |
| `ai_group_id` | string | no | Reutiliza un grupo de prompts de IA existente en lugar de crear uno nuevo |
| `providers` | array of strings | no | Reemplaza el orden de proveedores por defecto. Valores permitidos: `apollo`, `dropcontact`, `emaillistverify`, `graph8`, `hunter`, `icypeas`, `leadmagic`, `lusha`, `prospeo`, `rocketreach`. Mutuamente excluyente con `steps` crudos en el endpoint de configuración. |
| `email_verification` | boolean | no | Cuando es `true`, adjunta la verificación de email de ZeroBounce (credenciales del sistema, `valid_statuses=["valid"]`) al pipeline de cascada. Predeterminado `false`. |

**Comportamiento**

- Cuando se proporciona `providers` o `email_verification`, la herramienta primero llama a `POST /enrichment/waterfall/configs` para crear/actualizar una configuración con los overrides (con fallback BYOK por proveedor), y luego despacha el trabajo de enriquecimiento.
- Cuando no se proporciona ninguno, la herramienta reutiliza la configuración de cascada activa existente para esa columna (creando el pipeline por defecto de graph8 `lookup_person` si no existe ninguno).

**Responde**: `POST /enrichment/waterfall/configs` (cuando hay overrides) + `POST /enrichment/waterfall/enrich`.

> **Caution:**
> Cobra créditos por contacto. Confirme con el usuario primero. Use `mode="preview"` para estimar el costo sin ejecutar.

---

## Campos

### `g8_create_field`

Crea una columna personalizada en una lista de contactos / empresas / cuentas. **MUY RECOMENDADO**: pase `enrichment_providers` (o `enrichment_email_verification=true`) en la MISMA llamada cuando la columna deba contener datos enriquecidos (emails, teléfonos, cargos, etc.). La configuración de cascada acompañante se aprovisiona en la misma solicitud para que el botón **Enriquecer** de la UI y `g8_enrich_contacts` funcionen de inmediato.

Si omite los argumentos de enrichment, la columna existirá pero no será ejecutable — `g8_enrich_contacts` y el botón Enriquecer de la UI fallarán con `422 waterfall_config_missing`. Tendría que llamar a `POST /enrichment/waterfall/configs` para repararla.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `list_id` | integer | sí | Lista a la que pertenece la columna |
| `name` | string | sí | Nombre visible de la columna (p. ej. `"Email laboral verificado"`) |
| `type` | string | sí | Tipo de columna: `text`, `number`, `boolean`, `single_select`, `multi_select`, `date`, `url`, `email`, `phone` |
| `description` | string | no | Descripción opcional de la columna |
| `options` | array of strings | no | Requerido cuando `type` es `single_select` o `multi_select` |
| `enrichment_providers` | array of strings | no | Cuando se proporciona, se crea una configuración de cascada acompañante. Mismos proveedores permitidos que en `g8_enrich_contacts`. |
| `enrichment_email_verification` | boolean | no | Cuando es `true`, la configuración acompañante también ejecuta verificación de email de ZeroBounce. Predeterminado `false`. |
| `enrichment_name` | string | no | Nombre amigable para el pipeline de cascada. Por defecto se deriva de los proveedores + flag de verificación. |

**Responde**: `POST /fields` con un bloque `enrichment` anidado opcional. Cuando el bloque de enriquecimiento se incluye, el backend escribe tanto `dynamic_columns` como `enrichment_configs` en la misma solicitud y la respuesta incluye tanto `column_id` como `config_id`.

> **Caution:**
> Escribe una columna real. Cuando los argumentos `enrichment_*` están presentes, también se escribe una fila de configuración de cascada real. Confirme con el usuario antes de invocarla.

---

## Empresas

### `g8_search_companies`

Busca empresas que ya están en su CRM. Solo lectura. Para nuevos prospectos, use `g8_find_companies`.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `domain` | string | no | Filtrar por dominio de empresa |
| `industry` | string | no | Filtrar por industria |
| `name` | string | no | Coincidencia parcial en nombre |
| `page` | integer | no | Predeterminado `1` |
| `limit` | integer | no | Predeterminado `50`, máx. `200` |

**Responde**: `GET /companies`.

---

### `g8_find_companies`

Busca empresas que aún no rastrea dentro del índice de datos abiertos de graph8. Solo lectura, **se cobran créditos por cada registro devuelto**.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `filters` | array of objects | sí | Filtros `{field, operator, value}` |
| `page` | integer | no | Predeterminado `1` |
| `limit` | integer | no | Predeterminado `25`, máx. `200` |

**Campos de filtro**: `name`, `domain`, `industry`, `industry_group`, `employee_count`, `revenue`, `founded_year`, `country`, `state`, `city`, `linkedin_followers`.

**Operadores**: el mismo conjunto que `g8_find_contacts`.

**Responde**: `POST /search/companies`.

---

## Enriquecimiento y búsqueda

### `g8_lookup_person`

Busca a una sola persona en el índice de datos de graph8. Devuelve datos enriquecidos (correo verificado, teléfono, cargo, empresa, puntuación de confianza). **Cuesta 2 créditos por búsqueda, que solo se cobran cuando se encuentra una coincidencia.**

Proporcione al menos uno de los siguientes: `email`, `linkedin_url` o (`first_name` + `last_name` + `company_domain`).

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `email` | string | condicional | Correo de la persona |
| `linkedin_url` | string | condicional | URL del perfil de LinkedIn |
| `first_name` | string | condicional | Combinar con `last_name` y `company_domain` |
| `last_name` | string | condicional | |
| `company_domain` | string | condicional | p. ej. `acme.com` |

**Responde**: `POST /enrichment/lookup/person`.

---

### `g8_lookup_company`

Busca una sola empresa. Devuelve ingresos, número de empleados, industria, conjunto tecnológico, financiamiento y puntuación de confianza. **Cuesta 2 créditos por búsqueda, que solo se cobran cuando se encuentra una coincidencia.**

Proporcione al menos uno de los siguientes: `domain` o `name`.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `domain` | string | condicional | Dominio de la empresa |
| `name` | string | condicional | Nombre de la empresa |

**Responde**: `POST /enrichment/lookup/company`.

---

## Listas

### `g8_get_lists`

Lista las listas de contactos y empresas en su CRM. Solo lectura.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `page` | integer | no | Predeterminado `1` |
| `limit` | integer | no | Predeterminado `50` |

**Responde**: `GET /lists`.

---

### `g8_create_list`

Crea una nueva lista vacía de contactos o empresas. Devuelve el `list_id`.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `title` | string | sí | Nombre de la lista (p. ej. `"Enterprise Q2 Targets"`) |
| `type` | string | no | `"contacts"` o `"companies"` (predeterminado `"contacts"`) |

**Responde**: `POST /lists`.

---

### `g8_add_to_list`

Agrega contactos existentes (que ya deben tener `contact_id`) a una lista.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `list_id` | integer | sí | Lista de destino |
| `contact_ids` | array of integers | sí | IDs de contactos a agregar |

**Responde**: `POST /lists/{list_id}/contacts`.

---

### `g8_build_contact_list`

Busca prospectos y guarda los resultados coincidentes en una nueva lista en una sola llamada. **Se cobran créditos por cada contacto guardado**, así que confirme siempre los filtros y `max_results` antes de proceder.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `filters` | array of objects | sí | Mismo formato de filtro que `g8_find_contacts` |
| `list_title` | string | sí | Nombre para la nueva lista |
| `max_results` | integer | no | Límite máximo de contactos guardados (predeterminado `100`) |

**Responde**: `POST /search/contacts/save`.

> **Caution:**
> Crea contactos reales y una lista real. Cobra créditos por contacto. Ejecute `g8_find_contacts` primero para previsualizar antes de confirmar.

---

## Pipeline y CRM

### `g8_get_deals`

Lista las oportunidades en su CRM con filtros opcionales. Solo lectura.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `page` | integer | no | Predeterminado `1` |
| `limit` | integer | no | Predeterminado `50` |
| `stage_id` | string | no | Filtrar por etapa |
| `pipeline_id` | string | no | Filtrar por pipeline |
| `search` | string | no | Búsqueda de texto libre |

**Responde**: `GET /deals`.

---

### `g8_get_deal`

Obtiene los detalles de una sola oportunidad. Solo lectura.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `deal_id` | string | sí | ID de la oportunidad |

**Responde**: `GET /deals/{deal_id}`.

---

### `g8_get_pipeline`

Lista los pipelines de oportunidades y sus etapas. Solo lectura. Sin parámetros.

**Responde**: `GET /deals/pipelines`.

---

## Tareas

### `g8_get_tasks`

Lista las tareas de la organización actual. Solo lectura.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `status` | string | no | Filtrar por estado |
| `priority` | integer | no | Filtrar por prioridad |
| `assignee_id` | string | no | Filtrar por responsable |
| `search` | string | no | Búsqueda de texto libre |

**Responde**: `GET /tasks`.

---

### `g8_create_task`

Crea una tarea vinculada a un contacto del CRM.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `contact_id` | integer | sí | Contacto al que pertenece la tarea |
| `title` | string | sí | Título de la tarea |
| `description` | string | no | Descripción de la tarea |
| `due_date` | string | no | Cadena de fecha ISO 8601 |
| `assignee_id` | string | no | ID de usuario del responsable |
| `priority` | integer | no | Valor de prioridad |

**Responde**: `POST /contacts/{contact_id}/tasks`.

---

## Actividad y notas

### `g8_get_activities`

Lista las actividades recientes del CRM para la organización actual. Solo lectura.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `limit` | integer | no | Predeterminado `50` |
| `activity_type` | string | no | Filtrar por tipo de actividad |
| `contact_id` | string | no | Filtrar por contacto |
| `company_id` | string | no | Filtrar por empresa |
| `deal_id` | string | no | Filtrar por oportunidad |

**Responde**: `GET /activities`.

---

### `g8_create_note`

Agrega una nota a un contacto del CRM.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `contact_id` | integer | sí | Contacto al que se adjunta la nota |
| `content` | string | sí | Cuerpo de la nota |

**Responde**: `POST /contacts/{contact_id}/notes`.

---

## Secuencias

### `g8_list_sequences`

Lista las secuencias outbound disponibles. Solo lectura. Use esta herramienta para encontrar un `sequence_id` antes de llamar a `g8_add_to_sequence`.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `page` | integer | no | Predeterminado `1` |
| `limit` | integer | no | Predeterminado `50` |

**Responde**: `GET /sequences`.

---

### `g8_create_sequence`

Crea una nueva secuencia outbound (en borrador). Opcionalmente incluye `steps` y `channels`.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `name` | string | sí | Nombre de la secuencia |
| `user_email` | string | sí | Correo del propietario |
| `description` | string | no | Descripción |
| `finish_on_reply` | boolean | no | Predeterminado `true` |
| `send_in_same_thread` | boolean | no | Predeterminado `false` |
| `steps` | array of objects | no | Cada paso: `{step_order, step_type, input_type, time_interval, step_data}` |
| `channels` | array of objects | no | Cada canal: `{channel_id, channel_value, channel_type}` |
| `campaign_id` | string | no | Campaña de AI Studio a vincular |

**Responde**: `POST /sequences`.

> **Caution:**
> Crea una secuencia real. Confirme con el usuario primero.

---

### `g8_get_sequence_preview`

Previsualiza una secuencia con sus pasos y canales. Solo lectura, sin inscripción de contactos.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `sequence_id` | string | sí | ID de la secuencia |

**Responde**: `GET /sequences/{sequence_id}/preview`.

---

### `g8_update_sequence`

Actualiza los metadatos de una secuencia. No se puede modificar mientras esté en un estado transitorio.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `sequence_id` | string | sí | Secuencia a actualizar |
| `name` | string | no | Nuevo nombre |
| `description` | string | no | Nueva descripción |
| `is_shared` | boolean | no | Indicador de compartido |
| `finish_on_reply` | boolean | no | |
| `send_in_same_thread` | boolean | no | |
| `wait_for_new_contacts` | boolean | no | |

**Responde**: `PATCH /sequences/{sequence_id}`.

---

### `g8_update_sequence_step`

Actualiza un solo paso en una secuencia.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `sequence_id` | string | sí | Secuencia padre |
| `step_id` | string | sí | Paso a actualizar |
| `step_data` | object | no | Datos de plantilla o contenido |
| `time_interval` | integer | no | Retraso (en segundos) después del paso anterior |
| `step_type` | string | no | `EMAIL`, `PHONE`, `SMS`, etc. |
| `input_type` | string | no | `ON_DEMAND` o `TEMPLATE` |

**Responde**: `PATCH /sequences/{sequence_id}/steps/{step_id}`.

---

### `g8_add_to_sequence`

Inscribe contactos en una secuencia outbound.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `sequence_id` | string | sí | Obtenido de `g8_list_sequences` |
| `contact_ids` | array of integers | sí | IDs de contactos del CRM |
| `list_id` | integer | sí | Lista a la que pertenecen los contactos |

**Responde**: `POST /sequences/{sequence_id}/contacts`.

> **Danger:**
> Esto inscribe contactos reales en una secuencia activa que enviará correos o mensajes. Confirme siempre con el usuario antes de invocarla.

---

### `g8_pause_sequence`

Pausa una secuencia activa. Los contactos en curso completan su flujo de forma gradual.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `sequence_id` | string | sí | Secuencia a pausar |

**Responde**: `POST /sequences/{sequence_id}/pause`.

> **Caution:**
> Pausa la prospección real. Confirme con el usuario primero.

---

### `g8_resume_sequence`

Reanuda una secuencia pausada.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `sequence_id` | string | sí | Secuencia a reanudar |

**Responde**: `POST /sequences/{sequence_id}/resume`.

> **Caution:**
> Reanuda la prospección real. Confirme con el usuario primero.

---

### `g8_get_sequence_analytics`

Obtiene el resumen general, el rendimiento, la interacción, la línea de tiempo y la distribución de contactos de una secuencia. Solo lectura.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `sequence_id` | string | sí | ID de la secuencia |

**Responde**: `GET /sequences/{sequence_id}/analytics`.

---

### `g8_delete_sequence`

Archiva una secuencia mediante eliminación lógica. Establece `is_archived=true`. Queda oculta en la interfaz y excluida del procesamiento de trabajos.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `sequence_id` | string | sí | Secuencia a archivar |

**Responde**: `DELETE /sequences/{sequence_id}`.

> **Danger:**
> Archiva una secuencia real. Confirme con el usuario primero.

---

## Bandeja de entrada

Bandeja de entrada multicanal que cubre correo electrónico, SMS y LinkedIn. Cada herramienta acepta un `channel` opcional (`email` / `sms` / `linkedin`, predeterminado `email`).

### `g8_list_inbox`

Lista los hilos de la bandeja de entrada en todos los canales. Solo lectura.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `channel` | string | no | `email`, `sms`, `linkedin`, u omitir para todos |
| `sequence_id` | string | no | Filtrar por secuencia o campaña |
| `status` | string | no | Filtrar por estado |
| `assignee` | string | no | Correo del responsable |
| `tag` | string | no | ID de etiqueta |
| `page` | integer | no | Predeterminado `1` |
| `page_size` | integer | no | Predeterminado `50`, máx. `200` |

**Responde**: `GET /inbox`.

---

### `g8_get_reply`

Obtiene un solo hilo de la bandeja de entrada con el historial completo de mensajes. Solo lectura.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `reply_id` | string | sí | ID del hilo o respuesta |
| `channel` | string | no | Predeterminado `"email"` |

**Responde**: `GET /inbox/{reply_id}`.

---

### `g8_assign_reply`

Asigna un usuario a un hilo de la bandeja de entrada.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `reply_id` | string | sí | ID del hilo o respuesta |
| `assignee_email` | string | sí | Usuario a asignar |
| `channel` | string | no | Predeterminado `"email"` |

**Responde**: `POST /inbox/{reply_id}/assign`.

---

### `g8_tag_reply`

Adjunta etiquetas a un hilo de la bandeja de entrada.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `reply_id` | string | sí | ID del hilo o respuesta |
| `tag_ids` | array of strings | sí | IDs de etiquetas |
| `channel` | string | no | Predeterminado `"email"` |

**Responde**: `POST /inbox/{reply_id}/tag`.

---

### `g8_get_reply_draft`

Genera un borrador de respuesta con IA para un hilo. **Consume créditos.** Devuelve HTTP 402 si la organización no tiene créditos suficientes.

**Parámetros**

| Nombre | Tipo | Requerido | Descripción |
|------|------|:-------:|-------------|
| `reply_id` | string | sí | ID del hilo o respuesta |
| §INLIN
