mdshare
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 9 GitHub stars
Code Warn
- network request — Outbound network request in components/editor/comment-sidebar.tsx
- network request — Outbound network request in components/ui/download-button.tsx
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Share and collaborate on local markdown files via shareable links
mdshare
Free markdown sharing with no login: upload a file, get a link, and collaborate with comments, live edits and permission links.
mdshare.live | API docs | Use with AI | Plugins | About

Contents
- What it does
- Features
- Quick start
- MCP tools
- Plugins
- API
- Privacy and permissions
- Architecture
- Development
- Deploy
- Contributing
- License
What it does
mdshare turns markdown into a shareable link. Paste or drop a .md file at mdshare.live, send it with curl, or let an AI client upload it through the MCP server. Neither you nor the people you share with need an account.
Each document gets links at four permission levels (admin, edit, comment, view). People with an edit link change the document in a WYSIWYG editor, people with a comment link anchor comments to text, and everyone with the document open sees changes as they happen.
Features
- Four permission levels: admin, edit, comment and view, each with its own link.
- WYSIWYG editor: formatting toolbar, tables, code blocks and keyboard shortcuts.
- Inline comments: anchor a comment to specific text, reply, and resolve.
- Real-time sync: changes broadcast over WebSocket with presence indicators; falls back to polling.
- Link management: revoke links instantly, set optional expiry, up to 50 links per document.
- Version history: see who edited and when.
- Recent documents sync (optional): an encrypted copy of your recent-documents list, so it follows you across devices. It is encrypted in your browser; the server cannot read it.
- REST API and MCP server: for scripts and for Claude, ChatGPT/Codex, Gemini CLI, Cursor and Windsurf.
- Plugins: Claude Code, Cursor, VS Code and Obsidian.
Quick start
Web
Open mdshare.live, paste markdown or drop a .md file (up to 10 MB), and select Create & Get Share Links.
curl
curl -X POST https://mdshare.live/api/documents \
-H "Content-Type: text/markdown" \
--data-binary @your-file.md
The response contains the document ID, an admin URL and the expiry date. Keep the admin URL private: it gives full control. From it you can create edit, comment or view links to share.
Any converter that writes markdown to stdout can pipe straight in. See Convert and share markdown for recipes with markitdown, pandoc, Docling, Marker, Firecrawl and Jina Reader.
MCP server
The MCP server is the npm package mdshare-mcp. It runs locally over stdio and needs no API key or environment variables.
npx mdshare-mcp
Add it to your client's MCP config:
{
"mcpServers": {
"mdshare": {
"command": "npx",
"args": ["mdshare-mcp"]
}
}
}
| Client | Config file |
|---|---|
| Claude Desktop | claude_desktop_config.json |
| Claude Code | Use the plugin (no JSON to edit) |
| Cursor | ~/.cursor/mcp.json, or Add to Cursor on the Cursor Directory listing |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| OpenAI Codex CLI | ~/.codex/config.json |
| Gemini CLI | ~/.gemini/settings.json |
Then ask, for example, "upload my-notes.md to mdshare and give me a share link". The server reads files from disk by path, so large documents do not pass through the conversation. Full setup: mdshare.live/share-markdown-with-ai. Package docs: mcp/README.md.
No MCP client? Point any chatbot that can fetch URLs at the API:
Read https://mdshare.live/docs/raw to learn the mdshare API,
then upload this markdown and give me a share link.
MCP tools
From mcp/index.js (v1.5.0):
| Tool | What it does |
|---|---|
upload_markdown |
Upload markdown by file_path (preferred) or inline content; returns a share link (default permission: comment). |
read_document |
Read a document; optionally save it to output_path on disk. |
update_document |
Replace the content. Optional base_hash refuses to overwrite newer edits. |
patch_document |
Apply find/replace operations without resending the whole document. Optional base_hash. |
generate_link |
Create a view, edit or comment link. |
list_links |
List a document's share links and their status. |
revoke_link |
Revoke a share link permanently. |
set_expiry |
Change when the document auto-deletes (a future date, at most one year out). |
list_comments |
List comments, replies and resolution status. |
post_comment |
Add a comment, optionally anchored to text. |
resolve_comment |
Resolve or reopen a comment. |
get_versions |
Show edit history (who and when). |
list_my_documents |
List documents uploaded through this server on this machine. |
get_admin_url |
Return the admin URL of a stored document, only when the user asks for it. |
register_document |
Add a previously saved admin URL to the local store. |
Admin credentials for documents uploaded through the server are kept in ~/.mdshare-mcp/documents.json (mode 0600), so upload_markdown returns only the share link and later calls need just the document ID.
Listed in the official MCP Registry as io.github.sathya-sankaran/mdshare, on Glama, and in awesome-mcp-servers.
Plugins
Claude Code
/plugin marketplace add urbanmorph/mdshare
/plugin install mdshare@urbanmorph
Wraps the MCP server with one skill, mdshare-tools, that Claude uses on requests like "share this markdown". Setup guide | source
Cursor
Listed on Cursor Directory: select Add to Cursor on the listing. Same MCP server and skill as the Claude Code plugin. Source
VS Code
Search for mdshare in the Extensions panel, or install from the Marketplace page. Right-click a .md file and choose Share on mdshare, or share a selection. Also works in Cursor and Windsurf. Guide | source
Obsidian
Listed in the Obsidian Community Plugins directory: Settings > Community Plugins > Browse, search for "mdshare". Right-click a file to share it; the admin URL is copied to your clipboard. Guide | source
API
Base URL: https://mdshare.live. Full reference at mdshare.live/docs (plain text for LLMs at /docs/raw).
| Action | Request |
|---|---|
| Upload | POST /api/documents (Content-Type: text/markdown, raw markdown body) |
| Read | GET /api/d/{id}?key={key} (Accept: text/markdown for raw) |
| Update | PUT /api/d/{id}?key={edit_key} (optional X-Base-Hash; 409 if the document changed) |
| Patch | PATCH /api/d/{id}?key={edit_key} (JSON {operations: [{find, replace, replace_all?}]}) |
| Links | POST /api/d/{id}/links?key={admin_key} ({permission, label, expires_at}) |
| Comments | POST /api/d/{id}/comments?key={key} |
| Versions | GET /api/d/{id}/versions?key={key} |
Limits: 10 MB per document; 10 creates per minute and 50 per day per IP; 30 updates per minute; 20 comments per minute; 50 links per document. A 429 includes Retry-After; an expired document returns 410.
Privacy and permissions
- No accounts. The link is the only access control. Anyone with a link has that link's permission, so do not share sensitive content.
- Permission levels:
adm_full control,edt_read and write,cmt_read and comment,viw_read only. Each link can be revoked or given its own expiry. - Tokens are hashed. Requests are checked against a SHA-256 hash of the token. The stored copy of each share token (kept so admins can list links) is encrypted with AES-GCM under a Worker secret.
- Content is sanitized on the server before it is stored.
- Documents expire 90 days after creation by default. The admin can move the expiry to any future date up to a year out. A daily job deletes expired documents with their comments, versions and links.
- What is collected: document content, comments with the display name the commenter chooses, transient IP and user-agent logs at Cloudflare for abuse detection, and aggregate page-view counts through Cloudflare Web Analytics (no cookies). No email addresses, trackers or profiles.
Full policy, including GDPR and DPDPA rights: mdshare.live/privacy.
Architecture
| Component | Technology |
|---|---|
| Framework | Astro 5 (static pages pre-rendered, API routes on the Worker) |
| UI | React 19 as Astro islands |
| Hosting | Cloudflare Workers |
| Database | Cloudflare D1 (SQLite) |
| Real-time | Cloudflare Durable Objects (WebSocket) |
| Editor | Tiptap with tiptap-markdown |
| Styling | Tailwind CSS v4 |
| CI/CD | GitHub Actions |
Layout:
src/pages/ Astro pages; src/pages/api/ holds the REST API
src/worker.ts Worker entry: WebSocket routing, security headers, daily cleanup cron
worker/ DocumentWebSocket Durable Object
lib/ sanitization, tokens, permissions, D1 access, rate limits
components/ Tiptap editor, toolbar, comments, link manager
migrations/ D1 schema migrations
mcp/ mdshare-mcp npm package
plugins/ Claude Code and Cursor plugins
Development
Requires Node.js 22 (the version CI uses).
git clone https://github.com/urbanmorph/mdshare.git
cd mdshare
npm install
# Create the local D1 database schema
npm run db:migrate:local
# Build and serve on http://localhost:3737
npm run dev
Optional: put TOKEN_ENC_KEY (a base64-encoded AES key, for example from openssl rand -base64 32) in .dev.vars to encrypt stored share tokens locally. Without it, tokens are stored unencrypted and a warning is logged.
| Command | What it does |
|---|---|
npm run dev |
astro build, then wrangler dev on port 3737 |
npm run build |
Build the site into dist/ |
npm test |
Run the unit tests (node --test) |
npm run lint |
Run ESLint |
npm run cf-typegen |
Regenerate cloudflare-env.d.ts from the Wrangler config |
Deploy
Every push to main runs .github/workflows/deploy.yml: npm ci, astro build, apply D1 migrations to the remote database, then wrangler deploy. It needs the repository secrets CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID. Set TOKEN_ENC_KEY as a Worker secret (npx wrangler secret put TOKEN_ENC_KEY) to encrypt stored share tokens.
To deploy by hand with your own Cloudflare account, create a D1 database, set its ID in wrangler.jsonc, then:
npm run db:migrate # apply migrations to the remote D1 database
npm run deploy # astro build && wrangler deploy
Contributing
Issues and pull requests are welcome. Please open an issue first to discuss significant changes. mdshare is deliberately minimal: a feature should make upload, share and collaborate faster or clearer without adding UI clutter (see CLAUDE.md for the design principles).
Before opening a PR, run npm test and npm run lint.
License
MIT © 2026 UrbanMorph
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found