MarsDawn について
marsdawn-mcp は macOS 向けの MCP サーバーで、既存の marsdawn コマンドラインツールを使って Markdown を PDF に出力し、MarsDawn アプリでファイルを開きます。シェルを持たないクライアントにも、許可フォルダー内に限定した操作を提供します。
主な機能
- 01Markdown を PDF に出力
- 02MarsDawn で Markdown ファイルを開く
- 03PDF のテーマと用紙サイズを指定
- 04許可フォルダー内にファイル操作を制限
- 05CLI の結果を構造化して返却
活用シーン
- 01シェルのないクライアントから Markdown PDF を生成
- 02指定した Markdown ファイルを MarsDawn で開く
- 03許可フォルダーにレンダリング済み PDF を出力
MCP 対応
MCP サーバーは export_markdown_to_pdf と open_in_marsdawn の 2 つのツールを公開し、許可フォルダー設定とクライアントの roots でパスを制限します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
marsdawn-mcp
macOS 上で、すでにインストールされているコマンドラインツール
marsdawnを実行して、AI エージェントが Markdown を PDF にエクスポートしたり、MarsDawn アプリで Markdown ファイルを開いたりできる MCP サーバーです。シェルを持たないクライアント向けの手段です。シェルを利用できる場合は、marsdawn を直接操作するほうが簡単です。
最初のリリース 0.1.0 は MCP バンドル marsdawn.mcpb で、リリースに添付されています。
最新リリースの 0.2.4 は、MCP Registry に dev.southern-light.mcp/marsdawn として掲載されています。
できること
ツールは 2 つです。
export_markdown_to_pdf
marsdawn export <input> --json を実行し、CLI の JSON 結果を構造化コンテンツとして返します。PDF はコマンドラインからエクスポートした場合と同じように、MarsDawn のプレビューと同じレンダリングで出力され、Mermaid 図も含まれます。
| 引数 | |
|---|---|
input | 許可されたフォルダー内にある Markdown ファイルの絶対パスです。必須です。 |
output | 許可されたフォルダー内にある PDF の絶対パスで、末尾が .pdf である必要があります。デフォルトは、入力ファイルのパスの拡張子を .pdf にしたものです。 |
theme | dawn、classic、modern、vivid のいずれかです。 |
paper | a4 または letter です。 |
force | 既存の PDF を置き換えます。指定しない場合、既存の PDF はそのまま残り、ツールがその旨を伝えます。 |
allowRemoteImages | レンダリング時に Web 上の画像を読み込みます。デフォルトでは無効です。 |
open_in_marsdawn
marsdawn open <path>[:line] --json を実行し、CLI の JSON 結果を返します。Mac App Store から MarsDawn アプリをインストールする必要があります。ファイルごとに一度呼び出せば十分です。開いたウィンドウは、その後のファイルの編集に自動的に追従するため、再度呼び出す必要はありません。
| 引数 | |
|---|---|
path | 許可されたフォルダー内にある、既存の Markdown ファイル(フォルダーではありません)の絶対パスです。必須です。 |
line | 移動先の行番号です。1 から 999999999 まで指定できます。 |
background | MarsDawn を前面に表示せずに開きます。 |
まだ folder には対応していません。初期ビルドの marsdawn open --folder はアプリでエラーダイアログを表示するため、このツールでは提供していません。アプリ 1.1 でフォルダーに対応し、サイトでそれらのフォルダー用の open.v3.json が公開され次第、対応します。
どちらのツールも、失敗した場合は CLI のメッセージと次の手順を含むエラーを返します。MarsDawn アプリが見つからない場合(open_in_marsdawn のみ)も、例外をスローするのではなく、同じ形式で返します。
読み取りと書き込みが可能な場所
どちらのツールも、許可したフォルダー内でのみ動作します。指定方法は2つあり、サーバーは両方を組み合わせて使用します。
- 拡張機能の設定。「Allowed folders」は初期値のない複数値設定です。Documents フォルダーなど、使用したいフォルダーを追加して保存してください。各フォルダーがサーバーへの引数になります。追加するまでは、すべての呼び出しがその旨を示すメッセージとともに拒否されます。(初期値を設定しても役に立ちません。Claude Desktop はフォルダー設定の初期値にある
${DOCUMENTS}のようなプレースホルダーを展開せず、必須設定にすると、保存するまでサーバーがまったく起動しなくなります。) - **MCP ルート。**クライアントが
roots機能を提供している場合、サーバーは各ツール呼び出し時に現在のルートを問い合わせます(クライアントが変更を通知すると約束している場合に限り、キャッシュします)。ルートはワークスペースに関するクライアント側の申告であり、このサーバーが制御するものではありません。サンドボックスの範囲は最も広い情報源と同じになるため、エージェントが自分でワークスペースを広げられるクライアントでは、自分自身の制限範囲も広がります。Claude Desktop はルートを送信しませんが、Claude Code は送信します。
ソースから実行する場合、フォルダーは位置引数です。
node /absolute/path/to/marsdawn-mcp/server/index.js /Users/me/Documents /Users/me/Projects
**フォルダーもルートもない場合、すべての呼び出しが拒否されます。**サーバーが確認できない呼び出しも同様です。クライアントからの roots/list の応答がエラー、不正な形式、または空の場合、その呼び出しではルートが一切ないものとして扱われ、すべての場所が許可されることはありません。
marsdawn の起動前に、以下のルールが適用されます。
- すべてのパスは通常の絶対パスでなければなりません。
.または..の要素、//、末尾のスラッシュは使用できません。これにより、サーバーが確認する文字列と CLI が受け取る文字列が一致します。 - パスが含まれるフォルダーは、シンボリックリンクを解決した後も許可フォルダー内になければならず、ファイル自体も同様です。フォルダーの外へ出るシンボリックリンクは、どちら側からたどっても拒否されます。
outputは.pdfファイルを指定し、シンボリックリンクではなく、通常のファイルでなければなりません。outputが指定されていない場合は、<input without its extension>.pdfが設定され、同じ方法で確認した後、--outputとして CLI に渡されます。- 許可範囲外のパスは、存在するかどうかにかかわらず、許可フォルダーを示す拒否メッセージとともに拒否されるため、どちらのツールもその場所に何があるかを明かしません。ただし、このメッセージからモデルにフォルダーパスが伝わります。これは、エージェントが手探りで再試行せずに有効なパスを選べるようにするための意図的なトレードオフです。
- 許可フォルダー内に存在しないファイルはそのまま渡されるため、CLI 独自の
input_not_foundと次の手順が返されます。その場所にあるシンボリックリンクのリンク先を解決できない場合は、ファイルがないとはみなされません。フォルダーの外へ出るリンクと同じ理由で拒否されます。
この仕組みで行われないこと:許可フォルダー内では、force を指定すると、コマンドラインと同じように既存の PDF が置き換えられます。また、出力先がハードリンクの場合、PDF の置き換えによって変わるのはディレクトリエントリであり、ファイルのバイト列ではありません。CLI は出力先の隣に一時ファイルをレンダリングして差し替えるため、もう一方のリンクには古い内容が残ります。どちらも CLI の動作であり、変更はありません。
要件
- macOS、および
marsdawn0.5.0 以降:brew install redtear1115/tap/marsdawn。 - Node.js 20 以降。
サーバーは、MARSDAWN_PATH が設定されている場合はそのパスで marsdawn を探し、次に PATH、続いて /opt/homebrew/bin と /usr/local/bin を探します。
ソースから実行する
git clone https://github.com/redtear1115/marsdawn-mcp.git
cd marsdawn-mcp
npm ci --omit=dev
次に、作業を許可するフォルダーを引数として指定し、stdio 経由で node /absolute/path/to/marsdawn-mcp/server/index.js を実行するよう MCP クライアントを設定します(読み取りと書き込みが可能な場所を参照)。
開発
npm ci
npm test # unit and stdio tests, against a fake marsdawn
npm run check-schemas # the vendored schemas match the ones the site publishes
npx mcpb validate manifest.json
node scripts/check-server-json.js # server.json's fileSha256 matches the release asset
schemas/ には、https://marsdawn.southern-light.dev/schemas/cli/ で公開されている JSON Schema のコピーが格納されています。スキーマはサイト側で作成されるため、ここで編集せず、公開されているファイルをコピーして更新してください。
ライセンス
Apache License 2.0 です。LICENSEを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。