← The evidence ledger
Evidence row 306193
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 104cd1f6-9d6b-4a9c-adfa-43450983586b
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- c1d59145167da6360a198ee15bfe4852b943aaa58d2e9a51cf85c817f4aa3c7d
- Leaf
- 0x4e8f0abf1435fe62eafa4929f464594ab1967f4beaadb4bb35bad36a9b5f924a
What was observed
{
"count": 11,
"tools": [
{
"description": "Add files to a drop owned by the authenticated account (requires an sp_ API key and an active subscription): up to 10,000 files per drop in total, and existing paths are overwritten. The drop keeps its current expiry and password protection.",
"inputSchema": {
"properties": {
"files": {
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"properties": {
"content": {
"type": "string"
},
"encoding": {
"const": "base64",
"type": "string"
}
},
"required": [
"encoding",
"content"
],
"type": "object"
},
{
"properties": {
"content": {
"type": "string"
}
},
"required": [
"content"
],
"type": "object"
}
]
},
"description": "Map of relative paths (e.g. 'index.html', 'css/app.css') to either a string, or { encoding: 'base64', content } for binary files.",
"type": "object"
},
"slug": {
"description": "The drop slug (the subdomain part of its ${domain} URL).",
"type": "string"
}
},
"required": [
"slug",
"files"
],
"type": "object"
},
"name": "append_files"
},
{
"description": "Attach an anonymously deployed drop to the authenticated account using its one-time claim token (spc_..., returned once by deploy_html/deploy_files). Claiming extends the drop to the free-account lifetime (90 days) and can revive an offline drop during its 30-day private recovery window. Claimed drops become listable, deletable, and — on paid plans — redeployable via named drops. Requires an sp_ API key.",
"inputSchema": {
"properties": {
"claim_token": {
"description": "The one-time spc_... token returned at deploy time.",
"type": "string"
},
"slug": {
"description": "The drop slug (the subdomain part of its ${domain} URL).",
"type": "string"
}
},
"required": [
"slug",
"claim_token"
],
"type": "object"
},
"name": "claim_drop"
},
{
"description": "Permanently delete a drop owned by the authenticated account (requires an sp_ API key). The URL stops serving immediately and cannot be recovered.",
"inputSchema": {
"properties": {
"slug": {
"description": "The drop slug (the subdomain part of its ${domain} URL).",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "delete_drop"
},
{
"description": "Deploy a map of path -> content as a multi-file site (must include index.html to serve at the root). Anonymous: up to 100 files per request, 30-day expiry (90 days once signed in). Pro ($4/mo): up to 10,000 files, custom or no TTL, named drops.",
"inputSchema": {
"properties": {
"agent": {
"description": "Name of the AI agent or app publishing this drop, e.g. 'chatgpt', 'claude', 'cursor'. AI agents: always set this.",
"maxLength": 64,
"type": "string"
},
"email": {
"description": "Contact email for an anonymous deploy: the one-time claim link is mailed to it, so the drop stays recoverable even if the claim_token from the response is lost. Pass it whenever the deploy is for a human. Ignored for authenticated deploys (those are owned already).",
"type": "string"
},
"files": {
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"properties": {
"content": {
"type": "string"
},
"encoding": {
"const": "base64",
"type": "string"
}
},
"required": [
"encoding",
"content"
],
"type": "object"
},
{
"properties": {
"content": {
"type": "string"
}
},
"required": [
"content"
],
"type": "object"
}
]
},
"description": "Map of relative paths (e.g. 'index.html', 'css/app.css') to either a string, or { encoding: 'base64', content } for binary files.",
"type": "object"
},
"name": {
"description": "Stable name for a redeployable drop (1-41 chars of [a-z0-9-]). Requires an active subscription; Team accounts serve it on their vanity subdomain.",
"type": "string"
},
"password": {
"description": "Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again.",
"maxLength": 128,
"minLength": 8,
"type": "string",
"writeOnly": true
},
"ttl": {
"description": "Lifetime in seconds (min 60). Anonymous: max 2592000 (30 days), default 30 days. Signed-in free: max 7776000 (90 days), default 90 days. Paid: any value, omit for no expiry.",
"type": "integer"
}
},
"required": [
"files"
],
"type": "object"
},
"name": "deploy_files"
},
{
"description": "Deploy one HTML document and get back a live, unguessable https://<slug>.ship.place/ URL. Anonymous: 10 deploys/min per IP, 10MB body cap, 30-day expiry. Pro ($4/mo): custom or no TTL, named drops.",
"inputSchema": {
"properties": {
"agent": {
"description": "Name of the AI agent or app publishing this drop, e.g. 'chatgpt', 'claude', 'cursor'. AI agents: always set this.",
"maxLength": 64,
"type": "string"
},
"email": {
"description": "Contact email for an anonymous deploy: the one-time claim link is mailed to it, so the drop stays recoverable even if the claim_token from the response is lost. Pass it whenever the deploy is for a human. Ignored for authenticated deploys (those are owned already).",
"type": "string"
},
"html": {
"description": "The full HTML document to publish.",
"type": "string"
},
"name": {
"description": "Stable name for a redeployable drop (1-41 chars of [a-z0-9-]). Requires an active subscription; Team accounts serve it on their vanity subdomain.",
"type": "string"
},
"password": {
"description": "Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again.",
"maxLength": 128,
"minLength": 8,
"type": "string",
"writeOnly": true
},
"ttl": {
"description": "Lifetime in seconds (min 60). Anonymous: max 2592000 (30 days), default 30 days. Signed-in free: max 7776000 (90 days), default 90 days. Paid: any value, omit for no expiry.",
"type": "integer"
}
},
"required": [
"html"
],
"type": "object"
},
"name": "deploy_html"
},
{
"description": "Show the authenticated account's plan, subscription status and usage (requires an sp_ API key). Anonymous callers should use get_limits for the static free-tier limits.",
"inputSchema": {
"additionalProperties": false,
"type": "object"
},
"name": "get_account"
},
{
"description": "Show the ship.page plan matrix (anonymous free tier vs Pro $4/mo vs Team $19/mo) and, when an sp_ API key is present, the caller's current account/plan status.",
"inputSchema": {
"additionalProperties": false,
"type": "object"
},
"name": "get_limits"
},
{
"description": "List drops owned by the authenticated account (requires an sp_ API key; anonymous drops are not listable). Returns slug, url, name, file counts, expiry and password_protected, newest first.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max drops to return (1-500, default 100).",
"type": "integer"
},
"offset": {
"description": "Number of drops to skip (default 0).",
"type": "integer"
}
},
"type": "object"
},
"name": "list_drops"
},
{
"description": "Remove password protection from a drop you own, making it readable by anyone with its URL. Requires an sp_ API key; works even after your paid subscription lapses.",
"inputSchema": {
"properties": {
"slug": {
"description": "The drop slug (the subdomain part of its URL).",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "remove_drop_password"
},
{
"description": "Bring back an expired drop owned by the authenticated account while its files are still retained (requires an sp_ API key), up to 90 days past expiry. Free accounts get the drop back at the 90-day lifetime; on a paid plan the restored drop never expires again.",
"inputSchema": {
"properties": {
"slug": {
"description": "The drop slug (the subdomain part of its ${domain} URL).",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "restore_drop"
},
{
"description": "Set or rotate the shared password on a drop you own. Requires an sp_ API key and active paid Pro/Team; unavailable billing returns an error, not a public drop. Visitors unlock in their browser. Never put the password in a URL.",
"inputSchema": {
"properties": {
"password": {
"description": "Shared password: 8-128 Unicode characters, at most 512 UTF-8 bytes. Requires active paid Pro/Team. Sent privately, never in the URL or response. Omit on a live named redeploy to preserve protection. Recreating an expired or purged name is a new drop: send the password again.",
"maxLength": 128,
"minLength": 8,
"type": "string",
"writeOnly": true
},
"slug": {
"description": "The drop slug (the subdomain part of its URL).",
"type": "string"
}
},
"required": [
"slug",
"password"
],
"type": "object"
},
"name": "set_drop_password"
}
]
}What the leaf hashes
{"body":"c1d59145167da6360a198ee15bfe4852b943aaa58d2e9a51cf85c817f4aa3c7d","id":306193,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793056856042020,"prev":null,"subject":"104cd1f6-9d6b-4a9c-adfa-43450983586b","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).
- 0x4e8edfcdf3b9c27146459a1de4955c559dd9ebc923bf7e527d545f25ade22209
- 0x18c617b2c3455cf295ca7a6b84283fb8079c3232fa61ac1bdbdec3eaa3873f39
- 0xf2315908e82faa6278afd8240cb63424b3a3b29bd6240e6723849f1f179a03b9
- 0xc4cd4212ab41e7107fd76fa4269b9392cb69c4773001392ca157905a58709d43
- 0x410f1d16607aa2e12693ba2b53b03bc6ff0717b818639eba711123405b577985
- 0x50ece1e29fc72834207827c93b44f43f54aeb631fe5892c77f0212d7bdc9fe68
- 0x4063b0f49116fb3ecbd63c509f4e5649e9e4b2cd5df64c9aaa49b1977e69b534
- 0xaf763b0948da365fc0ef988fbdc9b315e7f23b7c591755e1a0a746af0f43fdf5
- 0xb5a2ff57df9c49538a0db5306ddc37af974a8caaa04dd03823b77e9b0412f004
- 0x3c2a519207c7fbe7025a4c98d41e42ecc9446b3fb0b1dbff629a91c8c74e0781
- 0x20ba86fd56bddd46212d02e792b969e90a1167c4fb9ba4a54cb7da5cf7da1629
- 0xaf14a84837a57dc5a0cb0ebd158daaad24c19301b9257d9e97c322a7d8c54bc0
- 0xf7d2cf278e5d2768b8bdb70730c378877cf7165d8efcbec8bcd3282fdc50d177
- 0x0733993143f0230e79482cef2c38e95d98f9eafbe64a43cdc74a4545938a4167
- 0x2be1e80e065dd6b2cc75a7142be22225acd144ac975d70bf24b4f01fd76dc497
- 0x2e6a32eb32761c210560e852405e2f865f958ddbe01027894f8b9c1b3433b9f0
- 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
- 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
- 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
- Day root
- 0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
- Chained
- 0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
- Published
- On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae