addrbookFor publishers
← The evidence ledger

Evidence row 582570

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint cee79b7e-9385-4c28-aca9-2d30fafe66af
Recorded
Previous row
#236876
Body SHA-256
85c990e75547c91202c3c4a061627ec8015f2f85b2fb3030fd6ba93826854293
Leaf
0x8d341bceb9a257bdc6f72adc0ae60a1785a7cba941d5494b0245d5e04270db7d

What was observed

{
  "count": 17,
  "tools": [
    {
      "description": "Book an appointment slot at a venue (Wix Bookings). NOTHING IS BOOKED UNTIL THE CUSTOMER PAYS: this returns a checkout URL, and the booking stays off the venue's calendar until a human opens that URL and completes payment on the venue's own site. Tell the user they must open the link. Call get_availability immediately before this — the slot is re-validated server-side and a taken slot is rejected. The contact email is NOT verified at this step; the checkout is what confirms it.",
      "inputSchema": {
        "properties": {
          "contact": {
            "description": "Who the booking is for. All three are required by the venue to confirm or reschedule.",
            "properties": {
              "email": {
                "description": "Email address.",
                "type": "string"
              },
              "name": {
                "description": "Full name.",
                "type": "string"
              },
              "phone": {
                "description": "Phone number, at least 10 digits. Any formatting is accepted.",
                "type": "string"
              }
            },
            "required": [
              "name",
              "email",
              "phone"
            ],
            "type": "object"
          },
          "endDate": {
            "description": "Slot end as an ISO instant, exactly as returned by get_availability.",
            "type": "string"
          },
          "place_slug": {
            "description": "Venue place slug from search_places.",
            "type": "string"
          },
          "resourceId": {
            "description": "Optional staff/resource ID from the slot, when the user picked a specific professional.",
            "type": "string"
          },
          "serviceId": {
            "description": "Service ID from list_booking_services (called with the same place_slug).",
            "type": "string"
          },
          "startDate": {
            "description": "Slot start as an ISO instant, exactly as returned by get_availability.",
            "type": "string"
          }
        },
        "required": [
          "place_slug",
          "serviceId",
          "startDate",
          "endDate",
          "contact"
        ],
        "type": "object"
      },
      "name": "create_booking"
    },
    {
      "description": "Get available time slots for a bookable service on a given date (Wix Bookings). Pass the serviceId from list_booking_services and a date in YYYY-MM-DD. Pass the same `place_slug` you used there — slot times are returned in the VENUE's timezone, which is not necessarily the directory's.",
      "inputSchema": {
        "properties": {
          "date": {
            "description": "Date in YYYY-MM-DD format (e.g. \"2026-06-25\").",
            "type": "string"
          },
          "place_slug": {
            "description": "Venue place slug — use the same one passed to list_booking_services.",
            "type": "string"
          },
          "serviceId": {
            "description": "Service ID from list_booking_services.",
            "type": "string"
          }
        },
        "required": [
          "serviceId",
          "date"
        ],
        "type": "object"
      },
      "name": "get_availability"
    },
    {
      "description": "Get ticket types and prices for a specific event (Wix Events). Pass the event slug from list_events. Returns ticket names, prices, sale status, and how many are left.",
      "inputSchema": {
        "properties": {
          "event_slug": {
            "description": "Event slug from list_events.",
            "type": "string"
          }
        },
        "required": [
          "event_slug"
        ],
        "type": "object"
      },
      "name": "get_event_tickets"
    },
    {
      "description": "Get the loyalty/rewards program details for this site (Wix Loyalty). Returns program name, points currency name, and tier structure with required points per tier.",
      "inputSchema": {
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "get_loyalty_info"
    },
    {
      "description": "Get full details for a specific place by its URL slug, including opening hours, a precomputed `open_now` boolean, amenity `attributes` (slugs), a `delivery` array of curated delivery-app deep-links (ifood, rappi, uber-eats — each `{ platform, url }`), ratings, address, and neighborhood.",
      "inputSchema": {
        "properties": {
          "slug": {
            "description": "URL slug of the place, e.g. \"cafe-example\".",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "get_place"
    },
    {
      "description": "Get published reviews for this site (Wix Reviews). Returns reviewer name, rating, title, and content.",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Max reviews to return (default 10, max 50).",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "get_reviews"
    },
    {
      "description": "Returns basic information about this neighborhood directory: name, locale, domain, description, canonical URLs for key sections, plus the current LOCAL TIME and CURRENT WEATHER at the neighborhood (temperature, condition). Use this for any \"what time is it there\" or \"what's the weather like\" context.",
      "inputSchema": {
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "get_site_info"
    },
    {
      "description": "List a venue's services — what it offers, with price and duration. Pass `place_slug` (from search_places) to list the services of a specific VENUE — a salon, clinic or studio listed in this directory; that is what you want in almost every case, and it is the only form whose serviceId works with create_booking. Omitting `place_slug` lists the directory site's own services instead, which most sites do not have. Returns name, description, price, duration in minutes, and `bookableViaMcp`. Services are listed for EVERY venue, including those with no online booking system — check `bookableViaMcp`: when it is false, `id` is null and you cannot book through create_booking, so point the user at `bookingUrl` or the venue's page instead.",
      "inputSchema": {
        "properties": {
          "place_slug": {
            "description": "Venue place slug from search_places. Strongly recommended — without it you get the directory's own services, not a venue's.",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "list_booking_services"
    },
    {
      "description": "List upcoming events in this neighborhood with date, venue, price, and URL. Events within the next 7 days include a weatherForecast (condition + min/max temperature) for the event day — use it to tell users e.g. \"the event is at X and it will be raining\". Pass `filter` to narrow by time or price; `filter: \"agora\"` answers \"what can I go to right now\" and is resolved live on every call, which no cached page can do.",
      "inputSchema": {
        "properties": {
          "filter": {
            "description": "Narrow the list: \"agora\" = on stage at this exact moment (season runs and day-granular sources are excluded, because their stored window says nothing about whether a session is on right now); \"hoje\"/\"amanha\"/\"fim-de-semana\" = running on those days, including multi-day runs; \"gratis\" = free to attend, including externally-ticketed events priced at 0.",
            "enum": [
              "agora",
              "hoje",
              "amanha",
              "fim-de-semana",
              "gratis"
            ],
            "type": "string"
          },
          "limit": {
            "description": "Max events to return (default 20, max 50).",
            "type": "number"
          },
          "upcoming_only": {
            "description": "Only return upcoming or in-progress events (default true).",
            "type": "boolean"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "list_events"
    },
    {
      "description": "Get all FAQ questions and answers for this site (Wix FAQ). Grouped by category. Use this to answer common questions about the site — opening hours, parking, policies, etc.",
      "inputSchema": {
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "list_faqs"
    },
    {
      "description": "List available contact/signup forms on this site (Wix Forms). Returns form name, ID, and field definitions (label, type, required). Use before submit_form to discover which fields to fill.",
      "inputSchema": {
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "list_forms"
    },
    {
      "description": "List membership or subscription plans (Wix Pricing Plans). Pass `place_slug` (from search_places) to list the plans of a specific VENUE — a gym, studio or clinic listed in this directory (e.g. its monthly/annual membership); that is what you want in almost every case. Omitting `place_slug` lists the directory site's own plans instead, which most sites do not have. Returns plan name, description, price, billing cycle, perks, and a direct checkout URL.",
      "inputSchema": {
        "properties": {
          "place_slug": {
            "description": "Venue place slug from search_places. Strongly recommended — without it you get the directory's own plans, not a venue's.",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "list_pricing_plans"
    },
    {
      "description": "Request a table at a restaurant. THE RESTAURANT IS NOT NOTIFIED YET: the request is held and a confirmation email is sent to the address you provide, and only when that person clicks the link does the restaurant receive it. Tell the user to check their inbox — the link expires in 24 hours. Use a real address belonging to the person you are acting for; the confirmation link is deliberately not returned to you. This is a request, not a confirmed booking: the restaurant confirms out of band.",
      "inputSchema": {
        "properties": {
          "email": {
            "description": "The guest's own email — the confirmation link is sent here.",
            "type": "string"
          },
          "message": {
            "description": "Optional note (occasion, dietary needs, seating preference).",
            "type": "string"
          },
          "name": {
            "description": "Name the table is under.",
            "type": "string"
          },
          "partySize": {
            "description": "Number of people (1–30).",
            "type": "number"
          },
          "phone": {
            "description": "Optional phone number for the restaurant to reach the guest.",
            "type": "string"
          },
          "place_slug": {
            "description": "Restaurant place slug from search_places.",
            "type": "string"
          },
          "requestedAt": {
            "description": "Desired date and time as an ISO instant. Must be in the future.",
            "type": "string"
          }
        },
        "required": [
          "place_slug",
          "name",
          "email",
          "partySize",
          "requestedAt"
        ],
        "type": "object"
      },
      "name": "request_reservation"
    },
    {
      "description": "Hold tickets for an event sold through this site (Wix Events) and return a checkout URL. THE HOLD IS TEMPORARY AND NOTHING IS PAID: the tickets are not the user's until a human opens the URL and completes checkout, and the hold expires on its own if they don't. Max 10 tickets and 10 ticket types per reservation. Only works for events this site sells directly — for events sold elsewhere (Sympla, Ingresse, Sesc), use the event's own ticketUrl instead.",
      "inputSchema": {
        "properties": {
          "event_slug": {
            "description": "Event slug from list_events.",
            "type": "string"
          },
          "tickets": {
            "description": "Ticket types and quantities to hold.",
            "items": {
              "properties": {
                "pricingOptionId": {
                  "description": "Required when the ticket type lists pricingOptions in get_event_tickets: the id of the option the customer chose.",
                  "type": "string"
                },
                "quantity": {
                  "description": "How many of this type (at least 1).",
                  "type": "number"
                },
                "ticketDefinitionId": {
                  "description": "Ticket type ID from get_event_tickets.",
                  "type": "string"
                }
              },
              "required": [
                "ticketDefinitionId",
                "quantity"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "event_slug",
          "tickets"
        ],
        "type": "object"
      },
      "name": "reserve_event_tickets"
    },
    {
      "description": "RSVP to a free event on this site (Wix Events). NOBODY IS ON THE GUEST LIST YET: a confirmation email goes to the address you provide, and the RSVP is only submitted when that person clicks the link (expires in 24 hours). Tell the user to check their inbox. Use a real address belonging to the person you are acting for — the confirmation link is deliberately not returned to you.",
      "inputSchema": {
        "properties": {
          "email": {
            "description": "The guest's own email — the confirmation link is sent here.",
            "type": "string"
          },
          "event_slug": {
            "description": "Event slug from list_events.",
            "type": "string"
          },
          "firstName": {
            "description": "Guest first name.",
            "type": "string"
          },
          "lastName": {
            "description": "Guest last name.",
            "type": "string"
          }
        },
        "required": [
          "event_slug",
          "firstName",
          "lastName",
          "email"
        ],
        "type": "object"
      },
      "name": "rsvp_event"
    },
    {
      "description": "Search for places (restaurants, cafes, shops, etc.) in this neighborhood. The `q` match is accent-insensitive and typo-tolerant (\"acai\" finds \"Açaí\", \"restaurnt\" finds \"Restaurante\"), ranked by relevance. Compose filters for multi-condition queries: `category`, `neighborhood`, `open_now` (true = open at this exact moment), and `attributes` (amenity slugs, ALL must match). Each result includes a precomputed `open_now` boolean, an `attributes` array (amenity slugs), a `delivery` array of curated delivery-app deep-links (ifood, rappi, 99food, uber-eats — each `{ platform, url }`), rating, and structured `hours` (Google Maps periods: day 0=Sun–6=Sat, time \"HHMM\"). Common amenity slugs: wifi, outdoor-seating, wheelchair, dog-friendly, delivery, takeaway, reservations, live-music, vegan, gluten-free (availability varies per place).",
      "inputSchema": {
        "properties": {
          "attributes": {
            "description": "Amenity slugs a place must ALL have, e.g. [\"wifi\",\"outdoor-seating\"]. Common slugs: wifi, outdoor-seating, wheelchair, dog-friendly, delivery, takeaway, reservations, live-music, vegan, gluten-free.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "category": {
            "description": "Filter by category label (e.g. \"Café\"). Case-insensitive substring match.",
            "type": "string"
          },
          "limit": {
            "description": "Max results to return (default 20, max 100).",
            "type": "number"
          },
          "neighborhood": {
            "description": "Filter by neighborhood name. Case-insensitive substring match.",
            "type": "string"
          },
          "open_now": {
            "description": "When true, return only places open at the current local time (computed server-side from their opening hours).",
            "type": "boolean"
          },
          "q": {
            "description": "Free-text term matched against place name and address — accent-insensitive and typo-tolerant.",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "search_places"
    },
    {
      "description": "Submit a form on behalf of the user (Wix Forms). Call list_forms first to get the formId and field keys. Returns a submissionId on success.",
      "inputSchema": {
        "properties": {
          "fields": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Key-value pairs matching the field keys from list_forms. Example: { \"field_1\": \"João\", \"field_2\": \"joao@email.com\" }",
            "type": "object"
          },
          "formId": {
            "description": "Form ID from list_forms.",
            "type": "string"
          }
        },
        "required": [
          "formId",
          "fields"
        ],
        "type": "object"
      },
      "name": "submit_form"
    }
  ]
}

What the leaf hashes

{"body":"85c990e75547c91202c3c4a061627ec8015f2f85b2fb3030fd6ba93826854293","id":582570,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793145000834478,"prev":236876,"subject":"cee79b7e-9385-4c28-aca9-2d30fafe66af","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0x8d33ded455413937d1f12d2522d5a40278788e4457e700cbfda7fdf3bfb113e6
  2. 0x162836afb260fadcd2704b8bb95d4252774cb07539c85c88a5fcd8ec4895f85e
  3. 0x2d00610d5d2f219d29ee2a751ad4d4476732a93c7f39d2f5af0d7fd890b761fb
  4. 0xdd317e7f368c5dce49b33a8a2bb76406567461a03dd956705267122876c3b565
  5. 0xa66aa890ed4eefe759315d4eced844f76a76636a639e5b5b542ec593c476f309
  6. 0x57f5abbdb6fc6965ec604fde1f9db6b8714fa469a73e424b5ad264ead547cfe9
  7. 0x9e4e53be449e8adf927ebf5866c4d8d22a7e0e718d31fc3bcbdba09beda3e816
  8. 0x89cd4e4a97abf3e3c779772274cc3c3595340b7e66b34e1c9feef31478df58a0
  9. 0x13d6bc29d628f0f2caec3824e5adccb03af412be90ee687634a9d2251705136f
  10. 0x1ddaaa8c87e4f2a428c12a0f726d649212454168d49aa20a8ebc1865b9e139e3
  11. 0x9db4db43425eb15434c6ecabdea3edcc63d5347d28ff18fda137c7d140c12b36
  12. 0xe0e69ccf3eae9f1603c5f7e4a938a5ebe41708a9b4f6cb15a530b2e2aa69d8a0
  13. 0xea3d566bf95ca7a3a7f6de9c4f77180bd8c5ffd160486a27d870e8a2fb6d0b9e
  14. 0x06e3b43165f5b3c31d850bc32f20b2e25b844564c4e042c141b9748c26a5a600
  15. 0xb4f7223140c8a36cb87a63d77cf617086d9968dc4658f03e102571ebe06e9ed6
  16. 0xfecf3d4646dd4984a13dd715499e842c3fde63692336d97394c2bfd8e877ca5d
  17. 0xf30fddbf4811226c58e8f0daf36fddd79fc5f1356b592bb1d99a8061ddbabe66
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON