addrbookFor publishers
← The evidence ledger

Evidence row 258520

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 5b5ec3ca-ff17-42de-8700-352107d4c612
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
090aba1c588eb63f21176607c417375283771804c180179a986bf9cb59e9186b
Leaf
0x96695e96066ba058a32a8679664ce6063d964c408099cd4ddce55ea845e0ec82

What was observed

{
  "count": 9,
  "tools": [
    {
      "description": "Creates a LiveVariant test and returns every URL needed to run it, plus a freshly generated stats secret.\n\nPass `variants` to test one element, or `slots` to test several at once (hero image AND call-to-action, say). With slots the test optimizes the COMBINATION: one model learns how the elements interact, which two separate tests structurally cannot see. There is no algorithm to pick either way; every test runs the same joint model, sized from its shape.\n\nBy default, nothing is registered anywhere: the config IS the test, encoded into the URLs, and the test's identity is a hash of it. Pass `publishableKey` on an account-enabled deployment to also register the new test to that key's organization, so it appears under My tests; the config and URLs are still the test, and registration failure is returned as a warning rather than failing the build. Editing a variant later produces a DIFFERENT test with its own empty history, which is usually what you want per campaign but is worth saying out loud to whoever you are building this for.\n\nThe stats secret is returned once and never again. Only its hash goes into the config, so nobody, including this service, can recover it. Give it to the person who will read the results.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "context": {
            "description": "Dimensions to learn a separate winner for.",
            "items": {
              "properties": {
                "from": {
                  "description": "Fill this dimension from a signal the server derives, so the caller never sends it. Network signals (country, device, …) are guessed from the connection and are suppressed for proxied email fetches; utm_* are read off the link and survive a proxy intact, which makes them the reliable choice for email.",
                  "enum": [
                    "country",
                    "continent",
                    "region",
                    "city",
                    "timezone",
                    "device",
                    "language",
                    "organization",
                    "utm_source",
                    "utm_medium",
                    "utm_campaign",
                    "utm_content",
                    "utm_term"
                  ],
                  "type": "string"
                },
                "key": {
                  "description": "Dimension name, e.g. country. Becomes ?c_<key>= on serve URLs.",
                  "minLength": 1,
                  "type": "string"
                },
                "values": {
                  "description": "Allowed values, when they are enumerable. Anything else is rejected at serving time, which is what stops a crafted URL inventing buckets. It also makes the results readable: bucket keys are one-way hashes, and a declared list is what lets stats recover \"country=nl\" from one. Worth passing even for a `from` dimension, and worth getting right the first time, since `ctx` is inside the test identity and adding values later starts a new test.",
                  "items": {
                    "minLength": 1,
                    "type": "string"
                  },
                  "minItems": 2,
                  "type": "array"
                }
              },
              "required": [
                "key"
              ],
              "type": "object"
            },
            "maxItems": 8,
            "type": "array"
          },
          "name": {
            "description": "A label for your own reference, and the one field worth spending a merge tag on in a recurring ESP template: it is part of the test's identity, so n={{campaign_name}} mints a separate, separately readable test per campaign, and the name is what list_tests searches.",
            "minLength": 1,
            "type": "string"
          },
          "publishableKey": {
            "description": "Registers the new test to the organization identified by a publishable key the user provides for an organization they administer. Result access stays tied to this test's stats secret. Only works on account-enabled deployments; elsewhere a warning says so and the test still works.",
            "pattern": "^pk_[a-z0-9]{24}$",
            "type": "string"
          },
          "redirectUrl": {
            "description": "Where clicks land when a variant does not say.",
            "format": "uri",
            "type": "string"
          },
          "region": {
            "description": "Where the test's state lives. A placement hint (wnam, enam, sam, weur, eeur, apac, oc, afr, me) or \"eu\" for the EU jurisdiction (state guaranteed created and kept inside the EU). Defaults to the creator's own region when the host can tell; without any, state is born wherever the FIRST request comes from, which in email is routinely a mail provider's US datacenter.",
            "enum": [
              "wnam",
              "enam",
              "sam",
              "weur",
              "eeur",
              "apac",
              "oc",
              "afr",
              "me",
              "eu"
            ],
            "type": "string"
          },
          "slotRedirects": {
            "additionalProperties": {
              "format": "uri",
              "type": "string"
            },
            "description": "Where clicks on ONE element land, when elements point at different pages (a hero leading to the campaign landing page, a CTA below it to pricing). Keyed like `slots`. Falls back to `redirectUrl`; a variant's own redirectUrl still wins over both. Setting any of these means every click link must name its slot, which slotLinks does for you.",
            "propertyNames": {
              "pattern": "^[a-z][a-z0-9_-]{0,31}$",
              "type": "string"
            },
            "type": "object"
          },
          "slots": {
            "additionalProperties": {
              "items": {
                "properties": {
                  "html": {
                    "description": "Inline HTML, served by the SDK.",
                    "type": "string"
                  },
                  "image": {
                    "description": "Image URL, for email variants.",
                    "format": "uri",
                    "type": "string"
                  },
                  "markdown": {
                    "description": "Inline markdown, served by the SDK.",
                    "type": "string"
                  },
                  "name": {
                    "description": "Shown in stats and in the utm stamp. Defaults to v1, v2, …",
                    "minLength": 1,
                    "type": "string"
                  },
                  "redirectUrl": {
                    "description": "Where a click on this variant lands, if it differs per variant.",
                    "format": "uri",
                    "type": "string"
                  },
                  "text": {
                    "description": "Inline text, served by the SDK.",
                    "type": "string"
                  },
                  "url": {
                    "description": "Destination for redirect serving.",
                    "format": "uri",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "maxItems": 64,
              "minItems": 1,
              "type": "array"
            },
            "description": "Multi-element test: variants per element, keyed by a short name like \"hero\" or \"cta\". The test serves and learns combinations.",
            "propertyNames": {
              "pattern": "^[a-z][a-z0-9_-]{0,31}$",
              "type": "string"
            },
            "type": "object"
          },
          "variantParam": {
            "description": "Stamp the served combination into this parameter on redirect, e.g. \"utm_content\", so the test shows up in the customer's own analytics.",
            "maxLength": 32,
            "minLength": 1,
            "type": "string"
          },
          "variants": {
            "description": "Single-element test: two or more variants. The first is the control.",
            "items": {
              "properties": {
                "html": {
                  "description": "Inline HTML, served by the SDK.",
                  "type": "string"
                },
                "image": {
                  "description": "Image URL, for email variants.",
                  "format": "uri",
                  "type": "string"
                },
                "markdown": {
                  "description": "Inline markdown, served by the SDK.",
                  "type": "string"
                },
                "name": {
                  "description": "Shown in stats and in the utm stamp. Defaults to v1, v2, …",
                  "minLength": 1,
                  "type": "string"
                },
                "redirectUrl": {
                  "description": "Where a click on this variant lands, if it differs per variant.",
                  "format": "uri",
                  "type": "string"
                },
                "text": {
                  "description": "Inline text, served by the SDK.",
                  "type": "string"
                },
                "url": {
                  "description": "Destination for redirect serving.",
                  "format": "uri",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "maxItems": 64,
            "minItems": 2,
            "type": "array"
          }
        },
        "type": "object"
      },
      "name": "build_test"
    },
    {
      "description": "Takes YOUR estimate of how each variant will perform and converts it into the prior the model starts from, so a test does not spend its first visitors rediscovering what you already suspect.\n\nYou supply the guess; this does the arithmetic and the capping. That capping is the point: a prior is expressed as pseudo-observations, and it is deliberately held weak enough that real data overrides it quickly. The response says exactly how many real visitors per variant it takes to wash your guess out, so you can judge whether you have been too confident. Being wrong here costs a little early traffic, not the test.\n\nPriors are outside the identity hash, so the test keeps its id, its URLs and any history it already has.\n\nPass `when` to make the belief hold for ONE segment only (\"image B is the one for the blue segment\"). Without it the belief is about every visitor, which is a different and much stronger claim.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "oneOf": [
          {
            "required": [
              "test"
            ]
          },
          {
            "required": [
              "config"
            ]
          }
        ],
        "properties": {
          "beliefs": {
            "items": {
              "properties": {
                "rate": {
                  "description": "Your estimate of its conversion rate, e.g. 0.04 for 4%.",
                  "maximum": 1,
                  "minimum": 0,
                  "type": "number"
                },
                "slot": {
                  "description": "Which slot the variant belongs to. Optional for single-slot tests.",
                  "type": "string"
                },
                "variant": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "maximum": 9007199254740991,
                      "minimum": -9007199254740991,
                      "type": "integer"
                    }
                  ],
                  "description": "Variant name or index within its slot."
                }
              },
              "required": [
                "variant",
                "rate"
              ],
              "type": "object"
            },
            "minItems": 1,
            "type": "array"
          },
          "confidence": {
            "anyOf": [
              {
                "enum": [
                  "low",
                  "medium",
                  "high"
                ],
                "type": "string"
              },
              {
                "exclusiveMinimum": 0,
                "type": "number"
              }
            ],
            "default": "medium",
            "description": "How much your guess is worth in observations. low=5, medium=15, high=30, or give a number directly. Higher means the test trusts you for longer before the data takes over."
          },
          "config": {
            "description": "Alias for `test`: the same value under the name build_test returns it as (`config`). Pass one or the other.",
            "minLength": 1,
            "type": "string"
          },
          "test": {
            "description": "The test: an encoded config, or any LiveVariant URL containing one (serve, click, pixel, manage), or a query-parameter serve URL. Paste whatever you have.",
            "minLength": 1,
            "type": "string"
          },
          "when": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Context this belief is limited to, as dimension key to value (e.g. {\"color\": \"blauw\"}). The keys must be dimensions the test declares. Omit it for a belief about every visitor.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          }
        },
        "required": [
          "beliefs"
        ],
        "type": "object"
      },
      "name": "generate_priors"
    },
    {
      "description": "Fetches a test's results and works out what they mean.\n\nAlongside the raw counts it returns the probability that each combination is genuinely best and the expected cost of stopping now and keeping the leader. Use those rather than comparing conversion rates by eye: a variant ahead 2/10 to 1/10 looks twice as good and is very close to a coin flip, and that mistake is the single most common way an A/B test gets called wrong.\n\nMulti-slot tests also report per-slot marginals: how each variant did across every combination it appeared in.\n\nNeeds the stats secret. If you have the manage URL, its #fragment IS the secret and it will be used automatically.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "oneOf": [
          {
            "required": [
              "test"
            ]
          },
          {
            "required": [
              "config"
            ]
          }
        ],
        "properties": {
          "config": {
            "description": "Alias for `test`: the same value under the name build_test returns it as (`config`). Pass one or the other.",
            "minLength": 1,
            "type": "string"
          },
          "statsSecret": {
            "description": "Omit when passing a manage URL that carries it in the fragment.",
            "type": "string"
          },
          "test": {
            "description": "The test: an encoded config, or any LiveVariant URL containing one (serve, click, pixel, manage), or a query-parameter serve URL. Paste whatever you have.",
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_stats"
    },
    {
      "description": "Reports what the deployment's registry knows about a test: whether it is claimed into an account (and by which organization), and whether each redirect destination is a verified domain.\n\nUnverified destinations work, but visitors see a 'Redirecting you to…' continue screen first. When you see verified: false, tell the user to verify the domain under Settings on the dashboard; the three ways are a DNS TXT record, serving the well-known file, or having the SDK tag with their publishable key live in the site's source. If the test is unclaimed, remind them the manage URL claims it in one click when opened signed in.\n\nRequires the test's stats secret, the same as get_stats. A manage URL's #fragment is used automatically.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "oneOf": [
          {
            "required": [
              "test"
            ]
          },
          {
            "required": [
              "config"
            ]
          }
        ],
        "properties": {
          "config": {
            "description": "Alias for `test`: the same value under the name build_test returns it as (`config`). Pass one or the other.",
            "minLength": 1,
            "type": "string"
          },
          "statsSecret": {
            "description": "Omit when passing a manage URL that carries it in the fragment.",
            "type": "string"
          },
          "test": {
            "description": "The test: an encoded config, or any LiveVariant URL containing one (serve, click, pixel, manage), or a query-parameter serve URL. Paste whatever you have.",
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_test_status"
    },
    {
      "description": "Decodes a test and describes it: slots, variants, context, and whether it can be served by redirect. Also lints it for the mistakes that only show up once a campaign is out, such as an email test whose context comes from geo (which a mail proxy answers about itself).\n\nUse this before sending anything, and to answer 'what is this link?'.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "oneOf": [
          {
            "required": [
              "test"
            ]
          },
          {
            "required": [
              "config"
            ]
          }
        ],
        "properties": {
          "config": {
            "description": "Alias for `test`: the same value under the name build_test returns it as (`config`). Pass one or the other.",
            "minLength": 1,
            "type": "string"
          },
          "test": {
            "description": "The test: an encoded config, or any LiveVariant URL containing one (serve, click, pixel, manage), or a query-parameter serve URL. Paste whatever you have.",
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "inspect_test"
    },
    {
      "description": "Lists tests registered to the signed-in account, newest first, with cursor pagination and an optional case-insensitive name filter. Only exists on deployments with accounts, and only answers for an identified caller: unlike every other tool, WHOSE tests these are cannot be expressed as an argument. Each entry carries the encoded config, which inspect_test and get_stats accept directly.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "cursor": {
            "description": "Opaque cursor from a previous page's nextCursor",
            "type": "string"
          },
          "limit": {
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "q": {
            "description": "Case-insensitive substring filter on the test name",
            "maxLength": 200,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_tests"
    },
    {
      "description": "Registers a test you built earlier to the organization a publishable key belongs to, so it shows under My tests and its stats are readable from the dashboard without the secret.\n\nUse this only when the user provides both the test's stats secret and a publishable key for an organization they administer. The stats secret must match the hash inside the config, and the publishable key identifies the organization to register into. Prefer passing publishableKey to build_test directly: it registers at creation in one step. Keyless tests cannot be registered this way (nothing to prove with); they register through the tag on a verified domain. The organization can remove a listing from its dashboard (the test itself keeps serving).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "config": {
            "description": "The encoded test config (from build_test or any test URL).",
            "minLength": 1,
            "type": "string"
          },
          "publishableKey": {
            "description": "A publishable key for the target organization, provided by a user authorized to register tests there.",
            "pattern": "^pk_[a-z0-9]{24}$",
            "type": "string"
          },
          "statsSecret": {
            "description": "The test's stats secret, exactly as build_test returned it.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "config",
          "statsSecret",
          "publishableKey"
        ],
        "type": "object"
      },
      "name": "register_test"
    },
    {
      "description": "Uploads an image to the deployment's asset store and returns its URL, for use as a variant's `image` (email tests) or `url`.\n\nThe returned URL is deliberately not fetchable on its own: assets are only served with a short-lived signature that the serve endpoints mint per request, so uploading here does not create free static hosting. Use `previewUrl` (valid for an hour) to check what was stored.\n\nStorage is content-addressed: the id is the sha256 of the bytes, so uploading the same image twice is harmless and returns the same URL. Raster images only; SVG is refused because it can carry scripts. Not every deployment enables asset hosting, and this tool says so plainly when yours does not.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "contentType": {
            "description": "The image's actual type; the server stores and serves it as this.",
            "enum": [
              "image/png",
              "image/jpeg",
              "image/gif",
              "image/webp",
              "image/avif"
            ],
            "type": "string"
          },
          "data": {
            "description": "The image bytes, base64-encoded (plain base64, not a data: URL).",
            "maxLength": 8000000,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "data",
          "contentType"
        ],
        "type": "object"
      },
      "name": "upload_image"
    },
    {
      "description": "Returns the constraints to write or generate test variants against, for email or web, plus the rules that decide whether a test can be read at all once it runs.\n\nThe one that matters most: one idea per slot. To vary two elements, give the test two slots and let it learn the combination, rather than bundling both changes into one variant and never learning which half worked. Ask for this before drafting variants, then produce them yourself against what it returns.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "audience": {
            "description": "Who sees it, if that shapes the copy.",
            "type": "string"
          },
          "channel": {
            "enum": [
              "email",
              "web"
            ],
            "type": "string"
          },
          "count": {
            "default": 2,
            "maximum": 10,
            "minimum": 2,
            "type": "integer"
          },
          "format": {
            "description": "What each variant will be.",
            "enum": [
              "image",
              "text",
              "html",
              "url"
            ],
            "type": "string"
          },
          "goal": {
            "description": "What the test should improve, e.g. 'more demo bookings'.",
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "goal",
          "channel",
          "format"
        ],
        "type": "object"
      },
      "name": "variant_brief"
    }
  ]
}

What the leaf hashes

{"body":"090aba1c588eb63f21176607c417375283771804c180179a986bf9cb59e9186b","id":258520,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793030204855518,"prev":null,"subject":"5b5ec3ca-ff17-42de-8700-352107d4c612","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. 0x9669380818685102a90fea0c4b90c48d6d80ca62bb4b9c9f294c96d06b0d341f
  2. 0x7f877603f317dd33c0f9806989590d4b018fc45656cdf8cbdc5dade60bb8def8
  3. 0x7b3482ce174e6e9f60f8491cffa4bc45f09611ee92de8f8fb22499e6c2a07b57
  4. 0x4481a9b9f9914e1a3d32a189d99aafa015b8a38c11422aae6652db3cb6a6b2e0
  5. 0x92a794f8633d51de1deab388a50c39844fd01b2c4b62770efd339fda22bce0a7
  6. 0x2030bf066f2cdab2507505e38fa615891093afb867b97b7a47c2bbc70acc4a24
  7. 0xf487c5ebfe6d56e160d5352eaa3fd312ab00d51bd867cb5de2a26a9ca5bfa0b6
  8. 0x67e6f01ee14b9416ca80c18d742f941df25147a04e3bc5b54ecc8f9e9bc035ed
  9. 0xff01ec2fe9687f161d9c284ebddaa9bbf0487a549f17ddb02ada394330bb796a
  10. 0x1a56ccb45e009e2c2474b198726fcc15e9fc65b1b8da07f7e8f740b40167837a
  11. 0xc280b3b9968aa6c4c1d58f1d93bf282873099bba7b119c4ce413c82e165f3330
  12. 0xd43b73151a0c2d9a61f2ae73ed148938b0e6b05c81197f7eebbf95dba38a7004
  13. 0xb314422bc93e7f1c0b706c67f5fff96c5ddf74934bb2fe8ab6291ae016907e37
  14. 0x49062da782c4f73855ddd5fdd51840749f928b5f17d1ce75ac50f2d829104e72
  15. 0xf0bd63870f0bb378fa300bd33563050dcb7b3e02b44eb3ee550c1c534ec4b246
  16. 0x1ac20d30773e1f4f2f811540e9a99b5cca9177c9e2e029acc0d80cf3f1d11f0f
  17. 0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON