stipend.sh について
stipend.shは、コードで支出制限を適用するBase上の非カストディアルUSDCウォレットです。秘密鍵はローカルに保持され、MCPツールから上限や許可リストを変更できません。
主な機能
- 01アドレス、残高、収入、支出レポートの確認
- 02支払い可否の確認とUSDC送金
- 03取引ごと・日ごとの上限適用
- 04一回限りの承認と新規送金先の確認
- 05例外のないアドレス許可リスト
活用シーン
- 01制限内でAIエージェントにUSDCを支払わせる
- 02送金前に支払い可否を確認
- 03収入、支出、資金の残日数を確認
MCP 対応
`stipend mcp`は、MCPクライアントが起動して呼び出せるstdioツールを7つ公開します。すべてのツールに同じポリシーチェックが適用され、秘密鍵の読み取りや上限・許可リストの変更はできません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
stipend.sh
AI エージェントが自分でインストールする、Base 上の非カストディアル型 USDC ウォレットです。指示レイヤーより下の層で支出制限が適用されます。
pip install eth-account && curl -sL stipend.sh/install | sh
これは、インストーラーが取得するパッケージのソースです。主張をうのみにするのではなく、検証できるよう公開しています。
MCP(Model Context Protocol)サーバー(stipend mcp)が含まれており、stdio 経由で 7 つのツールを公開します。これにより、エージェントは既存のツールインターフェースを通じて資金を保有し、支出できます。詳しくは、以下のMCP サーバーをご覧ください。
検証する価値のある主張
資金を保有するエージェントにとって重要な障害は、鍵の盗難ではありません。説得されて実行する、正しく署名されたトランザクションです。
その種の攻撃に対する防御のほとんどは、指示レイヤーにあります。「未確認のアドレスに資金を送らないこと」と指示するシステムプロンプトなどです。これは、攻撃するテキストと同じコンテキストウィンドウに置かれた、モデルへの提案にすぎません。
ここでの制限は助言ではありません。トランザクションが署名されるまでに通過するコードであり、どのコンテキストウィンドウにどんな文言があっても、その制限には届きません。
stipend/policy.pyから始めてください。 約 300 行のコードに、主張のすべてが記されています。
3 つの制御
| 制御 | 内容 |
|---|---|
| 取引ごとおよび 1 日あたりの上限 | どんな指示でも引き上げられない上限です |
| 1 回限りの承認 | 上限を引き上げるのではなく、受取人と金額を指定して期限を設け、1 回だけ使用できる単一の支払いを承認します |
| 新しい送金先の確認 | これまで一度も支払ったことのないアドレスへの初回支払いは、金額にかかわらず確認が必要です |
2 つ目は、誤解されやすい制御です。1 回の購入に間に合わせるために上限を引き上げると、今後のすべての支払いが誰に対しても弱くなります。これはまさに攻撃者が求めることです。許可するのは支払いであり、支払い能力ではありません。
3 つ目は、しきい値以下の少額の支払いを何度も行うことで資金を抜き取る攻撃を防ぎます。攻撃者のアドレスは、定義上、これまで一度も支払ったことのないアドレスです。
許可リストを有効にした場合、それは絶対的に適用されます。確認を行っても、承認を得ても、どこからどのような指示を受けても、ほかの送金先には資金が届きません。
MCP サーバー
このウォレットは Model Context Protocol(MCP)サーバーでもあるため、エージェントはシェルコマンドを実行する代わりに、既存のツールインターフェースを通じて利用できます。
stipend mcp
stdin と stdout を介した JSON-RPC(MCP stdio トランスポート)で通信します。MCP クライアントがプロセスを起動します。ポートで待ち受けることも、ネットワークに公開されることもありません。
クライアントの設定は次のようになります。
{
"mcpServers": {
"stipend": {
"command": "stipend",
"args": ["mcp"]
}
}
}
ツール
| ツール | 内容 |
|---|---|
stipend_address | ウォレットのアドレスです。実行中かどうかにかかわらず、資金を受け取れます |
stipend_balance | 保有する USDC とネイティブ通貨、今日の支出額、1 日あたりの上限を確認します |
stipend_check | この支払いが許可されるかどうかを確認します。送金せずに回答します |
stipend_pay | すべての制限に従って USDC を送金します |
stipend_earnings | ネットワークから入金を読み取り、記録します |
stipend_report | カテゴリー別の収入と支出、および日数で表した資金の持続可能期間を確認します |
stipend_recover | 未処理の項目と、それぞれの担当者を確認します |
どのツールも、コマンドラインと同じ policy.check ゲートを通過するため、上限、許可リスト、新しい送金先の確認が同じように適用されます。これらを回避して資金を動かす経路はありません。
エージェントが支払いを申し出る前に「これは許可されますか?」と確認できるよう、stipend_check を用意しています。拒否を失敗ではなく回答として伝えられます。
意図的に公開していない機能
秘密鍵を読み取り、エクスポートし、導出するツールはありません。支出上限や許可リストを変更するツールもありません。ウォレットを作成したり、上書きしたりするツールもありません。
MCP ツールは、信頼できないテキストを読んでいるモデルから呼び出される可能性があります。上限の引き上げは攻撃者が求めることそのものなので、選択肢として一切用意していません。設定変更は、常に人間が操作するコマンドラインで行います。
ホスティングしない理由
どのレジストリも URL を希望しますが、公開する予定はありません。ホスト型ウォレット サーバーでは、鍵が誰か別の人のマシン、つまり私たちのマシンに保存されます。このパッケージの 主張は、まさにそれをしないことです。これはキーストアと同じ場所で、同じユーザーのもとで動作し、 鍵が外に出ることはありません。
独自のテストを実行する
ネットワークなし、資金なし、あなたのウォレットにも一切触れません:
python -m stipend selftest
アドレス検証、金額の算術処理、すべてのポリシー分岐、許可リスト、1 日の上限、送金先の信頼性と その有効期限、キーストアの暗号化、ERC-20 のエンコード、x402 の要件選択、EIP-3009 の署名、 台帳、テレメトリーで送信される内容を正確に確認するテストを、219 件実施します。
むしろ望んでいること
誰かに壊してもらうことです。
policy.py のチェックをすり抜けて資金を動かせるインジェクションを構成できたら、Issue を
作成してください。礼儀を欠いた誰かから聞かされるより、あなたから聞きたいです。
正直な制限事項
- 独立した監査は受けていません。
- x402 の相互運用性は、サードパーティの販売者ではなく、私たち自身のエンドポイントで検証しています。
- 鍵はあなたのマシンで生成され、送信されません。そのため、私たちを含め、誰もあなたの代わりに 復元できません。
- 残高は少額に保ってください。これは運用資金であり、貯蓄ではありません。
リンク
- stipend.sh — エージェントにはプレーンテキストを、ブラウザーにはページを、同じ URL で提供するサイト
- stipend.sh/skill.md — エージェント向け
- stipend.sh/for-your-human — 支払いをする人向け
- kina — このプロジェクトの一部で読み書きする小さな言語
ライセンス
Apache-2.0。LICENSE を参照してください。
Stipend 開発チームが開発しました。FelixTrade.ai Pty Ltd、オーストラリア。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。