# Crear o editar un producto

`save_product`

Crea un producto o servicio del perfil de marca, o edita uno existente por su id (de get_brand_profile). Para crear, name es obligatorio. Solo cambia los campos enviados; los demás productos y las categorías quedan igual, y una categoría nueva se agrega a la lista. Sin confirm devuelve la vista previa.

**Permiso:** Edición. Requiere un token de «Lectura y edición».

> **Cambia datos:** Modifica información de tu empresa en Bison. Tu agente debería pedirte confirmación antes de usarla.

Qué va en cada campo y cuáles son clave: [Perfil de marca](https://docs.bisonagents.com/mcp/perfil-de-marca/).

## Parámetros

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `product_id` | texto | No | id del producto a editar; omítelo para crear uno. |
| `name` | texto (hasta 200 caracteres) | No | Nombre del producto o servicio. Obligatorio al crear. |
| `type` | una de `physical`, `saas`, `service`, `infoproduct` | No | Cómo se clasifica la solución. Una de: physical (Producto físico), saas (Software / SaaS), service (Servicio profesional), infoproduct (Infoproducto). |
| `main_category` | texto (hasta 200 caracteres) | No | Categoría principal; si no existe, se agrega a la lista de categorías. |
| `description` | texto (hasta 2000 caracteres) | No | Descripción breve. |
| `features` | texto (hasta 2000 caracteres) | No | Características principales. |
| `differentiators` | texto (hasta 2000 caracteres) | No | Qué lo diferencia de las alternativas. |
| `value_proposition` | texto (hasta 2000 caracteres) | No | Por qué elegirlo, en una o dos frases. |
| `price_range` | texto (hasta 200 caracteres) | No | Rango de precio, por ejemplo «$10.000–$20.000». |
| `delivery_time` | texto (hasta 200 caracteres) | No | Tiempo de entrega o de implementación. |
| `warranty` | texto (hasta 500 caracteres) | No | Garantía. |
| `problems_solved` | texto (hasta 2000 caracteres) | No | Problemas que le resuelve al cliente. |
| `url` | texto (hasta 2000 caracteres) | No | Página del producto en el sitio de la marca. |
| `confirm` | booleano | No | false u omitido: solo devuelve la vista previa (antes y después) sin guardar. true: guarda. |

## Ejemplo de llamada

No tienes que escribir esto: tu agente decide cuándo usar la herramienta según lo que le pidas. Es la llamada MCP equivalente, con valores de relleno:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "save_product",
    "arguments": {
      "name": "<name>"
    }
  }
}
```

## Ejemplo de vista previa

Sin `confirm`, con `{"product_id":"prd_auto","differentiators":"Pagas solo por los kilómetros que recorres."}`, no guarda nada y devuelve esto, para una marca ficticia («Altavista Seguros»). Para guardar, repite la llamada con `confirm: true`.

```json
{
  "saved": false,
  "changed": true,
  "id": "prd_auto",
  "created": false,
  "changes": {
    "differentiators": {
      "before": null,
      "after": "Pagas solo por los kilómetros que recorres."
    }
  },
  "notes": "Vista previa: no se guardó nada. Muéstrale el cambio al usuario y repite la llamada con confirm: true para guardarlo."
}
```
