PubSpace

Publish HTML or markdown from your agent as a shareable link, with password or work-email walls.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
98%
命名质量
97%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~1,575token 数(工具定义)
~1.4 KB典型响应大小
对注意力有中等影响(占 128k 上下文窗口的 1.23%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "mcp": {
      "url": "https://pubspace.ai/mcp"
    }
  }
}

远程端点

https://pubspace.ai/mcpstreamable-http

它能做什么

工具清单

工具(6)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟡publish_page(html, title, source_type, project)

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 }.

输入模式

{
  "type": "object",
  "properties": {
    "html": {
      "type": "string",
      "description": "Full HTML document (or Markdown when source_type is \"markdown\"). Served byte-faithful apart from documented meta/bar injections."
    },
    "title": {
      "type": "string",
      "description": "Optional title (used in the dashboard and social cards)."
    },
    "source_type": {
      "type": "string",
      "enum": [
        "html",
        "markdown"
      ],
      "description": "Default \"html\"."
    },
    "project": {
      "type": "string",
      "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.)"
    }
  },
  "required": [
    "html"
  ]
}
🔴update_page(page_id, html, title, source_type, project, ...)

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.

输入模式

{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "string",
      "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."
    },
    "html": {
      "type": "string",
      "description": "The complete new document (not a diff). HTML, or Markdown when source_type is \"markdown\"."
    },
    "title": {
      "type": "string",
      "description": "Optional; omit to keep the existing title."
    },
    "source_type": {
      "type": "string",
      "enum": [
        "html",
        "markdown"
      ],
      "description": "Default \"html\"."
    },
    "project": {
      "type": "string",
      "description": "Optional; omit to keep the existing project."
    },
    "draft": {
      "type": "boolean",
      "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."
    }
  },
  "required": [
    "page_id",
    "html"
  ]
}
🟢list_pages(q)

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.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Optional case-insensitive search over page titles and content. Omit to list everything."
    }
  }
}
🟢get_page(page_id, include_html)

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.

输入模式

{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "string",
      "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."
    },
    "include_html": {
      "type": "boolean",
      "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."
    }
  },
  "required": [
    "page_id"
  ]
}
🔴unpublish_page(page_id, restore)

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.

输入模式

{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "string",
      "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."
    },
    "restore": {
      "type": "boolean",
      "description": "Default false (take offline). true = put the page back online."
    }
  },
  "required": [
    "page_id"
  ]
}
🔴delete_page(page_id)

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.

输入模式

{
  "type": "object",
  "properties": {
    "page_id": {
      "type": "string",
      "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."
    }
  },
  "required": [
    "page_id"
  ]
}

社区

评价此服务器

证据

最近观测

已验证未记录版本6 个工具