Doodleworks MCP について
Doodleworks MCPは、記事やテーマを手描きの概念イラスト集に変換する、MCP対応AIホスト向けのサーバーです。チャット内のビューアーで画像を閲覧し、個別に再生成してPNGをダウンロードできます。
主な機能
- 01テーマを個別のイラストに分解
- 02Tinkuが装置を操作する概念画
- 03チャット内でギャラリーを閲覧・拡大
- 04個別イラストの再生成とPNG保存
- 05OpenAIまたはGeminiの画像APIに対応
活用シーン
- 01ブログ記事の概念をイラスト化
- 02SNS投稿からイラスト集を作成
- 03対象読者に合わせた解説画像の企画
MCP 対応
ローカルstdioのMCPサーバーで、イラスト計画用プロンプトと画像の生成・再生成ツールを提供します。MCP Apps対応クライアントではインタラクティブな画面も表示できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y doodleworks-mcpOPENAI_API_KEYシークレットOpenAI API key (default provider). Provide this or a Gemini key.GEMINI_API_KEYシークレットGemini API key (GOOGLE_API_KEY also works). Provide this or an OpenAI key.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
3掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| title | string | いいえ | セットのタイトル。 |
| quality | enum | いいえ | 画像品質(OpenAI)。低いほど高速で低コストです。デフォルトは DOODLEWORKS_QUALITY 環境変数、または 'low' です。low | medium | high | auto |
| resolution | enum | いいえ | サイズ階層(デフォルトは 1k。2k はインライン表示でより多くのリソースを使用します)。1k | 2k |
| illustrations | array | はい | 順番に並べたイラスト(1-10)。各イラストはデフォルトで 16:9 です。オプションの 21:9 ヒーロー画像を先頭に配置できます。 |
| styleReference | string | いいえ | セット全体に適用する任意の描画スタイル参照(スタイル調整のみ——すっきり均一な線幅、純白の背景、余白、控えめな表現。参照画像のキャラクター、レイアウト、テキストは絶対に使用しません)。ライブラリ ID、data-URI、またはローカルパスを指定できます。イラストごとの styleReference が優先されます。未設定(かつ DOODLEWORKS_STYLE_REF 環境変数もない場合)は、エンジンのテキストのみのスタイルガイダンスを出力します。 |
詳細
Doodleworks MCP
ブログ投稿、記事、X の投稿など、どんなアイデアでも、要点を説明する手描きの「Tinku」イラストに変換し、AI ホスト内で表示します。
画像 API キー(OpenAI または Gemini)はご自身で用意してください · ローカルの stdio サーバー · ホストのチャット内でページをめくり、再生成し、ダウンロードできます。
クイックスタート · ホストに追加 · 使い方 · パラメーター · ビューアー · 例 · 設定 · ソースからビルド · 仕組み
Doodleworks は、1つのアイデア(またはブログ投稿、記事、X の投稿全体)を、要点を説明するすっきりとした線画に変換します。1枚につき1つのアイデアを描きます。テーマをそのまま描くことはありません。代わりに、それぞれのコンセプトを取り出し、アプリ独自のキャラクターである Tinku が実際に操作する、ローテクな仕掛けとして表現し直します。真っ白な背景に自信に満ちた黒い線を描き、赤、オレンジ、青の手書きラベルを少し添えます。 AI ホストにイラスト一式を依頼すると、Doodleworks がそれらを描画し、チャット内にインタラクティブビューアーを直接開きます。画像を順に表示したり、気に入らない画像を再生成したり、PNG をダウンロードしたりできます。
Claude Desktop のインタラクティブビューアー:イラストを順に表示し、画像を再生成して、PNG をダウンロードできます(タイトルを任意で焼き込めます)。
✨ 主な特徴
- 🖐️ 手描き風で、1 枚につき 1 つのアイデア: 白地にすっきりとした黒い線画と、赤/オレンジ/青のラベルを少しだけ使用します。文字どおりのグラフや図にはしません。
- 🧩 クリップアートではなく、概念を表現: 重要なアイデアをそれぞれ、アプリの定番キャラクターである Tinku が実際に操作する、ローテクな仕掛けとして描きます。
- 🖼️ チャット内のインタラクティブビューアー: 対応ホストでは、チャット内でイラストを表示したり、ズームしたり、画像を 1 枚ずつ再生成したり、PNG をダウンロードしたりできます。
- 🔑 自分のキーを使用: OpenAI または Gemini に対応しています。キーはサーバー側に保持され、ビューアーや iframe に送信されることはありません。
- ⚡ インフラ不要:
npxの 1 行で起動するローカル stdio サーバーです。クローンも、ビルドも、データベースも不要です。
🚀 クイックスタート
クローンもビルドも不要です。npx が公開済みの doodleworks-mcp パッケージを npm から取得して実行します。描画には画像 API キーが必要ですが、インストールだけなら不要です。
1. 画像キーを取得します。 次のいずれか 1 つを使用します。
OPENAI_API_KEY:OpenAI GPT Image(デフォルトのプロバイダー)GEMINI_API_KEY(またはGOOGLE_API_KEY):Gemini 3 Pro Image(「Nano Banana Pro」)
初めての方は、OPENAI_API_KEY から始めてください。デフォルトであり、以下のすべての例もこれを使って生成しています。設定するキーは 1 つだけでよく、両方は必要ありません。
2. AI ホストに追加します。 次の内容をホストの MCP 設定に追加します(ここでは Claude Desktop の claude_desktop_config.json を示しています。その他のホストについては、AI ホストに追加するをご覧ください)。
{
"mcpServers": {
"doodleworks-mcp": {
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "sk-..." }
}
}
}
3. 普通の言葉で依頼します。 ホストを再起動してから、次のように入力します。
doodleworks を使って、住宅所有者向けに、ヒートポンプが家を暖める仕組みを説明するイラストを、1 枚につき 1 つのアイデアで 6 枚作成してください。
ヒント
各イラストのプロンプトはモデルが作成します。トピックを説明するだけでかまいません。グラフィカルホストではギャラリーとともにビューアーが開きます。ターミナルホストではツールの出力のみが表示されます(描画済み画像ではなく、テキストの概要です)。
🔌 AI ホストに追加する
Doodleworks は MCP App で、ツールとインタラクティブ UI の両方を提供します。以下のすべてのホストでツールを実行できますが、インラインビューアー(このアプリの主な機能)が表示されるのは、MCP Apps UI に対応したホストのみです。
ヒント
インラインビューアーを使いたい場合は、 Cursor、VS Code、Claude Desktop、または Goose を使用してください。Claude Code と Windsurf ではツールを実行できますが、ビューアーは表示できません(ツールの出力が表示されます)。
| ホスト | ツールを実行 | ビューアーを表示 | 備考 |
|---|---|---|---|
| Cursor(2.6 以降) | ✅ | ✅ | 最も使いやすい環境 |
| VS Code(1.109 以降) | ✅ | ✅ | Copilot エージェントモード |
| Goose Desktop(1.19.1 以降) | ✅ | ✅ | ビューアーは実験的機能です |
| Claude Desktop | ✅ | ✅ | 設定編集後は完全に終了してから再起動してください |
| Claude Code | ✅ | ❌ | ターミナルには WebView がありません |
| Windsurf | ✅ | ❌ | ツールのみ |
| MCPJam / basic-host(開発用) | ✅ | ✅ | ビューアーの表示に最も確実な方法 |
メモ
以下のすべての設定では公開済みパッケージ(
npx -y doodleworks-mcp)を使用するため、クローンもビルドも不要です。手元にチェックアウトしたコードを編集する場合は、コマンドをnpx -y tsx /ABSOLUTE/PATH/doodleworks-mcp/main.ts --stdioに置き換えてください(ソースからビルドするを参照)。エクスポートした画像キーを使用してください。
Cursor:フルビューアー(Cursor 2.6 以降)
プロジェクト内に .cursor/mcp.json を作成します(すべてのプロジェクトで使う場合は ~/.cursor/mcp.json を作成します)。
{
"mcpServers": {
"doodleworks-mcp": {
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "${env:OPENAI_API_KEY}" }
}
}
}
次に、Cursor Settings → Tools & Integrations を開いて、doodleworks が有効になっていることを確認し、Agent チャットから呼び出します。${env:OPENAI_API_KEY} を使うと、キーをファイルに書かずに済みます(シェルで設定してください)。または、sk-... を直接貼り付けます。インラインビューアーには Cursor 2.6+ が必要です。それ以前のバージョンではツールを実行できますが、ビューアーは表示されません。
VS Code:完全なビューアー(VS Code 1.109+、GitHub Copilot エージェントモード)
VS Code では servers キーを使用します(mcpServers ではありません)。また、キーを安全に入力するよう求めることができます。.vscode/mcp.json を作成します。
{
"inputs": [
{ "type": "promptString", "id": "openai-api-key", "description": "OpenAI API key", "password": true }
],
"servers": {
"doodleworks-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "${input:openai-api-key}" }
}
}
}
サーバー項目の上にある Start をクリックする(または MCP: List Servers を実行する)と、キーの入力を求められます。キーを入力したら、Copilot Chat → Agent mode を開き、ツールを呼び出します。ビューアーはインラインで表示されます。VS Code 1.109+ が必要です(MCP Apps はプレビュー版です)。
Goose Desktop:完全なビューアー(Goose Desktop 1.19.1+、試験的)
Goose は YAML を使用します。~/.config/goose/config.yaml を編集します(Windows の場合:%APPDATA%\Block\goose\config\config.yaml)。
extensions:
doodleworks-mcp:
type: stdio
name: doodleworks-mcp
enabled: true
cmd: npx
args: ["-y", "doodleworks-mcp"]
envs:
OPENAI_API_KEY: "sk-..."
timeout: 300
または、UI を使用します:Sidebar → Extensions → Add custom extension(Type:Standard IO。npx -y doodleworks-mcp を貼り付け、キーを追加します)。追加したら Goose を再起動してください。ビューアーはデスクトップ版専用で、MCP Apps のサポートは試験的です。
Claude Desktop:完全なビューアー
Settings → Developer → Edit Config を開きます(または、macOS では ~/Library/Application Support/Claude/claude_desktop_config.json、Windows では %APPDATA%\Claude\claude_desktop_config.json を編集します)。
{
"mcpServers": {
"doodleworks-mcp": {
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "sk-..." }
}
}
}
保存してから、Claude Desktop を完全に終了して再起動します(ウィンドウを閉じるだけでなく、Cmd+Q を押してください)。チャットにビューアーがインラインで表示されます。(古いビルドでギャラリーではなくテキストの代替表示だけが表示される場合は、Claude Desktop を更新してください。)
Claude Code(ターミナル):ツールのみ、ビューアーなし ❌
claude mcp add --scope project --transport stdio --env OPENAI_API_KEY=sk-... \
doodleworks -- npx -y doodleworks-mcp
(または、トップレベルに mcpServers ブロックを含むプロジェクトの .mcp.json をコミットします)。ターミナルには WebView がないため、インタラクティブビューアーはここでは表示されません。ツールの出力が表示され、ギャラリーは表示されません。ビューアーを使うには、グラフィカルなホストを使用してください。
Windsurf:ツールのみ、ビューアーなし ❌
~/.codeium/windsurf/mcp_config.json を編集します(Windows の場合:%USERPROFILE%\.codeium\windsurf\mcp_config.json。ファイルがない場合は作成してください)。
{
"mcpServers": {
"doodleworks-mcp": {
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "sk-..." }
}
}
}
Cascade MCP パネルで Refresh を押します(または Windsurf を再起動します)。Windsurf はツールを実行しますが、MCP Apps UI は表示しないため、ビューアーはインラインに表示されません。
ビューアーを確実に表示する(開発用インスペクター) ✅、ローカルチェックアウトが必要です
ビューアーを表示する最も確実な方法は、開発用ホストを使って Streamable HTTP 経由で接続することです(リポジトリをクローンしてください)。
pnpm start # watch-build the viewer + serve on http://localhost:3001/mcp
MCP Apps basic-host または MCPJam inspector の接続先に http://localhost:3001/mcp を指定します。どちらもビューアーを正しく表示できるため、ギャラリーの開発と確認にはこれらの使用をおすすめします。
サーバーを接続したら、ホストに普通の言葉で頼むだけです。モデルがツールを呼び出して、各イラストの prompt も作成するので、自分で書く必要はありません。
プロンプトの例(接続済みの任意のホストに貼り付けます):
doodleworks を使って、ヒートポンプが家を暖める仕組みを説明するイラストを6枚作成してください。対象は住宅所有者で、画像1枚につきアイデアを1つにしてください。
まず計画を立てたい場合:同梱のプロンプトを呼び出します(MCP プロンプトを /mcp__doodleworks-mcp__plan_illustrations として表示するホストで利用できます)。
トピック「ヒートポンプが家を暖める仕組み」(対象:住宅所有者、枚数:6)について、doodleworks の plan_illustrations プロンプトを実行し、その後、計画を使って create_illustrations を呼び出してください。
グラフィカルホスト(Cursor、VS Code、Claude Desktop、Goose)では、ギャラリーとともにビューアーが開きます。Claude Code(ターミナル)にはビューアーがないため、ツールの出力(レンダリングされた画像ではなくテキストの概要)のみが表示されます。
ツールとプロンプト(リファレンス)
plan_illustrations(プロンプト) は、トピックをすぐにレンダリングできるセットに変換します。引数:topic(必須)、audience?、count?、spine?(teaching | persuasion | report | product | knowledge-card)。create_illustrationsはセットをレンダリングし(イラスト1~10枚、1枚ごとに有料レンダリング)、ビューアーを開きます。各promptは、仕掛け+Tinku の動作+Required text only:ブロックで構成されます。サーバーはキャラクター、コンセプトエンジン、ハウススタイルを自動的に追加します。regenerate_illustrationは1枚の画像を再レンダリングします(ビューアーの Regenerate ボタン)。get_illustrationは、レンダリング済みの各画像をビューアーにストリーミングします(アプリ専用。モデルには表示されません)。
すぐに実行できるペイロード(net-ai-stack.json、keep-cool-in-hot-weather.json、tinku-contraptions.json)は examples/ をご覧ください。計画用ドキュメントは doc://doodleworks/* リソースとして提供されるため、別途スキルを用意しなくても、どのホストからでも利用できます。
通常の使い方では、モデルがリクエストからこれらの値を設定します。JSON を手書きする必要はありません。ただし、自然な言葉で指定して調整できます(「21:9 のヒーロー画像にして」「高品質にして」「glp-00 スタイルを使って」「2k で描画して」など)。呼び出しごとの値は、環境のデフォルト値より優先されます。
create_illustrations(セット全体)
| パラメーター | デフォルト | 機能 |
|---|---|---|
illustrations | (必須) | セットの内容と順序です。1~10 個の項目を指定します(各項目は、以下のイラストごとのオブジェクトです)。 |
title | なし | セットのタイトルです。ビューアーに表示され、ダウンロードした PNG に焼き付けることもできます。 |
resolution | 1k | サイズの段階です。1k または 2k を指定します(2k はインライン表示時に負荷が高くなります)。 |
quality | DOODLEWORKS_QUALITY env、それ以外は low | OpenAI の画像品質です。low/medium/high/auto を指定します。低いほど高速で低コストです。Gemini では無視されます。 |
styleReference | DOODLEWORKS_STYLE_REF env、それ以外はなし | セット全体に適用する描画スタイルの参照です。ライブラリ ID、データ URI、または assets/style-references/ 内のファイルを指定できます(ツールから指定されたパスはそのディレクトリ内に制限されます。下記の注を参照してください)。キャラクターやテキストではなく、スタイルのみを調整します。 |
イラストごとの設定(illustrations[] 内の各項目)
| パラメーター | デフォルト | 機能 |
|---|---|---|
prompt | (必須) | 仕掛けと Tinku の動作、さらに Required text only: ブロックを指定します。サーバーがキャラクター、コンセプトエンジン、ハウススタイルを追加します。 |
title | (必須) | このイラストの短いタイトルです。 |
aspect | 16:9 | 標準的なパネルには 16:9、横長のヒーローイラストには 21:9 を指定します。 |
archetype | なし | 任意のレイアウト補助です。process/cycle/stack/taxonomy/matrix/timeline/decision/data-shape/summary を指定します。 |
styleReference | セット全体の値 | このイラストに限り、セット全体の参照を上書きします(同じ値を指定でき、同じ制限が適用されます)。 |
plan_illustrations(計画プロンプト)
| パラメーター | デフォルト | 機能 |
|---|---|---|
topic | (必須) | イラストにするトピックまたはソースです。 |
audience | トピックから推定 | 対象者と、その対象者がすでに知っている内容です。 |
count | モデルが 4~8 を提案 | イラストの数を整数で指定します(スキーマでは文字列として渡されます)。 |
spine | トピックから推定 | 物語の軸です。teaching/persuasion/report/product/knowledge-card を指定します。 |
メモ
styleReferenceは次の順序で解決されます。イラストごとの設定 → セット全体の設定 →DOODLEWORKS_STYLE_REFenv → なし。qualityは セット全体の設定 →DOODLEWORKS_QUALITYenv →lowの順に解決されます。スタイル参照をどこにも指定しない場合、Doodleworks は組み込みのテキストのみのスタイルガイダンスに基づいて描画します。ツールから指定されたstyleReferenceには制限が適用され、ライブラリ ID、データ URI、またはassets/style-references/内のファイルを指定する必要があります。ディスク上の別の場所を指定できるのは、オペレーターが設定したDOODLEWORKS_STYLE_REFenv のみです。ビューアーの Regenerate ボタンは 1 枚のイラストを再描画し、プロンプトを変更しない限り、セットの解像度、品質、スタイルを再利用します。
🖼️ ビューアー
セットのレンダリングが完了すると、チャット内でビューアーが開きます。すべての操作が可能です。
- 閲覧: 前へ/次へボタンまたはサムネイル一覧で切り替えます。オプションの21:9のヒーロー画像が先頭に表示され、16:9のヒント画像が続きます。
- レンダリングしながら表示: 各イラストは完成した時点で表示されるため、セット全体が完成するまで待つ必要はありません。
- 拡大: イラストをクリックすると拡大できます。
- 再生成: 画像モデルの出力は非決定的なため、クリックひとつでイラストを1枚だけその場で再生成できます(セット全体をやり直す必要はありません)。
- ダウンロード: PNGを1枚、またはセット全体を保存できます。Title on PNGにチェックを入れると、作品の下にタイトルをきれいなキャプション帯として埋め込みます。
- ホストに合わせて表示: ホストのライト/ダークテーマとフォントが適用されます。
拡大表示:イラストをクリックすると拡大できます。
🎨 例
以下の各セットは、ひとつのトピックからDoodleworksで生成されました。各パネルにひとつのアイデアを取り上げ、それぞれをTinkuが操作する仕掛けとして描き直しています。(セット全体はassets/style-references/にあります。)
Mounjaro / GLP‑1:患者向けガイド
チルゼパチド(GLP‑1/GIP薬)の仕組みを、初回の注射から用量や副作用まで解説し、難解な薬の説明書を平易な英語の9枚のイラストにしています。描画スタイルの参考例であり、医療上の助言ではありません。
![]() ひと目でわかる概要:2型糖尿病と減量のための週1回の注射薬。 | ![]() 減量:食欲を抑えて満腹感を高め、食べる量を減らします。 | ![]() 服用を忘れた場合:分岐器のように、4日以内ならすぐに注射し、それを過ぎていたら1回分を飛ばします。 | ![]() 深刻な兆候:助けを求めるべきことを知らせる警報です。 |
ニコチン代替療法
ニコチンそのものが有害なのではない理由、NRTの剤形、そして渇望を抑える仕組みを解説します。
![]() 誤解と害の真相:ニコチンは毒ではなく、有害なのはタールや毒素です。 | ![]() 剤形:パッチ、ガム、トローチ、スプレー、吸入器。 | ![]() 渇望を抑える:ゲージを安定させます。 |
自動で手入れされるナレッジWiki
雑然とした情報源を、モデルが整理して管理する、相互にリンクされたWikiに変換します。大規模なRAGを使わずに、質問と回答を実現します。
![]() コードを減らし、知識を増やす:生のソースを整理された Wiki にまとめます。 | ![]() 自動で手入れ:モデルが自ら内容を整理するため、手間がかかりません。 | ![]() 蓄積されます:時間とともに出力が蓄積していきます。 |
.NET AI スタック
.NET AI ライブラリを解説します。苦労の多かった初期の時代、多数のインターフェースを支える単一の基盤、そしてツールを呼び出すエージェントについて紹介します。
![]() 苦労の多かった始まり:手作業で組み立てた脆い実装に、約200行が必要でした。 | ![]() 1つの基盤:1つのソケットパネルから多数のインターフェースが生まれます。 | ![]() ツールを使うエージェント:ロボットが有孔ボードからツールを選びます。 |
⚙️ 設定
すべての設定は環境変数で行います(ホストの env ブロックで設定してください)。必要なのは画像キーのみです。
| 変数 | 必須 | デフォルト | 機能 |
|---|---|---|---|
OPENAI_API_KEY | いずれか1つ | なし | OpenAI GPT Image(デフォルトのプロバイダー) |
GEMINI_API_KEY / GOOGLE_API_KEY | いずれか1つ | なし | Gemini 3 Pro Image(「Nano Banana Pro」) |
DOODLEWORKS_STYLE_REF | いいえ | なし | デフォルトのスタイル参照 ID/パス(ライブラリ) |
DOODLEWORKS_QUALITY | いいえ | low | low | medium | high | auto(質感を高めるには値を上げてください) |
DOODLEWORKS_CONCURRENCY | いいえ | 3 | 並列でレンダリングするイラストの数(OpenAI tier‑1 で安全に使用できます) |
DOODLEWORKS_REQUEST_TIMEOUT_MS | いいえ | 120000 | 画像リクエストごとのタイムアウト(ms)。レンダリングが停止した場合はスロットを占有し続けず、速やかに失敗します |
PORT | いいえ | 3001 | 開発用 Streamable HTTP サーバーのポート |
重要
画像キーはサーバーの環境変数から読み込まれ、サーバー側でのみ使用されます。ツールの結果に含めたり、ビューアーに送信したり、iframe に公開したりすることはありません。ホストの
envブロックまたはシェルに設定し、コミットするファイルには記載しないでください(.envは gitignore 対象で、自動的には読み込まれません。サーバーはprocess.envを直接読み取ります)。
🛠️ ソースからビルド
コントリビューション、Tinku の開発、または開発用ビューアーのインスペクターを実行する場合に使用します。Node.js 22+ と pnpm が必要です。ビルドやテストに API キーは不要ですが、レンダリングには必要です。
git clone https://github.com/SalZaki/doodleworks-mcp.git
cd doodleworks-mcp
pnpm install
pnpm build # type-checks + bundles the viewer into dist/mcp-app.html
pnpm test # offline test suite (~1s, no API calls)
公開済みパッケージではなく、チェックアウトしたソースをホストで使用するには、ホスト設定のコマンドを次のように置き換えます。
"command": "npx",
"args": ["-y", "tsx", "/ABSOLUTE/PATH/doodleworks-mcp/main.ts", "--stdio"]
/ABSOLUTE/PATH/doodleworks-mcp をクローン先の実際のパスに置き換えてください(リポジトリ内で pwd を実行して確認できます。Windows ではバックスラッシュを2つ重ねた C:\\path\\to\\doodleworks-mcp を使用してください)。
警告
ホストでローカルのチェックアウトを指定する前に、必ず
pnpm buildを実行してください。ホストはビルド済みのビューアー(dist/mcp-app.html)を配信します。バンドルがない、または古いことが、ビューアーが表示されない最大の原因です。変更をすぐに反映しながら開発するには、pnpm startを使用してください(変更時に監視ビルドして再起動します)。
テストファーストのワークフロー、Tinku の同期ゲート、ブランチとコミットの規約については、CONTRIBUTING.md を参照してください。
🧩 仕組み
アーキテクチャ:結果に画像データを含めない設計
MCP App は、ツールと UI リソースで構成されます。create_illustrations はイラストを生成し、_meta.ui.resourceUri に登録されるため、ホストは ui://doodleworks-mcp/viewer.html リソースを取得して、サンドボックス化された iframe 内に表示します。
コンテキストをクリーンに保ち、MCP の結果ごとのサイズ上限を超えないよう、ツールの結果に画像データは含めません。結果に含まれるのは setId とイラストのメタデータだけです。サーバーは生成したばかりの画像を、プロセス内の小さな LRU キャッシュ(直近 8 セット)に保持し、ビューアーは個別の get_illustration 呼び出し(結果 1 件につき画像 1 枚)で各画像を取得します。生成はバックグラウンドで行われるため、呼び出しはすぐに戻り、画像は生成できたものからビューアーに順次表示されます。
host LLM ── create_illustrations(illustrations[]) ─▶ server: render × N (OpenAI / Gemini, your key)
model sees: 1-line summary ◀── content (no bytes) cache.set(setId, …)
viewer sees: { setId, metadata } ◀── _meta["doodleworks/set"]
viewer ── get_illustration({ setId, index }) ─▶ one image per result ─▶ iframe gallery
画像はプロセス内キャッシュにのみ保存されるため、サーバープロセスが動作している間(および直近 8 セット)のみ保持されます。これは、この個人向けティアにおける意図的なトレードオフです。インフラは不要で、キー管理に伴うリスクもありません。画像を永続化したり、複数ユーザー間で共有したりする必要が出てきたら、ホスト型ティアへの移行を検討するタイミングです。
スタイルの参照画像と Tinku のカスタマイズ
assets/style-references/ は拡張可能なライブラリです。.png/.jpg/.webp/.gif を追加すれば、すぐにスタイルの参照画像として利用できます(調整するのは描画スタイルのみで、キャラクターやテキストには影響しません)。イラストごと、セット全体、または DOODLEWORKS_STYLE_REF で設定できます。全ギャラリーと仕組みについては、ライブラリの README をご覧ください。
Tinku はアプリ独自のキャラクターで、engine.ts の TINKU_CHARACTER として一度だけ定義されています。大きな目が 2 つあり、ミトンのような手を持つ、小さくて黒一色の卵形の作業員で、常に仕掛けを操作しています。この定数を編集すると、Tinku のスタイルを変更できます(ビルドでチェックされる pnpm run check:tinku によって、references/visual-dna.md も同期してください)。
✅ ステータスと検証
個人向けの実験的なティアですが、動作します。pnpm install && pnpm build && pnpm test は正常に完了します(オフラインのテストスイートで、API 呼び出しはありません)。CI では Node 22 および 24 と pnpm 10.34.3 で、ビルドとテストが再実行されます。実際の openai / @google/genai による画像生成はテストの対象外です。SDK をアップグレードした後は、一度実際に生成して確認してください。
🤝 コントリビューションとセキュリティ
- CONTRIBUTING.md:開発環境のセットアップ、テストファーストのワークフロー、Tinku の同期チェックについて説明します。
- SECURITY.md:脆弱性を非公開で報告する方法を説明します。
- CHANGELOG.md:主な変更点を記載しています。
☕ プロジェクトを支援する
Doodleworks は無料で、私の空き時間にメンテナンスしています。役に立った場合、コーヒーを差し入れていただけると、画像 API とホスティングの費用を賄い、更新を続ける助けになります。ありがとうございます。
📄 ライセンス
MIT © Salahuddin Zaki。同梱されているスタイル参照画像は、プロジェクト独自の作品です。MIT の コード ライセンスは、アートワークには適用されません。ライブラリの README をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。











