mdmagic-mcp-server
Server Details
Use your own Word templates to convert Markdown → DOCX/PDF/HTML from any MCP-compatible AI.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- MDMagic-MCP/mdmagic-mcp-server
- GitHub Stars
- 0
- Server Listing
- mdmagic-mcp-server
Available Tools
10 toolscheck_credit_balanceARead-onlyIdempotentInspect
Check the user's current MDMagic credit balance: subscription credits (renewable monthly), purchased credits (permanent), plan name, and plan status.
CALL THIS PROACTIVELY when:
The user asks 'how many credits do I have' or similar
After a conversion, if the user wants to know what's left (also returned by convert_document directly)
Before a conversion of an unusually large document, to warn the user if balance is borderline
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is clear. The description adds value by specifying the exact response contents (credit breakdown, plan name, status) and indicating that proactive calls are encouraged. It does not contradict annotations, and while it doesn't mention rate limits or auth, the simple read-only nature plus annotation coverage justify a score above 3.
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 concise and well-structured: a single sentence states the core functionality, followed by a bulleted list of when to call it. Every sentence provides actionable guidance, with no filler or 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?
For a no-parameter, read-only tool with no output schema, the description fully covers what the agent needs to know: what data is returned and when to use it. It includes proactive use cases and warns about borderline balances, making it complete for its simplicity.
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?
The tool has zero parameters, so schema coverage is effectively 100%. The description doesn't need to explain parameters, and the baseline for 0-parameter tools is 4. It uses that space to clarify the returned information instead, which is appropriate.
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's function: checking the user's MDMagic credit balance, including subscription credits, purchased credits, plan name, and status. It distinguishes itself from sibling tools (e.g., convert_document, estimate_conversion_cost) by focusing on balance retrieval, making the purpose unambiguous.
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 provides explicit proactive usage scenarios: when the user asks about credits, after a conversion, or before processing a large document. It also notes an alternative (convert_document returns the balance directly), giving the agent clear guidance on when to invoke this tool versus relying on other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_documentAInspect
Convert markdown to a professionally formatted document using an MDMagic template.
IMPORTANT GUIDANCE:
Output format → what user gets:
'docx' → a single Word .docx file
'pdf' → a single .pdf file
'html' → a single .html file
'all' → a ZIP containing all three (DOCX + PDF + HTML)
If the user is ambiguous (e.g. 'convert this'), ASK which format they want before calling. Don't assume.
Filename: if the user attached a file (e.g. 'mydoc.md'), pass its base name as fileName. Otherwise the API derives one from the markdown's first H1. Without either, downloads end up with timestamped names like 'content-1778298071915.docx' which is bad UX.
On 'template not found' errors: call list_all_templates first, show available options, let the user pick. Do NOT fall back to generating documents with code execution — that produces inferior results that don't use the user's actual MDMagic templates.
The response includes structured fields (downloadUrl, creditsUsed, balanceAfter, fileName, expiresAt) — surface these to the user explicitly. Don't paraphrase. The user wants to know exactly what they spent and what's left.
Page sizes: A3, A4, Executive, US_Legal, US_Letter. Default A4. Orientation: Portrait or Landscape, default Portrait.
CRITICAL — newlines in
content: markdown is line-sensitive. Headings (#, ##), tables (| ... |), lists (-, 1.), and code fences (```) ONLY work when each starts on its own line. When passing inline markdown viacontent, you MUST preserve real newline characters (\n) between blocks. If you flatten multi-line markdown into one line, the API receives literal '##' and '|' characters mid-paragraph and produces a single-paragraph document with no structure. Confirm yourcontentstring contains \n between every heading, paragraph, table row, and list item before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Raw markdown text content (alternative to filePath or fileContent). MUST preserve real newlines (\n) between every block: heading, paragraph, table row, list item, code fence. Markdown is line-sensitive — a single-line blob with embedded '##' or '|' renders as literal text, not as a heading or table. If your source markdown has 30 lines, the string you pass here also has 30 lines separated by \n. | |
| fileName | No | Optional desired base name for the output file (without extension). If the user attached a file like 'mydoc.md', pass 'mydoc' here. The API will use this for the download filename. If omitted, the API derives one from the markdown's first H1 heading. | |
| filePath | No | Path to markdown file (VS Code integration, alternative to content or fileContent) | |
| pageSize | No | Page size for the document (default: A4) | |
| fileContent | No | Base64 encoded file content (alternative to content or filePath) | |
| orientation | No | Page orientation (default: Portrait) | |
| outputFormat | Yes | Output format. 'docx', 'pdf', or 'html' return that single file; 'all' returns a ZIP with DOCX+PDF+HTML. | |
| templateName | Yes | Template to use for conversion. Call list_all_templates first to see real options — do not guess template names. Some templates are built-in (e.g. 'Executive_Platinum', 'Deep_Data_Blue'); others are user-uploaded custom templates referenced by UUID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behavioral traits beyond annotations: how each output format manifests ('docx' single file, 'all' ZIP), filename derivation/pitfalls, error recovery steps, and the structured response fields (downloadUrl, creditsUsed, etc.). It also warns about newline sensitivity which is non-obvious. No contradiction 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?
The description is long but every numbered point earns its place. It is clearly organized with numbered guidance sections, front-loaded purpose, and critical warnings highlighted. There is no filler or redundancy; each sentence delivers either essential usage guidance or critical behavioral context.
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 an 8-parameter tool with no output schema, the description covers all facets: output formats, user interaction, filename handling, error recovery, response fields, page sizes/orientation, and the critical newline constraint. It is fully complete for an agent to invoke correctly in diverse scenarios.
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%, so the baseline is 3. The description substantially enriches parameter understanding: it explains the content newline requirement in depth, clarifies fileName usage with user-attached files, warns not to guess templateName, and explains outputFormat 'all' returns a ZIP. This goes well beyond schema descriptions.
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 statement: 'Convert markdown to a professionally formatted document using an MDMagic template.' It clearly differentiates from siblings by focusing on the conversion action and the MDMagic template context, while also detailing concrete output format behavior.
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 instructions: asks user when ambiguous, directs to list_all_templates on template-not-found errors, contraindicates fallback to code execution, and advises preserving newlines. The guidance is actionable and contextually grounded in real failure modes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_conversion_costARead-onlyIdempotentInspect
Estimate credit cost for a conversion BEFORE running it. Returns word count, page calculation (300 words/page), and a credit breakdown by format and template type. Use this when the user asks 'how much will this cost?' or when you suspect a conversion might exceed their balance — convert_document refuses to run if credits are insufficient, so estimating first is friendlier.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Markdown content to estimate credit cost for | |
| pageSize | No | Page size for the document | |
| orientation | No | Page orientation | |
| outputFormat | Yes | Output format(s): docx (DOCX only), pdf (DOCX+PDF), html (DOCX+HTML), all/all-formats (DOCX+PDF+HTML) | |
| templateName | Yes | Template ID or name (UUID for custom templates, name for system templates) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent. The description adds value by disclosing the output structure (word count, page calculation, credit breakdown) and the pre-flight intent, going beyond annotation basics. No contradiction.
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, front-loaded with purpose and output, then clear usage guidance. No filler or repetition.
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?
The description covers return values and when to use the tool, sufficient for an estimation tool. It doesn't address potential nuances like pageSize/orientation impact on cost, but overall it provides a complete picture.
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%, so all parameters are already described. The tool description mentions 'format and template type' but does not add meaningful parameter semantics beyond what the schema provides. Baseline 3 is appropriate.
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 tool estimates credit cost for a conversion before running it, with specific output details (word count, page calculation, credit breakdown). This distinguishes it from siblings like convert_document (which executes) and check_credit_balance (which checks balance).
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: when the user asks 'how much will this cost?' or when a conversion might exceed balance. Names convert_document as the alternative and explains why estimating first is friendlier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_template_detailsARead-onlyIdempotentInspect
Show available variants (page sizes and orientations) for a specific template. All MDMagic templates support the full 5×2 matrix: A3, A4, Executive, US_Legal, US_Letter × Portrait/Landscape. Use this when the user asks 'does this template come in Legal Landscape?' or 'what sizes are available?' — confirms the variant before convert_document runs.
| Name | Required | Description | Default |
|---|---|---|---|
| templateName | Yes | Template ID or name (e.g. Executive_Platinum, or a UUID for custom templates) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by stating that all MDMagic templates support the full 5×2 matrix, which is a useful invariant for the agent to know. It also frames the tool as a confirmation step before conversion. The annotations already declare the tool read-only, idempotent, and non-destructive, so the added context about the uniform variant matrix is valuable but not exhaustive.
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 three sentences, front-loaded with the core purpose. The second and third sentences add specific usage context and a mention of the variant matrix without redundancy. Every sentence contributes meaning, making it concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, no output schema, and rich annotations, the description is complete. It explains the tool's purpose, when to use it, and the underlying variant matrix. It does not describe the exact return format, but for a simple lookup tool this is not a critical gap given the annotations and the 'Show' verb imply a listing.
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?
The input schema covers 100% of the single parameter, including an example (Executive_Platinum or a UUID). The description does not add parameter-specific details, but the schema is sufficiently descriptive. Per the scoring guideline, high schema coverage yields a baseline of 3, which is appropriate here.
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: 'Show available variants (page sizes and orientations) for a specific template.' It clearly distinguishes itself from siblings by focusing on template variant details rather than listing templates, converting documents, or checking balances. The mention of confirming variants before convert_document runs further clarifies its unique role.
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 explicit usage triggers: 'Use this when the user asks "does this template come in Legal Landscape?" or "what sizes are available?"' and positions it as a pre-conversion confirmation step. This gives clear when-to-use guidance and implicitly differentiates from convert_document and list_all_templates, which are siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_templatesARead-onlyIdempotentInspect
List all 15 built-in MDMagic templates plus any custom templates the user has uploaded.
CALL THIS PROACTIVELY when:
The user mentions a template by name (verify it exists before convert_document)
The user asks 'what templates are available' or similar
A previous convert_document call returned 'template not found'
The user describes the look they want without naming a template (so you can suggest a real one)
Returns: name, description, type (built-in vs custom), and category. Categories are: Business (5 templates), Creative (6), Professional (2), Technical (2). Use the optional category filter to narrow recommendations (e.g. 'for legal documents' → category: 'Professional').
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional filter — return only built-in templates in this category. Custom templates are always included regardless. Categories: Business (executive/financial), Creative (designer/artistic/novelty), Professional (legal), Technical (code/data documentation). | |
| includeDetails | No | Include template details like available page sizes and orientations (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description goes beyond this by detailing the return fields (name, description, type, category), category counts (Business 5, Creative 6, Professional 2, Technical 2), and the fact that custom templates are always included regardless of filtering. This adds useful behavioral context without contradicting 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?
The description is well-structured: main purpose first, followed by a bulleted list of proactive call scenarios, then a return summary and category counts. Every sentence adds value, and the formatting is scannable for an AI agent. No redundant or filler content.
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 read-only list tool with simple parameters and no output schema, the description is sufficiently complete: it states what it returns, lists the categories, and provides usage context. It does not explain the relationship to sibling tools like list_builtin_templates or get_template_details, but that is not essential for correct invocation of this tool. A small gap is the lack of mention of pagination or ordering, but that is likely unnecessary for a static set of ~15+ templates.
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%, and the schema already explains the category enum and its meanings, plus the 'custom templates always included' behavior. The description adds minimal extra parameter insight, only suggesting how to use the filter ('for legal documents → category: Professional'), which is helpful but not necessary. Baseline 3 is appropriate because the schema carries the semantic weight.
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+scope: 'List all 15 built-in MDMagic templates plus any custom templates the user has uploaded.' It clearly distinguishes this from the sibling tools list_builtin_templates and list_custom_templates by combining both. The purpose is unambiguous and actionable.
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 an explicit proactive call list with four concrete scenarios, such as 'verify it exists before convert_document' and 'a previous convert_document call returned template not found'. This is strong usage guidance. However, it does not mention when to use the sibling tools list_builtin_templates or list_custom_templates instead, so it lacks explicit exclusions/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_builtin_templatesARead-onlyIdempotentInspect
List the 15 built-in MDMagic templates, grouped by category. Same as list_all_templates but excludes the user's custom uploads. Use this when the user asks specifically about MDMagic's bundled templates rather than their personal ones.
Categories available: Business (5), Creative (6), Professional (2), Technical (2).
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional filter — return only templates in this category. | |
| includeDetails | No | Include template details like available page sizes and orientations (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint:false, so the safety profile is covered. The description adds concrete behavioral facts: exactly 15 templates, grouped by category, and exclusion of custom uploads. This exceeds the annotation baseline without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences plus a compact category list. It front-loads the core purpose and differentiation, and every sentence earns its place—no filler or 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?
For a simple read-only list tool, the combination of description, schema, and annotations fully covers what the tool does, when to use it, its parameters, and its safety profile. No output schema exists, but for a template listing the return shape is evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by listing the categories with counts (Business 5, Creative 6, Professional 2, Technical 2), which enriches the enum parameter with expected result sizes. It does not discuss includeDetails, but the schema already covers it well.
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 ('List') and a specific resource ('15 built-in MDMagic templates'), then distinguishes itself from sibling list_all_templates by excluding custom uploads. This gives a clear, unambiguous purpose.
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 explicitly names an alternative ('Same as list_all_templates') and explains the difference ('but excludes the user's custom uploads'), then gives a direct usage directive: 'Use this when the user asks specifically about MDMagic's bundled templates rather than their personal ones.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_templatesARead-onlyIdempotentInspect
List only the user's custom-uploaded Word templates. Use this when the user asks about their own templates ('show me my templates', 'do I have a letterhead?'). Custom templates are referenced by UUID, not name, when calling convert_document.
| Name | Required | Description | Default |
|---|---|---|---|
| includeDetails | No | Include template details like available page sizes and orientations (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and idempotent behavior, so the bar is lower. The description adds valuable cross-tool context that custom templates are referenced by UUID, not name, when calling convert_document. This is a behavioral trait beyond the annotations that helps the agent understand the returned data's usage. No contradictions found.
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 tightly written sentences deliver the core purpose, usage guidance, and a key cross-tool fact. Each sentence earns its place with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional boolean parameter and no output schema, the description provides sufficient context: scope, usage trigger, and how the results relate to convert_document. The UUID reference adds completeness beyond a minimal description.
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?
The only parameter, includeDetails, is fully described in the schema with 100% coverage. The description itself does not add extra parameter-level semantics, so the baseline of 3 applies.
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 action ('List') and the specific resource ('only the user's custom-uploaded Word templates'), which distinguishes it from siblings like list_builtin_templates and list_all_templates. The scope ('only') and usage examples make the tool's purpose unambiguous.
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 explicitly tells when to use this tool ('Use this when the user asks about their own templates') with concrete examples. It does not name alternative tools directly, but the sibling names and the word 'only' imply the exclusion of built-in or all templates, making the guidance clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_templateARead-onlyIdempotentInspect
Suggest the best built-in template(s) for a described purpose. Use this when the user describes WHAT the document is (e.g. 'Q4 board pack', 'API reference', 'wedding invitation', 'legal contract') without naming a template. Returns ranked recommendations with rationale.
Why this exists: AI assistants often guess template names that don't exist. This tool maps purpose → real template names from MDMagic's catalog, so convert_document doesn't fail with 'template not found'.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | How many recommendations to return (1-5, default 3) | |
| purpose | Yes | Free-text description of the document's purpose. Examples: 'Q4 board pack for investors', 'restaurant menu', 'developer API documentation', 'wedding invitation'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context: it returns ranked recommendations with rationale, maps purpose to real template names to avoid 'template not found' errors, and is limited to built-in templates. This goes beyond the safety profile encoded in 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?
The description is concise and well-structured. It opens with a clear imperative sentence, then gives a usage condition, a return description, and a brief 'Why this exists' rationale. Every sentence earns its place, and the content is front-loaded so the core purpose is immediately clear.
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 simple read-only tool with two parameters, no output schema, and strong annotations, the description is fully adequate. It covers the input condition ('describes WHAT the document is'), the scope ('built-in templates'), and the return type ('ranked recommendations with rationale'). The rationale behind the tool's existence further helps an agent decide when to invoke it.
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?
The input schema covers both parameters (purpose and topN) with descriptions and examples, so schema coverage is 100%. The description reinforces the purpose parameter's meaning with additional examples and the 'without naming a template' qualifier, but it adds no extra syntax, formatting, or behavioral details beyond what the schema already provides. Baseline 3 is appropriate.
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's function: 'Suggest the best built-in template(s) for a described purpose.' It specifies the resource (built-in templates) and the action (recommend based on purpose). It also distinguishes itself from sibling tools like list_all_templates and convert_document by addressing the problem of guessing nonexistent template names.
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 provides an explicit trigger condition: 'Use this when the user describes WHAT the document is... without naming a template.' It explains why this tool exists and indirectly references alternatives via convert_document, but it doesn't explicitly enumerate when-not-to-use cases or name sibling alternatives for those scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_default_settingsARead-onlyIdempotentInspect
Show the user's default paper size and orientation preferences (set on their account page). Useful when the user hasn't specified pageSize/orientation explicitly — call this to honor their defaults instead of using A4/Portrait blindly.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful context about preferences being set on the account page and the purpose of honoring defaults, but does not detail edge cases like missing defaults or return format.
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 two sentences, front-loads the core purpose, and includes a practical usage note with no wasted words.
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 simple zero-parameter read-only tool with rich annotations, the description fully covers what the tool does and when to use it. No output schema means return details are implied by the tool's purpose, which is adequate here.
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?
The tool has zero parameters and schema coverage is 100%, so there is no parameter documentation burden. The description adds clarity about what the tool returns (preferences) without needing param 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?
Description clearly states the tool shows the user's default paper size and orientation preferences, using a specific verb and resource. This distinguishes it from sibling tools like convert_document and template listing 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 explains when to use this tool: when the user hasn't specified pageSize/orientation, and provides the alternative of blindly using A4/Portrait. This gives clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_markdownARead-onlyIdempotentInspect
Pre-flight markdown validation BEFORE conversion. Catches malformed tables (mismatched pipes), unclosed code fences, broken task lists, and unsupported syntax. Returns a green/amber/red status plus the detected markdown features.
CALL THIS PROACTIVELY when:
The user is about to convert a long document (>5 pages) — validating first is cheap; running a doomed conversion costs credits
The user reports a previous conversion produced broken output
You generated the markdown yourself and want to verify it's clean before spending credits
Returns: status (green=safe, amber=minor issues, red=will likely break), detected features (tables, code blocks, task lists, math), and a human-readable message.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Markdown content to validate | |
| filename | No | Optional filename label for the response (defaults to 'content.md') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description need not repeat those. It adds valuable behavioral context: validation is cheap compared to conversion, it returns a green/amber/red status, and it detects specific markdown features. This goes beyond the annotations without contradicting them.
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 front-loaded with the core purpose and follows with well-structured, scannable sections for usage guidelines and return values. Every sentence provides distinct value—no filler, no repetition of schema fields, and the bulleted triggers are tightly written.
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 has no output schema, the description compensates by detailing the return payload (status, detected features, human-readable message). It also covers when to use the tool, what it catches, and why it matters financially, making it fully self-contained for an agent to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage for both parameters (content and filename), so the baseline is 3. The description does not add any parameter-specific semantics beyond what the schema provides; it focuses on output and usage context instead.
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 'Pre-flight markdown validation BEFORE conversion', clearly identifying the tool's specific verb, resource, and timing. It lists exact failure modes it detects (malformed tables, unclosed code fences, broken task lists, unsupported syntax) and distinguishes it from conversion tools like convert_document.
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 explicitly states when to call the tool proactively, with three concrete scenarios ('user is about to convert a long document', 'user reports broken output', 'you generated the markdown yourself'). It also contrasts validation cost with conversion cost, but it does not explicitly mention when NOT to use it or name an alternative tool.
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.
10 tool updates
- Changed
check_credit_balance1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "purchased_credits": { - "description": "Permanent purchased credits", - "type": "integer" - }, - "subscription_credits": { - "description": "Renewable monthly subscription credits", - "type": "integer" - }, - "total_credits": { - "description": "Total credits available (subscription + purchased)", - "type": "integer" - } - }, - "required": [ - "total_credits" - ], - "type": "object" -}New value: +null
- Changed
convert_document1 field changed- changed
Output schema / (root)Previous value: -{ - "description": "Conversion result with secure download link and credit accounting", - "properties": { - "balanceAfter": { - "description": "Remaining credit balance after this conversion", - "type": "number" - }, - "creditsUsed": { - "description": "Credits debited for this conversion", - "type": "number" - }, - "downloadUrl": { - "description": "Secure expiring download URL (valid for 60 minutes)", - "type": "string" - }, - "expiresAt": { - "description": "ISO 8601 timestamp when the download URL expires", - "format": "date-time", - "type": "string" - }, - "fileName": { - "description": "Filename of the downloadable document", - "type": "string" - }, - "message": { - "description": "Human-readable status message", - "type": "string" - }, - "success": { - "description": "Whether the conversion succeeded", - "type": "boolean" - } - }, - "required": [ - "success", - "downloadUrl", - "fileName" - ], - "type": "object" -}New value: +null
- Changed
estimate_conversion_cost1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "breakdown": { - "description": "Human-readable breakdown of how credits are calculated", - "type": "string" - }, - "pageCount": { - "description": "Estimated page count (300 words/page)", - "type": "integer" - }, - "totalCredits": { - "description": "Total credits required for this conversion", - "type": "integer" - }, - "wordCount": { - "description": "Word count of the markdown content", - "type": "integer" - } - }, - "required": [ - "totalCredits" - ], - "type": "object" -}New value: +null
- Changed
get_template_details1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "orientations": { - "description": "Supported orientations", - "items": { - "type": "string" - }, - "type": "array" - }, - "pageSizes": { - "description": "Supported page sizes", - "items": { - "type": "string" - }, - "type": "array" - }, - "template": { - "properties": { - "category": { - "description": "Category label (built-in templates only)", - "type": [ - "string", - "null" - ] - }, - "description": { - "description": "Short description of the template's intended use", - "type": "string" - }, - "id": { - "description": "Template ID — pass this as templateName to convert_document", - "type": "string" - }, - "name": { - "description": "Human-readable template name", - "type": "string" - }, - "type": { - "description": "Source of the template", - "enum": [ - "built-in", - "custom" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "type" - ], - "type": "object" - } - }, - "required": [ - "template", - "pageSizes", - "orientations" - ], - "type": "object" -}New value: +null
- Changed
list_all_templates1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "builtinCount": { - "description": "Number of built-in templates returned", - "type": "integer" - }, - "customCount": { - "description": "Number of custom templates returned", - "type": "integer" - }, - "templates": { - "description": "All matching templates", - "items": { - "properties": { - "category": { - "description": "Category label (built-in templates only)", - "type": [ - "string", - "null" - ] - }, - "description": { - "description": "Short description of the template's intended use", - "type": "string" - }, - "id": { - "description": "Template ID — pass this as templateName to convert_document", - "type": "string" - }, - "name": { - "description": "Human-readable template name", - "type": "string" - }, - "type": { - "description": "Source of the template", - "enum": [ - "built-in", - "custom" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "type" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "templates" - ], - "type": "object" -}New value: +null
- Changed
list_builtin_templates1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "count": { - "description": "Number of templates returned", - "type": "integer" - }, - "templates": { - "description": "Matching built-in templates", - "items": { - "properties": { - "category": { - "description": "Category label (built-in templates only)", - "type": [ - "string", - "null" - ] - }, - "description": { - "description": "Short description of the template's intended use", - "type": "string" - }, - "id": { - "description": "Template ID — pass this as templateName to convert_document", - "type": "string" - }, - "name": { - "description": "Human-readable template name", - "type": "string" - }, - "type": { - "description": "Source of the template", - "enum": [ - "built-in", - "custom" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "type" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "templates" - ], - "type": "object" -}New value: +null
- Changed
list_custom_templates1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "count": { - "description": "Number of custom templates returned", - "type": "integer" - }, - "templates": { - "description": "User's custom templates", - "items": { - "properties": { - "category": { - "description": "Category label (built-in templates only)", - "type": [ - "string", - "null" - ] - }, - "description": { - "description": "Short description of the template's intended use", - "type": "string" - }, - "id": { - "description": "Template ID — pass this as templateName to convert_document", - "type": "string" - }, - "name": { - "description": "Human-readable template name", - "type": "string" - }, - "type": { - "description": "Source of the template", - "enum": [ - "built-in", - "custom" - ], - "type": "string" - } - }, - "required": [ - "id", - "name", - "type" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "templates" - ], - "type": "object" -}New value: +null
- Changed
recommend_template1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "purpose": { - "description": "Echoes back the purpose that was matched", - "type": "string" - }, - "rationale": { - "description": "Why these templates were picked", - "type": "string" - }, - "recommendations": { - "description": "Ranked list of template IDs to pass to convert_document", - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "recommendations" - ], - "type": "object" -}New value: +null
- Changed
show_default_settings1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "default_orientation": { - "description": "User's preferred page orientation", - "type": "string" - }, - "default_page_size": { - "description": "User's preferred page size", - "type": "string" - } - }, - "required": [ - "default_page_size", - "default_orientation" - ], - "type": "object" -}New value: +null
- Changed
validate_markdown1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "additionalPandocFlags": { - "description": "Pandoc flags that will be applied", - "items": { - "type": "string" - }, - "type": "array" - }, - "detectedFeatures": { - "description": "Map of markdown features found in the content", - "type": "object" - }, - "filename": { - "description": "Filename label echoed back", - "type": "string" - }, - "inputFormat": { - "description": "Detected markdown flavour (e.g. gfm, commonmark)", - "type": [ - "string", - "null" - ] - }, - "message": { - "description": "Human-readable explanation of any issues", - "type": "string" - }, - "status": { - "description": "Validation verdict", - "enum": [ - "green", - "amber", - "red" - ], - "type": "string" - } - }, - "required": [ - "status", - "message" - ], - "type": "object" -}New value: +null
1 tool update
- Changed
convert_document1 field changed- changed
Input schema / properties / content / descriptionPrevious value: -"Raw markdown text content (alternative to filePath or fileContent)"New value: +"Raw markdown text content (alternative to filePath or fileContent). MUST preserve real newlines (\\n) between every block: heading, paragraph, table row, list item, code fence. Markdown is line-sensitive — a single-line blob with embedded '##' or '|' renders as literal text, not as a heading or table. If your source markdown has 30 lines, the string you pass here also has 30 lines separated by \\n."
10 tool updates
- First observed
check_credit_balance - First observed
convert_document - First observed
estimate_conversion_cost - First observed
get_template_details - First observed
list_all_templates - First observed
list_builtin_templates - First observed
list_custom_templates - First observed
recommend_template - First observed
show_default_settings - First observed
validate_markdown
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Generate PDF, Word (.docx) and PowerPoint (.pptx) documents from Markdown over MCP.
Generate PDFs from templates via AI chat. Works with Claude, ChatGPT, Cursor, and any MCP client.
Create real Word .docx files from your AI chat: proposals, quotes, contracts, statements of work.
The document publishing layer for AI tools. Convert markdown to 6 destinations, 62 templates.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables creation and management of Word documents from markdown content, with support for multiple templates and conversion of chat conversations to formatted Word documents.-
- FlicenseNot gradedqualityDmaintenanceMCP server for generating professionally formatted Word documents (.docx). Supports corporate templates (colors, fonts, logo), headers/footers, and Markdown conversion.-
- FlicenseBqualityCmaintenanceEnables creating professional Word documents from markdown or structured content with fast, customized formatting via natural language.71-
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server that gives your AI assistant the power to convert Markdown into 14 professional document formats — PDF, DOCX, HTML, LaTeX, CSV, JSON, XML, XLSX, RTF, PNG, and more. Stop copy-pasting. Let the AI do the exporting.333MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool has a clearly distinct purpose: credit balance vs cost estimation, template listing scoped to all/built-in/custom, and conversion vs validation. The three list tools are explicitly named by scope, eliminating ambiguity.
All tool names follow the same verb_noun snake_case pattern (check_, convert_, estimate_, get_, list_, recommend_, show_, validate_), making the API predictable and easy to navigate.
10 tools is well within the ideal 3-15 range for a document conversion service. Each tool addresses a necessary step in the workflow (template selection, validation, cost estimation, conversion, credit monitoring) without redundancy.
The core lifecycle (pre-flight validation, cost estimation, conversion, balance checking, template discovery) is fully covered. Minor gaps exist—no template upload or settings update—but these are likely handled outside the MCP server, so the surface is complete for its intended agent workflows.