Publish A Dotabase To The Web
Publish selected views of a Dotabase as an anonymous public page, share the link, and read the same publication back over the public MCP, CLI, and REST surfaces.
Publishing produces two surfaces: a public page anyone can open without signing in, and a public data surface any agent can read. Both are served from the same publication record, so a visitor and an agent see the same rows and the same properties.
A publication names exactly what is public — the Dotabase, the view or views to serve, the properties that may be shown, and the public slug. Nothing outside that list leaves the workspace.
Before You Start
- You need three inputs: the 's id, the id of each saved you want to publish, and the exact property keys visitors may see.
- Authority. Publishing, editing, and unpublishing require workspace settings management; comment moderation requires row-update rights. See Access and Tenancy for how that authority is resolved.
- The publication is tenant-scoped, but the slug is globally unique across the platform. A slug already taken is a conflict, not a silent overwrite.
1. Gather The ids
Read the Dotabase, then list its saved views:
dots dotabases describe reading-list
dots views list reading-list
Publish views you have already shaped for an outside reader. A view carries its own filters, sorts, grouping, and property order, and the public page renders it as configured, so filtering a view to the rows you want shown is how you control which rows appear. Views and Lenses covers what a saved view holds.
2. Publish
dots publications publish \
--dotabase <dotabase-uuid> \
--slug reading-list \
--view <view-uuid> \
--property title \
--property status \
--property body \
--reactions
--dotabasetakes the Dotabase's UUID, not its slug.--slugis the public URL token: lowercase letters, digits, and hyphens, with no leading or trailing hyphen.--viewis repeatable; at least one is required. Each one adds a view to the public page.--propertyis repeatable and is the whitelist. Only the keys you name are serialized; every other property is stripped, and relation targets are never followed into rows you did not publish. The reserved keybodyopts the row body in.--reactions/--comments(and their--no-forms) turn public reactions and comments on or off.--calendar-propertynames the whitelisted date property a public calendar view should use.
Confirm it landed:
dots publications list
3. Share The Link
The published page is served by the app itself, outside the login gate, at
/roadmap/<slug> and /embed/<slug> — on the hosted platform,
https://app.mydots.ai/roadmap/reading-list. Open it in a logged-out browser and
confirm the views render and only the whitelisted properties appear.
The served page is frame-locked, so framing it inside another site is refused — verify by navigating to it directly rather than by embedding it.
4. Read It As An Agent
The same publication is a machine surface with no credential involved. From a
terminal, the dots public family reads it:
dots public manifest reading-list
dots public rows reading-list <view-uuid>
dots public get reading-list READ-1
dots public search reading-list "behavioural economics"
The manifest returns the publication's name, its published views, the whitelisted
property schema, and the engagement configuration — enough for a client to know what
it may ask for before asking. dots public graph <slug> <human-id> walks the
neighbour graph around one published row, spanning every publication the same company
has published and projecting each node through its own whitelist. No credential is
read or sent; point the commands at another instance with
--api-url=https://app.mydots.ai/api/v1.
The same plane is reachable two other ways: the anonymous Model Context Protocol
endpoint at POST /api/v1/public/mcp, and the REST namespace the other two are built
on, under /api/v1/public/publications/{slug}/. Public reads carry cache headers and
an ETag, so a repeated fetch of unchanged content is a cheap 304.
5. Take It Offline
dots publications unpublish <publication-id>
The publication row is retained and its status flips to unpublished; public reads deny immediately. Because the retired row keeps the slug, publishing something new on the same slug while it exists is a conflict — change the slug or bring the original back.
What Stays Private
The public plane fails closed. An unknown slug, an unpublished publication, a view outside the publication, a foreign or archived row, an empty whitelist, and a disabled reactions or comments surface all return the same non-disclosing "not found". A caller cannot tell which of those it hit, so probing the public surface reveals nothing about the structure behind it.
Publish A Dotabase To The Web · This page in the graph
- mentionstoView
- mentionstoDIIICE: Data
- mentionstoDotabase
- mentionstoDIIICE: Context
- mentionstoDOT
- referencestoAccess And Tenancy
- referencestoViews And Lenses
- referencestoHow Dotabases Work
- mentionsfromMCP Tools
- documented byfromPublish a Dotabase to the Web
- referencesfromDotabases Overview