用 Markdown 寫 MCP Server:一個 bash runbook 橋接器的誕生
一個讓你用 Markdown 定義 MCP tools 的橋接器。四位 AI 審查、測試、打臉後的誠實記錄。
我做了一個工具,讓你用 Markdown 定義 MCP tools。然後讓四個 AI 審查它、測試它、最後以這篇記錄整個過程。
問題
MCP(Model Context Protocol)讓 AI agent 呼叫外部工具。但寫一個 MCP server 需要:Python/Node boilerplate、JSON-RPC 協議、Schema 定義、打包安裝。
對於「讓 Claude Code 跑一行 curl」這種需求,這個門檻不合理。
更具體地說:你團隊的 ops runbook 是 Markdown 寫的,裡面有現成的 shell command。但它永遠只是「給人讀的文件」,不是「AI 可以呼叫的工具」。因為沒有人會為了這個去寫 MCP server。
mdMCP:Markdown 即 MCP Server
## Tool: health_check
Check if a URL is reachable.
### Parameters
- url (string, required): URL to check
- timeout (integer, optional, default: "5"): Timeout in seconds
### Execute
```bash
STATUS=$(curl -sf -o /dev/null -w '%{http_code}' -m "$MDMCP_TIMEOUT" "$MDMCP_URL")
echo "HTTP $STATUS"
```bash
pip install markdown-mcp-server
mdmcp serve tools.md
一個 .md 檔 → 一個 MCP stdio server。參數用環境變數傳遞($MDMCP_URL),不做 string interpolation。
它不是什麼
在講它是什麼之前,先講清楚它不是什麼:
- 不是 MCP server 的替代品。 複雜邏輯、API 整合、有狀態的工具,請用 Python FastMCP。mdMCP 做不到。
- 不是給 production 用的。 沒有 sandbox、沒有權限管理、沒有 audit log。它是一個 local-only 的橋接器。
- 不是格式創新。 有人會說「這只是 YAML disguised as Markdown」。某種程度上他們是對的。
mdMCP 的定位是:把你已經有的 bash runbook 和 shell script,用最少的改動變成 AI 可呼叫的工具。
四位 AI Coder 的 Dogfood
我讓四位 AI 各寫一份真實的 tool file 來測試:
Codex(GPT-5.5) 寫了 dev-tools —— find TODO、run lint、check port。每個 tool 用 set -eu 開頭,多工具 fallback(lsof → ss → netstat)。評價:「省 70-85% boilerplate」。
Gemini 寫了 data-tools —— CSV 摘要、JSON 查詢。最聰明的發現:在 bash 裡用 python3 -c 內嵌 Python,把覆蓋率從 60% 拉到 90%+。
Grok 被指派做壓力測試,寫了 6 個故意破壞 parser 的毒 tool。找到 5 個邊界問題,其中 3 個已修復。
Qwen 3.6(本機 Ollama)驗證了 SRE runbook 轉換的 workflow。
v0.2.0:回應批評
收到dogfood回饋後,我做了三件事:
1. 型別系統
v0.1.0 所有參數都是 string。v0.2.0 支援 string、integer、number、boolean,帶型別轉換和驗證:
- count (integer, required): Number of items
- verbose (boolean, optional, default: "false"): Verbose output
傳入 "not_a_number" 給 integer 參數 → 直接報錯,不會空字串執行。
2. validate 指令
$ mdmcp validate tools.md
OK: 5 tools, no issues
disk_usage(path:string)
port_check(host:string, port:string)
health_check(url:string, expected:string)
檢查格式、型別、缺漏,在 serve 之前就能抓到問題。
3. 測試
19 個測試覆蓋 parser、型別轉換、execute、env 隔離、完整 MCP 協議。從 0 到 19,至少不再是「toy project without tests」。
安全
mdMCP 用環境變數傳參,不做 template interpolation。但我不會假裝它「安全」:
- env 隔離:只傳 PATH、HOME 等安全 key。API tokens 不會洩漏給 tool script。
- Required 驗證:缺參報錯,不會空字串執行。
- Timeout + 進程清理:30s timeout + process group kill 防 zombie。
但是:它依然在 local machine 上執行 bash。沒有 sandbox,沒有 allowlist。如果你不信任那個 .md 檔,就不要 serve 它。
為什麼是 Markdown
不是因為 Markdown 是最好的 DSL。而是因為:
文件和工具合一。 你的 ops runbook 本來就是 Markdown。加上 ## Tool: 和 ### Execute 標記,它同時成為 AI 的工具。維護一份,不是兩份。
生態系現成。 Git 版控、PR review、語法高亮。工具分發 = git push。
門檻低。 會寫 Markdown + bash 的人 >> 會寫 Python MCP server 的人。
數字
- 400 行 Python,零依賴
- 19 個測試
- 4 種參數型別
- MIT 開源
pip install markdown-mcp-server
GitHub:https://github.com/MakiDevelop/mdmcp
誠實的結論
mdMCP 不會改變世界。它是一個窄用途的橋接器:把你已有的 bash runbook 變成 MCP tool,用最少的改動。
如果你每天寫 Python,FastMCP 更好。如果你需要 production 級的工具,別用 mdMCP。
但如果你有一堆 ops runbook 想讓 AI 呼叫,又不想為每個寫 MCP server —— 這個工具大概能幫上忙。
有時候,最好的工具不是功能最多的,而是改動最少就能用的。
我是江中喬,一位具有 TPM 與產品管理背景的 AI 系統建構者,目前專注於 AI 認知增強系統與多 Agent 協作架構的設計與實踐。