Skip to main content
The Inventory MCP is Droplinked’s agentic surface over InventoryOS. Any MCP-capable agent (Claude, ChatGPT, Cursor, Continue, the Vercel AI SDK, …) can discover merchant catalogs, compose carts, place orders, issue refunds, and read trust-fabric state — served directly by the Droplinked backend (apiv3), no extra gateway and (in the current phase) no credentials required for the public tools. Discovery doc (live):
This page is grounded in the live tool registry (McpToolRegistryService). The discovery doc at /.well-known/mcp.json is always the canonical source of truth for the exact tool names, descriptions, and JSON-schema input shapes — if this page and the discovery doc disagree, the discovery doc wins.

Transport + protocol

The backend speaks MCP over HTTP. See MCP Server for the full transport reference. In short: All /mcp/v1/* routes accept both a flat body ({ name, arguments }) and a JSON-RPC 2.0 envelope ({ jsonrpc: "2.0", id, method, params }) — the shape every official MCP client sends. The response mirrors the request shape. The advertised protocolVersion is 2024-11-05.

The tool registry

The registry currently exposes 25 tools. Tools are read-only unless marked write. Three observability/diagnostic tools are admin-gated: they require an _adminKey argument that matches the server’s MCP_ADMIN_SECRET.

Catalog + discovery (read-only)

Merchant discovery — opt-in only (read-only, except where noted)

These tools only surface merchants who have set agenticDiscoveryEnabled: true. See Merchant Discovery Rules.

Cart + order (write, except reads)

Trust + financing (read-only)

Observability / diagnostics (admin-gated, read-only)

Tool annotations (preview)

The MCP spec lets a server tag each tool with behavioural hints so a client can reason about safety before calling — readOnlyHint (does not mutate state), destructiveHint (may perform an irreversible update), and openWorldHint (touches an external system). These annotations ship alongside the Streamable HTTP transport (gated behind MCP_STREAMABLE_HTTP_ENABLED, preview) — the current /mcp/v1/* tools/list response does not yet include them, so treat this table as the planned classification: findInventory and getInventoryDrift additionally carry openWorldHint: true (they reach Impact / the Shopify Admin API).

About findInventory

findInventory is the cart-composition + multi-brand discovery primitive — it queries across inventory sources and returns each match with stock state, price, image, and a buyable product URL, so an agent can build a cart across results. The source argument selects the inventory source: native, impact_brand, rakuten, or any (union, deduplicated by SKU):
  • native — the Droplinked catalog (published, visible, purchasable ProductV2 / ProductSkuV2). Always live.
  • impact_brand — the live multi-brand discovery path. When IMPACT_LIVE_SEARCH_ENABLED=true, findInventory proxies Impact’s live Catalogs/ItemSearch endpoint over the full multi-brand advertiser catalog (keyword-matched as Name~"<query>"), with a thin ~6h per-keyword cache and zero bulk replication. This is how an agent reaches brands like Walmart or Lids through the same findInventory call. The path is fail-open: on a rate-limit (Impact’s quota is hourly) or any upstream error it serves a stale cache hit if present, otherwise degrades to native results — it never breaks the call. With the flag off, impact_brand returns no live rows and the call falls back to native results.
  • rakuten — reserved for the Rakuten feed; returns no rows until that source is wired.
When an intentId (from recordAgenticIntent) is supplied and IMPACT_ATTRIBUTION_ENABLED is on, each impact_brand result is enriched with a Model-A trackedBuyUrl — a tracked deep-link the agent should drive the buyer to, so the advertiser’s pixel credits Droplinked (publisher), tagged subId1=dl-agentic:{intentId}. Enrichment is per-item fail-open: a link-gen failure returns the product without a trackedBuyUrl rather than dropping it. See Attribution + Commission. The per-item attestation field is a privacy-redacted status (unattested by default for external impact_brand items, which carry no native attestation) and respects each merchant’s attestation policy for native items, so it never over-discloses. When DISCOVERY_RANKER_ENABLED=true, results are re-ordered by their merchant’s attestation-weighted trust score (and each item carries a trustScore). With the flag off, results come back in source order.

Multi-brand Impact catalog

The large multi-brand affiliate catalog (Flatlay × Impact Partner REST) is reachable two ways:
  1. Through findInventory (source: impact_brand / any) — the public MCP path. When IMPACT_LIVE_SEARCH_ENABLED=true this proxies Impact’s live Catalogs/ItemSearch over the whole multi-brand advertiser catalog (keyword Name~"<query>"), query-time, never bulk-replicated, with a thin ~6h per-keyword cache. This is the primary agent-facing path and is described in About findInventory above.
  2. Through a merchant-authenticated connector — a separate, not public surface for a merchant to manage their own Impact connection. It is read-only, query-time (never bulk-replicated), and rate-limited per merchant.
All four connector endpoints require a merchant JWT (PRODUCER role). The connector never exposes write methods, even when the token carries RW scope.

Privacy + cost-efficiency

Inventory + attestation tools respect each merchant’s MerchantAttestationPolicy:
  • Default: private — merchants who have not opted in see a redacted attestation status.
  • lenders_only scope — visible to allowlisted lenders.
  • public scope — visible to anyone.
Merchant-discovery tools (searchMerchants, getMerchantDirectory, getMerchantCatalogSummary, recordAgenticIntent) hard-filter on agenticDiscoveryEnabled — non-opted merchants are invisible, and recordAgenticIntent returns opt_in_required rather than writing a ledger row.

Where to go next