Skip to main content
100 tools ship with the server: 17 general ones, and one for each action the Admin API offers — cancel an order, capture a payment, approve a seller. An assistant is only ever shown the ones you approved, so a connection for products alone sees a fraction of them. The catalog is not a mirror of the API’s 500-odd operations. Plain reads and writes of a record go through the generic tools under creating, changing and deleting records, and each action is a tool of its own, built from the Admin API operation it runs.
The Permission column is what you have to approve for the tool to be offered. A dash means it has no permission of its own and is checked per record instead: search_resources is offered to everyone, but only finds what you approved.The last column says whether the tool reads or writes. A write asks your client to confirm before it runs.

Finding and reading

Reporting

Catalog

Stock

Files

Creating, changing and deleting records

Three tools cover everything your store can write — 38 kinds of record, from products and orders to markets, tax rates and delivery methods — rather than one tool each. Creating an order through an assistant does exactly what creating one in the dashboard does. The dash is the point: each call is gated on the resource being written, so a connection approved for products can create a product and is refused a market. Call describe_resource for what a resource accepts. Some records exist only inside another: an order’s items, discounts and fees. describe_resource names that record as the resource’s parent, and each generic tool that reads or writes a record takes its id as parent_id. That is how an assistant changes a quantity, sets a negotiated unit price or adds a discount on a draft order.

Actions

Every Admin API action that is not a plain create, update or delete is a tool, named after the record and the action. Its description, its arguments and the permission it needs are the operation’s own, so the Admin API reference is the full description of each one. Every action is a write, and asks your client to confirm before it runs.

Catalogs

Categories

Channels

Collections

Companies

Customers

Deliveries

Fulfillments

Orders

Payments

Pricing

Product Types

Products

Purchase Orders

Sellers

Shipping Labels

Stock Transfers

Tools named in Spree 6.0.0 that no longer appear here — fulfillments_create, refunds_create, variants_create and the like, which are now create_resource calls — still answer through 6.0.x, as do the 6.0.0 argument names. A call that uses one says what to send instead. deliveries_update_tracking no longer answers: in 6.0.0 it marked the delivery delivered and dropped its tracking fields.

Resources

Beyond tools, the server offers MCP resources — files a client can fetch rather than operations it can run. A product’s media, an order’s purchase order and an import’s own file are things an assistant puts there rather than reads back, so they are uploads rather than files it can fetch.

What no tool will do

Some things are out of reach whatever you approve.
  • Keys and codes. API keys, integrations, webhooks and gift card codes are never shown. A gift card code is the money itself, and an integration’s settings hold the passwords for another service.
  • Making another way in. An assistant cannot create API keys, roles, staff accounts or register another assistant — so it can never widen its own reach.
  • Erasing a customer. GDPR erasure is irreversible and is not something to put behind a single confirmation prompt. Do it in the dashboard.
  • Codes that spend money. A gift card or coupon export carries live codes, so no tool creates or reads one. Download it from the dashboard.
An action an assistant must not run is marked in the API reference with the reason. A contract spec fails when an admin action has no documented operation or an opt-out gives no reason.

Writing records

Two things worth knowing about the generic writes: Nested records travel with their parent. A product’s variants carry their own options, prices and stock levels in the same write, so creating a product with two sized variants is one call rather than four. describe_resource reports what fits inside each list. A list replaces rather than appends. Sending one variant leaves a product with one variant. Send every row you want to keep. Rows selected by a type take a short name, never a class name. A promotion’s rules and actions, a price list’s rules and a payment method’s provider are chosen by type: item_total, create_item_adjustments, check. describe_resource on one resource lists the kinds under types and nested_types, each with the schema its preferences follow and, for an action that prices a discount, the calculators it takes. A kind the store does not offer is refused with the accepted ones named, so nothing is saved with a rule or an action missing. Rows that live under a parent are reached through it. Promotion rules, promotion actions and an order’s payments have no search of their own: pass the parent’s id as parent_id, or read them with get_resource on the parent, naming the list in expand. Where the parent accepts the rows as a list attribute, as a promotion does its rules and actions, that attribute is also how they are written.

See also

Permissions and consent

What you approve, and what an assistant can never reach.

Custom tools

How your extension’s admin endpoints become tools, and adding one by hand.