BuyWise

Know what you're buying: brand, white-label, price, fake-discount, review and seller checks

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
100%
Integridad del esquema
83%
Calidad de los nombres
100%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~4,020Tokens (definiciones de herramientas)
~10.7 KBTamaño de respuesta típico
Impacto significativo en la atención (3.14% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "buywise": {
      "url": "https://api.buywise.fyi/mcp"
    }
  }
}

Puntos de conexión remotos

https://api.buywise.fyi/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (4)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢check_brands(brands, detail)

Use this when the user asks whether a brand is reputable or what kind of brand it is (an established name, a store's own label, an independent maker, or a generic white-label name), or wants brands compared while shopping. Returns findings on each brand: what kind of brand it is, its reputation for quality and its usual price tier, each with a confidence. Signals only, never a buy or avoid verdict. Does not browse the web and is not for banking, health or email pages. Pass brand names as the user or the listing gave them, up to 50 per call.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "brands": {
      "description": "Brand names, 1-50.",
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      }
    },
    "detail": {
      "description": "Include each finding's full probability distribution. Default false.",
      "type": "boolean"
    }
  },
  "required": [
    "brands"
  ]
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "brands": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "query": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "instincts": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "aspect": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    },
                    "tone": {
                      "type": "string",
                      "enum": [
                        "good",
                        "warn",
                        "bad"
                      ]
                    },
                    "confidence": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "certainty": {
                      "type": "string",
                      "enum": [
                        "very likely",
                        "likely",
                        "unsure"
                      ]
                    },
                    "why": {
                      "type": "string"
                    },
                    "levels": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "finding": {
                            "type": "string"
                          },
                          "tone": {
                            "type": "string",
                            "enum": [
                              "good",
                              "warn",
                              "bad"
                            ]
                          },
                          "p": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "finding",
                          "tone",
                          "p"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "aspect",
                    "label",
                    "finding",
                    "tone",
                    "confidence",
                    "certainty"
                  ],
                  "additionalProperties": false
                }
              },
              "positioning": {
                "type": "object",
                "properties": {
                  "tier": {
                    "type": "string",
                    "enum": [
                      "budget",
                      "value",
                      "mid-range",
                      "premium",
                      "luxury"
                    ]
                  },
                  "confidence": {
                    "type": "number"
                  }
                },
                "required": [
                  "tier",
                  "confidence"
                ],
                "additionalProperties": false
              },
              "summary": {
                "type": "string"
              },
              "error": {
                "type": "string",
                "enum": [
                  "upstream",
                  "budget_exhausted"
                ]
              }
            },
            "required": [
              "query",
              "name",
              "instincts",
              "summary"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "query": {
                "type": "string"
              },
              "error": {
                "type": "string",
                "enum": [
                  "bad_request",
                  "unauthorized",
                  "rate_limited",
                  "quota_exceeded",
                  "allowance_reached",
                  "spend_cap_reached",
                  "throttled",
                  "budget_exhausted",
                  "blocked_site",
                  "too_many_items",
                  "upstream",
                  "payment_required"
                ]
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "query",
              "error",
              "message"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "quota": {
      "description": "What is left of the allowance after this request.",
      "type": "object",
      "properties": {
        "plan": {
          "type": "string",
          "enum": [
            "free",
            "pro"
          ]
        },
        "used": {
          "description": "Checks counted today: free checks, or a Pro license's checks today.",
          "type": "number"
        },
        "limit": {
          "description": "Checks a day; null on Pro, whose allowance is the billing period below.",
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "resetsAt": {
          "description": "When the daily count resets: 00:00 UTC.",
          "type": "string"
        },
        "period": {
          "description": "Pro only: the billing period, with its included checks.",
          "type": "object",
          "properties": {
            "start": {
              "type": "string"
            },
            "end": {
              "description": "When the included checks come back.",
              "type": "string"
            },
            "included": {
              "type": "number"
            },
            "used": {
              "type": "number"
            },
            "extra": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "used": {
                  "type": "number"
                },
                "capCents": {
                  "type": "number"
                }
              },
              "required": [
                "enabled",
                "used",
                "capCents"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "start",
            "end",
            "included",
            "used",
            "extra"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "plan",
        "used",
        "limit",
        "resetsAt"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "brands"
  ],
  "additionalProperties": false
}
🟢check_product(id, title, brand, price, currency, ...)

Use this when the user is looking at a specific product listing on an online store and wants to know whether it looks trustworthy or like a good buy. Pass what you already read from the listing as arguments: title (required) and, when shown, brand, price, listPrice (the seller's "was" price), currency, url, seller, category, rating, reviewCount and key details; each extra field sharpens the read. Returns findings such as generic white-label product, quality, price, questionable discount, review credibility and seller legitimacy, each with a confidence, plus a report on the brand unless includeBrand is false. Signals only, never a buy or avoid verdict. Does not browse: only the domain of url is used. Not for banking, health, government or email pages.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "description": "Your own id for this product (e.g. an ASIN or list index); echoed back.",
      "type": "string",
      "maxLength": 100
    },
    "title": {
      "description": "Product title exactly as the listing shows it.",
      "type": "string",
      "minLength": 1,
      "maxLength": 1000
    },
    "brand": {
      "description": "Brand or maker, if the listing names one.",
      "type": "string",
      "maxLength": 200
    },
    "price": {
      "description": "What the buyer would pay now, as a number.",
      "type": "number",
      "minimum": 0,
      "maximum": 10000000
    },
    "currency": {
      "description": "ISO 4217 code for price and listPrice. Default USD.",
      "type": "string",
      "pattern": "^[A-Za-z]{3}$"
    },
    "listPrice": {
      "description": "The seller's \"was\" / \"list\" / \"typical\" price, if shown.",
      "type": "number",
      "minimum": 0,
      "maximum": 10000000
    },
    "url": {
      "description": "Listing URL. Only its domain is used.",
      "type": "string",
      "maxLength": 2048
    },
    "seller": {
      "description": "Seller or store name, if different from the site.",
      "type": "string",
      "maxLength": 300
    },
    "category": {
      "description": "Product category, e.g. \"Headphones\".",
      "type": "string",
      "maxLength": 300
    },
    "rating": {
      "description": "Average star rating out of 5.",
      "type": "number",
      "minimum": 0,
      "maximum": 5
    },
    "reviewCount": {
      "description": "Number of ratings or reviews.",
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000000
    },
    "details": {
      "description": "Key specs or bullet points as plain text. Longer text is trimmed.",
      "type": "string",
      "maxLength": 20000
    },
    "detail": {
      "description": "Include each finding's full probability distribution. Default false.",
      "type": "boolean"
    },
    "includeBrand": {
      "description": "Also report on the brand the listing names (its brand field), with findings on the brand itself. Default true.",
      "type": "boolean"
    }
  },
  "required": [
    "title"
  ]
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "instincts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "aspect": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "finding": {
            "type": "string"
          },
          "tone": {
            "type": "string",
            "enum": [
              "good",
              "warn",
              "bad"
            ]
          },
          "confidence": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "certainty": {
            "type": "string",
            "enum": [
              "very likely",
              "likely",
              "unsure"
            ]
          },
          "why": {
            "type": "string"
          },
          "levels": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "finding": {
                  "type": "string"
                },
                "tone": {
                  "type": "string",
                  "enum": [
                    "good",
                    "warn",
                    "bad"
                  ]
                },
                "p": {
                  "type": "number"
                }
              },
              "required": [
                "finding",
                "tone",
                "p"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "aspect",
          "label",
          "finding",
          "tone",
          "confidence",
          "certainty"
        ],
        "additionalProperties": false
      }
    },
    "counts": {
      "type": "object",
      "properties": {
        "good": {
          "type": "number"
        },
        "warn": {
          "type": "number"
        },
        "bad": {
          "type": "number"
        }
      },
      "required": [
        "good",
        "warn",
        "bad"
      ],
      "additionalProperties": false
    },
    "summary": {
      "type": "string"
    },
    "brand": {
      "type": "object",
      "properties": {
        "query": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "instincts": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "aspect": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "finding": {
                "type": "string"
              },
              "tone": {
                "type": "string",
                "enum": [
                  "good",
                  "warn",
                  "bad"
                ]
              },
              "confidence": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "certainty": {
                "type": "string",
                "enum": [
                  "very likely",
                  "likely",
                  "unsure"
                ]
              },
              "why": {
                "type": "string"
              },
              "levels": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "finding": {
                      "type": "string"
                    },
                    "tone": {
                      "type": "string",
                      "enum": [
                        "good",
                        "warn",
                        "bad"
                      ]
                    },
                    "p": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "finding",
                    "tone",
                    "p"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "aspect",
              "label",
              "finding",
              "tone",
              "confidence",
              "certainty"
            ],
            "additionalProperties": false
          }
        },
        "positioning": {
          "type": "object",
          "properties": {
            "tier": {
              "type": "string",
              "enum": [
                "budget",
                "value",
                "mid-range",
                "premium",
                "luxury"
              ]
            },
            "confidence": {
              "type": "number"
            }
          },
          "required": [
            "tier",
            "confidence"
          ],
          "additionalProperties": false
        },
        "summary": {
          "type": "string"
        },
        "error": {
          "type": "string",
          "enum": [
            "upstream",
            "budget_exhausted"
          ]
        }
      },
      "required": [
        "query",
        "name",
        "instincts",
        "summary"
      ],
      "additionalProperties": false
    },
    "quota": {
      "description": "What is left of the allowance after this request.",
      "type": "object",
      "properties": {
        "plan": {
          "type": "string",
          "enum": [
            "free",
            "pro"
          ]
        },
        "used": {
          "description": "Checks counted today: free checks, or a Pro license's checks today.",
          "type": "number"
        },
        "limit": {
          "description": "Checks a day; null on Pro, whose allowance is the billing period below.",
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "resetsAt": {
          "description": "When the daily count resets: 00:00 UTC.",
          "type": "string"
        },
        "period": {
          "description": "Pro only: the billing period, with its included checks.",
          "type": "object",
          "properties": {
            "start": {
              "type": "string"
            },
            "end": {
              "description": "When the included checks come back.",
              "type": "string"
            },
            "included": {
              "type": "number"
            },
            "used": {
              "type": "number"
            },
            "extra": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "used": {
                  "type": "number"
                },
                "capCents": {
                  "type": "number"
                }
              },
              "required": [
                "enabled",
                "used",
                "capCents"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "start",
            "end",
            "included",
            "used",
            "extra"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "plan",
        "used",
        "limit",
        "resetsAt"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "instincts",
    "counts",
    "summary"
  ],
  "additionalProperties": false
}
🟢check_products(products, detail, includeBrand)

Use this when the user is comparing several product listings, such as search results or the same item at different stores, and wants trust signals on each. Pass up to 20 products, each with what you already read from its listing: title (required) and, when shown, brand, price, listPrice, currency, url, seller, category, rating, reviewCount, details, plus your own id to match results. Returns, in input order, the same findings as check_product for each; a product that can't be checked carries an error and message instead. Signals only, never a buy or avoid verdict. Does not browse the web. Not for banking, health, government or email pages.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "products": {
      "description": "Products, 1-20.",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "description": "A product as seen on a store listing. Only title is required; each extra field sharpens the read.",
        "type": "object",
        "properties": {
          "id": {
            "description": "Your own id for this product (e.g. an ASIN or list index); echoed back.",
            "type": "string",
            "maxLength": 100
          },
          "title": {
            "description": "Product title exactly as the listing shows it.",
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "brand": {
            "description": "Brand or maker, if the listing names one.",
            "type": "string",
            "maxLength": 200
          },
          "price": {
            "description": "What the buyer would pay now, as a number.",
            "type": "number",
            "minimum": 0,
            "maximum": 10000000
          },
          "currency": {
            "description": "ISO 4217 code for price and listPrice. Default USD.",
            "type": "string",
            "pattern": "^[A-Za-z]{3}$"
          },
          "listPrice": {
            "description": "The seller's \"was\" / \"list\" / \"typical\" price, if shown.",
            "type": "number",
            "minimum": 0,
            "maximum": 10000000
          },
          "url": {
            "description": "Listing URL. Only its domain is used.",
            "type": "string",
            "maxLength": 2048
          },
          "seller": {
            "description": "Seller or store name, if different from the site.",
            "type": "string",
            "maxLength": 300
          },
          "category": {
            "description": "Product category, e.g. \"Headphones\".",
            "type": "string",
            "maxLength": 300
          },
          "rating": {
            "description": "Average star rating out of 5.",
            "type": "number",
            "minimum": 0,
            "maximum": 5
          },
          "reviewCount": {
            "description": "Number of ratings or reviews.",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000000
          },
          "details": {
            "description": "Key specs or bullet points as plain text. Longer text is trimmed.",
            "type": "string",
            "maxLength": 20000
          }
        },
        "required": [
          "title"
        ]
      }
    },
    "detail": {
      "description": "Include each finding's full probability distribution. Default false.",
      "type": "boolean"
    },
    "includeBrand": {
      "description": "Also report on the brand the listing names (its brand field), with findings on the brand itself. Default true.",
      "type": "boolean"
    }
  },
  "required": [
    "products"
  ]
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "products": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "instincts": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "aspect": {
                      "type": "string"
                    },
                    "label": {
                      "type": "string"
                    },
                    "finding": {
                      "type": "string"
                    },
                    "tone": {
                      "type": "string",
                      "enum": [
                        "good",
                        "warn",
                        "bad"
                      ]
                    },
                    "confidence": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 1
                    },
                    "certainty": {
                      "type": "string",
                      "enum": [
                        "very likely",
                        "likely",
                        "unsure"
                      ]
                    },
                    "why": {
                      "type": "string"
                    },
                    "levels": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "finding": {
                            "type": "string"
                          },
                          "tone": {
                            "type": "string",
                            "enum": [
                              "good",
                              "warn",
                              "bad"
                            ]
                          },
                          "p": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "finding",
                          "tone",
                          "p"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "aspect",
                    "label",
                    "finding",
                    "tone",
                    "confidence",
                    "certainty"
                  ],
                  "additionalProperties": false
                }
              },
              "counts": {
                "type": "object",
                "properties": {
                  "good": {
                    "type": "number"
                  },
                  "warn": {
                    "type": "number"
                  },
                  "bad": {
                    "type": "number"
                  }
                },
                "required": [
                  "good",
                  "warn",
                  "bad"
                ],
                "additionalProperties": false
              },
              "summary": {
                "type": "string"
              },
              "brand": {
                "type": "object",
                "properties": {
                  "query": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "instincts": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "aspect": {
                          "type": "string"
                        },
                        "label": {
                          "type": "string"
                        },
                        "finding": {
                          "type": "string"
                        },
                        "tone": {
                          "type": "string",
                          "enum": [
                            "good",
                            "warn",
                            "bad"
                          ]
                        },
                        "confidence": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 1
                        },
                        "certainty": {
                          "type": "string",
                          "enum": [
                            "very likely",
                            "likely",
                            "unsure"
                          ]
                        },
                        "why": {
                          "type": "string"
                        },
                        "levels": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "finding": {
                                "type": "string"
                              },
                              "tone": {
                                "type": "string",
                                "enum": [
                                  "good",
                                  "warn",
                                  "bad"
                                ]
                              },
                              "p": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "finding",
                              "tone",
                              "p"
                            ],
                            "additionalProperties": false
                          }
                        }
                      },
                      "required": [
                        "aspect",
                        "label",
                        "finding",
                        "tone",
                        "confidence",
                        "certainty"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "positioning": {
                    "type": "object",
                    "properties": {
                      "tier": {
                        "type": "string",
                        "enum": [
                          "budget",
                          "value",
                          "mid-range",
                          "premium",
                          "luxury"
                        ]
                      },
                      "confidence": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "tier",
                      "confidence"
                    ],
                    "additionalProperties": false
                  },
                  "summary": {
                    "type": "string"
                  },
                  "error": {
                    "type": "string",
                    "enum": [
                      "upstream",
                      "budget_exhausted"
                    ]
                  }
                },
                "required": [
                  "query",
                  "name",
                  "instincts",
                  "summary"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "instincts",
              "counts",
              "summary"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "error": {
                "type": "string",
                "enum": [
                  "bad_request",
                  "unauthorized",
                  "rate_limited",
                  "quota_exceeded",
                  "allowance_reached",
                  "spend_cap_reached",
                  "throttled",
                  "budget_exhausted",
                  "blocked_site",
                  "too_many_items",
                  "upstream",
                  "payment_required"
                ]
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "error",
              "message"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "quota": {
      "description": "What is left of the allowance after this request.",
      "type": "object",
      "properties": {
        "plan": {
          "type": "string",
          "enum": [
            "free",
            "pro"
          ]
        },
        "used": {
          "description": "Checks counted today: free checks, or a Pro license's checks today.",
          "type": "number"
        },
        "limit": {
          "description": "Checks a day; null on Pro, whose allowance is the billing period below.",
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "resetsAt": {
          "description": "When the daily count resets: 00:00 UTC.",
          "type": "string"
        },
        "period": {
          "description": "Pro only: the billing period, with its included checks.",
          "type": "object",
          "properties": {
            "start": {
              "type": "string"
            },
            "end": {
              "description": "When the included checks come back.",
              "type": "string"
            },
            "included": {
              "type": "number"
            },
            "used": {
              "type": "number"
            },
            "extra": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean"
                },
                "used": {
                  "type": "number"
                },
                "capCents": {
                  "type": "number"
                }
              },
              "required": [
                "enabled",
                "used",
                "capCents"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "start",
            "end",
            "included",
            "used",
            "extra"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "plan",
        "used",
        "limit",
        "resetsAt"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "products"
  ],
  "additionalProperties": false
}
🟢get_pro

Returns a checkout link where the user can buy BuyWise Pro ($2.99/month plus any applicable tax, 3,000 checks a month, renewing monthly until cancelled), with the renewal terms and what happens after paying. It never charges anything: payment happens only if the user completes the checkout page.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}

Esquema de salida

{
  "type": "object",
  "properties": {
    "checkoutUrl": {
      "description": "The payment page. Nothing is charged unless the person completes it.",
      "type": "string"
    },
    "price": {
      "description": "\"$2.99/month\", plus any applicable tax.",
      "type": "string"
    },
    "renewal": {
      "description": "The renewal terms: the price, monthly renewal until cancelled, and where to cancel.",
      "type": "string"
    },
    "upgradesKey": {
      "description": "True when the connection's own API key draws on Pro once the person pays.",
      "type": "boolean"
    },
    "next": {
      "description": "What happens after paying.",
      "type": "string"
    }
  },
  "required": [
    "checkoutUrl",
    "price",
    "renewal",
    "upgradesKey",
    "next"
  ],
  "additionalProperties": false
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada4 herramientas