addrbookFor publishers
← The evidence ledger

Evidence row 573948

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint b0ccc8da-bc03-4e48-b14b-ed987fd479c7
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
b482ac6b892261a345e0949fb300ba510789162de650230e908e72868e4d7070
Leaf
0x23e3cca8ef1b91a582eb6eff5ea10d6a5a4485c1850ac100bd9041651ef6045c

What was observed

{
  "count": 10,
  "tools": [
    {
      "description": "Perceptual difference (Delta-E) between two colors. color1 and color2 accept a hex, CSS name, RNV brand name, or saved-palette reference. method is 'ciede2000' (default, modern standard) or 'cie76'. A value near 1.0 is the threshold the eye can just notice; larger means more different. Returns the value and a plain-language interpretation. Read-only and deterministic, with no side effects. Use ciede2000 for accuracy and pick cie76 only to match a legacy system; to test whether text is legible on a background (not raw difference) use contrast_check instead.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "color1": {
            "type": "string"
          },
          "color2": {
            "type": "string"
          },
          "method": {
            "default": "ciede2000",
            "type": "string"
          }
        },
        "required": [
          "color1",
          "color2"
        ],
        "type": "object"
      },
      "name": "color_difference"
    },
    {
      "description": "WCAG contrast ratio between a foreground and background color, for accessibility. Both accept a hex, CSS name, RNV brand name, or saved-palette reference. Returns the ratio (1.0-21.0) plus pass/fail for AA and AAA at normal and large text sizes and for UI components. Read-only and deterministic, with no side effects. Use this for legibility and accessibility checks; to measure raw perceptual difference between two colors rather than readability use color_difference instead.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "background": {
            "type": "string"
          },
          "foreground": {
            "type": "string"
          }
        },
        "required": [
          "foreground",
          "background"
        ],
        "type": "object"
      },
      "name": "contrast_check"
    },
    {
      "description": "Convert a color between formats. Input accepts a hex, CSS name, RNV brand name, or saved-palette reference. With `to` set to one of hex/rgb/hsv/hsl/lab, returns just that format; leave `to` out to get all of them. hsv and hsl are fractions from 0 to 1, hue included (multiply hue by 360 for degrees). Read-only and deterministic, with no side effects. Use for format conversion of a single color; to blend several colors into one use mix_colors, and to compare two colors use color_difference.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "color": {
            "type": "string"
          },
          "to": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          }
        },
        "required": [
          "color"
        ],
        "type": "object"
      },
      "name": "convert_color"
    },
    {
      "description": "Generate a color harmony from a base color. base accepts a hex, CSS name, RNV brand name, or saved-palette reference (e.g. 'Spring line:2'). scheme is one of: complementary, analogous, triadic, split-complementary, tetradic (a.k.a. square), monochromatic, compound. Returns a list of hex colors. Read-only and deterministic: it derives the colors from the base and stores nothing, so it has no side effects and is safe to call repeatedly. Use to expand one base color into a related set; to blend existing colors into a single color use mix_colors, and to persist a set you like use save_palette.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "base": {
            "type": "string"
          },
          "scheme": {
            "type": "string"
          }
        },
        "required": [
          "base",
          "scheme"
        ],
        "type": "object"
      },
      "name": "generate_harmony"
    },
    {
      "description": "Retrieve one saved palette by name, returning its colors and metadata. Returns null if no palette by that name exists. Read-only; no side effects. Use when you already know the palette name; to list available names first use list_palettes, and to create or update a palette use save_palette.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "name": "get_palette"
    },
    {
      "description": "List every saved palette as name + colors. Read-only; no side effects. Use to discover what palettes exist or to find a name before calling get_palette; to fetch one palette's full detail use get_palette, and to create or overwrite one use save_palette.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "list_palettes"
    },
    {
      "description": "Blend up to 12 colors into one. Each color may be a hex (#d2bc93), a CSS name (red), an RNV brand name (brand gold, near-black), or a saved-palette reference (Spring line, or 'Spring line:2' for its 2nd swatch). Optional integer weights bias the blend (defaults to equal). mode selects the model: rgb/hsv/lab are digital blends (lab is perceptual and the default, best for on-screen color); paint mixes pigments via Kubelka-Munk physics (colors darken like real paint, use it for physical-media matching); ryb is the artist's color wheel; cmy is subtractive like printer inks. Returns hex and rgb. Reach for paint when BLENDING brand colors into a new one, and lab when SAMPLING between them: lab returns the point between its ingredients, which is right for finding a midpoint; paint models mixing them as pigments, which makes a different color. RNV's #00b0a0 was blended in paint; the same ingredients at the same weights in lab give #9cc1a5, 15.94 away and far closer to the brand gold it exists to be distinguishable from. paint and cmy work per RGB channel, so an ingredient with an empty channel (pure digital primaries such as #0000ff or #ffff00) dominates that channel: at equal weights yellow + css:blue comes out black in paint and near-black (#070707) in cmy, where ryb gives green. Weight shifts this in cmy and hardly in paint: white + css:blue at 10:1 is #8484ff in cmy and #0202fe in paint. For pigment-like results use pigment-like colors, or ryb for idealized primaries. Brand names win over CSS names on collision: 'blue' is RNV blue, css:blue is #0000ff. Read-only and deterministic: it computes a result and stores nothing, so it is safe to call repeatedly with no side effects. Use to combine multiple colors into a single blend; to convert one color between formats use convert_color, and to measure how far apart two colors are use color_difference.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "colors": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "mode": {
            "default": "lab",
            "type": "string"
          },
          "weights": {
            "anyOf": [
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          }
        },
        "required": [
          "colors"
        ],
        "type": "object"
      },
      "name": "mix_colors"
    },
    {
      "description": "Hold a color's hue and chroma and set its lightness, returning one result per requested L*. color accepts a hex, CSS name, RNV brand name, or saved-palette reference; lightness is a list of L* values in 0-100. This is the operation behind a LIGHT/DARK PAIR: one hue at two lightnesses, with a and b held exactly, which is how a color that works on a dark ground gets a partner that works on a light one. Use it when you need the same color at a different lightness; use mix_colors when you need a different color. Returns the source color's LAB, and for each placement the hex, the achieved LAB, and the quantization error per axis -- 8-bit hex cannot store a and b to the precision LAB expresses, so two placements of one hue differ by a few hundredths on both axes however exactly the input held them. That is the storage format, not the operation, and it is reported rather than hidden. Read-only and deterministic. Refuses rather than clamps: not every (L*, a, b) exists in sRGB, and a lightness too far from a chromatic color's range is rejected with the reason instead of being silently moved to the nearest color that fits.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "color": {
            "type": "string"
          },
          "lightness": {
            "items": {
              "type": "number"
            },
            "type": "array"
          }
        },
        "required": [
          "color",
          "lightness"
        ],
        "type": "object"
      },
      "name": "place_lightness"
    },
    {
      "description": "Persist a named color palette for later retrieval with get_palette or list_palettes. Each entry in colors accepts what every other tool accepts: a hex (#d2bc93), a CSS name (red), an RNV brand name (brand gold), or a saved-palette reference ('Spring line:2'); each is resolved and stored as normalized hex, and an unknown token refuses the whole save naming its position. Optional notes are stored as the palette's description. Author is recorded as RNVizion. The name is refused, with the reason, if it is an RNV brand name, a CSS color name, a 'css:' form, a hex literal, or contains ':' -- a palette resolves ahead of brand and CSS names, so such a name would redefine a color for every caller. This WRITES to the palette store and is the only tool here that does. Reusing an existing name overwrites that palette: save and update are the same call (an upsert), there is no separate update operation. Returns a `durable` flag: true if the palette reached durable storage (the HF Dataset) and will survive a restart, false if it saved to the local working copy only (which is lost on rebuild), with `durable_reason` naming the step that stopped it. Use when the user wants to keep a set of colors under a name for reuse across sessions, such as a brand or launch palette; to read a palette back use get_palette, and to see what already exists use list_palettes. The saved name can then be passed to mix_colors, convert_color, and generate_harmony as a palette reference.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "colors": {
            "description": "Ordered list of colors. Each accepts what every other tool accepts: a hex ('#d2bc93'), a CSS name ('red'), an RNV brand name ('brand gold'), or a saved-palette reference ('Spring line:2'); each is resolved and stored as normalized '#rrggbb'. An unknown token refuses the whole save, naming the position. Order is preserved; at least one required.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "description": "Unique key the palette is stored under. Reusing an existing name overwrites that palette (upsert). Can be referenced later by other tools as 'name:index', e.g. 'Spring line:2'. Refused, with the reason, if it is an RNV brand name, a CSS color name, a 'css:' form, a hex literal, or contains ':'.",
            "type": "string"
          },
          "notes": {
            "default": "",
            "description": "Optional human-readable description stored as the palette's notes.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "colors"
        ],
        "type": "object"
      },
      "name": "save_palette"
    },
    {
      "description": "Apply an exact, deterministic text transformation. operation is one of: UPPERCASE, lowercase, 'Title Case', 'Sentence case', camelCase, PascalCase, snake_case, CONSTANT_CASE, kebab-case, dot.case, 'iNVERTED cASE'. Read-only and deterministic: it returns the transformed string and changes nothing, safe to call repeatedly. Use whenever exact, reproducible case formatting matters rather than rewriting the text by hand or guessing the casing.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "operation": {
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "text",
          "operation"
        ],
        "type": "object"
      },
      "name": "transform_text"
    }
  ]
}

What the leaf hashes

{"body":"b482ac6b892261a345e0949fb300ba510789162de650230e908e72868e4d7070","id":573948,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793141349844554,"prev":null,"subject":"b0ccc8da-bc03-4e48-b14b-ed987fd479c7","subject_kind":"endpoint"}

Proof

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

  1. 0x23e39c39f1d07781c8acb8a80fd9b3cb32e3ded25179bb5f714b02294281e046
  2. 0x9cc8b664353eda5a482bebb085d227eb2b4efe7fc794b3fabd5e77c3d982a139
  3. 0x7116e35296dd0e2995774eab4cac1f0df4ce43e4ccf1836ce2d4007aec974c4c
  4. 0xf08757b6d6735e07bf76254cff55cd4c7158c3553edfd2a66aecf069f3f9a0f2
  5. 0x06a186dcf38e0f3727e3a8fe8eab8d5165109c71ad4cc51d83502ac1f1148ea1
  6. 0xe84ffc59f51ed9071386fe2de361334e59c44f84ea6561a61304fb32135e1d27
  7. 0x2f9641b840bade3e101fecf022aeba513fb3a8035e14b2f65c76c571d31220fd
  8. 0x96025ad24c8ea6a7e5c33a811ec19b555b5cf148c7f344526c8f5980a2cd9193
  9. 0x274c7e826462606f8d3a679747ac6791029eb87f6376a1341bc5796abebe2ef2
  10. 0xe68dfeb8687e7a72eb078e3120558cc918d7671cbf9c7265556dfd784745f834
  11. 0x111fd232396ead40450b60675620e12353358cd4516d410bf17aab840d3d4c3f
  12. 0x1e91fb86942396b9cc1330407cbddfe6048e98bde8c739e6cb5545d04c5cadd7
  13. 0x1a710d4f8e6092d584b581d8599ff9183c0008f9275cf0601c925b43b4e84ae6
  14. 0xe8ee6f6ed50253c5ee2d1aa85a4b1a38ce94bca7f3b72fd1850f496152dbe285
  15. 0xa383a1cfe9b3f6af67eb4c7642564b9424d46d7fca90e7ba175d549f8b67dd0c
  16. 0x52efa60e0c3d8525486d2310eb3b6b566c9677c64fd1f819edb072cf101bcbdb
  17. 0x22c1fb9487ee0b9732fa017a0cc321eb27a60c08450d112f755089796e12cb1c
  18. 0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON