markdown-to-whatsapp
Markdown to WhatsApp Converter
Konvertieren Sie Standard-Markdown in WhatsApps Formatierungssyntax – als Webseite, als npm-Bibliothek, als Kommandozeilen-Tool oder als MCP-Server für Agenten.
npm i markdown-to-whatsapp · npx markdown-to-whatsapp mcp

Zweck dieses Tools
WhatsApp verwendet für Textformatierung eine nicht standardisierte Syntax (z. B. *bold*, _italic_, ~strikethrough~). Diese ist ähnlich, aber nicht identisch mit Standard-Markdown.
Dieses Tool bietet eine einfache Möglichkeit, Text aus Markdown-Quellen (wie Texteditoren, Google Docs usw.) in das Format zu konvertieren, das WhatsApp erwartet, sodass man ihn nicht manuell korrigieren muss.
Der gesamte Konvertierungsprozess läuft lokal in Ihrem Browser ab – er ist in JavaScript umgesetzt, und der Parser wird mit der Seite mitgeliefert. Es werden keinerlei Daten an einen Server übertragen – die einzige Anfrage, die die Seite verlässt, betrifft die Schriftart.
Related MCP server: AI Group Markdown to Word MCP Server
Unterstützte Konvertierungen
Das Skript verwendet die marked-Bibliothek für eine korrekte, AST-basierte Analyse und verarbeitet:
Textstile
Fett:
**text**→*text*Kursiv:
*text*oder_text_→_text_Durchgestrichen:
~~text~~→~text~Inline-Code:
`code`→`code`Fett + Kursiv:
***text***→_*text*_(beide Stile bleiben erhalten)
Überschriften
Überschriften werden in fetten Text mit Ebenen-spezifischen Emoji-Präfixen umgewandelt:
# H1→*📌 H1*## H2→*🟠 H2*### H3→*🟡 H3*Und so weiter...
Das Emoji-Präfix kann in der Oberfläche abgeschaltet werden (Überschriften · Emoji); es bleibt dann das schlichte *Title*.
Listen
Ungeordnete Listen: Verwenden
*als Präfix, mit◦für verschachtelte EbenenEbene 1:
* ItemEbene 2:
* ◦ ItemEbene 3:
* ◦ ◦ Item
Geordnete Listen: Die Nummerierung bleibt erhalten;
◦markiert verschachtelte Ebenen1. A/◦ 1. A1/◦ ◦ 1. A1a/2. B
Aufgabenlisten:
- [x]→☑,- [ ]→☐, auch innerhalb geordneter Listen (1. ☑ done)Lockere Elemente: Mehrere Absätze eines Elements werden in einer einzigen Zeile zusammengeführt
Blockinhalte in Elementen: Codeblöcke, Blockzitate und verschachtelte Listen werden auf eigenen Zeilen unterhalb des Elements ausgegeben
Sprechblasenbreite
Eine WhatsApp-Sprechblase bietet in einer Zeile Platz für eine feste Anzahl von Monospace-Zeichen – bei einem O Phone mit um die 26 Zeichen, was dem Standard entspricht. Messen Sie Ihren eigenen Wert, indem Sie sich selbst einen Codeblock schicken und zählen, wo er bricht; stellen Sie dann Width in der Leiste auf dieses Maß (das ? daneben sagt dasselbe). Das Feld akzeptiert Werte von 10 bis 80: Kein Telefon liegt außerhalb dieses Bereichs.
Die Zahl ist eine Eigenschaft des Telefons, nicht einer einzelnen Tabelle; sie gilt also für alles Monospace: Tabellen nehmen nach und nach ab, um darunter zu bleiben, und die Vorschau zeichnet jeden Codeblock exakt in dieser Breite und bricht dort um, wo auch das WhatsApp des Empfängers umbricht.
Tabellen
Eine Tabelle wird in einem von zwei Stilen dargestellt, die in der Oberfläche für das gesamte Dokument oder für eine einzelne Tabelle gewählt werden können:
Auto (Standard): eine gezeichnete Tabelle in einem Monospace-Block, genau so breit, wie sie brauch und nie breiter als die Sprechblase – und eine Liste, wenn gar kein Kasten möglich ist.
+--------+-------------+ | Name | Description | +========+=============+ | Value | Details | +--------+-------------+Liste: immer die Liste.
So ist die Liste aufgebaut
Eine Liste kann die Zellen auf drei Arten gruppieren. Der Konverter errät es aus den Kopfzeilen und den fetten Zellen, und die Abwahl kann pro Tabelle überschrieben werden (Layout: Auto · Zeilen · Spalten · Paare):
Paare – 2 Spalten, egal was in den Kopfzeilen steht: jede Zeile ist eine
key: value-Zeile. Die Kopfzeilen in jeder Zeile auszuschreiben liest sich in fast jeder Tabelle schlechter alsItaly: Rome.* *CPU:* Intel Xeon * *RAM:* 64 GB * *Storage:* 1 TB SSDSpalten – 3 oder mehr Spalten, deren erste Kopfzeile, leer ist oder eine Eigenschaft benennt („Feature“, „Spec“, „Parameter“…), oder deren erste Spalte fett ist: eine Vergleichsmatrix, in der die verglichenen Dinge die Spalten sind, also jede Spalte eine Gruppe* wird.
* *Proxmox* * ◦ _Kernel:_ KVM * ◦ _License:_ AGPL v3 * *ESXi* * ◦ _Kernel:_ VMkernel * ◦ _License:_ ProprietaryZeilen – alles andere: eine Gruppe pro Zeile, benannt nach der ersten Zelle.
* *Product:* Laptop * ◦ _Price:_ $999 * ◦ _Stock:_ 50 * *Product:* Smartphone * ◦ _Price:_ $599 * ◦ _Stock:_ 100
Die Eigenschaftswörter werden wortgenau verglichen („Species“ zählt nicht als „Spec“) in 11 Sprachen: Englisch, Italienisch, Spanisch, Französisch, Portugiesisch, Deutsch, Russisch, Arabisch, Hindi, Bengali und Indonesisch. Paare verlangen genau zwei Spalten; bei einer breiteren Tabelle wird das als Zeilenlesen.
Wie der Kasten abnimmt
Der Kasten wird nicht bei jeder Breite gezeichnet: er wird schrittweise reduziert, bis er in monoWidth passt, und wird zur Liste, wenn nichts mehr passt. Es gibt keine Möglichkeit, eine Tabelle breiter als die Sprechblase zu verlangen.
Vollständiger Kasten, Spalte für Spalte den Innenabstand wird entfernt (zuerst rechts, dann links).
Kompakte Rahmenlose Variante, bei der der Innenabstand wieder schrittweise entfernt wird:
Head1|Head2 |Head-N ------+------------+------ A |BBBBBBBBBBBB|CUmgebrochener Kasten, zuerst mit vollen Rändern, dann kompakt: jede Spalte erhält mindestens ihr längstes Wort, die Restbreite wird proportional verteilt und die Zellen werden word-wrapped. Die Zeilen wachsen so hoch sie müssen – es gibt kein Limit – und zwischen ihnen wird immer eine Trennlinie gezeichnet, weil zwei umbrochene Zeilen ohne sie ineinanderlauf würden. Zellen sind oben in ihrer Zeile ausgerichtet.
+---------+--------------+ | Feature | Notes here | +=========+==============+ | Alpha | short note | +---------+--------------+ | Beta | a slightly | | | longer note | +---------+--------------+Liste mit Aufzählungszeichen, wenn nicht einmal die längsten Wörter passen (eine lange URL, fünf Spalten bei 26 Zeichen …).
Ob ein hoher umgebrochener Kasten besser lesbar ist als die Liste, ist eine Abwägung, die Sie in der Vorschau treffen können: Das eigene Bedienfeld dieser Tabelle schaltet sie Umschaltung auf die List-Variante. Eine Tabelle, in die kein Kasten passt, weist in ihren Panel ethisch darauf hin und bietet das Listen-Layout an, statt eines Stils, der nichts hätte ändern können.
Weiteres Tabellenverhalten
Die Spaltenbreite wird in Anzeigezellen gemessen, sodass Emoji- und CJK-Texte ausgerichtet bleiben (
✅,日本語zählen als zwei Spalten) – so weit das Telefon es zulässt: Auch diese Glyphen stammen schließlich aus einer Fallback-Schriftart, die Ausrichtung ist daher best effort, anders als bei den ASCII-Rahmen.Die Spaltenausrichtung (
:---,:---:,---:) wird im Kasten- und im Kompakstil berücksichtigt.Tabellen, die nur eine Kopfzeile enthalten, werden ohne leeren Körper und ohne doppelten Rahmen dargestellt.
Ein
<br>in einer Zelle wird zu einem Leerzeichen, und ein escaptes\|wird zu¦, damit keine zusätzliche Spalte vorgetäuscht werden können.Rahmen sind, beabsichtigt, pure-ASCII (
+-|=). Die Monospace-Schriftart von WhatsApp enthält keine Zeichen für Bockmalkunft: Ein Telefon nimmt─und┌aus jener der Fallback-Schriftart, die es hat, egal welche Breite sie für dieses Glyphen sund eine 26-char Zhdar Zeichen bricht auf zwei Zeilen um, während die Textzeile neben ihr es nicht tut.+-|sind die einzigen Zeichen, deren Breite eine Monospace-Schrift tatsächlich garantiert – deshalb wird der escapte Pipe auch¦, einé Latin-1-Zeichen aus derselben Schrift wiecà.Zeilentrenner (standardmäßig aus) zieht eine Linie zwischen den Zeilen des Tabellenkörpers, in jedem Kasten- und Kompakstil; eine umbrochene Tabelle zeichnet ihn immer.
Stil, Zeilentrenner und Listenlayout können pro Tabelle eingestellt werden: Wenn die Maus in der Vorschau über eine Tabelle fährt, erscheinen ihre eigenen Bedienelelemthera. Sie gehen vom Dokumentstandard aus und übersteuern ihn nur für diese Tabelle; angezeigt werden nur die Elemente, die auch sinnvoll sind (in der Trenner im Kast, das Layout in der Liste). Die Breite gehört nicht dazu – es gibt nur eine Sprechblase genauso, gilt für jede Tabelle auch. Eine Tabelle mit eigenen Einstellungen bleibt gestrichelt markiert, da die Bedienelemente oben in der Leiste das bewusst ignorieren; die Reset-Schaltfläche „der Tabelle gibt sie ihnen zurück. Die Übersteuerungen hängen an der Kopfzeile der Tabelle: Wenn oben eine Tabelle eingefügt oder gelöscht wird, verschieben sie sich nicht. Eine Tabelle in einem Listeneintrag oder eine Zitatblock folgt immer dem Dokument.
Codeblöcke
Fenced- und eingebettete Blöcke gelangen unverändert WhatsApp: Der Wandler schreibt sie nicht umbrechend oder neu eingerückt – ein Zeilenumbruch im Code ist Inhalt, keine Formatierung. WhatsApp umbriecht im Wort: lange Zeilen von sich mitten im Wort, und die Chatblase hat kein horizontales Scrollen lässt. Deshalb bildet die Vorschau den Umbruch bei monoWidth abbleibt, statt zu scrollen, und zeigt genau die Stelle, an der der Empfänger den Umbruch sehen wird.
Andere Elemente
Links:
[text ](url)→text (url); Autolinks,<https://x>,[url](url)und<me@example.com>werden@exampleals die blosse URL bzw. Adresse ausgegeben (keine Dopplung, keinmailto:-Schein in der Voranzeige)HTML-Entitäten: Dezimale und hexadezimale Verweise plus die üblichen benannten – Latin-1-Buchstaben, Interpunktion und Symbole (
café→café,©→©,A→A). Seltenere Entities (griechisch, mathetisch) bleiben so stehen, wie sie sind.Inline-HTML:
<b>/<strong>→*,<i>/<em>→_,<s>/<del>→~,code→`,<br>→ neue Zeile; Kommentare und andere Tags werden entfernHTML-Blöcke: Tags werden entfernt, Blockgrenzen zu neuen Zeilen, Entitäten dekodiert
Blockzitate: Behält das
>-Präfix bei, unterstützt Verschachtelung (> > nestedвлял)Codeblöcke: Mit drei Rückwärtstenses erhalten; ein dreifaches Backtick im Inhalt wird durch
ˋˋˋersetzt, damit der Block nicht frühzeitig schließen kannHorizontale Linien:
---→───────────────Escape-Zeichen: verwenden Unicode-ähnliche Zeichen (
∗,_,∼), sodass WhatsApp sie nicht als Formatierung interpretiert
WhatsApp-spezifische Besonderheiten
Formatierung in einem Wort wird ignoriertten:
super**bold**ly→superboldly(WhatsApp unterstützt keine Formatierung mitten im Wort)Interpunktion als Grenze ist gültig:
**Name**: value→*Name*: value, sowie(**x**)und**end**..
Verwendung
ÖfnLineWebseite: https://drsound.github.io/markdown-to-whatsapp/
Einfügen oder Ablegen einer
.md-Datei in den linken Bereich. „Beispiel ausprobieren“ füllt ihn mit einer Beispielmeldnung.Der rechte Bereich zeigt die Nachricht in einer WhatsApp-Sprechblas genauso, wie der Empfänger sie sieht; „Rohsyntax ansehen“ zeigt den Text s, der kopiert wird. Die beiden Bereiche scrollen miteinander – der, unter dem der Zeiger steht, führt – und während des Tippens folgt die Vorschau zeichenweise dem Cursor.
“Kopieren für WhatsApp” oder “Teilen auf WhatsApp”, um einen Chat zu öffnen, in dem die Nachricht über
wa.mebereitliegt. Eine sehr lange Nachricht passt nicht in einen Link – Browser schneiden URLs nach ein paar tausend Zeichen ab – deshalb wählt sich „Teilen“ aus und wechselt stattdessen auf Kopieren.
Die Oberfläche folgt den Hell- oder Dunkel-Design des Betriebssystems; ein Schalter im Kopfbereich kann das umsteuern und durch diese Auswahl wird gemerkt. Die Optionsleiste hat pro Inhaltstyp einen Abschnitt, der nur erscheint, solange der Text den Inhalt enthält: Blase (die Breite, wenn eine Tabelle/Codeblock gibt), Tabellen (Stil und Trennlinie) und Überschriften (das Emoji-Präfix). Eine Einstellung, die durch eine andere keinen Zweck hat – der Trenner im Listenformat, die Breite ohne Monospace –, wird eingetrübt statt entfernt, damit die Leiste ihre Form behält. Die Einstellungen werden mit dem Theme in localStorage gespeichert. Tabellenbezogene Wahlmöglichkeiten werden nicht gespeichert: Sie gehören zu dem Text, der gerade konvertiert wird.
Aus Code, Shell oder Agenten heraus verwenden
The same converter is published on npm as markdown-to-whatsapp (Node 20 oder neuer). The options are the ones described above, with the same names and defaults, and are listed in full at the end of this section.
Bibliothek
npm install markdown-to-whatsappimport { convertTextToWhatsapp, convertToBlocks } from 'markdown-to-whatsapp';
convertTextToWhatsapp('# Hi **there**');
// → '*📌 Hi there*'
convertTextToWhatsapp(markdown, { monoWidth: 30, tableFormat: 'auto', headingEmojis: false });
// The same conversion with the blocks kept apart: each has the source `line` it starts on,
// and each table its `key`, `columns`, `fitsBox`, `asList` and `listLayout`
const { text, blocks } = convertToBlocks(markdown, { monoWidth: 30 });Kommandozeile
npx markdown-to-whatsapp notes.md # a file…
cat notes.md | npx markdown-to-whatsapp # …or stdin
npx markdown-to-whatsapp notes.md --width 32 --tables list --no-emoji
npx markdown-to-whatsapp notes.md --json # the blocks, for scripting
npx markdown-to-whatsapp --help--width (10–80), --tables auto|list, --layout auto|rows|columns|pairs, --separator, --no-emoji, --json, plus -h, --help, -v, --version. Output goes to stdout; für eine bad Option dabei erklärt why on stderr and exits 2.
MCP-Server
Das Paket läuft als Model Context Protocol-Server über stdio, sodass ein Agent Text selbst konvertieren – wichtig, Tabellen: columns gegen eine 26-Zeichen-Sprechblase zählen ist genau das, was ein Modell falsch and diese Werkzeug richtig macht.
claude mcp add markdown-to-whatsapp -- npx -y markdown-to-whatsapp mcpoder, für Claude Desktop und andere Clients, die eine JSON-Konfiguration erwarten:
{
"mcpServers": {
"markdown-to-whatsapp": {
"command": "npx",
"args": ["-y", "markdown-to-whatsapp", "mcp"]
}
}
}Es stellt ein Tool bereit, convert_markdown_to_whatsapp, das markdown sowie die optionalen monoWidth, tableFormat, listLayout, rowSeparator und headingEmojis akzeptiert. Der Text kommt als Inhalt des Tools zurück, und das strukturierte Ergebnis liefert ihn als text zusammen mit tables: ein Eintrag pro Tabelle mit key, columns, fitsBox, asList und listLayout, damit der Agent erkennen kann, welche Tabellen zu einer Box und welche zu einer Liste wurden. Das Tool ist schreibgeschützt und idempotent.
Optionen
Die Optionen sind tableFormat (auto | list), monoWidth, rowSeparator, headingEmojis, listLayout (auto | rows | columns | pairs) und tableOverrides – entweder ein Array, das über die Position der Tabelle im Dokument indiziert wird, oder ein Objekt, das nach dem key der Tabelle benannt ist (ihre Kopfzeilen, verbunden mit |, plus #2, #3 … für wiederholte Kopfzeilen). Jeder Eintrag überschreibt die anderen Optionen nur für diese Tabelle allein. Die Oberfläche stellt listLayout nur pro Tabelle bereit.
Die alten Namen werden bei der Eingabe weiterhin akzeptiert: tableThreshold für monoWidth und ascii / always für tableFormat (da ascii nie eine Box gezeichnet hat, die breiter als die Sprechblase war, wird es auf auto abgebildet). Wenn sowohl der alte als auch der neue Name angegeben sind, gewinnt der neue und der alte wird verworfen. borderStyle, das früher die Unicode-Rahmenzeichnung auswählte, wird akzeptiert und ignoriert.
Entwicklung
Tests ausführen
Node 20 oder neuer, aus dem Repository-Stammverzeichnis:
npm install
npm testDie Testsuite verwendet dateibasierte Tests:
tests/inputs/*.md– Markdown-Eingabedateientests/inputs/*.json– optionale Konverteroptionen pro Fixture (z. B.{ "monoWidth": 40 })tests/expected/*.txt– erwartete WhatsApp-Ausgabe
sowie ein paar Invarianten: der Parser aus docs/vendor/ stimmt mit der installierten Version überein, convertToBlocks liefert die richtigen Quellzeilen, und der Einstiegspunkt des Pakets ist das Skript der Seite.
Tests laufen außerdem bei jedem Push und Pull Request in CI (.github/workflows/test.yml).
Projektstruktur
docs/converter.js– der Konverter selbst: ein reines ES-Modul, ohne DOM, Optionen werden als Parameter übergeben. Es ist sowohl das Skript, das die Seite importiert, als auch der Einstiegspunkt des npm-Pakets (exports["."]), sodass es eine Kopie gibt und keinen Build-Schritt. Es stelltconvertTextToWhatsapp(markdown, options),convertToBlocks(markdown, options)– die gleiche Konvertierung, bei der die Blöcke der obersten Ebene getrennt gehalten und jeweils mit der Tabelle getaggt werden, aus der sie stammen, worauf die Optionen pro Tabelle aufgebaut werden – sowie die AbfragenmdContainsTable/mdContainsHeading/mdContainsCodebereit, diese die Oberfläche verwendet, um eine Option nur dann zu zeigen, wenn sie zutrifft. Jeder Block vonconvertToBlocksmeldet die Quellzeileline, an der er beginnt – das hält die beiden Panels beim Scrollen zusammen – und jeder Tabellenblock auchkey,columns,fitsBox(eine Box ist möglich),asList(was geschrieben wurde) undlistLayout, sodass die Oberfläche genau die verbleibenden Auswahlmöglichkeiten anbieten kann.docs/ui.js– die Seitenverdrahtung: Theme, kontextabhängige Optionen, WhatsApp-Vorschau, Scroll-Synchronisierung der Panels, Kopieren und Teilendocs/index.html,docs/style.css– Markup und handgeschriebenes Stylesheet (kein CSS-Framework)docs/vendor/– die ES-Build von marked, kopiert ausnode_modulesvonnpm run vendor; die Import-Map der Seite löstmarkeddarauf aufbin/markdown-to-whatsapp.js– das Kommandozeilen-Tool;bin/mcp.js– der MCP-Server, den es untermcpstartet, und der nur dann geladen wird, sodass beim Konvertieren einer Datei nie das Protokoll-SDK geladen wirdscripts/vendor.js– kopiert die ES-Build vonmarkednachdocs/vendor/(npm run vendor)tests/– die Fixtures und der Ausläufer
Die Abhängigkeit zu marked
Die Version von marked ist in package.json auf 18.0.10 festgeschrieben, und die Kopie, die die Seite aus docs/vendor/ lädt, wird von der Testsuite damit abgeglichen, damit Seite, Paket und Tests das Markdown immer auf dieselbe Weise parsen. Zum Aktualisieren: Pin ändern, npm install, npm run vendor, npm test.
Veröffentlichung
npm test
npm pack --dry-run # docs/converter.js, bin/, README, LICENSE — nothing else
npm publishLokale Entwicklung
cd docs
python3 -m http.server 8080
# Open http://localhost:8080Lizenz
MIT, siehe die Datei LICENSE.
Available Tools
1 toolconvert_markdown_to_whatsappConvert Markdown to WhatsAppARead-onlyIdempotent
Convert Markdown into the formatting WhatsApp renders (bold, italic, strike, code, lists, quotes), ready to paste or send.
Use it instead of hand-writing WhatsApp syntax whenever the text has tables, nested lists, headings or inline formatting next to punctuation.
It applies WhatsApp's real rules: markers only on word boundaries, escapes that WhatsApp does not interpret, no mid-word formatting.
Each table is drawn as a monospace box sized to the reader's phone, degrading in this order: cell padding removed, then borders, then cells word-wrapped. It becomes a bulleted list only when no box fits.
Counting columns against a 26-character bubble is exactly what this tool does and a model does not.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The Markdown text to convert | |
| monoWidth | No | Monospace characters that fit on one line of the reader's WhatsApp bubble; about 26 on a 360 px phone (default 26). Tables are drawn to fit this width. | |
| listLayout | No | How a table reads when it is a list: rows (one group per row), columns (one group per column, for comparison matrices), pairs (bare "key: value" lines, two columns only). auto guesses from the headers. Default auto. | |
| tableFormat | No | auto: a drawn table when it fits monoWidth, a bulleted list otherwise. list: always a bulleted list. Default auto. | |
| rowSeparator | No | Draw a rule between table rows. Always drawn when a row wraps. Default false. | |
| headingEmojis | No | Prefix headings with a level emoji (📌 🟠 🟡 …) before the bold text. Default true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | The WhatsApp-formatted message |
| tables | Yes | One entry per table in the document, in order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses real behavioral rules: markers only on word boundaries, escapes that WhatsApp does not interpret, no mid-word formatting, and a detailed table-degradation order (padding removed, then borders, then word-wrapping, then becoming a bulleted list). The annotations already indicate read-only and idempotent behavior, and the description adds substantial context beyond that without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences carry the core purpose, usage triggers, formatting rules, and table behavior without filler. The main conversion statement is front-loaded, and each sentence contributes distinct, necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, a complete input schema, and an output schema, the description covers purpose, when to use it, behavioral nuances, and table degradation fallbacks. Nothing significant is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds general context about the 26-character bubble and table-fitting behavior, but it does not explain individual parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Convert Markdown into the formatting WhatsApp renders' and lists concrete formatting constructs (*bold*, _italic_, ~strike~, `code`, lists, quotes). The scope is precise and there are no sibling tools to confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use it: 'Use it instead of hand-writing WhatsApp syntax whenever the text has tables, nested lists, headings or inline formatting next to punctuation.' It names the alternative (hand-writing) and gives concrete trigger conditions, though it does not state when not to use the tool or list exclusions for simple text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.2- First observed
convert_markdown_to_whatsapp
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusion or misselection. The tool's purpose is entirely unambiguous within the server's scope.
The single tool name uses a clear snake_case verb_noun pattern that directly describes its action and target. Even without other tools for comparison, the naming is predictable and self-consistent.
The server has just one tool, but its purpose is extremely focused: converting Markdown to WhatsApp formatting. This is slightly below the typical 3-15 tool range, yet the single tool fully covers the server's stated domain.
The tool comprehensively handles the full conversion scenario, including tables, nested lists, headings, inline formatting, and WhatsApp's real formatting rules. Within the narrow markdown-to-WhatsApp domain, there are no obvious missing operations.
Maintenance
Related MCP Connectors
Markdown to PDF: headings, bold, code, lists, rules. A4/Letter/Legal. Free 30/hr. MCP + REST.
Use your own Word templates to convert Markdown → DOCX/PDF/HTML from any MCP-compatible AI.
Free deterministic PDF, Markdown, citation, invisible-character, and formatting cleanup for agents.
11PDF/Word/Excel/HTML to clean Markdown for LLMs and RAG. Keys $19/mo; 50 free calls a day.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConverts various file formats to Markdown using the MarkItDown utility and can be integrated with MCP clients for seamless document processing and conversion.88MIT
- AlicenseAqualityCmaintenanceConverts Markdown documents to professional Word documents with advanced formatting capabilities including mathematical formulas, custom styling, tables, images, headers/footers, and watermarks.480 npm14MIT
- FlicenseNot gradedqualityDmaintenanceConverts documents (PDF, DOCX, images, etc.) to Markdown using Microsoft's Markitdown library, with no local setup required. Integrates with AI agents via MCP for seamless document conversion.1-
- AlicenseNot gradedqualityAmaintenanceA stdio MCP server that converts CommonMark/GFM Markdown into Slack mrkdwn, Microsoft Teams HTML, Jira wiki markup, and plain text, enabling agents to transform content for downstream platforms without posting or sending messages.7 npmMIT