Veyra について
Veyraは、エージェント決済向けのMCPサーバーと型付きクライアントです。Base上のUSDC支出にサーバー側のルールを適用し、ウォレット所有者の承認にも対応します。
主な機能
- 01決済の作成と状態確認
- 02決済ごと・日次の上限設定
- 03ポリシーに応じた自動実行や承認要求
- 04送金先アドレスの制限
- 05予算・決済元・履歴の確認
- 06シミュレーション決済と監査ログ
活用シーン
- 01APIやデータ購入のエージェント支出を制限
- 02自動上限を超える決済を所有者が承認
- 03シミュレーションで決済フローをテスト
- 04決済状態を確認して重複支払いを防止
MCP 対応
MCPサーバーはエージェントに、予算・機能・決済元の確認と、決済の作成、取得、一覧表示、キャンセルのツールを提供します。支出ポリシーはサーバー側で適用され、MCPエンドポイントを通じて接続します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://veyra.money/api/mcpclaude mcp add --transport http zapxlabs-veyra https://veyra.money/api/mcp{"mcpServers":{"zapxlabs-veyra":{"type":"http","url":"https://veyra.money/api/mcp"}}}Cursor で開く{"servers":{"zapxlabs-veyra":{"type":"http","url":"https://veyra.money/api/mcp"}}}VS Code で開く{"mcpServers":{"zapxlabs-veyra":{"type":"http","url":"https://veyra.money/api/mcp"}}}{"mcpServers":{"zapxlabs-veyra":{"serverUrl":"https://veyra.money/api/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://veyra.money/api/mcp認証が必要ツール
7このツールにパラメーターはありません。
詳細
veyra-mcp
AI エージェントに利用上限付きのウォレットを提供します。
Veyra 用の MCP サーバーと型付きクライアントです。Base 上での非カストディアルな USDC 決済に、決済ごとの上限、日次上限、人間による承認が必要となる金額帯、受取先の許可リストを設定できます。これらはすべてサーバー側で適用され、モデルが制御することはありません。
問題点
エージェントが何かに支払う必要性は高まっています。API 呼び出し、データセット、懸賞金、別のエージェントなどです。現状の選択肢には問題があります。
- エージェントに秘密鍵を渡す。 プロンプトインジェクションひとつで、ウォレットが空になります。
- カードを渡す。 呼び出しごとの上限も許可リストもなく、どのツール呼び出しでお金が使われたのか、銀行も教えてくれません。
- 支払いを毎回手動で承認する。 それでは、本当の意味でエージェントとは言えません。
Veyra はその間を埋めるレイヤーです。すでに所有しているウォレットを接続し、エージェントが使える金額を設定して、エージェントにひとつの MCP エンドポイントを渡します。エージェントは create_payment のようなツールを利用できます。エージェントが鍵を見ることはなく、設定した上限を超えることもできません。指示にモデルが従うからではなく、Veyra のサーバーが上限を適用するためです。
agent ──MCP──▶ veyra.money ──policy──▶ your wallet ──USDC on Base──▶ recipient
│
├─ under auto-max → executes from your capped on-chain allowance
├─ in the ask band → you approve in your own wallet (one link)
└─ over the limits → blocked, agent is told why
60 秒でセットアップ
- veyra.money で登録し、ウォレットを接続します(または、資金が移動しない シミュレーションソースから始めます)。
- 上限付きの MCP エンドポイントを作成します。認証情報をコピーしてください(
veyra_で始まります)。 - ホストに追加します。
Claude Code
claude mcp add --transport http veyra https://veyra.money/api/mcp \
--header "Authorization: Bearer veyra_..."
Cursor(.cursor/mcp.json)
{
"mcpServers": {
"veyra": {
"url": "https://veyra.money/api/mcp",
"headers": { "Authorization": "Bearer veyra_..." }
}
}
}
OpenAI Codex
export VEYRA_TOKEN=veyra_...
codex mcp add veyra --url https://veyra.money/api/mcp --bearer-token-env-var VEYRA_TOKEN
Claude Desktop と、ベアラーヘッダーを送信できないすべてのホスト(claude_desktop_config.json)
{
"mcpServers": {
"veyra": {
"command": "npx",
"args": ["-y", "veyra-mcp"],
"env": { "VEYRA_TOKEN": "veyra_..." }
}
}
}
veyra-mcp バイナリは stdio ブリッジです。認証情報をローカルで保持し、すべての呼び出しをホストされたエンドポイントに中継します。ブリッジにはポリシーがありません。
その他(プレーンな JSON-RPC)
curl -s https://veyra.money/api/mcp \
-H "Authorization: Bearer veyra_..." \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_budget","arguments":{}}}'
次に、エージェントに費用のかかる操作を依頼し、ポリシーがどのように判断するかを確認します。
エージェントが利用できるツール
| ツール | 機能 |
|---|---|
get_capabilities | 現在有効なレール、ネットワーク、アセット、上限、支払い先許可リスト |
get_budget | 1日の上限、今日の使用額、1回あたりの上限、自動処理と承認要求の範囲 |
list_payment_sources | マスクされた支払い元と、それぞれが人間の操作なしで決済できるかどうか |
create_payment | 支払いインテントを作成します。ポリシーはサーバー側で適用され、結果には処理内容が示されます |
get_payment | 1件の支払いの正規の状態と、決済に使われたレール |
list_payments | このエンドポイントの最近の支払い |
cancel_payment | キャンセル可能な間に支払いをキャンセルします |
各支払いには、次のいずれかのステータスが報告されます。
| ステータス | 意味 |
|---|---|
confirmed | オンチェーンで価値が移動しました |
confirmed_simulated | シミュレーション用レールで決済されました。**資金は移動していません。**その旨はエージェントに明示されます |
awaiting_approval | 承認要求の範囲内です。next_action.url は、所有者が自身のウォレットで開く1回限りのリンクです |
submitted | トランザクションが送信され、チェーンのレシートを待っています |
pending | 作成済みですが、評価または実行はまだ行われていません |
failed / cancelled / expired | 終了状態です。ポリシーによってブロックされた支払いは、policy_reason を含む failed になります |
コードから利用する
npm install veyra-mcp
import {
VeyraClient,
VeyraToolError,
idempotencyKey,
movedRealMoney,
paymentOutcome,
} from "veyra-mcp";
const veyra = new VeyraClient({ token: process.env.VEYRA_TOKEN! });
const budget = await veyra.getBudget();
console.log(`spent ${budget.spent_today} of ${budget.daily_limit} USDC today`);
const payment = await veyra.createPayment({
amount: "1.25",
recipient: "0x1234…abcd", // USDC on Base
reason: "Weather API, 500 calls",
idempotency_key: idempotencyKey("weather"),
});
switch (paymentOutcome(payment)) {
case "settled":
// The only case where value actually moved.
console.log("paid —", (await veyra.getPayment(payment.payment_id)).tx_ref);
break;
case "simulated":
console.log("settled on the simulated rail; no money moved");
break;
case "awaiting_approval": {
console.log("owner must approve:", payment.next_action?.url);
const settled = await veyra.waitForPayment(payment.payment_id);
console.log(movedRealMoney(settled) ? "paid" : paymentOutcome(settled));
break;
}
case "blocked":
console.log("policy refused it:", payment.policy_reason);
break;
}
ポリシーによる拒否は例外ではありません
ここはぜひ二度読んでください。ポリシーによって拒否された支払いは、通常の結果として status: "failed" を返します。呼び出しは要求どおり処理され、結果が「いいえ」だったということです。不正な引数、無効な認証情報、不明な ID の場合にのみ例外がスローされます。
そのため、拒否を検出するには try/catch は適切ではありません。ブロックされた支払いをすべて見落とし、成功として扱ってしまいます。paymentOutcome を使い、価値が移動したと伝える前には movedRealMoney を使ってください。ステータスが "confirmed" で始まっていても、シミュレーションでの決済に対しては false を返します。
catch は実際に失敗した場合にのみ使います。
try {
await veyra.createPayment({ /* … */ });
} catch (e) {
if (e instanceof VeyraToolError) {
console.log(e.code, e.message); // VALIDATION_ERROR, UNKNOWN_CREDENTIAL, NOT_FOUND
} else throw e;
}
確信が持てないからといって、決して再試行しないでください
支払いが成功したかどうか判断できない場合は、読み取って確認してください。別の支払いを作成してはいけません。getPayment は、実際の支払いが決済されると tx_ref を返します。これは確認の証拠であり、支払い先に提示する証明にもなります。同じ idempotency_key を再利用すると元の支払いが返されますが、新しいキーを使うと再度支出されます。同じ支払い先への同一の支払いがすでに処理中の場合、Veyra は possible_duplicate_of も設定します。
VEYRA_TOOLS はツール定義を JSON Schema としてエクスポートします。そのため、ネットワークへのラウンドトリップなしで、Vercel AI SDK、LangChain、または通常の関数呼び出しに登録できます。Claude Agent SDK と Vercel AI SDK を使って構築された完全なエージェントについては、veyra-examples をご覧ください。
信頼することになるもの
資金に関わるため、率直に説明します。
- **Veyra はお客様の資金を保管しません。**支払いはお客様のウォレットから支払い先に直接送られます。間に Veyra の残高が介在することはありません。
- **自動承認の上限を超える場合、委任は行われません。**承認リンクから、お客様自身のウォレットで各送金に署名します。Veyra はオンチェーンのレシートが要求内容と一致することを検証します。
- **自動承認の上限内では、Veyra が運用するリレイヤーに上限付きの ERC-20 承認を付与します。**これは、すべての DeFi アプリが使うものと同じ
approveプリミティブです。上限はトークンコントラクトによって適用されます。Veyra のポリシーエンジンは、その上限内で支払い先を決定するため、失ってもよい運用資金として承認額を設定し、エージェントが支払うべき相手が分かっている場合は支払い先許可リストを使ってください。承認はいつでも取り消せます。 - シミュレーション用レールを使えば、実際の資金に触れる前にすべてを接続できます。ステータス
confirmed_simulated、simulated: trueのように、あらゆる場所で明示されます。 - 上限の変更や認証情報のローテーションを含め、すべての判断が監査ログに記録されます。
詳細については、支払いが実際にどのように行われるか と 具体的に何を信頼することになるのか をご覧ください。
FAQ
対応しているネットワークとアセットは何ですか? Base 上の USDC です。ステーブルコインを 1 種類にすることで、価格フィードなしでドル建ての上限を正確に保てます。また、Base はエージェントによる決済エコシステムがすでに決済に利用しているネットワークです。今後、対応する決済手段を増やす予定です。必要なものがあれば、issue を作成してください。
x402 や従量課金制の API でも使えますか? はい。エージェントが Veyra に販売者のアドレスへの支払いを依頼し、レシートを受け取るという点で対応しています。Veyra は支出ポリシーを担うもので、接続先のプロトコルではありません。
セルフホストできますか? 現時点ではできません。このリポジトリはクライアントとブリッジであり、ポリシーエンジンは veyra.money でホストされているサービスです。いずれにしても、ウォレット承認の仕組みは完全に非カストディアルです。
料金はいくらですか? 無料プランがあります。料金をご覧ください。
ポリシーの判断に問題があった場合、どこに報告すればよいですか? ダッシュボードから報告してください。サポートが監査ログを確認できます。このリポジトリの issue は、クライアントとブリッジに関するものが対象です。
開発
npm install
npm test # builds, then runs the suite against a local mock of the endpoint
CONTRIBUTING.md と SECURITY.md をご覧ください。
リンク
- プロダクト:veyra.money · ドキュメント · 料金
- 例:zapxlabs/veyra-examples
- MCP Registry 名:
io.github.zapxlabs/veyra
MIT © Veyra
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
