addrbookFor publishers
← The evidence ledger

Evidence row 2025295

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 362de6ca-f3c5-4af3-b7f2-b6560e6c8550
Recorded
Previous row
#531997
Body SHA-256
6a52272835789b6db0186526f1d159ef71d0eae4022590a157c0e9a6ecd5d8e4
Leaf
0x602aa5f596c7376c817473d47c82ab75548120f9040097fbbca6e0864075ad27

What was observed

{
  "count": 8,
  "tools": [
    {
      "description": "Sign your human up for a free PubSpace space (no card) without leaving this session. Callable without an API key. Only call it after the human has told you their email and chosen a space name; never invent or guess either. Their pages will live at <subdomain>.pubspace.ai, so treat the name as permanent (renames are limited). A 6-digit verification code is emailed to them: ask them to read it to you, then call verify_email. Once verified, publish_page works in this same session. Returns { subdomain, email, apiKey, verificationRequired, connectHint }; persist the key with the connectHint command so future sessions start connected. Fails with email_taken (they already have an account: have them sign in and copy their key from Settings → Connect your agent), subdomain_taken, invalid_subdomain, invalid_email or rate_limited. If this session is already connected with a key, it fails with already_connected.",
      "inputSchema": {
        "properties": {
          "email": {
            "description": "The human's real email address, as they gave it to you. The verification code goes here.",
            "type": "string"
          },
          "subdomain": {
            "description": "The space name the human chose: lowercase letters, numbers and hyphens. Becomes <subdomain>.pubspace.ai.",
            "type": "string"
          }
        },
        "required": [
          "email",
          "subdomain"
        ],
        "type": "object"
      },
      "name": "create_account"
    },
    {
      "description": "Delete a page: its URL stops working at once. The maker gets only a brief undo in the dashboard, then it is purged for good (there is no restore tool). Only use it when the human asked for deletion; to hide a page reversibly, use unpublish_page instead. Returns { ok, id, deleted }; fails with page_not_found if the id is not in this space or is already deleted.",
      "inputSchema": {
        "properties": {
          "page_id": {
            "description": "The page id: the `id` field from publish_page or list_pages (also the last path segment of the page URL, …/docs/<page_id>). Only pages in the connected maker's space are visible.",
            "type": "string"
          }
        },
        "required": [
          "page_id"
        ],
        "type": "object"
      },
      "name": "delete_page"
    },
    {
      "description": "Fetch one page by id: metadata always ({ id, title, url, project, views, live, workEmailGated, hasDraft, createdAt, updatedAt, visibility }), plus the stored HTML when include_html is true. Read-only. Use it to read a page before editing it with update_page; use list_pages to find ids or browse. Fails with page_not_found if the id is not in this space or the page was deleted.",
      "inputSchema": {
        "properties": {
          "include_html": {
            "description": "Default false. true adds `html`: the document exactly as stored (the source you or the maker published, before serve-time injections). Can be large; only ask for it when you need the content.",
            "type": "boolean"
          },
          "page_id": {
            "description": "The page id: the `id` field from publish_page or list_pages (also the last path segment of the page URL, …/docs/<page_id>). Only pages in the connected maker's space are visible.",
            "type": "string"
          }
        },
        "required": [
          "page_id"
        ],
        "type": "object"
      },
      "name": "get_page"
    },
    {
      "description": "List every page in the maker's space, newest first, with no paging: { total, pages: [{ id, title, url, project, views, live, workEmailGated, hasDraft, createdAt, updatedAt }] }. Read-only. Use it to find a page_id before update_page / get_page / unpublish_page / delete_page, or to reuse an existing project name. Offline pages are included (live: false); deleted pages are not. Pass q to search instead of scanning the full list; use get_page when you need one page's HTML.",
      "inputSchema": {
        "properties": {
          "q": {
            "description": "Optional case-insensitive search over page titles and content. Omit to list everything.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_pages"
    },
    {
      "description": "Publish a new HTML (or Markdown) page to the maker's PubSpace space and get back a live, shareable URL to hand to the human. Pages are unlisted by default — indexed by search engines only if the maker turns that on later (Pro); anyone with the link can view. Use this only for a brand-new page; to change a page that already exists, call update_page so its URL stays the same (find the id with list_pages). Each call creates a page that counts toward the plan's live-page cap; at the cap the call fails with doc_limit_reached and, on the free plan, an upgrade link to relay to the human. Returns { url, id, mode, visibility, dashboardUrl }.",
      "inputSchema": {
        "properties": {
          "html": {
            "description": "Full HTML document (or Markdown when source_type is \"markdown\"). Served byte-faithful apart from documented meta/bar injections.",
            "type": "string"
          },
          "project": {
            "description": "Optional: which body of work this page belongs to (e.g. \"Q3 board pack\"). Groups pages in the maker's library — reuse their existing project names from list_pages when one fits. (Renamed from `product` in v0.16.0; the old name is still accepted.)",
            "type": "string"
          },
          "source_type": {
            "description": "Default \"html\".",
            "enum": [
              "html",
              "markdown"
            ],
            "type": "string"
          },
          "title": {
            "description": "Optional title (used in the dashboard and social cards).",
            "type": "string"
          }
        },
        "required": [
          "html"
        ],
        "type": "object"
      },
      "name": "publish_page"
    },
    {
      "description": "Take a page offline without deleting it: its URL shows an \"offline\" notice to viewers, and the content, id, URL and view count are kept. Pass restore: true to put it back online at the same URL. Prefer this over delete_page when the human wants a page hidden or paused. Calling it twice is harmless. Returns { ok, id, live }; fails with page_not_found if the id is not in this space.",
      "inputSchema": {
        "properties": {
          "page_id": {
            "description": "The page id: the `id` field from publish_page or list_pages (also the last path segment of the page URL, …/docs/<page_id>). Only pages in the connected maker's space are visible.",
            "type": "string"
          },
          "restore": {
            "description": "Default false (take offline). true = put the page back online.",
            "type": "boolean"
          }
        },
        "required": [
          "page_id"
        ],
        "type": "object"
      },
      "name": "unpublish_page"
    },
    {
      "description": "Replace the content of an existing page in place: the same URL serves the new content immediately, so links the human already shared keep working. Use this instead of publish_page whenever the page already exists. The previous version stays restorable from the dashboard for 7 days (Pro keeps full version history). Pass draft: true to stage the update instead: nothing changes for viewers until the maker reviews the previewUrl and presses \"Sync to live\"; use it when the human asked to see changes before they go out. Fails with page_not_found if the id is not a live or offline page in this space.",
      "inputSchema": {
        "properties": {
          "draft": {
            "description": "Default false (publishes live instantly). true = stage the update; relay the returned previewUrl so the human can review and press Sync. A new draft replaces any pending one.",
            "type": "boolean"
          },
          "html": {
            "description": "The complete new document (not a diff). HTML, or Markdown when source_type is \"markdown\".",
            "type": "string"
          },
          "page_id": {
            "description": "The page id: the `id` field from publish_page or list_pages (also the last path segment of the page URL, …/docs/<page_id>). Only pages in the connected maker's space are visible.",
            "type": "string"
          },
          "project": {
            "description": "Optional; omit to keep the existing project.",
            "type": "string"
          },
          "source_type": {
            "description": "Default \"html\".",
            "enum": [
              "html",
              "markdown"
            ],
            "type": "string"
          },
          "title": {
            "description": "Optional; omit to keep the existing title.",
            "type": "string"
          }
        },
        "required": [
          "page_id",
          "html"
        ],
        "type": "object"
      },
      "name": "update_page"
    },
    {
      "description": "Finish account verification with the 6-digit code PubSpace emailed to the human (ask them to read it to you). Publishing unlocks on success. Works in the session where create_account ran, or with an API key for an unverified account. Returns { ok, verified, subdomain }; fails with invalid_code (and attemptsRemaining), code_expired, too_many_attempts or already_verified.",
      "inputSchema": {
        "properties": {
          "code": {
            "description": "The 6-digit code from the verification email.",
            "type": "string"
          }
        },
        "required": [
          "code"
        ],
        "type": "object"
      },
      "name": "verify_email"
    }
  ]
}

What the leaf hashes

{"body":"6a52272835789b6db0186526f1d159ef71d0eae4022590a157c0e9a6ecd5d8e4","id":2025295,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793581964355834,"prev":531997,"subject":"362de6ca-f3c5-4af3-b7f2-b6560e6c8550","subject_kind":"endpoint"}

Proof

Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.

How to check it · This row as JSON