PubSpace
Server Details
Publish from your agent as a shareable link, with password or work-email walls.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 6 tools
Each tool has a distinct role in the page lifecycle, and descriptions explicitly resolve the risky overlaps: publish_page vs update_page and delete_page vs unpublish_page. get_page and list_pages are also clearly separated by single-page fetch vs browsing/search.
All six tools follow a consistent snake_case verb_noun pattern: list_pages, get_page, publish_page, update_page, unpublish_page, delete_page. The convention is predictable and easy for an agent to reason about.
Six tools are well-scoped for a page publishing server: list, get, create/publish, update, toggle visibility, and delete. No tool feels redundant, and the set is small enough to avoid selection overload.
The core page lifecycle is covered, including reversible unpublishing and in-place updates. However, there is no obvious way to edit metadata such as title, project, visibility, or search-indexing settings, and no restore tool beyond unpublish_page's offline state.
Available Tools
6 toolsdelete_pageDelete a pageADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses immediate URL breakage, a brief dashboard-only undo window, permanent purge with no restore tool, the return shape { ok, id, deleted }, and the page_not_found failure condition. The annotations only flag destructive/openWorld/non-idempotent; the description supplies the reversibility and blast-radius details that actually drive the decision.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the effect of the call, then the alternative, then the return/failure contract. Nothing is redundant with the schema or annotations, and every clause carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description supplies the return shape and the failure case, and it covers reversibility, permissions-adjacent scoping, and the substitution path. Nothing an agent needs to call this mutation safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains the id format and space scoping, so the baseline is 3. The description still adds meaning by tying the id to a failure mode — the id must be in this space and not already deleted, else page_not_found — which the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a page") and immediately names the observable consequence ("its URL stops working at once"), which disambiguates it from hide-style siblings. An agent can tell it apart from unpublish_page without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ("Only use it when the human asked for deletion") plus the named alternative and the condition that selects it ("to hide a page reversibly, use unpublish_page instead"). Both the when and the when-not are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet one pageARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | 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 | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the description can focus elsewhere — and it does, disclosing the exact return fields, the scope restriction to the connected maker's space, and the page_not_found error. It stops short of describing response size or latency behavior for large html payloads beyond a general 'can be large' warning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and return shape, then usage routing, then error behavior. Every clause carries actionable information — return fields, the html flag effect, sibling routing, failure mode.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by naming the metadata fields and the conditional html field. Combined with sibling routing and the documented error case, nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by tying include_html to an observable output difference ('metadata always... plus the stored HTML when include_html is true'), which the schema documents only as a field-level note. It does not add id syntax details beyond what the schema already gives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch one page by id') and enumerates exactly what is returned (metadata fields plus optional html), so the agent knows the payload shape before calling. It also names siblings ('update_page', 'list_pages') to separate reading a single page from editing or browsing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: read a page before editing it with update_page, and use list_pages to find ids or browse. It also names the failure case (page_not_found) and its conditions (not in this space, or deleted).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList pagesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Optional case-insensitive search over page titles and content. Omit to list everything. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds real behavioral detail beyond them: no pagination, newest-first ordering, offline pages included (live: false), deleted pages excluded. That inclusion/exclusion rule is the kind of information an agent cannot get from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph with no filler: scope and ordering first, then the inline response shape, then read-only confirmation, then usage routing. The embedded schema sketch is compact and earns its space since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter list tool with no output schema, everything needed is present: the return fields are enumerated inline, paging is ruled out, and inclusion/exclusion of offline and deleted pages is stated. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the q parameter's case-insensitive title/content search is already documented; the baseline would be 3. The description adds a decision rule (pass q to search rather than scanning the full list) and clarifies that omitting q lists everything, giving it modest added value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list every page in the maker's space), plus ordering (newest first), paging behavior (none), and even the exact return shape. It is immediately distinguishable from get_page, update_page, and the other siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the when: resolving a page_id before update_page / get_page / unpublish_page / delete_page, and reusing an existing project name. It also gives the alternative path (pass q instead of scanning) and the escalation (use get_page when you need one page's HTML).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_pagePublish a new pageAInspect
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | Full HTML document (or Markdown when source_type is "markdown"). Served byte-faithful apart from documented meta/bar injections. | |
| title | No | Optional title (used in the dashboard and social cards). | |
| project | No | 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.) | |
| source_type | No | Default "html". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: default unlisted visibility, search-indexing only if the maker opts in on Pro, link-anyone-can-view semantics, that each call consumes a live-page slot, and the exact failure mode (doc_limit_reached plus an upgrade link to relay to the human). Annotations already state non-idempotent/open-world, and nothing contradicts them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then the do-not-use-for-existing-pages rule, then visibility/limits behavior, then the return shape. Density is high but every sentence carries actionable information and nothing is repeated from structured fields verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape ({ url, id, mode, visibility, dashboardUrl }) and the quota failure mode, which is exactly what an agent needs to handle success and error paths. Nothing material is missing for a 4-param create tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already carries its own explanation, including the project rename note and the source_type default. The description adds no parameter-level syntax or constraints beyond what the schema states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (publish) and resource (a new HTML/Markdown page) and specifies the outcome: a live, shareable URL. It also explicitly contrasts itself with update_page and list_pages, so an agent can pick it out of the sibling set without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: "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)." That names the alternative, the condition that selects it, and the prerequisite step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_pageTake a page offline or back onlineAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | 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 | No | Default false (take offline). true = put the page back online. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-destructive, idempotent and open-world behavior, but the description adds genuinely new context: what survives the operation (content, id, URL, view count), what viewers see, and the failure mode page_not_found for out-of-space ids. It also compensates for the absence of an output schema by naming the return shape { ok, id, live }.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and preserved-state guarantee, then layers reversal, sibling routing, idempotency and error behavior in four tight sentences with no filler. Every sentence carries distinct information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a two-parameter mutation tool: state transition, reversibility, idempotency, sibling alternative, return shape and error case are all covered despite there being no output schema and only a small parameter surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the page_id sourcing hint and the restore flag semantics, so the schema already does the explanatory work. The description restates restore: true without adding format or edge-case detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (take offline / restore) and resource (page), and precisely explains the resulting state: URL shows an offline notice while id, URL, content and view count are preserved. It explicitly distinguishes itself from delete_page, so an agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: 'Prefer this over delete_page when the human wants a page hidden or paused.' It also explains how to reverse the action (restore: true) and states that repeated calls are harmless, covering the main when-to-use and when-to-repeat questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pageReplace a page's contentADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The complete new document (not a diff). HTML, or Markdown when source_type is "markdown". | |
| draft | No | 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. | |
| title | No | Optional; omit to keep the existing title. | |
| page_id | Yes | 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. | |
| project | No | Optional; omit to keep the existing project. | |
| source_type | No | Default "html". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the destructive/idempotent annotations: it discloses the 7-day restore window, Pro-tier history difference, the draft staging lifecycle (nothing live until the maker presses 'Sync to live'), and the specific page_not_found failure condition. This is exactly the extra context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the sibling differentiator, then the draft workflow, then the error case. Dense and mostly waste-free, though the nested parentheticals make individual sentences long enough to skim poorly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description still tells the agent what comes back in the draft path (previewUrl) and the failure mode. For a destructive 6-parameter mutation, nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds workflow meaning beyond the schema: draft: true stages rather than publishes and the returned previewUrl must be relayed to the human. It does not add anything for title/project/source_type beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Replace the content of an existing page in place') and immediately clarifies the key consequence (same URL serves new content). It names the sibling it replaces (publish_page) so an agent can discriminate without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use this instead of publish_page whenever the page already exists, and pass draft: true 'when the human asked to see changes before they go out'. Both the alternative and the selecting condition are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- Changed
delete_page1 field changed- added
Input schema / properties / page_id / descriptionAdded value: +"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."
- Changed
get_page2 fields changed- changed
Input schema / properties / include_html / descriptionPrevious value: -"Default false — HTML can be large."New value: +"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." - added
Input schema / properties / page_id / descriptionAdded value: +"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."
- Changed
list_pages1 field changed- changed
Input schema / properties / q / descriptionPrevious value: -"Optional search query."New value: +"Optional case-insensitive search over page titles and content. Omit to list everything."
- Changed
unpublish_page2 fields changed- added
Input schema / properties / page_id / descriptionAdded value: +"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." - changed
Input schema / properties / restore / descriptionPrevious value: -"true = put the page back online."New value: +"Default false (take offline). true = put the page back online."
- Changed
update_page3 fields changed- added
Input schema / properties / html / descriptionAdded value: +"The complete new document (not a diff). HTML, or Markdown when source_type is \"markdown\"." - changed
Input schema / properties / page_id / descriptionPrevious value: -"The id returned by publish_page / list_pages."New value: +"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." - added
Input schema / properties / source_type / descriptionAdded value: +"Default \"html\"."
6 tool updates
- First observed
delete_page - First observed
get_page - First observed
list_pages - First observed
publish_page - First observed
unpublish_page - First observed
update_page
Publisher details
- Operator
- Individual
- Operator website
- https://pubspace.ai · Publisher source
- Vendor relationship
- Not applicable
- Documentation
- https://pubspace.ai/llms.txt · Publisher source
- Trust center
- https://pubspace.ai/privacy · Publisher source
- Restrictions
- paid plan for $10/mo above 10 published sites · Publisher source
Related MCP Servers
- AlicenseNot gradedqualityCmaintenancePerplexity for social: ask what competitors are running across social and get answers grounded in real ad and creative data, not guesses.2Apache 2.0
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs113 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.164 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.