← The evidence ledger
Evidence row 567738
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint ad9418c3-db91-42e1-a735-03d9aa7c6fce
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- d744bbeb24a4de30177fc801c858de4d4d4f254dd1279f37ec36e463b4c7ee95
- Leaf
- 0xb8b9581397244c6b142d839d8e9ac7cb84c5ffad16c8c515ad59fb5fba7ee9fb
What was observed
{
"count": 7,
"tools": [
{
"description": "Check whether a French postcode is in the service area.",
"inputSchema": {
"properties": {
"postcode": {
"description": "5-digit French postcode, e.g. 75011",
"type": "string"
}
},
"required": [
"postcode"
],
"type": "object"
},
"name": "check_area"
},
{
"description": "Creates a home-cleaning booking for the price, date and arrival window the customer agreed to, and returns a secure Stripe payment_url. The booking is confirmed when the customer opens payment_url and saves a card (charged after the cleaning). The link is also emailed to the customer. Requires customer_confirmed = true and extras_offered = true (ask about extras first).",
"inputSchema": {
"properties": {
"address": {
"properties": {
"apartment": {
"description": "Floor, door code, apartment",
"type": "string"
},
"city": {
"type": "string"
},
"postcode": {
"type": "string"
},
"street": {
"type": "string"
}
},
"required": [
"street",
"postcode",
"city"
],
"type": "object"
},
"agent_name": {
"description": "Name of the assistant/app making the booking",
"type": "string"
},
"arrival_window": {
"description": "Start of the 2-hour arrival window from get_time_slots, e.g. \"14:00\"",
"type": "string"
},
"bathrooms": {
"default": 1,
"maximum": 7,
"minimum": 1,
"type": "integer"
},
"bedrooms": {
"description": "Number of bedrooms (studio = 1)",
"maximum": 7,
"minimum": 1,
"type": "integer"
},
"condition": {
"description": "ASK the customer, never assume: when the home last had a thorough (professional) clean. recent (<1 month), one_to_six_months, over_six_months (or never). First cleanings are rarely recent.",
"enum": [
"recent",
"one_to_six_months",
"over_six_months"
],
"type": "string"
},
"customer": {
"properties": {
"email": {
"format": "email",
"type": "string"
},
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"phone": {
"description": "Mobile, with country code if not French",
"type": "string"
}
},
"required": [
"first_name",
"last_name",
"email",
"phone"
],
"type": "object"
},
"customer_confirmed": {
"description": "true = the customer saw the price and details and asked to book",
"type": "boolean"
},
"date": {
"description": "YYYY-MM-DD (today adds a same-day surcharge)",
"format": "date",
"type": "string"
},
"extras": {
"description": "Extras from get_services. Ask the customer before quoting a first cleaning: most add at least one (inside the oven id 11, inside the fridge id 10, windows id 15 with quantity, changing sheets id 12; move-out: Fin de bail id 18). e.g. [{\"id\":11},{\"id\":15,\"quantity\":4}]",
"items": {
"properties": {
"id": {
"type": "integer"
},
"quantity": {
"minimum": 1,
"type": "integer"
}
},
"required": [
"id"
],
"type": "object"
},
"type": "array"
},
"extras_offered": {
"description": "true = you asked the customer which extras they want (oven, fridge, windows, sheets...), even if they chose none",
"type": "boolean"
},
"frequency": {
"default": "once",
"description": "once, weekly, biweekly (every 2 weeks) or monthly — recurring plans get a discount",
"enum": [
"once",
"biweekly",
"weekly",
"monthly"
],
"type": "string"
},
"furnished_occupied": {
"default": false,
"description": "Home is furnished and lived in",
"type": "boolean"
},
"high_ceilings": {
"default": false,
"description": "Haussmann building / ceilings over 3 m",
"type": "boolean"
},
"notes": {
"description": "Access, pets, priorities...",
"type": "string"
},
"surface_m2": {
"description": "Living area in m² (optional, improves accuracy)",
"type": "integer"
}
},
"required": [
"bedrooms",
"condition",
"date",
"arrival_window",
"customer",
"address",
"customer_confirmed",
"extras_offered"
],
"type": "object"
},
"name": "create_booking"
},
{
"description": "Price range for a post-construction cleaning (nettoyage fin de travaux / fin de chantier) in Paris/Île-de-France, same calculation as the estimator on menageparfait.fr: HT and TTC (VAT 20%).",
"inputSchema": {
"properties": {
"condition": {
"default": "standard",
"description": "light = lightly soiled; standard = renovation; heavy = heavy works or new build",
"enum": [
"light",
"standard",
"heavy"
],
"type": "string"
},
"floor_stripping": {
"default": false,
"description": "Cement film / floor stripping",
"type": "boolean"
},
"premises": {
"default": "apartment",
"enum": [
"apartment",
"house",
"office",
"shop"
],
"type": "string"
},
"rubble_removal": {
"default": false,
"description": "Light rubble removal",
"type": "boolean"
},
"surface_m2": {
"description": "Floor area in m²",
"minimum": 1,
"type": "number"
},
"urgent": {
"default": false,
"description": "Within 48 h, at a weekend or outside 7:00–20:00",
"type": "boolean"
},
"windows": {
"default": false,
"description": "Windows inside and out",
"type": "boolean"
}
},
"required": [
"surface_m2"
],
"type": "object"
},
"name": "get_post_construction_estimate"
},
{
"description": "Exact price (same calculation as menageparfait.fr): TTC (show this to the customer), HT, VAT, and the cost after the 50% tax credit if the customer is eligible.",
"inputSchema": {
"properties": {
"bathrooms": {
"default": 1,
"maximum": 7,
"minimum": 1,
"type": "integer"
},
"bedrooms": {
"description": "Number of bedrooms (studio = 1)",
"maximum": 7,
"minimum": 1,
"type": "integer"
},
"condition": {
"description": "ASK the customer, never assume: when the home last had a thorough (professional) clean. recent (<1 month), one_to_six_months, over_six_months (or never). First cleanings are rarely recent.",
"enum": [
"recent",
"one_to_six_months",
"over_six_months"
],
"type": "string"
},
"date": {
"description": "YYYY-MM-DD (today adds a same-day surcharge)",
"format": "date",
"type": "string"
},
"extras": {
"description": "Extras from get_services. Ask the customer before quoting a first cleaning: most add at least one (inside the oven id 11, inside the fridge id 10, windows id 15 with quantity, changing sheets id 12; move-out: Fin de bail id 18). e.g. [{\"id\":11},{\"id\":15,\"quantity\":4}]",
"items": {
"properties": {
"id": {
"type": "integer"
},
"quantity": {
"minimum": 1,
"type": "integer"
}
},
"required": [
"id"
],
"type": "object"
},
"type": "array"
},
"frequency": {
"default": "once",
"description": "once, weekly, biweekly (every 2 weeks) or monthly — recurring plans get a discount",
"enum": [
"once",
"biweekly",
"weekly",
"monthly"
],
"type": "string"
},
"furnished_occupied": {
"default": false,
"description": "Home is furnished and lived in",
"type": "boolean"
},
"high_ceilings": {
"default": false,
"description": "Haussmann building / ceilings over 3 m",
"type": "boolean"
},
"surface_m2": {
"description": "Living area in m² (optional, improves accuracy)",
"type": "integer"
}
},
"required": [
"bedrooms",
"condition"
],
"type": "object"
},
"name": "get_quote"
},
{
"description": "Ménage Parfait home-cleaning offer in Paris/Île-de-France: price grid (TTC and HT), extras with ids, frequency discounts, area, payment, and when the 50% tax credit may apply.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_services"
},
{
"description": "Dates and 2-hour arrival windows that can be requested (up to 90 days ahead). Windows start between 10:00 and 16:00; no evening bookings.",
"inputSchema": {
"properties": {
"days": {
"default": 14,
"maximum": 31,
"minimum": 1,
"type": "integer"
},
"from_date": {
"format": "date",
"type": "string"
}
},
"type": "object"
},
"name": "get_time_slots"
},
{
"description": "Sends a quote request to Ménage Parfait for office cleaning or post-construction cleaning (reply within 1 business day).",
"inputSchema": {
"properties": {
"address": {
"type": "string"
},
"agent_name": {
"type": "string"
},
"city": {
"type": "string"
},
"company": {
"description": "Required for office cleaning",
"type": "string"
},
"contact_name": {
"type": "string"
},
"details": {
"type": "string"
},
"email": {
"format": "email",
"type": "string"
},
"frequency": {
"description": "e.g. daily, 3x/week, weekly, one-off after works",
"type": "string"
},
"level": {
"description": "For post_construction: light, standard or heavy",
"type": "string"
},
"phone": {
"type": "string"
},
"postcode": {
"type": "string"
},
"preferred_hours": {
"description": "e.g. early morning, evening",
"type": "string"
},
"service": {
"default": "office_regular",
"enum": [
"office_regular",
"post_construction",
"other"
],
"type": "string"
},
"start_date": {
"type": "string"
},
"surface_m2": {
"type": "integer"
}
},
"required": [
"contact_name",
"email",
"phone",
"postcode"
],
"type": "object"
},
"name": "request_office_quote"
}
]
}What the leaf hashes
{"body":"d744bbeb24a4de30177fc801c858de4d4d4f254dd1279f37ec36e463b4c7ee95","id":567738,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793138809309998,"prev":null,"subject":"ad9418c3-db91-42e1-a735-03d9aa7c6fce","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).
- 0xb8b8faa4a48b9f332c07526dec68ced690bc727542e910a6bb7e417b90c5eafa
- 0x675e83548d08121f4e84fa720e79a6f80192ebc3796cacdfcbd5fd3924f95528
- 0x48c3be563288adcd0af25c3e4ca4c8e0ad71b306b21ffb5cbaf06b33f728c61d
- 0xce5c838c4ba62c2d361d892a73f14ffc8825fa3859a8bd3b943b83d5de8a2ff6
- 0x149e8f6514a1b4386a21372ee27d679f143dbf9fec27bd5dfa497629034d433d
- 0xeb61ca59460c5c43c247abad73b6751ccbbaad063f584ffa89bfd819fdf5d2b4
- 0x7ce6b5a4e003b7e279b825640310f28bc2fffa8f95977dd60013c859761b63aa
- 0xcfd91247d6cd2b1c93e0b4f02c324f36eeef357d582b232f8fd2a44330d7df85
- 0x6dfb95b94a0d5110f005476530a0841121e2f1d0234cfa31c6d4f62334dfc4cb
- 0xfe8445b03630a5408303eb2d9bf63d1b3694705bb971e9244e680b9541511e42
- 0x1644f0ff5071dabfbb15c26e84d62ade02f559315ee106046fbad349cf83215e
- 0x159edcfdd12b3eacd95b92f307695c8c00010beadbfcbf272edb59cfef54fb40
- 0xa4f69e2cf941a3f318d70734b59401dd27010a6bdffb5c32a28304db650a6f0b
- 0xa453d1738637a5c663802d07ce095aa340c80d53a4288ae277a72e265868ce4e
- 0x73341bb09dd901ca47f26173883431496e3d98d6b0fb5b89f36218126d46c5d4
- 0xa94627de1af0e823832e05a9069b304ecccb8c0cdb8f9cfc4f2039bfb9799dc5
- 0xdf1105afdc109de3c09a98fc8a3864159ad964e6f49b635c105a27a1e1f14310
- 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
- 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
- Day root
- 0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
- Chained
- 0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
- Published
- On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4