PubSpace
Publish HTML or markdown from your agent as a shareable link, with password or work-email walls.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 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"
]
}社区
证据