UseCase · AI

AIに、ICPで作らせる。

2026年、AIチャットからICPを直接操作できるようになりました。ただ便利になった話ではありません。AIに権限を渡すという難題を、ICPは5年前から持っていた仕組みで解いています。

道具は3つ。MCP・Skills・CLI

AIエージェントがICP上でアプリを作り、動かし、運用するための道具立てが2026年に出揃いました。ICP MCP がAIとICPをつなぎ、ICP Skills がAIに正しい書き方を教え、ICP CLI がAIの壊しにくい足場になります。このページは、その3つを非エンジニアでも分かる順序で説明します。

26ツール
ICP MCP が提供する道具。5グループに分かれる
27スキル
ICP Skills の公開ナレッジ。10カテゴリ / Apache 2.0
3種類
委任の期限。1時間 / 24時間 / 7日、いつでも取り消せる
0バイト
Questions-only で動かせるデータ量。構造的に書き換えられない

3つの道具は、それぞれ別の問題を解いている

混同されがちですが、役割はきれいに分かれています。順に見ていけば、どれをいつ使うのか迷いません。

ICP MCP

AIとICPをつなぐ。 AIチャットからキャニスターを探し、質問し、必要なら操作する。DFINITY公式のコネクタで、認証は Internet Identity。

ICP Skills

AIに正しい書き方を教える。 AIは古い知識で自信満々に間違えます。「こう書け」「ここで落ちる」を宛先AIで書いた公式ナレッジ。

ICP CLI

AIが壊しにくい足場をつくる。 dfx の後継。宣言的な設定と環境の抽象化で、AIがうっかり本番を叩く事故を減らします。

なぜ ICP のアプリは、これまで AI から操作できなかったのか

ICP には入口が2つあります。このサイト自体がその両方を持っています。

入口何をするか
HTTPで見るブラウザがキャニスターから HTML を受け取るwww.icp-japan.org を開く
メソッドを呼ぶアプリのロジックを実行する残高を取る、投票する、データを書く

前者は普通のWebと同じなのでAIも読めます。面倒なのは後者だけで、これには4段階が必要でした。① キャニスターIDを知る ② Candid(インターフェース定義)を読む ③ 引数を Candid 形式に変換する ④ 署名する identity を用意して呼ぶ。

Web2なら「URLを叩けばJSONが返る」で済む話が、ICPでは4段階。人間でも面倒で、AIには事実上無理でした

ただし、この面倒さには見返りがあります。 Web2のAPIは Slack も Stripe も Notion も全部バラバラの仕様なので、AIに使わせるにはサービスごとに個別の統合が要ります。ICPは違って、全キャニスターが Candid という同じ形式で「私にはこのメソッドがあります」と機械可読に自己申告している。入口は高いが、一度入れば全部同じ。ICP MCP はその高い入口を1回だけ作ったものです。1つ作れば ICP 上の全アプリに届く — これは他のチェーンやWeb2ではできません。

APIキーではなく「期限付きの委任状」

ここが他サービスとの決定的な差です。ICPには「APIキー」という概念がそもそもありません。

Web2のAPIキーは sk-proj-xxxxx… のような文字列で、意味はひとつ「これを持っている人=本人」。だから渡すことは本人になれる権利を丸ごと渡すことで、コピーされても見分けがつかず、取り消すには作り直して全部差し替えるしかない。比喩は合鍵です。

ICPでは、キャニスターへの呼び出しはすべて秘密鍵で署名されています。「文字列を持っているか」ではなく「署名できるか」で本人確認する。共有する秘密が存在しません。

ではAIに秘密鍵を渡すのか。渡しません。 ここで delegation(委任状)が出てきます。

  1. AIアプリ側が、その場限りの鍵ペア(セッション鍵)を作る
  2. あなたの Internet Identity がその公開鍵に署名を出す。内容は「この鍵の持ち主は、◯月◯日◯時まで、私の代理をしてよい
  3. AIはこの署名済みの紙と、自分のセッション鍵で署名して呼び出す
  4. キャニスター側が「署名はIIのものか」「期限内か」を検証して受け入れる

比喩は合鍵ではなく期限付きの委任状。あなたの実印(秘密鍵)は手元から動かず、期限が来れば自動で無効になり、途中で取り消すこともできます。仕様上の上限は30日、既定は30分で、アプリが maxTimeToLive で希望を伝えます。

もうひとつ効いているのが、あなたのIDがフロントエンドのホスト名ごとに別々に導出されることです。II仕様の言葉では「ユーザーはクライアントアプリごとに別の識別子を持ち、それらは公開鍵やprincipalだけを見ても関連づけられない」。つまりAIに使わせても、アプリをまたいで名寄せされません。

⚠️ 正確を期すための注記: II が発行する委任状そのものは unscoped(どのキャニスターにも使える)です。「この宛先だけに使える鍵」ではありません。範囲を絞っているのは委任状ではなく、ホスト名ごとに別のIDになるという仕組みのほうです。
ICP MCP の画面にある「1時間 / 24時間 / 7日」は、この委任状の期限そのものです。UIの親切心ではなく、プロトコルの機能がそのまま出ています。

そしてICPはこのために新しいものを何も作っていません。Internet Identity は2021年からこの仕組みで、ICP MCP はそれをそのまま使っただけ。逆にWeb2のMCPサーバー(Slack / Notion / GitHub…)がAPIキーやOAuthトークンを渡さざるを得ないのは、Web2側にこの仕組みが無いからです。

AI時代に必要になった「期限付きで、取り消せる代理権」を、ICPは5年前から持っていた。

「読むだけモード」が本当に安全な理由

ICPのサブネットは13台や34台のノードで構成され、その全部が同じキャニスターのコピーと同じデータを持っています

データを書き換えるときは、全ノードが同じように書き換わらないと困ります(1台だけ残高が違ったら、どれが正しいか分からない)。だから書き換えは全ノードで合意を取る。これが update call で、遅い(1〜2秒)代わりに改ざんできません。

読むだけのときは合意が要りません。1台に聞けば答えは返るし、書き換わらないのでズレる心配もない。これが query call で、速く(数百ms)、状態は一切変わりません。

肝心なのは、どちらかをコードを書くときに宣言すること。Motoko なら public query func … と書くかどうか。そして query と宣言したメソッドは状態を書き換えられません。書こうとしてもコンパイラとランタイムに弾かれる。実装者が気をつけているのではなく、そもそも書けないのです。

だから ICP MCP の Questions-only モードがやっているのは、実質これだけ — AIには query call しか通さない。これで「AIが何かを壊すことは構造的にありえない」が成立します。

何が保証しているか破れるか
Web2の「読み取り専用APIキー」サーバー側の実装。「このキーはGETだけ」と誰かが書いた破れる(実装ミス・設定ミス・スコープの取り違え)
ICPの query callプロトコル。読み取り用の通り道が別破れない(アプリの実装品質に依存しない)
実務上の意味: 最初に触るときは Questions-only + 1時間セッションにしておけば、AIがどれだけ暴走してもキャニスターは1バイトも変わりません。「まず繋いでみる」のリスクがほぼゼロです。

ただし裏返しの注意もあります。query の応答はサブネットの署名が付いていないため、公式ドキュメントは「certified variables を使わないかぎり、queryの結果は未検証として扱うこと」と明記しています。速さと引き換えに何を受け入れているのかは、知っておく価値があります。

ICP MCP — AIチャットからICPを操作する

DFINITY公式の、AIチャットとICPをつなぐコネクタ。ICP上にホストされています。

エンドポイントhttps://mcp.internetcomputer.org/mcp
公開2026-07-23 プレビュー(beta)
対応クライアントClaude / ChatGPT など MCP対応アプリにカスタムコネクタとして追加
認証Internet Identity でサインイン
セッション1時間 / 24時間 / 7日、いつでも revoke
モードActions and questions(実行あり)/ Questions-only(参照のみ)

26ツールの内訳(5グループ)

グループできること
Find canisters and apps6ドメイン・名前・IDのどれからでも「それが何で、誰が制御し、どう振る舞うか」をAIが読める形に
Act as your identity3AIがアプリ上であなたのIIとして振る舞う。委任はオンデマンド発行
Query on-network data3クエリ面を公開しているキャニスターに質問するとで返る。コード不要
Call methods and manage canisters12cycles残高確認からフルデプロイまで。キャニスター作成・top up・コードインストール・ライフサイクル管理
Pull in official IC skills2作り始める前に公式スキル(Motoko / mops / CLI / cycles / セキュリティ)を取得
⚠️ ICP MCP は beta です。ツール数・セッションの選択肢・モードの名前は変わる可能性があります。本ページの数値は 2026-08-09 に案内ページを実際に開いて数えたものです。

ICP Skills — 「宛先が人間ではなくAI」のドキュメント

問題は 「AIは知らないと言わず、それらしく間違える」 ことです。

たとえば Motoko の標準ライブラリは mo:base から mo:core に変わりました。しかしAIの学習データには mo:base 時代のコードが圧倒的に多い。だから「Motokoで書いて」と頼むと、AIは自信満々に import Array "mo:base/Array"; と書きます。動きません。エラーを見せると、今度は別の間違った修正を出す。3往復して、結局自分で調べることになる。しかもAIが悪いわけではありません — 学習した時点ではそれが正解でした。

同じことがICPのあちこちで起きます。dfx.jsonicp.yamlステーブルメモリの書き方(間違えるとアップグレードでデータが消える)、ICRC-1とICRC-2の使い分け、cycles の freezing threshold(間違えるとキャニスターが凍る)。後ろ2つは動かないだけでなく壊れる類のミスです。

ドキュメントSkill
読む相手人間AI
書いてあること文脈、背景、選択肢の比較「こう書け」「これはやるな」「ここで落ちる」
特に効くのが「ここで落ちる」です。これは公式ドキュメントには普通書かれていない、人間が何度も踏んだ地雷の記録だから。だから公式の宣言がこうなっています — 「スキルと一般知識が食い違ったら、スキルが正しい」。これは説明ではなく、AIへの上書き命令です。

規模は 27スキル / 10カテゴリ / Apache 2.0(2026-08-09時点)。とりあえず試すなら準備ゼロの On-demand、チーム開発やCIで再現性が要るなら npx skills add で固定する Pinned を使い分けます。

ICP CLI — dfx の後継。なぜ「AI時代の設計」なのか

設定の書き方とデプロイ先の指定が変わりました。違いは小さく見えて、AIに任せるときに効いてきます。

dfxicp-cli
設定dfx.json(JSON)icp.yaml(YAML)
デプロイ先--network ic でネットワーク直指定環境の抽象:-e ic
ビルドdfxがロジックを内蔵recipe に委譲
ローカルネット全プロジェクト共有プロジェクトごとに独立
並列依存関係を明示既定で並列ビルド

なぜこれが「AI時代」の設計なのか

  • YAML + recipe = 宣言的。AIが壊しにくい
  • 環境の抽象化 = AIがうっかり本番を叩く事故が減る
  • プロジェクトローカルなネットワーク = AIを並列で走らせても干渉しない
  • llms.txt = ドキュメント全体をAIにURL1本で渡せる
⚠️ dfx は廃止されていません。「dfxはもう終わり」ではなく「後継として整理されたツールが出た」までが正確です。本番運用の移行を急ぐ必要はありません。

オンチェーンAIの現在地 — 盛らないための注意

「ICPの上でAIが動く」という言い方は、正確には二種類あります。混ぜて語ると嘘になります。

キャニスターは WASM で動き、全ノードが同じ結果を出す(決定的実行)必要があり、命令数にも上限があります。一方 Llama 3.1 8B は数GB。サブネットの合意の中で毎回回すのは素直には無理です。

だからDFINITYの解は「キャニスターの外に専用ノードを置き、キャニスターはそこへの窓口になる」。これが AI workers と LLM canister です。開発者から見えるのは await LLM.prompt(#Llama3_1_8B, "光の速さは?") の1行だけ。

⚠️ トレードオフ: これは「完全にオンチェーンのAI推論」ではありません。 DFINITY自身が dfinity/llm のREADMEでこう書いています — 「Internet Computer 全体としてまだ機密性を保証しておらず、AI worker についても同じ。AI worker を動かしている者は理屈の上ではプロンプトを見得るが、誰が投げたかは特定できない」。DFINITY は「プロンプトそのものは記録せず、リクエスト数やトークン数などの集計値のみ記録する」とも明記しています。ここを盛ると嘘になります。

一方で公式ドキュメントは、推論がICPのランダムビーコンから種を得ており、実行ラウンドごとに決定的でサブネットが検証できるとも書いています。「外部APIを叩いているだけ」でもありません。機密性は無いが、検証可能性はある——この線引きが現在地です。

また、小さいモデルなら本当にキャニスター内で動くことを示すプロジェクトもあります。onicai の llama_cpp_canister は llama.cpp をキャニスターに載せ、DeepSeek-R1 1.5B までを動かしています。発信するときは実用寄り(LLM canister 経由)研究寄り(小型・キャニスター内実行)を分けて書くと、正確かつ話が面白くなります。

今日から始める3ステップ

いきなり作り始めなくて構いません。順番に踏めば、リスクをほぼゼロにしたまま感触がつかめます。

1. 読むだけで繋ぐ

ICP MCP をAIチャットに追加し、Questions-only + 1時間で接続。キャニスターは1バイトも変わりません。まず「このドメインは何のキャニスターか」と聞いてみるところから。

2. スキルを読ませる

コードを書かせる前に ICP Skills を取得させる。準備ゼロの On-demand でよく、これだけで古い書き方による手戻りが激減します。

3. 小さく作る

新規プロジェクトから ICP CLI を試す。既存の本番を急いで移す必要はありません。壊れて困らないものから始めるのが定石です。

情報源

このページの記述は、以下の一次情報にあたって書いています。参照日は 2026年8月9日

内容出典
query call / update call の違い、queryが未検証である点Canisters — Query calls ↗
アプリごとに別のprincipalが導出される、委任の期限(最大30日・既定30分)、委任がunscopedであることInternet Identity 仕様 ↗
Candid によるインターフェースの自己記述Candid ↗ / Candid 仕様 ↗
ICP MCP のツール数・グループ・セッション・モード(beta)ICP MCP 案内ページ ↗
ICP Skills のスキル数・カテゴリ・ライセンスICP Skills ↗ / index.json ↗
ICP CLI の設計と dfx からの移行ICP CLI ドキュメント ↗
Motoko の標準ライブラリ(mo:base → mo:core)Motoko ドキュメント ↗
LLM canister / AI workers、機密性の限界、対応モデルAI inference ↗ / dfinity/llm ↗
キャニスター内で動く小型LLM(DeepSeek-R1 1.5B)onicai/llama_cpp_canister ↗
数値の扱いについて。 ICP MCP は beta で、ICP Skills は継続的に増えます。このページの数値は参照日時点で実際に一次情報を開いて数えたものであり、今の値は上のリンクでご確認ください。食い違いを見つけた場合は お問い合わせ からご連絡いただけると助かります。

ICP のユースケースを見る

ソブリンクラウド、国家デジタルID、日本の開発者が手がけるプロジェクト。ICPが実運用に入っている領域をまとめています。