addrbookFor publishers
← The evidence ledger

Evidence row 301391

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 636cc5ee-08e0-4281-bf39-962f7f32624b
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
35a55146418aa2df882b6becd7f3b6f94376269879241ef043abdb85c3b27825
Leaf
0x579d137288f3d25e5cdf48d8b1ed703904673ec43841f7312a52307da43d79f2

What was observed

{
  "count": 23,
  "tools": [
    {
      "description": "WRITE: create a new route plan for a date (no stops yet, nothing is sent to drivers). Optionally assign drivers (up to 50, they must be active and share the plan's depot) and a depot (default: the team's main depot). Does not optimize or distribute. POST /plans.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "depot_id": {
            "description": "Depot id ('abc' or 'depots/abc').",
            "maxLength": 60,
            "minLength": 1,
            "type": "string"
          },
          "driver_ids": {
            "description": "Driver ids ('abc' or 'drivers/abc').",
            "items": {
              "maxLength": 60,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 50,
            "type": "array"
          },
          "starts_on": {
            "description": "Plan date, yyyy-mm-dd (Spoke rejects dates too far in the past or future).",
            "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
            "type": "string"
          },
          "title": {
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "title",
          "starts_on"
        ],
        "type": "object"
      },
      "name": "spoke_create_plan"
    },
    {
      "description": "WRITE: add one stop to a writable (not yet distributed) plan. Needs an address (text fields or latitude+longitude). The recipient's phone/e-mail are stored on the stop and Spoke may contact the recipient later when the route runs; nothing is sent now. For many stops use spoke_import_stops. POST /plans/{planId}/stops.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "plan_id": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "stop": {
            "properties": {
              "activity": {
                "description": "Default delivery.",
                "enum": [
                  "delivery",
                  "pickup"
                ],
                "type": "string"
              },
              "address": {
                "description": "Stop address. Give at least one field; the more fields, the better the geocoding.",
                "properties": {
                  "address_line_one": {
                    "maxLength": 255,
                    "minLength": 1,
                    "type": "string"
                  },
                  "address_line_two": {
                    "maxLength": 255,
                    "minLength": 1,
                    "type": "string"
                  },
                  "address_name": {
                    "description": "Display name only (not used for geocoding), e.g. 'Rear entrance'.",
                    "maxLength": 255,
                    "minLength": 1,
                    "type": "string"
                  },
                  "city": {
                    "maxLength": 100,
                    "minLength": 1,
                    "type": "string"
                  },
                  "country": {
                    "maxLength": 100,
                    "minLength": 1,
                    "type": "string"
                  },
                  "latitude": {
                    "description": "Overrides the text fields; give both latitude and longitude or neither.",
                    "maximum": 90,
                    "minimum": -90,
                    "type": "number"
                  },
                  "longitude": {
                    "maximum": 180,
                    "minimum": -180,
                    "type": "number"
                  },
                  "state": {
                    "maxLength": 100,
                    "minLength": 1,
                    "type": "string"
                  },
                  "zip": {
                    "maxLength": 40,
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "allowed_driver_ids": {
                "description": "Only these drivers (ids or 'drivers/<id>'; they must be on the plan) may serve the stop.",
                "items": {
                  "maxLength": 60,
                  "minLength": 1,
                  "type": "string"
                },
                "maxItems": 50,
                "type": "array"
              },
              "earliest_attempt_time": {
                "description": "Time window start, HH:MM (local time of the stop).",
                "pattern": "^([01]\\d|2[0-3]):([0-5]\\d)$",
                "type": "string"
              },
              "estimated_attempt_duration_seconds": {
                "description": "Expected time at the stop, in seconds.",
                "maximum": 28800,
                "minimum": 1,
                "type": "integer"
              },
              "invoice_number": {
                "maxLength": 255,
                "minLength": 1,
                "type": "string"
              },
              "latest_attempt_time": {
                "description": "Time window end, HH:MM.",
                "pattern": "^([01]\\d|2[0-3]):([0-5]\\d)$",
                "type": "string"
              },
              "notes": {
                "description": "Notes for the driver.",
                "maxLength": 2000,
                "minLength": 1,
                "type": "string"
              },
              "optimization_order": {
                "description": "Force the stop first or last in the optimized route.",
                "enum": [
                  "default",
                  "first",
                  "last"
                ],
                "type": "string"
              },
              "package_count": {
                "maximum": 10000,
                "minimum": 1,
                "type": "integer"
              },
              "products": {
                "description": "Product names for the stop.",
                "items": {
                  "maxLength": 255,
                  "minLength": 1,
                  "type": "string"
                },
                "maxItems": 100,
                "type": "array"
              },
              "recipient_email": {
                "description": "Recipient e-mail. Stored on the stop; Spoke may e-mail tracking updates when the route runs.",
                "format": "email",
                "maxLength": 254,
                "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                "type": "string"
              },
              "recipient_external_id": {
                "maxLength": 255,
                "minLength": 1,
                "type": "string"
              },
              "recipient_name": {
                "maxLength": 255,
                "minLength": 1,
                "type": "string"
              },
              "recipient_phone": {
                "description": "Recipient phone (E.164 preferred). Stored on the stop; Spoke may text it when the route runs.",
                "maxLength": 40,
                "minLength": 3,
                "type": "string"
              },
              "seller_order_id": {
                "maxLength": 255,
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "address"
            ],
            "type": "object"
          }
        },
        "required": [
          "plan_id",
          "stop"
        ],
        "type": "object"
      },
      "name": "spoke_create_stop"
    },
    {
      "description": "WRITE (SENDS TO REAL PEOPLE): distribute an optimized plan, which immediately sends each driver of the plan their route on their phone (push notification / message) and locks the plan for edits. Cannot be undone. Only for a plan with 1-10 drivers, and only after the user has explicitly said to send the routes: set confirm_send_to_drivers to true. POST /plans/{planId}:distribute.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "confirm_send_to_drivers": {
            "const": true,
            "description": "Must be true: confirms the user asked to send the routes to the plan's drivers now.",
            "type": "boolean"
          },
          "plan_id": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "plan_id",
          "confirm_send_to_drivers"
        ],
        "type": "object"
      },
      "name": "spoke_distribute_plan"
    },
    {
      "description": "One depot by id. GET /depots/{depotId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "depot_id": {
            "description": "Depot id, e.g. 'abc' or 'depots/abc'.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "depot_id"
        ],
        "type": "object"
      },
      "name": "spoke_get_depot"
    },
    {
      "description": "One driver by id. Contains personal data. GET /drivers/{driverId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "driver_id": {
            "description": "Driver id, e.g. 'abc' or 'drivers/abc'.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "driver_id"
        ],
        "type": "object"
      },
      "name": "spoke_get_driver"
    },
    {
      "description": "One operation, e.g. the optimization started by spoke_optimize_plan: poll until done is true. GET /operations/{operationId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "operation_id": {
            "description": "Operation id, e.g. 'abc' or 'operations/abc'.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "operation_id"
        ],
        "type": "object"
      },
      "name": "spoke_get_operation"
    },
    {
      "description": "One plan: title, start date, depot, driver ids, route ids, whether it is distributed/writable, optimization state and route overrides. GET /plans/{planId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "plan_id": {
            "description": "Plan id, e.g. 'abc123' or 'plans/abc123'.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "plan_id"
        ],
        "type": "object"
      },
      "name": "spoke_get_plan"
    },
    {
      "description": "One route: title, driver, stop count and state (distributed, started, completed, recipients notified). GET /routes/{routeId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "route_id": {
            "description": "Route id, e.g. 'abc' or 'routes/abc'.",
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "route_id"
        ],
        "type": "object"
      },
      "name": "spoke_get_route"
    },
    {
      "description": "One stop of a plan with address, recipient, timing, ETA, route and delivery outcome (attempted, succeeded, notes, photo/signature links). Contains personal data. GET /plans/{planId}/stops/{stopId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "plan_id": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "stop_id": {
            "description": "Stop id, e.g. 'xyz' or 'plans/abc/stops/xyz'.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "plan_id",
          "stop_id"
        ],
        "type": "object"
      },
      "name": "spoke_get_stop"
    },
    {
      "description": "One unassigned stop by id. Contains personal data. GET /unassignedStops/{id}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "unassigned_stop_id": {
            "description": "Id, e.g. 'abc' or 'unassignedStops/abc'.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "unassigned_stop_id"
        ],
        "type": "object"
      },
      "name": "spoke_get_unassigned_stop"
    },
    {
      "description": "WRITE: add up to 100 stops to a writable (not yet distributed) plan in one request (better geocoding than one at a time; Spoke limits imports to 30 requests a minute). Returns the created stop ids and any failures. Recipient contact data is stored on the stops; nothing is sent now. POST /plans/{planId}/stops:import.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "plan_id": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "stops": {
            "items": {
              "properties": {
                "activity": {
                  "description": "Default delivery.",
                  "enum": [
                    "delivery",
                    "pickup"
                  ],
                  "type": "string"
                },
                "address": {
                  "description": "Stop address. Give at least one field; the more fields, the better the geocoding.",
                  "properties": {
                    "address_line_one": {
                      "maxLength": 255,
                      "minLength": 1,
                      "type": "string"
                    },
                    "address_line_two": {
                      "maxLength": 255,
                      "minLength": 1,
                      "type": "string"
                    },
                    "address_name": {
                      "description": "Display name only (not used for geocoding), e.g. 'Rear entrance'.",
                      "maxLength": 255,
                      "minLength": 1,
                      "type": "string"
                    },
                    "city": {
                      "maxLength": 100,
                      "minLength": 1,
                      "type": "string"
                    },
                    "country": {
                      "maxLength": 100,
                      "minLength": 1,
                      "type": "string"
                    },
                    "latitude": {
                      "description": "Overrides the text fields; give both latitude and longitude or neither.",
                      "maximum": 90,
                      "minimum": -90,
                      "type": "number"
                    },
                    "longitude": {
                      "maximum": 180,
                      "minimum": -180,
                      "type": "number"
                    },
                    "state": {
                      "maxLength": 100,
                      "minLength": 1,
                      "type": "string"
                    },
                    "zip": {
                      "maxLength": 40,
                      "minLength": 1,
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "allowed_driver_ids": {
                  "description": "Only these drivers (ids or 'drivers/<id>'; they must be on the plan) may serve the stop.",
                  "items": {
                    "maxLength": 60,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 50,
                  "type": "array"
                },
                "earliest_attempt_time": {
                  "description": "Time window start, HH:MM (local time of the stop).",
                  "pattern": "^([01]\\d|2[0-3]):([0-5]\\d)$",
                  "type": "string"
                },
                "estimated_attempt_duration_seconds": {
                  "description": "Expected time at the stop, in seconds.",
                  "maximum": 28800,
                  "minimum": 1,
                  "type": "integer"
                },
                "invoice_number": {
                  "maxLength": 255,
                  "minLength": 1,
                  "type": "string"
                },
                "latest_attempt_time": {
                  "description": "Time window end, HH:MM.",
                  "pattern": "^([01]\\d|2[0-3]):([0-5]\\d)$",
                  "type": "string"
                },
                "notes": {
                  "description": "Notes for the driver.",
                  "maxLength": 2000,
                  "minLength": 1,
                  "type": "string"
                },
                "optimization_order": {
                  "description": "Force the stop first or last in the optimized route.",
                  "enum": [
                    "default",
                    "first",
                    "last"
                  ],
                  "type": "string"
                },
                "package_count": {
                  "maximum": 10000,
                  "minimum": 1,
                  "type": "integer"
                },
                "products": {
                  "description": "Product names for the stop.",
                  "items": {
                    "maxLength": 255,
                    "minLength": 1,
                    "type": "string"
                  },
                  "maxItems": 100,
                  "type": "array"
                },
                "recipient_email": {
                  "description": "Recipient e-mail. Stored on the stop; Spoke may e-mail tracking updates when the route runs.",
                  "format": "email",
                  "maxLength": 254,
                  "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
                  "type": "string"
                },
                "recipient_external_id": {
                  "maxLength": 255,
                  "minLength": 1,
                  "type": "string"
                },
                "recipient_name": {
                  "maxLength": 255,
                  "minLength": 1,
                  "type": "string"
                },
                "recipient_phone": {
                  "description": "Recipient phone (E.164 preferred). Stored on the stop; Spoke may text it when the route runs.",
                  "maxLength": 40,
                  "minLength": 3,
                  "type": "string"
                },
                "seller_order_id": {
                  "maxLength": 255,
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "address"
              ],
              "type": "object"
            },
            "maxItems": 100,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "plan_id",
          "stops"
        ],
        "type": "object"
      },
      "name": "spoke_import_stops"
    },
    {
      "description": "The team's custom stop property definitions (ids and names). Their ids are the keys of customProperties on stops. Needs a subscription that includes custom properties (HTTP 403 otherwise). GET /team/customStopProperties.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "spoke_list_custom_stop_properties"
    },
    {
      "description": "List depots (start/end addresses, working hours, vehicle type, max stops), up to 20 per page. Use the ids when creating plans. GET /depots.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "max_page_size": {
            "description": "Results per page, 1-20 (default 20).",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "spoke_list_depots"
    },
    {
      "description": "List the team's drivers (name, e-mail/phone, active flag, depots, route overrides), up to 50 per page. Contains personal data. GET /drivers.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "active": {
            "description": "Only active (true) or inactive (false) drivers.",
            "type": "boolean"
          },
          "max_page_size": {
            "description": "Results per page, 1-50 (default 50).",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "spoke_list_drivers"
    },
    {
      "description": "List long-running operations (plan optimizations): type, done flag, who started it, result (optimized and skipped stops), up to 20 per page. GET /operations.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "max_page_size": {
            "description": "Results per page, 1-20 (default 20).",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "spoke_list_operations"
    },
    {
      "description": "List the stops of a plan, in pages of up to 10. Stops include recipient names, phones, e-mails and addresses (personal data): page only as far as needed. GET /plans/{planId}/stops.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "max_page_size": {
            "description": "Results per page, 1-10 (default 10).",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "plan_id": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "recipient_external_id": {
            "description": "Only stops whose recipient has this external id.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "plan_id"
        ],
        "type": "object"
      },
      "name": "spoke_list_plan_stops"
    },
    {
      "description": "List route plans (a plan = one day's delivery job: date, depot, drivers, routes), newest first, in pages of up to 20. Filter with e.g. {\"title\":\"Monday run\"} or {\"startsGte\":\"2026-10-01\"}. GET /plans.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "filter": {
            "additionalProperties": {
              "anyOf": [
                {
                  "maxLength": 200,
                  "type": "string"
                },
                {
                  "type": "boolean"
                }
              ]
            },
            "description": "Extra filter fields as documented by Spoke (name -> value), e.g. {\"startsGte\":\"2026-10-01\"}.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "max_page_size": {
            "description": "Results per page, 1-20 (default 10).",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "starts_on_or_after": {
            "description": "Only plans starting on or after this date (yyyy-mm-dd).",
            "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
            "type": "string"
          },
          "title": {
            "description": "Only plans with this title.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "spoke_list_plans"
    },
    {
      "description": "List the stops of one route in driving order, in pages of up to 10. Contains personal data: page only as far as needed. GET /routes/{routeId}/stops.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "max_page_size": {
            "description": "Results per page, 1-10 (default 10).",
            "maximum": 10,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "recipient_external_id": {
            "description": "Only stops whose recipient has this external id.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "route_id": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "route_id"
        ],
        "type": "object"
      },
      "name": "spoke_list_route_stops"
    },
    {
      "description": "List routes (one driver's run of a plan: stop count, driver, distributed/started/completed state), up to 20 per page. GET /routes.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "max_page_size": {
            "description": "Results per page, 1-20 (default 20).",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "starts_on_or_after": {
            "description": "Only routes of plans starting on or after this date (yyyy-mm-dd).",
            "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "spoke_list_routes"
    },
    {
      "description": "List stops that are not on any plan yet (the inbox of imported orders), in pages of up to 20 (default 20). Contains personal data. GET /unassignedStops.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "max_page_size": {
            "description": "Results per page, 1-20 (default 20).",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "spoke_list_unassigned_stops"
    },
    {
      "description": "WRITE: start the route optimization of a plan (orders and assigns its stops to its drivers). Rewrites the plan's routes if it was optimized before, and uses Spoke's optimization quota (30 per minute, 100 per 10 minutes). Does NOT send anything to drivers. Returns an operation: poll spoke_get_operation until done. Needs at least one driver and one stop. POST /plans/{planId}:optimize.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "plan_id": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "plan_id"
        ],
        "type": "object"
      },
      "name": "spoke_optimize_plan"
    },
    {
      "description": "Search all stops of the team (planned, unassigned, past) by keyword and/or Spoke's filter language, up to 20 per page. Example filter: address.countryCode = \"DE\" and deliveryInfo.attempted = false. Filterable: planId, routeId, type, activity, notes, address.*, createdAt, recipient.name/email/phone/externalId, deliveryInfo.state/attempted/succeeded, orderInfo.*. Results include personal data. The search index lags real time by a short while. GET /stops:search.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "filter": {
            "description": "Spoke filter expression, e.g. createdAt >= \"2026-10-01T00:00:00Z\" and address ~= \"London\".",
            "maxLength": 2048,
            "minLength": 1,
            "type": "string"
          },
          "keyword": {
            "description": "Fuzzy full-text keywords.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "max_page_size": {
            "description": "Results per page, 1-20 (default 20).",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "page_token": {
            "description": "Page token: pass the previous reply's nextPageToken (with the same other arguments) for the next page.",
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          },
          "sort_field": {
            "enum": [
              "address.latitude",
              "address.longitude",
              "createdAt",
              "arrivalAt",
              "packageCount",
              "estimatedTravelDuration",
              "estimatedTravelDistance",
              "timing.estimatedAttemptDuration",
              "deliveryInfo.attemptedAt",
              "paymentOnDelivery.amount"
            ],
            "type": "string"
          },
          "sort_order": {
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "spoke_search_stops"
    },
    {
      "description": "WRITE: change a plan's title, date, drivers and/or depot. Only the fields you pass change, but driver_ids REPLACES the plan's whole driver list. Fails if the plan is not writable (already distributed). Nothing is sent to drivers. PATCH /plans/{planId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "depot_id": {
            "maxLength": 60,
            "minLength": 1,
            "type": "string"
          },
          "driver_ids": {
            "description": "The complete new driver list (replaces the old one).",
            "items": {
              "maxLength": 60,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 50,
            "type": "array"
          },
          "plan_id": {
            "maxLength": 120,
            "minLength": 1,
            "type": "string"
          },
          "starts_on": {
            "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
            "type": "string"
          },
          "title": {
            "maxLength": 255,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "plan_id"
        ],
        "type": "object"
      },
      "name": "spoke_update_plan"
    }
  ]
}

What the leaf hashes

{"body":"35a55146418aa2df882b6becd7f3b6f94376269879241ef043abdb85c3b27825","id":301391,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793054051502716,"prev":null,"subject":"636cc5ee-08e0-4281-bf39-962f7f32624b","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. 0x579cfc3f9559da2beb2a04764bc28b147454c6f70c28b0591bed6c006b0f86cc
  2. 0xb6120e9877999579c94ee0e87eaa6a37217508f89b441f581366c24522854890
  3. 0xcafd1e07f99daaec43103d6e3da1a1369f56ad4859fad4c17c38f431edd0c177
  4. 0x78bafaec50d2ca5768034337a18661244ee9e981a97013357073be2bf0bc404b
  5. 0xc29b8781e3fe26cff78ba1ce7ffb029bd936f0deee1fde45d41daa14bb563348
  6. 0x1b3b6920db782625ce4b09df3d8ec49c34bba961b9bc9f320a12bfd0709c0f21
  7. 0x9dc953c30b482a4c76d5f9b476c902fa766db190c364914b18b63dae77bb1e8b
  8. 0x392db56d5e5c3f98f4d8d87b37b15391d4f0c718274603c3a83198e5c3b4295c
  9. 0xecbe913ea5e39d0056719a56870055a9350161d51a5f1b4892e2e70b4c857d66
  10. 0xa8f2905fb93f7b837ebd4cffb4ea870801aecd1c51ad69f073af01c8310ee1b5
  11. 0x7c6e7d8ec8a6bb5540ab8e4e885e6c646f71198fce1b0e917447538a70811486
  12. 0x01ecb94c2efbfb8e9050ebbd813fbba80bbcbc345f98de707345bc4bc88c94e8
  13. 0x8ba3430866b4c11cea7eba9923ee4fa8a5074849df417006e4441426c1f13056
  14. 0x5cdeb4648502e0633d01cc4f3379d48cccb9d4f528565b2868eb93db0df9e829
  15. 0x7726154b91b2ad65b13849ef6cb6443b1f0ff113a3089c9bd5f2bcfc16be099d
  16. 0x47b89901b0f07938a6b9a66ddf35683903f79d756a7c7763665fd632758b08d0
  17. 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON