← Vendooly

Guida a Vendooly

Vendooly collega il tuo Amazon Seller Central e Amazon Ads all'IA che già usi (Claude e ChatGPT). Le chiedi le cose in linguaggio naturale — "quanto ho venduto questa settimana?", "quali prodotti rischiano lo stockout?", "riprezza questo SKU" — e lei legge i dati e, su tua conferma, agisce sull'account.

1) Onboarding in 3 passi

  1. Registrati. Crea l'account con email e password (o con Google) e conferma l'email. Nessun invito: la Open Beta è aperta.
  2. Collega Amazon. Marketplaces → scegli la regione → autorizza Vendooly su Seller Central (OAuth). Un consenso copre tutti i marketplace di quella regione. Poi collega anche Amazon Ads: è un secondo layer separato, premi "Collega Ads".
  3. Collega la tua IA. Connetti Claude o ChatGPT al connettore MCP (sotto), oppure usa direttamente l'interfaccia web.
Screenshot: schermata Marketplaces con account collegato

2) Collega la tua IA — connettore MCP

L'indirizzo del connettore è sempre lo stesso: https://mcp.vendooly.com/mcp

Claude (Pro/Team/Max)
  1. Impostazioni → Connettori
  2. "Aggiungi connettore personalizzato"
  3. Incolla l'URL del connettore e conferma
  4. Authorize when prompted
ChatGPT (Plus/Pro, con connettori)
  1. Impostazioni → Connettori / App
  2. "Crea" un connettore (in fondo alla pagina)
  3. Incolla l'URL del connettore server MCP
  4. Authorize and enable it in the chat
Agenti custom (Python / SDK MCP)

Se il tuo agente non è Claude né ChatGPT, collegalo con l'SDK MCP ufficiale (pip install mcp): lo script si registra da solo (Dynamic Client Registration), apre il browser sul consenso Vendooly e da lì il token si rinnova automaticamente. Vale anche per i framework agent con supporto MCP (OpenAI Agents SDK, LangChain, Pydantic AI, CrewAI).

Mostra lo script completo (testato)
# Vendooly from a Python agent — MCP client with OAuth (pip install mcp)
import asyncio, threading, webbrowser
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs

from pydantic import AnyUrl
from mcp import ClientSession
from mcp.client.auth import OAuthClientProvider, TokenStorage
from mcp.client.streamable_http import streamablehttp_client
from mcp.shared.auth import OAuthClientInformationFull, OAuthClientMetadata, OAuthToken

MCP_URL = "https://mcp.vendooly.com/mcp"
CALLBACK_PORT = 3000


class InMemoryTokenStorage(TokenStorage):
    # For production, persist tokens to disk/secret store instead.
    def __init__(self):
        self.tokens = None
        self.client_info = None

    async def get_tokens(self) -> OAuthToken | None:
        return self.tokens

    async def set_tokens(self, tokens: OAuthToken) -> None:
        self.tokens = tokens

    async def get_client_info(self) -> OAuthClientInformationFull | None:
        return self.client_info

    async def set_client_info(self, info: OAuthClientInformationFull) -> None:
        self.client_info = info


def wait_for_callback() -> str:
    """Tiny local web server: receives the consent redirect, returns the URL."""
    result = {}
    done = threading.Event()

    class H(BaseHTTPRequestHandler):
        def do_GET(self):
            result["url"] = self.path
            self.send_response(200)
            self.send_header("Content-Type", "text/html; charset=utf-8")
            self.end_headers()
            self.wfile.write(b"<h2>Authorized. You can close this tab.</h2>")
            done.set()

        def log_message(self, *a):
            pass

    srv = HTTPServer(("localhost", CALLBACK_PORT), H)
    threading.Thread(target=srv.serve_forever, daemon=True).start()
    done.wait(timeout=300)
    srv.shutdown()
    return result.get("url", "")


async def handle_redirect(auth_url: str) -> None:
    print(f"Opening browser for the Vendooly consent:\n{auth_url}")
    webbrowser.open(auth_url)


async def handle_callback() -> tuple[str, str | None]:
    path = wait_for_callback()
    q = parse_qs(urlparse(path).query)
    return q["code"][0], (q.get("state") or [None])[0]


oauth = OAuthClientProvider(
    server_url=MCP_URL,
    client_metadata=OAuthClientMetadata(
        client_name="My Python Agent",
        redirect_uris=[AnyUrl(f"http://localhost:{CALLBACK_PORT}/callback")],
        grant_types=["authorization_code", "refresh_token"],
        response_types=["code"],
    ),
    storage=InMemoryTokenStorage(),
    redirect_handler=handle_redirect,
    callback_handler=handle_callback,
)


async def main():
    async with streamablehttp_client(MCP_URL, auth=oauth) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()
            tools = await session.list_tools()
            print("Available tools:", [t.name for t in tools.tools])
            res = await session.call_tool("list_my_products", {})
            print(res.content[0].text[:500])


if __name__ == "__main__":
    asyncio.run(main())

Altri client compatibili con MCP usano lo stesso URL. Se non vedi l'opzione "Connettori", serve un piano che supporti i connettori MCP.

Screenshot: aggiunta del connettore in Claude/ChatGPT

3) Verifica che funzioni

Appena collegato, la prima cosa da scrivere alla tua IA è:

Ora che sei connesso con Vendooly e dato che mi conosci, dimmi cosa posso farci e come mi puoi aiutare.

Se risponde elencando i tuoi account e cosa può fare, sei a posto. Se dice che non vede account o Ads, torna su Marketplaces e controlla che Seller e Ads siano entrambi collegati (sono due layer).

4) Cosa puoi chiedere

Esempi pronti, per categoria. Puoi parlarle normalmente: non servono comandi.

Catalogo & inventario

Mostrami i 10 prodotti con più copertura e quelli sotto scorta
Quali ASIN sono soppressi o "stranded"?
Quanti giorni di copertura ho sullo SKU X?

Vendite & ordini

Quanto ho venduto negli ultimi 7 e 30 giorni?
Qual è il mio prodotto più venduto questo mese?
Fammi il recap della settimana

FBA

Quali prodotti rischiano lo stockout?
Cosa sto per esaurire in FBA?

Prezzi

Confronta i miei prezzi con la Buy Box
Riprezza lo SKU X a 19,90 € (te lo confermo prima)

Amazon Ads

Come vanno le campagne Sponsored Products?
Quali keyword hanno ACOS troppo alto?
Metti in pausa la campagna Y

Analisi

Perché sono calate le vendite questa settimana?
Dove sto perdendo Buy Box?

5) Non sbagli: tutto sotto conferma

Le operazioni di sola lettura (vedere vendite, catalogo, report) sono libere. Ogni operazione che cambia qualcosa — prezzi, scorte, budget, stato campagne, listing — ti viene mostrata prima (cosa cambia, valore prima → dopo, su quante righe) e parte solo dopo il tuo OK esplicito. Niente succede "di nascosto". Per le modifiche massive ricevi un riepilogo prima di eseguire.

6) Domande frequenti

L'IA dice che le Ads non sono collegate, ma sul portale risultano connesse

Seller Central e Amazon Ads sono due autorizzazioni separate. Vai su Marketplaces e premi "Collega Ads" anche se il Seller è già connesso. Se il problema resta, ricollega le Ads dal wizard.

Il catalogo mostra "0 disponibili" su prodotti che ho sempre disponibili

I prodotti MFN a giacenza non gestita ("sempre disponibili") ora vengono mostrati come disponibili (∞). Il catalogo si sincronizza periodicamente: dopo un nuovo collegamento attendi il prossimo aggiornamento.

Quanti account Amazon posso collegare?

Starter: 1 · Pro: 3 · Agency: 10. Un seller con più marketplace conta come un solo account.

Vendooly memorizza la mia password Amazon?

No. L'accesso è via autorizzazione OAuth di Amazon: non vediamo né conserviamo le credenziali.

I miei dati a chi vengono inviati?

Solo ai dati del tuo account Amazon necessari al servizio. Quando usi l'IA, le richieste passano dal provider che hai scelto (Anthropic, OpenAI o Google), su tua attivazione.

Come revoco l'accesso?

In qualsiasi momento, dalle impostazioni Vendooly o dal pannello Amazon Seller Central.

Non hai trovato la risposta? Scrivici a hello@vendooly.com.

💬 Hai trovato un problema o hai un'idea? Dillo direttamente alla tua IA: «manda un feedback a Vendooly: …». Lo riceviamo e lo leggiamo tutti.

Vendooly · Coralis S.r.l.s. · P.IVA 03305740593 · Via Alessandro Manzoni 58, 04100 Latina (LT) · Privacy · Termini