SHOPIS · Developers · MCP

עברית

Manage your store from any AI chat

Connect Shopis to Claude, ChatGPT, Cursor or any MCP client. The AI app uses the same tools and the same reviewed change contract as the built-in Shopis assistant: it reads real store data, prepares a change, you confirm, and only then is it applied.

Connect

MCP server URL

https://shopis.ai/api/mcp

Reading and changing store data through the connection costs 0 credits, the model runs on your AI account. Only design and theme builds that run on Shopis use AI credits. Calls are rate limited per plan.

Claude (claude.ai, desktop, mobile)

  1. Settings → Connectors → "Add custom connector".
  2. Name: Shopis. URL: the MCP URL above. Save, then Connect.
  3. In the window that opens: sign in to Shopis, pick the store and permissions, and approve.
  4. Recommended: upload the Skill file (Settings → Capabilities → Skills) so Claude follows the Shopis workflow.

Claude Code

  1. Run the command in your terminal, then use /mcp to sign in through the browser.
claude mcp add --transport http shopis https://shopis.ai/api/mcp

ChatGPT

  1. Settings → Apps & Connectors → Advanced settings → turn on Developer mode.
  2. Create → Name: Shopis, MCP server URL: the URL above, Authentication: OAuth → Create.
  3. Approve the connection in the Shopis window, then add Shopis to a chat from the tools menu.

Cursor

  1. Settings → MCP → Add new MCP server, or add to ~/.cursor/mcp.json:
  2. Click Connect / Login and approve in the Shopis window.
{
  "mcpServers": {
    "shopis": {
      "url": "https://shopis.ai/api/mcp"
    }
  }
}

Shopis Skill (teaches the model the Shopis workflow): shopis.zip · SKILL.md

How changes work

  1. Read tools such as check_store, find_products, find_orders and sales_report read real data (free, read-only).
  2. Each kind of change has its own propose_* tool (for example propose_update_variant or propose_save_discount). It validates the change and returns a review summary, proposalId and version. Nothing changes in the store.
  3. The AI shows you the summary; apply_change runs only after you confirm, and re-checks permissions and that data did not change.

Every applied change is recorded in Store activity as “<your name> via <AI app>”. Connected apps are listed in Settings → AI apps, where you can disconnect them at any time.

Tools

Every operation is its own tool with its own input schema and annotations. The list below is exactly what tools/list returns for a connection with all permissions; a connection only sees the tools its permissions allow.

Read (read-only, free)

  • check_store (store:read · read-only) - Read the store snapshot: readiness, store name and contact, currency, shipping settings, menus, pages, collections, themes, markets, low stock and the suggested next step. Call it first in every conversation. Read only, free (0 AI credits).
  • search_operations (store:read · read-only) - Search current products, orders and customers with the same query service as the admin search (up to 20 results per resource, with hasMore). Returns exact IDs to use with the other tools. Read only, free (0 AI credits).
  • find_products (store:read · read-only) - Find up to 20 products with exact IDs, status, vendor, product type, tags, prices (integer hundredths of the store currency), images and up to 5 preview variants each. Use get_product_variants for the complete variant list. Read only, free (0 AI credits).
  • get_product_variants (store:read · read-only) - Read a page of up to 100 variants of one product with exact variant IDs, options, prices, compare-at prices, unit cost, SKU, barcode, weight and stock. Read it before propose_update_variant. Unit cost is merchant-only; never show it to buyers. Read only, free (0 AI credits).
  • get_product_gallery (store:read · read-only) - Read one product's ordered photos, videos and 3D models, their alt text and which photo each variant shows. Read only, free (0 AI credits).
  • get_collection_content (store:read · read-only) - Read one collection: title, description, handle, manual products or automatic rules, SEO, template and translations. Read it before propose_collection_membership or propose_update_seo. Collection IDs come from check_store or list_template_resources. Read only, free (0 AI credits).
  • get_inventory_locations (store:read · read-only) - Read inventory locations with IDs and versions and, for one variant, its available stock per location and active checkout holds. Read only, free (0 AI credits).
  • find_orders (store:read · read-only) - Find up to 20 orders by order number or customer email with exact IDs, totals and currency, payment status, fulfillment status, line items, note, traffic source and delivery address. Never charges or refunds anything. Read only, free (0 AI credits).
  • get_order_activity (store:read · read-only) - Read the latest 50 recorded events of one order (status changes, fulfillments, payments, edits) with who made them. Use nextBeforeId to read older events. Read only, free (0 AI credits).
  • get_order_refunds (store:read · read-only) - Read one order's refunds, transactions and refundable amounts per line, shipping and duty. Pass lines (and optional shippingCents/dutyCents) to get the exact suggested refund and tender split to use in propose_refund_order. Calculating moves no money. Read only, free (0 AI credits).
  • find_customers (store:read · read-only) - Find customers by name, email or tag with exact IDs, tags, order count and total spent. Read before propose_customer_tags or personal discounts. Never authenticates a buyer or grants marketing consent. Read only, free (0 AI credits).
  • get_customer_segments (store:read · read-only) - Read the saved dynamic customer segments, their rules, the store currency and the definitions version needed by propose_save_customer_segment. Read only, free (0 AI credits).
  • query_customer_segment (store:read · read-only) - Preview which customers match segment rules (tags, order count, total spend) without saving anything. Spend is gross recorded totals in the store currency. Read only, free (0 AI credits).
  • list_discounts (store:read · read-only) - Read existing discount codes and automatic discounts with IDs, rules, status, dates and usage. Read before proposing a new code to avoid duplicates. Read only, free (0 AI credits).
  • get_discount_capabilities (store:read · read-only) - Read which discount types, conditions and combinations Shopis supports. Read before propose_save_discount; a requested condition that is not supported must be reported to the merchant, never dropped. Read only, free (0 AI credits).
  • preview_discount (store:read · read-only) - Simulate a discount definition on sample cart lines with real catalog prices and current rules, and return the resulting discount per line. Creates no discount, order or usage. Read only, free (0 AI credits).
  • get_gift_cards (store:read · read-only) - Read gift cards (masked codes only, balances in hundredths of the store currency, expiry, status) or one card with its ledger. Full codes are never returned. Read only, free (0 AI credits).
  • read_page (store:read · read-only) - Read one content page (title, handle, body, SEO). Page IDs come from check_store. Read before propose_save_page. Read only, free (0 AI credits).
  • get_articles (store:read · read-only) - List blog articles (drafts and published) with IDs, versions, blog IDs and status. Read only, free (0 AI credits).
  • get_article_context (store:read · read-only) - Read one article with its body, publication state, version and parent blog. Read before propose_save_article or propose_delete_article. Read only, free (0 AI credits).
  • list_url_redirects (store:read · read-only) - Read URL redirects with IDs and versions, searchable by path or target. Redirects only apply to pages that do not exist. Read only, free (0 AI credits).
  • list_template_resources (store:read · read-only) - List up to 50 products, collections or pages with exact IDs, handles and their theme template, plus the available template names. Use it to find collection and page IDs for SEO, navigation and membership changes. Read only, free (0 AI credits).
  • get_delivery_settings (store:read · read-only) - Read shipping and delivery methods: standard rate, named rates by zone with price or weight conditions, local pickup, local delivery, carrier-calculated services, shipping profiles and the settings version used by the propose_* delivery tools. Money is in hundredths of the store currency. Read only, free (0 AI credits).
  • get_international_settings (store:read · read-only) - Read the base currency, country markets, languages, per-country shipping rates and the markets fingerprint used by propose_save_market, plus supported countries and currencies. Read only, free (0 AI credits).
  • get_tax_fx_settings (store:read · read-only) - Read tax and currency automation per country (automatic or manual tax, regional rates, exchange rates, price rounding) and product or collection tax overrides, with the version used by the propose_* tax tools. Rates are parts per million (17% = 170000). Read only, free (0 AI credits).
  • get_payment_providers (store:read · read-only) - Read the store's payment providers (name, label, active, test mode, checkout order) and the available providers. Configuration values, credentials and tokens are never returned. Read only, free (0 AI credits).
  • sales_report (store:read · read-only) - Read actual sales, orders, average order value, traffic and conversion for the last 1, 7, 30 or 90 days, compared with the previous equal period. Unpaid cash-on-delivery orders are included in order totals. Read only, free (0 AI credits).
  • run_report_query (store:read · read-only) - Run one report on actual store data with the same engine as saved reports: a metric (for example net_sales, orders, sessions, conversion) grouped by day, week, month, product, collection, traffic source, discount code or shipping country. Money values are integer hundredths of the base currency. Unsupported metrics fail with a reason. Read only, free (0 AI credits).
  • get_report_capabilities (store:read · read-only) - Read every supported report metric with its unit and allowed groupings, plus metrics Shopis does not record (with reasons). Read before run_report_query when unsure. Read only, free (0 AI credits).
  • list_theme_builds (store:read · read-only) - Read the progress and results of this person's design and theme builds in the store (running, ready as an unpublished draft, failed). Read only, free (0 AI credits).
  • get_store_policies (store:read · read-only) - Read the store's privacy, refund, shipping and terms policies, their translations and the version used by propose_update_store_policies. Never invent legal terms. Read only, free (0 AI credits).

Propose a change (creates a pending proposal, nothing changes)

  • propose_create_product (store:write) - Prepare new products (title, description, options, variants with prices in integer hundredths of the store currency, stock). New products are created as drafts. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_product (store:write) - Prepare edits to existing products: title, description, status (draft, active, archived), vendor, product type, tags, category or swatches. Omitted fields keep their current values. Read find_products first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_variant (store:write) - Prepare edits to existing variants: price, compare-at price, unit cost, SKU, barcode, stock, inventory tracking or weight. Omitted fields keep their current values. Read get_product_variants first for exact variant IDs and current values. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_delete_product (store:write · destructive) - Prepare the permanent deletion of products. Archiving with propose_update_product (status archived) is the reversible alternative; offer it first. Read find_products first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_seo (store:write) - Prepare SEO title and meta description changes for products, collections or pages. Read the current values first (find_products, get_collection_content, read_page). It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_create_collection (store:write) - Prepare a new manual collection (chosen products) or automatic collection (rules such as tag, vendor, price or product type). Show every rule in the summary. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_collection_membership (store:write) - Prepare a replacement of an existing collection's products (manual) or rules (automatic). This replaces the full membership, so start from get_collection_content. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_order_note (store:write) - Prepare a replacement of an order's internal note. The note is never sent to the customer. Read find_orders first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_fulfill_order (store:write) - Prepare marking all remaining items of an order as fulfilled. Use propose_fulfill_order_items for partial shipments or tracking numbers. Read find_orders first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_fulfill_order_items (store:write) - Prepare a partial or full shipment of chosen order lines with optional carrier and tracking number. Needs a new operationId UUID. Read find_orders and get_order_activity first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_tracking (store:write) - Prepare changing the carrier or tracking number of an existing shipment. Read get_order_activity first for the fulfillment ID. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_record_return (store:write) - Prepare recording returned items as received (and whether to restock them). Needs a new operationId UUID. Refunds are separate (propose_refund_order). Read get_order_activity first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_cancel_fulfillment (store:write · destructive) - Prepare cancelling an existing shipment so its items return to unfulfilled. Read get_order_activity first for the fulfillment ID. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_relocate_fulfillment (store:write) - Prepare moving the unfulfilled items of an order to another inventory location. Read get_order_activity and get_inventory_locations first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_cancel_order (store:write) - Prepare cancelling an order. Cancelling restores stock and does not refund payment (use propose_refund_order for that). Read find_orders first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_mark_order_paid (store:write) - Prepare recording that an order was paid outside Shopis (for example cash on delivery). Only when the merchant says the payment was received; it never charges a card. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_refund_order (store:write) - Prepare a refund for an order: lines, shipping, duty and how much goes back to each payment. Calculate first with get_order_refunds and use its suggested amounts and tenders. Applying a refund to an online payment asks the payment provider to return the money. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_settle_exchange (store:write) - Prepare recording that the price difference of an approved exchange was collected from the customer. Read get_order_refunds first for the request and the expected difference. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_refund_replacement_return (store:write) - Prepare refunding a received return of replacement items. Read get_order_refunds first for the request, receipt and amount. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_create_customer (store:write) - Prepare a customer record from a name and email the merchant supplied. Search find_customers for the email first. It sends no email and grants no marketing consent. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_customer_tags (store:write) - Prepare a replacement of a customer's tags (the complete list). Read find_customers first and keep existing tags unless asked to remove them. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_customer_segment (store:write) - Prepare creating or editing a dynamic customer segment (tags, order count, total spend). Read get_customer_segments for the version and currency, and preview with query_customer_segment. No email is sent. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_delete_customer_segment (store:write · destructive) - Prepare deleting a customer segment. Customers themselves are not changed. Read get_customer_segments first for the ID and version. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_discount (store:write) - Prepare a new discount code or automatic discount, or an edit of an existing one (pass id): percentage, fixed amount, free shipping, buy X get Y, tiers, minimum subtotal, eligible products or customers, dates and usage limits. Discounts are validated rules, never final prices. Keep every condition the merchant asked for; if one is not supported (see get_discount_capabilities) say so instead of dropping it. Preview with preview_discount. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_discount_status (store:write) - Prepare activating or deactivating existing discounts. Read list_discounts first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_delete_discount (store:write · destructive) - Prepare the permanent deletion of discounts. Deactivating is the reversible alternative. Read list_discounts first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_issue_gift_card (store:write) - Prepare issuing a new gift card with an initial balance (and optional expiry, customer and note). The code is generated and revealed once to the merchant in the Shopis admin, never in chat. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_adjust_gift_card_balance (store:write) - Prepare adding to or subtracting from an existing gift card balance. Read get_gift_cards first for the card ID and version. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_set_gift_card_expiry (store:write) - Prepare setting or removing the expiry date of an existing gift card. Read get_gift_cards first for the card ID and version. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_disable_gift_card (store:write) - Prepare disabling an existing gift card so it can no longer be redeemed. Read get_gift_cards first for the card ID and version. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_page (store:write) - Prepare a new content page or an edit of an existing one (pass id): title, URL handle and plain text body. Read read_page first when editing. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_article (store:write) - Prepare creating, editing, scheduling or publishing a blog article (version 0 and no id to create). Read get_articles and get_article_context first. Say exactly when it becomes public. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_delete_article (store:write · destructive) - Prepare deleting a blog article and its comments. Read get_articles first for the ID and version. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_navigation (store:write) - Prepare a replacement of the main menu or footer menu links (nested up to three levels, linking to products, collections, pages, blogs or URLs). Keep existing links unless the merchant asked to change them. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_url_redirect (store:write) - Prepare a new URL redirect or an edit of an existing one. Redirects only apply to paths that no longer exist. Read list_url_redirects first when editing. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_delete_url_redirect (store:write · destructive) - Prepare deleting URL redirects. Read list_url_redirects first for IDs and versions. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_default_shipping_method (store:write) - Prepare a change to the store's default shipping method: turn it on or off and edit the name and description buyers see at checkout. Its price is not changed here (use propose_save_shipping_rate for priced rates). Read get_delivery_settings first and send its version. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_shipping_rate (store:write) - Prepare creating or editing a named shipping rate for a zone, with price or weight conditions. Read get_delivery_settings first and send its version; never invent rates, postal codes or addresses. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_delete_shipping_rate (store:write · destructive) - Prepare deleting a named shipping rate. Read get_delivery_settings first and send its version; never invent rates, postal codes or addresses. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_pickup_location (store:write) - Prepare enabling or editing local pickup at an inventory location (instructions, ready time). Read get_delivery_settings first and send its version; never invent rates, postal codes or addresses. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_delete_pickup_location (store:write · destructive) - Prepare turning off local pickup at a location. Read get_delivery_settings first and send its version; never invent rates, postal codes or addresses. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_local_delivery (store:write) - Prepare enabling or editing local delivery from a location (postal codes or radius, price, minimum order). Read get_delivery_settings first and send its version; never invent rates, postal codes or addresses. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_delete_local_delivery (store:write · destructive) - Prepare turning off local delivery from a location. Read get_delivery_settings first and send its version; never invent rates, postal codes or addresses. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_store_settings (store:write) - Prepare store settings changes: store name, contact email, time zone, flat shipping rate, free shipping threshold, per-country rates and shipping profiles. Read check_store first; omitted fields keep their current values. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_set_country_tax (store:write) - Prepare one country configuration: tax mode, regional rates, exchange rate mode and price rounding (send the full configuration). Read get_tax_fx_settings first and send the version. Never compute prices or tax amounts yourself. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_remove_country_tax (store:write · destructive) - Prepare removing a country tax and currency configuration so the store defaults apply. Read get_tax_fx_settings first and send the version. Never compute prices or tax amounts yourself. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_set_tax_override (store:write) - Prepare a tax rate override for a product or collection in a country or region. Read get_tax_fx_settings first and send the version. Never compute prices or tax amounts yourself. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_remove_tax_override (store:write · destructive) - Prepare removing a product or collection tax override. Read get_tax_fx_settings first and send the version. Never compute prices or tax amounts yourself. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_save_market (store:write) - Prepare creating or editing one country market (countries, languages, default locale, active, primary). Read get_international_settings first and send its markets fingerprint. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_deactivate_payment_provider (store:write) - Prepare removing a payment provider from checkout. Read get_payment_providers first for the provider and version. Activating a provider or entering credentials is only possible in the Shopis admin; never ask for API keys or card details. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_reorder_payment_providers (store:write) - Prepare the order in which active payment providers appear at checkout. Read get_payment_providers first for the providers and version. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_payment_provider (store:write) - Prepare renaming a payment provider's checkout label or switching its test mode. Credentials are never changed here; they are entered only in the Shopis admin. Read get_payment_providers first. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_update_store_policies (store:write) - Prepare new text for the store policies (privacy, refund, shipping, terms, contact) using only text the merchant supplied. Read get_store_policies first. Never invent legal terms. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.
  • propose_publish_theme (store:write) - Prepare publishing an unpublished theme draft (for example one created by design_page) so customers see it. Read check_store for theme IDs. It creates a pending proposal in Shopis (visible to the merchant in the admin) and returns proposalId, version and the server review summary. Nothing in the store changes until apply_change is called after the merchant explicitly confirms that summary in this chat.

Confirm and apply

  • list_pending_changes (store:read · read-only) - List proposals prepared through this connection that still wait for the merchant's confirmation, with proposalId, version, kinds and review summary. Read only, free (0 AI credits).
  • apply_change (store:write · destructive · public effects) - Apply one pending proposal to the live store ONLY after the merchant explicitly confirmed its review summary in this conversation. This changes real store data and can change what customers see on the public storefront (prices, products, discounts, pages, menus, theme), update orders, or ask a payment provider to refund. Re-checks the person's permissions and that nothing changed since the review; applying the same proposal again returns the earlier result. Recorded in Store activity as the merchant via this AI app.
  • discard_change (store:write · destructive) - Permanently dismiss a pending proposal the merchant declined, so it no longer waits for confirmation in Shopis. A discarded proposal cannot be restored; prepare it again if needed. The store data itself is not changed.

Design (AI on Shopis, uses credits)

  • design_page (ai:build) - Main design tool. Designs a new or restyled homepage, collection page or landing page in about a minute from the Shopis section library (style, real store images, copy in the store language) and saves it as a separate unpublished draft theme; it never publishes. Runs AI on Shopis and is charged to the store's AI credits by actual model cost (a few credits); fails with a clear message when credits run out. Publish later with propose_publish_theme after the merchant approves the draft.
  • prepare_design (ai:build) - Runs the Shopis design model to prepare a focused theme edit (colors, fonts, text, one section or setting) as a previewable pending proposal. Charged to the store's AI credits. Nothing changes until apply_change after the merchant confirms. For a new page or a full redesign use design_page.
  • build_theme (ai:build) - Queues a background theme build on Shopis (a complete new design, or converting React, HTML or Figma exports into a theme). Creates a separate unpublished draft theme and never publishes. Requires at least 100 AI credits to start and is charged by actual model cost; ask the merchant before starting. Follow progress with list_theme_builds.

Other operations (bundles, custom fields, B2B companies, translations, team, domains, API credentials and webhooks) are done in the Shopis admin or with the built-in Shopis assistant.

Authorization

OAuth 2.1 authorization code with PKCE (S256), dynamic client registration (RFC 7591) and resource indicators (RFC 8707). Access tokens last 60 minutes; refresh tokens rotate on every use and expire after 30 idle days. A reused refresh token revokes the connection.

  • store:read -Read store data (products, orders, customers, reports) within your staff permissions
  • store:write -Prepare changes and apply them after confirmation, the same reviewed change contract as the built-in assistant
  • ai:build -Run design and theme builds on Shopis (charged to the store's AI credits)

Who can connect: the store owner and admins. Other staff only when the owner or an admin turns on “Allow staff to connect AI apps” in Settings → AI apps (off by default). If it is turned off again, or a person is demoted, their existing connections get 403 on the next call and resume if access is given back.

A connection belongs to one person in one store and can never do more than that person can do in the Shopis admin. Secrets, API credentials and payment details never pass through MCP.

GET https://shopis.ai/.well-known/oauth-protected-resource/api/mcp
GET https://shopis.ai/.well-known/oauth-authorization-server
POST https://shopis.ai/api/mcp/oauth/register     (RFC 7591)
GET  https://shopis.ai/api/mcp/oauth/authorize    (code + PKCE S256)
POST https://shopis.ai/api/mcp/oauth/token        (authorization_code | refresh_token)
POST https://shopis.ai/api/mcp/oauth/revoke       (RFC 7009)
POST https://shopis.ai/api/mcp                 (Streamable HTTP, JSON responses, protocol 2025-11-25 / 2025-06-18 / 2025-03-26)

Billing and limits

When the model runs in your own AI account, Shopis tool calls are free. Only tools that run AI on Shopis (design_page, prepare_design, build_theme) use the store’s AI credits, exactly like the built-in assistant. Calls per store per minute by plan:

PlanTool calls / store / minute
none60
basic120
grow240
advanced480
plus1000

Every tools/call counts, reads and writes alike; the limit is shared by all AI apps connected to the store. When it is reached the tool returns an error with the seconds until the next minute.

Shopis skill

The Shopis skill (Agent Skills format, also as shopis.zip) teaches the model the discover → read → propose → confirm → apply workflow, money and discount rules, the no-secrets rule and Hebrew/RTL stores.

MCP 2025-11-25

Shopis MCP server: connect Claude, ChatGPT and Cursor | SHOPIS · SHOPIS