All field notes
AI & Automation

MCP Servers for Commerce Operations, Not Demos

What it actually takes to let an AI agent answer "where is order 88214?" against your real systems — and the guardrails that make it safe.

360 Expert Solutions3 min read

Most commerce AI demos are a chat box over a product catalogue. The useful version connects an agent to the systems your operations team already uses, through a typed tool interface with real permissions. That is what MCP is for.

The AI demo everyone has seen is a chat widget that recommends products. It is easy to build, it impresses in a meeting, and it changes almost nothing operationally — because product discovery was rarely the bottleneck.

The bottleneck is the queue of questions your operations team answers by hand every day. Where is this order. Why was this line short-shipped. What is this account’s available credit. When is the Henderson range back in stock. Each requires looking across the storefront, the ERP and the carrier — which is exactly the kind of multi-system lookup an agent is good at, provided it can reach those systems safely.

What MCP actually gives you

The Model Context Protocol is a standard way to expose tools and data to an AI model. Rather than embedding system access inside a bespoke prompt, you publish a server that declares typed tools — each with a schema, a description and an implementation — and the model calls them.

The advantage is architectural rather than intellectual. Your integration is a normal service with types, tests, logging and access control. It is reviewable. It can be denied permissions. And the same server works with any MCP-capable client, so you are not rebuilding the integration per assistant.

Architecture for an MCP server over commerce operations. An operations user or a customer service agent interfaces with an MCP-capable client. The client calls a typed tool on the MCP server. The server enforces an authorisation layer scoped to the caller, applies rate limits, and calls downstream systems: the Shopify Admin API for orders, NetSuite for inventory and credit, and the carrier API for tracking. Every call is written to an audit log. Write operations are separated behind an explicit approval step.

The permission layer sits inside your server, not inside the prompt. Prompts are not a security boundary.

Design tools around questions, not endpoints

The most common mistake is mirroring your REST API as tools — getOrder, getCustomer, getInventoryItem — and expecting the model to compose them. It can, but it takes several round trips and each one is a chance to go wrong.

Design tools around the questions people actually ask. One tool that answers "what is the status of this order, including fulfilment and tracking" is better than four that must be chained to get there.

typescript
server.tool(
  'get_order_status',
  {
    description:
      'Full status for a single order: line items, fulfilment state, ' +
      'tracking numbers, and any short-shipped lines with the reason. ' +
      'Use this for any "where is my order" question. Read-only.',
    inputSchema: {
      type: 'object',
      properties: {
        orderNumber: { type: 'string', description: 'Order number, e.g. "88214"' },
        accountId:   { type: 'string', description: 'Company account id — scopes the lookup' }
      },
      required: ['orderNumber', 'accountId']
    }
  },
  async ({ orderNumber, accountId }, { caller }) => {
    // Authorisation happens here, in code — never in the prompt.
    await assertCanReadAccount(caller, accountId);

    const [order, fulfilments, erpLines] = await Promise.all([
      shopify.order(orderNumber, accountId),
      shopify.fulfilments(orderNumber),
      netsuite.salesOrderLines(orderNumber)
    ]);

    if (!order) {
      return { content: [{ type: 'text', text: `No order ${orderNumber} on this account.` }] };
    }

    audit.record({ caller, tool: 'get_order_status', orderNumber, accountId });

    return {
      content: [{
        type: 'text',
        text: formatOrderStatus({ order, fulfilments, erpLines })
      }]
    };
  }
);
A task-shaped tool. The description is part of the interface — the model reads it to decide when to call.

Separate reads from writes, permanently

Read tools are low-risk and where nearly all the value is in the first phase. Write tools — cancel an order, issue a refund, adjust stock, release a credit hold — change state in systems that feed your accounts.

Keep them on separate servers with separate credentials, and put every write behind an explicit human approval that shows exactly what is about to happen. An agent that drafts a refund for a human to approve is genuinely useful and entirely safe. An agent that issues refunds autonomously is a liability nobody asked you to accept.

Four operational results from a read-only MCP deployment over commerce and ERP systems. Order status questions resolved without a human: about 70 percent. Median time to answer falling from four minutes to under thirty seconds. Zero write operations executed without approval. One hundred percent of tool calls captured in an audit log.

~70%
status questions resolved without a human
< 30s
median time to answer, from ~4 min
0
unapproved write operations
100%
of tool calls audited
A read-only first phase is where the return is. It is also the phase that earns the trust for anything further.

Where to start

  1. Instrument the questions

    Spend two weeks logging what operations and support are actually asked. The top five will account for most of the volume, and they are rarely what leadership expects.

  2. Build read-only tools for the top three

    Task-shaped, not endpoint-shaped. Ship to a small internal group before anyone external sees it.

  3. Measure deflection, not sentiment

    How many of those questions never reached a human? That is the number that justifies phase two.

  4. Add writes last, gated

    Draft-and-approve only. The approval UI is part of the feature, not an afterthought.

Key takeaways

  • The value is in operational lookups across systems, not in another product-recommendation chat box.
  • MCP makes the integration a normal, reviewable service with types, tests and access control.
  • Design tools around the questions people ask, not around your REST endpoints.
  • Enforce scope in code against an identity the caller cannot change — prompts are not a security boundary.
  • Ship read-only first, gate every write behind human approval, and fix your data before layering AI over it.
MCPAgentic AIAutomationOperationsNetSuiteB2B

360 Expert Solutions

E-commerce & ERP Integration Team

We build and scale B2B and DTC commerce on Shopify Plus, BigCommerce and WooCommerce, wired into NetSuite and Oracle. These articles are written by the engineers and architects who deliver those projects.

Building something like this?

We architect B2B commerce and ERP integrations end to end.

ERP Integration

Real-Time Inventory Between NetSuite and Shopify Plus B2B

Most NetSuite-to-Shopify integrations poll on a timer. For B2B that is too slow: a single wholesale order can move a thousand units, and the next buyer sees stock that no longer exists. The fix is event-driven sync with a reconciliation pass behind it.

Read
B2B Commerce

Customer-Specific Pricing That Survives 40,000 SKUs

The instinct is to precompute every customer-product price. With 800 accounts and 40,000 SKUs that is 32 million rows that go stale the moment a contract changes. The alternative is to store rules and resolve them — with caching designed around how buyers actually browse.

Read
Platform Strategy

Shopify Plus B2B vs BigCommerce B2B Edition

Both platforms now ship native B2B. The marketing pages look interchangeable. The real differences are price list modelling, catalogue segmentation, checkout extensibility and how each handles a buyer who is also a consumer — and those decide the build.

Read
Book