mcpField
M
mojulo

mojulo

ローカル
github.com/zombicoメディア・デザイン42 週間前に更新

mojulo について

mojulo はコーディングエージェント向けの 3D コンパイラー兼 MCP サーバーです。編集可能なレシピから形状や各種形式のデータを生成し、メッシュではなくレシピを保存する対話型の制作ワークフローに適しています。

主な機能

  1. 01JSON や OpenSCAD のレシピを形状にコンパイル
  2. 02Godot、Blender、Unity、Unreal などへ出力
  3. 03印刷用 STL と 3MF の生成
  4. 04オブジェクト、スケッチ、ワールドの構築
  5. 05ローカルダッシュボードでのプロジェクト確認

活用シーン

  1. 01実寸の 3D プリント用オブジェクトの設計
  2. 02歩き回れる部屋や都市のシーン制作
  3. 03木工作品の部材と組み立て説明の生成
  4. 04レシピをゲームエンジンや 3D ツールへ出力

MCP 対応

mojulo は MCP サーバーとして、3D アセットの構築、編集、出力ツールをエージェントに提供し、レシピと状態をローカルに保持します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"zombico-mojulo": {
"command": "npx",
"args": [
"-y",
"mojulo"
]
}
}
}
起動コマンドnpx -y mojulo

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmmojulo3.1.1

ツール

28

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
modeenumいいえ'studio'(省略時のデフォルト——創作領域:Media FORM ルーティング + Game)または 'office'(接続済みサービス、アプリ、検討、操作)。呼び出しごとにステートレスです——依頼に該当する領域を取得してください。office | studio
registerenumいいえ今回の呼び出しに限り、オペレーターの `vocabulary_register` を上書きします。'plain'(日常的なツール名。ユーザーには mojulo の専門用語を使わない)、'mixed'(デフォルト)、'mojulo'(完全な独自用語)。省略すると、オペレーターアンカーの設定またはシステムのデフォルトが使用されます。plain | mixed | mojulo
disclosureenumいいえ今回の呼び出しに限り、オペレーターの `procedural_disclosure` を上書きします。'terse'(実行して報告)、'reflective'(デフォルト——各ゲートを明示)、'pedagogical'(各ゲートの意味を説明)。省略すると、オペレーターアンカーの設定またはシステムのデフォルトが使用されます。terse | reflective | pedagogical

詳細

Mojulo

npm license node

MCP 経由で mojulo に接続されたコーディングエージェント:「南側の壁にドアのある、20×24フィートのリビングルームを作って」という指示から12行の間取りレシピが生成され、ダッシュボードには家具を配置した部屋が、回転可能なビューと HTML/glb/STL のダウンロード付きで表示されます。「天井にダウンライトを追加して」という指示で同じレシピの1項目が編集され、ソファの向きを修正する変更はレシピを変えずにカーネルに反映されます。同じレシピが Blender Cycles でも前後でレンダリングされます。シードもカメラも同じです

Mojulo は、コーディングエージェント向けのメディアスタジオを備えた3Dファクトリーです。エージェントが実行される場所、つまりあなたのマシン上でも、エージェント自身に用意された使い捨ての Linux ボックス上でも動作する MCP サーバーです。すでに使っているエージェント(Claude Code、Codex、あらゆる MCP ホスト、または Linux ボックスを開けるチャットアプリ:Claude、Codex を備えた ChatGPT、Grok、Meta Muse、Google AI Studio)と会話しながら、遊ぶ、印刷する、読む、聴く、観るためのもの(ゲーム、オブジェクト、歩いて回れる世界、画像、楽譜)を作成できます。保存されるのはメッシュではなくソースです。すべての成果物は小さな決定論的なレシピです。数百バイトの JSON、または OpenSCAD プログラムで、カーネルが読み込むたびに同じジオメトリへコンパイルします(同じプラットフォームではバイト単位で同一)。Godot、Blender、Unity、Unreal、glTF、OpenUSD、または実寸サイズの印刷対応 STL/3MF に出力できます。ボックスから持ち帰り、自分のディスク上で再生成できるほど小さなデータです。これはジェネレーターではなくコンパイラーです。コードと同じようにレシピを編集して差分を確認でき、レンダリングは破棄可能です。API キーもアカウントも外部テレメトリーも必要ありません。考えるのはエージェント、状態を保持してジオメトリを処理するのは mojulo です。

クイックスタート

npx mojulo init

Node 22.14+ と、MCP に対応したコーディングエージェント(Claude Code または Codex。Claude Desktop も動作します)が必要です。init はお使いのマシン上のホストを検出し、ホストごとに一度だけ確認して、http://localhost:3001 でダッシュボードを開きます。すべて ~/.mojulo/ に保存されます。その後、新しいエージェントセッションを開いて、**「これは何ですか?」**と尋ねてください。

Claude Code では、代わりにプラグインをインストールできます。/plugin marketplace add zombico/mojulo に続けて、/plugin install mojulo@mojulo を実行してください。同じサーバーを特定のバージョンに固定して起動します(plugins/mojulo)。プラグインのビルドには、AI 画像、音声、メッシュジェネレーター向けのハンドオフツールは含まれず、ブラウザー、ffmpeg、検索モデルを自動でダウンロードすることもありません。Claude Code では、プラグインと init のどちらか一方を使ってください。両方を登録すると、サーバーが 2 つ起動します。

最初のインストールが最も大きな処理です。npx は約 7 MB のパッケージを取得し、依存関係と合わせてディスク上で約 227 MB、さらに npm キャッシュに約 140 MB を使用します(ダウンロード量は約 79 MB。macOS arm64 マシン 1 台で 3.0.0 を測定。コールドスタートの応答は約 4.5 秒で、そのほとんどは npm のインストール時間です)。最も大きな依存関係は node-web-audio-api(音声)、manifold-3d(正確なブーリアン演算)、better-sqlite3 です。ダッシュボードは別パッケージで、最初に開いたときに取得されます。また、ローカル検索モデルはオプトインの mojulo install recall でインストールします(これがなくても semantic_search は語彙的な一致度で順位付けします)。一覧にあるものがそれ自体でネットワークにアクセスすることはありません。依存関係ごとの一覧はdocs/tech-requirements.mdにあります。macOS(Apple Silicon)と、Claude Code を使ったネイティブ Windows(init と初回レンダリング)で検証済みです。Linux x64 ではテストスイートが CI で実行されており、以下のエージェントボックスの方法は、Claude アプリと Web からのミントとエクスポート、Codex を使った ChatGPT のワークモード、Grok チャット、Meta Muse、Google AI Studio で実行済みです。

手動で接続する
# Claude Code (--scope user makes mojulo available in every project):
claude mcp add --scope user mojulo -- npx -y mojulo

# Codex: add to ~/.codex/config.toml
[mcp_servers.mojulo]
command = "npx"
args = ["-y", "mojulo"]
// Claude Desktop: add under "mcpServers" in claude_desktop_config.json, then restart.
// If it fails with "spawn npx ENOENT", replace "npx" with the absolute path from `which npx`.
"mojulo": { "command": "npx", "args": ["-y", "mojulo"] }

npx -y mojulo-ui を使って、ダッシュボードだけを開くこともできます。3.0.0 以降、ダッシュボードは独立した npm パッケージです。そのため、エージェントが npx mojulo を起動してもダッシュボードはダウンロードされません。npx -y -p mojulo mojulo-ui も引き続き動作し、初回使用時に一致するバージョンを npm から取得します。mojulo bin はツールレジストリを操作する CLI としても使えます。npx mojulo tools、npx mojulo help mint_solid、npx mojulo call version を実行してください。


実行場所と追加できる 3 つのもの

Mojulo はエージェントが実行される場所ならどこでも動作し、ある場所で生成したレシピは、別の場所でも同じジオメトリとして再生成されます。2 つの形式、1 つのインストールです。

マシンには何もインストールせず、エージェントのボックス内で実行します。 エージェントに一文伝えるだけで、エージェントが用意した Linux ボックスに mojulo をインストールできます。

  • Claude アプリ(macOS、Windows、Web、iOS)、Grok チャット、Google AI Studio、Meta Muse(iOS、Web、macOS アプリ。3 つすべてで 1 つのセッションを共有):Linux ボックスを開いて、その中に mojulo npm パッケージをインストールしてください。
  • ChatGPT(Codex を含む):ワークモードで Linux ボックスを開いて、その中に mojulo npm パッケージをインストールしてください。

どれもこの方法で、一文の指示からモデルの生成、エクスポートの受け取りまで実行済みです。同じレシピとエクスポートをファイルとして取得できます。エクスポート結果には、このホストでの受け取り先(アーティファクトページ、PR、ファイルカード、または Muse のライブラリ)が示されます。ボックスにはアクセス可能なダッシュボードがなく、シーンから PNG へのベイク処理には、取得が許可されない場合があるブラウザーが必要です。また、ほとんどのホストではセッション終了時にボックスが消えるため、バンドル(world.html、メッシュ、実物大のオブジェクト用印刷 STL、recipe.json、README を含む zip を 1 つ)を依頼し、レシピを保存してください。例外は Meta Muse です。すべてのクライアントが背後の 1 つの VM を使うため、~/.mojulo は会話をまたいで保持されます。MCP クライアントのないボックスは initialize を送信しないので、エージェントに最初に npx mojulo orient を実行するよう伝えてください。これは接続時に MCP クライアントへ渡される内容をシェル向けに変換して出力し、ルーティングインデックスを案内します。Claude のボックスでは、この方法で実寸大の 47 パーツのスマートフォンを作成し、glTF を返しました。Grok チャットのサンドボックスでは、シェルから都市を生成しました。これらのボックスには Blender もインストールできます。 お使いのマシンで:macOS、Windows、Linux。 npx mojulo init は見つかったエージェントに mojulo を設定し、 localhost:3001 でダッシュボードを開き、すべてを ~/.mojulo/ 配下に保持し、任意のローカルワーカー(Blender、スライサー、OpenSCAD、各種ゲームエンジン)を PATH から探します。これが一連の流れであり、 ボックス上で作成したレシピが戻ってくる場所です。

どこで実行したかを示します。persistent 永続(お使いのマシン、または ~/.mojulo/ を保持するボックス) · ephemeral 一時的(ウェブエージェントの使い捨て Linux ボックス。レシピを保存してください)。空欄は、まだ検証されていないことを示し、「動作しない」という意味ではありません。

エージェントmacOSWindowsウェブエージェントの Linux ボックス(ヘッドレス)
Claude Codepersistentpersistent
Claude app(macOS、Windows、ウェブ、iOS)persistentpersistentephemeral
ChatGPT(work mode;Codex)persistent Codexephemeral
Hermes Agentpersistent
Grok(Build;chat)persistent Buildephemeral
Meta Muse(iOS、ウェブ、macOS アプリ;それらをまたいで 1 つのセッション)persistent
Google AI Studioephemeral

オプトインの機能が 2 つあり、どちらで選んでも同じです。

追加するもの方法得られるもの
creative(デフォルトでインストール済み)通常の npm installワールド、オーディオ、ワードマーク用フォント、正確なブーリアン演算、プロセス内 OpenSCAD、スキンやスプライトシート用の sharp。npm install --omit=optional を実行すると、これらのヘルパー(約 115 MB)が除外されます。スタジオツールは引き続き一覧に表示され、実行できます。必要なヘルパーがない場合は、その旨が呼び出し時に表示されます。
recallmojulo install recallsemantic_search の背後にある埋め込みモデル。これがなくても検索は引き続き応答し、質問に含まれる語句に基づいて順位付けします(ランタイム約 480 MB とモデル 130 MB。アップグレード後も保持されるよう ~/.mojulo/ 配下に保存されます)。ほとんどのセッションでは必要ありません。エージェントはツールインデックスと語彙カードを直接読み取ります。

引数なしで mojulo install を実行すると、どちらがインストールされているかが表示されます。

チャットボットファクトリーは 3.0 以降 mojulo に含まれなくなり、独立したプロジェクトに移行中です。これを含む以前の 2.x バージョンは保守されておらず、既知のセキュリティ上の問題があります(SECURITY.md)。mojulo install chatbot は何もインストールせず、このお知らせを表示するようになりました。

2.x からアップグレードしますか? まず2.x からのアップグレードをお読みください。バージョンを固定していない npx mojulo は次回の起動時に 3.0 に移行し、3.0 では保存済みのプロバイダーキーが再暗号化されるため、2.x からは読み取れなくなります。

伝えてみる 5 つのこと

それぞれ、エージェントに伝える一文、エージェントが使うツール、保存されるレシピです。以下の例はすべて、キーなしでオフライン実行できます。

1. 「OpenSCADでRaspberry Pi 4用のケーストレイを書いてください」

エージェントは mint_solid { kind: 'scad' } を呼び出します。プログラムはレシピとしてそのまま保存されます。

board_w = 85; board_d = 56; clear = 1; wall = 2; floor_t = 2; wall_h = 12;
holes = [[3.5, 3.5], [61.5, 3.5], [3.5, 52.5], [61.5, 52.5]];   // the Pi's M2.5 pattern
module rounded_box(w, d, h, r) { hull() for (x = [r, w - r], y = [r, d - r]) translate([x, y, 0]) cylinder(r = r, h = h, $fn = 48); }
module tray() {
  color("#3a3f4b") difference() {
    rounded_box(board_w + 2 * (clear + wall), board_d + 2 * (clear + wall), floor_t + wall_h, 3);
    translate([wall, wall, floor_t]) rounded_box(board_w + 2 * clear, board_d + 2 * clear, wall_h + 1, 1.5);
    translate([board_w + 2 * clear + wall - 1, wall + 2, floor_t + 3]) cube([wall + 2, board_d + 2 * clear - 4, wall_h]);   // USB / Ethernet
    translate([wall + clear + 5, -1, floor_t + 3]) cube([55, wall + 2, wall_h]);                                            // USB-C, HDMI, audio
  }
}
module standoffs() {
  color("#c9a227") for (p = holes) translate([wall + clear + p[0], wall + clear + p[1], floor_t])
    difference() { cylinder(d = 6, h = 3, $fn = 32); translate([0, 0, -1]) cylinder(d = 2.5, h = 5, $fn = 24); }
}

parts: { tray: 'tray();', standoffs: 'standoffs();' } とともに保存されます。OpenSCAD自体が読み込むたびに、Manifoldバックエンドを使ったWebAssemblyとしてプロセス内でメッシュ化するため、ブーリアン演算は正確で、すべてのエッジがシャープです。color() は色合いを指定します。名前付きの各パーツはレンダーグループで、movers 内のヒンジによって動かせます。同じ参照から、軌道ビュー、.glb、エンジン用パック、記述どおりの91 × 62 × 14 mmの model.stl が生成されます。model.scad はソースを変更せずに返します。update_sketch で wall_h を変更すると、読み出し結果には移動したパーツが示されます。OpenSCADで表現できないブレンド結合、ストロークで刻んだへこみ、シード付きノイズなどについては、ソースが mojulo_field("<id>") を呼び出し、同じレシピから作成したフィールドソリッドがその位置に焼き込まれます。

2. 「南側の壁にドアがある、20×24フィートのリビングルームを作ってください」

ページ上部のGIFがその例です。エージェントは create_sketch { title, manifest: { kind: 'floorplan', … } } を呼び出し、マニフェストは次のように保存されます。

{ "kind": "floorplan", "width": 24, "height": 28,
  "rooms": [ { "x": 2, "y": 2, "w": 20, "h": 24, "glyph": "L" } ],
  "doors": [ { "x": 12, "y": 26, "room": 0, "edge": "S" } ],
  "furnish": true, "view": "cutaway", "seed": 7 }

L の字形とシードによって、ソファ、椅子2脚、ラグ、ランプ、窓が配置されます。「天井にダウンライトを追加して」と指示すると、"potLights": true が追加されるだけで、ほかは何も変わりません。"levels": [...] を指定すると、スラブを貫く階段のある建物へと積み重ねられます。同じレシピをブラウザーで /world から歩き回ったり、.glb としてエクスポートしたり、アートパス用パックとしてBlenderに送ったりできます。Blenderでは、Cyclesのベイクでトレースした光をメッシュ自体の頂点カラーに書き込めるため、実行時のコストをかけずに、どこでもライティング結果を表示できます。

3. 「オーク材のダイニングテーブルを作り、組み立て方を見せてください」

分解図のオーク材ダイニングテーブル:天板が持ち上がり、4本の幕板がほぞの見える状態で脚から引き出され、固定位置に金具とネジが浮かんでいる、Worldページの画像

エージェントは1つのフレームを指定して mint_solid { kind: 'workbench' } を呼び出し、build が部材と接合部を作成します。

{ "units": "mm",
  "frames": [ { "id": "table", "unit": "mm", "explode": 90,
                "build": { "type": "table", "w": 1400, "d": 800, "h": 750, "species": "oak" } } ] }

脚にはほぞ穴とほぞで幕板を取り付けます。脚の内部でほぞ同士がぶつからないよう寸法が調整され、天板はL字金具に載ります。すべての接合部は正確なカーネルで切削され、オーク材は合成ログから製材されるため、木目と木材の動きは切削に応じたものになります。explode: 90 は、各部材をはめ込む方向に沿って90 mm引き離します。0に設定すると、テーブルは組み立てられた状態になります。レポートはあくまで参考情報で、作成を拒否することはありません。各部材の切削と動き、スパンの確認、部材の組み立て順序、転倒、金具リスト、切り出しリストが含まれます。同じ frames エントリーで、扉や引き出し付きの箱物家具、張り地付きのソファ、木組みのフレーム、鋼材や石造りも作成できます。部材をまとめてstashに入れ、組み立て手順を図だけで示すページのために instruction_manual を作成するか、layout: 'kit' を指定してモデルキットのように平らに印刷できます。

4. 「実物大のニューヨーク風の街を作ってください」

生成されたニューヨーク風の大都市を上空から見た図:屋上に木製の給水タンクがあるレンガ造りの集合住宅、ガラス張りのアール・デコ様式の高層ビル、交通のある大通り。1回のcompose_world呼び出しで作成

エージェントは compose_world { base: 'city', seed: 11, overrides: { profile: 'metro', flavor: 'new-york' } } を呼び出します。metro はおよそ0.8 × 0.5 kmの縮尺で街を作り、flavorが建築様式を選びます。この例ではレンガ造りの集合住宅、非常階段、給水タンク、アール・デコ様式のセットバックです。ほかに paris、london、tokyo などがあります。街全体はシードの純粋関数です。シードを変えると別の街ができ、同じシードを使えばどのマシンでも同じ街が再生成されます。context: { time: 'night' } を指定すると夜景になり、asset: { monument: 'eiffel-tower' } を指定すると実物大のランドマークが建ちます。/world を開くと、WASDで歩き回ったり、街路、上空、スカイラインの各ビューを切り替えたりできます。city 以外のベースには、交通ハブ、K-12キャンパス、たいまつで照らされたダンジョン、惑星、彩色された風景、実物大の地形、有限群の歩行可能なケイリーグラフがあります。

5. 「カートレースゲームを作って、アプリとしてプレイできるようにして」

design_game はゲーム全体(主人公、その能力、装備、システム)を設計し、run: true を指定すると、各ステップを順次実行します。レベルはゲーム上の条件(出口に到達する、20秒間生き延びる、レースに勝つ)を備えたワールドです。create_game はレベル、生成されたスコア、キャラクターをひとつのゲームにまとめ、レベル間で引き継がれる型付きストアを備えます。すべてのレベルが条件のドライランと、勝利条件に到達するまでのプレイテストに合格するまで、ゲームは生成されません。ボットが登場するアリーナシューター、ライバルドライバーが登場するカートレースゲーム、フライトゲーム、ステルスゲーム、リズムゲームも、同じパーツから作成できます。

そのままブラウザーでプレイできます。export_game は、あらゆる静的ホストで使える自己完結型のフォルダーを書き出し、target: 'desktop' を指定すると、そのフォルダーを Electron アプリにします(オフラインで npm install && npm start を実行できます。署名はご自身で行ってください)。各ゲームエンジン向けに変換し、変換できなかった内容をレポートします。target: 'godot' を指定すると、本格的な Godot 4 プロジェクトを書き出します。対応先の中でも最も充実しています。Unity と Unreal には、データパックとインポーターを提供します(Unreal の実例)。

**文章ひとつから、次のものも作れます:**ポーズをとった人間のキャラクターや、走っている動物(glTF または VRM 向けにリグを設定)、セットバックしたペントハウスのある6階建てのビル、サンプルを使わずシード付きの数式から合成した環境音ループやフルスコア、エージェントに見せた写真から復元した部屋のレイアウト。全カタログはdocs/tour.mdをご覧ください。


出力先

1つのレシピから、同じ ref を使って複数の出力先へ出力できます:/api/sketches/<ref>/{svg,scene,world,model.glb,model.stl,model.3mf,model.usdz,model.scad}。各 URL はリクエストのたびに決定論的に再生成されます。同じプラットフォーム(OS、CPU、Node のバージョン)ではバイト単位で一致し、異なるプラットフォームでも浮動小数点の丸め誤差の範囲内で同じジオメトリになります。V8 の Math は CPU と Node のバージョンによって最下位ビットの丸め方が異なるためです(埋め込みテクスチャ PNG の圧縮後のバイト列が異なる場合もありますが、ピクセルは変わりません)。すべての受け渡しには、引き継がれなかったものを記載した台帳が付属します。

出力先得られるものゲート
ブラウザー静止 SVG、依存関係不要の CSS-3D シーン、歩き回れる WebGL ワールド、自己完結したフォルダーとしてのゲーム全体。あなたの目。
デスクトップアプリゲームフォルダーを Electron アプリとして出力します:npm install && npm start でオフライン再生でき、npm run package でお使いのマシン向けにビルドします(署名なし)。Electron がインストールされている場合、シェルと最初のレベルを非表示で読み込みます。
.glb / OpenUSD頂点カラーにライティングをベイクした glTF(PBR 用の lit も選択可能)、リグのクリップ、スキンメッシュ、VRM のボーン名、実寸大の usda / usdz。Blender と usdcat がインストールされている場合に使用します。
Godot(最も完全な変換)実際の Godot 4 プロジェクト:project.godot、バージョン管理されたカーネルスクリプト、GLB、エクスポートプリセット。MOJULO_GODOT にバイナリが指定されている場合、ヘッドレスインポートと1フレームの実行を行います。
Unity / Unreal(条件付きで対応)データパックと C# エディターインポーターまたは Python インポーター。ゲームパックには C++ カーネルプラグインも追加されます。MOJULO_UNITY / MOJULO_UNREAL にエディターが指定されている場合、スクラッチプロジェクトへのインポートをヘッドレスで行います。
Blender(アートパス)インポータースクリプトを含むアートパスパックと、グローバルイルミネーションを頂点カラーにベイクし直す Cycles の処理。MOJULO_BLENDER にバイナリが指定されている場合、インポーターをヘッドレスで実行します。
STL / 3MF実寸大の印刷対応データ:mm、Z-up、3MF のカラーとインスタンス化された繰り返し形状、プロセスに応じた注意事項(FDM、SLA、SLS、MJF)。3MF をローカルのスライサーで処理し、レイヤー、時間、フィラメントを記録します。PrusaSlicer と Bambu Studio で検証済みです。
.scadメッシュではなくプログラムです。scad レシピは独自のソースをそのまま返します。ワークベンチのレシピは各項目を OpenSCAD のソリッドとブーリアン演算に変換し、polyhedron() に固定された項目があれば、それを記載した網羅性台帳を付けます。バイナリがインストールされている場合、OpenSCAD で再レンダリングし、レシピとサイズおよび体積を照合します。

インストールされているものがなくても、すべてのエクスポートは機能します。パックが書き出され、ゲートは理由とともに「スキップ」と報告します。エンジンをインストールすると、マシン上でのゲートが追加されます。ゲートは助言と記録を行うものであり、どれも拒否することはなく、人間が確認したと主張することもありません。方針:docs/bicycles.md。


マシン上に保持されるもの

  • レシピは、~/.mojulo/mojulo-lite.db にある1つの SQLite ファイルに保存されます。レンダリング結果はそこから生成されるため、いつでも破棄できます。
  • あなたの料理本。 save_recipe を使うと、レシピは ~/.mojulo/data/cookbook に保存されます。ローカルの Git リポジトリに、プレーンな card.md と recipe.json のフォルダーとして保存され、リモートはありません。数か月後でも、semantic_search を通じて意図から呼び出せます。同梱のレシピブックも同じ形式でパッケージに含まれているため、エージェント用の環境も含め、インストールするだけで、学習用のオブジェクト、世界、ループ、立体、ショット、衣装、さらにいくつかのまったく新しい種類の章を利用でき、セットアップは不要です。
  • エクスポートは、どのアプリでも開けるプレーンなファイルです。エクスポートされた World ページには独自の three.js が含まれますが、CDN 版を指定した場合(cdn: true)は除きます。プロバイダーキーを保存する場合は、インストールごとのキーを使って ~/.mojulo/secret.key の下で AES-256-GCM により保存時に暗号化されます。
  • 外部テレメトリーはありません。 メンテナーや分析サービスに情報が送信されることはありません。外部通信が発生するのは、インストール時の npm、初回使用時のいくつかの一度限りのダウンロード(明示的なレンダリング時にブラウザーがない場合のブラウザー、初回 MP4 作成時の ffmpeg、ダッシュボードを初めて開くときのパッケージ、mojulo install recall の後の検索モデル)、およびエージェントが要求したときの更新確認です。Claude プラグインでは、ブラウザー、ffmpeg、モデルが勝手にダウンロードされることはありません。完全な一覧については、docs/tech-requirements.mdを参照してください。
  • ローカルのツール呼び出しログ。 各ツール呼び出しは、同じ SQLite ファイルに記録されます。記録されるのは、ツール名、タイミング、ステータス、引数名とサイズ(値は含まれません)、切り詰めたエラーテキスト、MCP クライアントの名前とセッションです。マシンの外に出ることはなく、30日間または50,000行のいずれかまで保持されます。MOJULO_MCP_TELEMETRY=off にすると無効になります。
  • レシピにはコードを含められます。 program(コードの入り口)を含むレシピは、レンダリング時にあなたの権限で実行される JavaScript です。共有されたレシピはコードとして扱ってください。

コントロールプレーンは、デフォルトで単一オペレーター専用かつ localhost のみで動作します。stdio MCP にはネットワーク経由の接点がありません。HTTP MCP ルートは、CONTROL_PLANE_MCP_KEY が設定されていない限り 404 を返します。パブリックインターネットに公開しないでください。リモートから使う必要がある場合は、トンネルまたは Tailscale を使用してください。脅威モデルについてはSECURITY.mdを参照してください。利用規約と、結果に対する責任はオペレーターが負うという方針については、TERMS.mdおよびdocs/responsibility-model.mdを参照してください。オープンソースの mojulo は Apache-2.0 のままであり、外部テレメトリーもありません。mojulo のホスト型クラウドを検討する場合は、独立したオプトイン製品として提供し、ローカルインストールは変更せず、そのクラウドに依存しない形にします。


仕組み

Next.js アプリは、1 つの SQLite を通じて 2 つの役割を果たします。エージェントが呼び出す MCP サーバー(npm パッケージでは stdio、リモートクライアントでは HTTP)と、蓄積された内容を表示する localhost:3001 のダッシュボードです。コンパイラーの構成は次のとおりです。レシピがソース(パラメーターと kind)で、カーネルが読み出しのたびにレシピを再生成するバックエンドです。各エミッターはターゲットとして、それぞれ固有のフレームと、ネイティブな z-up メートルフレームからの単位変換を担います。特定のパラメーターに対するカーネルの出力は、すでに生成された行との互換性を保証するものであり、バイト単位でテストされています。オプションのローカルワーカー(Blender、スライサー、メッシュスカルプター、ComfyUI、Kokoro)はオペレーターがホストするもので、依存関係にはなりません。ワーカーがなくても、いずれか 1 つのループが機能しなくなるだけで、ほかに影響はありません。

さらに、最初から利用でき、邪魔にならない機能も備えています。図やチャート、外部モデルが描画する指示画像、出版物や研究ノートブック、推論をエージェント側に任せるローカルアプリ、そしてすでに実行している MCP 上のワークフローです。

mojulo/
├── control/        Next.js control plane: MCP server, dashboard, kernels, emitters, runtime supervisor
└── docs/           Concept docs

デフォルトの由来

Mojulo のランナー、関数、機能は、制作者がゲーム開発について独自に学んだことに基づいています。インタビューから得た調査結果に加え、アートディレクションやゲームシステムの制作方法について何年も個人的に学んできた知見が反映されています。Claude は、その知見を翻訳し、mojulo のシステムに統合することで、利用者がスムーズに使えるようにしました。mojulo が作るものはすべて、レシピのパラメーターをもとに独自のコードで生成されます。ゲームを逆コンパイルしたり、そのアセットを取り込んだりすることはなく、アセットを同梱することもありません。デフォルトは出発点です。そこから先へ進むには、レシピを調整し、自分で用意した参考資料を持ち込み、レンダリング結果を確認して修正を重ねる必要があります。

コントリビューション

メンテナーは 1 人で、SLA はありません。簡単にできる貢献は、recipe book への追加です。カードとレシピを含むフォルダー、またはまったく新しい種類のための純粋なビルダーなら、コアを変更せずに追加できます。コアへの貢献としては、貼り付けたレシピで正確に再現できるバグ報告、正確性の修正、翻訳、テストを歓迎します。mojulo の動作を変えるコンセプト提案の PR は、おそらく対応が滞ります。フォークすることもできます。率直に言うと、メンテナーは 1 人で、読み取り処理の大半は AI の支援を受けています。基本方針と募集中の依頼については、CONTRIBUTING.md をご覧ください。

ライセンス

Apache License 2.0

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。