Développeurs
Assistants IA (MCP)
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
- Ouvrez Settings › Connectors et choisissez Add custom connector.
- Collez l’adresse ci-dessus et ajoutez-la.
- Connectez-vous avec votre numéro de téléphone NinjaBuy, puis choisissez Allow access.
ChatGPT
- Activez le mode développeur dans les réglages, puis ajoutez un serveur MCP personnalisé.
- Collez l’adresse ci-dessus et choisissez OAuth comme mode de connexion.
- 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.
{
"mcpServers": {
"ninjabuy": {
"url": "https://www.ninjabuy.com/mcp"
}
}
}Claude Code et autres assistants en ligne de commande
claude mcp add --transport http ninjabuy https://www.ninjabuy.com/mcpLes 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.
| Outil | Ce qu’il fait |
|---|---|
| list_orders | Lister mes commandes NinjaBuy |
| order | Une commande NinjaBuy |
| warehouse | Mon entrepôt NinjaBuy |
| product | Lire les variantes d’un produit |
| add_to_cart | Ajouter à mon panier NinjaBuy |
| search_products | Rechercher des produits |
| analyze_product | Analyser un produit |
| import_product | Importer un produit |
| push_to_shopify | Push to Shopify |
| list_synced_products | Lister mes produits synchronisés |
| set_sync_rule | Fixer 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.
{
"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": {
"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.
{
"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": {
"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.
{
"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.
{
"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.
{
"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": {
"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.
{
"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.
{
"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.
{
"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 ?
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é.
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 ».
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.
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.