{
 "$schema": "https://azter.ai/schemas/public-catalog-v0.json",
 "generatedAt": "2026-08-21T02:44:18.855Z",
 "version": "0.1.0",
 "capabilities": [
  {
   "name": "catalog.search",
   "version": "1.0.0",
   "summary": "Busca productos del catálogo por nombre o SKU (con variantes e imágenes)",
   "execution": "query",
   "riskClass": "read",
   "requiredScopes": [
    "catalog:read"
   ],
   "scopeMatch": "anyOf",
   "inputSchema": {
    "type": "object",
    "properties": {
     "search": {
      "type": "string"
     },
     "limit": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
     }
    },
    "required": [],
    "additionalProperties": false
   },
   "outputSchema": {
    "type": "array",
    "items": {
     "type": "object",
     "properties": {
      "sku": {
       "type": "string"
      },
      "name": {
       "type": [
        "string",
        "null"
       ]
      },
      "price": {
       "anyOf": [
        {
         "type": "number"
        },
        {
         "type": "null"
        }
       ]
      },
      "currency": {
       "type": [
        "string",
        "null"
       ]
      },
      "stock": {
       "anyOf": [
        {
         "type": "number"
        },
        {
         "type": "null"
        }
       ]
      },
      "availability": {
       "type": [
        "string",
        "null"
       ]
      },
      "image_url": {
       "type": [
        "string",
        "null"
       ]
      },
      "description": {
       "type": [
        "string",
        "null"
       ]
      },
      "location": {
       "type": [
        "string",
        "null"
       ]
      },
      "delivery": {
       "type": [
        "string",
        "null"
       ]
      },
      "address": {
       "type": [
        "string",
        "null"
       ]
      },
      "developer": {
       "type": [
        "string",
        "null"
       ]
      },
      "amenities": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        },
        {
         "type": "null"
        }
       ]
      },
      "typologies": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "array",
         "items": {
          "type": "string"
         }
        },
        {
         "type": "null"
        }
       ]
      }
     },
     "required": [
      "sku"
     ],
     "additionalProperties": false
    }
   },
   "idempotency": {
    "required": false,
    "strategy": "none"
   },
   "consistency": {
    "level": "best_effort",
    "maxStalenessMs": null
   },
   "provenance": {
    "source": "azter_native",
    "authoritativeDefault": false,
    "freshnessFields": [
     "source",
     "observedAt",
     "freshness",
     "authoritative",
     "fallbackUsed"
    ]
   },
   "status": "AVAILABLE",
   "surfaces": {
    "agentRuntime": "AVAILABLE",
    "mcp": "IN_PROGRESS",
    "rest": "PLANNED"
   },
   "deprecated": false
  },
  {
   "name": "contacts.get",
   "version": "1.0.0",
   "summary": "Ficha completa de un contacto por id",
   "execution": "query",
   "riskClass": "read",
   "requiredScopes": [
    "customers:read"
   ],
   "scopeMatch": "anyOf",
   "inputSchema": {
    "type": "object",
    "properties": {
     "contact_id": {
      "type": "string"
     }
    },
    "required": [
     "contact_id"
    ],
    "additionalProperties": false
   },
   "outputSchema": {
    "type": "object",
    "properties": {
     "name": {
      "type": [
       "string",
       "null"
      ]
     },
     "phone": {
      "type": [
       "string",
       "null"
      ]
     },
     "email": {
      "type": [
       "string",
       "null"
      ]
     },
     "tags": {
      "type": [
       "array",
       "null"
      ],
      "items": {
       "type": "string"
      }
     },
     "score": {
      "type": [
       "number",
       "null"
      ]
     },
     "ltv": {
      "type": [
       "number",
       "null"
      ]
     }
    },
    "required": [],
    "additionalProperties": false
   },
   "idempotency": {
    "required": false,
    "strategy": "none"
   },
   "consistency": {
    "level": "best_effort",
    "maxStalenessMs": null
   },
   "provenance": {
    "source": "azter_native",
    "authoritativeDefault": false,
    "freshnessFields": [
     "source",
     "observedAt",
     "freshness",
     "authoritative",
     "fallbackUsed"
    ]
   },
   "status": "AVAILABLE",
   "surfaces": {
    "agentRuntime": "AVAILABLE",
    "mcp": "IN_PROGRESS",
    "rest": "PLANNED"
   },
   "deprecated": false
  },
  {
   "name": "contacts.search",
   "version": "1.0.0",
   "summary": "Busca contactos del workspace por nombre, teléfono o email",
   "execution": "query",
   "riskClass": "read",
   "requiredScopes": [
    "customers:read"
   ],
   "scopeMatch": "anyOf",
   "inputSchema": {
    "type": "object",
    "properties": {
     "query": {
      "type": "string"
     }
    },
    "required": [
     "query"
    ],
    "additionalProperties": false
   },
   "outputSchema": {
    "type": "array",
    "items": {
     "type": "object",
     "properties": {
      "name": {
       "type": [
        "string",
        "null"
       ]
      },
      "phone": {
       "type": [
        "string",
        "null"
       ]
      },
      "email": {
       "type": [
        "string",
        "null"
       ]
      }
     },
     "required": [],
     "additionalProperties": false
    }
   },
   "idempotency": {
    "required": false,
    "strategy": "none"
   },
   "consistency": {
    "level": "best_effort",
    "maxStalenessMs": null
   },
   "provenance": {
    "source": "azter_native",
    "authoritativeDefault": false,
    "freshnessFields": [
     "source",
     "observedAt",
     "freshness",
     "authoritative",
     "fallbackUsed"
    ]
   },
   "status": "AVAILABLE",
   "surfaces": {
    "agentRuntime": "AVAILABLE",
    "mcp": "IN_PROGRESS",
    "rest": "PLANNED"
   },
   "deprecated": false
  },
  {
   "name": "contacts.update",
   "version": "1.0.0",
   "summary": "Actualiza datos básicos de un contacto",
   "execution": "command",
   "riskClass": "write",
   "requiredScopes": [
    "customers:write"
   ],
   "scopeMatch": "allOf",
   "inputSchema": {
    "type": "object",
    "properties": {
     "contact_id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "phone": {
      "type": "string"
     },
     "email": {
      "type": "string"
     },
     "tags": {
      "type": "array",
      "items": {
       "type": "string"
      }
     }
    },
    "required": [
     "contact_id"
    ],
    "additionalProperties": false
   },
   "outputSchema": {
    "type": "object",
    "properties": {
     "ok": {
      "type": "boolean"
     },
     "error": {
      "type": "string"
     }
    },
    "required": [
     "ok"
    ],
    "additionalProperties": false
   },
   "idempotency": {
    "required": true,
    "strategy": "logical-attempt",
    "states": [
     "pending",
     "executing",
     "confirmed",
     "failed",
     "unknown"
    ]
   },
   "consistency": {
    "level": "best_effort",
    "maxStalenessMs": null
   },
   "provenance": {
    "source": "azter_native",
    "authoritativeDefault": false,
    "freshnessFields": [
     "source",
     "observedAt",
     "freshness",
     "authoritative",
     "fallbackUsed"
    ]
   },
   "status": "AVAILABLE",
   "surfaces": {
    "agentRuntime": "AVAILABLE",
    "mcp": "IN_PROGRESS",
    "rest": "PLANNED"
   },
   "deprecated": false
  },
  {
   "name": "conversations.history",
   "version": "1.0.0",
   "summary": "Historial de mensajes de una conversación (más recientes primero)",
   "execution": "query",
   "riskClass": "read",
   "requiredScopes": [
    "conversations:read"
   ],
   "scopeMatch": "anyOf",
   "inputSchema": {
    "type": "object",
    "properties": {
     "conversation_id": {
      "type": "string"
     },
     "limit": {
      "type": "integer",
      "minimum": 0,
      "maximum": 200
     }
    },
    "required": [
     "conversation_id"
    ],
    "additionalProperties": false
   },
   "outputSchema": {
    "type": "array",
    "items": {
     "type": "object",
     "properties": {
      "sender": {
       "type": [
        "string",
        "null"
       ]
      },
      "content": {
       "type": [
        "string",
        "null"
       ]
      },
      "created_at": {
       "type": [
        "string",
        "null"
       ]
      }
     },
     "required": [],
     "additionalProperties": false
    }
   },
   "idempotency": {
    "required": false,
    "strategy": "none"
   },
   "consistency": {
    "level": "best_effort",
    "maxStalenessMs": null
   },
   "provenance": {
    "source": "azter_native",
    "authoritativeDefault": false,
    "freshnessFields": [
     "source",
     "observedAt",
     "freshness",
     "authoritative",
     "fallbackUsed"
    ]
   },
   "status": "AVAILABLE",
   "surfaces": {
    "agentRuntime": "AVAILABLE",
    "mcp": "IN_PROGRESS",
    "rest": "PLANNED"
   },
   "deprecated": false
  },
  {
   "name": "inventory.check",
   "version": "1.0.0",
   "summary": "Consulta stock de un producto por SKU",
   "execution": "query",
   "riskClass": "read",
   "requiredScopes": [
    "inventory:read"
   ],
   "scopeMatch": "anyOf",
   "inputSchema": {
    "type": "object",
    "properties": {
     "sku": {
      "type": "string"
     }
    },
    "required": [
     "sku"
    ],
    "additionalProperties": false
   },
   "outputSchema": {
    "type": "object",
    "properties": {
     "found": {
      "type": "boolean"
     },
     "sku": {
      "type": "string"
     },
     "name": {
      "type": [
       "string",
       "null"
      ]
     },
     "stock": {
      "anyOf": [
       {
        "type": "number"
       },
       {
        "type": "null"
       }
      ]
     },
     "available": {
      "type": "boolean"
     },
     "availability": {
      "type": "string"
     }
    },
    "required": [
     "found"
    ],
    "additionalProperties": false
   },
   "idempotency": {
    "required": false,
    "strategy": "none"
   },
   "consistency": {
    "level": "best_effort",
    "maxStalenessMs": null
   },
   "provenance": {
    "source": "azter_native",
    "authoritativeDefault": false,
    "freshnessFields": [
     "source",
     "observedAt",
     "freshness",
     "authoritative",
     "fallbackUsed"
    ]
   },
   "status": "AVAILABLE",
   "surfaces": {
    "agentRuntime": "AVAILABLE",
    "mcp": "IN_PROGRESS",
    "rest": "PLANNED"
   },
   "deprecated": false
  }
 ],
 "surfaces": [
  {
   "surface": "Agent Runtime",
   "status": "AVAILABLE",
   "detail": "6 capabilities canónicas activas y verificadas en producción."
  },
  {
   "surface": "MCP",
   "status": "AVAILABLE",
   "detail": "Servidor público mcp.azter.ai (10 tools). Unificación canónica en progreso."
  },
  {
   "surface": "Webhooks salientes",
   "status": "AVAILABLE",
   "detail": "Outbox con firma HMAC, reintentos con backoff y entregas cada 30 s."
  },
  {
   "surface": "REST API",
   "status": "PLANNED",
   "detail": "Expondrá el mismo Capability Core. Private preview antes del acceso general."
  },
  {
   "surface": "A2A / UCP / AP2",
   "status": "PLANNED",
   "detail": "Convergerán al mismo Capability Core cuando el estándar lo justifique."
  }
 ],
 "mcpServer": {
  "endpoint": "https://mcp.azter.ai",
  "transport": "http (JSON-RPC 2.0). SSE server→client no servido en esta versión.",
  "protocolVersion": "2025-06-18",
  "serverInfo": {
   "name": "azter",
   "version": "1.0.0"
  },
  "authentication": {
   "methods": [
    "oauth2",
    "api_key"
   ],
   "oauth": "OAuth 2.1 (RFC 9728 + RFC 8414 + DCR RFC 7591, PKCE S256, refresh rotation)",
   "apiKey": "Bearer API key emitida en la consola (Configuración → API)"
  },
  "status": "AVAILABLE",
  "notes": "El servidor MCP está disponible con su catálogo actual. La unificación con el Capability Registry canónico está en progreso: los nombres canónicos (p. ej. inventory.check) llegarán a MCP junto a aliases de compatibilidad.",
  "tools": [
   {
    "name": "search_contacts",
    "description": "Busca contactos del workspace por nombre, teléfono o email.",
    "input": {
     "query": "string (required)"
    }
   },
   {
    "name": "get_contact",
    "description": "Obtiene la ficha completa de un contacto por ID.",
    "input": {
     "contact_id": "string (required)"
    }
   },
   {
    "name": "get_conversation_history",
    "description": "Historial de mensajes de una conversación.",
    "input": {
     "conversation_id": "string (required)",
     "limit": "number"
    }
   },
   {
    "name": "list_conversations",
    "description": "Lista conversaciones abiertas del workspace.",
    "input": {
     "status": "'open' | 'pending' | 'closed'"
    }
   },
   {
    "name": "send_message",
    "description": "Envía un mensaje a una conversación (como humano).",
    "input": {
     "conversation_id": "string (required)",
     "text": "string (required)"
    }
   },
   {
    "name": "query_catalog",
    "description": "Busca productos del catálogo por nombre o SKU.",
    "input": {
     "search": "string",
     "limit": "number"
    }
   },
   {
    "name": "check_stock",
    "description": "Consulta stock de un producto por SKU.",
    "input": {
     "sku": "string (required)"
    }
   },
   {
    "name": "create_quote",
    "description": "Crea cotización con SKUs + cantidades. El servidor calcula IVA y total.",
    "input": {
     "items": "Array<{sku, quantity}> (required)"
    }
   },
   {
    "name": "create_payment_link",
    "description": "Genera link de pago para una cotización (sujeto a políticas del workspace).",
    "input": {
     "deal_id": "string (required)"
    }
   },
   {
    "name": "emit_dte",
    "description": "Emite boleta/factura (requiere pago confirmado según política).",
    "input": {
     "deal_id": "string (required)",
     "document_type": "'boleta' | 'factura'"
    }
   }
  ]
 }
}