VynnAI

MCP

Ask an AI assistant about Canadian grocery prices

Connect Claude, or another assistant that supports MCP with an API key. The available Free plan includes 500 calls a month, no card. Your account may have different terms; check its current allowance in the dashboard. Calls from your assistant and your app share the same limit.

Try this prompt

Search for milk in Ontario. Show the chain, store details, and date wherever returned. Explain any gaps. A listed price does not tell me whether the product is in stock.

Connect a client

Create a key in Data access. Keep it in your private client configuration; do not share it in a prompt, screenshot, repository, or browser app. The examples below contain placeholders. Replace them only on your own machine.

Claude Code

claude mcp add --transport http vynn https://api.vynn.ai/mcp \
  --header "Authorization: Bearer vynn_pk_YOUR_KEY"

Claude Desktop

Use mcp-remote as a local stdio bridge in your Desktop configuration. This API-key setup does not provide an OAuth account-connection flow. Remote connectors that require OAuth are not supported by this setup:

{
  "mcpServers": {
    "vynn": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.vynn.ai/mcp",
        "--header",
        "Authorization: Bearer vynn_pk_YOUR_KEY"
      ]
    }
  }
}

Verify the connection

The transport is stateless HTTP at https://api.vynn.ai/mcp. Authenticate with Authorization: Bearer. Start with the MCP initialize handshake:

curl -s https://api.vynn.ai/mcp \
  -H "Authorization: Bearer vynn_pk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "initialize",
    "params": {
      "protocolVersion": "2025-06-18",
      "capabilities": {},
      "clientInfo": {"name": "curl", "version": "1"}
    }
  }'

Explore history with an eligible paid plan

Ask: “Search for milk in Ontario. Use one returned retailer SKU and its banner to retrieve 30 days of observed price history. Include observation dates and explain any missing data.”

History uses a retailer SKU and banner, not a barcode. Prices come from scheduled collection on the reference-store panel; they are not guaranteed at every store. An empty result does not prove that a product is unavailable. Confirm coverage with the store tool.

Tools

ToolArgumentsBackend contract
lookup_productupc (required), province (required), limitResolve a UPC/EAN/GTIN barcode to the product it identifies and the current offers for it across Canadian grocery banners in one province. Requires a province because grocery prices are store-scoped: there is no single national price for a product. Returns an empty offer list, not an error, when the barcode is known but not currently carried. The result includes open_in_vynn_url, an absolute Vynn web link for this product.
search_productsquery (required), province (required), limitSearch Canadian grocery products by name or brand in one province. Use this when you have a description rather than a barcode. Province is required because the search service does not publish a national mixed-store result. Returns catalogue entries with current prices, not a price history. The result includes open_in_vynn_url, an absolute Vynn web link that carries the query. The linked page sets its own store scope, so its prices may differ from this result.
price_historysku (required), banner (required), province (required), periodObserved price series for a single retailer SKU over a lookback window. IMPORTANT: the identifier is a retailer-scoped SKU (an external_sku), not a UPC — passing a barcode here will not resolve. Use lookup_product or search_products first to obtain a SKU. A province is required, because the series is scoped to that province's reference stores. Prices are observed on our reference-store panel and are not guaranteed to match every store. When the product name is available, the result includes open_in_vynn_url, an absolute Vynn web link that searches for it; the linked page sets its own store scope, so its prices may differ from this series.
list_reference_storesprovince, banner, limitThe configured reference stores, one per banner and province, with their banner, province, coordinates and observations_30d: the store's price-event count over the trailing 30 days. A configured store can stop collecting; a store at 0 recorded no price events in that window. Call this to answer 'what does Vynn actually cover?' — it is the panel definition, not a directory of every grocery store in Canada. The result includes open_in_vynn_url, an absolute link to Vynn's retailer list on the web.

The handshake alone does not verify data access. Confirm that your client lists all four tools and completes a tool call. Handshakes and tools/list are unmetered. Every tools/call, including a rejected call, consumes one call from the same plan quota as REST. If authentication fails, check the key and whether it was revoked. Exhausted B2B allowances return a JSON-RPC error with code -32000; its message links to plans, and its data includes resets_at, plans_url and retry_after_seconds. Wait for the reported reset; repeated retries do not restore your allowance. Transport burst limits return HTTP 429 with Retry-After.