addrbookFor publishers
← The evidence ledger

Evidence row 304608

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 2b63428c-d787-44f2-b848-9ccb22f8a6d7
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
00c3862399d4167a686d8f4b287ec7121283c14c24625c4c078b7b6399321cfe
Leaf
0xcb194a02208970bc027e43bb5d286fa511632482b1aa34d3c1eed7cda14cfbc2

What was observed

{
  "count": 5,
  "tools": [
    {
      "description": "Confirm a group meeting at a specific time across several Lucie hosts (by @handle), creating ONE shared Google Calendar event with everyone invited. YOU (the connector's owner) are the organizer and host the event on your calendar — no organizer handle needed. This is a real write: it re-verifies every participant (you included) is free at that instant and refuses if anyone isn't — so it never double-books. Always call find_group_times first and copy an exact common-slot start. Before calling, confirm the time (in each person's zone), the participants, the title, and the reason. Requires you to be on Sync Pro (or a Lucie Membership) via your personal connector; everyone must have a live booking page.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "durationMinutes": {
            "description": "Meeting length in minutes. Must be one the organizer offers.",
            "exclusiveMinimum": 0,
            "type": "integer"
          },
          "participantHandles": {
            "description": "The other participants' @handles, e.g. [\"@lucie\", \"@taylor\"]. Each must have a live Lucie booking page. Leading @ optional.",
            "items": {
              "type": "string"
            },
            "maxItems": 8,
            "minItems": 1,
            "type": "array"
          },
          "reason": {
            "description": "A short agenda/purpose, shared with everyone on the invite.",
            "minLength": 1,
            "type": "string"
          },
          "startAt": {
            "description": "The exact ISO-8601 `start` copied verbatim from a find_group_times common slot (absolute UTC instant). Do NOT construct it from a wall-clock time.",
            "type": "string"
          },
          "title": {
            "description": "The meeting title, e.g. \"Q3 planning sync\".",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "participantHandles",
          "startAt",
          "durationMinutes",
          "title",
          "reason"
        ],
        "type": "object"
      },
      "name": "book_group_meeting"
    },
    {
      "description": "Book a confirmed meeting on a Lucie Sync host's calendar at a specific start time. This is a real write: it creates a calendar event and emails both the host and the booker. Always call check_availability first and use one of the open slots it returns. Before calling, (1) show the booker the specific date/time you're about to book — in their own time zone — and get their explicit confirmation, and (2) collect their name, email, AND a brief reason for the meeting (ask for the reason if not given; it's required and shared with the host).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "bookerEmail": {
            "description": "The booker's email. The confirmation and calendar invite are sent here.",
            "format": "email",
            "type": "string"
          },
          "bookerName": {
            "description": "Full name of the person the meeting is for (the booker).",
            "type": "string"
          },
          "durationMinutes": {
            "description": "Meeting length in minutes. Must be one the host offers.",
            "exclusiveMinimum": 0,
            "type": "integer"
          },
          "handle": {
            "description": "The host's booking handle, e.g. \"@alice\" or \"alice\" (the leading @ is optional).",
            "type": "string"
          },
          "reason": {
            "description": "A short description of why the booker wants to meet (the agenda / purpose). Required — ask the booker for it before booking. Shared with the host alongside the invite.",
            "minLength": 1,
            "type": "string"
          },
          "startAt": {
            "description": "The exact ISO-8601 `start` value copied verbatim from a check_availability slot (an absolute UTC instant, e.g. 2026-07-28T17:00:00Z). Do NOT construct this from a local wall-clock time the booker said — that risks the wrong time zone; always copy the slot's start.",
            "type": "string"
          },
          "viewerTimeZone": {
            "description": "The BOOKER's IANA time zone (e.g. America/New_York) — the same one you passed to check_availability. Their confirmation email and reminders are written in this zone, so without it they read the host's zone instead and have to do the time-zone maths themselves.",
            "type": "string"
          }
        },
        "required": [
          "handle",
          "startAt",
          "durationMinutes",
          "bookerName",
          "bookerEmail",
          "reason"
        ],
        "type": "object"
      },
      "name": "book_meeting"
    },
    {
      "description": "Return the open meeting slots a Lucie Sync host offers, plus their booking rules (durations offered, minimum notice, how far ahead you can book, buffer between meetings). Returns only bookable slots and policy — never the host's raw calendar. Use this to find a time before proposing one to the user. Slots are absolute instants (ISO-8601 UTC). Pass the booker's viewerTimeZone so times display in THEIR local zone — the booker should never have to do time-zone math.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "durationMinutes": {
            "description": "Desired meeting length in minutes. Must be one the host offers. Defaults to 30 if omitted.",
            "exclusiveMinimum": 0,
            "type": "integer"
          },
          "from": {
            "description": "ISO-8601 start of the search window. Defaults to now + the host's minimum notice.",
            "type": "string"
          },
          "handle": {
            "description": "The host's booking handle, e.g. \"@alice\" or \"alice\" (from their lucie.network/book/@<handle> link). The leading @ is optional.",
            "type": "string"
          },
          "to": {
            "description": "ISO-8601 end of the search window. Defaults to the host's max-advance horizon.",
            "type": "string"
          },
          "viewerTimeZone": {
            "description": "The booker's IANA time zone, e.g. \"Asia/Singapore\" or \"America/New_York\". Pass the booker's own zone so slots are shown in their local time. Defaults to the host's zone if omitted.",
            "type": "string"
          }
        },
        "required": [
          "handle"
        ],
        "type": "object"
      },
      "name": "check_availability"
    },
    {
      "description": "Create a Lucie group event (a poll) for several participants, pre-filled with candidate times when everyone is free (the intersection of their availability). Returns a vote link to share: participants pick which proposed times work, and people WITHOUT a Lucie handle can vote manually too. This is a write (creates a poll) but sends no emails and touches no calendars. Confirm the title, participants, and duration with the organizer before creating. Note: agent group scheduling is a Sync Pro feature — the organizer's email must be on Sync Pro (or a Lucie Membership).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "durationMinutes": {
            "description": "Meeting length in minutes. Defaults to 30.",
            "exclusiveMinimum": 0,
            "type": "integer"
          },
          "from": {
            "description": "ISO-8601 start of the search window.",
            "type": "string"
          },
          "handles": {
            "description": "Participants' @handles whose availability seeds the candidate times. The leading @ is optional.",
            "items": {
              "type": "string"
            },
            "maxItems": 8,
            "minItems": 1,
            "type": "array"
          },
          "organizerEmail": {
            "description": "The organizer's email.",
            "format": "email",
            "type": "string"
          },
          "organizerName": {
            "description": "The organizer's name (shown on the poll).",
            "minLength": 1,
            "type": "string"
          },
          "timeZone": {
            "description": "IANA time zone for the poll's displayed times, e.g. \"America/New_York\". Defaults to UTC.",
            "type": "string"
          },
          "title": {
            "description": "The meeting title, e.g. \"Q3 planning sync\".",
            "minLength": 1,
            "type": "string"
          },
          "to": {
            "description": "ISO-8601 end of the search window.",
            "type": "string"
          }
        },
        "required": [
          "title",
          "handles",
          "organizerName",
          "organizerEmail"
        ],
        "type": "object"
      },
      "name": "create_group_event"
    },
    {
      "description": "Given several Lucie hosts (by @handle), return the meeting times when ALL of them are free — the intersection of their availability — for a meeting of the given length. Read-only: never books, never exposes anyone's raw calendar (only the shared open slots). Use it to propose a group time. Times are absolute instants; pass viewerTimeZone so they show in the organizer's local zone.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "additionalProperties": false,
        "properties": {
          "durationMinutes": {
            "description": "Meeting length in minutes. Must be one every participant offers. Defaults to 30.",
            "exclusiveMinimum": 0,
            "type": "integer"
          },
          "from": {
            "description": "ISO-8601 start of the search window.",
            "type": "string"
          },
          "handles": {
            "description": "The participants' booking handles, e.g. [\"@alice\", \"@bob\"]. The leading @ is optional.",
            "items": {
              "type": "string"
            },
            "maxItems": 8,
            "minItems": 1,
            "type": "array"
          },
          "to": {
            "description": "ISO-8601 end of the search window.",
            "type": "string"
          },
          "viewerTimeZone": {
            "description": "The organizer's IANA time zone, e.g. \"America/New_York\". Common times are shown in this zone. Defaults to UTC.",
            "type": "string"
          }
        },
        "required": [
          "handles"
        ],
        "type": "object"
      },
      "name": "find_group_times"
    }
  ]
}

What the leaf hashes

{"body":"00c3862399d4167a686d8f4b287ec7121283c14c24625c4c078b7b6399321cfe","id":304608,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793055980363922,"prev":null,"subject":"2b63428c-d787-44f2-b848-9ccb22f8a6d7","subject_kind":"endpoint"}

Proof

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

  1. 0xcb1933490c6c01e06e6fceb4945b36bf71b36a0f93c01e45e8953fe771ec91bd
  2. 0x5b7084d51fa8552b923c205183d79b073bbdd36d7b362b912edd0cb71ceb6119
  3. 0x145317365adb813a1437a837ab10ece8fc87ac90c11bd54d2f4d8facf6fad380
  4. 0x44788a2896abee59839d6acbcc33113f8a0e3f5ce596ba93df9d2e1c0de9f7c0
  5. 0x9236d84d81231d4a9c0b677940e514c457ab6239b05793adce4788eb18a42f9c
  6. 0x1f1de0473ac968f7001d96462d922a148611697d3b36e349913d51a0c970856f
  7. 0xa884f134f1fc2a1da10141a1b680601b7df24fa6ab83fab177772209d2c112c1
  8. 0xb6bace605fd360da2c6c73e5667ed2942f4d76802a25f3b3c9e09090cdf8bed2
  9. 0x00fbcc59345b153dcb2b8f8346c33167365a33678310565bab22cd4cf59deac1
  10. 0x9789df0b68a0c56f96db447ac03549df4b97c545b493a676ef441af41eab593b
  11. 0xd854065b5246baf332a9ace158b6f99219183612c97d95e881ab7a7e7fb3bd6b
  12. 0x02a11c0460d1a42b6246e1c715f0c3098d82c39154a56e918e2c22b56ca2c978
  13. 0x985acd37cc044d5aa6ad959194da8e91c81045df83517891ed92f1763a9ab825
  14. 0x5b20d8aab05225a3497eadcce89d2e2a586a510fb31334793d3f46f88f0157c5
  15. 0xe94ca5b798e9899ad611e57835af42266e20f53f44977e487d81365e30972beb
  16. 0x703f95866af09c5e5d6ead7411e9a10f964a41a2aff64d4a55ff0053c023a023
  17. 0xd0651cb9bc8155eb52b5247d506e74b8a935057dc190ba52091702ac25ed3a40
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON