markdown-formatter について
markdown-formatterは、Markdown文書の変換、分析、修復を行うMCPサーバーです。複数の文書・プラットフォーム形式への出力が必要なユーザー向けで、一括変換と文書分析にも対応します。
主な機能
- 01文書・プラットフォーム形式への変換
- 02複数文書の一括形式変換
- 03Markdownの修復と lint
- 04リンク・コード・文書構造の抽出
- 05数式対応のPDF・PNGレンダリング
活用シーン
- 01ノートをPDFやDOCXに出力
- 02SlackやJira向けにMarkdownを整形
- 03共有前にMarkdownの崩れを修復
- 04文書のリンク・見出し・統計を確認
MCP 対応
変換、修復、lint、文書分析のツールに加え、プロンプトとリソースをMCPクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
14掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| markdown | string | はい | |
| output_path | string | いいえ |
詳細
AI Answer Copier — MCP 対応のマルチフォーマットエクスポーター
「AI のノイズ」を「授業ですぐ使える」形式に、5 秒で変換します。
AI アシスタントに Markdown を 22 種類のプロフェッショナルなドキュメント形式へ変換する機能を提供する、Model Context Protocol(MCP)サーバーです。複数のドキュメントを 1 回の呼び出しで 22 種類の形式へ一括変換したり、ドキュメントを分析したり、壊れた Markdown を修復したり、プラットフォーム間で変換したりできます。AI とのチャットを離れる必要はありません。
npm: https://www.npmjs.com/package/@xjtlumedia/markdown-mcp-server
このツールが生まれた理由
AI に 20 問の問題を作成するよう頼み、できあがりました。でも、ここからが大変です。
| 課題 | 手作業でのワークフロー | AI Answer Copier を使う場合 |
|---|---|---|
| Q&A の抽出 | 各行のコピーに 10~15 分 | 2 秒(自動検出) |
| 数式の書式設定 | 壊れた記号の修正に 20 分 | 即座に完了(KaTeX に対応) |
| LMS へのアップロード | CSV を手作業で入力するのに 15 分 | ワンクリックでエクスポート |
| 準備にかかる時間の合計 | 約 45~60 分 | 1 分未満 |
コンテンツの生成には数秒しかかかりません。しかし、実際に使える形に整えるには 1 時間かかります。この MCP サーバーが、そのギャップを完全になくします。
ライブデモ
オンライン版(インストール不要):ai-answer-copier.vercel.app
インスペクターで MCP ツールをテスト:
実際の MCP インスタンスを使用:
すべての 34 種類の MCP ツール
ドキュメント変換ツール(15)
| # | ツール | 出力 | 説明 |
|---|---|---|---|
| 1 | harmonize_markdown | .md | 意味を変えずに、Markdown 構文(ATX 見出し、- リストマーカー、フェンス付きコードブロック)を標準化し、正規化します |
| 2 | convert_to_txt | .txt | すべての書式を削除してプレーンテキストを生成します |
| 3 | convert_to_html | .html | GFM テーブル、KaTeX 数式、埋め込みスタイルシートを含む、スタイル設定済みの完全な HTML ドキュメントを生成します |
| 4 | generate_html | HTML string | すべてのスタイルをインライン化した自己完結型の HTML を生成します(読み取り専用、ファイル I/O なし) |
| 5 | convert_to_pdf | .pdf | KaTeX 数式と構文ハイライトに完全対応した、ヘッドレス Chromium による印刷対応 PDF を生成します |
| 6 | convert_to_docx | .docx | 見出し、リスト、コード書式を設定した Microsoft Word ドキュメントを生成します |
| 7 | convert_to_latex | .tex | \section、リスト環境、ネイティブ数式のパススルーに対応した LaTeX ソースコードを生成します |
| 8 | convert_to_rtf | .rtf | 従来のワードプロセッサーやメールクライアント向けのリッチテキスト形式に変換します |
| 9 | convert_to_csv | .csv | GFM パイプテーブルをカンマ区切り値に抽出します |
| 10 | convert_to_json | .json | セクション、見出し、リスト、コードブロック、テーブルを含む構造化 JSON 表現に変換します |
| 11 | convert_to_xml | .xml | <?xml?> 宣言と構造化要素を含む整形式 XML に変換します |
| 12 | convert_to_xlsx | .xlsx | Excel スプレッドシートに変換します — Markdown の各テーブルがシートになります |
| 13 | convert_to_image | .png | ヘッドレス Chromium による、ページ全体の PNG スクリーンショットを生成します |
| 14 | convert_to_md | .md | Markdown をファイルにエクスポートします。必要に応じて、事前に書式を統一できます(harmonize=true) |
| 15 | convert_to_email_html | .html | すべてのスタイルをインライン化した、Outlook、Gmail、Apple Mail 互換のメール向け HTML を生成します |
プラットフォーム向け変換ツール(10)
| # | ツール | 対象プラットフォーム | 説明 |
|---|---|---|---|
| 16 | convert_to_slack | Slack | mrkdwn 形式 — 太字は *、リンクは <url|text>、見出しは太字テキストで表します |
| 17 | convert_to_discord | Discord | 太字/下線のスタイルを設定した見出しと、保持されたコードブロック |
| 18 | convert_to_jira | JIRA | Wiki マークアップ — h1./h2.、{code} ブロック、[text|url] リンク |
| 19 | convert_to_confluence | Confluence | {info}、{note} パネルと {code:language=x} 構文を含む Wiki マークアップ |
| 20 | convert_to_asciidoc | AsciiDoc | = 見出し、---- コードブロック、url[text] リンク、image:: ディレクティブ |
| 21 | convert_to_rst | reStructuredText | 下線付き見出し、.. code-block:: ディレクティブ、RST 参照構文 |
| 22 | convert_to_mediawiki | MediaWiki | == 見出し、'''bold'''、<syntaxhighlight> タグ、{\ wikitable |
| 23 | convert_to_bbcode | BBCode | phpBB/vBulletin フォーラム向けの [b]、[i]、[code]、[url]、[img] タグ |
| 24 | convert_to_textile | Textile | Redmine、Basecamp、CMS プラットフォーム向けのマークアップ |
| 25 | convert_to_orgmode | Emacs Org Mode | * 見出し、#+BEGIN_SRC/#+END_SRC コード、[[url][text]] リンク |
インポートツール(1)
| # | ツール | 説明 |
|---|---|---|
| 26 | html_to_markdown | HTML コンテンツ(完全なドキュメントまたは断片)を Markdown に戻します |
修復・Lint ツール(2)
| # | ツール | 説明 |
|---|---|---|
| 27 | repair_markdown | LLM の出力やコピー&ペーストで崩れた Markdown を修復します — 閉じ忘れたコードフェンス、崩れたテーブル、余分な強調マーカー、欠落した見出しの空白、壊れたリンク |
| 28 | lint_markdown | Markdown を検査し、行番号、重大度、ルール名、メッセージ、修正可能フラグを含む JSON 配列として問題を報告します |
ドキュメント分析ツール(5)
| # | ツール | 説明 |
|---|---|---|
| 29 | extract_code_blocks | 言語、内容、開始行番号と終了行番号とともに、すべてのコードブロックを抽出します |
| 30 | extract_links | テキスト、URL、行番号、種類(インライン、参照、画像、自動リンク)とともに、すべてのリンクと画像を抽出します |
| 31 | generate_toc | 見出しから、設定可能な max_depth(1~6)に基づいて Markdown の目次を生成します |
| 32 | analyze_document | 包括的な統計情報を提供します — 行数、単語数、文字数、段落数、文数、見出し数、コード数、表数、リンク数、画像数、推定読了時間 |
| 33 | extract_structure | ドキュメント構成を俯瞰できます — 統計情報、見出しのアウトライン、コードブロックの概要、リンクの概要 |
一括変換(1)
| # | ツール | 入力 | 説明 |
|---|---|---|---|
| 34 | batch_convert | items[] × formats[] | 複数の Markdown ドキュメントを1回の呼び出しで22種類の形式に一括変換します。項目と形式の組み合わせごとにエラーを分離します。ファイル出力には省略可能な output_dir を指定できます。形式:txt、csv、json、xml、xlsx、latex、rtf、docx、pdf、html、md、email、slack、discord、jira、confluence、asciidoc、rst、mediawiki、bbcode、textile、orgmode |
6 組み込みプロンプト
複数のツールを連携させる、事前設定済みのプロンプトテンプレートです。
| プロンプト | 説明 |
|---|---|
convert-document | Markdown をサポートされている任意の形式に変換します(PDF、DOCX、HTML、LaTeX、CSV、JSON、XML、XLSX、RTF、PNG、TXT、MD) |
extract-tables | Markdown からすべての表を抽出し、CSV または XLSX としてエクスポートします |
format-for-sharing | 書式を統一してから、配布用に PDF と HTML の両方に変換します |
analyze-and-repair | リント → 修正 → 再リントを行い、すべての問題が解決されたことを確認します |
convert-for-platform | Markdown を各種プラットフォーム向けの形式に変換します(Slack、Discord、JIRA、Confluence、AsciiDoc、RST、MediaWiki、BBCode、Textile、Org Mode) |
document-overview | 統計情報、目次、コードブロック、リンクを1つのレポートにまとめた全体概要です |
2 リソース
| リソース URI | 説明 |
|---|---|
markdown-formatter://supported-formats | ツール名と種類を含む、23種類以上の出力形式すべての完全な JSON リスト |
markdown-formatter://conversion-guide | ユースケースに応じて適切な出力形式を選ぶためのガイド |
クイックスタート
npx でインストール(推奨)
インストールは不要です — MCP クライアントを設定するだけです。
{
"mcpServers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}
グローバルにインストール
npm install -g @xjtlumedia/markdown-mcp-server
次に、設定します。
{
"mcpServers": {
"ai-answer-copier": {
"command": "markdown-mcp-server"
}
}
}
AI クライアントごとの設定
🔌 Claude Desktop
%APPDATA%\Claude\claude_desktop_config.json(Windows)または ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)を編集します。
{
"mcpServers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}
Claude Desktop を再起動します。🔌 アイコンが表示され、34個すべてのツールを利用できるようになります。
VS Code(GitHub Copilot)
.vscode/mcp.json または VS Code の設定に追加します。
{
"servers": {
"ai-answer-copier": {
"command": "npx",
"args": ["-y", "@xjtlumedia/markdown-mcp-server"]
}
}
}
Cursor / Windsurf / 任意の MCP クライアント
上記と同じ npx コマンドの形式を、クライアントの MCP 設定で使用します。
DIY 版(ローカルビルド)
{
"mcpServers": {
"markdown-formatter": {
"command": "node",
"args": [
"YOUR_PATH_TO_PROJECT/mcp-server/dist/mcp-server/src/index.js"
]
}
}
}
YOUR_PATH_TO_PROJECT をこのフォルダーの絶対パスに置き換えてください。
HTTP モード(Vercel)
ブラウザベースの連携やリモート連携向けに、ホストされた HTTP エンドポイントを利用できます。
https://ai-answer-copier.vercel.app/api/mcp
MCP Inspector でテストします。
npx @modelcontextprotocol/inspector https://ai-answer-copier.vercel.app/api/mcp
使用例
接続したら、AI に自然な言葉で話しかけるだけです。
「Markdown ドキュメントを 5 件、DOCX、PDF、HTML に同時に一括変換して、Downloads フォルダーに保存してください。」 → AI は
batch_convertを items[] と formats[] で使用します
「ニュートンの法則に関する物理の問題を 10 問作成して、Kahoot CSV としてエクスポートしてください。」 → AI は
convert_to_csvを使用します
「この Markdown を Word ドキュメントに変換して、Desktop に保存してください。」 → AI は
output_pathを指定してconvert_to_docxを呼び出します
「この講義ノートから、印刷用の PDF を作成してください。」 → AI は Puppeteer によるレンダリング、KaTeX 数式、構文ハイライトを使用して
convert_to_pdfを呼び出します
「これを Moodle 互換の XML 問題バンクに変換してください。」 → AI は
convert_to_xmlを呼び出します
「これを Slack 用に整形して、チームのチャンネルに送ってください。」 → AI は
convert_to_slackを呼び出します
「この Markdown の問題を確認して修正してください。」 → AI は
lint_markdownを実行し、続けてrepair_markdownを実行します
「このドキュメントの概要を教えてください。単語数、構成、すべてのリンクを知りたいです。」 → AI は
analyze_document+generate_toc+extract_linksを連続して実行します
機能
22 種類の出力形式
PDF、DOCX、HTML、LaTeX、CSV、JSON、XML、XLSX、RTF、PNG、TXT、Markdown に加え、Slack、Discord、JIRA、Confluence、AsciiDoc、RST、MediaWiki、BBCode、Textile、Org Mode、Email HTML にエクスポートできます。
一括変換
1 回の batch_convert 呼び出しで、複数の Markdown ドキュメントを複数の形式に変換できます。項目と形式の組み合わせごとにエラーが分離されるため、1 つの失敗がほかの処理を妨げることはありません。
数式とコードを第一級市民として扱う
KaTeX 数式表現と構文ハイライト付きコードブロックを完全にサポートしています。$\sqrt{x^2 + y^2}$ や Python のスニペットは、どの形式に変換しても正しく保持されます。
バイナリのスマートな処理
バイナリ形式(PDF、DOCX、XLSX、PNG)の場合、生の base64 がチャットに出力されることはありません。サーバーは実行可能な案内を返すため、AI はファイルパスに保存する方法を把握できます。
ドキュメントの分析と修復
チャットを離れることなく、Markdown の lint、書式の自動修復、コードブロックとリンクの抽出、目次の生成、ドキュメント統計の包括的な取得ができます。
GFM(GitHub Flavored Markdown)
表、タスクリスト、取り消し線、自動リンクを remark-gfm で正しく解析します。
Puppeteer 対応の PDF と PNG
PDF と画像のエクスポートではヘッドレス Chromium を使用し、CSS スタイリング、KaTeX 数式、構文ハイライト、印刷に最適化されたレイアウトを備えた、ピクセル単位で正確なレンダリングを実現します。
自己完結型
外部 API への実行時依存はありません。すべてローカルで動作します。データがコンピューターの外に送信されることはありません。
アーキテクチャ
┌─────────────────────────┐
│ AI Client │
│ (Claude, Copilot, │
│ Cursor, Windsurf) │
└──────────┬──────────────┘
│ MCP Protocol (stdio / HTTP)
▼
┌─────────────────────────┐
│ AI Answer Copier │
│ MCP Server (34 tools) │
│ │
│ ┌── Conversion ────────┐│
│ │ remark/rehype, docx, ││
│ │ puppeteer, xlsx, ││
│ │ CSV/JSON/XML/RTF/ ││
│ │ LaTeX/TXT parsers ││
│ └──────────────────────┘│
│ ┌── Platform ──────────┐│
│ │ Slack, Discord, JIRA,││
│ │ Confluence, AsciiDoc,││
│ │ RST, MediaWiki, ││
│ │ BBCode, Textile, Org ││
│ └──────────────────────┘│
│ ┌── Batch ─────────────┐│
│ │ items[] × formats[] ││
│ │ 22 formats, isolated ││
│ └──────────────────────┘│
│ ┌── Analysis ──────────┐│
│ │ Code blocks, links, ││
│ │ TOC, stats, structure││
│ └──────────────────────┘│
│ ┌── Repair ────────────┐│
│ │ Lint, auto-repair ││
│ └──────────────────────┘│
│ ┌── Import ────────────┐│
│ │ HTML → Markdown ││
│ └──────────────────────┘│
└─────────────────────────┘
v2.1.0 の新機能
このリリースでは、ローカル(npx)とリモートの Vercel MCP トランスポートの両方に対して、8 件のロジック修正を行い、堅牢性を高めました。
| # | 修正内容 | 対象 |
|---|---|---|
| 1 | エラー発生時にブラウザーが閉じられない — browser.close() の前後を try/finally で囲み、PDF/PNG の処理に失敗しても Chromium が残らないようにしました | 両方のトランスポート |
| 2 | generate_html に KaTeX CSS がない — ビューポートメタタグ、KaTeX スタイルシート(SRI ハッシュ)、数式を正しく表示するためのインラインスタイル一式を復元しました | Vercel /api/mcp |
| 3 | convert_to_html のスタイルが不完全 — ローカルの出力と一致するよう、SRI 整合性ハッシュ、テーブルの枠線、引用のスタイルを追加しました | Vercel /api/mcp |
| 4 | セッションマップのメモリリーク — instances Map が SESSION_TTL_MS に基づいて 30 分後に古いセッションを破棄するようになりました。McpInstance は lastUsed を追跡します | Vercel /api/mcp |
| 5 | 通常の SSE ストリーム終了時に keepAlive のインターバルがクリアされない — 必ず clearInterval(keepAlive) を呼び出す内側の try/finally を追加しました | Vercel /api/mcp |
| 6 | SDK 内部の _initialized へのアクセス — 裸の @ts-ignore を typeof ガードに置き換え、SDK のアップグレード後もサーバーが正常にエラー処理できるようにしました | Vercel /api/mcp |
| 7 | 入力サイズの検証がない — サイズの大きすぎるペイロードによる CPU/メモリの過剰消費を防ぐため、すべてのツール呼び出しに 1 GB のハードリミット(MAX_INPUT_BYTES)を追加しました | 両方のトランスポート |
| 8 | DELETE メソッドで新しいセッションが作成される — DELETE の場合、ハンドラーが直ちに 200 を返すようになり、意図しないセッションが作成されなくなりました | Vercel /api/mcp |
既知の制限事項
- PDF/PNG にはローカルの Chromium が必要です —
convert_to_pdfとconvert_to_imageはヘッドレスブラウザーを起動します。npxでは問題なく動作しますが、Vercel の無料プランでは利用できません(Chromium が同梱されていないため)。自動検出に失敗する場合は、PUPPETEER_EXECUTABLE_PATH環境変数にローカルの Chrome のパスを設定してください。 - Vercel 上の Chromium のバージョン — リモートエンドポイントでは、v131.0.1 に固定された tar を使用する
@sparticuz/chromium-minを使用します。Vercel が Lambda ランタイムを更新した場合は、CHROMIUM_TAR_URL環境変数の更新が必要になることがあります。 - 入力サイズの上限は 1 MB です — すべてのツール呼び出しで、1 MB を超える入力は拒否されます。変換の前に、大きなドキュメントをセクションごとに分割してください。
- セッション TTL(リモートのみ) — Vercel エンドポイントのセッションは、30 分間操作がないと期限切れになります。長時間実行するステートフルなワークフローでは、定期的にキープアライブ呼び出しを行ってください。
開発
# Clone the repository
git clone https://github.com/XJTLUmedia/AI_answer_copier.git
# Web app
npm install
npm run dev
# MCP server
cd mcp-server
npm install
npm run dev # hot reload
npm run build # production build
npm run inspector # test with MCP Inspector
技術スタック
| コンポーネント | 技術 |
|---|---|
| MCP SDK | @modelcontextprotocol/sdk |
| Markdown パーサー | unified + remark + rehype |
| 数式のレンダリング | remark-math + rehype-katex |
| Word エクスポート | docx |
| Excel エクスポート | xlsx |
| PDF/PNG エクスポート | puppeteer |
| スキーマ検証 | zod |
| ランタイム | Node.js (ESM) |
コントリビューション
コントリビューションを歓迎します。新しいエクスポート形式、バグ修正、ドキュメントの改善など、ぜひプルリクエストをご検討ください。
- リポジトリをフォークします
- 機能ブランチを作成します
- プルリクエストを送信します
ライセンス
教育者が、教育者のために開発しました。
週に 5 時間を取り戻しましょう。書式設定は AI に任せてください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。