addrbookFor publishers
← The evidence ledger

Evidence row 3738573

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 658ac349-b9d4-47b8-9d2d-103ff369a8ee
Recorded
Previous row
#2551995
Body SHA-256
eb244ee9391c819f318d3e64417af1fe2a37e65e0e6241257e14384692961f50
Leaf
0xb1c28ac45c64a77a2dcadcfcd9ca60a9f593fe8eada09917471639f881663fc9

What was observed

{
  "count": 8,
  "tools": [
    {
      "description": "Use this when somebody wants a music visualiser or music visualisation (visualizer, visualization, musicviz, audio-reactive visuals): it writes a GLSL vibescape and returns a live link to it. The link draws and animates the vibescape in a browser, so it works for anybody who opens it, with or without the app. The vibescape is not in the public gallery until `share_vibescape` is called on it. The answer carries the id and the capability (`editKey`) that `share_vibescape` needs — keep it, because there is only one copy of it. Call `vibescape_reference` first for the uniforms and helpers the language has — a vibescape that ignores the music will look like a still image, and there is a linter that says so.",
      "inputSchema": {
        "properties": {
          "author": {
            "description": "Who to credit it to. Leave it empty and it is credited to Minith Labs.",
            "type": "string"
          },
          "code": {
            "description": "The vibescape: a GLSL function `vec3 render(vec2 p, float t)`. `p` is the position across the screen, centred on 0,0, and `t` is time in seconds. Return the colour as three numbers from 0 to 1. Read the music through the uniforms — uBass, uLevelSmooth, uBeatStrength, uScroll — or the picture will not move with the sound.",
            "type": "string"
          },
          "name": {
            "description": "What to call it. A few words that say what the picture looks like.",
            "type": "string"
          }
        },
        "required": [
          "code",
          "name"
        ],
        "type": "object"
      },
      "name": "create_vibescape"
    },
    {
      "description": "Use this when somebody wants the real thing: the app listens to the system audio directly, with no browser, and checks for updates for you. It gives the download link and the one-line install command for macOS.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_app"
    },
    {
      "description": "Use this to find out how a vibescape's colours are graded. Vibresia puts every vibescape through one of five palettes, so bright colours come out muted unless the shader accounts for it.",
      "inputSchema": {
        "properties": {
          "name": {
            "description": "Which palette — NEON, EMBER, TOXIC, ABYSS or MONO. Leave it out to get all of them.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_palette"
    },
    {
      "description": "Use this to read somebody's vibescape, so it can be adapted or understood. Needs the id — the last part of the link.",
      "inputSchema": {
        "properties": {
          "id": {
            "description": "The share's id — the last part of the link.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "get_vibescape"
    },
    {
      "description": "Use this after writing a vibescape, before sharing it. It reads the code and says what would make it look wrong — most often that it never reads the music, so the picture is the same in silence as at full volume. Cheap to call and it catches most of what goes wrong.",
      "inputSchema": {
        "properties": {
          "code": {
            "description": "The vibescape's GLSL.",
            "type": "string"
          }
        },
        "required": [
          "code"
        ],
        "type": "object"
      },
      "name": "lint_vibescape"
    },
    {
      "description": "Use this when somebody wants to see music visualisations other people have made, or wants something to look at before writing their own. Returns the public gallery: each vibescape's name, who made it, and a link that plays it.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "list_vibescapes"
    },
    {
      "description": "Use this when a vibescape should be listed in the public gallery, where anybody can find it at vibresia.com/vibescapes. A vibescape is created unlisted; this is the separate act of putting it in front of people. The name and the author go with it, so make sure they are right before calling this. Only the vibescape's own capability can list it: pass the `editKey` that `create_vibescape` returned, together with the id. A vibescape made somewhere else — in the app, say — has a capability too, but only the person who made it holds it, so it cannot be listed from here.",
      "inputSchema": {
        "properties": {
          "editKey": {
            "description": "The capability that came with the vibescape, if it has one. `create_vibescape` returns it as `editKey`; a vibescape made by somebody else has a capability you do not hold, and it cannot be listed from here — say so rather than pretending.",
            "type": "string"
          },
          "id": {
            "description": "The share's id — the last part of the link, six characters. It is what `create_vibescape` returns.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "share_vibescape"
    },
    {
      "description": "Use this before writing a vibescape: it lists every uniform the music drives and every helper the language has, with what each is for. Writing a vibescape without it usually takes two attempts instead of one.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "vibescape_reference"
    }
  ]
}

What the leaf hashes

{"body":"eb244ee9391c819f318d3e64417af1fe2a37e65e0e6241257e14384692961f50","id":3738573,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793975831510698,"prev":2551995,"subject":"658ac349-b9d4-47b8-9d2d-103ff369a8ee","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (303443 rows).

  1. 0xb1c2a5e4283605f4e82369604c0c0a0866baad5e54d9ef1cde23b5112e56da01
  2. 0xc3aa3f5d503cc5b25304e05b9862b1615e55664c685394170471bb5567f594bd
  3. 0x6f4b994b941b2ad75c04ed5d5afa41913a277482a35ee055d8a00e79e9d5310e
  4. 0x4c8a0c3006d1decffa549e7da85c69702a139acf371d33bb13a559de23672f4c
  5. 0x58a99bd28041e7643b914f68134e292058c42f2bfa8505122f01c473525dd4d8
  6. 0x9b1b69aa2f364cad02ed29b7c7a60cb3d034eb86784fd9f0232c777d40ce2ce3
  7. 0xb3037e30de1f8ea32043eb3b28d5de0d75c34406015d096d9c043ad6ff6c66ab
  8. 0x179d8e7209b72c7ea488b7523a8e06db23f56f13e1870ec2d6fdf27d6cd66e44
  9. 0xd54e0966a50a3f2e45fc1e7b08f2d395440b5922fe3efa7b6acdba14b2c710b6
  10. 0xb69f5e5b16c4f27d34f8b5bd559a8d462e732f2feac3e9d623e25e2cbc5bcc46
  11. 0x273fdde9be620594c4ecbb04f875589d40668567273ca60c97b60694bdb7ae04
  12. 0x6a97f0105728916eb066c7b23523544ea190ad1f4ccb6d97d1c556584ad4d1da
  13. 0x0353667b2c4e07330b140eee706bc296fa70c834f49fd1118f15d96623a00bb2
  14. 0xa99b1ad6330601889770030d23b9c5dc19a1695efddee19df6debd2cc7c017cf
  15. 0xb12c082ef1a62be55def66eb167199a0d5bfcaf36f2f6e389298bc918cf1b0bc
  16. 0x4a5b4dca6c638b7872bc6485359586bebc62511ba2776f1ea54dfdaa4d1a511b
  17. 0xf19d501fdbc28e10c3244253daf0c37c4752659eae14a7cba585a18c7df9ce0d
  18. 0xd422a75f6c3780ed53eca52b50bf40b8f17dc14cffb804142e44fc9f2672029d
  19. 0xc0d08d48601d1be90bcfc025e66bcaa0030120d688dd9c919b36c2c4446f4948
Day root
0xb30ccefe7182c6f767e1fcbfb5f64ffd649da831f665f65c5ff39cd40512284f
Chained
0xc383f7ef68d2914082484765aa09e42c12c59a74a096ae64127c562618c506d3
Published
On Arc Testnet, block 71111178: 0xfba13cb7ee4ada7f2fee3702a786a2201596be2ffea37dfc281ab4c8e9942fe1

How to check it · This row as JSON