Fulfiller — print catalogue & quotes
Print catalogue and live quotes from Fulfiller, a French online printer shipping across the EU.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (1)
- LOWen get_cart
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
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": {
"agentic-commerce-api": {
"url": "https://www.fulfiller.com/agenticopenapi/mcp"
}
}
}Puntos de conexión remotos
https://www.fulfiller.com/agenticopenapi/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (11)
🟢search_products(q, limit)
Recherche plein-texte dans le catalogue Fulfiller et renvoie des produits COTABLES (productId, sku, url, prix d’appel). Point d’entrée obligatoire : les autres outils travaillent sur le productId renvoyé ici. `startingPrice` est un PLANCHER dont la base (TOTAL, UNIT, PER_SQUARE_METER) change d’un produit à l’autre — ne comparez jamais deux bases différentes et n’annoncez pas ce prix comme ferme : seul quote_product l’est.
Esquema de entrada
{
"type": "object",
"properties": {
"q": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Mots-clés en français (ex. « carte de visite », « bâche publicitaire »)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"description": "Nombre de résultats souhaité (1 à 24)."
}
},
"required": [
"q"
]
}🟢resolve_product(sku, url)
Convertit une identité EXACTE en productId : `sku` (lisible dans le JSON-LD d’une page produit) ou `url` de la page. À PRÉFÉRER à search_products dès que vous tenez l’un des deux — la recherche est approximative, celle-ci ne l’est pas. Fournissez exactement un argument.
Esquema de entrada
{
"type": "object",
"properties": {
"sku": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "SKU exact (ex. « POSTER_PHOTO_SUR_MESURE »)."
},
"url": {
"type": "string",
"minLength": 1,
"maxLength": 2048,
"description": "URL de la page produit sur www.fulfiller.com."
}
},
"required": []
}🟢get_product_details(sku, url)
Fiche PIM d’un produit : descriptions, points clés, questions fréquentes, contraintes de fichier (fond perdu, résolution, marges, mode colorimétrique) et ressources (visuels, gabarits, consignes techniques). À utiliser pour DÉCRIRE un produit ou aider à préparer un fichier. Ne renvoie aucun prix — pour coter, passez par quote_product. Fournissez exactement un argument. Les champs absents ne sont pas renseignés au PIM ; la FAQ est rare.
Esquema de entrada
{
"type": "object",
"properties": {
"sku": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "SKU exact, tel que rendu par search_products ou resolve_product."
},
"url": {
"type": "string",
"minLength": 1,
"maxLength": 2048,
"description": "URL de la page produit sur www.fulfiller.com."
}
},
"required": []
}🟢get_product_configuration(productId)
Renvoie les options configurables d’un produit (quantités, délais, valeurs, tailles) et leurs valeurs disponibles. À appeler AVANT validate_selection ou quote_product : chez Fulfiller, un produit n’est pas un SKU à prix figé mais un espace de configuration.
Esquema de entrada
{
"type": "object",
"properties": {
"productId": {
"type": "integer",
"minimum": 1,
"description": "Identifiant rendu par search_products."
}
},
"required": [
"productId"
]
}🟢validate_selection(productId, selection)
Résout une sélection tolérante en codes canoniques et vérifie sa COMMANDABILITÉ, sans renvoyer de prix. Sert à corriger une sélection avant de la coter. Lisez `alerts` et `requiresReview` : `true` signifie que la sélection retenue diffère de celle demandée.
Esquema de entrada
{
"type": "object",
"properties": {
"productId": {
"type": "integer",
"minimum": 1
},
"selection": {
"type": "object",
"description": "Sélection d’options. `{\"options\": []}` est valide et cote la configuration par défaut du produit. La résolution est TOLÉRANTE : un code approchant est résolu, et l’écart est signalé dans `alerts`.",
"properties": {
"options": {
"type": "array",
"maxItems": 50,
"items": {
"type": "object",
"properties": {
"option": {
"type": "string",
"description": "Code de l’option, tel que rendu par get_product_configuration."
},
"type": {
"type": "string",
"enum": [
"QUANTITY",
"DELIVERY_TIME",
"LIST_OF_VALUES",
"SIZE"
],
"description": "Seuls ces 4 types sont SÉLECTIONNABLES. Un autre type déclaré par la configuration (LIST_OF_RANGES, QUANTITY_BY_VALUE) est décrit mais non sélectionnable : le défaut du produit s’applique."
},
"value": {
"type": "string",
"description": "Code de la valeur retenue (types LIST_OF_VALUES et DELIVERY_TIME)."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Quantité demandée (type QUANTITY)."
},
"size": {
"type": "object",
"description": "Gabarit et dimensions personnalisées (option de type SIZE).",
"properties": {
"code": {
"type": "string",
"description": "Code du gabarit de taille."
},
"width": {
"type": "number",
"exclusiveMinimum": 0
},
"height": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"code"
]
}
},
"required": [
"option",
"type"
]
}
}
},
"required": [
"options"
]
}
},
"required": [
"productId",
"selection"
]
}🟢quote_product(productId, selection)
Devis RÉEL pour une sélection : prix HT calculé par le moteur de tarification (jamais lu dans une table de SKU), devise, délai, promotion. C’est le seul prix ferme. Si `requiresReview` vaut `true`, le prix porte sur `resolvedSelection`, pas sur la demande.
Esquema de entrada
{
"type": "object",
"properties": {
"productId": {
"type": "integer",
"minimum": 1
},
"selection": {
"type": "object",
"description": "Sélection d’options. `{\"options\": []}` est valide et cote la configuration par défaut du produit. La résolution est TOLÉRANTE : un code approchant est résolu, et l’écart est signalé dans `alerts`.",
"properties": {
"options": {
"type": "array",
"maxItems": 50,
"items": {
"type": "object",
"properties": {
"option": {
"type": "string",
"description": "Code de l’option, tel que rendu par get_product_configuration."
},
"type": {
"type": "string",
"enum": [
"QUANTITY",
"DELIVERY_TIME",
"LIST_OF_VALUES",
"SIZE"
],
"description": "Seuls ces 4 types sont SÉLECTIONNABLES. Un autre type déclaré par la configuration (LIST_OF_RANGES, QUANTITY_BY_VALUE) est décrit mais non sélectionnable : le défaut du produit s’applique."
},
"value": {
"type": "string",
"description": "Code de la valeur retenue (types LIST_OF_VALUES et DELIVERY_TIME)."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Quantité demandée (type QUANTITY)."
},
"size": {
"type": "object",
"description": "Gabarit et dimensions personnalisées (option de type SIZE).",
"properties": {
"code": {
"type": "string",
"description": "Code du gabarit de taille."
},
"width": {
"type": "number",
"exclusiveMinimum": 0
},
"height": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"code"
]
}
},
"required": [
"option",
"type"
]
}
}
},
"required": [
"options"
]
}
},
"required": [
"productId",
"selection"
]
}🟢quote_by_quantity(productId, selection, quantities)
Grille de devis pour plusieurs paliers de quantité en UN appel — la bonne façon de répondre à « combien pour 100, 250, 500 ? ». Un palier hors plage ressort en erreur localisée sans invalider les autres.
Esquema de entrada
{
"type": "object",
"properties": {
"productId": {
"type": "integer",
"minimum": 1
},
"selection": {
"type": "object",
"description": "Sélection d’options. `{\"options\": []}` est valide et cote la configuration par défaut du produit. La résolution est TOLÉRANTE : un code approchant est résolu, et l’écart est signalé dans `alerts`.",
"properties": {
"options": {
"type": "array",
"maxItems": 50,
"items": {
"type": "object",
"properties": {
"option": {
"type": "string",
"description": "Code de l’option, tel que rendu par get_product_configuration."
},
"type": {
"type": "string",
"enum": [
"QUANTITY",
"DELIVERY_TIME",
"LIST_OF_VALUES",
"SIZE"
],
"description": "Seuls ces 4 types sont SÉLECTIONNABLES. Un autre type déclaré par la configuration (LIST_OF_RANGES, QUANTITY_BY_VALUE) est décrit mais non sélectionnable : le défaut du produit s’applique."
},
"value": {
"type": "string",
"description": "Code de la valeur retenue (types LIST_OF_VALUES et DELIVERY_TIME)."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Quantité demandée (type QUANTITY)."
},
"size": {
"type": "object",
"description": "Gabarit et dimensions personnalisées (option de type SIZE).",
"properties": {
"code": {
"type": "string",
"description": "Code du gabarit de taille."
},
"width": {
"type": "number",
"exclusiveMinimum": 0
},
"height": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"code"
]
}
},
"required": [
"option",
"type"
]
}
}
},
"required": [
"options"
]
},
"quantities": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"type": "integer",
"minimum": 1
},
"description": "Paliers de quantité à coter (1 à 20)."
}
},
"required": [
"productId",
"selection",
"quantities"
]
}🟡create_cart(lines, idempotencyKey)
Crée un panier anonyme, éventuellement avec ses premières lignes (cotées à l’ajout, prix FIGÉ). Un panier n’est PAS une commande : rien n’est engagé, et le total est HT — hors TVA et hors port. Chaque ligne exige un productId ET son sku, tous deux rendus par search_products.
Esquema de entrada
{
"type": "object",
"properties": {
"lines": {
"type": "array",
"maxItems": 5,
"items": {
"type": "object",
"properties": {
"productId": {
"type": "integer",
"minimum": 1,
"description": "Identifiant produit (`zeloomProductId`) rendu par search_products."
},
"sku": {
"type": "string",
"maxLength": 128,
"description": "SKU exact rendu par search_products. REQUIS : il n’existe pas de résolution inverse productId → sku."
},
"selection": {
"type": "object",
"description": "Sélection d’options. `{\"options\": []}` est valide et cote la configuration par défaut du produit. La résolution est TOLÉRANTE : un code approchant est résolu, et l’écart est signalé dans `alerts`.",
"properties": {
"options": {
"type": "array",
"maxItems": 50,
"items": {
"type": "object",
"properties": {
"option": {
"type": "string",
"description": "Code de l’option, tel que rendu par get_product_configuration."
},
"type": {
"type": "string",
"enum": [
"QUANTITY",
"DELIVERY_TIME",
"LIST_OF_VALUES",
"SIZE"
],
"description": "Seuls ces 4 types sont SÉLECTIONNABLES. Un autre type déclaré par la configuration (LIST_OF_RANGES, QUANTITY_BY_VALUE) est décrit mais non sélectionnable : le défaut du produit s’applique."
},
"value": {
"type": "string",
"description": "Code de la valeur retenue (types LIST_OF_VALUES et DELIVERY_TIME)."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Quantité demandée (type QUANTITY)."
},
"size": {
"type": "object",
"description": "Gabarit et dimensions personnalisées (option de type SIZE).",
"properties": {
"code": {
"type": "string",
"description": "Code du gabarit de taille."
},
"width": {
"type": "number",
"exclusiveMinimum": 0
},
"height": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"code"
]
}
},
"required": [
"option",
"type"
]
}
}
},
"required": [
"options"
]
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "Nombre de LOTS identiques au prix unitaire figé — PAS un palier de volume : 2×50 exemplaires n’a pas le même prix qu’1×100. Pour changer de volume, re-cotez avec une autre QUANTITY dans `selection`, puis remplacez la ligne. Défaut 1."
}
},
"required": [
"productId",
"sku",
"selection"
]
},
"description": "Lignes initiales (0 à 5). Un panier vide est légitime."
},
"idempotencyKey": {
"type": "string",
"format": "uuid",
"description": "UUID optionnel. Rejouer le MÊME appel avec la même clé renvoie le panier déjà créé au lieu d’en créer un second : à utiliser si vous devez réessayer après une erreur."
}
},
"required": []
}🟢get_cart(cartId)
Renvoie le panier tel que FIGÉ à l’ajout : aucune re-cotation à la lecture. `pricedAt` par ligne et `expiresAt` donnent l’âge des prix — au-delà, re-cotez avec quote_product.
Esquema de entrada
{
"type": "object",
"properties": {
"cartId": {
"type": "string",
"description": "Identifiant du panier (UUID) rendu par create_cart. C’est une CAPACITÉ : qui le détient accède au panier — ne le publiez pas hors de la conversation qui l’a créé."
}
},
"required": [
"cartId"
]
}🔴update_cart(cartId, remove, update, add)
Applique, DANS CET ORDRE : retraits (`remove`), changements de quantité (`update`, sans re-cotation), puis ajouts (`add`, cotés). Renvoie le panier complet après application.
Esquema de entrada
{
"type": "object",
"properties": {
"cartId": {
"type": "string",
"description": "Identifiant du panier (UUID) rendu par create_cart. C’est une CAPACITÉ : qui le détient accède au panier — ne le publiez pas hors de la conversation qui l’a créé."
},
"remove": {
"type": "array",
"maxItems": 20,
"items": {
"type": "string"
},
"description": "`lineId` des lignes à retirer."
},
"update": {
"type": "array",
"maxItems": 20,
"items": {
"type": "object",
"properties": {
"lineId": {
"type": "string"
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"required": [
"lineId",
"quantity"
]
},
"description": "Nouveau nombre de LOTS pour des lignes existantes (prix unitaire figé inchangé)."
},
"add": {
"type": "array",
"maxItems": 5,
"items": {
"type": "object",
"properties": {
"productId": {
"type": "integer",
"minimum": 1,
"description": "Identifiant produit (`zeloomProductId`) rendu par search_products."
},
"sku": {
"type": "string",
"maxLength": 128,
"description": "SKU exact rendu par search_products. REQUIS : il n’existe pas de résolution inverse productId → sku."
},
"selection": {
"type": "object",
"description": "Sélection d’options. `{\"options\": []}` est valide et cote la configuration par défaut du produit. La résolution est TOLÉRANTE : un code approchant est résolu, et l’écart est signalé dans `alerts`.",
"properties": {
"options": {
"type": "array",
"maxItems": 50,
"items": {
"type": "object",
"properties": {
"option": {
"type": "string",
"description": "Code de l’option, tel que rendu par get_product_configuration."
},
"type": {
"type": "string",
"enum": [
"QUANTITY",
"DELIVERY_TIME",
"LIST_OF_VALUES",
"SIZE"
],
"description": "Seuls ces 4 types sont SÉLECTIONNABLES. Un autre type déclaré par la configuration (LIST_OF_RANGES, QUANTITY_BY_VALUE) est décrit mais non sélectionnable : le défaut du produit s’applique."
},
"value": {
"type": "string",
"description": "Code de la valeur retenue (types LIST_OF_VALUES et DELIVERY_TIME)."
},
"quantity": {
"type": "integer",
"minimum": 1,
"description": "Quantité demandée (type QUANTITY)."
},
"size": {
"type": "object",
"description": "Gabarit et dimensions personnalisées (option de type SIZE).",
"properties": {
"code": {
"type": "string",
"description": "Code du gabarit de taille."
},
"width": {
"type": "number",
"exclusiveMinimum": 0
},
"height": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"code"
]
}
},
"required": [
"option",
"type"
]
}
}
},
"required": [
"options"
]
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 1000,
"description": "Nombre de LOTS identiques au prix unitaire figé — PAS un palier de volume : 2×50 exemplaires n’a pas le même prix qu’1×100. Pour changer de volume, re-cotez avec une autre QUANTITY dans `selection`, puis remplacez la ligne. Défaut 1."
}
},
"required": [
"productId",
"sku",
"selection"
]
},
"description": "Nouvelles lignes, cotées à l’ajout."
}
},
"required": [
"cartId"
]
}🔴delete_cart(cartId)
Supprime DÉFINITIVEMENT un panier et toutes ses lignes. Irréversible. Pour retirer une seule ligne, utilisez update_cart avec `remove`.
Esquema de entrada
{
"type": "object",
"properties": {
"cartId": {
"type": "string",
"description": "Identifiant du panier (UUID) rendu par create_cart. C’est une CAPACITÉ : qui le détient accède au panier — ne le publiez pas hors de la conversation qui l’a créé."
}
},
"required": [
"cartId"
]
}Comunidad
Evidencia