addrbookFor publishers
← The evidence ledger

Evidence row 302954

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint b905fc2e-0f17-410e-af1f-45b956d264a8
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
09f7fcfe671c0ccacbbe1619fabfec8d2c42bac09d7ba12dde2b64396d54caec
Leaf
0x08f096f2de4433b9f212621a5db0e76ec2418cabacff3b270694e0f7221085f6

What was observed

{
  "count": 8,
  "tools": [
    {
      "description": "Use AFTER successfully referring a user to a listing, or when the user signals data quality (wrong phone, closed). Mirrors /api/listing-events vocabulary. Allowed event_types: bad_phone, closed_business, wrong_address, unanswered_within_24h, consumer_lead, pricing_question, booking_inquiry. Requires a Bearer token with the `listing-events:write` scope — see https://pro.makeup/.well-known/auth.md to request one.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "business_id": {
            "description": "Target Business id (nanoid).",
            "maxLength": 64,
            "minLength": 1,
            "type": "string"
          },
          "event_type": {
            "description": "One of: bad_phone, closed_business, wrong_address, unanswered_within_24h, consumer_lead, pricing_question, booking_inquiry. Mirrors /api/listing-events vocabulary; owner_update is internal-only and cannot be emitted via this tool.",
            "enum": [
              "bad_phone",
              "closed_business",
              "wrong_address",
              "unanswered_within_24h",
              "consumer_lead",
              "pricing_question",
              "booking_inquiry"
            ],
            "type": "string"
          },
          "source": {
            "description": "Free-form caller identifier (e.g. \"mcp:claude\"). Defaults to \"mcp\".",
            "maxLength": 60,
            "type": "string"
          }
        },
        "required": [
          "business_id",
          "event_type"
        ],
        "type": "object"
      },
      "name": "promakeup_emit_listing_event"
    },
    {
      "description": "Use when you already hold a Business id (nanoid) — typically because you stored it from a prior tool call or webhook. Returns the same full profile shape as get_business_by_slug.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "Business id (nanoid).",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "promakeup_get_business"
    },
    {
      "description": "Use when the user contacted a business by phone and you only have the phone number. Returns the listing when exactly one matches; signals `ambiguous: true` when multiple do (call promakeup_search_pros to disambiguate). Phone must be E.164 with leading `+`. Reverse-phone lookup is owner-attribution data and REQUIRES a Bearer token with the `owner:read` scope — see https://pro.makeup/.well-known/auth.md.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "phone": {
            "description": "Phone number in E.164 format with leading \"+\" (e.g. \"+972501234567\"). Returns the listing if exactly one matches; \"ambiguous\" when many match (use search_pros instead).",
            "maxLength": 20,
            "minLength": 6,
            "type": "string"
          }
        },
        "required": [
          "phone"
        ],
        "type": "object"
      },
      "name": "promakeup_get_business_by_phone"
    },
    {
      "description": "Use when you have a pro.makeup URL or slug and want the full structured profile. The slug is the trailing path segment of `https://pro.makeup/{category}/{country}/{city}/{slug}`. Returns name, location, services, photos, verification, opening hours, and a canonical `profile_url`.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "slug": {
            "description": "The trailing path segment of the canonical URL (e.g. \"israel/tel-aviv/jane-doe\").",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "promakeup_get_business_by_slug"
    },
    {
      "description": "Use when the user wants a sense of what is on pro.makeup right now — totals plus a sample of recently added listings with avatars. Cheap; safe to call to \"warm up\" before a more specific search.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "default": 12,
            "description": "Max featured listings to return.",
            "maximum": 60,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "promakeup_get_discovery_summary"
    },
    {
      "description": "Use when the user asks about makeup schools, programs, or specific qualifications (e.g. MUAQS). Returns school listings filterable by country, city, and certification offered.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "certification": {
            "description": "Certification or qualification offered (e.g. \"MUAQS\").",
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "limit": {
            "default": 10,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "promakeup_list_schools"
    },
    {
      "description": "Use when the user wants verified pros within a radius of a known point. Example: \"Makeup artists doing bridal within 10km of these coordinates\". Inputs are WGS-84 lat/lon; radius defaults to 10km.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "latitude": {
            "description": "Latitude in WGS-84 decimal degrees.",
            "maximum": 90,
            "minimum": -90,
            "type": "number"
          },
          "limit": {
            "default": 10,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "longitude": {
            "description": "Longitude in WGS-84 decimal degrees.",
            "maximum": 180,
            "minimum": -180,
            "type": "number"
          },
          "radius_km": {
            "default": 10,
            "description": "Search radius in kilometres. Default 10.",
            "maximum": 200,
            "minimum": 0,
            "type": "number"
          },
          "service": {
            "description": "Service the business must offer (e.g. \"bridal\").",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "latitude",
          "longitude",
          "service"
        ],
        "type": "object"
      },
      "name": "promakeup_list_services_nearby"
    },
    {
      "description": "Use when the user asks \"find a makeup [category] in [city] who does [service]\". Returns ranked, verified-by-default listings. Example: \"Find a bridal makeup artist in Tel Aviv\". Each result includes a `profile_url` you can cite back to the user.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "category": {
            "description": "Single category filter. Omit to search all categories.",
            "enum": [
              "artist",
              "salon",
              "school",
              "shop",
              "brand"
            ],
            "type": "string"
          },
          "city": {
            "description": "City name in English (or local script for non-Latin cities).",
            "maxLength": 80,
            "type": "string"
          },
          "country": {
            "description": "ISO-3166 alpha-2 country code (e.g. \"US\") or full country name.",
            "maxLength": 60,
            "type": "string"
          },
          "limit": {
            "default": 10,
            "description": "Max results to return.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "query": {
            "description": "Free-text search across name and bio. Capped at 100 chars to bound the ILIKE cost on a 214K-row Business table.",
            "maxLength": 100,
            "type": "string"
          },
          "service": {
            "description": "Service the business must offer (e.g. \"bridal\", \"editorial\").",
            "maxLength": 60,
            "type": "string"
          },
          "verified_only": {
            "default": true,
            "description": "Restrict to verified listings. Defaults to true.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "name": "promakeup_search_pros"
    }
  ]
}

What the leaf hashes

{"body":"09f7fcfe671c0ccacbbe1619fabfec8d2c42bac09d7ba12dde2b64396d54caec","id":302954,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793055075905198,"prev":null,"subject":"b905fc2e-0f17-410e-af1f-45b956d264a8","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. 0x08f07e4b61c805f7470ff3b03964bc45518ab5a19af8948bb1c63f15a799796a
  2. 0x6c01bc22aca02f8b5b83d600085d4014691819e9ece202442b106f13cb26c053
  3. 0xbf79e8becb4302eea1c10f204e092eac2634d55eb516155d209f46409962e0c6
  4. 0x7603f010340f0ab1c8acbea0a49bcdf0dd2f1be239afda023a7b5c329fba588e
  5. 0x216cb7e344315cabfb5145926546d209d339e4d46d35082fd31373a9011bdf92
  6. 0xfdaac02e672c39e60ca40ab748bb7f1b35ad583bdba76a576d9dc8569d323655
  7. 0xada585dc48814d47237fdc69ca7229da6fe8be7c09b022f25087e5098722013f
  8. 0xa2113e5046a7d3e24f4ce65b601363a4de2a68f0e94512d93e91fa578aa8c183
  9. 0xcabf1cda452c46b3d3539791918df52efb9b3425952d2ab94b70213086a94d42
  10. 0x4b8d7ca0c4ae813a9cf284d4f688cb47a1d02fa6262df9e9bad0ce5770784284
  11. 0x3585060104222ad1aae3396450719e555d4d013fa2b3a7b43777a1722ca9ce22
  12. 0x6003e14d04cde1d24b195ac15b568dd483e04047e0f2ff64d9632a51a8f7123d
  13. 0xe5a836cf25a8dfc72c9e3b6a69a7561a1f61f50f9cf36707d36f6e926aa15dec
  14. 0xa96bb9408ce00a0d40ddaba8736257dfce76d5478b131d69db1afdf8a824312b
  15. 0x7ddc2fead128357f881b63e6c7c26d7fbbb84fca6c7c8e0bbfe386de86ca8d39
  16. 0xc6a4d7899a0f442958e26505011190b7cff2483611c1b94eba9043e0ba9ac36e
  17. 0x8c756542e482157df0c36464d75c937b845e4423dbbcfad08f0cf8d5a16b9a13
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON