addrbookFor publishers
← The evidence ledger

Evidence row 307473

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 94d3b765-dbbd-4315-84a7-24bdfc268c5c
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
2b43c7b48ad55320ca6e4cbf4fd718d8119628b0646ffa1e5b767e1dace6729d
Leaf
0xfc69ae746277f7d7b83a7f390871cd725067067f799b4a2bec84e36c2d45b54a

What was observed

{
  "count": 6,
  "tools": [
    {
      "description": "Validate filled-in props for a template and return a cliphou.se link that opens a live, editable preview of the customized video. The user can export the MP4 there. Invalid props return an error that names the field to fix.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "props": {
            "additionalProperties": {},
            "description": "The full props object from get_template_spec with edited texts, theme, and media.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "searchId": {
            "description": "The searchId returned by search_templates. Pass it through so picks can be measured.",
            "pattern": "^[A-Za-z0-9_-]{8,40}$",
            "type": "string"
          },
          "templateVersion": {
            "description": "Only for older template versions. Usually omit.",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "variantId": {
            "description": "Template id.",
            "pattern": "^[a-z0-9-]{1,100}$",
            "type": "string"
          }
        },
        "required": [
          "variantId",
          "props"
        ],
        "type": "object"
      },
      "name": "build_edit_link"
    },
    {
      "description": "Get the editable fields of one template: current props, text roles with maxLength, theme colors, scenes, format, JSON Schema, and the source package for local rendering. Call before build_edit_link and start from the returned props.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "searchId": {
            "description": "The searchId returned by search_templates. Pass it through so picks can be measured.",
            "pattern": "^[A-Za-z0-9_-]{8,40}$",
            "type": "string"
          },
          "variantId": {
            "description": "Template id from search_templates.",
            "pattern": "^[a-z0-9-]{1,100}$",
            "type": "string"
          }
        },
        "required": [
          "variantId"
        ],
        "type": "object"
      },
      "name": "get_template_spec"
    },
    {
      "description": "Render a poster image of a template filled with the user's props, in a few seconds, and return it with the editor link. Call after get_template_spec once the props are filled, and show the image to the user. Invalid props return an error that names the field to fix. If rendering is unavailable, poster is null and the editor link still works.\nWith loop: true it also waits for a 4-second animated WebP loop of these props and returns it as video. A loop still rendering has video: null and videoPending: true; call again with the same props to get it. loop: \"start\" returns the poster now and starts the loop in the background. Show the loop as an image (Markdown ![title](video)) where the host renders images.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "loop": {
            "anyOf": [
              {
                "const": "start",
                "type": "string"
              },
              {
                "type": "boolean"
              }
            ],
            "description": "true waits for a 4-second animated loop of these props and returns it as video. \"start\" only starts it."
          },
          "props": {
            "additionalProperties": {},
            "description": "The full props object from get_template_spec with edited texts, theme, and media.",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "searchId": {
            "description": "The searchId returned by search_templates. Pass it through so picks can be measured.",
            "pattern": "^[A-Za-z0-9_-]{8,40}$",
            "type": "string"
          },
          "templateVersion": {
            "description": "Only for older template versions. Usually omit.",
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "variantId": {
            "description": "Template id.",
            "pattern": "^[a-z0-9-]{1,100}$",
            "type": "string"
          }
        },
        "required": [
          "variantId",
          "props"
        ],
        "type": "object"
      },
      "name": "render_preview"
    },
    {
      "description": "Render posters of up to 4 templates at once, each filled with one brand description, so the user picks from options that already show their product. The server maps the brand onto each template's text fields and shortens text to fit. Returns, per template: id, title, poster URL (null if it was not ready in time), editor link, the tailored props to start from after the pick, and keptSample: text fields that still hold the template's sample text (fill them with real facts after the pick). Inline images follow the text, in the same order as the results.\nshortened lists brand texts that were cut to fit a field ({role, from, to, max}); rewrite them for that field after the pick.\nAnimated loops (4-second animated WebP of each tailored template) take two calls. First call with loop: \"start\": it returns the posters as fast as without loops and starts the loops in the background. Show the posters. Then call again with the same arguments and loop: true: it waits for the loops and returns video (the loop URL) per template. A loop still rendering has video: null and videoPending: true; call once more to get it. Show each loop as an image (Markdown ![title](video)) where the host renders images, so the options animate.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "brand": {
            "description": "The product facts from the user's project. Never invent numbers.",
            "properties": {
              "cta": {
                "description": "Call to action, for example \"Start free\".",
                "maxLength": 60,
                "type": "string"
              },
              "date": {
                "description": "Launch or availability date, only if the project states one.",
                "maxLength": 40,
                "type": "string"
              },
              "headline": {
                "description": "The hook: a pain, question, number, or benefit, as short as possible.",
                "maxLength": 120,
                "type": "string"
              },
              "logo": {
                "description": "The logo object from upload_logo. Templates with a logo slot show it in place of the brand name.",
                "properties": {
                  "id": {
                    "pattern": "^[a-f0-9]{64}$",
                    "type": "string"
                  },
                  "mono": {
                    "type": "boolean"
                  },
                  "ratio": {
                    "maximum": 8,
                    "minimum": 0.2,
                    "type": "number"
                  }
                },
                "required": [
                  "id",
                  "ratio",
                  "mono"
                ],
                "type": "object"
              },
              "name": {
                "description": "Product or company name.",
                "maxLength": 60,
                "minLength": 1,
                "type": "string"
              },
              "points": {
                "description": "2-3 benefits backed by real features or facts, short phrases.",
                "items": {
                  "maxLength": 80,
                  "type": "string"
                },
                "maxItems": 6,
                "type": "array"
              },
              "subhead": {
                "description": "One sentence: who it is for and what it solves.",
                "maxLength": 200,
                "type": "string"
              },
              "theme": {
                "description": "Brand colors as #RRGGBB. Keep good contrast between foreground and background.",
                "properties": {
                  "accent": {
                    "pattern": "^#[a-fA-F0-9]{6}$",
                    "type": "string"
                  },
                  "accent2": {
                    "pattern": "^#[a-fA-F0-9]{6}$",
                    "type": "string"
                  },
                  "background": {
                    "pattern": "^#[a-fA-F0-9]{6}$",
                    "type": "string"
                  },
                  "foreground": {
                    "pattern": "^#[a-fA-F0-9]{6}$",
                    "type": "string"
                  },
                  "surface": {
                    "pattern": "^#[a-fA-F0-9]{6}$",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "loop": {
            "anyOf": [
              {
                "const": "start",
                "type": "string"
              },
              {
                "type": "boolean"
              }
            ],
            "description": "\"start\" returns the posters now and starts 4-second animated loops in the background. true waits for the loops and returns them as video."
          },
          "searchId": {
            "description": "The searchId returned by search_templates. Pass it through so picks can be measured.",
            "pattern": "^[A-Za-z0-9_-]{8,40}$",
            "type": "string"
          },
          "variantIds": {
            "description": "Template ids from search_templates.",
            "items": {
              "pattern": "^[a-z0-9-]{1,100}$",
              "type": "string"
            },
            "maxItems": 4,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "variantIds",
          "brand"
        ],
        "type": "object"
      },
      "name": "render_previews"
    },
    {
      "description": "Find marketing video templates for a product, project, or announcement. Prefer a marketing goal and, when project facts support it, a release moment; then add a short product or style query. Returns a searchId, the selected moment, detectedMoments hints, and results with id, title, goals, moments, aspect, length, preview MP4, poster image, and editor URL. Engine details appear only when the engine filter is used.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "aspect": {
            "description": "Only when the destination implies it: 9:16 vertical (Reels, TikTok, Shorts), 16:9 (YouTube, web), 1:1 or 4:5 (feeds).",
            "enum": [
              "16:9",
              "9:16",
              "4:5",
              "1:1"
            ],
            "type": "string"
          },
          "engine": {
            "description": "Advanced source-package filter. Omit unless the user explicitly asks for an engine.",
            "enum": [
              "remotion",
              "hyperframes"
            ],
            "type": "string"
          },
          "goal": {
            "description": "Marketing goal. One of: launch-product (Launch a product), announce-feature (Announce a feature), share-update (Share an update), grow-waitlist (Grow a waitlist), announce-integration (Announce an integration), announce-pricing (Announce pricing), celebrate-milestone (Celebrate a milestone), share-social-proof (Share social proof), promote-event (Promote an event), introduce-brand (Introduce a brand), run-promotion (Run a promotion), hire-team (Hire for the team).",
            "enum": [
              "launch-product",
              "announce-feature",
              "share-update",
              "grow-waitlist",
              "announce-integration",
              "announce-pricing",
              "celebrate-milestone",
              "share-social-proof",
              "promote-event",
              "introduce-brand",
              "run-promotion",
              "hire-team"
            ],
            "type": "string"
          },
          "limit": {
            "description": "Maximum results, default 6.",
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          },
          "maxSeconds": {
            "description": "Maximum video length in seconds.",
            "maximum": 600,
            "minimum": 1,
            "type": "integer"
          },
          "moment": {
            "description": "Release moment backed by project facts. Filters and ranks templates for it. One of: most-requested-feature (Most-requested feature shipped), generally-available (Available to everyone), limit-raised (A limit was raised or removed), faster (Something got faster), manual-step-removed (A manual step disappeared), integration-live (An integration went live), pricing-changed (Pricing changed), reliability-fix (A reliability fix landed), new-language-or-region (New language or region), new-platform (New platform), free-resource (Free tool or resource released), milestone (A real milestone was reached).",
            "enum": [
              "most-requested-feature",
              "generally-available",
              "limit-raised",
              "faster",
              "manual-step-removed",
              "integration-live",
              "pricing-changed",
              "reliability-fix",
              "new-language-or-region",
              "new-platform",
              "free-resource",
              "milestone"
            ],
            "type": "string"
          },
          "music": {
            "description": "true for beat-synced templates with a generated soundtrack, false for silent ones.",
            "type": "boolean"
          },
          "purpose": {
            "description": "Exact catalog purpose, for example \"Product launch\".",
            "maxLength": 60,
            "type": "string"
          },
          "query": {
            "description": "Short product or style description, for example \"developer tool\" or \"minimal logo\".",
            "maxLength": 200,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "search_templates"
    },
    {
      "description": "Upload the product's logo once, then pass the returned logo object as brand.logo to render_previews, or as props.logo in templates that support a logo (their spec lists editableFields.logo). Templates with a logo show it wherever they show the brand name; the brand text stays as its alt text. Send an SVG as text in svg, or a PNG, JPEG, WebP, or SVG file as base64 in data. Up to 1 MB. Prefer the project's SVG logo (for example public/logo.svg) or a PNG with a transparent background. mono: true draws the logo in the template's text color, which keeps it readable on any theme; it needs a transparent background.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "data": {
            "description": "The logo file as base64, or as a data: URL.",
            "maxLength": 1400000,
            "type": "string"
          },
          "svg": {
            "description": "The logo as SVG text.",
            "maxLength": 1000000,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "upload_logo"
    }
  ]
}

What the leaf hashes

{"body":"2b43c7b48ad55320ca6e4cbf4fd718d8119628b0646ffa1e5b767e1dace6729d","id":307473,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793057698291769,"prev":null,"subject":"94d3b765-dbbd-4315-84a7-24bdfc268c5c","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. 0xfc69cb4628200af7ab2ce79a727be9f0f24cdc764582f1f7be8351aaa31d43c1
  2. 0x40443e864461f49381305abbcb37e44cb0d059442dc514bc3176630290805edd
  3. 0x03a269c074eee91b888902b056c9eaf62716345f9c96904e50755d5fa949592e
  4. 0xd8820ed7e914b936dfdd6cad3aa3afe6b7269bcb214cd2b954fae33a006a0fd4
  5. 0x599b36aef5cf8c6021dd1e745429a0d6d1c6a863c49b4f82f5edacdea9df38d0
  6. 0x99215c995ec064a1903de28b49598925ba6dd33e31702f8087b3a9148e75b472
  7. 0xdf5739179ef80a5f77c42a42be59925a6cb384ef88855819125a06ef5bfddd8f
  8. 0x4165c0cb0e8c78a03561e1f87bc6b0492b7b3143650cf8b255a233fdb24cb642
  9. 0xd5e84a76f08a9f9783e8b3ad62be6916de98755223b57f9f65d3166696157302
  10. 0x3a8d3d4169cff276684d88a4f127811b670ead57557bd0903bd3af277772b2c1
  11. 0x51bc8fcd224b36d2c60fa49f46f383ee8328191b9e73209ce8018f2612c3d42f
  12. 0xf8173f36b7a27e1bb0f6961a49501bba1d99349c5e11449d0d557fbaa910be0a
  13. 0xbee644d57738676bfb20eb90d6021f364bf883a8d54f8d17e9dc4749b4074c3d
  14. 0x44945ea9ad8b24e723ad5a8fd6d014024a49531783f74ff9229c2ab6930e84c8
  15. 0x68d296b1e00b4899fb83c3fba36fffaefa311eac2903067dbebfe776a12b4a9a
  16. 0x5fb5dda563336cd1bc1b9f44c52b76237ae72ed2145cb9290f39f304ca7dd678
  17. 0x74a0a08e4e7ab9aa5bfbead33dec7e1c7e8e364cff69a63720d764bbe987aadc
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON