nanoodle について
nanoodleは、nanoodleエディターで保存したワークフローグラフを、型付きMCPツールとして公開します。メディアパイプラインを複数管理するエージェント向けで、stdioでのローカル実行とHTTPサービスに対応し、APIキーまたはNanoウォレットで支払えます。
主な機能
- 01保存した各グラフをツールとして公開
- 02グラフから入力スキーマを生成
- 03stdioとストリーミングHTTPに対応
- 04NanoGPT APIでワークフローを実行
- 05x402によるNanoウォレット決済
- 06生成メディアとグラフへのリンク提供
活用シーン
- 01保存済みメディアワークフローをエージェントから呼び出す
- 02リモートエージェントにホスト済みワークフローを実行させる
- 03APIキーまたはNanoウォレットで実行料金を支払う
- 04ワークフロー出力と元グラフを共有する
MCP 対応
保存した各 noodle-graph.json グラフを型付きMCPツールとして公開します。ローカルエージェント向けのstdioとリモートクライアント向けのストリーミングHTTPに対応し、サービスモードではx402経由でNanoによる従量課金ができます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.nanoodle.com/mcpclaude mcp add --transport http nanoodlecom-nanoodle https://mcp.nanoodle.com/mcp{"mcpServers":{"nanoodlecom-nanoodle":{"type":"http","url":"https://mcp.nanoodle.com/mcp"}}}Cursor で開く{"servers":{"nanoodlecom-nanoodle":{"type":"http","url":"https://mcp.nanoodle.com/mcp"}}}VS Code で開く{"mcpServers":{"nanoodlecom-nanoodle":{"type":"http","url":"https://mcp.nanoodle.com/mcp"}}}{"mcpServers":{"nanoodlecom-nanoodle":{"serverUrl":"https://mcp.nanoodle.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
8| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| Character | string | いいえ | テキスト。デフォルト値:"A compact furnace knight with a cracked ivory helmet, narrow glowing amber visor, dark navy armor, a short rust-red s..."。任意 |
| _payment_id | string | いいえ | このツールの前回の payment-required 応答に含まれる Payment id。フェーズ 3 のみ:/x402/watch が status paid で終了した後、同じ引数にこの ID を追加して再度呼び出し、RESULTS ストリームを開きます。支払いが保留中の間は渡さないでください — 先に watch SSE を監視します。 |
| Character_designer | string | いいえ | システムプロンプト。デフォルト値:"Write ONE image prompt, maximum 130 words, for a game character reference from the description. Preserve the user des..."。任意 |
詳細
nanoodle-mcp
nanoodle.com で複数モデルのメディアパイプラインを視覚的に構築し、そのパイプライン全体を1つの型付きツールとしてエージェントに渡せます。
スキルと MCP のどちらを使いますか? 単一のワークフローを実行する(または設計する)場合は、 nanoodle skill を使えば、セットアップ不要でコマンド1つで済みます。このサーバーは、保存済みグラフを複数まとめたフォルダーを構築し、それぞれを独立したツールとしてエージェントに公開したい場合に使用します。
nanoodle エディターで保存した noodle-graph.json のフォルダーをこの MCP サーバーに指定すると、すべてのグラフが派生入力スキーマ付きの呼び出し可能なツールになります。Claude Code、Grok、Claude Desktop、Cursor、VS Code、Windsurf、その他のModel Context Protocol対応環境で利用できます。デフォルトでは stdio でお使いのエージェントと通信します。あるいは、HTTP で誰もが利用できるサーブモードも利用できます。Nano で呼び出しごとに課金することもできるため、アカウントを作成することなく、他のユーザーのエージェントが料金を支払ってあなたのヌードルを実行できます。
仲介サーバーもテレメトリーもありません。ウォレットモードなら、アカウントも不要です。ここでの MCP 実装は独自実装で(stdio とストリーミング可能な HTTP、JSON-RPC 2.0)、読みやすい小規模なものです。実行時の依存関係は2つです。すべての処理を担う依存関係ゼロのワークフロー実行エンジンである nanoodle(MIT)と、Nano ブロックへの署名に使用する nanocurrency(GPL-3.0)です。後者は x402 の処理経路でのみ読み込まれます。詳しくはライセンスをご覧ください。NanoGPT API キーは、お使いのマシンから nano-gpt.com に直接送信されます。ログに記録されることも、stdout に出力されることもありません。
例:説明からプレイ可能なファイターを作成する
Iron Verdict をプレイ:重いジャンプやパンチ、地面への叩きつけ、手加減のないアリーナ戦闘が特徴の、炉の騎士です。コーディングエージェントがcharacter-sprites スキルを使ってゲームを作成しました。
character-sprites グラフは、人型キャラクターの説明からキャラクターリファレンスと対応するパーツシートを作成します。スキルに含まれるローカルリグスクリプトは、これらのパーツから、アトラスとタイミングメタデータ付きの、背景が透明な待機、歩行、パンチ、ジャンプの各フレームを作成します。その後、コーディングエージェントが物理演算、戦闘、ゲームルールを実装します。完成したゲームは、この組み合わせが生み出す成果を示しています。MCP の呼び出し1回で返されるのはリファレンス画像とパーツ画像であり、ゲーム全体ではありません。
サーバーのグラフフォルダーに character-sprites グラフを配置すると、ツールとして公開できます。tools/list を使って、対象のサーバーにこのグラフがマウントされているか確認し、呼び出す前に入力スキーマを読み取ってください。公開されているグラフの生成ステップは次のとおりです。
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"character-sprites","arguments":{"Character":"A compact furnace knight with an ivory helmet, amber visor, navy armor and brass gauntlets. Outlined 2D platformer art. No weapon or wings."}}}
ローカルでの抽出とアニメーションのためにスキルをインストールしてください(Node 22.23.4+、24.22.1+、または26.12.1+と、ffmpeg/ffprobe が必要です)。エージェントへの依頼には、次のようなものが便利です:「character-sprites を使って、私の説明からアニメーション付きファイターを作り、関節とアルファ境界を確認してから、重力が強く、手応えのある戦闘が楽しめる小さなアリーナを作ってください。」
インストール
必要なもの:Node 22.23.4+、24.22.1+、または 26.12.1+、保存済みのグラフを置いたフォルダー(例:~/noodles。詳しくは
グラフの作成を参照)、および NANOGPT_API_KEY に設定した
nano-gpt.com の API キー(または --key / --env-file で指定)です。Nano ウォレットを使う場合は、キーなしでも利用できます。詳しくは
ウォレットモードを参照してください。
任意:PATH 上の ffmpeg。 グラフにローカルメディアノード(リサイズ、動画フレーム、結合、音声のトリミング/抽出)が含まれるツールは、一般的なケースでは純粋な JavaScript の処理経路を使いますが、対応できない形式では ffmpeg / ffprobe にフォールバックします。対象は JPEG/WebP のリサイズ、動画フレームの読み取り、圧縮音声です。ffmpeg がない場合、これらの実行は失敗します(課金モードでは自動返金されます)。サーバーは起動時に、影響を受けるツールの名前を警告として表示します。純粋な画像/LLM/ビジョンのツールには必要ありません。apt install ffmpeg(Debian/Ubuntu)または brew install ffmpeg でインストールしてください。
Claude Code
claude mcp add nanoodle --env NANOGPT_API_KEY=your-key-here -- npx -y nanoodle-mcp --graphs ~/noodles
プラグインとしてインストールすることもできます。Claude Code が noodles フォルダーと API キーを尋ね、noodle とは何かも学習します(このリポジトリはプラグインマーケットプレイスも兼ねています)。
/plugin marketplace add nanoodlecom/nanoodle-mcp
/plugin install nanoodle@nanoodle
Grok
grok mcp add nanoodle -e NANOGPT_API_KEY=your-key-here -- npx -y nanoodle-mcp --graphs ~/noodles
または、リモート/サーブエンドポイントを使う場合(ローカルプロセス不要で、マシン上に API キーも不要です):
grok mcp add --transport http noodles https://mcp.nanoodle.com/mcp
これにより、[mcp_servers.noodles] が ~/.grok/config.toml(--scope project の場合は .grok/config.toml)に書き込まれます。同じ形式で手動設定する場合:
[mcp_servers.noodles]
url = "https://mcp.nanoodle.com/mcp"
enabled = true
Cursor
Cursor にインストール
(その後、グラフのパスとキーを編集してください)。または、.cursor/mcp.json に自分で追加してください。
{
"mcpServers": {
"nanoodle": {
"command": "npx",
"args": ["-y", "nanoodle-mcp", "--graphs", "/absolute/path/to/noodles"],
"env": { "NANOGPT_API_KEY": "your-key-here" }
}
}
}
VS Code
.vscode/mcp.json — VS Code のルートキーは mcpServers ではなく servers である点に注意してください。
{
"servers": {
"nanoodle": {
"type": "stdio",
"command": "npx",
"args": ["-y", "nanoodle-mcp", "--graphs", "/absolute/path/to/noodles"],
"env": { "NANOGPT_API_KEY": "your-key-here" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"nanoodle": {
"command": "npx",
"args": ["-y", "nanoodle-mcp", "--graphs", "/absolute/path/to/noodles"],
"env": { "NANOGPT_API_KEY": "your-key-here" }
}
}
}
Claude Desktop
Cursor/Windsurf と同じ形式で、claude_desktop_config.json の
mcpServers の下に設定します。
ChatGPT
ChatGPT はリモート HTTPS MCP サーバーにのみ接続します。ホスト済みのエンドポイントは
すでに稼働しています。https://mcp.nanoodle.com/mcp を追加してください(Nano で呼び出しごとに課金され、API キーは不要です)。ローカル stdio(npx nanoodle-mcp --graphs …)は引き続き BYOK 方式で、ChatGPT からは接続できません。
⚠️ 実際に費用が発生します
サーバーはあなたの費用で実行されます。nano-gpt.com の API キー(BYOK)を使うか、キーなしの場合は
x402 経由であなた自身の Nano ウォレットを使います。tools/call を実行するたびに、NanoGPT API に対してワークフローが実行され、その残高から費用が発生します。通常、呼び出すタイミングは呼び出し元の AI エージェントが自ら判断します。実行してもよいグラフだけを対象にし、残高をこまめに確認してください。
各結果の末尾には cost: $X.XXXX の行が表示されるため、エージェントとあなたの両方が呼び出しにかかった費用を確認できます。
ウォレットモード — アカウントも API キーも不要(x402)
NanoGPT は x402 のアカウント不要決済に対応しています。
キー不要の API 呼び出しに対して、Nano の請求情報とともに HTTP 402 が返されます。支払いを済ませると、呼び出しが完了します。
サーバーにウォレットを設定すれば、この処理が自動で行われます — NanoGPT のアカウント、API キー、登録は一切不要です:
export NANO_SEED=<64-hex seed> # account 0 pays; or NANO_PRIVATE_KEY=<64-hex key>
nanoodle-mcp --graphs ~/noodles --max-usd 0.50
呼び出しごとに、サーバーは 402 の請求情報を受け取り → Nano の送信ブロックにローカルで署名し →
Nano RPC ノード(--nano-rpc / NANO_RPC_URL、既定値は
rpc.nano.to)を通じてブロードキャストします → NanoGPT が入金を検知し、結果を返します。
シード/秘密鍵がプロセスの外に出ることはありません。RPC ノードに送信されるのは署名済みブロックのみで、どちらの秘密情報もログに記録されません。API キーが設定されている場合は、常に API キーが優先されます。ウォレットが使われるのは、キーがない場合のみです。
Proof-of-Work の信頼性。 すべての送信ブロックに Nano の Proof-of-Work が必要です。
サーバーはまず RPC ノードの work_generate を呼び出しますが、公開ノードはこれを拒否したり、制限したりすることがよくあります(GPU がない、キーが必要など)。フォールバックはローカルでのシングルスレッド CPU 計算で、完了まで 1 分かかることがあります。--work-rpc / NANO_WORK_URL で利用できる、高速な方法が 2 つあります。
- ホスト型 GPU work API — ハードウェア不要で、1 秒未満で完了します。例:
nano.to の PoW API(
--work-rpc https://rpc.nano.to) または Nanswap Nodes (--work-rpc https://nodes.nanswap.com/XNO— 高速な work サーバーは有料プランで利用できます。無料プランでは数分待ちのキューに入ります)。API キーはNANO_WORK_KEY(環境変数または--env-file)に設定してください。フラグでは指定しないでください。キーはkeyの本文フィールド(nano.to 方式)とnodes-api-keyヘッダー(Nanswap 方式)の両方で送信されます。 - 独自の nano-work-server
を同じマシンで実行します(
nano-work-server --cpu-threads 8 -l 127.0.0.1:7076→ 数秒で work が完了し、永久に無料です)。
優先順位:--work-rpc(タイムアウトは 2 分のため、サーバーが応答しなくても支払いが止まりません)
→ --nano-rpc ノード → ローカル CPU。ウォレットは、ブロックが公開された時点で次のブロックの work も事前計算します。また、サーバーモードでは起動時に事前ウォームアップします。正常に動作する work ソースがあれば、呼び出し元が Proof-of-Work の完了を待つことは事実上ありません。
最後の手段であるローカル CPU 処理は Node のメインスレッドで実行されます。--serve モードで送信難易度の計算に数分かかると、その間 HTTP サーバー全体が停止します。リモートの work ソースが安定している場合は、--no-local-work を指定してください。その場合、送信は代わりに正常に失敗します(支払い不能な請求は事前に拒否され、返金や支払いの送信に失敗した場合は、残高がウォレットに残り、次回の精算で移動されます)。
これはホットウォレットです。 貯蓄用ではなく、少額の資金を入れた専用ウォレットを使用してください。残高が自然な支出上限になり、--max-usd で呼び出しごとの上限も設定できます。NanoGPT 側では、過払い分や生成に失敗した場合の返金が自動で行われます。
前払いを希望しますか? ウォレットモードでは、呼び出しごとにオンチェーンで精算します。一度だけ支払って残高を使っていきたい場合は、NanoGPT アカウントがその用途にぴったりです。アカウントに 暗号資産を入金し(Nano も利用できます)、API キーを取得して、通常の BYOK モードでサーバーを実行してください。同じツールを、何度もではなく 1 回の支払いで利用できます。
サーブモード — ヌードルをサービスとしてホストする(--serve)
上記の内容はすべて、MCP を stdio 経由で 自分の エージェントとやり取りします。--serve は代わりに、MCP を ストリーミング可能な HTTP 経由でやり取りするため、ヌードルのディレクトリを、誰の エージェントからでも接続できるサービスに変えます。
nanoodle-mcp --graphs ~/noodles --serve 8402
呼び出し側は、キーも登録も不要で、1 つのコマンドで接続できます。
claude mcp add --transport http noodles https://your-host/mcp
# or
grok mcp add --transport http noodles https://your-host/mcp
GET / では、ツール一覧と正確な接続コマンドを記載したランディングページが提供されます(ワンクリックの切り替えで Claude と Grok を選べます。エンドポイントもフラグも同じです)。そのため、サーバーの URL をそのまま共有するだけで、利用を始められます。掲載された各ワークフローには、そのソースへのリンクがあります。エディターで開くリンク(提供中の正確なグラフファイルから作成された共有リンクです。nanoodle エディターでワークフローを読み込み、確認、リミックス、または自分のキーで実行できます)と、/graph/<tool>.json にある生の グラフ JSON です。また、このページには料金の仕組み(デポジットは従量課金のコスト+20%で精算されます。マークアップ分は、ペイアウトアドレスが指定されたグラフでは作者に、それ以外では運営者に支払われ、どのグラフが該当するかもページに表示されます)と、セルフホストの方法も記載されています。このサーバー、エディター、エグゼキューターは MIT ライセンスです(ライセンス)。生成されたメディアは、推測できない /out/… URL で返されます(小さな画像はツールの結果にもインラインで含まれます)。実行自体は ログに記録されません。無料のサーブモードでは、誰が何を呼び出したかの記録は保存されません。課金モードで保存されるのは支払い台帳のみです(金銭のイベントだけで、実行のテレメトリーは保存されません。詳細は以下を参照してください)。
生成されたメディアは --out-ttl 時間が経過すると削除されます。ホストされたサーバーが、呼び出し側による生成物をいつまでもディスクにため込まないようにする、プライバシー保護策です。--serve モードでのデフォルトは 24 時間です。変更するには --out-ttl <hours> を指定してください(0.5 のような小数も指定できます)。すべてを保持するには --out-ttl 0 を指定します。stdio モードのデフォルトは 無効です。ローカルで生成したファイルはそのまま保持できます。ただし、フラグを指定すればその設定が適用されます。削除対象はメディアファイル(画像、動画、音声)のみです。運営者自身の costs.json、gate-state.json、usage.jsonl は削除されません。なお、24 時間のデフォルト値は課金ゲートのリプレイ可能期間と一致しています。有料の結果は 24 時間リプレイ可能で、/out/ URL を参照します。そのため、課金モードで --out-ttl を 24 時間未満に設定すると、リプレイした結果がすでに削除されたファイルを指す場合があります。
プライバシー — サーバーに保存されるもの
デフォルト設定で実行すれば、ホスト型サーバーと同じ約束があなたの環境でも守られます。すべての行をこのリポジトリで確認できます。
- アカウント、API キー、サインインは不要です。 課金モードでは、支払いだけが呼び出しを許可します。
- プロンプトや入力がディスクやログに書き込まれることはありません。 入力メディアはメモリ上だけで処理され、保存されることはありません。課金モードでは、支払いと呼び出しを結び付ける短いハッシュ(
hashArgs)だけが保持され、引数は保持されません。 - 生成されたメディアは
--out-ttl時間後に自動削除されます(--serveではデフォルト 24 時間、ローカルの stdio では無効)。それまでは推測できない/out/…URL で配信されます。すべてを保持するには--out-ttl 0を設定します。 - 結果は配信のためにメモリ上に保持され、保存されません — 再起動状態ファイルに結果のテキストやエラーの詳細は含まれません。
- 分析、トラッカー、IP ログはありません — アプリはリクエストログを保持しません。課金モードで書き込まれるのは
usage.jsonlだけです。これは公開 Nano 台帳に対応する、支払いのライフサイクルイベントを記録する台帳であり、実行のテレメトリーやエラーテキストは含みません。無料のサーブモードでは台帳も一切書き込まれません。
gate-state.json 自体に顧客のコンテンツが含まれることはありません。デプロイによる再起動をまたいで処理中の支払いを安全に保つために存在し、見積もりと未送信の支払いを保持しますが、有料ツールのテキスト出力や上流からのエラー詳細がディスクに書き込まれることはありません。メディアの結果は /out/ のポインターとレシートだけが保持され、テキストの結果は何も保持されません。そのため、実行後に呼び出し元が再試行する前に再起動した場合、ディスク上のコンテンツを再生するのではなく、ツールを再実行します(課金は 1 回、配信も 1 回 — 運営者はモデル呼び出しの重複分を負担します)。失敗した実行では、元のエラーメッセージではなく、固定のプレースホルダーと返金状況が再生されます。
注意点を明記しておきます。生成は NanoGPT の API 上で実行されるため、送信中のプロンプトの内容には同社のプライバシーポリシーが適用されます。
無料のサーブモードでは、あなたの残高が使われます — 信頼できるネットワークなら問題ありませんが、オープンなインターネットでは破綻につながります。そうした環境では、呼び出しに課金してください。
呼び出しごとの課金(--charge-usd)
nanoodle-mcp --graphs ~/noodles --env-file wallet.env \
--serve 0.0.0.0:8402 --public-url https://noodles.example.com --charge-usd 0.05
これで、すべてのツール呼び出しは、どちらの側にもアカウントを作らずに、呼び出し元が Nano(XNO)で支払うようになります。エージェントがたどるフローは次のとおりです(サーバーの MCP instructions が自動的にエージェントに教えます)。
各 PAYMENT REQUIRED の見積もりで、tools/call は payUrl、watchUrl、および next の指示を返して終了します(blocking: false)。
- 支払う。 ユーザーには
payUrlだけを表示します(正確な金額の QR コード)。Nano ウォレットであればどれでもスキャンできます。watchUrlやウォレットアドレスは絶対に表示しないでください。 - 同じ支払いリンクで直ちに監視する。 エージェントは見積もりを受け取ったらすぐに
watchUrl(GET /x402/watch/<id>、エージェント専用 SSE)を開きます。状態が変わるたびにstatusイベントが 1 件送信されます。支払いが着金すると、ストリームはdone: trueとフェーズ 3 用のnextフィールドを含めて終了します。(支払いページも同じストリームを使用します。代替手段としてGET /x402/status/<id>?wait=1をポーリングしてください。)検出は RPC のポーリング、または--nano-wsによるプッシュ通知で行われ、約 1 秒で完了します。 - 結果を受け取る。 監視ストリームが支払い完了で終了した後に限り、同じ引数に
_payment_idを加えてツールを再度呼び出します。このtools/callは結果ストリームとなり、ワークフローを実行し(ストリーミングトランスポートでは進捗のハートビートを送信)、レシートとともに結果を返します。支払いを監視している間は開かないでください。同じ_payment_idで再度呼び出すと、キャッシュされた結果が無料で再生されます。
支払った金額は価格ではなくデポジットです。呼び出しの決済額は、実行時に実測されたモデルコストの 20% 増しとなり、それを超える金額はすべてお釣りとして支払い元のウォレットに返金されます。これは NanoGPT 自体が採用しているデポジット→計測→返金モデルを一段上で行うものです。見積もり額に基づいて支払うことはありません。
Nanoには支払いメモがないため、各見積もりの金額にはランダムなダストのrawが少し含まれます。金額がメモの役割を果たします。見積もりは15分後に期限切れになります。遅れて届いた支払いはそのまま返金され、支払い後に実行が失敗した場合は自動的に返金されます。引数は見積もり発行前に検証されるため、入力ミスに対して支払う必要はありません。また、任意の共有リンクの料金は事前に算出できないため、課金モードではrun_noodleを利用できません。
料金設定:--charge-usdは、預託金の上限額と、まだ一度も実行されていないツールの初回見積もり額を設定します。ツールの実行後は、預託金が実際のコストに合わせて自動調整されます。見積もり額は決済価格の2倍(costs.jsonサイドカーに記録された、観測済みの計測コストの最大値+20%)となり、1セント単位で切り上げられます(最低1セント)。計測コストが0.004ドルのツールの預託金は、固定の上限額ではなく0.01ドルです。上限額は余裕をもって設定してください。多めに預けても、差額は釣り銭として戻るため、呼び出し側に損はありません。一方、預託金が少なすぎると、徴収した額を超えるコストが発生する場合があり、その差額は運営者の負担になります(グラフの預託金が直近の観測コスト+20%を下回っている場合、ゲートは起動時に警告を表示します)。XNOの換算レートはNanoGPT自体から取得します。ゲートは認証キー不要のx-x402プローブを実行し、請求書に記載された正確なraw-XNO/USDのペアを保持します。これは下流の支払いが決済される際と同じレートなので、見積もり額とコストが為替レートによって食い違うことはなく、市場データサービスも利用しません(プローブの請求書は支払われず、期限切れになるだけです)。キャッシュは60秒間有効で、プローブが停止しても古いキャッシュが使われます。必要な場合は--xno-usdで固定レートを指定できます。グラフごとの上書き設定は、グラフJSONに手動で追加するトップレベルブロックです。
"x402": { "usd": 0.10, "author": "nano_1abc…" }
humanize-commentでは、リクエストごとに個別に見積もります。見積もりは、実際に送信する下書き、コンテキスト、ガイダンス、maxCharsに基づいて作成されます。各呼び出しのmax_tokensは、そのリクエストに応じて設定されます。maxCharsが指定されていればその値、指定されていなければ下書きの長さに、少量の余裕を加えた値です。判定役は、ランキング用JSONとGLMの推論にもトークンを確保します。これらは同じmax_tokensの予算を共有します。トークン数は、1トークンあたり約3.5バイトとして推定されます。料金算出上の最悪ケースには、各ライターの1回ずつの実行、追加の再試行1回、判定役の実行に加え、保護された範囲を修正できる場合、または判定役に適合する書き換えを1つ確認するよう求める場合(タイトル、文字数上限、必須の結びなど)の判定役の2回目の実行が含まれます。Cydoniaが失敗してStarry Oceanのフォールバックが実行された場合は、両方の呼び出しに課金されます。
ホスト型の支払いでは、見積もり額が顧客の支払額の上限になります。推定額または請求額によって支出が見積もり額を超えるステップはスキップされます。ライターのステップがスキップされた場合、結果は部分的なものになるか、何も送信されていなければ請求は発生しません。判定役がスキップされた場合、または使用できない場合はエラーとなり、元の下書きが成功したコメントとして返されることはありません。預託金は、算出された料金に12%を上乗せした額(最低0.001ドル)を切り上げた額で、算出料金を下回ることはありません。ホスト型の支払いの決済では、計測コスト+20%と見積もり預託金のうち、低い方を顧客に請求し、差額を返金します。プロバイダーの計測額が見積もり額を超えた場合、その超過分は運営者の負担になります。この返金と上限はホスト型の支払いに適用されます。ウォレットから直接支払う場合は上限がなく、返金もありません。短いコメントに、最も長いコメントと同じ預託金は要求されません。グラフのusdは、最も長いリクエストに対する上限額にすぎず、モデルの料金が不明な場合に使用されます。
usdは、それ以外のすべてのツールの預託金を上書きします。authorは、成功したすべての呼び出しで発生する20%の上乗せ分を、そのアドレスに送金します。上乗せ分は預託金ではなく、実行で実際に発生したコストを基準に計算され、コスト差し引き後の預託金残額が上限となります(預託金がコスト+20%に満たない場合、authorに支払われるのは残額のみです)。Nanoにはネットワーク手数料がなく、このサーバーも上乗せ分を受け取らないため、送金される分はすべてクリエイターの取り分になります。authorフィールドがない場合、上乗せ分はサーバーを実行しているウォレットに残ります。グラフごとに有効化する設定であり、デフォルトでは有効になりません。決済された呼び出しごとの正確なraw値は次のとおりです。
cost = metered model cost, converted at the deposit's own oracle pair, rounded up
markup = cost / 5 (20%, integer floor)
take = min(markup, deposit − cost) → author (or kept, if no author field)
change = deposit − cost − take → back to the payer
デポジットを超える費用がかかった実行では、デポジット全額が保持され、超過分は運営者が負担します。モデルが費用なしと報告した実行は $0 で精算され、デポジット全額が返金されます(メーターが算出していない数値をもとに、呼び出し元に請求することはありません)。計算は最初から最後まで整数で厳密に行われます。USD の小数は文字列からナノドルに変換し、レートにはオラクル請求書の文字どおりの raw/USD ペアを使います。あらゆる変換は、切り捨てまたは切り上げを明示した BigInt の比率演算で行い、浮動小数点数がオンチェーンの値に触れることはありません。
ウォレット(--env-file 経由の NANO_SEED / NANO_PRIVATE_KEY)は、支払いの受け取り、返金、作者への支払いを行います。また、API キーを設定しない場合は、x402 経由で NanoGPT にリクエストごとの支払いも行うため、サービス全体でナノイン・ナノアウトを実現できます。API キーを使用する場合、実行の費用はそのキーから支払われ、ウォレットは顧客側の処理のみを担います。
支払いの検出
Nano RPC ノードの receivable をポーリングする方法(見積もりが保留中の間は 1 秒間隔)が、常時有効なデフォルトです。--nano-ws wss://… を追加すると、Nano ノードの WebSocket を購読してプッシュ通知で検出できます。これにより精算は実質的に即時となり、ポーリングは安全策としての補助になります。公開 WebSocket も利用できます(例:執筆時点では wss://nanoslo.0x.no/websocket が動作していました)。信頼性を重視するなら、自分のノードを使ってください。どちらの場合も、ポーラーは account_history も確認するため、同時に実行中のウォレットが受け取った支払いも検出されます。
支払い台帳
課金モードでは、<out>/usage.jsonl は支払い台帳です。金銭イベント(quote、paid、refund、change、author_payout)ごとに 1 行だけ記録します。これはサーバー自身が管理する金銭の移動記録であり、クライアント側の記録は含みません。意図的に使用ログではありません。run イベント、実行時間、成功・失敗のテレメトリー、上流エラー文字列(ユーザーのコンテンツが含まれる可能性があります)は記録しません。金銭イベントには .tool が含まれますが、ツール名は支払いの対象であり、実行の記録ではありません。そのため、どのツールが収益を生んだかは確認できますが、誰がいつ何を実行したか、失敗したかどうかはわかりません。返金には固定カテゴリ(run_failed、late_payment)を記録し、元のエラー文は決して記録しません。完全なエラーは引き続き呼び出し元と運営者の stderr に伝わります。無料提供モードでは台帳は一切書き込まれません。設定例をいくつか示します。
jq -r 'select(.event=="paid") | .tool' usage.jsonl | sort | uniq -c | sort -rn # paid calls per tool
jq 'select(.event=="paid") | .settleMs' usage.jsonl # quote→settle latency
jq 'select(.event=="paid") | .usd' usage.jsonl | jq -s add # gross deposits taken
jq -r 'select(.event=="refund") | .reason' usage.jsonl | sort | uniq -c # refunds by category
ホスティングのチェックリスト
-
リバースプロキシ/トンネル:localhost にバインドし、前段に Caddy/nginx/cloudflared を配置して HTTPS を使用します。また、
--public-urlに外部向け URL を設定します(支払いリンクとメディアリンクの生成元になります)。 -
systemd(パスを調整してください):
[Unit] Description=nanoodle-mcp serve After=network-online.target [Service] ExecStart=/usr/bin/npx nanoodle-mcp --graphs /srv/noodles --out /srv/noodle-out \ --env-file /srv/wallet.env --serve 8402 --public-url https://noodles.example.com \ --charge-usd 0.05 --work-rpc http://127.0.0.1:7076 Restart=on-failure [Install] WantedBy=multi-user.target -
ウォレットの残高は少額に保つ:ウォレットはホットウォレットです。収益は定期的にコールドストレージへ移してください。API キーを使って運用する場合は、そのアカウントの残高にも上限を設定してください。
-
ワークサーバー:返金と支払いには Nano 送金が必要で、Proof of Work も必要です。ホスト型の GPU ワーク API(nano.to、Nanswap。キーは環境ファイル内の
NANO_WORK_KEY)を使うか、所有する任意のマシン上のnano-work-server --gpuに tailnet 経由でNANO_WORK_URLを向けてください(ワークリクエストに含まれるのはブロックハッシュだけで、秘密情報は含まれません)。いずれの場合も--no-local-workを併用すると、ワークの停止時に CPU ワークによってサーバーが停止するのを防げます。ウォレット情報とキーの環境変数はすべて--env-fileに設定してください。このファイルでは、キーを含む WebSocket URL(例:Nanswap のwss://nodes.nanswap.com/ws/?ticker=XNO&api_key=…)用にNANO_WS_URLも設定できます。 -
意図的に認証はありません。課金サーバーでは、支払いが認可となります。見知らぬ人に実行されても困らないグラフだけを提供してください。
動作の仕組み
~/noodles/
generate-hero-image.json → tool "generate-hero-image"
make-jingle.json → tool "make-jingle"
--graphs 内の読み取り可能な *.json グラフは、それぞれ1つの MCP ツールになります。
| ツールのフィールド | グラフからの導出方法 |
|---|---|
name | .json を除いたファイル名を [a-z0-9_-] にサニタイズします(重複する場合は -2、-3、…が付きます) |
description | グラフの最初のコメント(存在する場合)、依存関係順のノード名を含むノードチェーン(例:text:Feature -> llm -> image:Mockup)、returns … コントラクト(出力の種類、シンクのモデル/サイズ、ディスクへの保存に関する注記)、支出に関する警告、そしてツールの実行後は最後に確認されたコスト(last run $0.018) |
inputSchema | 配線されていないフィールドごとに1つの文字列プロパティを設定します。nanoodle CLI の inspect と同じ形式です。ドロップダウンフィールドは enum になり、組み込みのデフォルト値がない入力だけが required になります |
| メディア入力 | 画像/音声/動画の入力には ファイルパスまたは https URL を指定します。ローカルファイルはインラインの base64 として渡されます |
| 結果 | テキスト出力はテキストブロックとして返します。メディア出力は --out(デフォルトは ./nanoodle-out)に保存され、絶対パスを返します。最後のテキストブロックでは実行コストを報告します。実行によって呼び出し元が要求した内容に変更があった場合は、先頭に note: ブロックが付きます(以下を参照) |
実行時にプロンプトがそのまま使われない場合は、結果でその旨を通知します。 多くの画像・動画モデルは長すぎるプロンプトを拒否します。また、グラフではプロンプトは通常、上流の LLM が作成するため、入力した人がおらず、短くできる人もいません。nanoodle(0.8.0+)は実行が確実に 400 エラーで失敗するのを避けるため、文の切れ目でモデルの上限に合わせてプロンプトを短縮します。その場合は呼び出し元に通知する必要があるため、ツールの結果の先頭に短縮内容が表示されます。
note: prompt trimmed for "Poster" (qwen-image-3) — the prompt was 1320 characters
and this model accepts at most 800, so nanoodle cut it to 791 characters at a
sentence boundary. The run used the shortened prompt.
すでに実行料金が発生しているチャージモードでは、特に重要です。ライブラリは process 警告も出力しますが、stderr を受け取るのはサーバーを起動した側であり、料金を支払ったエージェントではありません。
⚖️ Decide ゲートが「いいえ」と答えた場合、それは結果であり、エラーではありません。 nanoodle 0.9.0 は Decide ノードを実行します。「はい/いいえ」ゲートが「いいえ」と判定すると、ステータスは gated となり、その分岐の実行を停止します。ツールの結果は通常どおりで(isError ではありません)、判定にかかった少額のコストが請求され、ゲートの後続処理は実行も請求もされません。結果の先頭には次の内容が表示されます。
gated: "Is it a cat?" answered no (yes 12%), so the run stopped there on purpose — skipped, not billed: "Cat poem". This is a result, not an error.
Cat poem: skipped — gate "Is it a cat?" answered no
cost: $0.000003
知っておくべきプロトコルの動作:不正な呼び出し(未知のツール、未知の引数/不足している引数/文字列以外の引数)は、一切課金される前に JSON-RPC -32602 として拒否されます。実行に失敗した場合(ネットワークエラー、モデルエラー、キー不足)は、isError: true を含む通常のツール結果として返されます。
usage: nanoodle-mcp --graphs <dir> [--graphs <dir> …] [--out dir] [--key K] [--env-file path] [--nano-rpc url] [--work-rpc url] [--max-usd n]
--graphs dir directory of noodle-graph.json saves (required; repeat to serve
several dirs — scanned in order, so an earlier dir wins name clashes)
--out dir where media outputs are saved (default ./nanoodle-out)
--key K NanoGPT API key (defaults to NANOGPT_API_KEY)
--env-file p read NANOGPT_API_KEY / NANO_SEED / NANO_PRIVATE_KEY / NANO_WORK_URL /
NANO_WORK_KEY / NANO_WS_URL from a .env-style file
--nano-rpc u Nano RPC node for wallet mode (default https://rpc.nano.to; NANO_RPC_URL)
--work-rpc u dedicated work_generate endpoint — a local nano-work-server or a hosted
GPU work API (NANO_WORK_URL; NANO_WORK_KEY carries its API key;
falls back to --nano-rpc, then local CPU work)
--max-usd n wallet mode: refuse any single x402 invoice above $n
キーの優先順位は nanoodle CLI と同じです:--key > --env-file > NANOGPT_API_KEY。ウォレットのシークレットは環境変数または --env-file からのみ取得され、argv からは取得されません。実行可能なグラフが含まれるディレクトリがない場合、サーバーは起動を拒否し、ファイルごとの理由を stderr に出力します。stdout はプロトコル専用です。
プロジェクトごとのグラフと共有ライブラリ
--graphs は繰り返し指定できるため、1つのサーバーで複数のフォルダーを統合できます。推奨される使い方は、プロジェクト専用のツールを置く noodles/ ディレクトリをリポジトリにコミットし、その後にグローバルライブラリをフォールバックとして指定することです。
nanoodle-mcp --graphs ./noodles --graphs ~/noodles
ディレクトリは指定された順にスキャンされ、名前が競合する場合は先に指定されたディレクトリが優先されます。両方のフォルダーに changelog.json がある場合、プロジェクト側は changelog、共有側は changelog-2 になります。そのため、./noodles に同じ名前のグラフを置くだけで、プロジェクト側から共有ツールを上書きできます。一方、~/noodles にあるほかのツールは引き続き利用できます。読み取れないディレクトリ(入力ミス、または存在しないフォルダーなど)がある場合は、その場所を示すハードな起動エラーになります。黙って一部だけ読み込むことはありません。
エディターへの組み込み
ほとんどのクライアントでは MCP の設定はプロジェクトごとに管理されるため、2 ディレクトリのパターンは、対象のグラフのすぐ隣にあるリポジトリ内に置きます。Claude Code の場合は、プロジェクトのルートにある .mcp.json です。これを noodles/ と一緒にコミットすれば、クローンした全員が同じツールを使えます。
{
"mcpServers": {
"nanoodle": {
"type": "stdio",
"command": "npx",
"args": ["-y", "nanoodle-mcp", "--graphs", "./noodles", "--graphs", "/home/you/noodles"]
}
}
}
相対パスはプロジェクトのルートを基準に解決されます。プロジェクトスコープの nanoodle サーバーは、同じ名前のユーザースコープのサーバーより優先されるため、.mcp.json があるリポジトリでは独自のグラフが使われ、それ以外のディレクトリではグローバルインストールがそのまま使われます。
コミットする設定から除外すべきものが 2 つあります。API キー(env は省略し、NANOGPT_API_KEY を環境変数から渡すか、--env-file にリポジトリ外のファイルを指定してください。キーは絶対にコミットしないでください)と、チームのリポジトリの場合は個人用ライブラリのパス(上記 2 つ目の --graphs は あなたの マシン上の絶対パスです。共有リポジトリの設定からは削除し、./noodles だけを残してください。MCP の引数では ~ は展開されません)。Cursor(.cursor/mcp.json)と VS Code(.vscode/mcp.json)では、インストールに記載された設定形式で同じ args を使用します。
任意の共有リンクを実行する
nanoodle の共有リンクはすべて、実行可能なツールです。保存済みのグラフに加えて、サーバーは常に run_noodle というツールを 1 つ公開します。このツールは任意の共有リンクを受け取り、ファイルなしで実行します。
run_noodle("https://nanoodle.com/#g=…", { "Text": "a lighthouse at dawn" })
リンクを url として渡し、ワークフローの入力を inputs として渡してください(グラフ独自のツールで使うものと同じ分かりやすいキーを指定します。メディア入力にはファイルパスまたは https URL を指定します)。#g=/#j= のワークフローリンク、#a= のアプリリンク、およびそれらへの短縮リンクを受け付けます。直接リンクはローカルでデコードされます。ネットワーク読み込みが発生するのは、フラグメントのない短縮リンクのみで、認証情報は送信されません。他のすべてのツールと同様、実行には実際の費用が発生し、最後に cost: $X.XXXX の行が表示されます。
グラフの作成
nanoodle エディターでワークフローを作成してテストし、💾 を押して、ダウンロードした noodle-graph.json を --graphs フォルダーに配置します(名前を変更してください。ファイル名がツール名になります)。新しいファイルを読み込むには、サーバー(または MCP クライアント)を再起動してください。
ツールの説明
グラフ内の最初のコメントノードは、MCP ツールの説明としても使われます。テキストは自動生成されたノードチェーンの先頭に置かれるため、呼び出し元のエージェントは最初にその説明を読みます。どの入力から何を生成するツールなのかを、1 文で簡潔に記述してください。たとえば、「1 行の機能説明から製品のモックアップ画像をレンダリングします。」 のようにします。長いテキストは 200 文字で切り詰められ、空白文字はまとめられるため、1 行に収まるように書いてください。コメントのないグラフでは、従来どおりノードチェーンだけが表示されます。
実行が成功するたびに、ツールの実際の費用が <out>/costs.json に記録されます(メディア出力の隣に置かれる小さな {tool: {usd, at}} サイドカーファイル)。そして last run $X として説明に反映されます。これは推定ではなく、実際に観測された値です。サーバーは notifications/tools/list_changed 通知で変更を知らせるため、この通知に対応する MCP クライアントではセッション中に価格が更新され、対応していないクライアントでは再起動時に反映されます。
制限事項
正直な一覧です。ほとんどは実行エンジンから引き継いだ制限です。
- フィードフォワード型の DAG のみです。 nanoodle のグラフはステートレスなパイプラインで、ループや会話、呼び出し間のメモリーはありません。
- 呼び出しごとに 1 回実行し、ストリーミングには対応していません。
tools/callはワークフロー全体が完了するまでブロックされます。動画グラフでは数分かかることがあります。MCP の進捗通知にはまだ対応していません。 - グラフは起動時に一度だけ読み込まれます。
--graphs内のファイルを追加または編集するには再起動が必要です。セッション中にツール一覧は変更されません(listChanged通知には対応していません)。 - ヘッドレス環境での対応範囲は
nanoodle0.9.0(このパッケージの依存関係)に準じます。 ローカルメディアを扱うグラフ(resize、combine、trim、extract-audio、video-frames、soundtrack)はお使いのマシンで実行されます。可能な限り純粋な JS を使い、それ以外はPATH上の ffmpeg を使います。Decide、Clean voice(cleanvoice)、3D model(model3d)、3D input(mupload)、カスタムエンドポイントノードも読み込まれて実行されるため、起動時にスキップされません。Decide ゲートが閉じている場合は、通常のgated結果になります。対応ノードの表を参照してください。ライブラリが認識しないノードタイプを含むグラフは、引き続き起動時にスキップされ、stderr にメッセージが出力されます。 - メディアはインラインで送信されます。 NanoGPT にはアップロード用のエンドポイントがないため、メディア入力はリクエスト本文に base64 形式で送信されます(最大約 4 MB。費用が発生する前に確認されます)。
- API キーモードでは費用の上限がありません。 サーバーは、クライアントが高額なグラフを繰り返し呼び出すのを止めません。NanoGPT の残高だけが制限になります。(ウォレットモードではこの点が改善されます。
--max-usdで呼び出しごとの上限を設定でき、ウォレットの残高で合計額が制限されます。)
テレメトリーや分析機能はありません。API キーやウォレットのシークレットがログに記録されたり、標準出力に表示されたりすることはありません。
テスト
完全にオフラインで実行できます。テストスイートは、あらかじめ用意されたローカルの NanoGPT スタブに対して実際のサーバーを起動し、stdio 経由で MCP ハンドシェイクを行います。
npm test
また、リリース時のチェックも行います。3 つのリリースマニフェストでバージョンが一致していること、ランディングページのチップ表に nanoodle ライブラリが現在もサポートしているノードタイプのみが記載されていること、起動経路で GPL-3.0 の依存関係が静的にインポートされていないことを確認します。
これらのチェックはオフラインで行われるため、リポジトリ内のファイル同士を比較し、npm の情報は確認できません。ネットワーク接続が必要なチェックがもう 1 つあります。このチェックは npm test ではなく公開ワークフローで実行されます。scripts/assert-npm-version.mjs は、server.json のバージョンが実際に npm に公開されていない場合、レジストリへの公開を失敗させます。PUBLISHING.mdを参照してください。
レジストリ
server.json は公式 MCP レジストリのマニフェスト(io.github.nanoodlecom/nanoodle-mcp)です。リリースチェックリストはPUBLISHING.mdを参照してください。
どのリポジトリを選べばよいですか?
このサーバーは、保存済みのワークフローを型付き MCP ツールとして公開します。お使いのエージェントが MCP サーバーではなく Agent Skills に対応している場合は、nanoodle-skill(あらゆるグラフの構築方法をエージェントに教えます)とnoodle-skills(あらかじめ用意された単一タスク用ワークフロー)が、サーバーを実行せずに同様の機能を提供します。GitHub CI でグラフを実行しますか? → run-noodle-action。
ライセンス
MIT: このサーバー(LICENSE を参照)、
nanoodle エディター、およびこのサーバーがグラフの実行に使用する
nanoodle エグゼキューターです。関連プロジェクトの nanoodle-py、
nanoodle-skill、
noodle-skills も MIT です。
グラフは、これらのライセンスの対象ではありません。 noodle-graph.json は、その
作者の著作物です。これをツールとして提供したり、/graph/<tool>.json からダウンロードしたりしても、このリポジトリのライセンスが適用されることはありません。このプロジェクトが管理する公開ライブラリの
awesome-noodles は、そのリポジトリに記載されているため MIT です。それ以外のサーバー上にあるグラフには、それぞれの作者が定めたライセンスが適用されます。
GPL-3.0: 実行時依存関係の nanocurrency です。Nano のキーの導出、ブロックの作成と署名、プルーフ・オブ・ワークの計算を行います。オプションの x402 Nano ウォレットでのみ使用されます。ウォレットモード(NANO_SEED / NANO_PRIVATE_KEY)と課金モード(--charge-usd)が対象です。
これがご自身にとって何を意味するのか、明確にしておきましょう。すべてのインストーラーがこれを受け取ります。 npm install nanoodle-mcp と npx -y nanoodle-mcp は、x402 を使うかどうかにかかわらず、どちらも nanocurrency をダウンロードしてディスクに展開します。インストールした時点で、依存関係ツリーには GPL-3.0 コードが含まれ、このパッケージからビルドするバンドルやイメージにも再配布されます。
オンデマンド読み込みによって変わるのは、より限定的な点、つまりどの実行時にそれが実行されるかだけです。 src/wallet.mjs と src/gate.mjs だけが nanocurrency にアクセスするモジュールであり、bin/nanoodle-mcp.mjs は x402 を制御する分岐内で await import() を通じてこれらのモジュールにアクセスします。そのため、BYOK(API キー)での実行では GPL-3.0 コードは読み込まれず、実行もされません。ただし、インストールはされています。この境界は tests/gpl-boundary.test.mjs で維持しています。
意図的に通常の依存関係として指定しています。npm はデフォルトで optionalDependencies をインストールするため、何も変わりません。これをスキップする唯一の方法は、オプションの peerDependency にすることです。しかしそうすると、ドキュメントで案内しているワンコマンドインストールの npx -y nanoodle-mcp では、ウォレットモードも課金モードも実行できなくなります。アカウント不要のインストールを壊すよりも、正しく表示することを優先します。
NanoGPT および Anthropic とは提携していません。nanoodle.com でワークフローを構築し、コードから実行するには nanoodle-js / nanoodle-py を使用してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。