Skip to main content
Glama
README.md
# mcp-md-converter

MCP server exposing two tools so an AI coding agent (Claude Code, etc.) can turn a
Markdown file it just wrote into a **PDF** or a **Google Doc**.

- `md_to_pdf` — renders Markdown → HTML → PDF locally via headless Chromium (puppeteer).
  No network, no Google account needed.
- `md_to_gdoc` — uploads Markdown (as HTML) to Google Drive, which auto-converts it
  into a native, formatted Google Doc (headings, lists, tables, code blocks).

## 1. Install

```bash
cd mcp-md-converter
npm install
npm run build
```

## 2. Google auth (only needed for `md_to_gdoc`)

1. In [Google Cloud Console](https://console.cloud.google.com/), create/select a project.
2. Enable the **Google Drive API**.
3. Create OAuth client credentials → Application type **Desktop app**.
4. Download the JSON and save it as:
   ```
   ~/.mcp-md-converter/credentials.json
   ```
5. Run the one-time login:
   ```bash
   npm run auth
   ```
   This opens a browser, you approve access, and a `token.json` is cached in
   `~/.mcp-md-converter/`. Refresh tokens auto-renew after that — no repeat login.

Scope used: `drive.file` (the app can only see/create files it makes — not your whole Drive).

## 3. Register with Claude Code

```bash
claude mcp add md-converter -- node /Users/bheshrajneupane/Agent/mcp-md-converter/dist/main.js
```

Or add directly to your MCP config (`.mcp.json` / Claude Code settings):

```json
{
  "mcpServers": {
    "md-converter": {
      "command": "node",
      "args": ["/Users/bheshrajneupane/Agent/mcp-md-converter/dist/main.js"]
    }
  }
}
```

## 4. Usage

Once registered, ask the agent things like:

- "Convert README.md to a PDF at ~/Desktop/readme.pdf"
- "Turn this markdown into a Google Doc titled 'Design Spec'"

Tool params:

| Tool | Params |
|---|---|
| `md_to_pdf` | `markdown_path` \| `markdown`, `out_path` (required), `title` |
| `md_to_gdoc` | `markdown_path` \| `markdown`, `title`, `folder_id` (optional Drive folder) |

## Troubleshooting

- **PDF render fails to launch Chromium** (sandboxed/restricted shells, some CI):
  point puppeteer at a system Chrome install instead of its bundled one:
  ```bash
  export PUPPETEER_EXECUTABLE_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
  ```
  Set this env var wherever the MCP server process launches (shell profile, or
  in the `mcpServers` config's `env` block).

## Notes

- PDF rendering downloads a Chromium build via puppeteer on `npm install` (~150MB, one-time).
- Google Doc conversion relies on Drive's HTML→Docs import, so formatting fidelity matches
  what you'd get pasting HTML into Drive's "New > File upload" — solid for headings, lists,
  tables, bold/italic, code blocks; very exotic Markdown extensions may not map 1:1.

TDQS

A4.2/5.0

Scored across 2 tools

Disambiguation5/5

Each tool targets a distinct output format: PDF via headless Chromium and Google Doc via Drive upload. No overlap in purpose, making selection unambiguous.

Naming Consistency5/5

Both tool names follow the consistent 'md_to_<format>' pattern, making the naming predictable and clear.

Tool Count3/5

With only two tools, the server feels slightly thin for a general-purpose Markdown converter, but it is still reasonably scoped for the specific PDF and Google Doc workflows.

Completeness4/5

The server covers two common conversion targets (PDF and Google Doc) with no missing operations within those workflows. Minor gaps exist such as no HTML or DOCX output, but the core purpose is satisfied.

Maintenance

ActivityStale
ResponsivenessNo issues