plsreadme
About
Share markdown files and text as clean, readable web links. Works with Cursor, Claude Desktop, VS Code, Windsurf, and any MCP client.
Details
- Author
- facundolucci
- Categories
- File Management, Other, AI
Jump to
Review mode usage notes (Current draft first, Timeline on demand)
The document viewer now exposes comment review controls:
- Current draft— shows only comments tied to the latest doc version (default when a doc has multiple versions).
- Timeline— shows the full cross-version comment history.
You can fetch the same modes directly from the API:
# Latest-version comments only curl "https://plsreadme.com/api/comments/abc123def456?view=current" # Full timeline comments (default API behavior) curl "https://plsreadme.com/api/comments/abc123def456?view=all"
Viewer links persist the mode in the URL for shareable review context:
- https://plsreadme.com/v/abc123def456?view=current
- https://plsreadme.com/v/abc123def456?view=timeline
To claim a legacy anonymous link into your signed-in account:
curl -X POST https://plsreadme.com/api/auth/claim-link \ -H "Authorization: Bearer <clerk-session-jwt>" \ -H "Content-Type: application/json" \ -d '{"id":"abc123def456","adminToken":"sk_..."}'
- use hosted remote MCP with browser login when your client supports it cleanly
- use personal API key fallback when remote auth is unavailable or awkward in that client
- use the localplsreadme-mcppackage withPLSREADME_API_KEYfor the safest stdio path
Connect your editor to plsreadme and share docs with natural language:
"Share this README as a plsreadme link""Turn my PRD into a shareable page""Make these meeting notes into a readable link"
Paste markdown. Get a beautiful, shareable link. Done.
Website·MCP Package·Request a Feature
You wrote a README, a PRD, meeting notes, or an API doc in markdown. Now you need to share it with someone who doesn't have a markdown renderer, doesn't use GitHub, or just needs a clean link they can open in a browser.
plsreadmeturns any markdown into a permanent, beautifully rendered web page in one step. No accounts. No sign-ups. No friction.
- Instant sharing— Paste markdown or upload a file, get aplsrd.melink
- Beautiful rendering— Clean typography, dark mode, mobile-responsive
- Inline comments— Readers can click any paragraph and leave feedback
- Review mode (current vs timeline)— Multi-version docs default toCurrent draftfeedback with one-click access to fullTimelinehistory
- AI auto-formatting— Throw raw text at it; it comes out as clean markdown
- MCP server— Share docs directly from Claude, Cursor, VS Code, or any MCP client
- OpenClaw skill— Available onClawHubfor AI agent workflows
- Short links— Every doc gets a compactplsrd.me/v/xxxURL
- Raw access— Download the original.mdfile from any shared link
- Version timeline + safe restore—/v/:id/versions+/v/:id/history+ archive-first restore API for fast rollback
- Clerk auth foundation— GitHub/Google sign-in wiring + Clerk-hosted email fallback + backend auth verification utilities
- Ownership model (Phase 2)— docs can be linked to a Clerk user (owner_user_id) while preserving anonymous flows
- My Links dashboard (Phase 3)— authenticated/my-linkspage with search/sort/pagination and quick copy/open actions
- Legacy link claiming (Phase 4)— signed-in users can claim older anonymous links by proving the originaladmin_token
- Zero config website demo— No account or API key needed to try it in the browser
- https://plsreadme.com/mcp
- https://plsreadme.com/sse
Those hosted remote MCP routes are live behind OAuth-protected browser login in code, including/authorize,/oauth/token, and/oauth/register.
-
D1doc_create_eventsis the canonical create-attribution table across web, hosted MCP, and local MCP flows.
docs.raw_view_counttracks every render hit, whiledocs.view_countis reserved for likely-human reads.
Seedocs/runbooks/auth-surface-monitoring.mdfor the production query set and response steps.
reconnecting the same client replaces the older grant
signing out of the website does not revoke an existing editor grant by itself
this repo is now wired to a dedicated Cloudflare Workers KV binding namedOAUTH_KV
When browser login is not available in your client, create a personal API key from/my-linksand use either the hosted remote header fallback or the localnpx -y plsreadme-mcppackage.
- anonymous website creates on/api/create-linkrequire a short-lived browser verification grant
- signed-in website creates skip that grant and stay friction-light
- post-create UI now branches intoSave to my account,Connect your editor, andCopy link
curl -X POST https://plsreadme.com/api/render \ -H "Content-Type: application/json" \ -d '{"markdown": "# Hello World\n\nThis is my doc."}'
{ "id": "abc123def456", "url": "https://plsreadme.com/v/abc123def456", "raw_url": "https://plsreadme.com/v/abc123def456/raw", "admin_token": "sk_..." }
Save theadmin_token— you'll need it to edit or delete:
# Update curl -X PUT https://plsreadme.com/v/abc123def456 \ -H "Authorization: Bearer sk_..." \ -H "Content-Type: application/json" \ -d '{"markdown": "# Updated content"}' # Delete curl -X DELETE https://plsreadme.com/v/abc123def456 \ -H "Authorization: Bearer sk_..."
Use the timeline endpoint to review revision context during AI iteration cycles:
curl https://plsreadme.com/v/abc123def456/versions
{ "id": "abc123def456", "current_version": 5, "total_versions": 5, "versions": [ { "version": 5, "is_current": true, "raw_url": "https://plsreadme.com/v/abc123def456/raw" }, { "version": 4, "is_current": false, "raw_url": "https://plsreadme.com/v/abc123def456/raw?version=4" } ] }
If an AI edit regresses the doc, restore a prior snapshot (archive-first, non-destructive):
curl -X POST https://plsreadme.com/v/abc123def456/restore \ -H "Authorization: Bearer sk_..." \ -H "Content-Type: application/json" \ -d '{"version": 4}'
Restore is rate-limited similarly to updates (currently60/hourper actor key) to reduce abuse.
For docs owned by an authenticated Clerk user, update/delete/restore also require that owner session (to prevent cross-user mutation), while anonymous docs continue to work withadmin_tokenonly.
Review mode usage notes (Current draft first, Timeline on demand)
The document viewer now exposes comment review controls:
- Current draft— shows only comments tied to the latest doc version (default when a doc has multiple versions).
- Timeline— shows the full cross-version comment history.
You can fetch the same modes directly from the API:
# Latest-version comments only curl "https://plsreadme.com/api/comments/abc123def456?view=current" # Full timeline comments (default API behavior) curl "https://plsreadme.com/api/comments/abc123def456?view=all"
Viewer links persist the mode in the URL for shareable review context:
- https://plsreadme.com/v/abc123def456?view=current
- https://plsreadme.com/v/abc123def456?view=timeline
To claim a legacy anonymous link into your signed-in account:
curl -X POST https://plsreadme.com/api/auth/claim-link \ -H "Authorization: Bearer <clerk-session-jwt>" \ -H "Content-Type: application/json" \ -d '{"id":"abc123def456","adminToken":"sk_..."}'
- use hosted remote MCP with browser login when your client supports it cleanly
- use personal API key fallback when remote auth is unavailable or awkward in that client
- use the localplsreadme-mcppackage withPLSREADME_API_KEYfor the safest stdio path
Connect your editor to plsreadme and share docs with natural language:
"Share this README as a plsreadme link""Turn my PRD into a shareable page""Make these meeting notes into a readable link"
MCP/agent auto-review loop with/versions
For iterative AI writing flows (draft → critique → revise), agents can consume/v/:id/versionsas the source of truth:
- Keep the canonical readable URL (/v/:id) for humans.
- Poll/v/:id/versionsbetween iterations.
- Comparecurrent_versionto the last reviewed version.
- If changed, fetchraw_urlfor the newest version and run review checks.
- If quality regresses, optionally trigger/v/:id/restorewith admin token + owner session.
This gives automation deterministic revision tracking without scraping HTML.
Seedocs/ai-iteration-versioning.mdfor a full playbook.
claude mcp add --transport http plsreadme https://plsreadme.com/mcp
{ "mcpServers": { "plsreadme": { "url": "https://plsreadme.com/mcp" } } }
{ "servers": { "plsreadme": { "type": "http", "url": "https://plsreadme.com/mcp" } } }
{ "mcpServers": { "plsreadme": { "serverUrl": "https://plsreadme.com/mcp" } } }
- access token TTL is about1 hour
- refresh token TTL is about30 days
- reconnecting the same client replaces the older grant
- sign out ends the website session but does not automatically revoke an existing editor grant
- useGET /api/auth/mcp-grantsandDELETE /api/auth/mcp-grants/:grantIdto audit or revoke hosted editor grants
If your client supports browser login, prefer this path. It is the cleanest setup and keeps owned docs tied to your website account automatically.
Create a personal API key fromhttps://plsreadme.com/my-linksfirst, then use one of these:
claude mcp add --transport http \ --header "Authorization: Bearer $PLSREADME_API_KEY" \ plsreadme-api https://plsreadme.com/mcp
{ "mcpServers": { "plsreadme-api": { "url": "https://plsreadme.com/mcp", "headers": { "Authorization": "Bearer ${env:PLSREADME_API_KEY}" } } } }
{ "inputs": [ { "type": "promptString", "id": "plsreadme-api-key", "description": "plsreadme personal API key", "password": true } ], "servers": { "plsreadme-api": { "type": "http", "url": "https://plsreadme.com/mcp", "headers": { "Authorization": "Bearer ${input:plsreadme-api-key}" } } } }
{ "mcpServers": { "plsreadme-api": { "serverUrl": "https://plsreadme.com/mcp", "headers": { "Authorization": "Bearer ${env:PLSREADME_API_KEY}" } } } }
curl -i https://plsreadme.com/mcp \ -H "Authorization: Bearer $PLSREADME_API_KEY"
claude mcp add --transport stdio \ --env PLSREADME_API_KEY=$PLSREADME_API_KEY \ plsreadme -- npx -y plsreadme-mcp
{ "mcpServers": { "plsreadme": { "command": "npx", "args": ["-y", "plsreadme-mcp"], "env": { "PLSREADME_API_KEY": "${env:PLSREADME_API_KEY}" } } } }
{ "inputs": [ { "type": "promptString", "id": "plsreadme-api-key", "description": "plsreadme personal API key", "password": true } ], "servers": { "plsreadme": { "command": "npx", "args": ["-y", "plsreadme-mcp"], "env": { "PLSREADME_API_KEY": "${input:plsreadme-api-key}" } } } }
Claude Desktop: Add toclaude_desktop_config.json:
{ "mcpServers": { "plsreadme": { "command": "npx", "args": ["-y", "plsreadme-mcp"], "env": { "PLSREADME_API_KEY": "<paste-your-personal-api-key>" } } } }
Windsurf: Add to~/.codeium/windsurf/mcp_config.json:
{ "mcpServers": { "plsreadme": { "command": "npx", "args": ["-y", "plsreadme-mcp"], "env": { "PLSREADME_API_KEY": "${env:PLSREADME_API_KEY}" } } } }
- local stdio now expectsPLSREADME_API_KEYby default so new docs are owned
- explicit legacy anonymous mode still exists withPLSREADME_ALLOW_ANONYMOUS=1
- create your key fromhttps://plsreadme.com/my-links
If you already usedplsreadme-mcpanonymously:
- Create a personal API key from/my-links.
- AddPLSREADME_API_KEYto your MCP client config.
- KeepPLSREADME_ALLOW_ANONYMOUS=1only as a temporary compatibility crutch for old workflows.
- Claim older anonymous links later with/api/auth/claim-linkif you still have theiradmin_token.
- new automated/editor creates should be owned by default
- anonymous local MCP is now legacy-only and explicit
- the website demo path remains zero-setup even while editor auth gets stricter
Docker (for MCP registries / listing checks)
Build and run the stdio MCP server in a clean container:
docker build -t plsreadme-mcp:local . docker run --rm -i plsreadme-mcp:local
The containerized server uses stdio (no ports, no env vars required).
- share-document— Guided flow to share content as a readable link
- refactor-and-share— Uses your AI model to refactor raw text into polished markdown, then shares it
Plain text input? No problem — the MCP auto-structures it into markdown, or you can use therefactor-and-shareprompt to leverage your AI's reasoning for a polished result.
The MCP server tracks your shared documents in a.plsreadmeJSON file in your project root. This stores document IDs, URLs, and admin tokens needed for editing and deleting.
⚠️ Add.plsreadmeto your.gitignore— it contains admin tokens. The tool will warn you if it's missing.
Built on Cloudflare's edge stack for speed everywhere:
┌─────────────┐ ┌──────────────────┐ ┌─────────┐ │ Web / API │────▶│ Cloudflare │────▶│ R2 │ │ MCP Client │ │ Workers (Hono) │ │ (docs) │ └─────────────┘ └──────────────────┘ └─────────┘ │ ┌──────┴──────┐ │ D1 │ │ (metadata) │ └─────────────┘
- Hono— Lightweight web framework on Workers
- Cloudflare D1— SQLite at the edge for metadata, comments, analytics
- Cloudflare R2— Object storage for markdown documents
- Durable Objects— Stateful MCP server endpoint
- Workers AI— Optional fallback for text-to-markdown conversion
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.




