Native macOS Markdown editor for the Claude era. Live preview, multi-provider AI, built-in Claude Code MCP server.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"picamd": {
"command": "<see-readme>",
"args": []
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Inline-WYSIWYG Markdown editor for macOS. AppKit-native (no Chromium), file-based (no library DB or vault), MIT.
This server supports HTTP transport. Be the first to test it — help the community know if it works.
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
No package registry to scan.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in ai-ml / writing
Persistent memory using a knowledge graph
Dynamic problem-solving through sequential thought chains
Workspace template + MCP server for Claude Code, Codex CLI, Cursor & Windsurf. Multi-agent knowledge engine (ag-refresh / ag-ask) that turns any codebase into a queryable AI assistant.
The official MCP server implementation for the Perplexity API Platform
MCP Security Weekly
Get CVE alerts and security updates for Picamd and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Inline-WYSIWYG Markdown editor for macOS. AppKit-native (no Chromium), file-based (no library DB or vault), MIT.
Status:
v0.8.0-alpha— first public release. Built onNSTextView, Swift 6 strict concurrency throughout, ad-hoc signed.
| Native AppKit | Inline WYSIWYG | File-based | |
|---|---|---|---|
| PicaMD | ✓ | ✓ | ✓ |
| Typora | ✗ (Electron) | ✓ | ✓ |
| Obsidian | ✗ (Electron) | ✓ (Live Preview) | ~ (vault DB on top) |
| iA Writer | ✓ | ✗ (syntax highlighting only) | ✓ |
| MarkEdit | ✓ | ✗ (no live preview) | ✓ |
| Bear | ✓ | partial (proprietary "Polar Bear") | ✗ (vault DB) |
The combination — AppKit + inline-WYSIWYG + plain files — is empty on the market. That's the niche. Everything else (AI hook, MCP server, themes, export) is built on top.
**, *, ~~,
==, `, #, >, [](), math $, code-fence backticks,
<details>.WKWebView instances at 12 so
RAM stays bounded on long docs.[^id] hover.⌘T), Focus mode (⌃⌘F), Typewriter mode
(⌃⌘Y), Command palette (⌘⇧P).Three built-in presets — Stock+, Editorial, Tahoe. Four palettes
— White, Off-White, Dark Grey, OLED. Seven accents. Body /
heading font, heading scale, code-block style — all toggleable
in ⌘, Settings. The chosen palette is independent of macOS
Light/Dark Mode (use the White palette while macOS is in Dark
Mode, if you want).
Off by default. When enabled, you get ⌃⌘1–⌃⌘9 bound to
nine starter presets (clean Markdown, summarize, rewrite-natural,
extend, fix grammar, translate DE↔EN, formalise, casualise,
custom). ⌃Space opens a fuzzy picker over every preset.
Each preset is a name + system prompt + user prompt template + insertion mode (replace selection / append below / blockquote / HTML comment / popover). All editable, all reorderable, all re-bindable. Add your own.
Talks to:
--api)API keys go in the macOS Keychain. Endpoint selection is per-preset; the default is whatever's set in Settings → AI → Providers.
PicaMD ships with picamd-mcp, a stdio-MCP sidecar embedded in
the app bundle. It lets Claude Code (or any MCP client) read and
edit currently-open documents through eight tools.
// ~/.config/claude-code/mcp.json
{
"mcpServers": {
"picamd": {
"command": "/Applications/PicaMD.app/Contents/Resources/picamd-mcp"
}
}
}
| Tool | What it returns |
|---|---|
workspace.openDocuments | path / title / line-count for every doc currently in a PicaMD window |
workspace.search | substring matches across all open docs |
document.metadata | title, frontmatter tags, word/line counts |
document.outline | heading hierarchy with line numbers |
document.readLines | 1-indexed line range |
document.readSection | body under a heading by text match |
document.replaceLines | atomic line-range write (FileWatcher picks the change up live) |
document.appendText | append with paragraph break |
The point: Claude can call outline() + readSection("Methods")
instead of Read(file) for the whole document — useful for long
docs in repeated edit loops. Whether that's worth using over
Claude's native Read with `offs