defineToolPlugin は、エージェントから呼び出せるツールだけを追加する Plugin を構築します。チャネル、モデルプロバイダー、フック、サービス、セットアップバックエンドは含みません。Plugin のランタイムコードを読み込まずに OpenClaw がツールを検出するために必要なマニフェストメタデータを生成します。
プロバイダー、チャネル、フック、サービス、または複合機能の Plugin では、代わりに
Plugin の構築、チャネル Plugin、
または プロバイダー Plugin から始めてください。
要件
- Node 22.19+、Node 23.11+、または Node 24+。
- TypeScript ESM パッケージ出力。
dependenciesにtypebox(devDependenciesだけでは不十分です。生成された Plugin はランタイムでこれをインポートします)。openclaw >=2026.5.17。openclaw/plugin-sdk/tool-pluginをエクスポートする最初のバージョンです。dist/、openclaw.plugin.json、およびpackage.jsonを同梱するパッケージルート。
クイックスタート
plugins init は次をスキャフォールドします。
| ファイル | 目的 |
|---|---|
src/index.ts | 1 つの echo ツールを持つ defineToolPlugin エントリ |
src/index.test.ts | ツール一覧をアサートするメタデータテスト |
tsconfig.json | dist/ への NodeNext TypeScript 出力 |
vitest.config.ts | src/**/*.test.ts 用の Vitest 設定 |
package.json | スクリプト、ランタイム依存関係、openclaw.extensions: ["./dist/index.js"] |
openclaw.plugin.json | 初期ツール用に生成されたマニフェストメタデータ |
npm run plugin:build は npm run build(tsc)を実行してから
openclaw plugins build --entry ./dist/index.js を実行します。npm run plugin:validate
は再ビルドして openclaw plugins validate --entry ./dist/index.js を実行します。
検証に成功すると次のように表示されます。
openclaw plugins init <id> のオプション:
| フラグ | デフォルト | 効果 |
|---|---|---|
--directory <path> | <id> | 出力ディレクトリ |
--name <name> | タイトルケース化された <id> | 表示名 |
--type <type> | tool | スキャフォールド種別: tool または provider |
--force | オフ | 既存の出力ディレクトリを上書き |
ツールを書く
defineToolPlugin は、Plugin の識別情報、省略可能な設定スキーマ、静的なツール一覧を受け取ります。パラメーター型と設定型は TypeBox スキーマから推論されます。
任意ツールとファクトリーツール
ツールをモデルに送信する前にユーザーが明示的に許可リストへ追加すべき場合は、optional: true を設定します。openclaw plugins build は対応する
toolMetadata.<tool>.optional マニフェストエントリを書き込むため、OpenClaw は Plugin のランタイムコードを読み込まずに、そのツールが任意であることを確認できます。
factory を使用します。特定の実行でオプトアウトする、サンドボックス状態を検査する、またはランタイムヘルパーをバインドする場合です。具体的なツールはランタイムで構築されますが、メタデータは静的なままです。
definePluginEntry を直接使用してください。
戻り値
defineToolPlugin はプレーンな戻り値を OpenClaw のツール結果形式にラップします。
- モデルにその正確なテキストを見せる必要がある場合は文字列を返します。
- モデルに整形済み JSON を見せ、OpenClaw が元の値を
detailsに保持する必要がある場合は JSON 互換の値を返します。
AgentToolResult が必要な場合や、既存の api.registerTool 実装を再利用したい場合は、ファクトリーツールを使用してください。
設定
configSchema は省略可能です。省略すると、OpenClaw は厳密な空オブジェクトスキーマを適用します。生成されたマニフェストには引き続き configSchema が含まれます。
configSchema がある場合、2 番目の execute 引数はそこから型付けされます。
生成されるメタデータ
OpenClaw は Plugin のランタイムコードをインポートする前に Plugin マニフェストを読み取る必要があります。defineToolPlugin はそのための静的メタデータを公開し、
openclaw plugins build がそれをパッケージに書き込みます。Plugin の ID、名前、説明、設定スキーマ、アクティベーション、またはツール名を変更した後は、ジェネレーターを再実行してください。
contracts.tools は重要な検出コントラクトです。インストール済みのすべての Plugin のランタイムを読み込まずに、各ツールを所有する Plugin を OpenClaw に伝えます。マニフェストが古いと、ツールが検出から欠落したり、登録エラーが誤った Plugin のせいにされたりする可能性があります。
パッケージメタデータ
openclaw plugins build は、選択されたランタイムエントリに合わせて package.json も整合させます。
./dist/index.js)を同梱してください。
ソースエントリが機能するのは、ワークスペースローカル開発だけです。
CI で検証する
生成されたメタデータが古い場合、plugins build --check はファイルを書き換えずに失敗します。
plugins validate は次を確認します。
openclaw.plugin.jsonが存在し、通常のマニフェストローダーに合格する。- 現在のエントリが
defineToolPluginメタデータをエクスポートしている。 - 生成されたマニフェストフィールドがエントリメタデータと一致する。
contracts.toolsが宣言されたツール名と一致する。package.jsonがopenclaw.extensionsで選択されたランタイムエントリを指している。
ローカルでインストールして検査する
別の OpenClaw チェックアウトまたはインストール済み CLI から、パッケージパスをインストールします。公開
パッケージの準備ができたら ClawHub 経由で公開します。clawhub package publish
はソースを受け取ります。ローカルフォルダー、GitHub リポジトリ(owner/repo[@ref])、または tarball URL です。
トラブルシューティング
plugin entry not found: ./dist/index.js
選択されたエントリファイルが存在しません。npm run build を実行してから、
openclaw plugins build --entry ./dist/index.js または
openclaw plugins validate --entry ./dist/index.js を再実行してください。
plugin entry does not expose defineToolPlugin metadata
エントリが defineToolPlugin によって作成された値をエクスポートしていません。モジュールのデフォルトエクスポートが defineToolPlugin(...) の結果であることを確認するか、--entry で正しいエントリを渡してください。
openclaw.plugin.json generated metadata is stale
マニフェストがエントリメタデータと一致しなくなっています。次を実行してください。
openclaw.plugin.json と package.json の両方の変更をコミットしてください。
package.json openclaw.extensions must include ./dist/index.js
パッケージメタデータが別のランタイムエントリを指しています。ジェネレーターが出荷予定のエントリにパッケージメタデータを整合させるよう、
openclaw plugins build --entry ./dist/index.js を実行してください。
Cannot find package 'typebox'
ビルド済み Plugin はランタイムで typebox をインポートします。dependencies に保持し、再インストール、再ビルド、検証の再実行を行ってください。
インストール後にツールが表示されない
次の順序で確認してください。openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonに、想定されるツール名を含むcontracts.toolsがある。package.jsonにopenclaw.extensions: ["./dist/index.js"]がある。- Plugin のインストール後に Gateway が再起動または再読み込みされている。