addrbookFor publishers
← The evidence ledger

Evidence row 301514

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 8fab493b-e443-4b04-9db9-4527cf55e154
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
22918a62802d2386ccd52e4a2f6220d82692b6838fc9b8a7e879786e95ce9640
Leaf
0x30cf13a618e084249e17d7f38032387329a70fba859723378fc13b0655c3e937

What was observed

{
  "count": 22,
  "tools": [
    {
      "description": "Authorize or de-authorize a device (only relevant when device approval is enabled for the tailnet). Tailscale REST: POST /device/{deviceId}/authorized.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "authorized": {
            "description": "True to authorize the device into the tailnet, false to de-authorize it.",
            "type": "boolean"
          },
          "deviceId": {
            "description": "The device id.",
            "type": "string"
          }
        },
        "required": [
          "deviceId",
          "authorized"
        ],
        "type": "object"
      },
      "name": "tailscale_authorize_device"
    },
    {
      "description": "Create a new auth key for the tailnet (used to register new devices). Tailscale REST: POST /tailnet/{tailnet}/keys.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "description": {
            "description": "A short description for the key.",
            "type": "string"
          },
          "ephemeral": {
            "description": "If true, devices registered with this key are ephemeral (removed shortly after going offline).",
            "type": "boolean"
          },
          "expirySeconds": {
            "description": "Key lifetime in seconds; 0 means no expiry (if allowed by tailnet policy).",
            "type": "number"
          },
          "preauthorized": {
            "description": "If true, devices registered with this key are pre-authorized (skip device approval).",
            "type": "boolean"
          },
          "reusable": {
            "description": "If true, the key can register multiple devices.",
            "type": "boolean"
          },
          "tags": {
            "description": "ACL tags to apply to devices created with this key, e.g. [\"tag:ci\"].",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "name": "tailscale_create_auth_key"
    },
    {
      "description": "Delete a device, removing it from the tailnet. Tailscale REST: DELETE /device/{deviceId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "deviceId": {
            "description": "The device id to delete.",
            "type": "string"
          }
        },
        "required": [
          "deviceId"
        ],
        "type": "object"
      },
      "name": "tailscale_delete_device"
    },
    {
      "description": "Delete (revoke) an auth key or API access token by id — a security response. Tailscale REST: DELETE /tailnet/{tailnet}/keys/{keyId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "keyId": {
            "description": "The key id to delete.",
            "type": "string"
          }
        },
        "required": [
          "keyId"
        ],
        "type": "object"
      },
      "name": "tailscale_delete_key"
    },
    {
      "description": "Expire a device's node key, forcing it to re-authenticate — a security response to a compromised or lost device. Tailscale REST: POST /device/{deviceId}/expire.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "deviceId": {
            "description": "The device id.",
            "type": "string"
          }
        },
        "required": [
          "deviceId"
        ],
        "type": "object"
      },
      "name": "tailscale_expire_device_key"
    },
    {
      "description": "Get a single device by id. Tailscale REST: GET /device/{deviceId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "deviceId": {
            "description": "The device id.",
            "type": "string"
          },
          "fields": {
            "description": "Field set — 'all' returns all fields incl. posture attributes and routes; 'default' is the standard subset.",
            "enum": [
              "default",
              "all"
            ],
            "type": "string"
          }
        },
        "required": [
          "deviceId"
        ],
        "type": "object"
      },
      "name": "tailscale_get_device"
    },
    {
      "description": "Get the tailnet's DNS preferences (e.g. whether MagicDNS is enabled). Tailscale REST: GET /tailnet/{tailnet}/dns/preferences.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "tailscale_get_dns_preferences"
    },
    {
      "description": "Get details of a single auth key / API access token by id (capabilities, expiry, usage). Tailscale REST: GET /tailnet/{tailnet}/keys/{keyId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "keyId": {
            "description": "The key id.",
            "type": "string"
          }
        },
        "required": [
          "keyId"
        ],
        "type": "object"
      },
      "name": "tailscale_get_key"
    },
    {
      "description": "Get the tailnet's ACL / policy file (returned as JSON via the Accept header, not HuJSON). Tailscale REST: GET /tailnet/{tailnet}/acl.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "details": {
            "description": "If true, include metadata about the policy file (e.g. when and by whom it was last updated).",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "name": "tailscale_get_policy_file"
    },
    {
      "description": "Get the tailnet's split-DNS configuration — a map of domain → nameservers. Tailscale REST: GET /tailnet/{tailnet}/dns/split-dns.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "tailscale_get_split_dns"
    },
    {
      "description": "Get the tailnet's settings (device approval, key expiry, posture, etc.). Tailscale REST: GET /tailnet/{tailnet}/settings.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "tailscale_get_tailnet_settings"
    },
    {
      "description": "Get a single user by id. Tailscale REST: GET /users/{userId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "userId": {
            "description": "The user id.",
            "type": "string"
          }
        },
        "required": [
          "userId"
        ],
        "type": "object"
      },
      "name": "tailscale_get_user"
    },
    {
      "description": "List the subnet routes a device advertises and which are enabled. Tailscale REST: GET /device/{deviceId}/routes.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "deviceId": {
            "description": "The device id.",
            "type": "string"
          }
        },
        "required": [
          "deviceId"
        ],
        "type": "object"
      },
      "name": "tailscale_list_device_routes"
    },
    {
      "description": "List all devices in the tailnet (name, addresses, OS, last seen, tags, etc.). Tailscale REST: GET /tailnet/{tailnet}/devices.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "fields": {
            "description": "Field set — 'all' returns all fields incl. posture attributes and routes; 'default' is the standard subset.",
            "enum": [
              "default",
              "all"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "tailscale_list_devices"
    },
    {
      "description": "List the global DNS nameservers configured for the tailnet. Tailscale REST: GET /tailnet/{tailnet}/dns/nameservers.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "tailscale_list_dns_nameservers"
    },
    {
      "description": "List the DNS search paths (search domains) configured for the tailnet. Tailscale REST: GET /tailnet/{tailnet}/dns/searchpaths.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "tailscale_list_dns_searchpaths"
    },
    {
      "description": "List auth keys and API access tokens for the tailnet. Tailscale REST: GET /tailnet/{tailnet}/keys.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "all": {
            "description": "If true, returns all keys, tokens and OAuth clients in the tailnet, not just the caller's own (requires appropriate scope). Default false.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "name": "tailscale_list_keys"
    },
    {
      "description": "List users of the tailnet, optionally filtered by type, role or status. Tailscale REST: GET /tailnet/{tailnet}/users.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "role": {
            "description": "Filter by role, e.g. owner, admin, member, it-admin, network-admin, billing-admin, auditor.",
            "type": "string"
          },
          "status": {
            "description": "Filter by user status.",
            "enum": [
              "all",
              "active",
              "idle",
              "suspended",
              "needs-approval",
              "over-billing-limit"
            ],
            "type": "string"
          },
          "type": {
            "description": "Filter by user type.",
            "enum": [
              "all",
              "member",
              "shared",
              "invited"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "tailscale_list_users"
    },
    {
      "description": "List the webhook endpoints configured for the tailnet. Tailscale REST: GET /tailnet/{tailnet}/webhooks.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "tailscale_list_webhooks"
    },
    {
      "description": "Set (rename) a device's name. Tailscale REST: POST /device/{deviceId}/name.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "deviceId": {
            "description": "The device id.",
            "type": "string"
          },
          "name": {
            "description": "The new device name.",
            "type": "string"
          }
        },
        "required": [
          "deviceId",
          "name"
        ],
        "type": "object"
      },
      "name": "tailscale_set_device_name"
    },
    {
      "description": "Set the subnet routes ENABLED for a device (from the routes it advertises). REPLACES the enabled set. Tailscale REST: POST /device/{deviceId}/routes.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "deviceId": {
            "description": "The device id.",
            "type": "string"
          },
          "routes": {
            "description": "The set of subnet routes (CIDRs) to ENABLE for this device, e.g. [\"10.0.0.0/24\"]. REPLACES the enabled set.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "deviceId",
          "routes"
        ],
        "type": "object"
      },
      "name": "tailscale_set_device_routes"
    },
    {
      "description": "Set a device's ACL tags. REPLACES the device's existing tags. Tailscale REST: POST /device/{deviceId}/tags.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "deviceId": {
            "description": "The device id.",
            "type": "string"
          },
          "tags": {
            "description": "ACL tags to apply, e.g. [\"tag:server\"]. REPLACES the device's existing tags.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "deviceId",
          "tags"
        ],
        "type": "object"
      },
      "name": "tailscale_set_device_tags"
    }
  ]
}

What the leaf hashes

{"body":"22918a62802d2386ccd52e4a2f6220d82692b6838fc9b8a7e879786e95ce9640","id":301514,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793054119383864,"prev":null,"subject":"8fab493b-e443-4b04-9db9-4527cf55e154","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. 0x30cf48d2edabf2eeac7dc13be529966cbc03698ac4f3b901f8e8bd5ec17224e0
  2. 0x799f13cc8e1afc6ecfdf15c61dbd8327ba9ee7e7d2c280bb6c5b59562b86d95a
  3. 0x1260160ae1919ae8837b45bbc42ac6e8dddd5171e3ab4d4ccd363bfdc0ec8fcd
  4. 0x65105af759605825f20619e5384baa21e7d740128eea34e4bb48dda48ee93a38
  5. 0x8de90ab4e706fb1f1f0f29751d49e3335cb4fc75428a96c54a9a00c8f2a83794
  6. 0x5a2a00bd19a07bb7a56b85ed54eaffdcb2aaf9cf141ea953a400d53eb5bfc678
  7. 0x3dd7ab5faf3af8c849340fec7cd1f8308f6285bdeb06ba62e583c6022bf3ab59
  8. 0x6bedc6a901d3ff1db44562ca2e708efaf965ca0f1ca38c9335892096cb0b58db
  9. 0x25ba1b9145475ea9ef33090e367d91a0fd38d074fef51cf5ad78e396de8c39ee
  10. 0x0886695ce8b00ff9cb3b286883a23d258a3fbdfe296f9e24a8b5f848bccd41cb
  11. 0x66b4d790d6ae725a0af009d5a6edacaec5a6147d597bc8410a97be11d56a00d1
  12. 0xd85c7204d76d26255c94ef4caa12c05addd08238caa5cdc3888ea60b74e6b940
  13. 0x36a44931b230976c04691d90bf3a25ed4111d74c78b672850d8025a911ca88dd
  14. 0x683955a5b2250ad50568d022a6580d8739b6aff1356779d72a773b088e7c289c
  15. 0x610738e0c43687aded83c613c73de8b5226c73c375858a167436461c522ea213
  16. 0x06d71bfa7d8b41d62c8836efc2c601e1cc3772d9453596b2ae4950887f3310ca
  17. 0x8c756542e482157df0c36464d75c937b845e4423dbbcfad08f0cf8d5a16b9a13
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON