AI Answer Copier
AI Answer Copier — MCP-Powered Multi-Format Exporter
Turn "AI Noise" into "Classroom Ready" in 5 Seconds.
A Model Context Protocol (MCP) server that gives your AI assistant the power to convert Markdown into 22 professional document formats, batch-convert multiple documents across 22 formats in one call, analyze documents, repair broken Markdown, and convert across platforms — all without leaving your AI chat.
npm: https://www.npmjs.com/package/@xjtlumedia/markdown-mcp-server
Why This Exists
You asked an AI to write 20 questions. It delivered. But now you're stuck:
Pain Point | Manual Workflow | With AI Answer Copier |
Extracting Q&A | 10–15 min copying each line | 2 seconds (auto-detect) |
Formatting Math | 20 min fixing broken symbols | Instant (KaTeX support) |
LMS Upload | 15 min manual CSV entry | 1-click export |
Total Prep Time | ~45–60 minutes | < 1 minute |
Generating content takes seconds. Formatting it for the real world takes an hour. This MCP server eliminates that gap entirely.
Related MCP server: MarkItDown MCP Server
Live Demo
Online web version (no install needed): ai-answer-copier.vercel.app
Test MCP tool in inspector:
Use actual MCP instance:
All 34 MCP Tools
Document Conversion Tools (15)
# | Tool | Output | Description |
1 |
|
| Standardize and normalize Markdown syntax (ATX headers, |
2 |
|
| Strip all formatting to produce plain text |
3 |
|
| Full styled HTML document with GFM tables, KaTeX math, and embedded stylesheet |
4 |
| HTML string | Generate self-contained HTML with all styles inlined (read-only, no file I/O) |
5 |
|
| Print-ready PDF via headless Chromium with full KaTeX math and syntax highlighting |
6 |
|
| Microsoft Word document with styled headings, lists, and code formatting |
7 |
|
| LaTeX source code with |
8 |
|
| Rich Text Format for legacy word processors and email clients |
9 |
|
| Extract GFM pipe-tables to comma-separated values |
10 |
|
| Structured JSON representation with sections, headings, lists, code blocks, and tables |
11 |
|
| Well-formed XML with |
12 |
|
| Excel spreadsheet — each Markdown table becomes a sheet |
13 |
|
| Full-page PNG screenshot via headless Chromium |
14 |
|
| Export Markdown to file, optionally harmonizing formatting first ( |
15 |
|
| Email-optimized HTML with all styles inlined, compatible with Outlook, Gmail, Apple Mail |
Platform Converter Tools (10)
# | Tool | Target Platform | Description |
16 |
| Slack | mrkdwn format — bold as |
17 |
| Discord | Styled bold/underline headers, preserved code blocks |
18 |
| JIRA | Wiki markup — |
19 |
| Confluence | Wiki markup with |
20 |
| AsciiDoc |
|
21 |
| reStructuredText | Underlined headers, |
22 |
| MediaWiki |
|
23 |
| BBCode |
|
24 |
| Textile | Markup for Redmine, Basecamp, and CMS platforms |
25 |
| Emacs Org Mode |
|
Import Tools (1)
# | Tool | Description |
26 |
| Convert HTML content (full document or fragment) back to Markdown |
Repair & Lint Tools (2)
# | Tool | Description |
27 |
| Fix broken Markdown from LLM output or copy-paste — unclosed code fences, broken tables, stray emphasis markers, missing heading spaces, broken links |
28 |
| Lint and report issues as JSON array with line number, severity, rule name, message, and fixable flag |
Document Analysis Tools (5)
# | Tool | Description |
29 |
| Extract all code blocks with language, content, and start/end line numbers |
30 |
| Extract all links and images with text, URL, line number, and type (inline, reference, image, autolink) |
31 |
| Generate Markdown Table of Contents from headings with configurable |
32 |
| Comprehensive statistics — line/word/character/paragraph/sentence counts, heading/code/table/link/image counts, estimated reading time |
33 |
| Bird's-eye document architecture — statistics, heading outline, code block summary, link summary |
Batch Conversion (1)
# | Tool | Input | Description |
34 |
|
| Batch-convert multiple Markdown documents to 22 formats in one call. Error-isolated per item+format. Optional |
6 Built-in Prompts
Pre-configured prompt templates that orchestrate multiple tools:
Prompt | Description |
| Convert Markdown to any supported format (PDF, DOCX, HTML, LaTeX, CSV, JSON, XML, XLSX, RTF, PNG, TXT, MD) |
| Extract all tables from Markdown and export as CSV or XLSX |
| Harmonize formatting, then convert to both PDF and HTML for distribution |
| Lint → Repair → Re-lint to confirm all issues resolved |
| Convert Markdown to any platform format (Slack, Discord, JIRA, Confluence, AsciiDoc, RST, MediaWiki, BBCode, Textile, Org Mode) |
| Full overview — statistics, TOC, code blocks, and links in one report |
2 Resources
Resource URI | Description |
| Complete JSON list of all 23+ output formats with tool names and types |
| Guide for choosing the right output format based on your use case |
Quick Start
Install via npx (Recommended)
No installation needed — just configure your MCP client:
{
"mcpServers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}Install Globally
npm install -g @xjtlumedia/markdown-mcp-serverThen configure:
{
"mcpServers": {
"ai-answer-copier": {
"command": "markdown-mcp-server"
}
}
}Configuration by AI Client
🔌 Claude Desktop
Edit %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}Restart Claude Desktop. You'll see a 🔌 icon — all 34 tools are now available.
VS Code (GitHub Copilot)
Add to .vscode/mcp.json or VS Code settings:
{
"servers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}Cursor / Windsurf / Any MCP Client
Use the same npx command pattern above in your client's MCP configuration.
DIY version (local build)
{
"mcpServers": {
"markdown-formatter": {
"command": "node",
"args": [
"YOUR_PATH_TO_PROJECT/mcp-server/dist/mcp-server/src/index.js"
]
}
}
}Replace YOUR_PATH_TO_PROJECT with the absolute path to this folder.
HTTP Mode (Vercel)
A hosted HTTP endpoint is available for browser-based and remote integrations:
https://ai-answer-copier.vercel.app/api/mcpTest with MCP Inspector:
npx @modelcontextprotocol/inspector https://ai-answer-copier.vercel.app/api/mcpUsage Examples
Once connected, just talk to your AI naturally:
"Batch-convert 5 markdown documents into DOCX, PDF, and HTML simultaneously and save them to my Downloads folder." → AI uses
batch_convertwith items[] and formats[]
"Generate 10 physics questions about Newton's Laws and export them as a Kahoot CSV." → AI uses
convert_to_csv
"Convert this markdown into a Word document and save it to my Desktop." → AI calls
convert_to_docxwithoutput_path
"Take these lecture notes and produce a print-ready PDF." → AI calls
convert_to_pdfwith Puppeteer rendering, KaTeX math, and syntax highlighting
"Turn this into a Moodle-compatible XML quiz bank." → AI calls
convert_to_xml
"Format this for Slack and send it to the team channel." → AI calls
convert_to_slack
"Check this Markdown for issues and fix them." → AI calls
lint_markdownthenrepair_markdown
"Give me an overview of this document — word count, structure, all links." → AI chains
analyze_document+generate_toc+extract_links
Features
22 Output Formats
Export to PDF, DOCX, HTML, LaTeX, CSV, JSON, XML, XLSX, RTF, PNG, TXT, Markdown — plus Slack, Discord, JIRA, Confluence, AsciiDoc, RST, MediaWiki, BBCode, Textile, Org Mode, and Email HTML.
Batch Conversion
Convert multiple Markdown documents to multiple formats in one batch_convert call. Errors are isolated per item+format so one failure never blocks the rest.
Math & Code as First-Class Citizens
Full support for KaTeX math expressions and syntax-highlighted code blocks. Your $\sqrt{x^2 + y^2}$ and Python snippets survive every conversion perfectly.
Smart Binary Handling
Binary formats (PDF, DOCX, XLSX, PNG) don't dump raw base64 into chat. The server returns actionable guidance so the AI knows to save to a file path.
Document Analysis & Repair
Lint Markdown, auto-repair broken formatting, extract code blocks and links, generate Table of Contents, and get comprehensive document statistics — all without leaving the chat.
GFM (GitHub Flavored Markdown)
Tables, task lists, strikethrough, autolinks — all parsed correctly via remark-gfm.
Puppeteer-Powered PDF & PNG
PDF and image exports use headless Chromium for pixel-perfect rendering with full CSS styling, KaTeX math, syntax highlighting, and print-optimized layouts.
Self-Contained
Zero runtime dependencies on external APIs. Everything runs locally. Your data never leaves your computer.
Architecture
┌─────────────────────────┐
│ AI Client │
│ (Claude, Copilot, │
│ Cursor, Windsurf) │
└──────────┬──────────────┘
│ MCP Protocol (stdio / HTTP)
▼
┌─────────────────────────┐
│ AI Answer Copier │
│ MCP Server (34 tools) │
│ │
│ ┌── Conversion ────────┐│
│ │ remark/rehype, docx, ││
│ │ puppeteer, xlsx, ││
│ │ CSV/JSON/XML/RTF/ ││
│ │ LaTeX/TXT parsers ││
│ └──────────────────────┘│
│ ┌── Platform ──────────┐│
│ │ Slack, Discord, JIRA,││
│ │ Confluence, AsciiDoc,││
│ │ RST, MediaWiki, ││
│ │ BBCode, Textile, Org ││
│ └──────────────────────┘│
│ ┌── Batch ─────────────┐│
│ │ items[] × formats[] ││
│ │ 22 formats, isolated ││
│ └──────────────────────┘│
│ ┌── Analysis ──────────┐│
│ │ Code blocks, links, ││
│ │ TOC, stats, structure││
│ └──────────────────────┘│
│ ┌── Repair ────────────┐│
│ │ Lint, auto-repair ││
│ └──────────────────────┘│
│ ┌── Import ────────────┐│
│ │ HTML → Markdown ││
│ └──────────────────────┘│
└─────────────────────────┘What's New in v2.1.0
This release hardens both the local (npx) and remote Vercel MCP transports with 8 logic fixes:
# | Fix | Area |
1 | Browser not closed on error — | Both transports |
2 |
| Vercel |
3 |
| Vercel |
4 | Session map memory leak — | Vercel |
5 |
| Vercel |
6 |
| Vercel |
7 | No input size validation — added 1 GB hard limit ( | Both transports |
8 | DELETE method creates new session — handler now returns | Vercel |
Known Limitations
PDF / PNG require local Chromium —
convert_to_pdfandconvert_to_imagelaunch a headless browser. This works fine withnpxbut is unavailable on Vercel's free tier (no bundled Chromium). Set thePUPPETEER_EXECUTABLE_PATHenvironment variable to point to your local Chrome if auto-detection fails.Chromium version on Vercel — the remote endpoint uses
@sparticuz/chromium-minwith a pinned tar at v131.0.1. If Vercel bumps the Lambda runtime you may need to update theCHROMIUM_TAR_URLenv var.1 MB input limit — all tool calls reject inputs larger than 1 MB. Split large documents into sections before converting.
Session TTL (remote only) — sessions on the Vercel endpoint expire after 30 minutes of inactivity. Long-running stateful workflows should issue periodic keep-alive calls.
Development
# Clone the repository
git clone https://github.com/XJTLUmedia/AI_answer_copier.git
# Web app
npm install
npm run dev
# MCP server
cd mcp-server
npm install
npm run dev # hot reload
npm run build # production build
npm run inspector # test with MCP InspectorTech Stack
Component | Technology |
MCP SDK |
|
Markdown Parser |
|
Math Rendering |
|
Word Export |
|
Excel Export |
|
PDF/PNG Export |
|
Schema Validation |
|
Runtime | Node.js (ESM) |
Contributing
We welcome contributions! Whether it's a new export format, a bug fix, or documentation improvement — please consider making a pull request.
Fork the repository
Create a feature branch
Submit a pull request
License
Available Tools
33 toolsanalyze_documentARead-onlyIdempotent
Analyze a Markdown document and return comprehensive statistics. Returns JSON with: line/word/character/paragraph/sentence counts, heading/code block/table/link/image/list/blockquote counts, and estimated reading time in minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The Markdown text to analyze. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Strong supplemental context: while annotations confirm read-only/idempotent safety, the description details the specific JSON structure returned (listing 13+ distinct metrics like heading counts, code block counts, reading time). This compensates for the missing output schema.
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?
Optimal structure: Two sentences, front-loaded with action ('Analyze...'), followed by output specification. Zero redundancy—every word earns its place.
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?
Complete for the tool's complexity: despite lacking an output schema, the description enumerates return values in detail. With rich annotations (4 boolean hints) and 100% parameter coverage, this adequately equips the agent.
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 coverage is 100% ('markdown' parameter fully described), so the description does not need to add parameter semantics. Baseline 3 is appropriate as the schema carries the semantic burden.
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?
Excellent specificity: 'Analyze' (verb) + 'Markdown document' (resource) + 'return comprehensive statistics' (output). Clearly distinguishes from conversion siblings (convert_to_*) and extraction siblings (extract_*) by focusing on statistical analysis rather than format transformation or content isolation.
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?
Implied usage is clear (analysis vs conversion), but lacks explicit guidance on when to choose this over extraction tools like extract_code_blocks or extract_links, or generator tools like generate_toc which overlap conceptually with document analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_asciidocAIdempotent
Convert Markdown to AsciiDoc format. Transforms headers to = syntax, code blocks to ---- delimited blocks, links to url[text] syntax, and images to image::url[alt] directives.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover idempotency and safety (readOnlyHint=false, destructiveHint=false). The description adds valuable transformation semantics: specific mappings for headers, code blocks, links, and images. It does not explicitly mention file I/O behavior, though output_path schema covers this.
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?
Two sentences total. First establishes purpose; second provides concrete syntax examples. Zero filler content. Every word earns its place by conveying AsciiDoc-specific formatting rules.
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?
Given the tool's straightforward conversion purpose, rich annotations, and comprehensive schema, the description is complete. It explains the transformation semantics adequately without needing to elaborate on return values (handled by schema).
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 coverage is 100% with detailed parameter descriptions (markdown supports GFM/KaTeX, output_path creates parent directories). Description focuses on transformation logic rather than repeating parameter specs, which is appropriate given the rich schema documentation.
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?
Description opens with specific verb 'Convert' and target format 'AsciiDoc', immediately clarifying scope. The detailed syntax transformations (= headers, ---- code blocks) distinguish it from siblings like convert_to_html or convert_to_rst that would produce different markup.
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?
No explicit 'when to use' or comparison with alternatives is stated. However, the specific AsciiDoc syntax examples (image::url, url[text]) implicitly signal this tool's domain versus other conversion siblings, providing contextual hints for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_bbcodeAIdempotent
Convert Markdown to BBCode format. Transforms formatting to [b], [i], [s], [code], [url], [img] tags. Used for forum posts on phpBB, vBulletin, and similar platforms.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish safety profile (idempotent, non-destructive). The description adds valuable behavioral context by enumerating the specific BBCode tags supported and target forum platforms, which is critical information not present in structured fields.
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?
Three tightly constructed sentences with zero waste: first establishes conversion direction, second details supported formatting tags, third provides platform context. Front-loaded with the essential action.
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?
Given 100% schema coverage and comprehensive annotations, the description adequately covers the conversion domain. Mention of specific BBCode tags and forum platforms provides sufficient context. Could benefit from explicit mention of dual return modes (string vs JSON summary), though the schema handles this.
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 coverage is 100%, with comprehensive parameter descriptions already provided in the schema (markdown content details, output_path file behavior with return value semantics). Baseline 3 is appropriate as the description focuses on conversion behavior rather than repeating schema details.
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?
The description states a specific verb (Convert) and resources (Markdown to BBCode), and distinguishes from siblings by specifying the target format (BBCode) and supported tags ([b], [i], etc.), clearly positioning it among the many conversion tools available.
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?
Provides clear contextual guidance by specifying the target use case ('forum posts on phpBB, vBulletin, and similar platforms'), which helps distinguish it from other converters like convert_to_html or convert_to_docx. Lacks explicit 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_confluenceAIdempotent
Convert Markdown to Confluence wiki markup. Similar to JIRA but includes Confluence-specific {info}, {note} panels and {code:language=x} syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true and non-destructive behavior. Description adds value by specifying exact output format quirks ({info}, {note}, {code} macros) that pure schema doesn't cover. Does not address file I/O side effects (covered in schema) or error behaviors.
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?
Two sentences, zero waste. First_sentence establishes operation, second_sentence provides critical sibling differentiation and output format specifics. Every word earns its place.
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?
Adequate for a conversion utility with simple I/O. Covers core functionality and format-specific features. Lacks error handling documentation or edge case notes (e.g., unsupported Markdown extensions), but acceptable given idempotentHint and full schema coverage.
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 coverage is 100% with detailed descriptions for both 'markdown' (GFM support details) and 'output_path' (file vs return behavior). Description provides no additional parameter syntax guidance, meeting baseline expectation when schema is comprehensive.
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?
Clear specific verb 'Convert' + resource 'Markdown/Confluence wiki markup'. Explicitly distinguishes from sibling 'convert_to_jira' by contrasting Confluence-specific panels vs JIRA syntax, preventing selection errors.
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?
Implicitly guides selection by stating 'Similar to JIRA but includes Confluence-specific...' which signals the differentiation point. However, lacks explicit 'use when targeting Confluence vs JIRA' directive or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_csvAIdempotent
Extract tables from Markdown and convert them to CSV format. Parses GFM pipe-tables from the input and outputs comma-separated values. If the Markdown contains multiple tables, they are concatenated with a blank line separator. Non-table content is ignored. If the Markdown contains no tables, returns an empty string. Side effects: when output_path is provided, writes the CSV to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns the CSV text directly as a string. Returns: CSV text string (if no output_path), or JSON { success, file_path, file_size_bytes, format } (if output_path set). Use this for lightweight tabular export or when downstream tools expect CSV. Prefer convert_to_xlsx for Excel-compatible spreadsheets with multiple sheets, or convert_to_json for structured data.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which only declare idempotency/safety), the description details critical behavioral specifics: dual return modes (string vs JSON object), file system side effects (creates parent directories, overwrites existing files), and content handling (multiple tables concatenated with blank lines, non-table content ignored, no-tables returns empty string).
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?
Six sentences covering distinct aspects: conversion logic, content handling, side effects, return values, and usage recommendations. Every sentence provides unique information not redundant with the schema or annotations. Slightly dense but appropriate for the complexity of dual-output behavior.
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?
Without an output schema, the description fully compensates by detailing return structures (CSV string vs JSON object with specific fields), edge case behaviors (empty input handling), and side effect warnings necessary for safe invocation.
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?
With 100% schema coverage, baseline is 3. The description adds value by connecting output_path to behavioral outcomes (overwriting existing files) and explaining the conditional return type logic tied to this parameter, though it doesn't significantly expand on the markdown parameter semantics.
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?
The description opens with a specific verb-resource combination ('Extract tables from Markdown and convert them to CSV format') and explicitly distinguishes from siblings by naming 'convert_to_xlsx' and 'convert_to_json' as alternatives for different use cases.
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 states when to use ('lightweight tabular export or when downstream tools expect CSV') and provides clear alternatives ('Prefer convert_to_xlsx for Excel-compatible spreadsheets... or convert_to_json for structured data'), guiding the agent away from incorrect selections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_discordAIdempotent
Convert Markdown to Discord-compatible format. Transforms headers to styled bold/underline text that renders correctly in Discord messages. Code blocks and basic formatting are preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotent/non-destructive, but description adds valuable behavioral specifics: headers become bold/underline, code blocks are preserved, and basic formatting is maintained. This disclosure of specific transformation logic is exactly the context annotations cannot provide. No contradictions with annotations.
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?
Three sentences with zero waste: purpose statement, specific transformation detail, preservation guarantee. Every sentence earns its place. Well front-loaded with the core action in sentence one.
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?
Appropriate for a format-conversion tool with 2 parameters and no output schema. Covers input expectations and transformation behavior. Missing only documentation of the return value duality (file vs. string) which is a significant behavioral gap given the output_path parameter exists.
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?
With 100% schema coverage, baseline is 3. Description implicitly reinforces the 'markdown' parameter by mentioning GFM features (tables, headers) but does not explicitly walk through parameters or add syntax guidance beyond the schema. Notably omits mention of the output_path parameter's dual-behavior (file write vs. string return).
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?
Clearly states the verb (Convert), source (Markdown), and target format (Discord-compatible). The mention of 'headers to styled bold/underline' specifically signals Discord's limitations, distinguishing it from siblings like convert_to_html or convert_to_slack. Could be 5 if it explicitly contrasted with the many other conversion tools available.
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?
Provides implicit usage guidance by specifying 'renders correctly in Discord messages,' which signals when to select this over other converters. However, lacks explicit when-not-to-use guidance or sibling comparisons despite having 20+ conversion alternatives. Does not clarify when to use output_path vs. receiving direct string output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_docxAIdempotent
Convert Markdown to a Microsoft Word DOCX file. Produces a binary .docx document with styled headings, bold/italic text, numbered and bulleted lists, and code formatting. This is a binary format — output_path should almost always be provided. Side effects: when output_path is provided, writes the DOCX binary to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns a JSON object with { format: 'docx', file_size_bytes, hint, base64_preview } — the hint will tell you to re-call with output_path to save the file. Returns: JSON write-confirmation (if output_path set), or JSON binary-guidance object (if omitted). Use this for Word-compatible documents. Prefer convert_to_rtf for legacy word processors, convert_to_pdf for read-only distribution, or convert_to_html for web.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.docx') where the binary file will be saved. Parent directories are created automatically. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned. If omitted, a JSON object with { format, file_size_bytes, hint, base64_preview } is returned — the hint will instruct you to call the tool again with output_path to save the file. Binary formats (DOCX) should almost always specify output_path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Excellent disclosure beyond annotations: details side effects (writes binary to disk, creates directories, overwrites files), explains dual return modes (JSON confirmation vs JSON binary-guidance with base64_preview), and clarifies the re-call pattern when output_path is omitted. Complements annotations (readOnly=false, destructive=false) with specific I/O behavior.
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?
Well-structured progression: purpose → output characteristics → side effects → return values → usage comparisons. Each sentence provides distinct value. Minor verbosity in return value explanation could be tighter, but front-loading is strong and scannable.
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?
Despite no output schema, comprehensively documents both return structures (write-confirmation and binary-guidance objects). Adequately covers binary conversion complexity, file system interactions, and sibling tool landscape. No gaps given the tool's scope.
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 has 100% coverage with detailed parameter descriptions. Description adds critical usage context beyond schema: emphasizes that output_path is nearly mandatory for binary formats and explains the functional difference between providing vs omitting the parameter. Slight deduction for not adding semantic nuances to the 'markdown' parameter beyond schema definition.
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?
Clear specific verb ('Convert') with source and target resources (Markdown to DOCX). Explicitly distinguishes from 21 sibling conversion tools by specifying 'Word-compatible documents' and contrasting with RTF, PDF, and HTML alternatives.
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?
Provides explicit guidance on when to use ('Word-compatible documents') and clear alternatives ('Prefer convert_to_rtf for legacy... convert_to_pdf for read-only... convert_to_html for web'). Also specifies critical behavioral guidance that 'output_path should almost always be provided' for binary formats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_email_htmlAIdempotent
Convert Markdown to email-optimized HTML with all styles inlined. Produces HTML compatible with Outlook, Gmail, Apple Mail, and other email clients. No external CSS dependencies. Wraps content in a responsive email table layout.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotent/non-destructive, but description adds crucial output characteristics: 'all styles inlined', 'responsive email table layout', and specific client compatibility. Explains the 'email-safe' HTML generation behavior that annotations cannot capture.
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, zero waste. Front-loaded with core function (conversion + inlining). Each subsequent sentence adds distinct value: client compatibility, CSS constraints, layout structure. No filler or redundant restatements.
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?
Strong coverage for a conversion tool. Despite no output schema, description characterizes the HTML output sufficiently (inlined styles, table layout, client compatibility). Schema handles parameter mechanics. Minor gap: doesn't mention the dual return modes (string vs file summary), though schema covers this.
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 coverage is 100%, providing excellent parameter documentation (markdown format support, output_path behavior). Description references no parameters specifically, relying entirely on schema—a valid pattern when schema coverage is comprehensive. Baseline score applicable.
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?
Excellent specificity: verb 'Convert' + source resource 'Markdown' + target 'email-optimized HTML'. Critically distinguishes from sibling 'convert_to_html' via 'email-optimized' qualifier and specific compatibility claims (Outlook, Gmail, Apple Mail).
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?
Clear contextual signals for when to use: 'email-optimized', 'compatible with Outlook, Gmail...', and 'no external CSS dependencies' clearly indicate this is for email delivery vs web publishing. Lacks explicit sibling comparison (e.g., 'use convert_to_html for web pages'), but usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_htmlAIdempotent
Convert Markdown to a complete, styled HTML document. Renders GFM (tables, task lists, strikethrough) and KaTeX math into semantic HTML with an embedded stylesheet for clean presentation. The output is a full document with (charset, KaTeX CSS CDN link, inline styles) and . Side effects: when output_path is provided, writes the HTML file to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns the full HTML string directly. Returns: HTML document string (if no output_path), or JSON { success, file_path, file_size_bytes, format } (if output_path set). Use this when you need a file saved to disk or when you need the full document. Prefer generate_html if you only need the HTML string returned directly (no file I/O) and want inline styles without a CDN link. Prefer convert_to_pdf for print-ready output, or convert_to_image for a visual snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readOnly and idempotent behavior; the description adds critical side effect disclosure (file writes to disk, directory creation, overwriting behavior) and documents the dual return format (string vs JSON object) depending on output_path. Does not mention auth needs or rate limits, but covers the primary behavioral traits.
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?
Every sentence earns its place: opens with core function, details features, explains document structure, discloses side effects, specifies return values, and closes with usage guidance. No redundancy despite covering multiple output modes and sibling comparisons.
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?
Despite no output schema, the description fully specifies return behaviors (HTML string vs JSON structure), explains the complete document structure produced (<!DOCTYPE html> with CDN links), and contrasts with relevant siblings. Complete for a dual-mode conversion tool.
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?
With 100% schema coverage, baseline is 3. The description adds semantic value by explaining the implications of providing vs omitting output_path (side effects vs direct return) and elaborating on markdown capabilities (GFM tables, task lists, strikethrough) beyond the schema's basic description.
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?
The description clearly states the tool converts Markdown to a complete, styled HTML document, specifying support for GFM and KaTeX. It distinguishes from sibling `generate_html` by emphasizing this produces a full document with file I/O capabilities, while implying `generate_html` is for string-only output.
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?
Excellent guidance: explicitly states 'Use this when you need a file saved to disk' and provides named alternatives with conditions ('Prefer generate_html if you only need the HTML string...', 'Prefer convert_to_pdf for print-ready output'). This creates a clear decision tree against siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_imageAIdempotent
Convert Markdown to a PNG image. Renders the Markdown as styled HTML (GFM tables, KaTeX math) and takes a full-page screenshot via a headless Chromium browser (Puppeteer). Requires a locally installed Chrome, Edge, or Chromium — set PUPPETEER_EXECUTABLE_PATH env var to override auto-detection. This is a binary format — output_path should almost always be provided. Side effects: launches a transient headless browser process (no persistent state; may fetch KaTeX CDN stylesheet). When output_path is provided, writes the PNG to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns JSON { format: 'png', file_size_bytes, hint, base64_preview }. Returns: JSON write-confirmation (if output_path set), or JSON binary-guidance object (if omitted). Use this when you need a visual snapshot of the rendered Markdown (e.g. for embedding in chat, previews, social cards). Prefer convert_to_pdf for paginated print output, or convert_to_html for interactive web content.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.png') where the binary file will be saved. Parent directories are created automatically. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned. If omitted, a JSON object with { format, file_size_bytes, hint, base64_preview } is returned — the hint will instruct you to call the tool again with output_path to save the file. Binary formats (PNG) should almost always specify output_path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Substantially augments annotations by detailing: external dependency requirements (Puppeteer, Chrome executable), runtime side effects (transient browser process, CDN fetching), file system behavior (creates parent directories, overwrites existing), and dual return modes (disk write vs JSON binary-guidance). No contradictions with annotations.
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?
Information-dense and front-loaded (purpose first). Length is justified by complexity (browser dependencies, binary output, two return paths). Minor deduction for slight verbosity in implementation details, but structure is logical: purpose → mechanism → prerequisites → side effects → returns → usage guidance.
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?
Excellent coverage given high complexity and missing output schema. Compensates for no output_schema by exhaustively documenting both return variants (JSON confirmation vs base64_preview object), external system requirements, and behavioral side effects. Sibling differentiation is thorough among 24+ conversion tools.
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?
With 100% schema coverage, baseline is 3. Elevated to 4 by adding critical usage context: 'binary format — output_path should almost always be provided' and explaining the conditional return behavior based on output_path presence, neither of which is obvious from schema alone.
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?
Opens with specific verb+resource ('Convert Markdown to a PNG image') and explicitly distinguishes from siblings ('Prefer convert_to_pdf... or convert_to_html'). Clearly defines scope (GFM tables, KaTeX math) and mechanism (headless Chromium).
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?
Provides explicit when-to-use ('when you need a visual snapshot... for embedding in chat, previews, social cards') and named alternatives ('Prefer convert_to_pdf for paginated print output'). Also specifies prerequisites (locally installed Chrome/Edge/Chromium).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_jiraAIdempotent
Convert Markdown to JIRA wiki markup. Transforms headers to h1./h2., bold to single asterisks, code blocks to {code} blocks, links to [text|url], and lists to JIRA * and # syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent=true and readOnly=false; the description adds valuable behavioral context that the tool conditionally writes files to disk when output_path is provided, versus returning content directly, and details the exact transformation logic for content conversion.
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?
Two well-structured sentences front-load the core purpose first, followed by specific syntax transformations. Efficient length with minimal redundancy, though the second sentence is dense with multiple examples.
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 2-parameter conversion utility with good annotations and no output schema, the description adequately covers transformation behavior, dual output modes, and input expectations. Could benefit from mentioning error handling or character encoding.
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?
With 100% schema coverage, the baseline is met, but the description adds meaningful context about supported Markdown syntax (tables, task lists) that clarifies valid input for the 'markdown' parameter beyond the schema's technical description.
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?
Description clearly states 'Convert Markdown to JIRA wiki markup' with specific verb and resource. The detailed syntax examples (h1./h2., {code} blocks, [text|url] links) explicitly distinguish this from sibling converters like convert_to_confluence or convert_to_bbcode.
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?
The specificity of 'JIRA wiki markup' provides implicit guidance for when to use this tool versus the 20+ other conversion siblings, but lacks explicit when-to-use guidance or comparisons like 'use when targeting Atlassian JIRA vs other wiki formats'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_jsonAIdempotent
Convert Markdown to a structured JSON representation. Parses the document into a JSON object with the document title as the root key, containing arrays of section objects with headings, paragraphs, lists, code blocks, and tables. Useful for programmatic analysis or feeding structured content into other systems. Side effects: when output_path is provided, writes the JSON to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns the JSON string directly. Returns: JSON string (if no output_path), or JSON { success, file_path, file_size_bytes, format } (if output_path set). Use this when you need a machine-readable AST-like representation of the Markdown content. Prefer convert_to_xml for XML-based interchange, or convert_to_csv/convert_to_xlsx for tabular data extraction.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| title | No | Optional. A document title string. Used as the root element name or document metadata title in the output. Defaults to 'document' if omitted. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnly=false and idempotent=true; the description adds valuable behavioral context including side effects (writes to disk, creates parent directories, overwrites files) and return value variations (JSON string vs summary object based on output_path). Could mention error handling or permissions for a 5.
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?
Logically structured with zero waste: purpose statement, structural details, use case, side effects, return values, when-to-use guidance, and alternatives. Each sentence earns its place despite the length, with clear transitions between concepts.
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?
Excellent completeness for a conversion tool with no output schema: fully documents return value structures for both paths (direct return vs file write), explains disk side effects, and differentiates from extensive sibling tool set. No gaps given the complexity.
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 coverage is 100% with detailed descriptions for all 3 parameters (markdown, title, output_path). The description references parameters behaviorally ('when output_path is provided') but does not add semantic constraints, formats, or validation rules beyond what the schema already documents. Baseline 3 appropriate given high schema coverage.
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?
The description explicitly states 'Convert Markdown to a structured JSON representation' with specific details about the output structure (document title as root key, arrays of section objects containing headings, paragraphs, lists, etc.). It clearly distinguishes this from siblings by specifying JSON/AST-like output versus tabular or XML formats.
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?
Provides explicit when-to-use guidance ('Use this when you need a machine-readable AST-like representation') and names specific alternatives ('Prefer convert_to_xml for XML-based interchange, or convert_to_csv/convert_to_xlsx for tabular data extraction'), giving clear guidance among the 20+ conversion siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_latexAIdempotent
Convert Markdown to LaTeX source code. Produces a LaTeX document fragment with \section, \textbf, \textit, \begin{itemize}/\begin{enumerate} list environments, verbatim code blocks, and table environments. KaTeX math expressions in the Markdown are passed through as native LaTeX math. Side effects: when output_path is provided, writes the .tex file to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns the LaTeX source as a string. Returns: LaTeX source string (if no output_path), or JSON { success, file_path, file_size_bytes, format } (if output_path set). Use this when you need to embed content in a LaTeX workflow or compile to PDF via pdflatex/xelatex externally. For direct PDF output without a LaTeX toolchain, use convert_to_pdf instead.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and readOnlyHint=false, but the description adds critical behavioral context: it discloses file system side effects ('writes the .tex file to disk'), directory creation behavior ('creates parent directories'), and overwrite behavior ('overwrites existing files'). It also explains the dual return mode (string vs JSON object) which annotations do not cover.
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?
Six sentences covering purpose, output format specifics, side effects, return values, and usage guidelines. Every sentence provides distinct information not replicated elsewhere. Slightly dense but necessary given the tool's conditional behavior (file write vs. string return).
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?
Comprehensive coverage for a conversion tool: input format details (GFM, KaTeX), output structure (specific LaTeX environments like itemize, verbatim), side effects (file I/O), return value schemas for both branches, and sibling alternatives. No output schema exists, and the description adequately compensates by documenting both possible return structures.
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?
While schema coverage is 100% (baseline 3), the description adds significant behavioral meaning to output_path by explaining that its presence triggers file write side effects and changes the return type from string to JSON object. This contextualizes the parameter beyond the schema's functional definition.
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?
The description opens with a specific verb and resource ('Convert Markdown to LaTeX source code') and immediately distinguishes from the sibling tool convert_to_pdf by stating 'For direct PDF output... use convert_to_pdf instead.' It clearly scopes the conversion domain (Markdown→LaTeX) amidst a large family of conversion tools.
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 states when to use ('when you need to embed content in a LaTeX workflow or compile to PDF via pdflatex/xelatex externally') and provides a clear alternative for the opposite case ('For direct PDF output without a LaTeX toolchain, use convert_to_pdf instead'). This directly addresses sibling selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_mdAIdempotent
Export Markdown content, optionally harmonizing its formatting first. When harmonize=false (default), returns the input Markdown unchanged. When harmonize=true, applies the same normalization as harmonize_markdown (ATX-style headers, '-' list markers, fenced code blocks, consistent indentation) before returning. Side effects: when output_path is provided, writes the Markdown to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns the Markdown string directly. Returns: Markdown string (if no output_path), or JSON { success, file_path, file_size_bytes, format } (if output_path set). Use this when you want to save Markdown to a file (with or without cleanup). Prefer harmonize_markdown if you only want to normalize formatting without saving to disk. Use the convert_to_* family for other output formats.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| harmonize | No | Optional. When true, normalizes Markdown syntax (ATX headers, '-' list markers, fenced code blocks, consistent indentation) before returning or saving. When false or omitted, the Markdown is passed through unchanged. Defaults to false. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate write capability (readOnlyHint=false) and idempotency, but description adds crucial behavioral details: file system side effects (creates parent directories, overwrites), dual return modes (string vs JSON), and specific normalization rules applied (ATX headers, fenced code blocks).
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?
Well-structured with clear information hierarchy: core purpose → parameter behavior → side effects → return values → usage guidance. Every sentence earns its place; no redundancy despite length.
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?
Excellent completeness given no output schema exists. Describes both return formats (string vs JSON structure), covers all parameters including optional behaviors, and documents side effects. Appropriate for a tool with dual output modes and file system interactions.
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 has 100% coverage establishing baseline of 3. Description adds valuable semantic context: relationship between 'harmonize' parameter and the standalone 'harmonize_markdown' tool, and the side-effect nature of 'output_path' (disk write vs direct return).
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?
Specific verb ('Export') and resource ('Markdown content') with clear scope. Explicitly distinguishes from sibling tools by referencing 'harmonize_markdown' and 'convert_to_* family', clarifying when to use each.
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?
Provides explicit when-to-use ('when you want to save Markdown to a file'), when-not-to-use ('Prefer harmonize_markdown if you only want to normalize formatting without saving'), and clear alternatives (sibling tools named specifically).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_mediawikiAIdempotent
Convert Markdown to MediaWiki markup. Transforms headers to == syntax, bold to triple quotes, code to tags, and tables to {| wikitable format.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true, readOnlyHint=false, and destructiveHint=false. The description adds valuable transformation context (specific syntax mappings) that annotations don't cover, but omits handling of edge cases like invalid Markdown or whether the conversion preserves YAML frontmatter. No contradictions with annotations.
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?
Two efficiently structured sentences with zero waste. The first sentence establishes purpose; the second provides concrete transformation examples that immediately clarify scope. Every word earns its place.
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?
Given the simple 2-parameter input schema with complete descriptions and available annotations, the description adequately covers the conversion logic without needing to document return values (handled in output_path schema description). Minor gap: doesn't mention error handling for malformed input.
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?
With 100% schema coverage, the baseline is 3. The description adds semantic value by specifying which Markdown features are handled (tables, headers, bold, code), implicitly documenting the 'markdown' parameter's expected content type beyond the schema's technical description. It doesn't detail the output_path behavior, but the schema covers that comprehensively.
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?
The description clearly states 'Convert Markdown to MediaWiki markup' with specific verb and resource. The transformation examples (== syntax, triple quotes, <syntaxhighlight> tags, {| wikitable) specifically distinguish this from sibling conversion tools like convert_to_html or convert_to_latex by identifying the exact target format syntax.
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?
The description implies usage through the MediaWiki-specific syntax examples, making it clear this produces MediaWiki markup versus other formats. However, it lacks explicit guidance on when to choose this over the 20+ sibling conversion tools (e.g., no 'use this for MediaWiki wikis, use convert_to_html for web pages' comparison).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_orgmodeAIdempotent
Convert Markdown to Emacs Org Mode format. Transforms headers to * syntax, bold to text, code blocks to #+BEGIN_SRC/#+END_SRC, and links to [[url][text]] syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent=true and destructive=false. The description adds valuable behavioral context beyond these flags by detailing specific syntax transformations (headers to *, bold to *text*, code blocks to #+BEGIN_SRC), helping the agent understand the conversion logic and output structure.
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?
Two sentences efficiently convey the tool's purpose and specific transformation rules. Every clause serves a function—first establishing the conversion direction, second detailing syntax mappings—with no redundant or filler text.
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?
Given the 100% schema coverage and presence of annotations, the description provides sufficient context by explaining what gets converted and how. The return behavior is adequately covered in the output_path schema description, making this complete enough for tool selection.
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?
With 100% schema coverage, the structured documentation already comprehensively describes both parameters. The description does not add parameter-specific guidance (e.g., format expectations for the markdown string), warranting the baseline score for high-coverage schemas.
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?
The description clearly states the specific action ('Convert') and resources ('Markdown to Emacs Org Mode format'), distinguishing it from 20+ sibling conversion tools by explicitly naming the target format and providing syntax-specific details.
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?
While the description clearly identifies the tool's purpose (converting to Org Mode), it lacks explicit guidance on when to select this specific converter versus siblings like convert_to_asciidoc or convert_to_rst. Usage is implied by the format name but not stated as 'use this when...'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_pdfAIdempotent
Convert Markdown to a PDF document. Renders the Markdown as styled HTML (GFM tables, KaTeX math) and then prints it to PDF via a headless Chromium browser (Puppeteer). Requires a locally installed Chrome, Edge, or Chromium — set PUPPETEER_EXECUTABLE_PATH env var to override auto-detection. This is a binary format — output_path should almost always be provided. Side effects: launches a transient headless browser process for rendering (no network requests are made for the conversion itself, though the HTML references a CDN KaTeX stylesheet which may be fetched). When output_path is provided, writes the PDF to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns JSON { format: 'pdf', file_size_bytes, hint, base64_preview }. Returns: JSON write-confirmation (if output_path set), or JSON binary-guidance object (if omitted). Use this for high-fidelity, print-ready document output. Prefer convert_to_html for web-viewable output, convert_to_docx for editable documents, or convert_to_latex for LaTeX toolchains.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.pdf') where the binary file will be saved. Parent directories are created automatically. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned. If omitted, a JSON object with { format, file_size_bytes, hint, base64_preview } is returned — the hint will instruct you to call the tool again with output_path to save the file. Binary formats (PDF) should almost always specify output_path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Rich disclosure beyond annotations: requires local Chrome/Chromium (with env var override), launches transient headless browser, CDN fetching behavior, directory creation, file overwrite behavior, and precise dual return format behavior (disk write vs JSON binary-guidance).
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?
Information-dense but well-structured: purpose→technical method→system requirements→side effects→file handling→return formats→sibling preferences. Each sentence earns its place given the complexity of external dependencies and dual output modes.
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?
Excellent coverage for a complex tool with external dependencies (Chromium), binary output, conditional return schemas, and side effects. Without output schema, description fully documents both return paths and operational prerequisites.
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?
With 100% schema coverage, description adds crucial usage guidance: emphasizes output_path is almost mandatory for binary formats, explains the divergent return behaviors (confirmation JSON vs base64_preview JSON), and clarifies parent directory auto-creation semantics.
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?
Description provides specific verb ('Convert'), resource ('Markdown' to 'PDF'), rendering pipeline details (GFM tables, KaTeX math, Puppeteer), and explicitly distinguishes from siblings ('Prefer convert_to_html... convert_to_docx... convert_to_latex').
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 states when to use ('high-fidelity, print-ready document output'), when to prefer alternatives (web-viewable→HTML, editable→DOCX, LaTeX toolchains), and critical usage constraint ('output_path should almost always be provided' for binary formats).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_rstAIdempotent
Convert Markdown to reStructuredText (RST) format. Transforms headers to underlined text, code blocks to .. code-block:: directives, and links to RST reference syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish idempotentHint=true and destructiveHint=false. The description adds valuable transformation details (header underlining, code-block conversion, link syntax) that explain the conversion logic. It could improve by clarifying file overwrite behavior when output_path points to an existing file.
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?
Two tight sentences with zero waste. The first establishes purpose; the second provides concrete transformation examples that earn their place by distinguishing RST output from other markup formats. Front-loaded and appropriately sized.
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 conversion tool with 100% schema coverage and existing annotations, the description is complete. It covers input format expectations and transformation specifics. Could mention error handling for malformed Markdown, but not required given the tool's straightforward scope.
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?
With 100% schema coverage, the baseline is 3. The description adds semantic value by explaining what happens to the markdown content (specific transformation rules) and implicitly clarifying the dual output behavior (string return vs file write) mentioned in the schema, helping users understand the markdown parameter's processing.
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?
The description states the specific action (Convert) and resource (Markdown to RST) clearly. It distinguishes from siblings by detailing RST-specific transformations (underlined headers, code-block directives, reference syntax), making it clear this produces Sphinx-compatible RST rather than other formats.
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?
While the RST-specific syntax details imply when to use this tool (when you need reStructuredText output), there is no explicit guidance comparing it to sibling converters like convert_to_html or convert_to_latex, nor warnings about when to prefer alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_rtfAIdempotent
Convert Markdown to Rich Text Format (RTF). Produces an RTF document string preserving basic formatting: bold, italic, headers (as styled paragraphs), lists, and code blocks. Side effects: when output_path is provided, writes the RTF file to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns the raw RTF markup as a string. Returns: RTF markup string (if no output_path), or JSON { success, file_path, file_size_bytes, format } (if output_path set). Use this when the target application requires RTF (e.g. legacy word processors, email clients). Prefer convert_to_docx for modern Word documents, or convert_to_html for web display.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Substantially exceeds annotations by detailing: (1) transformation behavior (preserves specific formatting types), (2) filesystem side effects (creates parent directories, overwrites existing files), and (3) bimodal return behavior (string vs JSON structure). Acts as complete behavioral spec.
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?
Six distinct sentences each serving unique purposes: conversion scope, side effects, conditional return #1, conditional return #2, usage guidance, alternatives. No redundancy; information density is high with no filler.
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 conversion utility with rich annotations and no output schema, description achieves completeness by documenting return structures, error-adjacent behaviors (directory creation, overwrites), target applications, and comparative tool selection. No gaps remain for agent invocation.
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?
While schema has 100% coverage, description adds critical semantic context linking output_path presence/absence to distinct return types (RTF string vs JSON object) and side effects, clarifying the parameter's role as a mode switch beyond simple file path semantics.
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?
Description opens with specific verb-resource pair ('Convert Markdown to Rich Text Format') and immediately distinguishes scope with formatting details (bold, italic, headers, lists, code blocks). Naming convention and sibling differentiation are clear from the explicit RTF focus.
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?
Provides explicit when-to-use clause targeting 'legacy word processors, email clients' and names specific sibling alternatives ('Prefer convert_to_docx for modern Word documents, or convert_to_html for web display'), giving the agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_slackAIdempotent
Convert Markdown to Slack mrkdwn format. Transforms bold (**) to single asterisks, italic to underscores, links to Slack <url|text> syntax, and headers to bold text. Use this when pasting formatted content into Slack messages.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true and readOnlyHint=false. Description adds valuable transformation specifics beyond annotations: exact syntax conversions (**→*, _→_, headers→bold, links→<url|text>), helping agents predict output structure. No contradictions with annotations.
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?
Two efficiently structured sentences. First sentence establishes purpose and transformation rules; second provides usage context. No redundancy, front-loaded with essential information despite the packed specifics of formatting transformations.
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?
Given 100% schema coverage and clear annotations, description adequately covers tool purpose. Absence of output schema noted, but schema's output_path description handles return value documentation. Missing only minor details like maximum input size or complex edge-case handling for completeness.
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 coverage is 100%, establishing baseline 3. Description references 'Markdown' input implicitly but does not elaborate on parameter semantics beyond schema descriptions. The output_path behavior is well-documented in schema property descriptions, requiring no additional description text.
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?
Description states specific action ('Convert Markdown to Slack mrkdwn format') and enumerates exact transformations (bold→asterisks, italic→underscores, etc.). Clearly distinguishes from sibling converters like convert_to_html or convert_to_bbcode by specifying Slack-specific mrkdwn syntax.
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 states when to use: 'Use this when pasting formatted content into Slack messages.' Lacks explicit 'when not to use' or named alternatives (e.g., 'use convert_to_html for web instead'), but provides clear contextual trigger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_textileAIdempotent
Convert Markdown to Textile markup format. Used by Redmine, older versions of Basecamp, and some CMS platforms.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true and destructiveHint=false. Description adds platform compatibility context but does not disclose behavioral traits like 'creates parent directories automatically' (described in schema) or whether conversions are lossy.
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?
Two sentences, zero waste. First sentence establishes core function; second provides platform context. Every element earns its place.
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?
Appropriate for a conversion utility with 2 parameters and high schema coverage. Output behavior is well-documented in schema (string vs file return). Platform mention adds necessary domain context.
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 coverage is 100% with detailed descriptions for both parameters. Description does not add parameter semantics beyond schema, so baseline 3 applies per scoring rules for high-coverage schemas.
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?
Specific verb 'Convert' with clear source/target resources (Markdown to Textile). Distinguishes from siblings by naming the specific markup format (Textile vs HTML, AsciiDoc, etc. in the convert_to_* family).
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?
Provides contextual guidance by listing specific platforms (Redmine, Basecamp, CMS) that consume Textile, implicitly signaling when to use this tool. Lacks explicit 'when not to use' or comparison with alternatives like convert_to_html.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_txtAIdempotent
Convert Markdown to plain text by stripping all formatting — removes headers, bold/italic markers, links, images, code fences, and HTML tags. The result is a human-readable plain-text string with no markup. This is a destructive conversion: formatting information is permanently lost. Side effects: when output_path is provided, writes the plain text to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns the plain text string directly. Returns: plain text string (if no output_path), or JSON { success, file_path, file_size_bytes, format } (if output_path set). Use this instead of convert_to_md when you need formatting-free content (e.g. for indexing, search, or clipboard). Use convert_to_html or convert_to_pdf if you need to preserve the document's visual structure.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which only show idempotentHint), the description discloses critical behavioral traits: the conversion is 'destructive' (formatting lost), side effects include file system writes with directory creation and file overwriting, and return values differ based on parameter presence (string vs JSON).
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?
Six sentences cover: operation, result characteristics, destruction warning, side effects, return values, and usage guidelines. Every sentence earns its place, though slightly verbose. Well front-loaded with the core operation stated immediately.
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?
Given the tool's complexity (conditional side effects, dual return types, optional file I/O) and rich sibling ecosystem, the description is complete. It covers behavior, side effects, return formats, and sibling relationships without needing an output schema.
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?
With 100% schema coverage, baseline is 3. The description adds significant value by explaining the dual-mode behavior of output_path (disk write vs direct return) and elaborating that markdown supports 'GitHub-Flavored Markdown and KaTeX', which aids agent decision-making.
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?
The description uses specific verbs ('Convert'), identifies the resource ('Markdown to plain text'), and clearly distinguishes from siblings by explicitly naming alternatives ('Use this instead of convert_to_md', 'Use convert_to_html or convert_to_pdf').
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 states when to use ('when you need formatting-free content') versus alternatives, provides concrete use cases ('for indexing, search, or clipboard'), and names specific sibling tools to use instead for different outcomes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_xlsxAIdempotent
Convert Markdown tables to a Microsoft Excel XLSX spreadsheet. Parses GFM pipe-tables from the input and creates an Excel workbook. Each table becomes a sheet in the workbook. Non-table content is ignored. If the Markdown contains no tables, produces an empty workbook. This is a binary format — output_path should almost always be provided. Side effects: when output_path is provided, writes the XLSX binary to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns JSON { format: 'xlsx', file_size_bytes, hint, base64_preview }. Returns: JSON write-confirmation (if output_path set), or JSON binary-guidance object (if omitted). Use this when you need a full Excel file with formatting. Prefer convert_to_csv for lightweight plain-text tabular export, or convert_to_json for structured programmatic access.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.xlsx') where the binary file will be saved. Parent directories are created automatically. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned. If omitted, a JSON object with { format, file_size_bytes, hint, base64_preview } is returned — the hint will instruct you to call the tool again with output_path to save the file. Binary formats (XLSX) should almost always specify output_path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses critical side effects beyond annotations: file system mutations ('writes the XLSX binary to disk', 'creates parent directories, overwrites existing files'). Explains dual return modes (disk write vs JSON binary-guidance object) and edge case behavior ('If the Markdown contains no tables, produces an empty workbook'). Annotations confirm idempotency and non-destructive nature; description adds implementation details.
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?
Every sentence is load-bearing: purpose → parsing mechanics → edge cases → binary nature warning → side effects → return schema → sibling differentiation. No tautology or repetition of schema/annotation data. Information-dense structure guides agent through decision tree efficiently.
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?
Absence of output schema is fully compensated by detailed return value documentation covering both branches (output_path provided vs omitted). Binary format complexities, side effects, and sibling ecosystem context are comprehensively addressed for a conversion utility.
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 coverage is 100%, establishing baseline 3. Description adds critical operational semantics: warns that output_path 'should almost always be provided' for binary formats and details the two-stage workflow (preview then save) when omitted. Elevates understanding beyond raw schema definitions.
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?
Opens with specific verb-noun sequence ('Convert Markdown tables to... XLSX spreadsheet'), clearly identifies input resource (Markdown pipe-tables) and output format. Explicitly distinguishes from siblings convert_to_csv and convert_to_json by prescribing specific use cases ('lightweight plain-text' vs 'full Excel file with formatting').
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 states when to use ('when you need a full Excel file with formatting') and provides named alternatives with precise differentiators ('Prefer convert_to_csv for lightweight plain-text...or convert_to_json for structured programmatic access'). Also clarifies output_path as mandatory for binary workflows ('almost always be provided').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_to_xmlAIdempotent
Convert Markdown to an XML document. Parses the Markdown into a structured XML tree with a root element named after the title parameter, containing , , , , , and elements. Produces well-formed XML with an declaration. Side effects: when output_path is provided, writes the XML to disk (creates parent directories, overwrites existing files). When output_path is omitted, returns the XML string directly. Returns: XML string (if no output_path), or JSON { success, file_path, file_size_bytes, format } (if output_path set). Use this for XML-based data interchange or when downstream systems require XML input. Prefer convert_to_json for JSON APIs, convert_to_html for XHTML/web content, or convert_to_csv for flat tabular data.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| title | No | Optional. The root XML element name and document title. Must be a valid XML element name (no spaces or special characters). Defaults to 'document' if omitted. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Rich disclosure beyond annotations: details exact XML element structure produced (<section>, <heading>, etc.), declares <?xml?> declaration, clarifies dual return behavior (string vs JSON object based on output_path), and explicitly documents side effects including parent directory creation and file overwrite behavior.
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?
Well-structured with logical flow: purpose → technical details → side effects → returns → usage guidance. Front-loaded with core function. Slightly dense but every sentence provides actionable information; no redundant repetition of schema details.
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?
Comprehensive for a dual-mode conversion tool. Despite no output schema, description fully documents both return variants (XML string vs JSON summary object). File system behavior (directory creation, overwrite) is explicitly addressed. Sibling alternatives coverage is complete.
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?
While schema coverage is 100%, description adds crucial contextual usage: explains that 'title' parameter becomes the root XML element name, and clarifies that 'output_path' presence triggers file write mode with JSON metadata return vs direct string return. Enhances agent understanding of parameter interactions.
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?
Excellent specificity: 'Convert Markdown to an XML document' provides clear verb+resource. Critically distinguishes from 20+ sibling conversion tools by naming specific alternatives (convert_to_json, convert_to_html, convert_to_csv) and their use cases.
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?
Explicit when-to-use guidance ('Use this for XML-based data interchange or when downstream systems require XML input') and explicit when-not-to-use with named alternatives. Clear distinction from siblings based on output format requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_code_blocksARead-onlyIdempotent
Extract all code blocks from a Markdown document. Returns a JSON array of code blocks, each with language, code content, and start/end line numbers. Useful for extracting code snippets from LLM responses or documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The Markdown text to extract code blocks from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare read-only/idempotent nature. Description adds valuable output structure details beyond annotations: JSON array format with specific fields (language, code content, start/end line numbers) and the 'all' scope indicator.
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?
Two sentences with zero waste: first sentence covers function + return format, second covers use case. Information-dense and front-loaded.
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?
No output schema exists, but description fully compensates by detailing the JSON array structure and constituent fields (language, line numbers). Complete for a single-parameter extraction tool with good annotations.
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 coverage is 100% ('The Markdown text to extract code blocks from'). Description references 'Markdown document' but does not supplement schema with additional format constraints, validation rules, or examples. Baseline 3 appropriate for high-coverage schemas.
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?
Specific verb 'Extract' with clear resource 'code blocks' and scope 'from a Markdown document'. Distinctly positioned against sibling 'extract_structure' (general structure) and 'extract_links' (URLs) by targeting fenced code blocks specifically.
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?
Provides concrete usage contexts ('LLM responses or documentation') indicating when to use. Lacks explicit exclusions or sibling comparisons (e.g., vs extract_structure), but clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_linksARead-onlyIdempotent
Extract all links and images from a Markdown document. Returns a JSON array with link text, URL, line number, and type (inline, reference, image, autolink). Useful for link checking, SEO analysis, or extracting references.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The Markdown text to extract links from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations declare readOnlyHint=true and idempotentHint=true, the description adds crucial output structure documentation ('Returns a JSON array with link text, URL, line number, and type') which compensates for the missing output schema. No contradictions with annotations.
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?
Two well-structured sentences with zero waste: first sentence covers action and output format, second covers use cases. Front-loaded with the core operation. Every word earns its place.
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 single-parameter extraction tool, the description is fully complete. It compensates for the lack of output schema by detailing the JSON return structure. Combined with comprehensive annotations, no additional information is needed for correct invocation.
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 coverage is 100% for the single 'markdown' parameter, which is adequately described in the schema as 'The Markdown text to extract links from.' The description references 'Markdown document' reinforcing the parameter purpose but does not add additional syntax constraints or format details beyond the schema.
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?
Description uses specific verb 'Extract' with clear resource 'links and images' and scope 'from a Markdown document.' It clearly distinguishes from sibling conversion tools (convert_*) and other extraction tools (extract_code_blocks, extract_structure) by specifying exactly what content is targeted.
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?
Provides concrete use cases ('Useful for link checking, SEO analysis, or extracting references') indicating when to invoke the tool. Lacks explicit 'when not to use' guidance or named alternatives for extraction tasks, but the positive examples are specific enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_structureARead-onlyIdempotent
Extract the full structure of a Markdown document. Returns JSON with document statistics, heading outline, code block summary (language, line count, positions), and link summary (totals by type, unique URL count). Provides a bird's-eye view of document architecture.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The Markdown text to extract structure from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Leverages annotations (readOnlyHint, destructiveHint, idempotentHint) effectively while adding valuable output contract details. Describes exactly what the JSON contains (statistics, heading outline, code block summary with language/line counts, link summary), clarifying what 'structure' means operationally. No contradictions with annotations.
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?
Three well-constructed sentences: purpose declaration, detailed output specification, and conceptual summary. Zero redundancy—every sentence advances understanding of tool capabilities. Front-loaded with the core action.
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?
Despite no output schema, description comprehensively details return value structure (JSON components: statistics, headings, code blocks with metadata, links with counts). Combined with rich annotations covering behavioral traits, provides complete contractual information needed for agent invocation.
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 coverage is 100% with clear parameter description ('The Markdown text to extract structure from'). Description references 'Markdown document' but adds no additional semantic constraints (size limits, encoding requirements, valid markdown prerequisites) beyond what the schema already provides. Baseline 3 appropriate given complete schema coverage.
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?
Excellent specificity: 'Extract' (verb) + 'full structure of a Markdown document' (resource+scope). Distinguishes clearly from siblings like extract_code_blocks and extract_links by emphasizing 'full structure' versus specific elements, and from convert_to_* tools by focusing on structural analysis rather than format transformation.
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?
Provides implied usage through output description ('bird's-eye view of document architecture'), indicating this is for structural overview. However, lacks explicit when/when-not guidance or comparisons to siblings like analyze_document or the more specific extraction tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_htmlARead-onlyIdempotent
Generate a complete, self-contained HTML document from Markdown with all styles inlined. Renders GFM (tables, task lists, strikethrough) and KaTeX math into a full HTML page with an embedded block and a KaTeX CSS CDN link. Returns the HTML string directly — no file is written to disk. Side effects: none. This tool is read-only and performs no file I/O. Returns: a complete HTML document string (…) with inline styles, ready for rendering in a browser. The optional title parameter sets the tag in the HTML section. Use this when you need styled HTML output returned as a string (e.g., for embedding in responses or previewing). Prefer convert_to_html when you need to write the HTML to a file on disk. Prefer convert_to_pdf or convert_to_image for non-HTML visual output formats.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| title | No | Optional. Sets the <title> tag in the HTML document's <head> section. Displayed in browser tabs and bookmarks. Defaults to 'Document' if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds valuable behavioral context: output is a string not file, includes KaTeX CSS CDN link dependency, specifies exact return format (<!DOCTYPE html>…</html>), and confirms side effects none. Does not mention idempotency from annotations, but coverage is strong otherwise.
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?
Ten sentences cover purpose, features, I/O behavior, side effects, return values, parameter specifics, and sibling distinctions. While dense, every sentence earns its place with no redundancy, following a logical what→how→when→alternatives structure.
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?
Comprehensive for a conversion tool with many siblings. Compensates for missing output schema by explicitly describing the returned HTML string structure. Covers behavioral traits, parameters, and clear differentiation from 20+ sibling conversion tools.
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?
With 100% schema description coverage, the baseline is 3. The description adds minor supplemental context about the 'title' parameter's effect on the HTML <head> section, but the schema already fully documents both parameters' purposes and types.
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?
The description uses a specific verb ('Generate') and clear resource ('complete, self-contained HTML document'). It explicitly distinguishes from sibling 'convert_to_html' by emphasizing 'returns the HTML string directly — no file is written to disk' versus file output.
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?
Provides explicit usage guidance: 'Use this when you need styled HTML output returned as a string' and clear alternatives: 'Prefer convert_to_html when you need to write the HTML to a file' and 'Prefer convert_to_pdf or convert_to_image for non-HTML visual output formats.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_tocARead-onlyIdempotent
Generate a Table of Contents from Markdown headings. Returns a Markdown-formatted TOC with indented links to each heading. Handles duplicate heading slugs. The max_depth parameter controls the deepest heading level to include.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The Markdown text to generate a TOC from. | |
| max_depth | No | Maximum heading depth to include (1-6, default: 6). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds valuable behavioral details not present in annotations: output format specifics ('Markdown-formatted TOC with indented links') and special handling logic ('Handles duplicate heading slugs'). Complements the readOnly/idempotent annotations by describing the transformation behavior without contradicting safety hints.
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 tightly constructed sentences: purpose declaration, output specification, behavioral note on duplicates, and parameter guidance. Front-loaded with essential information; no filler content. Excellent information density.
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?
Compensates well for missing output schema by explicitly describing return format. Complete coverage of the two parameters with 100% schema coverage. Only gap is lack of explicit sibling differentiation given the server's large collection of document processing tools.
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 has 100% description coverage setting baseline at 3. Description adds redundant but clarifying phrasing for max_depth ('deepest heading level'), reinforcing the schema's intent without adding substantial new semantic information about parameter usage or constraints.
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?
Description uses specific verb 'Generate' with clear resource 'Table of Contents' and source 'Markdown headings'. Effectively distinguishes from sibling convert/extract tools by specifying its unique purpose (TOC generation with links).
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?
Provides clear context about what the tool produces (indented links TOC) and input requirements (Markdown headings), but lacks explicit guidance on when to choose this over similar siblings like extract_structure. Usage is implied but not explicitly contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
harmonize_markdownAIdempotent
Standardize and normalize Markdown syntax without changing the document's meaning. Re-formats headers (ATX-style), normalizes list markers to '-', enforces fenced code blocks with backticks, and applies consistent indentation. Side effects: when output_path is provided, writes the harmonized Markdown to disk (creates parent directories as needed, overwrites existing files). When output_path is omitted, returns the harmonized text as a string with no file I/O. Returns: harmonized Markdown string (if no output_path), or JSON with { success, file_path, file_size_bytes, format } (if output_path set). Use this tool when you need to clean up inconsistent Markdown formatting before further processing. Prefer convert_to_md with harmonize=true if you also need to save the result, as it combines both steps. Not suitable for converting Markdown to other formats — use the convert_to_* tools instead.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotency and non-destructive nature; the description adds crucial behavioral specifics: exact formatting mutations (ATX headers, '-' list markers, fenced code blocks), file I/O side effects (directory creation, overwriting), and conditional return value schemas (string vs JSON object). This significantly augments the annotation-level safety profile with operational details.
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?
The description is well-structured with logical flow: purpose → specific behaviors → side effects → returns → usage guidance → alternatives → exclusions. Every sentence provides unique value (normalization specifics, I/O behavior, return types, sibling distinctions). Slightly dense but efficiently packed with necessary information for a dual-mode tool (in-memory vs file-write).
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?
Excellently compensates for the missing output schema by explicitly documenting both return variants (harmonized string vs JSON summary with specific fields). Covers input requirements (GitHub-Flavored Markdown, KaTeX), side effects, and error-prone conditions (overwriting) ensuring the agent has complete operational context.
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?
With 100% schema description coverage, the baseline is 3 per rubric. While the description elaborates on output_path behavior in the side-effects section (linking it to file writes vs string returns), the schema already documents the parameter purposes adequately. The description does not need to compensate for schema gaps.
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?
The description opens with a precise action ('Standardize and normalize Markdown syntax') and scope ('without changing the document's meaning'). It immediately distinguishes itself from siblings by stating 'Not suitable for converting Markdown to other formats — use the convert_to_* tools instead' and explicitly comparing to convert_to_md, satisfying the requirement for sibling differentiation.
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?
Provides explicit when-to-use ('when you need to clean up inconsistent Markdown formatting before further processing'), explicit preference ('Prefer convert_to_md with harmonize=true if you also need to save the result'), and clear exclusions (not for converting to other formats). This covers all dimensions of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
html_to_markdownAIdempotent
Convert HTML to Markdown. Performs round-trip import of HTML content back to Markdown format. Handles headings, tables, lists, code blocks, links, images, and inline formatting. Useful for importing web content or converting HTML emails to Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The HTML content to convert to Markdown. Can be a full HTML document or a fragment. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations declare idempotent/non-destructive hints, the description adds valuable behavioral context by enumerating specific HTML elements that are preserved (tables, code blocks, inline formatting), helping agents predict conversion fidelity. It aligns with annotations (idempotent 'round-trip' concept).
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 with clear information hierarchy: purpose → capability details → use cases. The 'round-trip import' phrase is slightly jargon-heavy but overall structure is efficient with minimal redundancy.
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?
Adequately covers the conversion capability and supported syntax, but lacks explicit documentation of return value behavior (file path vs string) in the description text itself, relying entirely on the parameter schema. No contradictions with annotations detected.
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?
Input schema has 100% description coverage, establishing a baseline of 3. The description focuses on functional capabilities rather than clarifying parameter semantics (e.g., html fragment vs document), which is acceptable given the comprehensive schema.
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?
The description clearly states the tool converts 'HTML to Markdown' with specific supported elements (headings, tables, lists, etc.), providing concrete scope. However, it fails to distinguish from sibling 'convert_to_md', which likely performs a similar function.
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?
Provides implicit usage guidance through concrete examples ('importing web content', 'converting HTML emails'), helping agents identify relevant contexts. However, it lacks explicit when-not-to-use guidance or comparison with the generic 'convert_to_md' alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_markdownARead-onlyIdempotent
Lint Markdown and report issues. Returns a JSON array of lint issues found in the document, each with line number, column, severity (error/warning/info), rule name, message, and fixable flag. Checks for: missing heading spaces, trailing whitespace, inconsistent list markers, hard tabs, multiple blank lines, bare URLs, unclosed emphasis, and unclosed code fences.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The Markdown text to lint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Excellent disclosure beyond annotations: details return structure (JSON array with line, column, severity, rule name, message, fixable flag) and enumerates specific lint rules checked (heading spaces, trailing whitespace, etc.). Matches readOnlyHint/destructiveHint annotations with 'report issues' framing.
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?
Two sentences, zero waste. First sentence establishes purpose and return format; second enumerates specific checks. Perfectly front-loaded.
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?
No output schema exists, but description comprehensively documents return structure (array of issue objects with specific fields) and behavior. Combined with rich annotations (readOnly, idempotent), description provides complete context for invocation.
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 coverage is 100% ('markdown' parameter fully described), meeting baseline. Description adds no additional parameter semantics, but schema carries full burden adequately.
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?
Clear specific verb ('Lint') + resource ('Markdown') plus scope ('report issues'). Distinguished from conversion siblings (convert_to_*) and extraction siblings (extract_*) by focusing on validation/reporting.
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?
Provides implied usage through 'report issues' language, indicating read-only analysis. However, lacks explicit when-to-use guidance vs. close sibling 'repair_markdown' (which presumably fixes issues) or when to choose this over 'analyze_document'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repair_markdownAIdempotent
Repair broken Markdown from LLM output or copy-paste. Fixes unclosed code fences, broken tables (mismatched columns, missing separators), stray emphasis markers, missing heading spaces, inconsistent list indentation, broken links, and excessive whitespace.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The potentially broken Markdown text to repair. | |
| output_path | No | Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish idempotency and non-destructive traits. The description adds valuable behavioral specifics beyond annotations by detailing exactly what constitutes 'repair' (mismatched table columns, missing heading spaces, etc.), clarifying the transformation scope without contradicting the safety hints.
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?
Two dense sentences with zero waste. The first establishes purpose and context; the second enumerates specific fixes. Every clause earns its place, and the information is appropriately front-loaded.
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?
Given 100% schema coverage, idempotent annotations, and clear behavioral description, the definition is sufficiently complete. The lack of an output schema is partially mitigated by the parameter descriptions explaining the dual return modes (direct string vs. file write), though a brief summary of the return structure in the description would be ideal.
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 coverage is 100%, establishing a baseline of 3. While the description implies the input content domain ('broken Markdown' with specific defects), it does not explicitly elaborate on parameter syntax, format constraints, or the optional output_path behaviors beyond what the schema already documents.
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?
The description uses a specific verb ('Repair') with a clear resource ('Markdown') and explicitly scopes the functionality to 'LLM output or copy-paste.' It comprehensively lists specific defects handled (unclosed code fences, broken tables, stray emphasis, etc.), distinguishing it from generic conversion tools in the sibling list.
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?
It provides contextual usage hints by specifying the source ('LLM output or copy-paste'), implying when the tool is needed. However, it lacks explicit guidance distinguishing it from close siblings like 'lint_markdown' or 'harmonize_markdown' regarding when to repair versus lint or standardize.
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. Dates show when Glama detected each change.
33 tool updates
v0.1.6- Added
analyze_document - Added
convert_to_asciidoc - Added
convert_to_bbcode - Added
convert_to_confluence - Added
convert_to_csv - Added
convert_to_discord - Added
convert_to_docx - Added
convert_to_email_html - Added
convert_to_html - Added
convert_to_image - Added
convert_to_jira - Added
convert_to_json - Added
convert_to_latex - Added
convert_to_md - Added
convert_to_mediawiki - Added
convert_to_orgmode - Added
convert_to_pdf - Added
convert_to_rst - Added
convert_to_rtf - Added
convert_to_slack - Added
convert_to_textile - Added
convert_to_txt - Added
convert_to_xlsx - Added
convert_to_xml - Added
extract_code_blocks - Added
extract_links - Added
extract_structure - Added
generate_html - Added
generate_toc - Added
harmonize_markdown - Added
html_to_markdown - Added
lint_markdown - Added
repair_markdown
14 tool updates
v0.1.3- Removed
convert_to_csv - Removed
convert_to_docx - Removed
convert_to_html - Removed
convert_to_image - Removed
convert_to_json - Removed
convert_to_latex - Removed
convert_to_md - Removed
convert_to_pdf - Removed
convert_to_rtf - Removed
convert_to_txt - Removed
convert_to_xlsx - Removed
convert_to_xml - Removed
generate_html - Removed
harmonize_markdown
14 tool updates
v0.1.2- Changed
convert_to_csv2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead."
- Changed
convert_to_docx2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.docx') where the binary file will be saved. Parent directories are created automatically. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned. If omitted, a JSON object with { format, file_size_bytes, hint, base64_preview } is returned — the hint will instruct you to call the tool again with output_path to save the file. Binary formats (DOCX) should almost always specify output_path."
- Changed
convert_to_html2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead."
- Changed
convert_to_image2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.png') where the binary file will be saved. Parent directories are created automatically. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned. If omitted, a JSON object with { format, file_size_bytes, hint, base64_preview } is returned — the hint will instruct you to call the tool again with output_path to save the file. Binary formats (PNG) should almost always specify output_path."
- Changed
convert_to_json3 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead." - added
Input schema / properties / title / descriptionAdded value: +"Optional. A document title string. Used as the root element name or document metadata title in the output. Defaults to 'document' if omitted."
- Changed
convert_to_latex2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead."
- Changed
convert_to_md4 fields changed- added
Input schema / properties / harmonize / descriptionAdded value: +"Optional. When true, normalizes Markdown syntax (ATX headers, '-' list markers, fenced code blocks, consistent indentation) before returning or saving. When false or omitted, the Markdown is passed through unchanged. Defaults to false." - changed
Input schema / properties / harmonize / typePrevious value: -"string"New value: +"boolean" - added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead."
- Changed
convert_to_pdf2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.pdf') where the binary file will be saved. Parent directories are created automatically. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned. If omitted, a JSON object with { format, file_size_bytes, hint, base64_preview } is returned — the hint will instruct you to call the tool again with output_path to save the file. Binary formats (PDF) should almost always specify output_path."
- Changed
convert_to_rtf2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead."
- Changed
convert_to_txt2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead."
- Changed
convert_to_xlsx2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.xlsx') where the binary file will be saved. Parent directories are created automatically. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned. If omitted, a JSON object with { format, file_size_bytes, hint, base64_preview } is returned — the hint will instruct you to call the tool again with output_path to save the file. Binary formats (XLSX) should almost always specify output_path."
- Changed
convert_to_xml3 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead." - added
Input schema / properties / title / descriptionAdded value: +"Optional. The root XML element name and document title. Must be a valid XML element name (no spaces or special characters). Defaults to 'document' if omitted."
- Changed
generate_html2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / title / descriptionAdded value: +"Optional. Sets the <title> tag in the HTML document's <head> section. Displayed in browser tabs and bookmarks. Defaults to 'Document' if omitted."
- Changed
harmonize_markdown2 fields changed- added
Input schema / properties / markdown / descriptionAdded value: +"The raw Markdown source text to convert. Supports GitHub-Flavored Markdown (tables, task lists, strikethrough) and KaTeX math expressions. Pass the full document content as a string, not a file path." - added
Input schema / properties / output_path / descriptionAdded value: +"Optional. Absolute or relative file path (e.g. './output.txt') where the result will be saved. Parent directories are created automatically. If omitted, the converted text content is returned directly in the response as a string. If provided, the file is written to disk and a JSON summary with { success, file_path, file_size_bytes, format } is returned instead."
14 tool updates
v0.1.0- First observed
convert_to_csv - First observed
convert_to_docx - First observed
convert_to_html - First observed
convert_to_image - First observed
convert_to_json - First observed
convert_to_latex - First observed
convert_to_md - First observed
convert_to_pdf - First observed
convert_to_rtf - First observed
convert_to_txt - First observed
convert_to_xlsx - First observed
convert_to_xml - First observed
generate_html - First observed
harmonize_markdown
TDQS
Significant overlap exists between convert_to_html and generate_html (both produce HTML, differing only in file I/O behavior) and between convert_to_md with harmonize=true and harmonize_markdown (identical functionality). These duplications force agents to carefully read descriptions to distinguish tools that could have been parameters or a single tool.
The vast majority of tools follow a strict verb_noun convention (convert_to_*, extract_*, generate_*, harmonize_*, lint_*, repair_*). However, html_to_markdown breaks this pattern (should be convert_from_html or import_html), and analyze_document is slightly vague compared to the specific extract_* tools.
With 33 tools, this significantly exceeds the 25+ threshold where count becomes overwhelming. The server converts Markdown to 20+ formats, but this could be consolidated into a single convert tool with a format parameter, reducing surface area and cognitive load for agents.
Excellent coverage of Markdown export formats (20+ targets), analysis (lint, statistics, structure extraction), and repair operations. Minor gap: only supports HTML as an input format (html_to_markdown), lacking import from Word, PDF, or other common formats for a fully bidirectional converter.
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 Connectors
Use your own Word templates to convert Markdown → DOCX/PDF/HTML from any MCP-compatible AI.
Document-to-Markdown MCP server — convert PDF, Office and HTML into LLM-ready Markdown.
Generate PDF, Word (.docx) and PowerPoint (.pptx) documents from Markdown over MCP.
Hosted MCP server: convert PDFs to clean, LLM-ready Markdown with tables, formulas and OCR.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that converts various file formats (PDF, PowerPoint, Word, Excel, Images, etc.) to Markdown to make them accessible to LLMs.1MIT
- AlicenseAqualityAmaintenanceA Model Context Protocol server that converts over 29 file formats, including PDFs, Office documents, and audio, into structured Markdown using Microsoft's MarkItDown library. It enables AI assistants to process diverse document types through single file conversion and batch directory processing.332MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that converts diverse file types, including PDFs, images, audio, and Office documents, into Markdown format. It also transforms web content like YouTube transcripts and Bing search results into readable text for model consumption.13347MIT
- AlicenseAqualityNot gradedmaintenanceAn MCP server that enables AI agents to instantly convert Markdown into beautiful, ready-to-deliver Word, PDF, HTML with sidebars, and Slideshow documents, bridging the "last mile" of AI content generation.7281-
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/XJTLUmedia/MCP_Markdown_Formatter'
If you have feedback or need assistance with the MCP directory API, please join our Discord server