TAS Guard について
TAS Guardは、AIクライアントと証券会社・取引所のMCPサーバーの間に置く取引安全プロキシです。注文ルールによる制限、承認、監査に加え、SolanaとEVMの取引検査にも対応します。
主な機能
- 01注文単位・日次の取引上限
- 02銘柄と売買方向の許可リスト
- 03重要操作の人間による承認
- 04キルスイッチとハッシュ連鎖監査ログ
- 05SolanaとEVMの取引検査
活用シーン
- 01Agentの注文額と日次取引額を制限
- 02大口注文や実資金注文を承認制にする
- 03未知のツールや許可外銘柄を遮断
- 04改ざん検知可能なログで判断を確認
MCP 対応
MCPクライアントと証券会社・取引所のMCPサーバーの間で、ツール呼び出しを検査してから転送します。クライアントには保護された取引ツールと状態確認ツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
TAS Guard
AI エージェント向けの、取引を考慮した安全プロキシです。 AI クライアント(Claude、ChatGPT、Cursor、ご自身のエージェント)と、任意のブローカーまたは取引所の MCP サーバーの間に配置します。注文がブローカーに届く前に、注文ごとおよび日ごとの上限、シンボルの許可リスト、人間による承認、緊急停止スイッチ、改ざんを検知できる監査ログを適用します。

AI client ──► TAS Guard ──► Alpaca / CCXT / any trading MCP server ──► your account
│
├─ blocks: over-limit orders, off-list symbols, withdrawals, leverage changes
├─ asks you: large orders, live money, "close everything"
└─ logs: every decision, hash-chained
依存関係はありません。一度に読み通せる、約 800 行のプレーンな JavaScript です。
10 秒で試す(ブローカー口座不要)
tas-guard demo を実行すると、シミュレーション価格を使う組み込みのペーパーブローカーの前でガードが動作します。AI アプリに MCP サーバーとして追加します。
{ "mcpServers": { "tas-guard-demo": { "command": "npx", "args": ["-y", "tas-guard", "demo"] } } }
(Windows では "command": "cmd", "args": ["/c", "npx", "-y", "tas-guard", "demo"] を使用してください。)次に、エージェントに 580 ドルで SPY を 1 株購入するよう依頼します(許可)。580 ドルで SPY を 2 株購入するよう依頼します(保留され、承認が必要)。SPY を 10 株購入するよう依頼します(注文ごとの上限 2,000 ドルを超えるためブロック)。または TSLA を 1 株購入するよう依頼します(許可リストにないためブロック)。保留中の注文は npx tas-guard approve <id> で承認できます。
汎用 MCP ゲートウェイでは不十分な理由
汎用ゲートウェイは ツール ごとに判断します。「createOrder は重要なので、承認を必須にする」といった具合です。50 ドルの注文と 50,000 ドルの注文を区別できないため、結局すべての注文を承認するか、何も承認しないことになります。
TAS Guard は注文そのものを読み取ります。Alpaca の place_option_order では契約倍率が 100 倍であること、ccxt の cost は決済通貨での値であり、amount は基軸通貨の単位であること、また ccxt は最初のライブ注文にプレビューで応答することを把握しています。これにより、「少額注文は許可し、高額注文は確認を求め、1 日あたり 2,000 ドルを絶対に超えない」ことが可能になります。
| ブローカーコネクター | 単独でできること | TAS Guard を併用した場合 |
|---|---|---|
| Alpaca MCP(TAS 安全スコア 68) | AI は直接注文できます。ツールセットで制限を設定できます | 注文ごとおよび日ごとの上限、シンボルの許可リスト、しきい値を超える場合の承認 |
| CCXT MCP | 独自の上限と確認手順があります | 使用するすべての取引所で、単一のポリシーと監査ログを適用できます |
| その他の取引 MCP | さまざまです | ヒューリスティックプロファイルを適用し、認識できないものはすべてブロックします |
安全スコアと注文ゲートの詳細:tradingagentstack.com。
クイックスタート(Alpaca、ペーパートレーディング)
~/tas-guard/alpaca.jsonを作成します(またはnpx tas-guard init alpaca-mcp-serverを実行します)。
{
"name": "alpaca",
"profile": "alpaca-mcp-server",
"upstream": {
"command": "uvx",
"args": ["alpaca-mcp-server"],
"env": {
"ALPACA_API_KEY": "${ALPACA_API_KEY}",
"ALPACA_SECRET_KEY": "${ALPACA_SECRET_KEY}",
"ALPACA_PAPER_TRADE": "true"
}
},
"policy": {
"max_order_value": 500,
"max_daily_value": 2000,
"approve_over": 250,
"symbols_allow": ["SPY", "QQQ", "AAPL", "MSFT"]
}
}
${VAR} は環境変数から読み込まれるため、キーをファイルに保存する必要はありません。
- MCP クライアントの接続先を Alpaca ではなくガードに設定します。Claude Desktop の場合(
claude_desktop_config.json):
{
"mcpServers": {
"alpaca": {
"command": "npx",
"args": ["-y", "tas-guard", "run", "--config", "/Users/you/tas-guard/alpaca.json"],
"env": { "ALPACA_API_KEY": "...", "ALPACA_SECRET_KEY": "..." }
}
}
}
Claude Code の場合:claude mcp add alpaca -- npx -y tas-guard run --config ~/tas-guard/alpaca.json
- エージェントに
tas_guard_statusを呼び出すよう依頼し、適用中の上限を確認します。
設定ファイルがない場合は、npx tas-guard run --profile alpaca-mcp-server -- uvx alpaca-mcp-server を実行すると、デフォルトのポリシーを使用できます。
判定基準
各ツールは、検証済みのコネクタプロファイルに基づいて分類されます。プロファイルがないサーバーについては、名前のヒューリスティックと MCP アノテーションに基づいて分類されます。
| クラス | 例 | デフォルト |
|---|---|---|
read | 相場情報、ポジション、残高 | 許可 |
benign_write | ウォッチリスト | 許可 |
cancel、close | 1 件の注文をキャンセル、1 件のポジションを決済 | 許可(キルスイッチ作動中も) |
order | 注文を出す | 制限をチェック |
modify、cancel_all、close_all、other_write | 注文を差し替える、すべてをキャンセル(ストップロスも含む)、オプションを行使 | 人間に確認 |
leverage、funds_out、account、raw_write、unknown | レバレッジを設定、出金、送金、アカウント設定、「任意のエンドポイントを呼び出す」、認識できないもの | ブロック(エージェントからも非表示) |
order の呼び出しでは、次の順に処理されます。
- キルスイッチがオン → ブロックします。
- シンボルが
symbols_blockに含まれている、または(設定されている場合)symbols_allowに含まれていない → ブロックします。グロブを使用できます:"BTC/*"。 - サイドが(設定されている場合)
sides_allowに含まれていない → ブロックします。 max_orders_per_minuteまたはmax_orders_per_dayを超えている → ブロックします。- 価値が
max_order_valueを超えている、または本日の合計がmax_daily_valueを超える → ブロックします。これらはハードリミットであり、承認によって上書きできません。 - 価値が
approve_overを超えている、価値が不明(数量指定の成行注文、マルチレッグ注文)、または実資金を使いlive_requires_approvalが有効 → 人間に確認します。 - それ以外 → 許可します。
ブローカーが実際に受け付けた注文だけが、1 日の合計に加算されます。拒否された注文や ccxt のプレビューは含まれません。注文は 1 件ずつ実行され、送信直前に制限が再確認されるため、並列呼び出しで 1 日の上限をすり抜けることはできません。
ポリシーリファレンス
{
"max_order_value": 500, // hard, per order, in the profile's quote currency
"max_daily_value": 2000, // hard, sum of executed orders today (local time)
"max_orders_per_day": 20,
"max_orders_per_minute": 3,
"approve_over": 250, // soft: above this, a human approves
"symbols_allow": [], // empty = any symbol
"symbols_block": [],
"sides_allow": [], // e.g. ["buy"] for no selling
"unknown_value": "approve", // allow | approve | block when the value can't be computed
"live_requires_approval": true, // every live-money order needs a human
"classes": { "close_all": "allow", "unknown": "approve" }, // override any class
"hide_blocked_tools": true,
"approval_ttl_minutes": 15
}
承認
操作に承認が必要な場合、ガードが確認する相手はあなたであり、エージェントではありません。
- クライアント内の場合: MCP クライアントがエリシテーションに対応していれば、アプリにプロンプト(「この操作を承認しますか?」)が表示されます。回答できるのは人間だけです。
- ターミナルからの場合: それ以外の場合、呼び出しは ID とともに保留されます。
npx tas-guard approve <id>(またはdeny <id>)を実行すると、エージェントが呼び出しを再試行します。各承認は、その呼び出しに対して一度だけ、15 分以内に有効です。
Alpaca のペーパーアカウントを使い、Claude Desktop(Windows、2026 年 10 月)でテストしました。Claude Desktop ではアプリ内プロンプトが表示されないため、そこでの承認は npx tas-guard approve <id> から行います。Claude はリクエスト ID を伝え、あなたの操作を待ちます。
npx tas-guard pending
npx tas-guard approve 3f9a1c
電話での承認とキルスイッチ(Telegram)
承認ボタンと拒否ボタンを使って保留中の操作をスマートフォンで確認し、注文がブロックされたときのアラートを受け取り、どこからでもキルスイッチを操作できます。独自の Telegram ボットを使用するため、当社のサーバーを経由することはありません。
npx tas-guard telegram-setup --config ~/tas-guard/alpaca.json
ボットの作成方法を案内し、あなたがボットで Start を押すのを待ってから、ボットトークンとチャット ID をガードの設定に保存します。その後、AI アプリを再起動してください。
利用できる機能:
- 承認/拒否ボタン。 エージェントの呼び出しは、タップを最大 45 秒間(
wait_seconds)待ってから、同じ呼び出し内で実行されます。承認までに時間がかかった場合は、承認後に再試行するようエージェントに伝えられます。 - アラート:注文タイプの呼び出しがブロックされたとき(デフォルトで有効な
notify_blocked)、およびオプションで注文がブローカーに送信されたとき(notify_executed)に通知します。 - 電話からのコマンド:
/status(制限と本日の利用状況)、/pending(待機中の項目を再送信)、/kill、/resume。 - あなただけが操作可能: 他の Telegram アカウントからのタップやコマンドは無視されます。
- 電話のみでの承認:
"cli": falseを設定すると、このガードに対するリクエストをtas-guard approveが拒否します。これにより、シェルアクセス権を持つエージェントが自分で承認コマンドを実行できてしまう問題を防げます。
"approvals": {
"cli": false,
"telegram": {
"bot_token": "${TAS_TELEGRAM_BOT_TOKEN}",
"chat_id": "123456789",
"wait_seconds": 45,
"notify_blocked": true,
"notify_executed": false
}
}
複数のガードで 1 つのボットを共有できます。タップを受信しているガードが処理し、ほかのガードは共有状態から決定を取得します。
キルスイッチ
npx tas-guard kill "market looks wrong" # every guard blocks new orders immediately
npx tas-guard resume
キルスイッチがオンでも、読み取り、キャンセル、ポジションの決済は引き続き動作するため、あなた(またはエージェント)はポジションをすべて解消できます。
監査ログ
すべての判断は ~/.tas-guard/audit.jsonl に追記されます。記録されるのは、ツール、クラス、引数(シークレットはマスキング)、判断、理由、注文額、および実行されたかどうかです。各行には、前の行のハッシュが含まれます。
npx tas-guard log --tail 20
npx tas-guard verify-log # detects edited or deleted lines
コネクタープロファイル
プロファイルには、サーバーの各ツールが金銭に関して何を実行できるか、および注文フィールドがどこにあるかが記載されています。スキーマは schema/connector-profile.v1.json です。組み込みプロファイルは、各サーバーのソースコードまたは公式ドキュメントと照合して検証されており、コミットまたはページを記録しています。
alpaca-mcp-server:alpacahq/alpaca-mcp-server @ 2a973a0ccxt-mcp-server:ccxt/ccxtmcp/@ 310bf4brobinhood-trading-mcp:Robinhood のホスト型 Trading MCP。Robinhood の記事「エージェントを使った取引」にある 94 個のツールの表を参照しています(2026-10-21)。サーバーはクローズドソースで、Robinhood は引数名を公開していないため、注文額を読み取ることはできません。すべての注文に承認が必要で、symbols_allowリストによって注文をブロックできます。
プロファイルのないサーバーを使用していますか? "profile": "auto" はツール名と MCP アノテーションからツールを分類し、認識できないものはすべてブロックします。他のブローカーのプロファイルも PR として歓迎します。
Windows および Claude Desktop に関する注意事項
2026 年 10 月、Microsoft Store 版の Claude Desktop を使って Windows でテストしました。
- API キーは Claude Desktop の設定ではなく、ガードファイル(
alpaca.jsonのupstream.env)に記載してください。 Claude Desktop は各サーバーの設定を独自に保持するため、設定ファイルで変更したキーがサーバーに届かないことがあります。ガードファイルのキーが常に優先されます。ガードのログには、アップストリームが受け取ったキーが表示されます(末尾 4 文字のみ)。例:credential ALPACA_API_KEY: ...PBYR (from guard config)。 claude_desktop_config.jsonでは、cmd /cを使って npx を起動してください。"command": "cmd", "args": ["/c", "npx", "-y", "tas-guard", "run", "--config", "C:\\Users\\you\\tas-guard\\alpaca.json"]。- Claude Desktop の設定は、アプリを完全に終了してから(システムトレイで「終了」を選択して)編集してください。 アプリの実行中はファイルが書き換えられます。Store 版では
%LOCALAPPDATA%\Packages\Claude_*\LocalCache\Roaming\Claude\に保存されています。 - 起動を高速化するには、
uv tool install alpaca-mcp-serverを一度実行し、ガードファイルで"command": "alpaca-mcp-server", "args": []を設定してください。それ以外の場合、uvxは起動のたびにサーバーを再解決するため、10〜20 秒余計にかかります。 - 承認: Claude Desktop ではアプリ内の承認プロンプトが表示されません。スマートフォンで承認する(
telegram-setup)か、保留中のアクションをnpx tas-guard approve <id>で承認してください。
制限事項(必ずお読みください)
- シェルアクセスがあるエージェントは、自分で
tas-guard approveを実行できる可能性があります。 スマートフォンでの承認を"cli": falseとともに使用すれば防げます。ただし、~/.tas-guard内のファイルを編集できるエージェントは状態を改ざんできるため、可能であれば、ホームフォルダーにシェルアクセスできない環境で取引エージェントを実行してください。 - 金額の計算には注文自体の価格を使用します。 数量を指定する成行注文には価格がないため、デフォルトでは承認が必要です。ライブ価格の照会は今後の予定です。
- 損益ベースの損切り機能はまだありません。 1 日あたりの上限はエージェントが取引できる金額を制限しますが、損失額は制限しません。
- ccxt では、通貨ペアごとにクォート通貨が異なります(BTC/USDT は USDT 建て、ETH/BTC は BTC 建てです)。上限を適切に保つには
symbols_allowを使用してください。 - これはシートベルトであり、保証ではありません。 ブローカー独自の制御も引き続き重要です。投資助言ではありません。
開発
npm test # 36 tests: unit, end to end through a mock broker over real MCP stdio, and the phone flow against a mock Telegram API
MIT ライセンスです。AI 取引ツールがお金を使って何を実行できるかを紹介する独立したディレクトリ、TradingAgentStack が開発しました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。