addrbookFor publishers
← The evidence ledger

Evidence row 3960734

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 1f6338d5-9613-43a9-aca6-f8d5e7d7c056
Recorded
Previous row
#3702534
Body SHA-256
151f3045b1e4dcec47b528d08e4cb8ffcf4b2c2646173fdc281498e9564586b2
Leaf
0x081cf19586d48958df261ce202dce82945f68e933dcc81bbdf903434a64edbaa

What was observed

{
  "count": 28,
  "tools": [
    {
      "description": "Add a product from just its URL: krawlup scrapes the site (name, tagline, description, icons) and adds it to the founder's dashboard. Every other field is optional — explicit values override the scrape. Adding NEVER publishes — the product is private until the founder (or set_product_public) publishes it. Requires the submit permission.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "categories": {
            "description": "Up to three category ids (or slugs/names) from check_launch_readiness. Optional — the founder can tag the product later.",
            "items": {
              "type": "string"
            },
            "maxItems": 3,
            "type": "array"
          },
          "description": {
            "description": "Short description (max 600 characters). Omit to use the scraped description.",
            "maxLength": 600,
            "type": "string"
          },
          "name": {
            "description": "Product name (max 40 characters). Omit to use the scraped site title.",
            "maxLength": 40,
            "type": "string"
          },
          "tagline": {
            "description": "One-line tagline (max 120 characters). Omit to use the scraped site description.",
            "maxLength": 120,
            "type": "string"
          },
          "twitterUsername": {
            "description": "The product's X/Twitter handle (bare handle or profile URL)",
            "type": "string"
          },
          "url": {
            "description": "The product website URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "add_product"
    },
    {
      "description": "Adds keywords to a product's rank-tracking board (max KEYWORD_TRACK_CAP per product). Tracked keywords are re-checked by the scanner on its scan passes and their top-10 positions become the rank history get_keyword_ranks reads. Requires a key with the rescan scope",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "keywords": {
            "description": "The keywords to track — normalized (trimmed, lowercased, deduped) before storage",
            "items": {
              "type": "string"
            },
            "maxItems": 100,
            "type": "array"
          },
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey",
          "keywords"
        ],
        "type": "object"
      },
      "name": "add_tracked_keywords"
    },
    {
      "description": "Adds custom prompts to a product's AI-visibility tracking board (the plan's trackedPromptsPerPlan slots on top of the derived prompt set). Tracked prompts are answered by every scheduled visibility run across the configured engines; get the per-prompt citation trend from the dashboard's AI visibility tab. Requires a key with the rescan scope",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          },
          "prompts": {
            "description": "The questions to ask the AI engines about this product, e.g. \"best alternative to <brand> for <use case>\" — normalized (trimmed, case-insensitively deduped) before storage",
            "items": {
              "type": "string"
            },
            "maxItems": 50,
            "type": "array"
          }
        },
        "required": [
          "productKey",
          "prompts"
        ],
        "type": "object"
      },
      "name": "add_tracked_prompts"
    },
    {
      "description": "Audit a URL before adding it to krawlup: bans, blocked platforms, whether the product already exists (and who owns it), plus the optional category list. Run this before add_product.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "url": {
            "description": "The product website URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "check_launch_readiness"
    },
    {
      "description": "All your products side by side — lifetime or windowed (today / 7d / 30d / 90d) unique visitors, views, revenue totals with refunds netted, average revenue per conversion, revenue per visitor, and scan scores, sorted by any of them. Windowed numbers are computed exactly the way the dashboard computes them (same events, same windows), so they match the product page; lifetime visitors are the leaderboard's HLL estimate (~1.6%) and lifetime revenue comes from the payments ledger. Products and scores are always included; visitor columns and windowed revenue need the website_analytics subscription facility, revenue columns need analytics_conversion — gated columns come back null with a note instead of failing the call.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "limit": {
            "description": "Max products returned. Default 50.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "order": {
            "description": "Sort direction. Default: desc (biggest / newest first).",
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string"
          },
          "range": {
            "description": "Metric window. lifetime = all-time totals; the others are ROLLING windows over the last N UTC days ending today (each includes today so far) — like the dashboard, they are not calendar-day buckets.",
            "enum": [
              "lifetime",
              "today",
              "7d",
              "30d",
              "90d"
            ],
            "type": "string"
          },
          "sortBy": {
            "description": "Column to sort by. Products missing the chosen metric sort last. Default: visitors.",
            "enum": [
              "visitors",
              "views",
              "revenue",
              "conversions",
              "avgRevenue",
              "score",
              "performance",
              "recent"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "compare_products"
    },
    {
      "description": "Triggers one grounded blog-post draft for a product (Content Lab). Generated ONLY from the product's own Krawlup facts — profile, tracked prompts, tracked keywords, triaged mentions; never auto-published, the founder reviews and copies the markdown into their own blog. Angles: prompt-answer (answer a tracked AI question that does not cite the product yet — pass the exact prompt text as sourceRef), comparison (honest vs-post; topic names the rival, unverified rival claims stay neutral), mention-answer (answer a real community mention — pass the term as sourceRef), custom. The draft flips from generating to ready (or honestly failed) in the dashboard's Content tab within a few minutes. Requires a key with the rescan scope",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          },
          "sourceRef": {
            "description": "The grounding anchor when one exists: the exact tracked prompt text or the watch term",
            "maxLength": 240,
            "type": "string"
          },
          "topic": {
            "description": "What the post is about, one line (e.g. \"best lightweight alternative to Acme for solo founders\")",
            "maxLength": 200,
            "type": "string"
          },
          "type": {
            "description": "The draft angle",
            "enum": [
              "prompt-answer",
              "comparison",
              "mention-answer",
              "custom"
            ],
            "type": "string"
          }
        },
        "required": [
          "productKey",
          "type",
          "topic"
        ],
        "type": "object"
      },
      "name": "generate_content_draft"
    },
    {
      "description": "The exact <script> tag that installs krawlup first-party analytics on a product's own website (visitors, sessions, pages, referrers, countries, conversion goals). The returned snippet already embeds the site token at data-site=\"…\" — insert BOTH lines yourself; never ask the founder to paste the token. After installing, confirm data appears in the dashboard Website tab within a minute of the first visit",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_analytics_snippet"
    },
    {
      "description": "The raw analytics site token for one product — the data-site value inside the krawlup analytics tag. The token is not a secret (it travels in the tagged page source by design) and is already embedded inside the snippet returned by get_analytics_snippet — never ask the founder to paste the token. Use this for hand-written tags, the @krawlup/analytics-tag npm package, or custom integrations",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_analytics_token"
    },
    {
      "description": "The stored AI bottleneck analysis for one product (THE one edit to make, with why/impact/steps and the agent prompt), or null if not run yet",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_bottleneck"
    },
    {
      "description": "All stored AI fix cards for one product (what/why/steps/agent prompt per issue). Requires a plan with the ai_fix_cards facility",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_fix_cards"
    },
    {
      "description": "Full latest insights for one product — everything the dashboard renders: overall + per-plane scorecards, failing audits, Core Web Vitals metrics, conversion (CRO) checks, the mobile layout test, AI-readiness facts (llms.txt, AI-crawler robots, structured data), trust/security checks, CrUX field data, Domain Rating + OpenPageRank, the SEO crawl, the recommended First Edit, and unresolved AI fix cards (fix cards require the ai_fix_cards plan facility)",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_insights"
    },
    {
      "description": "The stored keyword research for one product: intent-clustered keyword ideas with volume/difficulty estimates (exact volume + CPC when a Keywords Everywhere key is configured), prioritized content actions, and a per-keyword verdict (own/push/hard/skip). A new run can be triggered from here with run_keyword_research; ideas worth watching can be added to rank tracking with add_tracked_keywords. Requires a plan with the keyword_research facility",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_keyword_ideas"
    },
    {
      "description": "Rank history for a product's tracked keywords, as checked by the scanner on its scan passes: per keyword the latest position (null = checked and not in the top-10), best position, and the series of stored checks. Only positions actually checked are returned — never interpolated. searchConfigured=false means no SERP source (Treg/Tavily) is configured and the scanner skips checks, so the board stays empty until the admin configures one. Requires a plan with the keyword_research facility",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "keyword": {
            "description": "Limit to one tracked keyword",
            "maxLength": 100,
            "type": "string"
          },
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_keyword_ranks"
    },
    {
      "description": "Your products with their directory visibility (public/private) — most recent first.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {},
        "type": "object"
      },
      "name": "get_my_products_status"
    },
    {
      "description": "The founder's current subscription: plan name and price, status (active / trial / in the 3-day renewal grace / expired read-only), the plan's abilities and limits (a limit of 0 means unlimited), usage against this period's meters, and a can-do summary. Call this FIRST to check which features the founder's plan actually allows before using any other tool.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {},
        "type": "object"
      },
      "name": "get_my_subscription"
    },
    {
      "description": "The full public listing for one product, by slug or key.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "identifier": {
            "description": "The product slug (e.g. \"acme-app\") or key (its domain)",
            "type": "string"
          }
        },
        "required": [
          "identifier"
        ],
        "type": "object"
      },
      "name": "get_product"
    },
    {
      "description": "Score-over-time series for one product (last 100 scans, chronological): performance, AEO, CRO, SEO crawl, scorecards, CrUX, openRank, and issue counts — plus per-run source and timestamp",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_scan_history"
    },
    {
      "description": "The free public site report for any website (the /site-report tool): performance, AEO, CRO, SEO crawl, CrUX, OpenPageRank, scorecards and the named checks behind them — the same data the public site-report page renders. Cached read, never generates; if hasReport is false, call run_site_report and poll this tool until scanStage clears.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "domain": {
            "description": "The website domain, e.g. \"example.com\"",
            "type": "string"
          }
        },
        "required": [
          "domain"
        ],
        "type": "object"
      },
      "name": "get_site_report"
    },
    {
      "description": "First-party website analytics for one product: visitors, sessions, bounce, avg. duration, pages per session, pageviews, daily series, entry/exit pages, top pages/referrers, acquisition channels, UTM sources, countries/devices, AI crawler visits (AI answers / indexing / training, with a partial flag when a crawler query failed), and conversion events + goals when the plan carries the analytics_conversion facility",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          },
          "range": {
            "description": "Defaults to 7d",
            "enum": [
              "today",
              "7d",
              "30d"
            ],
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "get_website_analytics"
    },
    {
      "description": "List your products on krawlup with their latest scan scores",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {},
        "type": "object"
      },
      "name": "list_products"
    },
    {
      "description": "Removes keywords from a product's rank-tracking board. Their stored rank-check history is deleted with them. Requires a key with the rescan scope",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "keywords": {
            "description": "The keywords to stop tracking",
            "items": {
              "type": "string"
            },
            "maxItems": 100,
            "type": "array"
          },
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey",
          "keywords"
        ],
        "type": "object"
      },
      "name": "remove_tracked_keywords"
    },
    {
      "description": "Runs one keyword research for a product: a Google-autocomplete sweep clustered by a model into intent groups with volume/difficulty estimates and prioritized content actions (Jev-scored fit/demand/competition when the TypeSafe key is bound). Spends one of the founder's monthly keyword-research runs — check first with get_keyword_ideas whether the stored research still serves. Requires a key with the rescan scope",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          },
          "seed": {
            "description": "Seed keyword; defaults to the product's target keyword or name",
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "run_keyword_research"
    },
    {
      "description": "Start the free public scan for any website and return immediately. Authenticated agents get 2 full scans per calendar month per credential; anonymous callers share a per-IP monthly budget with every other surface. Poll get_site_report for the domain until scanStage clears to read the finished report. Domains already listed as krawlup products are refused — scan those from the dashboard.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "domain": {
            "description": "The website domain, e.g. \"example.com\"",
            "type": "string"
          }
        },
        "required": [
          "domain"
        ],
        "type": "object"
      },
      "name": "run_site_report"
    },
    {
      "description": "Search the public catalog of launched products in plain language (min 2 characters).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "limit": {
            "description": "How many results (default 20, max 50)",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "query": {
            "description": "What to search for: product names, taglines, descriptions, domains",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search_products"
    },
    {
      "description": "Replace the per-product Excluded pages board — paths whose visits are discarded at intake (never stored, never counted). DESTRUCTIVE: it changes what the site's analytics records. MCP clients should prompt the site owner before calling; regardless, set confirm=true ONLY after the owner explicitly approved the exact list in the conversation. An empty array removes all exclusions. Requires a key with the submit scope",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "confirm": {
            "description": "Must be true, and may only be true after the site owner approved this exact list in the conversation",
            "type": "boolean"
          },
          "paths": {
            "description": "FULL replacement list of absolute paths (e.g. /admin also covers /admin/settings; max 25) — an empty array clears the board",
            "items": {
              "type": "string"
            },
            "maxItems": 25,
            "type": "array"
          },
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey",
          "paths",
          "confirm"
        ],
        "type": "object"
      },
      "name": "set_excluded_pages"
    },
    {
      "description": "Remove one of your products from the public directory (always allowed, any plan).",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (domain) as returned by add_product or list_products",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "set_product_private"
    },
    {
      "description": "Make one of your products public in the krawlup directory. Publishing requires an active paid subscription (no trial) OR an admin-approved publishing grant covering this exact product; the 403 message names which. Unpublishing is set_product_private. Requires the submit permission.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (domain) as returned by add_product or list_products",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "set_product_public"
    },
    {
      "description": "Starts a fresh full analysis of one product in the background — spends one of the founder's full-analysis allowances for the current billing period (per product, and across all their products), plus one page speed check. Returns immediately; poll get_insights for this product until scanPending is false to read the fresh numbers. Requires a key with the rescan scope.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "productKey": {
            "description": "The product key (see list_products)",
            "type": "string"
          }
        },
        "required": [
          "productKey"
        ],
        "type": "object"
      },
      "name": "trigger_rescan"
    }
  ]
}

What the leaf hashes

{"body":"151f3045b1e4dcec47b528d08e4cb8ffcf4b2c2646173fdc281498e9564586b2","id":3960734,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1794077693339582,"prev":3702534,"subject":"1f6338d5-9613-43a9-aca6-f8d5e7d7c056","subject_kind":"endpoint"}

Proof

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

  1. 0x081d3ea46a8026c0ec412ff85eaf5fcbcbf9a7aea271f341d1f9dc55e3a5b3cb
  2. 0xacca99d1278ce243859dbc529c262ff273a3a14ee1393af381ada011cd07320f
  3. 0x28eaada25395d051ff089025ee36888797eca148e1c32ff15af0a936c912cc90
  4. 0xf72beb28206ba26c9651b8cd1ae8497c54f672790ad29e47fef9e43b30c9da70
  5. 0xdf9c3ad0d56d59311cb2ce17d68eec410296934add2ddf5d481e2b53f4ac3f82
  6. 0xffc7a4558eae30116d3bd3908265657611be92f11a951e93f9418a989cf3ac8f
  7. 0x9f4cab8dffe6c5bde590b4fafc423e8c863d28af0c10dc5cc2854129ef16203e
  8. 0xc1a84a84dbfdc692f424ac34f2c76a1b9005eb93f3ec1563eafba075577c8085
  9. 0x528340c004b7f5587ec07718a5cbc81e4141ba8bf2c9b70eeb1f613e4d51d59a
  10. 0x4f019e20050c5c4c72413fb8abd0c957b0e258968fdb03cbe6423f0a10e883a8
  11. 0xc516e7df5ee40f0f093ffb979295c8a87545b1dde9cf2caff1c9b103382f7149
  12. 0x1b422eea10dac97a091a370fd8ddf024929a6e7e192cd6c6a8020590df30b685
  13. 0xcc8237523b2d5a08c4c820f7a8440fa8b577f989896eb892cba06931cc847cd2
  14. 0x144e6f529cb7231bff37cd4bad2e3530f3ad930f9de9c48c0f73680bc7f17d30
  15. 0x648a3baa51de8aa55066ecdaef86a2d63e9b16b533148da0c58eba70048b858f
  16. 0x80bdd907e4cabf074c5e8d919e88abbc805de47d0c5c142e281a67157f82926f
  17. 0x54292a94f447f1fd33c01b5c99da465043f11022958626a2ea562c457fef697a
  18. 0xff23fa8a9de3f957315ef0dfe7e8d8f6b1a51dae05fef7615c59794e019ff05c
Day root
0x17da9e85e1b138541355d33543ff34e3503cd3a49d37728fb53643e2a0416a2d
Chained
0xed34bd4af17282643de8cb9591c84d0aa1b39e1e9ae9864941e543f5a15718cb
Published
On Arc Testnet, block 71280839: 0xc3f6784179e0ca32236ba89472473e882a81d03fcc5ce27ca58ded2e01e112aa

How to check it · This row as JSON