Sapo

93 tools. 29 can modify or destroy data without limits.

1 destructive tool with no built-in limits. Policy required.

Last updated:

29 can modify or destroy data
64 read-only
93 tools total

Community server · catalogue entry verified 12/06/2026

How to control Sapo ↓

What Sapo exposes to your agents

Read (64) Write / Execute (28) Destructive / Financial (1)
Critical Risk

The most dangerous Sapo tools

29 of Sapo's 93 tools can modify, destroy, or commit something on every call — and an agent calls them with no built-in limits.

How to control Sapo

PolicyLayer is an MCP gateway — it sits between your AI agents and Sapo, and nothing reaches the server without passing your rules. These are the rules we recommend:

Block financial tools by default
{
  "create_order_transaction": {
    "deny_if": [
      {
        "conditions": [],
        "on_deny": "Requires human approval."
      }
    ]
  }
}

Financial tools should be explicitly enabled per use case, not open by default.

Rate limit write operations
{
  "adjust_inventory_level": {
    "limits": [
      {
        "counter": "adjust_inventory_level_per_hour",
        "window": "hour",
        "max": 30,
        "scope": "grant"
      }
    ]
  }
}

Prevents bulk unintended modifications from agents caught in loops.

Cap read operations
{
  "count_customers": {
    "limits": [
      {
        "counter": "count_customers_per_minute",
        "window": "minute",
        "max": 60,
        "scope": "grant"
      }
    ]
  }
}

Controls API costs and prevents retry loops from exhausting upstream rate limits.

  1. Create a free account and register Sapo — nothing to install.
  2. Add these rules — paste them, or build them visually. Tune the limits to your setup.
  3. Point your MCP client (Claude, Cursor, anything) at your gateway URL.
ENFORCE POLICY ON SAPO →

Free to start. No card required.

All 93 Sapo tools

WRITE 26 tools
Write adjust_inventory_level Adjust inventory level by a relative delta (positive = receive stock, negative = remove stock). For inventory Write add_customer_address Add a new address to a customer. Required: address1, city, country. Write complete_draft_order Complete a draft order and convert it into a real order. Side effect: creates an Order from the draft; draft s Write connect_inventory_level Connect an inventory item to a location (enable tracking at that location). For store owners — run once per it Write create_article Create a new article within a blog. For SEO/content team: provide title, HTML body, Write create_blog Create a new blog. For SEO/content team: set title, handle (URL slug), Write create_collect Add a product to a custom collection by creating a collect mapping. Write create_custom_collection Create a new custom (manual) collection. For SEO/content team: set title, body_html, Write create_customer Create a new customer. Must provide either email OR phone (or both). Write create_discount_code Create a discount code for a price rule. Side effect: creates a DiscountCode that customers can apply at check Write create_draft_order Create a new draft order. Side effect: creates a DraftOrder in Write create_fulfillment Create a fulfillment for an order, optionally specifying line items and tracking info. Side effect: creates a Write create_price_rule Create a new price rule (discount rule). Side effect: creates a PriceRule record. value must be a STRING (e.g. Write set_default_customer_address Set a customer Write update_article Update an existing article. For SEO/content team: update title, body, SEO fields, Write update_blog Update a blog. For SEO/content team: rename, change handle/slug, or adjust comment policy. Write update_custom_collection Update a custom collection. For SEO/content team: update title, body_html, Write update_customer Update an existing customer. Only provided fields are modified. Write update_customer_address Update an existing customer address. Only provided fields are modified. Write update_draft_order Update a draft order in Write update_fulfillment_tracking Update tracking information for an existing fulfillment. Side effect: modifies the Fulfillment tracking_compan Write update_order Update an existing order via PUT /admin/orders/{id}.json. Supports: tags, note, Write update_page_seo SEO-only update for a storefront page. For SEO/content team: update meta_title, Write update_price_rule Update an existing price rule. Side effect: modifies the price rule. Only provided fields are updated. value m Write update_product_seo SEO-only update for a product: set meta_title, meta_description, URL slug, and tags. Write update_variant Update a product variant (price, compare_at_price, SKU, barcode, weight). For store owners / inventory manager
READ 64 tools
Read count_customers Count total customers in the store, optionally filtered by creation date. Read count_orders Count total orders, optionally filtered by status, financial_status, or date range. Returns { count: N }. Read count_products Count total products in the store, optionally filtered by status, vendor, or product_type. Read customer_ltv Lifetime value for a single customer: total revenue, order count, first/last order date. Read discount_usage_report Discount code usage within a date range: per-code order count, total discount amount, total revenue. Filter by Read get_article Get a single article by ID within a blog. Returns full HTML body, SEO fields, Read get_blog Get a single blog by ID, including its handle, commentable setting, and tag metadata. Read get_custom_collection Get a single custom collection by ID, including its body_html, sort_order, image, and SEO fields. Read get_customer Get a single customer by ID, including their address list and order count. Read get_draft_order Get a single draft order by ID. Returns full draft order including line_items, customer, address, and applied Read get_fulfillment Get a single fulfillment by ID. Returns full fulfillment with tracking info, line_items, and origin address. Read get_inventory_levels Get inventory levels (available + committed quantities) for specific variants at specific locations. Filter by Read get_location [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] Get a single location by ID. Returns address, Read get_order Get a single order by ID. Returns full order including line_items, fulfillments, customer, billing/shipping ad Read get_page Get a single storefront page by ID, including its body_html, SEO meta fields, Read get_pos_order Get a single POS order by ID. For cashiers — view full details of an in-store transaction including line items Read get_pos_shift [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] Get a single POS shift by ID. Returns opening/ Read get_price_rule Get a single price rule by ID. Returns full price rule including value_type, value (string), entitled/prerequi Read get_product Get a single product by ID, including its variants, options, and images. Read get_refund Get a single refund by ID. Returns full refund record. Read get_smart_collection Get a single smart collection by ID, including its matching rules and SEO fields. Read get_stock_transfer [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] Get a single stock transfer by ID. Returns sou Read get_store_info Get Sapo store information: name, domain, address, currency, timezone, owner. Read get_supplier [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] Get a single supplier by ID. Returns contact d Read get_variant Get a single product variant by ID. Returns price (VND, float with 4 decimals), SKU, barcode, inventory quanti Read inventory_low_stock Inventory levels with available stock below a threshold, sorted ascending. Read inventory_value Total inventory value (Σ available × variant.price) optionally scoped to a location. Variants without price da Read list_articles List articles within a specific blog. For SEO/content team: browse articles to review Read list_blogs List all blogs in the store. For SEO/content team: browse blogs to manage article Read list_collects List product-to-collection mappings (collects). Read list_custom_collections List custom (manual) collections. For SEO/content team: use to browse collections Read list_customer_addresses List all saved addresses for a customer, including default address flag and Vietnamese province/district/ward Read list_customer_orders List all orders placed by a specific customer. Returns paginated results via since_id cursor. Read list_customers List customers with optional filters. Returns paginated results via since_id cursor. If has_more=true, call ag Read list_discount_codes List discount codes for a specific price rule. Returns paginated results via since_id cursor. Must provide pri Read list_districts List districts (Quận/Huyện) within a province. Only meaningful for level=3 Read list_draft_orders List draft orders with optional filters. Returns paginated results via since_id cursor. Filter by status. If h Read list_fulfillments_for_order List all fulfillments for a specific order. Returns fulfillment records with tracking info, line_items, and de Read list_locations [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] List all store locations (warehouses, retail c Read list_order_transactions List all transactions for a specific order. Returns payment attempts, captures, refunds, and voids linked to t Read list_orders List orders with optional filters. Returns paginated results via since_id cursor. Filter by status, financial_ Read list_pages List all storefront pages. For SEO/content team: browse pages to audit SEO metadata, Read list_payment_methods [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] List all configured payment methods for the st Read list_pos_orders List orders created at the POS counter (source_name=pos). For cashiers — review in-store sales. Returns pagina Read list_pos_shifts [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] List POS shifts (cash drawer sessions). For st Read list_price_rules List price rules (discount rules) with optional filters. Returns paginated results via since_id cursor. Filter Read list_products List products with optional filters (status, vendor, product_type). Returns paginated results via since_id cur Read list_provinces List Vietnamese provinces. Default (omit level) = level=3 = pre-2025 63 tỉnh, 3-tier. Read list_refunds List refunds for a specific order. Returns full refund records with associated transactions, refund line items Read list_script_tags List all script tags injected into the storefront. For SEO/content team: Read list_smart_collections List smart (rule-based) collections. For SEO/content team: view auto-generated collections Read list_stock_transfers [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] List stock transfers between locations. For in Read list_suppliers [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] List suppliers. For inventory managers and sto Read list_variants_for_product List all variants for a product (SKUs, prices in VND, inventory quantities). Returns paginated results via sin Read list_wards List wards (Phường/Xã). For level=3 (default, 3-tier) pass district_code obtained from Read online_vs_counter_breakdown Compare physical POS counter sales vs online sales within a date range. Counter = source_name in { Read revenue_summary Aggregate order revenue grouped by day/week/month within a date range. Returns groups with total_revenue (VND) Read search_customers Search customers by query string (matches email, phone, name). Returns paginated list. Read search_orders Search orders by name (order ), customer email, or customer phone. Uses filter params on the orders list endpo Read search_products Search products by title substring. Uses the title filter on the list endpoint. Returns paginated results. Read shift_report [UNDOCUMENTED endpoint, verified 2026-04-30, schema may change] Shift summary: orders count, total revenue, br Read tax_summary Tax totals over a date range, broken down by tax rate. Read top_customers Top customers ranked by total revenue or order count within a date range. Guests grouped by email/phone. Read top_products Top selling products by revenue or quantity within a date range, walking line_items across all matching orders

Related servers

Other MCP servers with similar tools — same risk classification, starter policies for each.

Questions about Sapo

Can an AI agent move money through the Sapo MCP server? +

Yes. The Sapo server exposes 1 financial tools including create_order_transaction. Without a policy, an autonomous agent can call these with no spend caps, no rate limits, and no approval flow. PolicyLayer lets you block financial tools by default, require human approval, or set per-tool rate limits — enforced on every call.

How do I prevent bulk modifications through Sapo? +

The Sapo server has 26 write tools including adjust_inventory_level, add_customer_address, complete_draft_order. Set a rate limit in your policy -- for example, 10 calls per hour prevents an agent from making more than 10 modifications per hour. PolicyLayer enforces this at the gateway, before calls reach Sapo.

How many tools does the Sapo MCP server expose? +

93 tools across 3 categories: Destructive, Read, Write. 64 are read-only. 29 can modify, create, or delete data.

How do I enforce a policy on Sapo? +

Register the Sapo MCP server in PolicyLayer, apply the suggested rules above (adjust the limits to your use case), and point your AI client at the PolicyLayer proxy URL instead of the server directly. Your agents keep the same tools; PolicyLayer evaluates every call against policy before it executes. Nothing to install, live in minutes.

Enforce policy on every Sapo tool call.

Deterministic rules across all 93 Sapo tools. Per-identity grants. Full audit log. Live in minutes. Nothing to install.

Free to start. No card required.

93 Sapo tools catalogued and risk-classified — across an index of 43,000+ MCP servers.

// GET IN TOUCH

Have a question or want to learn more? Send us a message.

Message sent.

We'll get back to you soon.