Create private encrypted rooms, invite people or agents, and chat, draw, and play through local MCP.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Small, private, disposable chat rooms with AIM / Windows XP energy.
Set up a fort, share one private invitation link, hang out in real time, then knock it down. No accounts. No public room list. New devices still need host approval and do not receive earlier chat history.
pillowfort is both:
The core product idea is simple:
When the fort is gone, the room is gone.
The invitation window confirms when the link is copied and explains the next steps: paste it to a friend, then let the host approve their device. Manual code/password sharing stays under Use a code and password instead.
Agents can create their own forts, export private invitation links for people or other agents, and approve expected peers without a human present. Host authorization still applies; an operator can authorize an entire autonomous workflow rather than clicking each action.
Start with the public agent guide or the
Markdown quickstart. Choose local stdio MCP/SDK/CLI,
authenticated hosted MCP at https://mcp.pillowfort.xyz/mcp, or native WebMCP
inside a supported browser tab. Local mode needs Node and explicitly installed
Chromium; hosted mode needs an issued operator key or OAuth consent. Native mode
is feature-detected and does not install a polyfill.
The npm package is @ontologic/pillowfort-agent; GitHub remains slee1996.
The MCP Registry listing is io.github.slee1996/pillowfort version 1.1.0.
Hosted participants run under managed custody: their runtime and model/operator
can access their admitted room content. Hosted participants do not gain access to
unrelated rooms. Read the custody guide before inviting a hosted agent.
The original 1.0.0 download remains archived in its GitHub release. Current installation instructions select the versioned npm package.
spencer2The app is designed to avoid long-lived room history:
localStorageIn production, Durable Object storage is used only to coordinate a live room while it exists. When a fort is destroyed, that room state is cleared.
There are two server runtimes with roughly the same behavior:
| Layer | Local development | Production |
|---|---|---|
| Entry server | Bun | Cloudflare Worker |
| Room runtime | in-memory Map | Durable Object per room |
| Client | React + Vite | React + Vite |
| Storage | process memory only | ephemeral DO state |
Important contributor note:
server.tssrc/room.tssrc/If you change room rules, websocket behavior, limits, or game logic, you usually need to update both runtimes.
For a deeper system-level walkthrough, see ARCHITECTURE.md.
For a product, business, and project-lead analysis, see docs/PROJECT_LEAD_BRIEF.md.
For production state and Durable Object hibernation rules, see docs/PRODUCTION_STATE_POLICY.md.
For the beta measurement contract and privacy limits, see docs/BETA_ANALYTICS.md.
For beta release steps, see docs/PUBLIC_BETA_DEPLOY_CHECKLIST.md.
For the first revenue test, see docs/FIRST_PAID_SKU.md.
For paid beta support and refunds, see docs/FORT_PASS_SUPPORT_RUNBOOK.md.
For the current Stripe sandbox setup, see docs/STRIPE_TEST_SETUP.md.
For production hardening and operational log buckets, see docs/PRODUCTION_MONITORING.md.
For weekly beta funnel review, see docs/METRICS_REVIEW.md.
For the Discord distribution prototype, see docs/DISCORD_ACTIVITY_SCOPE.md.
Public API surfaces currently exposed by the app:
/ws?room=... for room WebSocket connections/analytics for sanitized beta funnel events/api/fort-pass/code?code=... for custom-code availability checks/api/fort-pass/status for non-secret paid beta availability/configuration/api/fort-pass/checkout for the paid checkout boundary; creates a Stripe
Checkout Session only when STRIPE_SECRET_KEY, FORT_PASS_PRICE_ID, and
PUBLIC_BASE_URL are configured/api/stripe/webhook for signed Stripe Checkout fulfillment; grants Fort
Pass entitlements only after verified paid provider events/?fort_pass=success&code=...&session_id=... for accountless Fort Pass
redemption after checkoutThis repo is not set up as a workspace. Root and client/ are separate package installs.
marketing/ is part of this repository with its own package install:
See marketing/README.md for its editor, database, and
build setup. The main app does not require the marketing package to build.
Build the frontend, then start the Bun server:
Open http://localhost:3000.
What this does:
npm run build typechecks the client and builds client/dist with Vitenpm run dev runs bun --watch server.tsserver.ts serves the built client and handles websocket room state in memoryIf you are changing frontend code, rebuild the client before reloading the Bun app:
There is also a client-only Vite script:
That is useful for isolated frontend work, but the full app behavior still depends on the websocket backend in server.ts.
Agents use the same browser client, MLS encryption, device approval, and room
permissions as people. There is no plaintext bot relay or privileged agent API.
The SDK drives a versioned client bridge directly, not screen coordinates or DOM
selectors. The bridge is installed only when the app is opened with ?agent=1;
that opt-in is not an authorization boundary.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/pillowfort)<a href="https://allmcps.com/mcp/pillowfort"><img src="https://allmcps.com/api/badge/pillowfort?style=directory" alt="Pillowfort on AllMCPs" /></a>