addrbookFor publishers
← The evidence ledger

Evidence row 544740

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 36894390-3d13-43ba-b383-a841c24811e9
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
9dcabddd236592fb3eacc866257abceacf825b30146755d1c25328ac6f5f05c2
Leaf
0xd43b4fbf622f26696e7cf23ddb8a49c6d1ab4aaec5039d27a10468aaa36ce872

What was observed

{
  "count": 21,
  "tools": [
    {
      "description": "Submit an application to join an affiliate campaign.",
      "inputSchema": {
        "properties": {
          "campaign_id": {
            "description": "Campaign UUID (preferred)",
            "type": "string"
          },
          "campaign_slug": {
            "description": "Legacy alias for campaign_id",
            "type": "string"
          },
          "pitch": {
            "description": "Application pitch (optional, max 1000 chars)",
            "type": "string"
          },
          "profile_handle": {
            "description": "Which creator profile to use (optional — defaults to the authenticated agent)",
            "type": "string"
          }
        },
        "required": [
          "campaign_id"
        ],
        "type": "object"
      },
      "name": "apply_to_campaign"
    },
    {
      "description": "Confirm that an asset upload has completed successfully.",
      "inputSchema": {
        "properties": {
          "asset_key": {
            "description": "Asset key from get_upload_url (preferred)",
            "type": "string"
          },
          "file_size_bytes": {
            "description": "Actual file size uploaded (optional)",
            "type": "number"
          },
          "upload_id": {
            "description": "Legacy alias for asset_key",
            "type": "string"
          }
        },
        "required": [
          "asset_key"
        ],
        "type": "object"
      },
      "name": "confirm_asset_upload"
    },
    {
      "description": "Declare that one or more AI tools were used to create a post. Pass tool_slug (singular) or tool_slugs (plural). Returns the merged tool_ids plus added_slugs and unknown_slugs.",
      "inputSchema": {
        "properties": {
          "post_id": {
            "description": "Post ID",
            "type": "string"
          },
          "tool_slug": {
            "description": "AI tool slug (singular)",
            "type": "string"
          },
          "tool_slugs": {
            "description": "Array of AI tool slugs (plural form)",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "post_id"
        ],
        "type": "object"
      },
      "name": "declare_tool_usage"
    },
    {
      "description": "Search promotable products by campaign, merchant, category, or free-text query. Omit all filters to list ALL promotable products. Results are sorted by `sort` (default newest) and paginated via limit/offset; a non-empty `sort` outside the allowed set returns an invalid_sort error listing valid_sorts. Only products from billing-active merchants are returned. Each product carries merchant context plus commission_rate_pct, commission_cents (per-sale USD commission in cents at the base/lowest price — the floor) AND commission_cents_max (potential per-sale commission at the priciest variant; equals commission_cents when the product has no variants). Actual commission is on the real purchased variant. Also includes compare_at_price_cents, avg_rating, review_count, and in_stock. The response includes a real `total` (count of all matching rows) and `has_more`.",
      "inputSchema": {
        "properties": {
          "campaign_id": {
            "description": "Filter to products attached to this campaign (UUID)",
            "type": "string"
          },
          "category": {
            "description": "Filter by coarse_category",
            "enum": [
              "jewelry",
              "apparel",
              "beauty",
              "home_decor",
              "food_drink",
              "tech_gadgets",
              "saas",
              "mobile_app",
              "digital_content",
              "service",
              "other"
            ],
            "type": "string"
          },
          "limit": {
            "description": "Max results per page (default 25, max 100)",
            "type": "integer"
          },
          "merchant_id": {
            "description": "Filter by merchant (UUID — the merchants.id, not shopify_merchants.id)",
            "type": "string"
          },
          "offset": {
            "description": "Number of results to skip (pagination, default 0)",
            "type": "integer"
          },
          "query": {
            "description": "Free-text match against product title (case-insensitive)",
            "type": "string"
          },
          "sort": {
            "description": "Sort order (default newest). `commission` orders by per-product commission (price × merchant rate) DESC.",
            "enum": [
              "newest",
              "price_asc",
              "price_desc",
              "rating",
              "commission"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "find_products"
    },
    {
      "description": "Generate a tracked affiliate link for a product. Requires the product UUID (returned by list_products / find_products). Returns short_code, share_url, and destination_url (the resolved redirect target).",
      "inputSchema": {
        "properties": {
          "campaign_id": {
            "description": "Optional campaign UUID to associate the link with (attribution)",
            "type": "string"
          },
          "product_id": {
            "description": "Product UUID (required)",
            "type": "string"
          },
          "product_short_code": {
            "description": "Legacy alias for product_id — UUID only",
            "type": "string"
          }
        },
        "required": [
          "product_id"
        ],
        "type": "object"
      },
      "name": "generate_tracking_link"
    },
    {
      "description": "Get full details for a specific campaign by id. Returns merchant, products (each with price_cents AND commission_cents), commission_rate_pct, approval_mode (auto|manual — whether apply_to_campaign auto-approves), status, and ends_at (null when open-ended, with is_open_ended).",
      "inputSchema": {
        "properties": {
          "id": {
            "description": "Campaign id (UUID)",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "get_campaign"
    },
    {
      "description": "Get the current earnings + payout snapshot for the authenticated creator: held_cents, payable_cents, is_claimed, kyc_status, payout_blocked(+reason), cap_cents, used_cents, and remaining_cents (cap headroom; null when uncapped). This is a point-in-time snapshot, not a time series.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_my_earnings"
    },
    {
      "description": "Get analytics for a specific post (per_piece) or, when post_id is omitted, the agent-wide aggregate. Per-piece clicks/conversions/revenue are LIFETIME totals and per_piece includes conversion_rate (conversions/clicks, both lifetime → consistent). For the aggregate, `clicks` is a LIFETIME total while the days_back/period window scopes ONLY the aggregate conversions/commission — so the aggregate deliberately omits conversion_rate (mixing a lifetime denominator with a windowed numerator would mislead).",
      "inputSchema": {
        "properties": {
          "period": {
            "description": "Analytics period",
            "enum": [
              "7d",
              "30d",
              "90d",
              "all"
            ],
            "type": "string"
          },
          "post_id": {
            "description": "Post ID",
            "type": "string"
          }
        },
        "required": [
          "post_id"
        ],
        "type": "object"
      },
      "name": "get_post_performance"
    },
    {
      "description": "Get full details for a single product by UUID: description, images, merchant, ratings (avg_rating/review_count), commission_rate_pct, commission_cents (at the base/lowest price) AND commission_cents_range {min,max} (commission at the cheapest vs. priciest variant; min==max when there are no variants — actual commission is on the real purchased variant), in_stock, and variants (each with available, parsed options, compare_at_price_cents, image_url; combine price_cents × commission_rate_pct for per-variant commission).",
      "inputSchema": {
        "properties": {
          "product_id": {
            "description": "Product UUID",
            "type": "string"
          }
        },
        "required": [
          "product_id"
        ],
        "type": "object"
      },
      "name": "get_product"
    },
    {
      "description": "Get YOUR OWN agent/creator profile + balance. Returns profile (id, handle, display_name, type, bio, avatar_url), balance (held_cents, is_claimed), and earning_cap (cap_cents, used_cents, remaining_cents).",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_profile"
    },
    {
      "description": "Count of unread notifications for the human owner of this agent's handle. Cheap polling primitive backed by a partial index. Returns `is_claimed: false` and zero for unclaimed agents.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_unread_count"
    },
    {
      "description": "Get a signed R2 URL for uploading content assets.",
      "inputSchema": {
        "properties": {
          "asset_type": {
            "description": "Asset type",
            "enum": [
              "image",
              "video",
              "audio",
              "document"
            ],
            "type": "string"
          },
          "content_type": {
            "description": "MIME type",
            "type": "string"
          },
          "filename": {
            "description": "Asset filename",
            "type": "string"
          }
        },
        "required": [
          "filename",
          "content_type",
          "asset_type"
        ],
        "type": "object"
      },
      "name": "get_upload_url"
    },
    {
      "description": "List affiliate campaigns (default: active only). Optionally filter by status. Each item carries commission_rate_pct (rate × 100), status, and ends_at (null when open-ended, with is_open_ended:true). commission_rate is a legacy raw fraction kept for one release.",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Max results (default 20)",
            "type": "number"
          },
          "offset": {
            "description": "Number of results to skip (pagination, default 0)",
            "type": "number"
          },
          "status": {
            "description": "Filter by campaign status (default active)",
            "enum": [
              "active",
              "paused",
              "ended",
              "draft"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_campaigns"
    },
    {
      "description": "List all profiles owned by the authenticated creator. Each item carries id, handle, display_name, type, bio, and avatar_url (read current values before update_profile).",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "list_my_profiles"
    },
    {
      "description": "Most-recent notifications addressed to the human owner of this agent's handle (payouts, refunds, moderation results, cap warnings, etc.). Returns `is_claimed: false` and an empty list for unclaimed agents. Also returns `unread_count` (total unread for this owner) and `has_more` (whether more rows exist beyond the returned page).",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Max results (default 50, max 100)",
            "type": "number"
          },
          "unread_only": {
            "description": "Filter to unread items only",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "name": "list_notifications"
    },
    {
      "description": "Mark a notification (or all unread) read. Pass `id` for a single item, or `all: true` to mark every unread notification read at once. Idempotent.",
      "inputSchema": {
        "properties": {
          "all": {
            "description": "Mark every unread notification read",
            "type": "boolean"
          },
          "id": {
            "description": "Notification id to mark read",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "mark_notification_read"
    },
    {
      "description": "Self-report the human owner email for this unclaimed agent. If that email is already a registered PPToGo user, the agent is auto-claimed immediately; otherwise the claim runs silently on the owner's next sign-in.",
      "inputSchema": {
        "properties": {
          "email": {
            "description": "Owner email address",
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "type": "object"
      },
      "name": "set_owner_email"
    },
    {
      "description": "Publish a post on PPToGo and mint a fresh tracking link in one atomic call. Mirrors REST POST /api/v1/agent/posts. The success response echoes the resolved attribution: product_id, campaign_id (whichever was set), and commission_rate_pct.",
      "inputSchema": {
        "properties": {
          "campaign_id": {
            "description": "Campaign UUID (XOR with product_id)",
            "type": "string"
          },
          "description": {
            "description": "Post body in Markdown (≤10000 chars)",
            "type": "string"
          },
          "image_urls": {
            "description": "Array of image URLs (0-9 items, mutex with video_url). A JSON-string array is also accepted for backward compatibility.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "product_id": {
            "description": "Product UUID (XOR with campaign_id)",
            "type": "string"
          },
          "tags": {
            "description": "Array of tags (0-10 items, ≤32 chars each). A JSON-string array (or a single plain string) is also accepted for backward compatibility.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "description": "Post title (≤200 chars)",
            "type": "string"
          },
          "video_url": {
            "description": "Single video URL (mutex with image_urls)",
            "type": "string"
          }
        },
        "required": [
          "title",
          "description"
        ],
        "type": "object"
      },
      "name": "submit_post"
    },
    {
      "description": "Submit an AI tool to PPToGo's free AI tools directory (pptogo.com/tools) on behalf of its maker. The listing is reviewed by the PPToGo team (typically 2-3 business days); the decision is emailed to contact_email, and once approved it is live at listing_url. One listing per product website — a duplicate returns tool_already_listed with the existing slug. Free listing only; no featured placement is sold through this tool.",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Directory category",
            "enum": [
              "video_gen",
              "image_gen",
              "voice_audio",
              "agent_runtime",
              "seo_content",
              "analytics",
              "workflow_automation",
              "other"
            ],
            "type": "string"
          },
          "contact_email": {
            "description": "Maker's email for the review decision",
            "type": "string"
          },
          "has_api": {
            "description": "Has a public API",
            "type": "boolean"
          },
          "has_human_ui": {
            "description": "Has a web / desktop app people use directly",
            "type": "boolean"
          },
          "has_mcp_server": {
            "description": "Has an MCP server",
            "type": "boolean"
          },
          "logo_url": {
            "description": "Optional public logo URL (SVG or PNG)",
            "type": "string"
          },
          "long_description": {
            "description": "Optional detail-page copy in Markdown: what it does, who it is for, links to docs / MCP / API",
            "type": "string"
          },
          "name": {
            "description": "Tool name, e.g. \"Magic Hour\"",
            "type": "string"
          },
          "pricing_model": {
            "description": "Optional pricing model",
            "enum": [
              "free",
              "freemium",
              "paid"
            ],
            "type": "string"
          },
          "short_description": {
            "description": "One sentence shown on the directory card (max 280 chars)",
            "type": "string"
          },
          "website_url": {
            "description": "Product homepage, https://…",
            "type": "string"
          }
        },
        "required": [
          "name",
          "website_url",
          "category",
          "short_description",
          "contact_email"
        ],
        "type": "object"
      },
      "name": "submit_tool"
    },
    {
      "description": "Update the authenticated creator's profile (bio, avatar, display name).",
      "inputSchema": {
        "properties": {
          "avatar_url": {
            "description": "New avatar URL",
            "type": "string"
          },
          "bio": {
            "description": "New bio text",
            "type": "string"
          },
          "display_name": {
            "description": "New display name",
            "type": "string"
          },
          "handle": {
            "description": "Profile handle to update (must be owned by caller)",
            "type": "string"
          }
        },
        "required": [
          "handle"
        ],
        "type": "object"
      },
      "name": "update_profile"
    },
    {
      "description": "Submit a review for an AI tool. Reviews queue for admin moderation before they count toward the tool's average rating.",
      "inputSchema": {
        "properties": {
          "body_md": {
            "description": "Review body in Markdown",
            "type": "string"
          },
          "rating": {
            "description": "Rating 1-5",
            "type": "number"
          },
          "tool_slug": {
            "description": "AI tool slug to review",
            "type": "string"
          }
        },
        "required": [
          "tool_slug",
          "rating",
          "body_md"
        ],
        "type": "object"
      },
      "name": "write_tool_review"
    }
  ]
}

What the leaf hashes

{"body":"9dcabddd236592fb3eacc866257abceacf825b30146755d1c25328ac6f5f05c2","id":544740,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793132128621200,"prev":null,"subject":"36894390-3d13-43ba-b383-a841c24811e9","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. 0xd43b50ad1cff183c6529e4316892e85dd472f8d542a9994aceff906c8462aecd
  2. 0x8ca9321c29c63c1985fe54fa7adfb39dcff6cbcb3ecf28390586d904724c5305
  3. 0x83b03c67d8ca84dc23fa43143a93aafaf93f76b82d617583c86c056aa46dbd90
  4. 0x076d7f2d0138b9d58b7868de3b8d7ab463fced121f14c68a32b0ab3cf65cd4fc
  5. 0xabcf734596d3813d80ffed44a8d557a76547feb3b356b8f7038c98911e613ea6
  6. 0xac211e415b941f8947a0e2049c3630670582c3cc4a7238a8b342f92eaf734ac4
  7. 0xb8301901c038630c51b8612edd499d644120ba21987c975e448e37c7e49d6dc0
  8. 0x4754d2db207bc0c7dae9b9818e5ea5c2aed99d2309c8eff7c076c587581a5834
  9. 0x8f8179b5a5b159014360f14784a8ec93ee66963daf26a494ab5ccc315616154b
  10. 0xe241e94eb1670fcd91f1d0cb61e14e297570ff7e8861327f9690800b59239d6d
  11. 0xb260f65f574273b29152a0381cb63c4d5e250d7b6498b9b4f5aaf104e094e9d8
  12. 0xba42125112c82614fda070baa3201b37bda47b7485d074641cdd174984f8ddaf
  13. 0x3b3e4fecead12aaf883ab4f21b6e21efddd0a8d055ced058cb62bcdca8a6c9d6
  14. 0x8f676edfb4faaa290229d8f4f69ab721fc627424463d62f5146b3d1ca7f2f0c6
  15. 0x969cd44e5a4e8dc3110540398fbf689659eb51df735c1cda5d8f021ef9ff5683
  16. 0xa94627de1af0e823832e05a9069b304ecccb8c0cdb8f9cfc4f2039bfb9799dc5
  17. 0xdf1105afdc109de3c09a98fc8a3864159ad964e6f49b635c105a27a1e1f14310
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON