Développeurs

Assistants IA (MCP)

Connectez Claude, ChatGPT ou Cursor à votre compte NinjaBuy et demandez avec vos mots : où en est une commande, ce qu’il y a sur votre étagère, si une annonce vaut la peine d’être vendue, et mettez-la sur votre boutique.
Sur cette page
  1. 1Connecter
  2. 2Connexion et accès
  3. 3Rien ici ne dépense d’argent
  4. 4Outils
  5. 5Que demander

Connecter

Une seule adresse de serveur pour tous les assistants. Vous vous connectez avec votre compte NinjaBuy ; aucune clé à coller.

https://www.ninjabuy.com/mcp

Claude

  1. Ouvrez Settings › Connectors et choisissez Add custom connector.
  2. Collez l’adresse ci-dessus et ajoutez-la.
  3. Connectez-vous avec votre numéro de téléphone NinjaBuy, puis choisissez Allow access.

ChatGPT

  1. Activez le mode développeur dans les réglages, puis ajoutez un serveur MCP personnalisé.
  2. Collez l’adresse ci-dessus et choisissez OAuth comme mode de connexion.
  3. Connectez-vous avec votre numéro de téléphone NinjaBuy, puis choisissez Allow access.

Cursor

Ajoutez le serveur dans Cursor Settings › MCP, ou dans ~/.cursor/mcp.json. Cursor ouvre la connexion NinjaBuy dans votre navigateur la première fois.

~/.cursor/mcp.json
{
  "mcpServers": {
    "ninjabuy": {
      "url": "https://www.ninjabuy.com/mcp"
    }
  }
}

Claude Code et autres assistants en ligne de commande

Terminal
claude mcp add --transport http ninjabuy https://www.ninjabuy.com/mcp

Les noms des menus changent au fil des mises à jour des assistants ; cherchez « custom connector » ou « custom MCP server ».

Connexion et accès

L’assistant se connecte avec OAuth 2.1 : il s’enregistre, vous envoie sur ninjabuy.com, et vous l’approuvez sur notre propre écran, qui nomme l’app et l’adresse de retour. N’autorisez qu’une app que vous venez de demander à connecter. Vous approuvez chaque app une seule fois.

  • Il agit comme votre compte : les outils ne prennent pas d’identifiant de compte et ne voient que vos commandes, votre étagère et vos produits.
  • L’accès dure une heure et se renouvelle pendant sept jours ; ensuite, l’assistant vous demande de vous reconnecter.
  • Retirez le connecteur dans votre assistant pour le déconnecter.
  • Les outils qui lisent une marketplace (product, analyze_product, import_product, push_to_shopify) partagent la fenêtre de 30 par minute de l’API : Limites de débit.

Rien ici ne dépense d’argent

Aucun outil ne paie, ne crée d’envoi ni ne dépense votre solde. Quand quelque chose doit être payé, la réponse indique la page où le faire : le paiement depuis le panier, l’expédition depuis votre page d’entrepôt. push_to_shopify publie un produit en brouillon : rien n’est mis en vente avant que vous le publiiez.

Outils

Chaque réponse porte requestId (citez-le quand vous nous écrivez) et warnings, des informations utiles qui n’ont pas bloqué l’appel. Une longue réponse est coupée vers 6 000 tokens avec truncated: true ; les listes prennent alors une limite plus petite.

OutilCe qu’il fait
list_ordersLister mes commandes NinjaBuy
orderUne commande NinjaBuy
warehouseMon entrepôt NinjaBuy
productLire les variantes d’un produit
add_to_cartAjouter à mon panier NinjaBuy
search_productsRechercher des produits
analyze_productAnalyser un produit
import_productImporter un produit
push_to_shopifyPush to Shopify
list_synced_productsLister mes produits synchronisés
set_sync_ruleFixer une règle de synchronisation

list_orderslecture seule

Les commandes du compte, les plus récentes d’abord : statut, statut de paiement, reste dû, les articles et la page de chaque commande. Suivez cursor tant que has_more vaut true.

cursorstring?
Issu de la réponse précédente ; omettez-le pour la première page.
limitnumber?
1 à 25. 25 si omis.
list_orders répond
{
  "orders": [
    {
      "id": "j57a9x2b",
      "number": 1012,
      "kind": "procurement",
      "total": "¥57.00",
      "orderStatus": { "status": "ordered" },
      "paymentStatus": { "status": "paid" },
      "amountDue": null,
      "itemCount": 1,
      "items": [
        {
          "id": "P1012-1",
          "title": "Heavyweight washed hoodie",
          "quantity": 1,
          "options": ["Black", "M"],
          "status": "ordered"
        }
      ],
      "url": "https://www.ninjabuy.com/me/orders/j57a9x2b"
    }
  ],
  "cursor": "eyJvIjoyNX0",
  "has_more": true,
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

orderlecture seule

Une commande par identifiant : ses lignes et ses prix, le statut de chaque article et la quantité arrivée, et l’envoi avec son suivi. order vaut null pour un identifiant qui n’est pas de ce compte.

idstringobligatoire
Un identifiant issu de list_orders.
order répond
{
  "order": {
    "id": "j57c4k1m",
    "number": 1019,
    "kind": "shipout",
    "orderStatus": { "status": "ready" },
    "paymentStatus": { "status": "paid" },
    "shipment": {
      "state": "shipped",
      "destinationCountry": "US",
      "weightGrams": 176,
      "trackingNumbers": ["YT2630812345678"],
      "shippedAt": 1793685600000
    },
    "url": "https://www.ninjabuy.com/me/orders/j57c4k1m"
  },
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

warehouselecture seule

Tout ce qui est arrivé dans notre entrepôt : photos, quantité arrivée, expédiable ou dans un envoi, poids, valeur déclarée, s’il est payé, et la fin du stockage gratuit.

Aucune entrée.

warehouse répond
{
  "items": [
    {
      "id": "P1012-1",
      "order": 1012,
      "title": "Heavyweight washed hoodie",
      "photos": [
        {
          "type": "image",
          "url": "https://media.ninjabuy.com/qc/P1012-1/1.webp"
        }
      ],
      "received": 1,
      "availableToShip": 1,
      "inShipment": 0,
      "unitWeightGrams": 176,
      "declaredUnitValue": "¥38.00",
      "paid": true,
      "freeStorageUntil": "2026-12-02T03:20:11.000Z"
    }
  ],
  "warehouseUrl": "https://www.ninjabuy.com/me/warehouse",
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

productlecture seule

Lit une annonce depuis n’importe quel lien produit (Taobao, Tmall, Weidian, 1688, le lien ou lien court d’un autre agent d’achat, ou une page produit NinjaBuy) : titre, images, vendeur, et chaque variante avec son skuId, son libellé, son prix en CN¥ et son stock.

linkstringobligatoire
Un lien produit, jusqu’à 2 048 caractères.
product répond
{
  "product": {
    "handle": "weidian-7750970856",
    "title": "重磅水洗连帽卫衣",
    "seller": "Ruoyi Studio",
    "variants": [
      {
        "skuId": "5187209554",
        "label": "Black / M",
        "priceMinor": 3800,
        "price": "¥38.00",
        "inStock": true
      },
      {
        "skuId": "5187209555",
        "label": "Black / L",
        "priceMinor": 3800,
        "price": "¥38.00",
        "inStock": false
      }
    ],
    "url": "https://www.ninjabuy.com/products/weidian-7750970856"
  },
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

add_to_cartécriture

Met des variantes d’une annonce dans le panier, pour les acheter à l’avance et les garder sur votre étagère. Rien n’est acheté : la réponse est la page du panier, où vous payez.

handlestringobligatoire
Issu de product.
lines{ skuId, quantity }[]obligatoire
1 à 100 lignes ; quantité de 1 à 9 999. Une variante déjà dans le panier s’y ajoute.
add_to_cart répond
{
  "added": 1,
  "cartUrl": "https://www.ninjabuy.com/cart",
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

search_productslecture seule

Recherche par mot-clé sur Taobao ou 1688, la même que sur ninjabuy.com. Un lien collé renvoie ce produit.

querystringobligatoire
2 à 120 caractères, ou un lien.
providerstring?
taobao ou 1688. taobao si omis.
pagenumber?
0 à 20.
search_products répond
{
  "kind": "products",
  "products": [
    {
      "handle": "taobao-781204556120",
      "title": "Heavyweight cotton hoodie, washed",
      "price": { "amount": "45.00", "currency": "CNY" },
      "marketplace": "taobao",
      "url": "https://www.ninjabuy.com/products/taobao-781204556120"
    }
  ],
  "page": 0,
  "totalCount": 1840,
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

analyze_productlecture seule

Ce que coûte une vente de chaque variante livrée chez l’acheteur, et le prix qui garde votre marge sur votre marketplace. Rien n’est enregistré. Mêmes chiffres que l’analyse d’import.

linkstringobligatoire
Un lien produit.
weight_gnumberobligatoire
Poids emballé d’une unité, en grammes.
ship_tostring?
Pays à deux lettres. US si omis.
lanestring?
saver ou fast.
marketplacestring?
ebay, shopify, amazon ou tiktok.
margin_percentnumber?
La marge visée. 30 si omis.
analyze_product répond
{
  "title": "重磅水洗连帽卫衣",
  "shipTo": "US",
  "marketplace": "ebay",
  "brandHint": null,
  "variants": [
    {
      "sku": "5187209554",
      "label": "Black / M",
      "inStock": true,
      "procurement": "57.00",
      "parcel": "134.52",
      "landedUsd": "27.71",
      "suggestedPrice": "49.99",
      "marginPercent": "30.16"
    }
  ],
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

import_productécriture

Importe une annonce avec son analyse, comme l’API Imports. Gratuit. Renvoie l’import pour l’envoyer ou refaire le prix.

linkstringobligatoire
Un lien produit ou un tableur de trouvailles.
weight_gnumberobligatoire
Poids emballé d’une unité, en grammes.
ship_tostring?
Pays à deux lettres. US si omis.
lanestring?
saver ou fast.
marketplacestring?
ebay, shopify, amazon ou tiktok.
margin_percentnumber?
La marge visée. 30 si omis.
import_product répond
{
  "import": {
    "id": "imp_2c9d",
    "status": "ready",
    "title": "重磅水洗连帽卫衣",
    "variants": 6,
    "inStock": 5
  },
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

push_to_shopifyécriture

Enregistre un import comme produit et le publie en brouillon dans votre boutique Shopify, stocké à l’emplacement Fulfilled by NinjaBuy. Un nouvel envoi le met à jour. Mêmes règles que Push to Shopify.

import_idstringobligatoire
Issu de import_product.
variants{ sku, price }[]?
Lesquelles garder et à quel prix en US$. Si omis, celles en stock au prix suggéré.
titlestring?
Votre titre.
shopstring?
Requis quand plusieurs boutiques sont liées.
push_to_shopify répond
{
  "product": "prd_8f2k",
  "shopify": {
    "status": "draft",
    "variants": 5,
    "adminUrl": "https://admin.shopify.com/store/acme-goods/products/8812042"
  },
  "skipped": [{ "sku": "5187209555", "reason": "sold_out" }],
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

list_synced_productslecture seule

Vos produits avec leur dernière vérification, leurs changements de coût et leur stock, pour voir ce qui a bougé.

statusstring?
active ou en pause.
changed_sincestring?
Une date : seulement les produits dont le coût ou le stock a changé depuis.
cursorstring?
Issu de la réponse précédente ; omettez-le pour la première page.
limitnumber?
1 à 25. 25 si omis.
list_synced_products répond
{
  "products": [
    {
      "id": "prd_1x0a",
      "title": "Canvas Tote",
      "status": "active",
      "lastCheckedAt": "2026-11-04T02:10:00Z",
      "costChange": {
        "from": "¥42.00",
        "to": "¥48.00",
        "action": "repriced",
        "price": { "from": "$18.99", "to": "$20.99" }
      }
    }
  ],
  "cursor": null,
  "has_more": false,
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

set_sync_ruleécriture

Que faire quand un vendeur augmente un prix : recalculer pour garder une marge, mettre en pause, ou seulement vous prévenir. Pour tous les produits, ou un seul. Mêmes champs que Règles de synchronisation.

applies_tostringobligatoire
all, ou un identifiant de produit.
on_cost_increasestringobligatoire
reprice, pause ou notify.
keep_margin_percentnumber?
Avec reprice.
max_increase_percentnumber?
Avec reprice : au-delà, mettre en pause.
set_sync_rule répond
{
  "rule": {
    "id": "rule_default",
    "appliesTo": "all",
    "onCostIncrease": {
      "action": "reprice",
      "keepMarginPercent": 40,
      "maxIncreasePercent": 15
    }
  },
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

Que demander

Lesquelles de mes commandes attendent encore un vendeur ?

list_orders

Deux : n° 1012 (le hoodie délavé, acheté le 1er nov.) et n° 1015 (deux tote bags en toile). Les deux sont payées et commandées au vendeur ; aucune n’est encore arrivée à l’entrepôt.

Ce hoodie vaut-il la peine d’être vendu sur eBay ? weidian.com/item.html?itemID=7750970856, environ 180 g emballé.

analyze_product

Une vente aux États-Unis coûte 191,52 CNY rendu, environ 27,71 $. À 49,99 $, eBay garde environ 7,20 $ et vous gardez 15,08 $, soit 30 % de marge. Black / L est épuisé. Aucun mot de marque dans le titre.

Parfait. Mettez Black / M sur mon Shopify à 49,99 $, titre « Heavyweight Washed Hoodie ».

import_productpush_to_shopify

C’est fait : c’est un brouillon sur acme-goods.myshopify.com avec 1 variante, stockée chez Fulfilled by NinjaBuy. Vérifiez les photos, puis publiez-le dans Shopify.

Gardez une marge de 40 % sur tout, mais n’augmentez jamais un prix de plus de 15 % d’un coup.

set_sync_rule

Pour tous les produits. Une hausse de plus de 15 % met plutôt le produit en pause, et je le verrai dans list_synced_products.