Connect

Leer la tienda Shopify

Datos de la tienda Shopify.

Tool IDshopify.tienda.leer
Nombre MCPshopify__tienda__leer
Conectorshopify
Planoaction
Scope (permiso)shopify:pedidos
Authconnection_credentials
Versión1
Sensibleno
Deprecadono
ComportamientoreadOnly=true, destructive=false, idempotent=true, openWorld=true

Requiere conexión. Indica cuál en cada llamada: header X-Connect-Connection en REST y campo connectionId en el execute de MCP. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale de conexiones.estado.consultar.

Qué hace

Trae dominio .myshopify.com, moneda, zona horaria, si los precios incluyen impuestos, los permisos que concedió y cuánto historial de pedidos alcanza. Connect consulta Shopify en vivo y no guarda nada: cada llamada lee la tienda de la conexión.

Entrada

Sin parámetros: envía {}.

JSON Schema de entrada
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Ejemplo

curl
curl -X POST https://connect.emisso.ai/api/v1/tools/shopify.tienda.leer/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{}}'
MCP · meta-tool execute
{
  "tool": "shopify.tienda.leer",
  "params": {},
  "connectionId": "conn_9tKfR2mQx4Vb"
}

Salida esperada (200):

{
  "data": {
    "tiendaId": "gid://shopify/Shop/48123456789",
    "nombre": "Andes Café",
    "dominioMyshopify": "andes-cafe.myshopify.com",
    "dominioPrincipal": "tienda.andescafe.cl",
    "moneda": "CLP",
    "monedasPresentacion": [
      "CLP"
    ],
    "zonaHoraria": "America/Santiago",
    "impuestosIncluidos": true,
    "permisosConcedidos": [
      "read_orders",
      "read_products",
      "read_inventory"
    ],
    "historial": {
      "completo": false,
      "diasDisponibles": 60
    }
  },
  "meta": {
    "request_id": "req_…",
    "tool_id": "shopify.tienda.leer",
    "plane": "action",
    "latency_ms": 7410,
    "audit_status": "recorded"
  }
}

Sin read_all_orders, Shopify solo deja ver los pedidos de los últimos 60 días.

Salida

CampoTipoRequeridoDescripción
tiendaIdstring ^gid:\/\/shopify\/síIdentificador de la tienda. Identificador global de Shopify (gid://shopify/Shop/…), texto.
nombrestringnullsí
dominioMyshopifystringsíDominio \<tienda>.myshopify.com: la identidad de la conexión.
dominioPrincipalstringnullsí
monedastringsíMoneda de la tienda (ISO 4217): la de todos los montos de Connect.
monedasPresentacionlista de stringsíMonedas en que la tienda puede cobrar a compradores.
zonaHorariastringnullsí
impuestosIncluidosbooleanonullsí
permisosConcedidoslista de stringsíPermisos de Shopify que la tienda concedió a la app.
historialobjetosíCuánto historial de pedidos alcanza esta conexión según los permisos concedidos en Shopify.
historial.completobooleanonullsí
historial.diasDisponiblesenteronullsí
JSON Schema de salida
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "tiendaId": {
      "type": "string",
      "pattern": "^gid:\\/\\/shopify\\/",
      "description": "Identificador de la tienda. Identificador global de Shopify (`gid://shopify/Shop/…`), texto."
    },
    "nombre": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 255
        },
        {
          "type": "null"
        }
      ],
      "description": "Nombre de la tienda."
    },
    "dominioMyshopify": {
      "type": "string",
      "description": "Dominio `<tienda>.myshopify.com`: la identidad de la conexión."
    },
    "dominioPrincipal": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 255
        },
        {
          "type": "null"
        }
      ],
      "description": "Dominio principal público de la tienda."
    },
    "moneda": {
      "type": "string",
      "description": "Moneda de la tienda (ISO 4217): la de todos los montos de Connect."
    },
    "monedasPresentacion": {
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Monedas en que la tienda puede cobrar a compradores."
    },
    "zonaHoraria": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 64
        },
        {
          "type": "null"
        }
      ],
      "description": "Zona horaria IANA de la tienda, por ejemplo `America/Santiago`."
    },
    "impuestosIncluidos": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "true si los precios de la tienda incluyen impuestos."
    },
    "permisosConcedidos": {
      "maxItems": 64,
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Permisos de Shopify que la tienda concedió a la app."
    },
    "historial": {
      "type": "object",
      "properties": {
        "completo": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "true si la tienda concedió `read_all_orders` y se ve todo el historial; false si solo se ven los últimos 60 días; null si Shopify no informó los permisos."
        },
        "diasDisponibles": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ],
          "description": "60 cuando el historial está limitado; null en otro caso."
        }
      },
      "required": [
        "completo",
        "diasDisponibles"
      ],
      "additionalProperties": false,
      "description": "Cuánto historial de pedidos alcanza esta conexión según los permisos concedidos en Shopify."
    }
  },
  "required": [
    "tiendaId",
    "nombre",
    "dominioMyshopify",
    "dominioPrincipal",
    "moneda",
    "monedasPresentacion",
    "zonaHoraria",
    "impuestosIncluidos",
    "permisosConcedidos",
    "historial"
  ],
  "additionalProperties": false
}

Errores de esta tool

CódigoHTTPReintentableQué hacer
connection_disabled403noReactívala en /connections o usa otra conexión del mismo sistema.
connection_not_found404noUsa uno de los connectionId que lista el error, o revisa la conexión en /connections. No hace falta reactivar nada.
connection_credential_required428noCrea un enlace con conexiones.enlace.crear (modo reconectar si la conexión ya existe) y pide a la persona que entregue la credencial de nuevo. No reintentes con la credencial anterior.
connection_busy409síEspera unos segundos y reintenta. Es una espera transitoria: no necesitas volver a conectar ni ingresar la credencial otra vez.
upstream_error502síReintenta más tarde. Si persiste, el problema está en el sistema externo, no en tu integración.
timeout504síReintenta. Para sincronizaciones largas usa la vía asíncrona y consulta el estado del trabajo.
connector_onboarding_required428noLee el mensaje: dice qué falta. Se completa en el portal de ese sistema, no en Connect, y después la llamada funciona sin cambios.
connection_scope_not_enabled403noPide a un owner/admin que habilite el scope en /connections para esa conexión, o usa otra que ya lo tenga activo. Cambiar la credencial del actor no resuelve este error.
rate_limited429síEspera y reintenta con backoff exponencial.
upstream_unexpected_response502noNo reintentes: la respuesta es determinista. Repórtalo con el request_id para que actualicemos el conector.
external_resource_not_found404noVerifica el identificador con la tool de búsqueda del mismo sistema. Reintentar con el mismo identificador da el mismo resultado.

Toda llamada puede devolver además los códigos transversales (validation_error, unauthorized, scope_not_granted, rate_limited, entre otros): el detalle vive en el catálogo de errores.

En esta página