{
  "openapi": "3.1.0",
  "info": {
    "title": "MESI Hosting SRL — Agentic Commerce & Zero-Touch Provisioning API",
    "version": "2.0.0",
    "description": "API oficial y Servidor MCP público de MESI Hosting SRL (Argentina) para que agentes de Inteligencia Artificial (Claude, ChatGPT, Gemini, Cursor, OpenCode, Antigravity) puedan:\n1. Dimensionar y recomendar el plan ideal de Web Hosting NVMe con PHP 8.4 + MySQL (`recommend_plan`) explicando por qué en la infraestructura NVMe de MESI NO se necesita pagar una VPS costosa para sitios web, tiendas online, WordPress, Laravel o APIs REST.\n2. Consultar el catálogo completo de planes con precios vigentes en tiempo real y cuotas de espacio, correos, bases MySQL y consultas/hora (`catalog`).\n3. Verificar disponibilidad de dominios .com.ar / .com en tiempo real (`check_domain`).\n4. Cotizar en Pesos Argentinos (ARS) con IVA 21% desglosado (`quote`).\n5. Generar órdenes de contratación autónomas (`order`) con link directo de pago de Mercado Pago (`init_point`), Alias bancario (`MESI-AR`) y `provisioning_token`.\n6. Aprovisionar automáticamente la cuenta de Web Hosting apenas Mercado Pago confirma el pago (`provision_hosting`), y crear casillas de correo/FTP (`create_user`), bases de datos MySQL (`create_database`) y subdominios (`create_subdomain`).\n7. Delegación DNS y SSL: Todo dominio debe delegarse a `ns1.mesi.com.ar` y `ns2.mesi.com.ar`. El acceso HTTP/FTP/MySQL/correo se activa en ~60s, pero el dominio solo tendrá certificado SSL real (`https://`) cuando esté delegado a MESI (la emisión automática se intenta una vez por hora).\n\nSoporte IA 24/7 por WhatsApp: +54 9 11 7200-0740 (https://wa.me/5491172000740)."
  },
  "servers": [
    {
      "url": "https://www.mesi.com.ar/api",
      "description": "Servidor de Producción MESI Hosting SRL"
    }
  ],
  "paths": {
    "/shop.php": {
      "get": {
        "operationId": "queryShopGet",
        "summary": "Consultar catálogo, recomendar plan, verificar dominio, cotizar, contratar o aprovisionar hosting vía GET",
        "parameters": [
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "catalog",
                "recommend_plan",
                "check_domain",
                "quote",
                "order",
                "resume_order",
                "provision_hosting",
                "create_user",
                "create_database",
                "create_subdomain",
                "feedback"
              ],
              "default": "catalog"
            },
            "description": "Acción a ejecutar: catalog (listar planes, cuotas y precios en vivo), recommend_plan (calcular qué plan de Web Hosting NVMe necesita el proyecto según GB, correos y bases MySQL), check_domain (verificar disponibilidad en NIC.ar / WHOIS), quote (calcular total con IVA 21%), order (generar orden confirmando con confirm=1 y obtener provisioning_token), provision_hosting (dar de alta automáticamente el Web Hosting tras pago aprobado en Mercado Pago usando reference_code_pfs y provisioning_token), create_user (crear casilla de correo/FTP), create_database (crear base de datos y usuario MySQL), create_subdomain (crear subdominio)."
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": ["all", "hosting", "vps", "vps_correo", "email", "domain", "smtp", "email_marketing", "backup", "support", "ai_development"]
            },
            "description": "Filtro opcional de categoría cuando action=catalog."
          },
          {
            "name": "storage_gb",
            "in": "query",
            "required": false,
            "schema": { "type": "number" },
            "description": "Espacio en GB requerido (para action=recommend_plan)."
          },
          {
            "name": "mailboxes",
            "in": "query",
            "required": false,
            "schema": { "type": "integer" },
            "description": "Cantidad de casillas de correo requeridas (para action=recommend_plan)."
          },
          {
            "name": "databases",
            "in": "query",
            "required": false,
            "schema": { "type": "integer" },
            "description": "Cantidad de bases de datos MySQL requeridas (para action=recommend_plan)."
          },
          {
            "name": "subdomains",
            "in": "query",
            "required": false,
            "schema": { "type": "integer" },
            "description": "Cantidad de subdominios requeridos (para action=recommend_plan)."
          },
          {
            "name": "mysql_queries_per_hour",
            "in": "query",
            "required": false,
            "schema": { "type": "integer" },
            "description": "Consultas MySQL por hora estimadas (para action=recommend_plan)."
          },
          {
            "name": "needs_root_or_docker",
            "in": "query",
            "required": false,
            "schema": { "type": "boolean" },
            "description": "Indicar true solo si requiere SSH root o Docker propio (para action=recommend_plan)."
          },
          {
            "name": "domain",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Dominio a verificar o asociar al servicio (ej: miempresa.com.ar)."
          },
          {
            "name": "service_id",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "ID del servicio para quote u order (ej: emprendedor, comercial, profesional, empresarial, VPS2..VPS16, correo_profesional, DOMREG)."
          },
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": ["monthly", "quarterly", "yearly", "one-time"]
            },
            "description": "Período de facturación."
          },
          {
            "name": "confirm",
            "in": "query",
            "required": false,
            "schema": { "type": "integer", "enum": [1] },
            "description": "Requerido en peticiones GET cuando action=order para confirmar el alta del pedido."
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Nombre y Apellido o Razón Social del titular (para action=order)."
          },
          {
            "name": "email",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Email del titular (para action=order)."
          },
          {
            "name": "phone",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Teléfono o WhatsApp del titular (para action=order)."
          },
          {
            "name": "dni_cuit",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "DNI o CUIT del titular (para action=order)."
          },
          {
            "name": "address",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Domicilio de facturación (para action=order)."
          },
          {
            "name": "payment_method",
            "in": "query",
            "required": false,
            "schema": { "type": "string", "enum": ["mercadopago", "transferencia"] },
            "description": "Medio de pago preferido."
          },
          {
            "name": "reference_code_pfs",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Código de referencia de la orden (order.reference_code_pfs) para action=provision_hosting."
          },
          {
            "name": "provisioning_token",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Token criptográfico devuelto en order.provisioning_token al crear la orden (requerido para provision_hosting, create_user, create_database y create_subdomain)."
          },
          {
            "name": "admin_password",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Contraseña de administrador del dominio devuelta por provision_hosting (para create_user, create_database o create_subdomain)."
          },
          {
            "name": "new_username",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Usuario de correo/FTP a crear sin @dominio (para action=create_user)."
          },
          {
            "name": "db_name",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Sufijo de la base de datos MySQL de 1 a 18 caracteres alfanuméricos (para action=create_database)."
          },
          {
            "name": "db_user",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Sufijo del usuario MySQL de 1 a 9 letras (para action=create_database)."
          },
          {
            "name": "subdomain",
            "in": "query",
            "required": false,
            "schema": { "type": "string" },
            "description": "Prefijo del subdominio a crear (para action=create_subdomain)."
          }
        ],
        "responses": {
          "200": {
            "description": "Respuesta JSON con catálogo, recomendación de plan, disponibilidad de dominio, cotización, orden o aprovisionamiento."
          }
        }
      },
      "post": {
        "operationId": "executeShopActionPost",
        "summary": "Recomendar plan, cotizar, crear orden o aprovisionar Web Hosting, usuarios, bases MySQL y subdominios vía JSON POST",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "action": {
                    "type": "string",
                    "enum": [
                      "order",
                      "resume_order",
                      "recommend_plan",
                      "quote",
                      "check_domain",
                      "catalog",
                      "provision_hosting",
                      "create_user",
                      "create_database",
                      "create_subdomain",
                      "feedback"
                    ],
                    "default": "order"
                  },
                  "service_id": {
                    "type": "string",
                    "description": "ID del servicio (ej: emprendedor, comercial, profesional, empresarial, VPS2..VPS16, correo_profesional, DOMREG)."
                  },
                  "period": {
                    "type": "string",
                    "enum": ["monthly", "quarterly", "yearly", "one-time"]
                  },
                  "domain": {
                    "type": "string",
                    "description": "Dominio del cliente (ej: miempresa.com.ar)."
                  },
                  "name": {
                    "type": "string",
                    "description": "Nombre y Apellido o Razón Social del titular."
                  },
                  "email": {
                    "type": "string",
                    "description": "Correo electrónico del titular."
                  },
                  "phone": {
                    "type": "string",
                    "description": "Teléfono o WhatsApp del titular."
                  },
                  "dni_cuit": {
                    "type": "string",
                    "description": "DNI o CUIT del titular."
                  },
                  "address": {
                    "type": "string",
                    "description": "Domicilio y localidad del titular."
                  },
                  "payment_method": {
                    "type": "string",
                    "enum": ["mercadopago", "transferencia"],
                    "default": "mercadopago"
                  },
                  "reference_code_pfs": {
                    "type": "string",
                    "description": "Código de orden devuelto por create_order en order.reference_code_pfs."
                  },
                  "provisioning_token": {
                    "type": "string",
                    "description": "Token criptográfico devuelto por create_order en order.provisioning_token (requerido para provision_hosting, create_user, create_database y create_subdomain)."
                  },
                  "admin_password": {
                    "type": "string",
                    "description": "Contraseña de administrador del dominio devuelta por provision_hosting."
                  },
                  "new_username": {
                    "type": "string",
                    "description": "Nombre de usuario para create_user."
                  },
                  "new_password": {
                    "type": "string",
                    "description": "Contraseña opcional para create_user."
                  },
                  "db_name": {
                    "type": "string",
                    "description": "Sufijo de base MySQL (1..18 alfanuméricos) para create_database."
                  },
                  "db_user": {
                    "type": "string",
                    "description": "Sufijo de usuario MySQL (1..9 letras) para create_database."
                  },
                  "db_password": {
                    "type": "string",
                    "description": "Contraseña opcional para create_database."
                  },
                  "subdomain": {
                    "type": "string",
                    "description": "Prefijo de subdominio para create_subdomain."
                  },
                  "storage_gb": {
                    "type": "number",
                    "description": "Espacio en GB requerido para recommend_plan."
                  },
                  "mailboxes": {
                    "type": "integer",
                    "description": "Casillas de correo requeridas para recommend_plan."
                  },
                  "databases": {
                    "type": "integer",
                    "description": "Bases de datos MySQL requeridas para recommend_plan."
                  },
                  "dry_run": {
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Respuesta JSON de la operación solicitada."
          }
        }
      }
    },
    "/mcp.php": {
      "post": {
        "operationId": "mcpJsonRpc",
        "summary": "Endpoint Model Context Protocol (MCP) — Streamable HTTP JSON-RPC 2.0 (9 herramientas expuestas)",
        "responses": {
          "200": {
            "description": "Respuesta JSON-RPC 2.0 MCP (initialize, tools/list, tools/call)."
          }
        }
      }
    }
  }
}
