# 簡報、表格丟給 AI 只看到亂碼？markdownify 把檔案轉成它讀得懂的文字

- 網址：https://blog.valenvan.uk/posts/zcaceres-markdownify-mcp.html
- 發布日期：2026-11-04
- 測試設備：Mac mini M4 Pro（12 核、64GB）
- 專案：zcaceres/markdownify-mcp（https://github.com/zcaceres/markdownify-mcp），MIT 授權
- 測試版本：mcp-markdownify-server 1.1.0
- 實測影片：https://www.youtube.com/watch?v=4vji7fmUD6M

## 重點摘要

- markdownify-mcp 1.1.0 把自製 2 頁簡報轉成 Markdown 只花 0.43 秒，講者備忘與預算表格都保留。
- 自製 Excel 有 2 張工作表，轉出來分成一月、二月兩段，各自是表格（0.52 秒）。
- 自製 Word 表格轉出後最上方多出一列空白，標題列變成一般資料列。
- 轉維基百科 Markdown 頁面輸出 520 行，前 101 行是選單與導覽連結，文章標題在第 102 行。
- **結論：** 常把簡報與表格交給 AI 助理的人值得裝，網頁轉換的選單要自己清掉。
- **適合：** 已在使用支援 MCP 的 AI 工具、常需要請 AI 讀簡報、Excel、Word 的人。
- **不適合：** 只偶爾轉一個檔案的人，或不想設定 MCP 的人。

| 實測項目 | 結果 |
|---|---|
| 簡報（2 頁）轉換 | 0.43 秒，備忘與表格保留 |
| Excel（2 張工作表）轉換 | 0.52 秒，分兩段表格 |
| Word 表格轉換 | 0.50 秒，表頭上方多一列空白 |
| 英文 PDF（單頁）轉換 | 0.41 秒，三行文字都在 |
| 維基百科網頁轉換 | 0.83 秒，520 行，前 101 行是選單 |
| 本機網址 127.0.0.1 | 被擋下（potentially dangerous） |
| 完整安裝（npm install） | 32 秒，約 512MB |

社團幹部傳來一份春季活動簡報，你想請 AI 助理幫忙整理重點。結果它打開簡報檔，只看到一堆亂碼。Word、Excel 也是同樣的狀況：這些是特殊格式的檔案，AI 助理沒辦法直接讀。

[markdownify-mcp](https://github.com/zcaceres/markdownify-mcp) 就是為這件事做的外掛：把 Word、Excel、簡報、PDF、網頁轉成 Markdown（一種純文字的排版寫法，標題、表格都用符號表示），AI 助理就讀得懂。

## 測試方式與設備

測試設備：Mac mini M4 Pro（12 核、64GB）。受測版本：mcp-markdownify-server 1.1.0。

這個外掛是給 AI 助理（支援 MCP 的程式）呼叫的。我沒有接真實的 AI 助理，而是用 MCP 官方的程式庫寫一支約 15 行的小程式，扮演 AI 助理去呼叫它，所以以下結果是「工具轉出什麼」，不是「AI 讀完怎麼回答」。

## 安裝

需要 Node.js、npm 與 Python 3。README 寫用 bun，我用 npm 也能裝起來：

```bash
git clone https://github.com/zcaceres/markdownify-mcp
cd markdownify-mcp
npm install        # 實測 32 秒；會自動建 .venv 並裝 markitdown
npm run build      # 不到 1 秒
```

安裝完成後 `.venv` 約 376MB、`node_modules` 約 136MB，合計約 512MB。

## 呼叫方式

小程式 `call.mjs` 做的事：啟動 `node dist/index.js`，用 MCP 連上去，呼叫工具並印出結果。

```js
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
const [tool, arg] = process.argv.slice(2);
const t = new StdioClientTransport({ command: "node", args: ["dist/index.js"] });
const c = new Client({ name: "demo", version: "1" });
await c.connect(t);
const key = tool === "webpage-to-markdown" ? "url" : "filepath";
const r = await c.callTool({ name: tool, arguments: { [key]: arg } });
for (const x of r.content) console.log(x.text);
process.exit(0);
```

```bash
node call.mjs pptx-to-markdown /work/t/club.pptx
node call.mjs xlsx-to-markdown /work/t/stock.xlsx
node call.mjs docx-to-markdown /work/t/notice.docx
node call.mjs pdf-to-markdown  /work/t/report.pdf
node call.mjs webpage-to-markdown https://en.wikipedia.org/wiki/Markdown
```

工具共 11 個：Word、Excel、簡報、PDF、圖片、音訊、網頁、YouTube、Bing 搜尋、Git 專案、讀取現成 Markdown 檔。

## 實測結果

測試檔都是自己做的小檔案。

| 項目 | 結果 | 耗時 |
|---|---|---|
| 簡報（2 頁） | 標題、條列、講者備忘、預算表格都在 | 0.43 秒 |
| Excel（2 張工作表） | 一月、二月各一段，各自是表格 | 0.52 秒 |
| Word（含表格） | 表格最上方多出一列空白 | 0.50 秒 |
| PDF（英文單頁） | 三行文字都在 | 0.41 秒 |
| 網頁（維基百科） | 520 行，前 101 行是選單 | 0.83 秒 |

![簡報轉出來的 Markdown，講者備忘與表格都在](https://blog.valenvan.uk/img/zcaceres-markdownify-mcp-article_1.png)

## 兩個要自己處理的地方

**Word 表頭空白。** 轉出來的表格是這樣，第一列是空的，「日期、活動、費用」被當成一般資料列：

```
|  |  |  |
| --- | --- | --- |
| 日期 | 活動 | 費用 |
| 3/15 | 開幕 | 免費 |
```

我只測了這一份自製檔案，不確定所有 Word 表格都這樣。

**網頁夾帶選單。** 轉維基百科這一頁，輸出 520 行（約 66KB），文章標題在第 102 行才出現，前面全是選單與導覽連結。如果把整頁丟給 AI，會多花不少字數在選單上。

![網頁轉出來的前幾行是選單，標題在第 102 行](https://blog.valenvan.uk/img/zcaceres-markdownify-mcp-article_2.png)

## 防護

- 網址：轉 `http://127.0.0.1:8099/` 這種本機網址，會回 `potentially dangerous, aborting`，不會去抓。
- 資料夾：設定 `MD_ALLOWED_PATHS=/work/t` 後，讀範圍外的 `/etc/hostname` 會被擋下。
- 檔案不存在時，錯誤訊息會附一大段 Python 錯誤紀錄，不太好讀。

## 沒測到的

中文 PDF、掃描檔文字辨識、音訊轉文字、YouTube、圖片、Git 專案轉換都沒測。我做的中文 PDF 轉出亂碼，但該檔是用內建字型工具產生，可能是測試檔本身的問題，所以不當結論。

## 適合誰

- 適合：常把簡報、Excel、Word 交給 AI 助理整理，而且已經在用支援 MCP 的 AI 工具的人。
- 不適合：只想偶爾轉一個檔案的人（直接複製貼上更快），或不想設定 MCP 的人；網頁轉換要自己再清掉選單。

專案：https://github.com/zcaceres/markdownify-mcp ｜授權：MIT
