Convert markdown to rich text for any platform — CLI and MCP server
Penman has 4 tools with complete input schemas and descriptions. Tool names are action-oriented (penman, penman_html, penman_craft, penman_platforms). Descriptions are detailed and context-aware (avg ~180 chars), explaining WHEN to use each tool. However, output schemas are not documented, LLMs cannot predict return structure. Parameter descriptions are present but some lack format/constraint details. Error handling is minimal; no recovery guidance visible in tool definitions. The penman tool's description is exceptionally clear about use cases ('whenever user asks to pen something'), but penman_platforms lacks actionable discovery context.
Convert markdown to platform-styled rich text and copy it to the macOS clipboard, ready to paste into the target app with formatting intact. Use this whenever the user asks to "pen" something — "pen this", "can you pen this", "pen it for Slack" — or otherwise wants to send formatted content somewhere to paste. Pick the "terminal" target to copy a multi-line command as plain text for pasting into a shell. Supports: teams, slack, discord, word, google-docs, notion, outlook, gmail, confluence, jira, powerpoint, google-slides, craft, terminal. Theme defaults to the macOS system theme.
Convert markdown to native Craft block JSON (Mode A) and return it as text — WITHOUT touching the clipboard. penman cannot call Craft's MCP itself: take the returned block array and feed it to Craft's `craft_write` (each block's `markdown` field round-trips). Use this for high-fidelity Craft inserts; use `penman --for craft` (Mode B) when you just want styled HTML on the clipboard to paste.
Convert markdown to platform-styled HTML and return it as text without touching the clipboard. Use this to preview output, embed it elsewhere, or debug styling without side effects.
List the targets penman can convert for, grouped by category (chat, document, email, wiki, presentation, notes, terminal). Call this first if you don't know which target the user wants.
Output schemas not documented. LLMs cannot predict return structure (e.g., does penman_html return {html: string} or {content: string, metadata: {...}}?). This forces agents to guess and risks parsing failures.
penman_platforms has empty input schema ({}). While correct for a no-arg tool, the description should explicitly state 'Call this first to discover available targets' to guide discovery flow.
No error handling guidance in tool descriptions. If markdown is invalid or platform is unsupported, what should the LLM do? No recovery hints provided.
penman tool description mentions 'theme defaults to macOS system theme' but does not explain what happens on non-macOS systems or if system theme detection fails.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
penman_craft description references 'Mode A' and 'Mode B' without defining them upfront. LLMs unfamiliar with penman's architecture may misunderstand when to use this tool vs penman.