Fulfiller — print catalogue & quotes

Print catalogue and live quotes from Fulfiller, a French online printer shipping across the EU.

使うべきか

品質と安全性

A
説明の品質
94%
スキーマの完全性
95%
命名の品質
95%
ポイズニングのリスク
100%
権限の一致
100%
プロトコルへの準拠
100%

検出事項(1)

  • LOWTool 'get_cart' description lacks action verbget_cart 内

ツール定義とプロトコルへの準拠に関する自動分析に基づいています。

コンテキストコスト

~3,902トークン数(ツール定義)
~2.9 KB一般的なレスポンスサイズ
注意への影響は大きい(128k コンテキストの 3.05%)

これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。

インストール

ワンクリックインストール

これを `claude_desktop_config.json` ファイルに追加してください:

{
  "mcpServers": {
    "agentic-commerce-api": {
      "url": "https://www.fulfiller.com/agenticopenapi/mcp"
    }
  }
}

リモートエンドポイント

https://www.fulfiller.com/agenticopenapi/mcpstreamable-http

できること

ツール一覧

ツール(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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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.

入力スキーマ

{
  "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`.

入力スキーマ

{
  "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"
  ]
}

コミュニティ

このサーバーを評価する

エビデンス

最近の観測

検証済みバージョンは記録されていませんツール 11 件
検証済みバージョンは記録されていませんツール 11 件