Available MCP tools

The full set of tools Claude can call on your behalf via the Zillo MCP server. Each tool requires a specific scope — if your install didn't grant the scope, the tool is hidden from Claude's tool list.

list_products

products:read

List products in the merchant's catalog.

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "archived"
      ]
    },
    "type": {
      "type": "string",
      "enum": [
        "gift_card",
        "experience",
        "ticket",
        "membership",
        "voucher"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  }
}

get_product

products:read

Fetch a single product by id.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

list_recent_orders

orders:read

List the merchant's most recent orders.

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 10
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "paid",
        "fulfilled",
        "partially_refunded",
        "refunded",
        "cancelled"
      ]
    }
  }
}

get_order

orders:read

Fetch a single order by id with its line items.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

list_customers

customers:read

List customers. Pass `q` to search by email or name.

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 120
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  }
}

get_customer

customers:read

Fetch a single customer by id.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

list_gift_cards

gift_cards:read

List issued gift cards. Filter by status: active | redeemed | voided | expired.

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "active",
        "redeemed",
        "voided",
        "expired"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  }
}

lookup_gift_card

gift_cards:read

Fetch a single gift card by id.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

redeem_gift_card

gift_cards:redeem

Redeem (decrement) a gift card by an amount in cents. Returns the updated balance.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "amount_cents": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100000000
    },
    "note": {
      "type": "string",
      "maxLength": 280
    }
  },
  "required": [
    "id",
    "amount_cents"
  ]
}

list_tickets

tickets:read

List issued tickets. Filter by `status` (active | redeemed | voided) and/or `event_id`.

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "active",
        "redeemed",
        "voided"
      ]
    },
    "event_id": {
      "type": "string",
      "format": "uuid"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  }
}

get_ticket

tickets:read

Fetch a single ticket by id.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

redeem_ticket

tickets:redeem

Record one scan against a ticket. Single-entry tickets flip `redeemed_at`; multi-entry passes (max_uses > 1) append one row to the redemption log per call. Throws if exhausted, voided, or cross-tenant. Response includes `uses_after` / `remaining` so multi-entry callers can show live state.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

list_bookings

bookings:read

List experience bookings. Filter by `status` (active | redeemed | voided) and/or `slot_id`.

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "active",
        "redeemed",
        "voided"
      ]
    },
    "slot_id": {
      "type": "string",
      "format": "uuid"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  }
}

get_booking

bookings:read

Fetch a single booking by id.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

redeem_booking

bookings:redeem

Record one scan against a booking. Single-use bookings flip `redeemed_at` and admit the party; multi-pass walk-in bookings (max_uses > 1) append one row to the redemption log per call. Throws if exhausted, voided, or cross-tenant. Response includes `uses_after` / `remaining` so multi-pass callers can show live state.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

list_vouchers

vouchers:read

List issued vouchers. Filter by `status` (active | redeemed | voided | expired) and/or `product_id`. Each result includes `max_uses`, `uses_after`, and `remaining` so multi-use packs (e.g. 5-class yoga pass) show their live usage without a follow-up call.

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "active",
        "redeemed",
        "voided",
        "expired"
      ]
    },
    "product_id": {
      "type": "string",
      "format": "uuid"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  }
}

get_voucher

vouchers:read

Fetch a single voucher by id. Returns `max_uses`, `uses_after`, and `remaining` so the caller can render multi-use state.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

list_voucher_redemptions

vouchers:read

List the redemption history for one voucher, newest first. Useful for auditing multi-use packs (5-class yoga pass, 10 coffees) where each scan appends a row. Single-use vouchers will have at most one entry.

{
  "type": "object",
  "properties": {
    "voucher_id": {
      "type": "string",
      "format": "uuid"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  },
  "required": [
    "voucher_id"
  ]
}

redeem_voucher

vouchers:redeem

Record one redemption against a voucher. Single-use passes accept exactly one scan; multi-use packs accept up to `max_uses`. Throws on `voided`, `expired`, or `exhausted` (max_uses reached). Returns the updated voucher plus the redemption event row and `was_first` (true on the first scan of a multi-use pack).

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

list_memberships

memberships:read

List the merchant's memberships. Filter by `status`.

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "active",
        "trialing",
        "past_due",
        "canceled",
        "incomplete"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  }
}

get_membership

memberships:read

Fetch a single membership by id. Includes a `usage` block when the plan sets a per-period check-in cap (e.g. '5 classes a month'); omitted for unlimited plans.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "id"
  ]
}

checkin_membership

memberships:checkin

Record a membership check-in (gym visit, studio drop-in). For plans with a per-period cap (e.g. '5 classes a month'), throws `exhausted` when the allowance is spent — refills automatically when Stripe advances the billing period on renewal. Returns the check-in row plus a live `usage` block on capped plans.

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "note": {
      "type": "string",
      "maxLength": 280
    }
  },
  "required": [
    "id"
  ]
}

lookup_redemption_token

gift_cards:read

Resolve a redemption token across artifact types. Pass a gift card code (XXXX-XXXX-XXXX) or a prefixed QR token (T-… ticket, B-… booking, V-… voucher, M-… membership). Returns the artifact under an `object` field naming its kind.

{
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    }
  },
  "required": [
    "token"
  ]
}

list_webhook_endpoints

webhooks:read

List the merchant's registered webhook endpoints.

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 25
    }
  }
}