MCP Reorder for Magento 2 — module reference
MCP Reorder lets an AI agent fill a business buyer’s cart from their order history. A buyer can tell Claude, or any MCP client, “order the same as last month, but double the gloves”, or paste a list of SKUs. The agent reads their own orders, puts the lines into their own cart at their own prices, and reports what is out of stock or more expensive now.
The buyer then checks out on your store as usual. The tools never place an order. Payment, purchase orders, approvals and company rules stay in your checkout.
It extends MCP Server. For shoppers who are not signed in, see MCP Checkout.
Tools
| Tool | What it does | Changes data |
|---|---|---|
list_my_orders | The buyer’s orders, newest first. sku finds orders that contain a product. | No |
get_my_order | Every line of one order: SKU, options, quantity, price then | No |
reorder_to_cart | Puts an order into the cart: all lines, a multiplier, or chosen items. Reports price changes and lines that cannot be added. | Cart |
add_items_to_my_cart | Quick order: a list of {sku, qty} in one call | Cart |
update_my_cart_item | Changes a line’s quantity, or removes it with qty: 0 | Cart |
get_my_cart | The cart with totals and a checkout_url | No |
get_my_prices | The buyer’s own unit price and quantity breaks for up to 50 SKUs | No |
reorder_to_cart and add_items_to_my_cart accept "preview": true. You get the same result, prices and stock check, but the cart is not saved.
Two conversation starters are added for signed-in buyers: Reorder from {store} and Quick order at {store}.
list_my_orders → order 000000123, 14 lines
reorder_to_cart {order_number: "000000123", multiplier: 2, preview: true}
→ 13 lines OK, 1 out of stock, gloves +8 %
(buyer confirms)
reorder_to_cart {order_number: "000000123", multiplier: 2}
→ cart saved, checkout_url
How it works
- The buyer’s normal cart. Changes go into the same cart the buyer sees in the mini cart.
- Today’s prices and rules. Lines are added with Magento’s own reorder logic, so options, variants and bundles come back as bought. Prices, tier prices, catalog rules and stock are today’s, for the buyer’s customer group.
- All or nothing per change. Lines are added, totals are collected, limits are checked — and only then is the cart saved. If a limit is broken, nothing is saved.
- Partial success is reported. A line Magento refuses (out of stock, minimum quantity, no longer sold) is listed with the reason. The other lines still go in.
Security model
- Verified buyers only. The tools appear in
tools/listonly when the request carries a customer token that Magento verified. Anonymous and integration-only connections do not see them. - No identity in arguments. No tool accepts a customer id, email or login. The buyer comes only from the token.
- Own data only. Orders are filtered by the buyer and by the store views of the current website. Another buyer’s order number looks like one that does not exist.
- Small output. Orders show SKUs, names, quantities, prices and status. No addresses, email or payment data.
- Storefront rules. Disabled, hidden or other-website products are refused, also in
get_my_prices. An oldcustom_pricefrom an admin order is never copied. - Limits. Lines per call, quantity per line, lines in the cart, and an optional subtotal cap. All are checked on the resulting cart before it is saved.
- Audit log. Each cart change is written to
var/log/angeo_mcp_reorder.log: tool, customer id, store and line counts. No product data or prices.
Requirements
| Magento | 2.4.6+ (Open Source, Mage-OS or Adobe Commerce) — magento/framework >=103.0.6 <104 |
|---|---|
| PHP | 8.1 – 8.5 — ~8.1.0||~8.2.0||~8.3.0||~8.4.0||~8.5.0 |
| Other angeo modules | angeo/module-mcp-server ^2.4.0 |
MCP Server 2.4.0 brings customer tokens and account linking, which is how connectors such as Claude reach a signed-in buyer.
Installation
composer require angeo/module-mcp-reorder
bin/magento module:enable Angeo_McpReorder
bin/magento setup:upgrade
bin/magento setup:di:compile # production mode only
bin/magento cache:flush
Then, in Stores → Configuration → Angeo → MCP Server:
- Security → Accept Customer Tokens = Yes
- Customer Account Tools → Enable = Yes
Test from the shell as a real customer, without a token:
bin/magento angeo:mcp:tools list_my_orders -c buyer@example.com
bin/magento angeo:mcp:tools reorder_to_cart -c buyer@example.com \
-a '{"order_number":"000000123","preview":true}'
Configuration reference
All settings are under Stores → Configuration → Angeo → MCP Server. The table shows each field, its config path (for bin/magento config:set) and its default value.
Customer Account Tools (Reorder & Quick Order) (6)
| Setting | Config path | Default |
|---|---|---|
| Enable Customer Account Tools | angeo_mcp/reorder/enabled | No |
| Max Lines per Call | angeo_mcp/reorder/max_lines_per_call | 50 |
| Max Quantity per Line | angeo_mcp/reorder/max_qty_per_line | 1000 |
| Max Cart Lines | angeo_mcp/reorder/max_cart_lines | 100 |
| Max Cart Subtotal (base currency) | angeo_mcp/reorder/max_cart_subtotal | 0 |
| Orders per Page | angeo_mcp/reorder/orders_page_size | 10 |
Reordering also follows Magento’s own Sales → Reorder → Allow Reorder setting.
Connecting a signed-in buyer
- Through a connector with account linking — this is how Claude connects, for example through mcp.angeo.dev. The buyer signs in on your store and approves. The connector gets an MCP-only token (
amc_…) and sends it asX-Customer-Tokennext to its Integration token. See account linking. - Directly, for testing only (Claude Code, MCP Inspector). Turn on Accept Storefront Customer Tokens (testing) first, and off again afterwards.
TOKEN=$(curl -s -X POST https://your-store.example/rest/V1/integration/customer/token \
-H 'Content-Type: application/json' \
-d '{"username":"buyer@example.com","password":"…"}' | tr -d '"')
claude mcp add --transport http my-store https://your-store.example/mcp \
-H "Authorization: Bearer $TOKEN"
Adobe Commerce B2B
The module works on Magento Open Source and Mage-OS with customer groups and tier prices. On Adobe Commerce with B2B, carts change through the core cart (Quote::addProduct), so B2B cart rules apply. Negotiable quotes, requisition lists and purchase-order approval are not touched — the buyer uses them at checkout as usual.
Known limits
add_items_to_my_cartadds simple, virtual and configurable products. Reorder bundles and grouped products from a past order, or add them on the store.get_my_pricesshows prices before cart rules and tax, in base currency. The cart total is final.- A search by
skulooks at the latest 100 orders. - On multi-currency stores, price changes are flagged only when the order and the cart use the same currency.
FAQ
Can the agent place the order?
No. There is no tool that places an order. The agent fills the cart and gives the buyer a checkout link. The buyer checks out on your store.
Which prices does the agent see?
The buyer’s own prices today: their customer group, tier prices and catalog rules. Cart rules and tax are applied in the cart total.
Can an agent see another customer’s orders?
No. The buyer comes only from the verified token, never from tool arguments, and orders are filtered by that buyer. Another buyer’s order number looks like one that does not exist.
Does it work with Adobe Commerce B2B?
Yes, through the core cart, so B2B cart rules apply. Negotiable quotes, requisition lists and approvals stay in the normal checkout.
How does Claude know who the buyer is?
Through account linking in MCP Server. The buyer signs in on your store and approves the connector, which then gets an MCP-only token for that buyer.
Related
- MCP Server — live, read-only catalog tools for AI agents over MCP
- MCP Checkout — guest cart and checkout tools for AI agents, with server-side limits
- AI Agent Activity — report on AI agent calls, crawler visits, fake bots and agent-built orders
- MCP account linking — definition
- B2B AI visibility for Magento
- All module reference pages · Compatibility matrix
This page was written from the README.md, composer.json and etc/*.xml files of tag 1.0.0, read on 16 October 2026. Settings, commands and defaults come straight from that code. If a newer release is out, the README on GitHub wins.