{
  "name": "Northbound Coffee Roasters",
  "title": "Northbound Coffee Roasters",
  "description": "A live demo store built with Cartwright — single-origin coffee, brewing gear, and a working checkout. Next.js, Prisma, Stripe, MCP, and the modern web platform baseline (View Transitions, native dialog, container queries).",
  "version": "1.0.0",
  "serverUrl": "https://demo.cartwright.app/api/mcp",
  "transport": "streamable-http",
  "tools": [
    {
      "name": "products.search",
      "description": "Search products with free text and filters (category, brand, colors, price range, in-stock). Returns slug, name, brand, price (ore), stock, and whether the product is featured.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "q": {
            "type": "string"
          },
          "categorySlug": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "frameColor": {
            "type": "string"
          },
          "lensColor": {
            "type": "string"
          },
          "featured": {
            "type": "boolean"
          },
          "inStock": {
            "type": "boolean"
          },
          "minPriceOere": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "maxPriceOere": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "limit": {
            "default": 20,
            "description": "Page size — maximum number of products returned.",
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "offset": {
            "default": 0,
            "description": "Pagination offset — number of matching products to skip before the page starts.",
            "type": "integer",
            "minimum": 0,
            "maximum": 10000
          }
        }
      },
      "readOnly": true
    },
    {
      "name": "products.get",
      "description": "Get a single product by slug. Returns all fields including description, all images, and category.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "slug"
        ]
      },
      "readOnly": true
    },
    {
      "name": "categories.list",
      "description": "List public categories with their non-deleted product count.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "includeEmpty": {
            "description": "Include categories with zero visible products (default true — the historical behaviour).",
            "type": "boolean"
          }
        }
      },
      "readOnly": true
    },
    {
      "name": "site.list_pages",
      "description": "List public, published site pages. Drafts and administrative fields are never returned.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "locale": {
            "type": "string",
            "minLength": 2
          }
        }
      },
      "readOnly": true
    },
    {
      "name": "site.get_page",
      "description": "Get one public, published page by slug. Returns public content only and never exposes drafts.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 2,
            "pattern": "^[a-z0-9-]+$"
          },
          "locale": {
            "type": "string",
            "minLength": 2
          }
        },
        "required": [
          "slug"
        ]
      },
      "readOnly": true
    }
  ],
  "websiteUrl": "https://demo.cartwright.app",
  "remotes": [
    {
      "url": "https://demo.cartwright.app/api/mcp",
      "transport": "streamable-http",
      "authentication": {
        "anonymous": "public read-only tools",
        "bearer": "required for private data and all actions"
      }
    }
  ],
  "_meta": {
    "cartwright/toolCatalog": "https://demo.cartwright.app/api/v1/tools",
    "cartwright/openapi": "https://demo.cartwright.app/openapi.json",
    "cartwright/developers": "https://demo.cartwright.app/da/developers",
    "cartwright/apiCatalog": "https://demo.cartwright.app/.well-known/api-catalog",
    "cartwright/agentSkills": "https://demo.cartwright.app/.well-known/agent-skills/index.json"
  }
}