MCP Tools Reference
Complete list of tool groups and actions available in the Vantemo MCP server.
MCP Tools Reference
The Vantemo MCP server organizes its actions into 9 tool groups. Each group is
exposed as up to three meta-tools that accept an action parameter to select the
specific operation:
| Tool | Holds | Asks you first? |
|---|---|---|
<group> (e.g. catalog) | The group's read actions (every GET below) | No |
<group>_write (e.g. catalog_write) | Changes that are easy to undo: new items, text edits, draft page sections, adding or removing a photo | No — not flagged for approval |
<group>_confirm (e.g. catalog_confirm) | Deletes, prices, coupons, stock, shipping, order status, store-wide settings, menu links, storefront publish and anything that changes the live shop at once | Yes — flagged for approval on every call |
The Tool column in each table below names the tool that carries the action. A group
gets no tool for a tier it has no actions in: analytics is read-only; orders,
store_config and shipping have no _write tool; customers has no _confirm tool.
See Approval tiers for how each client treats them.
How Tool Groups Work
When the AI calls a tool, it provides two parameters:
- action (required): The specific operation to perform (e.g.,
list_products) - params (optional): Parameters for the operation (e.g.,
{ "status": "active" })
AI calls: catalog({ action: "list_products", params: { status: "active", limit: 10 } })
→ MCP server resolves to: GET /v1/admin/shops/{shopId}/products?status=active&limit=10
→ Returns product list as text contentRead (GET) and DELETE actions accept only the parameters named in the tool description
the AI receives; any other name is refused with the list of accepted ones. In that
description, path parameters follow the action name, e.g. get_product(productId).
bulk_set_out_of_stock_behavior always sends its own fixed operation to the bulk
endpoint, so a call that tries to choose a different one (e.g. a bulk delete) is refused.
The content-only _write actions (update_product_content, create_product_draft,
update_category_content, update_tag, update_attribute_options, update_brand_content)
accept only the fields their description lists; any other field is refused. They cannot
change status, prices, stock, visibility, an attribute's key or data type, or any slug; those
go through the matching _confirm action. (create_product_draft does set the new draft's
variant prices; the draft is not on sale until update_product publishes it.)
update_media and update_product_media likewise accept only the fields their description
lists (alt text, plus folder or option value).
For every action, path ids (productId, categoryId, …) must be UUIDs.
catalog
Products, prices, categories, collections, tags, filters (attributes), brands, and inventory management.
| Action | Method | Tool | Description |
|---|---|---|---|
list_products | GET | catalog | List products with filters (status, search, category, brand, featured, stock), sorting, and pagination; limit: 1 plus pagination.total gives a count |
get_product | GET | catalog | Full product detail: variants, categories, subscription prices, the productMedia gallery and the older images list |
create_product | POST | catalog_confirm | Create a new product; optional listing (everywhere default, search_and_link, link_only) sets where it can be discovered. Each variant may carry supplierSku — the supplier's own product code (unique per shop; a code another active variant holds is refused with 409 SUPPLIER_SKU_CONFLICT) |
create_product_draft | POST | catalog_write | Create a product as a draft (not on sale) with its text, categories, brand, tags and variants. Prices per currency, option groups, subscription and digital products need create_product; going live needs update_product |
update_product | PATCH | catalog_confirm | Partial update of product fields, including status (active/draft/archived/hidden) and listing — everywhere shows it in automatic lists; search_and_link only in search and by direct link; link_only only by direct link (not in lists, search, sitemap or shopping feeds, and noindex). Every value stays purchasable by its URL and still shows where you place it by hand (collections, Featured, menus). Per variant, supplierSku sets the supplier's code: omitted keeps it, null clears it. tags adds tags and removes none. |
update_product_content | PATCH | catalog_write | Edit a product's text only: name, descriptions, SEO and social fields, description sections, filter values (attributeValues), categories, brand and tags (added, none removed). Any other field is refused: status, variants, prices, stock, images and translations go through update_product |
delete_product | DELETE | catalog_confirm | Archive (soft-delete) a product; refused while it has active orders |
duplicate_product | POST | catalog_write | Create a draft copy of an existing product |
upsert_prices | PUT | catalog_confirm | Replace a product's per-currency standard prices (left-out currencies are deactivated) |
bulk_set_out_of_stock_behavior | POST | catalog_confirm | Set what selected products do when sold out — Store default, a "Notify me" form, or shown as out of stock — for up to 50 product ids per call, or for every product matching a filter, 50 per call. Products hidden for being sold out come back when they no longer follow Hide. This is the only bulk product action over MCP. |
list_categories | GET | catalog | List all categories (flat or tree format) |
get_category | GET | catalog | Get a single category |
create_category | POST | catalog_write | Create a new category |
update_category | PATCH | catalog_confirm | Update category name, slug, or parent |
update_category_content | PATCH | catalog_write | Edit a category's name, description, icon, image, SEO fields and translations; slug, parent, visibility and order go through update_category |
delete_category | DELETE | catalog_confirm | Delete a category |
list_collections | GET | catalog | List product collections |
get_collection | GET | catalog | Get collection detail with its products |
create_collection | POST | catalog_write | Create a collection; add products with add_collection_product. Display settings: showFilters (false hides the storefront filters on its page), cardStyle (standard or featured: the first product in the hand-set order shows as a large "favourite" card) and cardAttributeKey (an attribute shown as a pill on its cards when featured) |
update_collection | PATCH | catalog_confirm | Update collection details or display settings (showFilters, cardStyle, cardAttributeKey) |
delete_collection | DELETE | catalog_confirm | Delete a collection |
add_collection_product | POST | catalog_write | Add one product to a collection, optionally with its note. Refused (403) on a collection a funnel checkout uses as its plan list: change that one in the dashboard |
set_collection_product_note | PATCH | catalog_confirm | Set or clear one product's note in one collection (one line, up to 120 characters; "" or null clears it). The note shows only on that collection's page when its cardStyle is featured |
remove_collection_product | DELETE | catalog_confirm | Remove one product from a collection (the product is kept) |
list_tags | GET | catalog | List product tags with usage counts |
create_tag | POST | catalog_write | Create a new tag |
update_tag | PATCH | catalog_write | Update a tag's name, color or type (the slug cannot be changed over MCP) |
delete_tag | DELETE | catalog_confirm | Delete a tag |
list_attributes | GET | catalog | List the shop's active attributes (product facts and storefront filters) with their options and how many products hold a value; each id is the definitionId for update_product_content |
create_attribute | POST | catalog_write | Create an attribute (filter): key, name, data type, options, group, unit and its filter, search and card flags |
update_attribute_options | PATCH | catalog_write | Edit an attribute's display name, options, group, unit or order. The option list is replaced whole; removing an option drops it from the filter and leaves product values as they are |
update_attribute | PATCH | catalog_confirm | Full attribute update, including key, data type, active and filter flags (asks first: key and data type changes are not checked against products that hold values) |
delete_attribute | DELETE | catalog_confirm | Delete an attribute and every product's value for it |
list_brands | GET | catalog | List every brand with its product count; search, active filter and sort |
get_brand | GET | catalog | Get one brand |
create_brand | POST | catalog_write | Create a brand with its text, logo, banner, website and SEO fields |
update_brand_content | PATCH | catalog_write | Edit a brand's name, descriptions, logo, banner, website and SEO fields; slug, visibility and order go through update_brand |
update_brand | PATCH | catalog_confirm | Full brand update, including the slug (brand page URL), visibility and order |
delete_brand | DELETE | catalog_confirm | Delete a brand; its products are kept without a brand |
list_inventory | GET | catalog | List inventory rows (one per variant) with search, stock-status and supplier filters and a sort |
get_inventory | GET | catalog | Get one inventory row by inventoryId (from list_inventory) |
update_inventory | PATCH | catalog_write | Update an inventory row's reorder point, reorder quantity, stock-level visibility or location (not the stock count) |
adjust_stock | POST | catalog_confirm | Add or remove stock on an inventory row (quantityChange, movementType) |
orders
Orders, abandoned carts, and subscriptions.
| Action | Method | Tool | Description |
|---|---|---|---|
list_orders | GET | orders | List orders with status filter and pagination |
get_order | GET | orders | Full order detail with line items and addresses |
update_order_status | PATCH | orders_confirm | Change an order's status (allowed transitions only) or shipping status; moves no money |
list_abandoned_carts | GET | orders | List abandoned carts with recovery status |
get_abandoned_cart_stats | GET | orders | Aggregate abandoned cart metrics |
list_subscriptions | GET | orders | List recurring subscriptions |
get_subscription | GET | orders | Subscription detail with payment history |
Subscriptions are read-only here: to cancel one, the merchant opens it in the admin (Subscriptions → the subscription → Cancel).
customers
Customer profiles, recent orders, and CRM notes.
| Action | Method | Tool | Description |
|---|---|---|---|
list_customers | GET | customers | List customers with search by name or email |
get_customer | GET | customers | Customer profile (by email) with order stats and the 20 most recent orders |
list_customer_notes | GET | customers | Internal CRM notes for a customer |
add_customer_note | POST | customers_write | Add an internal CRM note |
content
Blog posts, pages and their sections, storefront publishing, navigation menus and their links, reviews, and testimonials.
Product cards in a blog post. A paragraph that holds only a link to one of your products
(<p><a href="/lt/products/<slug>">Name</a></p>, a relative link) shows on the storefront as a
product card with its photo, name, current price and add button. Several such paragraphs in a row
make a grid (2 per row on phones, 3 on wider screens); put text between them to start a new grid.
A product link inside a sentence, list or table stays a normal link. If the product is no longer
available, the paragraph shows as its plain link. Prices on cards refresh within a few minutes.
Up to 24 different products per post become cards.
| Action | Method | Tool | Description |
|---|---|---|---|
list_blog_posts | GET | content | List blog posts with status filter |
get_blog_post | GET | content | Get full blog post content |
create_blog_post | POST | content_confirm | Create a new blog post |
save_blog_post_draft | PUT | content_confirm | Save a full draft edit of a blog post; the live post is unchanged until published, but the draft replaces any unpublished one |
publish_blog_post | POST | content_confirm | Apply the saved draft to the live blog post |
delete_blog_post | DELETE | content_confirm | Delete a blog post |
list_pages | GET | content | List storefront pages (identified by slug) |
get_page | GET | content | Get a page's metadata and ordered sections by slug |
create_page | POST | content_write | Create an empty storefront page (about, contact, blog, or custom). It goes live only after publish_storefront; hiding it with update_page removes it from menus, but its URL still opens |
update_page | PUT | content_confirm | Update a page's title, meta description, OG image, or visibility |
delete_page | DELETE | content_confirm | Delete a page and its sections (system pages are refused) |
add_section | POST | content_write | Add a section to a page's draft (the section type is copied from get_page) |
update_section | PUT | content_write | Edit a draft section's content, settings, position or visibility. Editing a header or footer section changes the shop's draft header or footer |
reorder_sections | PUT | content_write | Put a page's draft sections in a new order |
delete_section | DELETE | content_confirm | Delete a section from a page's draft (cannot be undone) |
get_publish_status | GET | content | When the storefront was last published, whether the draft has unpublished changes, and whether a rollback is possible |
publish_storefront | POST | content_confirm | Make the whole storefront draft live: every pending page, section, style, header and footer change, including changes made in the dashboard |
rollback_storefront | POST | content_confirm | Put the previous published version back live (one step only; the draft is kept) |
list_menus | GET | content | List navigation menus |
get_menu | GET | content | Get menu with items |
create_menu | POST | content_confirm | Create an empty navigation menu for one location (HEADER, FOOTER, MOBILE or CUSTOM) |
update_menu | PATCH | content_confirm | Rename or (de)activate a menu |
delete_menu | DELETE | content_confirm | Delete a menu |
add_menu_item | POST | content_confirm | Add a link to a menu: a category, product, collection, page, custom URL or a heading |
add_menu_items_bulk | POST | content_confirm | Add many links in one call, optionally nested under each other |
update_menu_item | PATCH | content_confirm | Edit a link's label, target, type or parent |
delete_menu_item | DELETE | content_confirm | Delete a link and the links nested under it |
reorder_menu_items | PATCH | content_confirm | Move or nest links |
list_reviews | GET | content | List product reviews |
update_review_status | PATCH | content_confirm | Approve or reject a review |
list_testimonials | GET | content | List testimonials |
update_testimonial_status | PATCH | content_confirm | Approve or reject a testimonial |
Page sections are edited in the storefront draft: add_section, update_section and
reorder_sections change nothing on your live shop until publish_storefront, which asks
first. A header or footer section is shop-wide: adding one replaces the shop's header/footer
draft, and on a shop that has never been published it shows at once. publish_storefront
publishes every pending draft change, not only the AI's, so its description tells the AI to
check get_publish_status first and tell you which pages and sections it changed. Menu links have no draft: every link change is live at once, so each one asks first.
A link's parent must be another link of the same menu (from get_menu).
marketing
Email campaigns, coupons, and email settings.
| Action | Method | Tool | Description |
|---|---|---|---|
list_campaigns | GET | marketing | List email campaigns with status filter |
get_campaign | GET | marketing | Get campaign detail with content |
create_campaign | POST | marketing_write | Create a new email campaign as a draft (sending is done in the admin) |
update_campaign | PATCH | marketing_confirm | Update campaign content or schedule |
delete_campaign | DELETE | marketing_confirm | Delete a campaign |
list_coupons | GET | marketing | List discount coupons |
get_coupon | GET | marketing | Get coupon detail |
create_coupon | POST | marketing_confirm | Create a new coupon |
update_coupon | PATCH | marketing_confirm | Update coupon rules or limits |
delete_coupon | DELETE | marketing_confirm | Delete a coupon |
list_email_templates | GET | marketing | List email templates |
get_email_settings | GET | marketing | Get email config: languages, order email toggles, reply-to, quotas, sending domain |
update_email_settings | PATCH | marketing_confirm | Update email languages, order email toggles, reply-to, admin notification email |
analytics
Business intelligence and reporting. All actions are read-only.
| Action | Method | Tool | Description |
|---|---|---|---|
overview | GET | analytics | Revenue, order count, AOV, customer count and previous-period revenue |
revenue | GET | analytics | Daily revenue time series |
top_products | GET | analytics | Best-selling products by revenue |
customer_metrics | GET | analytics | New vs returning customers, top customers, all-time average LTV |
geographic | GET | analytics | Revenue breakdown by country |
funnel | GET | analytics | Storefront session counts by current stage |
order_status | GET | analytics | Order distribution by status |
category_revenue | GET | analytics | Revenue breakdown by category |
ad_spend | GET | analytics | Ad spend and ROAS by platform, campaign and day |
All analytics actions take an optional date range: days (1-365, default 30) or from +
to (dates, inclusive). top_products also takes limit (1-50) and ad_spend takes
platform (meta, google_ads, tiktok or all).
store_config
Store settings, payment/shipping providers, domains, themes, and the out-of-stock default.
| Action | Method | Tool | Description |
|---|---|---|---|
get_shop | GET | store_config | Get shop settings and configuration |
update_shop | PATCH | store_config_confirm | Update shop settings, sending only the changed fields: name, currency, locales, timezone, SEO and branding details (merged with the saved ones), free-shipping thresholds, tax, statement descriptor, time and date format, image quality, preview prefix |
list_providers | GET | store_config | List configured payment/shipping providers |
list_domains | GET | store_config | List connected domains |
list_themes | GET | store_config | Browse available storefront themes |
get_back_in_stock_settings | GET | store_config | Get the store default for sold-out products (HIDE, NOTIFY or NONE) |
update_back_in_stock_settings | PATCH | store_config_confirm | Change the store default for sold-out products. Every product set to "Store default" follows it; switching away from Hide brings back products already hidden for being sold out (liftedCount in the reply) |
media
Media library and product gallery management.
| Action | Method | Tool | Description |
|---|---|---|---|
list_media | GET | media | List media library assets |
get_media | GET | media | Get media asset details |
upload_media_from_url | POST | media_write | Import a JPEG, PNG or WebP from a public https URL into the library |
create_media_upload_link | POST | media_confirm | Get a 30-minute link where you upload up to 200 photos from your computer or phone (asks first: anyone holding the link can upload to your library until it expires) |
get_media_upload_link | GET | media | List the photos uploaded through a link |
delete_media | DELETE | media_confirm | Delete a media asset |
update_media | PATCH | media_write | Set a library file's alt text (used wherever a product image has none of its own) or folder |
attach_product_media | POST | media_write | Attach a library file to a product gallery |
detach_product_media | DELETE | media_write | Remove an image from a product gallery (the file stays in the library) |
reorder_product_media | PATCH | media_write | Set product gallery image order; the lowest sort order becomes the primary image |
update_product_media | PATCH | media_write | Set one product image's own alt text, or the option value it shows for; the primary image stays primary |
The product gallery's link ids (productMediaId, and id in reorder items) come from
get_product's productMedia[].id, not the library mediaId.
To add photos to a product, get them into the library first, then attach each one by its
mediaId. For images already on the web, use upload_media_from_url. For files on your
computer, the AI calls create_media_upload_link and gives you a link. Open it, drop in your
photos, and tell the AI when you're done. It then calls get_media_upload_link to find the
new mediaIds.
shipping
Shipping rates per method, country, currency, and carrier.
| Action | Method | Tool | Description |
|---|---|---|---|
list_shipping_rates | GET | shipping | List shipping rates, optionally filtered by country or method |
create_shipping_rate | POST | shipping_confirm | Create a rate for a method, country, currency, and optional carrier |
update_shipping_rate | PATCH | shipping_confirm | Update a rate's price, method, country, currency, carrier, or active flags |
delete_shipping_rate | DELETE | shipping_confirm | Delete a shipping rate |
Approval tiers
Every action that changes data (all non-GET actions above) lives on one of the group's
two write tools, and only there:
_confirmtools carry_meta["anthropic/requiresUserInteraction"]: true. Claude Code documents that this flag shows you the exact call before every invocation, even when an allow rule or permission mode would otherwise skip the prompt; indontAskmode the call is denied (Claude Code MCP docs, "Require approval for a specific tool"). The AI has no parameter that can approve a call on your behalf._writetools carry no such flag. Whether Claude Code asks before a_writecall depends on your permission rules: with an allow rule for the server, it runs without a prompt.
Both write tools are annotated destructiveHint: true; read tools are annotated readOnlyHint.
An action called on the wrong tool is refused before any API request, and the reply names the right tool:
# A delete on the read or _write tool is refused — no API request is made
catalog_write({ action: "delete_product", params: { productId: "..." } })
→ 'Action "delete_product" is not available on tool "catalog_write". Call it through the "catalog_confirm" tool instead.'
# The same delete on the _confirm tool runs after you approve the prompt
catalog_confirm({ action: "delete_product", params: { productId: "..." } })
→ { success: true }Letting _write calls run without a prompt in Claude Code
Allow the server's tools in your Claude Code settings. The rule names one server; the server part of the rule cannot contain a wildcard, so add one rule per configured server (Claude Code permissions):
{
"permissions": {
"allow": ["mcp__vantemo__*"]
}
}mcp__vantemo__* matches every tool of the server named vantemo — read, _write and
_confirm alike — yet _confirm calls still ask, because their flag overrides allow rules.
Only Claude Code's handling of the flag is documented. Other clients (Claude Desktop,
claude.ai, ChatGPT, Cursor) may treat it differently: configure them to ask before every
call to a *_confirm tool, and before *_write calls too if you want to see those first.
Responses are marked as data
API responses can contain text written by customers or anonymous visitors (reviews,
testimonials, names, order details). Every API response and API error body is wrapped in an
<untrusted_content_…> block with a random tag that changes on every call, preceded
by a note telling the AI that the block is data, never instructions.
Next Steps
- MCP Server Overview — Architecture and setup
- MCP Setup — Client-specific configuration