idmly: HTML to InDesign (IDML) について
idmly-mcpは、自己完結型HTMLデザインを編集可能なAdobe InDesign IDMLファイルに変換します。AIエージェントとInDesignを使うデザイナー向けで、テキスト、表、SVG、CSS図形を編集可能な要素として出力します。
主な機能
- 01HTML文字列、ファイル、公開URLの変換
- 02編集可能なテキストフレームと段落スタイルの生成
- 03表とベクター図形の保持
- 04必要なフォントとジオメトリ検査結果の提示
- 05エンジンとライセンス状態の確認
活用シーン
- 01HTMLレイアウトをInDesign文書に変換
- 02編集可能なパンフレットやスライドの作成
- 03HTMLの表をInDesignのネイティブ表に変換
MCP 対応
MCP サーバーとして、変換と状態確認のツールをMCPクライアントに提供します。stdioでローカル実行でき、Streamable HTTPでホスト済みエンジンにも接続できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | いいえ | ホストされた .html デザインの公開 HTTPS URL(共有リンクやアプリリンクではなく、直接リンク)。 |
| html | string | いいえ | 変換する完全な HTML ドキュメント(自己完結型:CSS はインライン、フォントは Google Fonts 経由または埋め込み、画像は data URI または絶対 URL)。 |
| name | string | いいえ | 出力のベース名(拡張子なし)。デフォルトはソースファイル名または 'design' です。 |
| path | string | いいえ | 変換するローカル .html ファイルの絶対パスまたは相対パス。このファイルのみアップロードされます。 |
| out_dir | string | いいえ | 出力を書き込むディレクトリ。デフォルトでは IDMLY_OUT_DIR、次にソースファイルのディレクトリ、それ以外の場合は現在のディレクトリです。 |
| platform | enum | いいえ | どのプラットフォームの InDesign でファイルを開くかを指定します(グリフのフォールバックフォントを選択します)。デフォルトはこのマシンです。不明なプラットフォームでは無料の Noto/Source Han フォールバックフォントが使用されます。mac | win |
詳細
idmly-mcp
すでにお使いのAIエージェントから、自己完結型のHTMLデザインを編集可能なAdobe InDesignファイル(.idml)に変換できます。これは、Model Context Protocolサーバーとして公開されたidmlyエンジンです。Claude Code、Cursor、Codex、Windsurf、Claude Desktopから、完成したデザインをそのままInDesignに渡せます。
デザイン内の最も詳細な2ページは、キーなしで無料変換できます(変換結果には対象ページが記載されます)。$49の買い切りライセンスを購入すると、ドキュメント全体を無制限に変換でき、ウェブサイトとこのツールの両方で利用できます。
インストール
Node 20以降が必要です。サーバーはnpxで実行でき、リポジトリをクローンする必要はありません。キーなしで起動すれば、無料トライアルをすぐに利用できます。
Claude Code
claude mcp add idmly -- npx -y idmly-mcp
Cursor、Windsurf、Claude Desktop(mcp.json / claude_desktop_config.json)
{
"mcpServers": {
"idmly": { "command": "npx", "args": ["-y", "idmly-mcp"] }
}
}
Codex CLI(~/.codex/config.toml)
[mcp_servers.idmly]
command = "npx"
args = ["-y", "idmly-mcp"]
ライセンスをお持ちの場合は、購入確認メールに記載されたキーを環境変数として追加します。
claude mcp add idmly -e IDMLY_LICENSE_KEY=<your key> -- npx -y idmly-mcp
"env": { "IDMLY_LICENSE_KEY": "<your key>" }
env = { IDMLY_LICENSE_KEY = "<your key>" }
ツール
convert_to_indesign
次のうち、いずれか1つだけを指定してください。
| 引数 | 内容 |
|---|---|
html | 文字列として渡すHTMLドキュメント全体 |
path | ローカルの.htmlファイル(アップロードされるのはこのファイルのみ) |
url | ホストされた.htmlへの公開httpsリンク |
省略可能な引数:out_dir(出力先。デフォルトはソースファイルのフォルダー、または現在のディレクトリ)、name(出力ファイルのベース名)、platform(InDesignでファイルを開く環境。macまたはwin。グリフの代替フォントを選択します。デフォルトはこのマシンの環境です)。
<name>.idmlを書き出し、ファイルのパス、変換したページ、InDesignで有効にする必要があるフォント、ジオメトリチェックの結果を返します。画像を含むデザインの場合、.idmlとLinks/ディレクトリを格納したフォルダーが返されます。両方を同じ場所に置いておけば、InDesignがすべての画像を見つけます。トライアルの出力ファイル名は<name>-trial.idmlです。
idmly_status
エンジンに接続できるかどうか、およびライセンスキーが設定されているかどうかを報告します(ここではキーの有無のみを確認し、キーは最初の変換時に検証されます)。
変換に適したHTMLを書く
- 各ページは、
page(またはslide)クラスを持つ固定サイズのブロックにします。2ページの見開きはspreadクラスにします。一般的なサイズは、Letterが816×1056px、A4が794×1123px、スライドが1920×1080pxです。overflow: hiddenを指定してください。マーカーのない固定幅のキャンバスは1ページとして変換されます。width: 100%の流動的なページには固有のサイズがありません。 - ファイルは自己完結型にしてください。CSSとJSはインラインで記述し、フォントはGoogle Fontsから取得するか埋め込み、画像はデータURIまたは絶対URLで指定します。ファイルと同じ場所にあるスタイルシートや画像はアップロードされません。
- グラフはラスター画像ではなく、インラインSVGまたはHTMLとして描画すると、編集可能な状態が保たれます。
- 処理が終わらないスクリプト(自身を再度トリガーするMutationObserverやリサイズハンドラーなど)は避けてください。エンジンはページを1回レンダリングしてサイズを測定し、InDesignのフレームとして再構築します。
テキストは段落スタイル付きの編集可能なテキストフレームになり、表は表のまま、SVGやCSSの図形はベクターオブジェクトになります。
デザイナーが編集を続けられるテキスト
テキストのマークアップ方法によって、テキストが配置されるフレームの数と、段落スタイルに引き継がれる内容が決まります。
- 1つのボックス内で連続する段落は、それぞれ1段落を含む1つのテキストフレームになります。段落間は
margin-topまたはmargin-bottomで空けます。余白は、マージンを設定した段落の前後のアキとして反映されます。空のスペーサー段落(<p> </p>)を使っても、フレームを分割せずに保てます。 padding-leftは左インデント、text-indentは1行目のインデントです。そのため、padding-left: 46pt; text-indent: -46ptはぶら下がりインデントになります。- 実際のタブ文字(
white-space: preまたはpre-wrapの中)は、CSS グリッド上のタブ位置に配置されます。tab-sizeを長さで指定すると(tab-size: 46pt)、タブ位置を任意の場所に設定できます。 - 2列のリスト(目次、価格、クレジット)には
<table>が最適です。セルごとに段落スタイルが設定されたネイティブの InDesign テーブルに変換されます。 - 段落スタイル名はタグと要素の最初のクラスから生成されます(
<p class="caption">は「Body · caption」になります)。名前を直接指定するには、data-idml-style="Cover Dates"を追加します。 - 連続したテキストを含むボックスは、同じ
data-idml-thread="cv"をそれぞれに指定するとリンクできます。文書内の順序(またはdata-idml-thread-order="1"、"2"、...)に従って、フレームからフレームへつながる1つのストーリーに変換されます。最後のフレーム以外はテキストに合わせたサイズに固定されるため、行が追加されると次のフレームへテキストが送られます。ボックスが段落の途中から始まる場合は、data-idml-thread-continuesを追加すると、最初の段落が前のボックスの最後の段落につながります。InDesign ではつながったストーリーが再構成されるため、HTML と比べてフレーム境界をまたぐ位置が変わることがあります。 - 段落内のインライン
display: inline-block要素は独立したボックスとなり、専用のフレームに変換されます。フォントや色だけを変える範囲には、通常の<span>を使います。
失敗した場合
| 結果 | 意味 | 対処方法 |
|---|---|---|
| キーなしの 402 | このデザインまたはこの時間の無料トライアルを使い切っています | 結果に料金とチェックアウトリンクが含まれています |
| キーありの 402 | キーが受け付けられませんでした | キーを確認してください。以前は使えていた場合は、~/.idmly/instances.json を削除すると、次の呼び出しで再度アクティベーションされます |
| 413 | サイズ上限を超えています(トライアルは 15 MB、ライセンス版は 50 MB) | 画像を縮小または再エンコードするか、画像をホストして絶対 URL を使用してください |
| 422 | 何もレンダリングされなかったか、スクリプトが完了しませんでした | 不足しているアセットをインライン化し、終了しないスクリプトを削除してください |
| 429 / 503 | レート制限に達したか、ライセンスサービスに接続できません | retry_after_seconds の後に再試行してください |
エンジンは常に稼働しているため、コールドスタートはありません。ツールはアップロード前に応答を確認します(最大約 25 秒)。再デプロイ中などにアップロードが途中で切断された場合は、自動でもう一度送信されるため、一時的な障害で発生するのは待ち時間だけで、エラーにはなりません。
大規模なデザインのレンダリングには数分かかることがあります。一部のクライアントでは、ツール呼び出しのタイムアウトがデフォルトで 60 秒に設定されています。大きなドキュメントを扱う場合は、クライアントごとのツールタイムアウト(たとえば Claude Code の MCP_TOOL_TIMEOUT)を延長してください。
環境変数
| 変数 | デフォルト | 用途 |
|---|---|---|
IDMLY_LICENSE_KEY | なし(無料トライアル) | idmly.com で取得したライセンスキー |
IDMLY_OUT_DIR | ソースの隣 | デフォルトの出力ディレクトリ |
IDMLY_ENGINE_URL | ホストされたエンジン | セルフホスト可能なエンジンを使う場合の上書き先 |
キーは初回使用時にアクティベーションされます。アクティベーション ID は、キーのハッシュをキーとする ~/.idmly/instances.json に保存されます。このツールがキー自体をディスクに書き込むことはありません。サーバーを実行する各マシンは、ライセンスの利用枠から1つのアクティベーションを使用します。
ホスト型エンドポイント
ローカルプロセスを実行したくない場合、エンジンは Streamable HTTP 経由の MCP にも対応しています。
https://idmly-production.up.railway.app/mcp
Authorization: Bearer <your key> (omit the header for the free trial)
claude.ai(または Claude デスクトップアプリ)で、Customize → Connectors → Add custom connectorを選択して URL を貼り付け、No sign-inを選びます。次にRequest headersでauthorizationを選択し、値にBearer <your key>を入力します。キーの前にBearerと半角スペースを付けてください。Claude は入力した値をそのまま送信し、独自のスキームは追加しません。エンジンはキーのみの値も読み取るため、<your key>だけでも機能します。それ以外の形式(Basic …、Token …)でも接続できますが、初回の変換ではトライアルとして実行せず、代わりに変更すべき内容を案内します。ダイアログにRequest headersのセクションがない場合、お使いの Claude 組織ではまだそのベータ版を利用できません。代わりに上記のローカルサーバー(IDMLY_LICENSE_KEYを設定してnpx idmly-mcpを実行)を使用してください。
リモートツールはディスクに書き込めないため、このエンドポイントはファイルパスの代わりに一度限りのダウンロードリンクを返します。ファイルは取得されるとすぐに削除され、取得されない場合も 10 分後に削除されます。同じエンドポイントは OpenAI Responses API のmcpツールおよび Agents SDK でも動作します。
プレーンな REST では、POST /convertにマルチパート形式のfile(またはurl)と、license_key、instance_idを指定します。ライセンスを使った初回のレスポンスにはX-Idmly-Instanceヘッダーが含まれます。その値を以降のすべての呼び出しでinstance_idとして送り返してください。そうしないと、呼び出しごとにライセンスに対して新しいデバイスが有効化されます。レスポンスは.idmlファイルそのものです。デザインに画像が含まれる場合は、converted.idmlとLinks/を含むapplication/zipが返されます。
プライバシー
アップロードされたデザインは、変換済みファイルが返されるとすぐにエンジンから削除されます。ホスト型 MCP エンドポイントでは、エージェントが取得できるよう、変換済みファイルは推測不可能な一度限りのリンクの先に最大 10 分間保管され、その後削除されます。アカウントは不要です。エンジンは自社管理の利用状況台帳(回数、結果、国)を保持しますが、ファイルやキーは保持しません。
開発
npm install
npm test # type-checks, bundles, then runs the client against a stub engine (no network)
公開パッケージにはランタイム依存関係がありません。npm run buildを実行すると、MCP SDK と zod がdist/index.jsにバンドルされるため、npxユーザーはテストで実行されたものとまったく同じファイルを取得できます。依存関係の更新は毎週 Dependabot のプルリクエストとして届き、マージすると GitHub Actions によってプロベナンス付きの新しいパッチバージョンが公開されます。
ライセンス
このクライアントは MIT ライセンスです。idmly エンジンはホスト型サービスです。詳しくはidmly.com/legalをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。