addrbookFor publishers
← The evidence ledger

Evidence row 2570225

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 5a02c420-0b6f-4cee-b274-a8d6a1a837ef
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
8ea67c2dae6a131521a392e674551a3e07c39df352bc35e9fab4ee1a9dbd74ac
Leaf
0x66db5c6c25767f9a76f8a7cb7836f0cdb3dd383a13743e66ec99a20dfd3d02ad

What was observed

{
  "count": 17,
  "tools": [
    {
      "description": "Add a conditional response to a route: when the request matches the conditions (query, header, path param, body field), the mock answers with this status, body and latency. Rules are evaluated in order, the first match wins; x-loutre-* headers keep priority.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "body": {
            "description": "JSON body of the response"
          },
          "latencyMs": {
            "maximum": 30000,
            "minimum": 0,
            "type": "number"
          },
          "name": {
            "description": "Human-readable label of the rule",
            "maxLength": 60,
            "type": "string"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "route": {
            "description": "Route identifier, lowercase method: \"get:/users/{id}\"",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          },
          "status": {
            "maximum": 599,
            "minimum": 100,
            "type": "integer"
          },
          "when": {
            "additionalProperties": false,
            "description": "Every condition must hold",
            "properties": {
              "body": {
                "additionalProperties": {},
                "description": "Expected JSON body fields, by dotted path (customer.email)",
                "propertyNames": {
                  "type": "string"
                },
                "type": "object"
              },
              "header": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Expected headers",
                "propertyNames": {
                  "type": "string"
                },
                "type": "object"
              },
              "param": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Expected path parameters ({id})",
                "propertyNames": {
                  "type": "string"
                },
                "type": "object"
              },
              "query": {
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Expected query parameters",
                "propertyNames": {
                  "type": "string"
                },
                "type": "object"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "slug",
          "route",
          "when"
        ],
        "type": "object"
      },
      "name": "add_rule"
    },
    {
      "description": "Call a route of the mock like an HTTP client would and return the status, the x-loutre-* headers and the body. The headers x-loutre-status, x-loutre-delay, x-loutre-count, x-loutre-message and x-loutre-seed are honoured; latency is not awaited, it is reported in delayMs. Writes (POST, PUT, PATCH, DELETE) are persisted when persistent state is on. For a GraphQL mock, POST to its GraphQL path with the body { \"query\": \"…\", \"variables\": { … } }; mutations are persisted the same way.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "accessKey": {
            "description": "Access key (lk_…) of a private mock you do not own",
            "type": "string"
          },
          "body": {
            "description": "JSON body for POST, PUT, PATCH"
          },
          "headers": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Request headers, including x-loutre-*",
            "propertyNames": {
              "type": "string"
            },
            "type": "object"
          },
          "method": {
            "default": "GET",
            "enum": [
              "GET",
              "POST",
              "PUT",
              "PATCH",
              "DELETE",
              "HEAD",
              "OPTIONS",
              "QUERY"
            ],
            "type": "string"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "path": {
            "description": "Path with its query string: \"/users/42?expand=orders\"",
            "minLength": 1,
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug",
          "method",
          "path"
        ],
        "type": "object"
      },
      "name": "call_mock"
    },
    {
      "description": "Empty the mock's request log.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "clear_requests"
    },
    {
      "description": "Remove every conditional rule of a route.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "route": {
            "description": "Route identifier, lowercase method: \"get:/users/{id}\"",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug",
          "route"
        ],
        "type": "object"
      },
      "name": "clear_rules"
    },
    {
      "description": "Create a hosted mock from an OpenAPI 3.0/3.1 or Swagger 2.0 document (YAML or JSON), from TypeScript types (interfaces, types, enums: CRUD routes derived, or a route map type keyed like \"GET /users\") or from a Postman v2 collection, an Insomnia export (v4 JSON or v5 YAML), a Bruno collection (JSON export, or .bru files one after the other), a HAR file (headers and cookies are dropped, data is generated), a json-server db.json (records served as they are), curl commands, or a GraphQL schema (SDL or introspection JSON; Pro plan: queries, mutations and introspection answered on POST /graphql). OpenAPI 3.2 is read too. Give the document in `spec`, or its public address in `url` (then the mock re-reads it every six hours and follows changes). Returns the URL, the route list and an ownerToken to keep for later changes. Data is realistic and coherent, generated once. Without an account the mock lives seven days.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "auto": {
            "description": "With url: re-read every six hours (default true)",
            "type": "boolean"
          },
          "locale": {
            "description": "Language of names, addresses, texts and error messages (default: the request's language, else English)",
            "enum": [
              "en",
              "fr"
            ],
            "type": "string"
          },
          "seed": {
            "description": "Data seed, for reproducible data sets",
            "maxLength": 64,
            "type": "string"
          },
          "slug": {
            "description": "Desired subdomain (Pro plan)",
            "maxLength": 63,
            "type": "string"
          },
          "spec": {
            "description": "The full document, verbatim: OpenAPI, Swagger, TypeScript types, a Postman, Insomnia or Bruno collection, a HAR file, a db.json or curl commands",
            "minLength": 1,
            "type": "string"
          },
          "url": {
            "description": "Public URL of the document, instead of spec",
            "format": "uri",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "create_mock"
    },
    {
      "description": "Permanently delete a mock and its kept schema.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "delete_mock"
    },
    {
      "description": "Details of a mock: routes with identifiers, behaviour, lock, sample generated bodies per route.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "get_mock"
    },
    {
      "description": "The latest requests received by the mock, most recent first: method, path, query, status, headers and body as received (body cut at 8 KB), where the answer came from, latency. Each entry has an id for replay_request.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "limit": {
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "get_requests"
    },
    {
      "description": "List the connected account's mocks (API token required), with their URL, routes and expiry.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {},
        "type": "object"
      },
      "name": "list_mocks"
    },
    {
      "description": "Generate a new data set (new seed), for the whole mock or for one route and the routes sharing its collection. A full new set forgets persisted writes.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "locale": {
            "description": "Switch the data language (whole mock only)",
            "enum": [
              "en",
              "fr"
            ],
            "type": "string"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "routeId": {
            "description": "Route identifier, lowercase method: \"get:/users/{id}\"",
            "type": "string"
          },
          "seed": {
            "maxLength": 64,
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "regenerate_mock"
    },
    {
      "description": "Replay a request from the log exactly as it was received (same method, path, headers and body) against the mock as it is now, and return the answer. Useful after changing a rule, a body or a scenario.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "Entry id from get_requests",
            "minLength": 1,
            "type": "string"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug",
          "id"
        ],
        "type": "object"
      },
      "name": "replay_request"
    },
    {
      "description": "Forget persisted writes (POST, PUT, PATCH, DELETE): the generated collections come back as they were.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "reset_state"
    },
    {
      "description": "Lock a mock with a token (private) and/or restrict the allowed browser origins. Pro plan.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "origins": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "description": "Allowed origins (https://app.example.com); null to allow all"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "private": {
            "type": "boolean"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "set_access"
    },
    {
      "description": "Change a mock's behaviour: default status, latency, jitter, error rate, persistent writes, and per route status, latency, hand-written bodies, rules. Merge semantics: missing keys are kept, null clears.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "patch": {
            "additionalProperties": false,
            "description": "Same fields as PATCH /mocks/:slug/behavior: a missing key is kept, null clears",
            "properties": {
              "activeScenario": {
                "description": "Scenario applied to every request without an x-loutre-scenario header; null deactivates",
                "type": [
                  "string",
                  "null"
                ]
              },
              "errorRate": {
                "anyOf": [
                  {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Share of requests that return an error"
              },
              "graphqlPath": {
                "description": "GraphQL mocks only: the path the endpoint answers on, /graphql by default (e.g. /api/graphql); null restores /graphql",
                "type": [
                  "string",
                  "null"
                ]
              },
              "jitter": {
                "anyOf": [
                  {
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Random latency variation (0.3 = ± 30 %)"
              },
              "latencyMs": {
                "anyOf": [
                  {
                    "maximum": 30000,
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "proxy": {
                "description": "Base URL of a real backend: routes the schema does not describe are forwarded there; null removes",
                "type": [
                  "string",
                  "null"
                ]
              },
              "routes": {
                "anyOf": [
                  {
                    "additionalProperties": {
                      "anyOf": [
                        {
                          "additionalProperties": false,
                          "properties": {
                            "bodies": {
                              "anyOf": [
                                {
                                  "additionalProperties": {},
                                  "propertyNames": {
                                    "type": "string"
                                  },
                                  "type": "object"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Status → hand-written JSON body; null removes"
                            },
                            "errorRate": {
                              "anyOf": [
                                {
                                  "maximum": 1,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "latencyMs": {
                              "anyOf": [
                                {
                                  "maximum": 30000,
                                  "minimum": 0,
                                  "type": "number"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "rules": {
                              "anyOf": [
                                {
                                  "items": {},
                                  "type": "array"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Conditional rules (see add_rule); the list replaces the existing one"
                            },
                            "status": {
                              "anyOf": [
                                {
                                  "maximum": 599,
                                  "minimum": 100,
                                  "type": "integer"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "type": "object"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "propertyNames": {
                      "type": "string"
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Settings per route identifier"
              },
              "scenarios": {
                "anyOf": [
                  {
                    "additionalProperties": {
                      "anyOf": [
                        {},
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "propertyNames": {
                      "type": "string"
                    },
                    "type": "object"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Named bundles of settings (same fields as this patch minus scenarios and proxy), applied per request with the x-loutre-scenario header or with activeScenario; null removes"
              },
              "stateful": {
                "description": "Persistent writes (true by default)",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "status": {
                "anyOf": [
                  {
                    "maximum": 599,
                    "minimum": 100,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Forced status for the whole mock; null to remove"
              }
            },
            "type": "object"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug",
          "patch"
        ],
        "type": "object"
      },
      "name": "set_behavior"
    },
    {
      "description": "Serve the mock under the account's own hostname (Pro): declares it at Cloudflare and returns the CNAME to create (hostname → target) plus the current status; call again without hostname to re-check, or with hostname null to remove it.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "hostname": {
            "anyOf": [
              {
                "maxLength": 253,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "e.g. mock.acme.com; null removes; omitted re-checks the status"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "set_domain"
    },
    {
      "description": "Set the JSON body a route returns for a given status (hand-written response); a null body restores the generated response.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "body": {
            "description": "JSON body, or null to go back to the generated response"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "route": {
            "description": "Route identifier, lowercase method: \"get:/users/{id}\"",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          },
          "status": {
            "maximum": 599,
            "minimum": 100,
            "type": "integer"
          }
        },
        "required": [
          "slug",
          "route",
          "status",
          "body"
        ],
        "type": "object"
      },
      "name": "set_response"
    },
    {
      "description": "Re-read the schema at the mock's source URL now and update the mock if it changed (routes, fields; settings kept, persisted writes forgotten). force regenerates even when the document is unchanged.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "force": {
            "type": "boolean"
          },
          "ownerToken": {
            "description": "Owner token received at creation (not needed when the account is connected with an API token)",
            "type": "string"
          },
          "slug": {
            "description": "Subdomain of the mock, e.g. \"brisk-otter\"",
            "pattern": "^[a-z0-9-]{1,63}$",
            "type": "string"
          }
        },
        "required": [
          "slug"
        ],
        "type": "object"
      },
      "name": "sync_mock"
    }
  ]
}

What the leaf hashes

{"body":"8ea67c2dae6a131521a392e674551a3e07c39df352bc35e9fab4ee1a9dbd74ac","id":2570225,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793704618231093,"prev":null,"subject":"5a02c420-0b6f-4cee-b274-a8d6a1a837ef","subject_kind":"endpoint"}

Proof

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

  1. 0x66db43128feb5b3d64dfbcae9e8479c9e3cbf5cbcc801ee45f1794c47831d77d
  2. 0xdfc4dd5e7953fc41f038e1c62515a617806bc3e85e415003f377a8627b6d8f5e
  3. 0x8c6a20f11f7c5942c89149d1da8b90ef54fa01d531df99f347975ea72e86bb4d
  4. 0xc6e46f3c9bcf3b6915da12a72d7028e715ec5dda60f0efbb06510fd46ffecdfc
  5. 0x3ec9c9f25db31c283ca1bae1497336f6167cddb84d5765670f853078f0504442
  6. 0x8983f725eef502000ae29497bf6008b7a394d4f6b027d6635961eef3de68f928
  7. 0x6ffa1e5188e8fce82c1dbc66a1b8144c49f8db3c8a852bcf4f59b24847f7398c
  8. 0x37a940779c7f12bdaa5aaf7860064587a66bd903338c4b5677e9a893d09a8c76
  9. 0xc8edf5e593241e05a19ee435f78336ee828d4945774d213e55219abaed057e46
  10. 0x91be1f0cb1cf36e97e2e62c9b28c3432907a02fed3ec2741ff35f1ab31fdcecc
  11. 0x81e532ae2d0a24fe1b441de7cd567d33f321d6727dfe66837e725529c1cf9d8a
  12. 0x1afcffac07889ff89c585e14a13281f7d2d378e1248a75f06d54029a2885d90c
  13. 0x52c189e90e4b72108116f47d43eb5a8d0a5079c20090bfabc8c2e23ac7ec8019
  14. 0x7888f4af6f2ce9e8a2789d6262f3507d19501a0a365770aaf709515f60b6e8f2
  15. 0xa8458bc8c8ab1d4945ab9da0d4203ddba2468a0fef808e9febae01e3e86bcd40
  16. 0x4f2735e4d41cb2a5d48f6769cc066ea1066bbcd0623dd42fe7bc81e54092cd64
  17. 0x3ef2d6c56d2bc5990e646c07605e90ed24d1c642cbcca8f60a35422b8b7981ee
  18. 0x717b5d7cbc24826c5b1f7b7433bf30b76e9ba1370476af4e1b494a5211897cc3
  19. 0xe35032d4b064b015fe60638756eeb0bc24e7c7943586468d33349341ee0ed3d6
Day root
0xb646ffa569e24bf8336b0a15a9d98d0a2f1239f58e10c2b18a9d22e43343566a
Chained
0x35e926359fd19031c6b5e08fb3b44f2524386a57c8fdd353336c185603f53d43
Published
On Arc Testnet, block 70601990: 0xa5f9dadba13cde129126b950e64b815e6833cb8ff53b75026c9dbe769c3768c7

How to check it · This row as JSON