Skip to main content
Glama

@docmake/mcp

Official Model Context Protocol server for DocMake, the AI-native document generation platform. It lets AI assistants like Claude generate DOCX and PDF documents from your DocMake templates: no glue code, just a conversation.

"Generate the invoice for Acme Corp: 10 hours of consulting at 100 EUR, due in 14 days."

The assistant picks your invoice template, fills in the data, renders a PDF through the DocMake API, and hands you the file path.

Example prompts

  • "Generate the invoice for Acme Corp: 10 hours of consulting at 100 EUR, due in 14 days."

  • "Which fields does my employment contract template need? Then fill it in for Maria Ionescu, starting 1 October, and save it as a DOCX."

  • "Import ~/Documents/quarterly-report.docx as a DocMake template, then show me the variables it found."

Related MCP server: Word Document MCP Server

Setup

You need a DocMake API key. Create one at app.docmake.io under Settings > API Keys (free plan works).

Claude Desktop

Add to claude_desktop_config.json (Settings > Developer > Edit Config):

{
  "mcpServers": {
    "docmake": {
      "command": "npx",
      "args": ["-y", "@docmake/mcp@latest"],
      "env": {
        "DOCMAKE_API_KEY": "dm_your_key_here"
      }
    }
  }
}

Claude Code

claude mcp add docmake --env DOCMAKE_API_KEY=dm_your_key_here -- npx -y @docmake/mcp@latest

Cursor / other MCP clients

Any client that supports stdio MCP servers works with the same command: npx -y @docmake/mcp@latest with DOCMAKE_API_KEY in the environment.

Remote server (no install)

DocMake also hosts the same six tools over streamable HTTP, so a client that speaks remote MCP needs nothing installed:

{
  "mcpServers": {
    "docmake": {
      "url": "https://app.docmake.io/mcp/v1",
      "headers": { "Authorization": "Bearer dm_your_key_here" }
    }
  }
}

Two differences from this package. render_document returns a short-lived download link instead of writing the file to your machine, and import_docx takes the document as base64 rather than a path, because the server runs remotely and cannot read your disk. Everything else, including strict rendering, behaves the same.

Configuration

Variable

Required

Default

Purpose

DOCMAKE_API_KEY

yes

API key from app.docmake.io, Settings > API Keys

DOCMAKE_OUTPUT_DIR

no

~/Downloads/DocMake

Where rendered documents are saved

DOCMAKE_API_BASE

no

https://app.docmake.io/api/v1

API base URL, override for self-hosted setups

Tools

Tool

What it does

list_templates

List the templates in your workspace, with search and pagination

get_template

A template's field tree: every variable it expects, ready to map to render data

render_document

Render a template to PDF or DOCX and save the file locally

create_template

Create a new template from a document schema JSON

import_docx

Import a local .docx file as a new template (base64 on the remote server)

get_usage

Plan, render quota, and rate limits for the current billing period

The server also exposes your templates as MCP resources and ships a generate-document prompt for a guided render flow.

How rendering works

render_document is strict by default: if any template variable has no value in data, the render fails and returns the list of missing keys, so the assistant can ask you for the values instead of producing an incomplete document. Pass strict: false to render with each variable's fallback text instead.

Variables can declare a default value in the template editor. A defaulted variable never counts as missing: omit it from data and the default is rendered, even in strict mode. get_template shows each field's default (and example, a preview-only sample that is never rendered).

Rendered files are saved to DOCMAKE_OUTPUT_DIR and never overwrite an existing file.

Privacy Policy

Full policy: https://docmake.io/privacy

What this server collects. Nothing of its own. It has no telemetry and no analytics, and it never reads your chat history, memory, or files other than a .docx you explicitly pass to import_docx.

What it sends, and where. Every tool call is a request to the DocMake API at https://app.docmake.io/api/v1 over HTTPS, authenticated with your API key. Those requests carry only what the call needs: a template id, the data you asked to render, or the .docx you asked to import. DocMake processes that data to render your document.

Storage and retention. Your templates and account data live in your DocMake workspace and are retained until you delete them or close the account. Rendered documents are written to your own machine, under DOCMAKE_OUTPUT_DIR (~/Downloads/DocMake by default), and are never uploaded anywhere else. Your API key stays on your machine: the desktop extension keeps it in your operating system keychain, and a manual setup keeps it in your MCP client's config file.

Third-party sharing. Render data is not sold, and it is not shared with third parties beyond the subprocessors DocMake needs to run the service, listed in the full policy.

Contact. support@docmake.io for privacy questions, data export, or deletion.

License

MIT

Available Tools

6 tools
create_templateCreate a templateA

Create a new DocMake template from a document schema JSON. The schema is DocMake's document format: a rich-text tree with typed variable nodes, conditionals, and loops. Learn the format by calling get_template with include_schema:true on an existing template and adapting it. After creating, render a test document to verify the layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTemplate name shown in the DocMake dashboard.
schemaYesThe DocMake document schema JSON (type: 'doc' at the root).

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly=false, idempotent=false, and destructive=false, so the safety profile is established. The description adds useful context about the schema format and advises verification via rendering, but does not disclose behaviors like duplicate creation or response shape. This is acceptable but not exceptional given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all purposeful: the first states the action and input, the second explains the non-obvious schema domain, and the third gives a concrete next step. No filler or redundant restatement of the tool name or schema properties.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has two required parameters, a complex nested schema, and no output schema. The description covers the schema format, how to learn it, and a post-creation verification step. It omits what the create response returns, but the workflow guidance is sufficient for an agent to invoke the tool and verify success via rendering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 real value for the schema parameter by explaining that it is DocMake's rich-text tree format with typed variable nodes, conditionals, and loops, and points to a concrete learning method via get_template. This goes beyond the generic schema description in the input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Create a new DocMake template from a document schema JSON.' This clearly distinguishes creation from the sibling tools like list_templates, get_template, render_document, and import_docx. No ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear workflow context: learn the schema format via get_template with include_schema:true, and render a test document after creating to verify layout. It does not explicitly name alternatives like import_docx or state when not to use this tool, but the intended usage is clear enough to guide an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_templateGet template fieldsA
Read-onlyIdempotent

Get a template's metadata and its field tree: every variable the template expects, as dotted keys matching the shape of the data payload for render_document (list fields carry their per-item subfields). Call this before rendering so you know exactly which data to supply. Set include_schema:true only if you need the raw document schema JSON, for example as a starting point for create_template; it can be large.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesThe template id, e.g. tmpl_ne1EfQns2YBH (from `list_templates`).
include_schemaNoAlso return the raw DocMake document schema JSON. Default false.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds value beyond this by explaining the return shape (dotted keys, per-item subfields) and warning that `include_schema` can produce a large response. It does not mention failure behavior, but the annotations carry the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first defines what is returned, the second states when to call the tool, and the third explains a parameter caveat. It is front-loaded and contains no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description sufficiently explains what the agent will receive and when to call it. The annotations cover safety, the schema covers parameter details, and the description covers the shape and caveats of the output. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented. The description adds meaningful context for `include_schema` by stating it returns raw document schema JSON, may be large, and is useful as a starting point for `create_template`. This goes beyond the schema's basic default and type information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object: 'Get a template's metadata and its field tree'. It then differentiates itself by tying the field tree to the `data` payload for `render_document` and mentioning `include_schema` as a starting point for `create_template`, so it is clearly distinct from list_templates and render_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear when-to-use guidance: 'Call this before rendering so you know exactly which data to supply.' It also provides a conditional for `include_schema` ('only if you need the raw document schema JSON'). It does not explicitly name alternatives or exclusions for the main tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageGet usage and limitsA
Read-onlyIdempotent

Get the workspace's plan, renders used vs. limit for the current billing period, template count, and API rate limits. Check this if renders start failing with quota errors.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a read-only, idempotent, non-destructive operation. The description adds useful context about the data returned (plan, usage vs. limit, template count, API rate limits) and the quota-error scenario, going slightly 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first lists what the tool returns, the second adds a practical use-case. No filler, no repetition of schema details, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only tool with rich annotations, the description fully covers what it does and when to call it. The lack of an output schema is not a gap because the description enumerates the key outputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty. According to the rubric, 0 params earns a baseline of 4; the description correctly focuses on output and usage rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and names the exact resources: workspace plan, renders used vs. limit, template count, and API rate limits. It is clearly distinct from sibling tools like list_templates or render_document, which concern template management and rendering rather than usage/quota information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an explicit trigger: 'Check this if renders start failing with quota errors.' This gives clear context for when to use the tool. However, it does not explicitly mention alternatives or when not to use it, though none of the siblings serve a similar purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_docxImport a DOCX as templateA

Import a local .docx file as a new DocMake template. The document's structure (headings, paragraphs, tables, styling) is converted into an editable template; afterwards you can add variables in the visual editor, or inspect the result with get_template. Max 10 MB.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTemplate name. Defaults to the file name.
file_pathYesAbsolute path to the .docx file on this machine.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations signal that this is a mutating, non-idempotent operation, and the description adds useful behavioral details: the document structure is converted into an editable template, and the file size is capped at 10 MB. It doesn't disclose the return value, but the safety-relevant behavior is already covered by annotations and the conversion behavior is explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler: purpose first, then conversion behavior and follow-up options, then the size constraint. Every sentence contributes information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter import tool with no output schema, the description covers the main behavior, size limit, and how to inspect the resulting template. It does not state what the tool returns (e.g., template ID), but the get_template pointer mitigates that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both 'file_path' and 'name' documented in the input schema, so the description does not need to repeat parameter meanings. It adds only the global 10 MB size cap, which is relevant but not parameter-specific.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Import'), a specific resource ('local .docx file'), and a precise outcome ('new DocMake template'), and it clarifies the conversion of document structure into an editable template. This scope makes it distinguishable from siblings like create_template, which does not involve importing an existing DOCX.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates the intended context: use this tool when you have a local .docx file to turn into a template. It even directs follow-up actions (adding variables or inspecting with get_template), though it does not explicitly state when not to use it or contrast it with create_template.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesList templatesA
Read-onlyIdempotent

List the DocMake templates in the connected workspace. Returns each template's id, name, variable count, and timestamps. Use this first when you need a template_id for get_template or render_document. Supports search by name and pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, starting at 1.
searchNoFilter templates by name (substring match).
per_pageNoResults per page (max 100, default 20).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, and the description aligns with them by framing the operation as a list. It adds valuable behavior details beyond annotations: exact return fields, search-by-name support, and pagination. There is no contradiction and no hidden side effects to disclose for a read-only listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences each earn their place: purpose, return fields, usage guidance, and query capabilities. The most important information is front-loaded and there is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with zero required parameters, the description is complete: it explains the return fields, names the sibling tools that need a template_id, and mentions search/pagination. Annotations cover safety and idempotency, and the schema covers parameters, so no output schema is needed for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter already has a clear description. The description's mention of 'search by name and pagination' reinforces the schema but does not add meaning beyond what page, search, and per_page already document. The schema carries the semantic load here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List the DocMake templates in the connected workspace.' It also states what is returned (id, name, variable count, timestamps), which clearly distinguishes it from siblings like get_template, create_template, and render_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: 'Use this first when you need a template_id for get_template or render_document.' This directly tells the agent when to call this tool and how it fits with the related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_documentRender a documentA

Render a DocMake template to PDF or DOCX with the given data and save the file locally. Returns the absolute path of the saved file. data keys must match the template's fields; call get_template first if you are not sure. Renders are strict by default: if any variable has no value the render fails and lists the missing keys so you can fill them in. Pass strict:false to render anyway using each variable's fallback text.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesData to inject. Keys must match the template's fields; list fields take arrays of objects.
formatNoOutput format. PDF is the default.pdf
localeNoBCP 47 locale for number/date formatting, e.g. en-US, de-DE, ro-RO. Defaults to the workspace setting.
strictNoFail with a list of missing variables instead of rendering an incomplete document. Default true.
filenameNoOptional output filename without extension.
page_sizeNoPage size. Defaults to the workspace setting.
template_idYesThe template id (from `list_templates`).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses several important behaviors not fully captured by annotations: the file is saved locally, the return value is an absolute path, renders fail on missing variables with a list of missing keys, and strict:false uses fallback text. This is rich behavioral context beyond the minimal readOnly/destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core action and return value, then layered with the most important behavioral caveats. Every sentence adds value; there is no redundant repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description covers the essential return contract (absolute path), side effects, prerequisite template lookup, and strict-mode failure behavior. Combined with the complete input schema, the agent has enough information to select and call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% parameter coverage, so the baseline is 3. The description adds meaningful semantics for data ('keys must match the template's fields') and strict ('fails and lists the missing keys' vs 'render anyway using fallback text'). This raises it above baseline, though not every parameter needs extra explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource pair: 'Render a DocMake template to PDF or DOCX with the given data and save the file locally.' It is clearly distinct from sibling tools like list_templates or get_template, and the mention of get_template further clarifies the rendering use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to invoke a sibling: 'call get_template first if you are not sure.' It also gives conditional behavior guidance for strict mode, explaining when to use strict:false to render with fallback text. This is concrete, actionable routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.1
    • First observedcreate_template
    • First observedget_template
    • First observedget_usage
    • First observedimport_docx
    • First observedlist_templates
    • First observedrender_document

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool maps to a distinct operation: listing, fetching metadata, rendering, creating from schema, importing from docx, and checking usage. The two creation tools are clearly differentiated by input format and described use cases.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern such as list_templates, get_template, and render_document. Minor differences in noun choice are understandable and do not create confusion.

Tool Count5/5

Six tools is well-scoped for a template management and rendering server. Each tool serves a distinct, necessary purpose and none feels redundant or superficial.

Completeness3/5

The server covers list, get, create, import, and render, which handles the core workflow, but it lacks update_template and delete_template operations. This is a notable gap for template lifecycle management and limits autonomous agent workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers