Skip to main content
Glama

@hushvert/mcp

npm license

A file-conversion tool for your AI agent.

@hushvert/mcp is a Model Context Protocol server that gives an AI coding agent (Claude Code, Cursor, Cline, Zed, and any other MCP host) a convert_file tool over the hushvert hosted API. When a task needs a conversion a browser cannot do - office documents to PDF, PDF to Word, large video transcodes - the agent converts the file in one tool call, and the result is written next to the input. No upload code, no polling, no glue.

It is a thin client over the hushvert hosted API. For the conversions that DO run in a browser (images, HEIC, archives, audio, small video, PDF page ops), use the free, open-source @hushvert/engine package instead - this server will refuse those and point you there.

Demo

A real run in Claude Code, recorded live and not sped up: ask, and report.pdf is written next to the input. The whole turn took 23 seconds, of which the conversion itself was about 7.

Claude Code converting report.docx to PDF with the hushvert MCP server

The recording starts Claude Code with only this server loaded (--strict-mcp-config) so nothing unrelated is on screen. The tape that produced it is assets/demo.tape, if you want to reproduce it.

Related MCP server: mcp-document-converter

Claude Code can already convert files. Why this?

Because it can only convert what your machine can convert, and when it cannot, it does not fail loudly.

Ask any coding agent to turn report.docx into a PDF. If LibreOffice is installed, it will shell out to soffice, do a good job, and you do not need this server. If LibreOffice is not installed, and it is not there by default on macOS, on Windows, or in a typical CI image, the usual fallback is pandoc. Pandoc does not really convert a Word document. It reads the text into its own AST, hands that to LaTeX, and LaTeX typesets a new document. You get a PDF. The agent reports success. Nobody opens the file.

Here is the same report.docx down both paths:

The same Word document converted by pandoc and by hushvert, side by side

Same words, different document. Every font in the pandoc PDF is Latin Modern, LaTeX's default. The heading color is gone, the table lost its Word styling, and the title moved into a centered LaTeX title block. pdffonts on the two outputs:

pandoc     LMRoman17-Regular, LMRoman12-Bold, LMRoman10-Italic, ...
hushvert   Carlito-Regular, Carlito-Bold, Carlito-Italic

Carlito is metric-compatible with Calibri, which is what the document actually asked for. Latin Modern is not.

So, honestly:

  • If LibreOffice is installed and your agent reaches for it, you do not need this server. That is a real answer, and it is the right one for a lot of people.

  • If it is not installed, this is one line of config instead of a 281 MB download, and it behaves the same on your laptop, in CI, in a container, and on a machine you are not allowed to install software on.

  • Name the tool if it matters. On a machine that had both this server and pandoc available, we asked the plain way ("convert report.docx to PDF") twice: Claude Code used convert_file once and pandoc the other time, and the two runs produced the two documents above. Which tool an agent reaches for is its call, not ours. "Convert report.docx to PDF with hushvert" pins it.

Install

Get an API key at hushvert.com/developers/keys (sign-in is a one-time email code; keys require a confirmed email), then add the server to your agent's MCP config.

Claude Code - one line, no file to edit:

claude mcp add hushvert -e HUSHVERT_API_KEY=hv_live_your_key_here -- npx -y @hushvert/mcp

Cursor, Cline, Zed, and other MCP hosts (or Claude Code, if you prefer a committed project config) - add this block to the host's MCP config (.mcp.json, .cursor/mcp.json, and so on):

{
  "mcpServers": {
    "hushvert": {
      "command": "npx",
      "args": ["-y", "@hushvert/mcp"],
      "env": { "HUSHVERT_API_KEY": "hv_live_your_key_here" }
    }
  }
}

If that file is committed, do not put the key in it. Claude Code expands environment variables in an MCP config, so use "HUSHVERT_API_KEY": "${HUSHVERT_API_KEY}" and keep the real key in your shell. Other hosts vary; check yours before committing.

Then ask your agent: "convert report.docx to PDF with hushvert." Naming the server is worth the two extra words: if your machine has a local converter, the agent may reach for that instead, and for office documents the result is usually worse. See above.

Tools

Tool

What it does

convert_file

Convert a local file to another format. Reads the input, runs the conversion, writes the output, returns the path.

convert_poll

Finish a long conversion (large video) that was still running when convert_file returned.

list_formats

List the conversions the hosted API supports (the server-only pairs).

check_usage

Show free conversions remaining, credit balance, and the current billing window.

convert_file

input_path       (required) path to the source file
to               (required) target format, e.g. "pdf", "docx", "mp4"
from             (optional) source format; inferred from the extension otherwise
output_path      (optional) where to write; defaults beside the input. Required to overwrite.
wait_seconds     (optional) max seconds to wait before handing back a jobId to poll. Default 120.
idempotency_key  (optional) makes a retried conversion safe (same job, charged once)

Returns { output_path, jobId, pair, bytesIn, bytesOut, status }. If the job is still running after wait_seconds (typical for large video), it returns { jobId, status: "processing", resumeWith: "convert_poll" }; call convert_poll with the jobId and an output_path to finish.

What it converts

The server-only formats a browser cannot do:

  • Office to PDF: docx, pptx, xlsx, doc, ppt, xls, odt, ods, odp, rtf, html to pdf

  • PDF to Word: pdf to docx

  • Document interchange: md, html, epub, latex, rst, docx (via pandoc)

  • Video: mov, mkv, avi, webm to mp4 (and mp4 to gif)

Call list_formats for the live list. Everything else (images, HEIC, archives, audio, small video, PDF page ops) runs free, client-side, in @hushvert/engine.

Configuration

Env var

Default

Purpose

HUSHVERT_API_KEY

(required)

Your hv_live_ developer key.

HUSHVERT_API_BASE

https://hushvert.com

API base URL (for self-host / staging).

HUSHVERT_DEFAULT_WAIT_SECONDS

120

Default poll budget for convert_file.

HUSHVERT_MAX_JOBS_PER_SESSION

unlimited

Client-side cap on conversions per server run (a guard against runaway loops).

HUSHVERT_ALLOWED_DIR

unset

If set, the server only reads/writes files under this directory.

Billing and privacy

Conversions are billed per use against your account: a free monthly allowance, then credits. check_usage shows your remaining allowance and balance at any time - have your agent check it before a large batch. The hosted API processes the server-only formats that genuinely cannot run in a browser; for everything else the file never leaves the device via the open-source engine. See hushvert.com/for-developers.

Security

The API key is read from the environment, never logged, and never returned in a tool result or error. See SECURITY.md.

License

MIT

Available Tools

4 tools
check_usageCheck hushvert usage and balanceA

Report this account hushvert usage: free monthly conversions remaining, credit balance, and the current billing window. Use it to show the user what a batch of conversions will cost before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It uses 'report' implying a read-only operation, but does not explicitly state non-destructiveness or any required permissions. The description adds basic context but leaves some transparency gaps.

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 consists of two short sentences: the first defines the output, the second gives usage context. Every word is valuable, no fluff, and the key information is front-loaded in the first sentence.

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 description lists three output items (monthly conversions remaining, credit balance, billing window) which is informative. However, with no output schema, it could be more explicit about the format or whether the result is a simple report. Overall, it is adequate for understanding the tool's return value.

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 schema coverage is 100%, so the description need not elaborate on parameters. By convention, a tool with no parameters receives a baseline score of 4.

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 clearly states the tool reports 'free monthly conversions remaining, credit balance, and the current billing window', specifying the exact information returned. It distinguishes from sibling tools like convert_file and list_formats by focusing on usage and cost, not file operations or format listings.

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 explicitly says 'Use it to show the user what a batch of conversions will cost before running it', providing a clear use case. While it doesn't mention when not to use it, the context and sibling tools make the differentiation clear.

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

convert_fileConvert a file with hushvertA

Convert a local file to another format using the hushvert hosted API. Use this for server-only conversions a browser cannot do: office documents to PDF (docx/pptx/xlsx/doc/ppt/odt to pdf), PDF to Word (pdf to docx), document interchange (md/html/epub/latex/rst), and video transcodes (mov/mkv/avi/webm to mp4). Reads the input file, runs the conversion, and writes the result locally. Returns the output path. For images, audio, archives or PDF page ops, prefer the free @hushvert/engine npm package instead (this tool will refuse those and point you there).

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget format id, e.g. "pdf", "docx", "mp4".
fromNoSource format id. Inferred from the file extension when omitted.
input_pathYesPath to the source file (absolute, or relative to the working directory).
output_pathNoWhere to write the result. Defaults to the input path with the target extension. Required to overwrite an existing file.
wait_secondsNoMax seconds to wait for the conversion before returning a jobId to poll. Default 120.
idempotency_keyNoOptional key to make a retried conversion safe (returns the same job, charges once).

TDQS

A4.9/5.0
Behavior5/5

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

Describes process: reads input, runs conversion, writes result locally, returns output path. Also mentions refusal for unsupported types and idempotency key for safe retries. Annotations are absent, but description fully compensates.

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 well-structured paragraphs with no wasted words. Front-loaded with core purpose, then details, then exclusions. Every sentence adds value.

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 6 parameters, no output schema, and no annotations, the description covers purpose, usage boundaries, parameter behavior, and idempotency. It is fully adequate for an AI agent to select and invoke 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?

Schema coverage is 100%, baseline 3. Description adds value by explaining default output path behavior, wait_seconds default, idempotency key purpose, and format inference from file extension. Exceeds baseline.

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?

Description clearly states verb 'convert' and resource 'local file using hushvert hosted API'. Lists specific conversion types (office to PDF, PDF to Word, etc.) and distinguishes from sibling tools like convert_poll.

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?

Explicitly states when to use (server-only conversions) and when not to (images, audio, archives, PDF page ops), directing to an alternative npm package. Provides clear context for decision-making.

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

convert_pollFinish a long hushvert conversionA

Resume a conversion that was still running when convert_file returned (typically a large video). Poll the job by id and, when done, write the result to output_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesThe job id returned by convert_file.
output_pathNoWhere to write the result once done. If omitted, returns a short-lived download URL instead.
wait_secondsNoMax seconds to wait this call. Default 120.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description must carry full burden. It mentions polling by jobId, writing result, optional output_path with download URL fallback, and wait_seconds default. However, it lacks details on error handling, rate limits, or what happens on failure.

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 sentences, no fluff, front-loaded with main action. Every word adds value.

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 polling tool with no output schema, it covers key aspects: when to use, parameters, and what happens on completion. Missing return format details when output_path omitted, but adequate overall.

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 coverage is 100% but description adds extra meaning: jobId originates from convert_file, output_path is optional with URL fallback, and wait_seconds defaults to 120. This exceeds the schema's descriptions.

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 clearly states the verb ('Poll'/'Resume'), resource ('conversion job'), and context ('after convert_file returned for large video'), distinguishing it from siblings like convert_file that start conversions.

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?

Description explicitly says to use when a conversion is still running after convert_file returned. While it doesn't list when not to use, the context is clear enough for an agent to decide.

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

list_formatsList hushvert server conversionsA

List the conversions the hushvert hosted API supports (the server-only pairs). Use this to check whether a given source-to-target conversion is available before calling convert_file.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromNoOptional: filter to conversions from this source format id.

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided, so description bears full burden. It states the tool lists conversions but doesn't elaborate on response format, read-only nature, or any side effects. However, for a simple listing operation, the description is adequate and implies no destructive behavior.

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 concise sentences. Front-loaded with purpose, followed by usage guidance. Zero wasted words.

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?

Given the tool's low complexity (1 optional parameter, no output schema), the description covers purpose and usage adequately. No critical information missing for effective selection and invocation.

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%, and the description repeats the schema's description ('Optional: filter to conversions from this source format id.'). It adds no additional meaning beyond what the schema already provides.

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?

Description clearly states the tool lists supported conversions and distinguishes from siblings like convert_file and convert_poll. It specifies the scope (server-only pairs) and gives an explicit 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 Guidelines4/5

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

Explicitly tells when to use the tool: to check conversion availability before calling convert_file. While it doesn't mention when not to use it, the guidance is clear and actionable.

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.

  1. 4 tool updatesv0.1.0
    • First observedcheck_usage
    • First observedconvert_file
    • First observedconvert_poll
    • First observedlist_formats

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a distinct purpose: usage checking, file conversion, polling async jobs, and listing formats. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (check_usage, convert_file, convert_poll, list_formats), making them predictable.

Tool Count5/5

4 tools are well-scoped for a file conversion server, covering the essential operations without unnecessary bloat.

Completeness4/5

The tool set covers the core conversion workflow: checking usage, listing supported formats, converting, and polling async results. Missing a cancel conversion tool but that's a minor gap.

Maintenance

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables document conversion between various formats (Markdown, DOCX, HTML, PDF, etc.) using Pandoc, allowing AI agents to request conversions via natural language.
    7
    -
  • A
    license
    A
    quality
    A
    maintenance
    Convert, compress, merge, split and OCR PDFs plus 100+ file formats (Word, Excel, images, ebooks, video) right inside your AI agent. Exposes 126 GuruPDF tools over MCP — works with Claude, Cursor, VS Code, Windsurf, or any MCP client.
    4
    113
    2
    MIT

Latest Blog Posts

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/hushvert/mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server