MarkdownMCP
Provides live preview and change tracking for Markdown documents, allowing agents to scope a file and have updates streamed to a browser UI with tabs, change highlights, and history.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MarkdownMCPWatch /tmp/notes.md and open live preview"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MarkdownMCP
Live markdown preview for LLM agents. The agent calls one tool when a markdown file comes into scope; a shared hub watches the file, opens your OS default browser (managed profile) on the first create/change, and streams updates into a multi-tab Vue UI (unread dots, toggleable change marks, history).
Features
One MCP tool:
scope_markdown— call once before the first write (path may not exist yet)Singleton hub shared by all MCP clients; exits when no clients remain
Sticky high port — hub reuses a preferred port from
settings.jsonso preview tabs reconnect after restartsManaged browser profile — system default browser with an isolated profile under the app data dir; left open when the hub exits
Reconnect-first — does not spawn a new window if a managed browser session is already running
In-app tabs with subtle unread indicators
Toggleable change highlights + snapshot history
First-run settings (theme, bind host, preferred port, allowed path roots)
Cross-platform (Windows, macOS, Linux)
Related MCP server: MCP Docs Server
Quick install (Grok)
From this repo (after build), or once published:
# From monorepo root
npm install
npm run build
# User-level MCP (Grok)
grok mcp add markdown-mcp -- node /absolute/path/to/live-markdown-mcp/packages/mcp/dist/cli.jsOr with a global/workspace link:
npm link -w markdown-mcp
grok mcp add markdown-mcp -- markdown-mcp~/.grok/config.toml equivalent:
[mcp_servers.markdown-mcp]
command = "node"
args = ["/absolute/path/to/live-markdown-mcp/packages/mcp/dist/cli.js"]
enabled = true
startup_timeout_sec = 60Copy the skill so the model knows when to call the tool:
# Windows PowerShell
Copy-Item -Recurse .grok/skills/markdown-scope $HOME/.grok/skills/markdown-scopeOther clients
Claude Code
claude mcp add markdown-mcp -- node /absolute/path/to/live-markdown-mcp/packages/mcp/dist/cli.jsOr project .mcp.json:
{
"mcpServers": {
"markdown-mcp": {
"command": "node",
"args": ["/absolute/path/to/live-markdown-mcp/packages/mcp/dist/cli.js"]
}
}
}Cursor
.cursor/mcp.json:
{
"mcpServers": {
"markdown-mcp": {
"command": "node",
"args": ["/absolute/path/to/live-markdown-mcp/packages/mcp/dist/cli.js"]
}
}
}Agent usage
1. Decide you will create or edit a markdown doc the user should see rendered.
2. Call scope_markdown once with the path (absolute preferred).
3. Write/edit the file freely — do not call the tool again for edits.Tool:
Tool | Args | Purpose |
|
| Watch + preview this file |
Architecture
MCP client(s) --stdio--> markdown-mcp bridge
|
+--> ensure hub up (singleton)
+--> register client
+--> scope_markdown → hub API
Hub --chokidar--> disk
Hub --WebSocket--> Vue UI (tabs, diffs, history)
Hub --spawn--> system default browser + managed profile (first file event, if none running)State lives under:
Platform | Directory |
Windows |
|
macOS |
|
Linux |
|
File / dir | Role |
| Live hub URL/port/pid (cleared when hub stops) |
| Theme, bind host, preferredPort, browser prefs |
| Singleton lock |
| Managed browser user-data / profile |
| Last launched browser pid (reconnect-first) |
Development
npm install
npm run build
npm run start:hub # hub only (stays up until Ctrl+C; no MCP client timeout if you register manually)
npm run start:mcp # MCP stdio server (spawns hub as needed)
npm run dev:web # Vite UI against a hub on :7420 (optional proxy)
npm run test:unit # shared + hub unit tests
npm run test:local # unit + sticky-port + browser policy + default-browser
npm run test:sticky-port # sticky port integration (uses real app data dir)
npm run test:default-browser # OS default product → binary (skips if browser missing)Install-dependent checks (Brave/Chrome/Edge/Firefox present on disk, OS default detection) skip with a clear message when the browser is not installed — they do not fail CI machines without that browser.
Packages:
Package | Role |
| Types + defaults |
| HTTP/WS hub, watchers, browser |
| Vue UI |
| MCP stdio entry ( |
Settings
First browser open shows a short wizard. Later: Settings in the UI.
Setting | Default |
Theme | System / Light / Dark |
Bind host |
|
Preferred port | auto (high port 49152–65535, then sticky) |
Allowed path roots | empty = allow any |
Open browser on first file event | on |
Preserve scroll | on |
Show changes by default | on |
Changing bind host or preferred port requires a hub restart. Non-loopback binds ask for confirmation.
Sticky port & browser profile
On first start (or empty preferred port), the hub binds a free high port and writes it to
settings.jsonaspreferredPort.Later starts try that port first. If it is taken, the hub picks another free high port and updates
preferredPort.On the first scoped file create/change (when enabled), the hub launches the system default browser with a dedicated profile under
browser-profile/. Common engines are supported (Chrome/Edge/Brave/Chromium via--user-data-dir, Firefox via-profile). Safari and unknown browsers fall back to a normal URL open with limited isolation.If a managed browser session is already running, the hub does not open another window (the open tab reconnects over WebSocket).
Stopping the hub does not close the browser.
Troubleshooting
Issue | Fix |
Hub won't start | Delete |
Browser never opens | Scope a file and write it; browser waits for first create/change. Confirm “Open browser on first file event” is on. |
Extra browser windows | Hub skips launch when |
Tab won’t reconnect after restart | Ensure sticky |
Path denied | Add root under Settings → Allowed path roots |
UI is fallback HTML | Run |
Port unknown | Read |
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceServes markdown instructions as tools to provide LLMs with team playbooks, coding standards, domain knowledge, and personal workflows through version-controlled files.Last updated13MIT
- Alicense-qualityDmaintenanceProvides direct access to local documentation files through simple search and overview tools, enabling LLMs to query project-specific markdown documentation without requiring vector databases or RAG pipelines.Last updatedMIT
- Alicense-qualityAmaintenanceNative macOS markdown previewer. Opens files and renders markdown content in a live preview window directly from your AI tools.Last updated36MIT
- Alicense-qualityDmaintenanceEnables AI agents to read, write, append, and delete content in Markdown files using structural selectors, without regex or string hacking.Last updated155MIT
Related MCP Connectors
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
Human feedback for AI agents: share HTML, get a live review link, read anchored notes as markdown.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kschroeder/live-markdown-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server