Skip to main content
Glama
zorionarrillaga

oas-execute-mcp

oas-execute-mcp

言語モデルとブローカー注文の間に安全レイヤーを設けるMCPサーバー。

モデルがorder_submitを呼び出すと、ブローカーに届く前にリクエストは6つの独立したチェックを通過します。どのチェックも単独で拒否できます。書き込みパスでは7つのチェックになります。これは、ストップロスルールが新規注文ではなく修正を管理するためです。許可された試行も拒否された試行もすべて、理由を付けて監査ログに追加されます。ブローカー自体は交換可能なバックエンドの背後にあるため、同じツールインターフェースが、モデルにはどちらか分からないまま、ディスク上のシミュレーターまたは稼働中のMetaTrader 5ターミナルに対して動作します。

独自のチャネル上で、1トレードごとの人間の承認なしに10万ドルのプロップファーム評価口座に対して注文を送信していたエージェントのために構築されました。ミスサイズの注文はテスト失敗ではなかったケースです。


存在理由

エージェントに資金を使うツールを与える際の興味深い点は、成功パスではありません。以下の点です:

  • ツールが中途半端に成功したときに返すもの — 注文は約定したがストップが付かなかった場合;

  • タイムアウトが発生した場合の着地点 — ブローカーが応答せず、約定したかどうか不明な場合;

  • それより上のレイヤーが失敗を成功として報告するのを防ぐ方法。

したがって、ここでの設計ルールは、何が起こったかについてのモデル自身の説明を決して信頼しないことです。ポジション状態は、呼び出しのたびにブローカーから再読み取りされます。拒否は明示的で、数が少なく、プロンプトの横ではなく実行パスに直接配置されます。

Related MCP server: mt5-mcp

安全レイヤー

7つのチェック、それぞれが独立して拒否可能で、すべて機械可読な理由とともにログに記録されます。そのうち6つはorder_submitとブローカーの間に立ちます。check_sl_widen_blockは修正を管理するため、新規注文には決して適用されません:

チェック

拒否する条件

check_killswitch

ディスク上にキルスイッチファイルが存在する。即座に作動、再起動不要。

check_rate_limit

設定された上限よりも速く注文が到着している。

check_gate_pass_freshness

上流の決定レコードが古い — 古い承認に基づく注文は許可されない。

check_position_sanity

サイズ、売買方向、または銘柄がブローカーの報告と一致しない。

check_sl_widen_block

ストップロス修正がストップを価格から遠ざける方向に動かす。

check_session_override_kill

このセッションでの手動オーバーライドが許可回数を超えた。

check_live_equity_kill

口座 equity が設定された最低値を下回った。

監査追記はすべてのパスでゲートの後に実行されます。許可された場合も拒否された場合も同様です。これは記録であり、チェックではありません。痕跡を残さない拒否は、システムの障害として扱われます。

safety.pyはこれらをrun_entry_safety_gatesrun_modify_safety_gatesrun_close_safety_gatesにグループ化しているため、決済が新規注文のみを管理すべきルールによってブロックされることはありません。これは、安全システムが保護すべきポジションにトレーダーを閉じ込めてしまう障害モードを防ぎます。

ツールインターフェース

7つのツール:order_submit · order_modify · order_close · close_all · position_list · account_info · health_check

アーキテクチャ

    model tool call
          │
          ▼
   server.py  ── MCP stdio server, tool schemas + dispatch
          │
          ▼
   safety.py  ── 7 gates, audit log, kill switch     ◄── refuses here, before the broker
          │
          ▼
   backends/  ── swappable
      ├── stub.py      on-disk simulation, no broker, deterministic
      └── mt5_demo.py  file bridge → MetaTrader 5 (Wine/macOS) via an MQL5 EA
                       localhost HTTP listener, shared-secret token on the firing route

MQL5エキスパートアドバイザー(oas_execute_mcp/mql5/OAS_Bridge.mq5)はlocalhostエンドポイントをポーリングし、ターミナル側で実行します。backends/base.pyがインターフェースです。ブローカーを追加するにはこれを実装するだけで、バックエンドより上の層は変更されません。

インストール

pip install -e ".[dev]"

MCPクライアントで以下のように指定します:

{
  "mcpServers": {
    "oas-execute": {
      "command": "/path/to/.venv/bin/python",
      "args": ["-m", "oas_execute_mcp.server"],
      "cwd": "/path/to/parent-of-this-package"
    }
  }
}

バックエンドの選択とパスは環境変数で設定します:

変数

デフォルト

目的

OAS_EXECUTE_BACKEND

stub

stub または mt5_demo

OAS_DATA_DIR

./oas_execute_mcp/data

状態、監査ログ、口座記録

OAS_MT5_COMMON_FILES

Wine上のMT5デフォルト

ブリッジ用のMT5 Common/Files

デフォルトではstubで出荷されます。ブローカーを指定するには、明示的に選択する必要があります。

このリポジトリに認証情報は一切含まれず、含めるべきではありません。 MT5バックエンドは既にログインしているターミナルに従います。読み取る口座記録は文書用(ログインとサーバー名)であり、パスワードは含まれず、バージョン管理外に置くべきものです。

テスト

PYTHONPATH=. python3 tests/test_smoke.py     # full submit → modify → close cycle + failure modes
for t in tests/test_*.py; do PYTHONPATH=. python3 "$t"; done   # the whole suite
python3 -m pytest tests/ -q                  # same suite, if you would rather type this

9つのテストファイルがあり、クリーンチェックアウトですべて合格します。各ファイルは自己完結型のチェッカーです。モジュールスコープでアサーションを実行し、失敗時は非ゼロで終了するため、インタープリター以外は必要ありません。tests/suite_test.pyは同じスクリプトをサブプロセスとして駆動するため、pytestも有効なエントリポイントです。これはブリッジであり、2番目のスイートではありません。一方のランナーにしか見えないテストのバージョンは存在しません。このテストは、スタブに対する送信/修正/決済サイクル、約定後のストップロスアンカリングと再導出、ブリッジのクライアントモードハンドシェイク、相場とポジションのルート、そしてエラー形状のペイロードが空のポジションリストとして消費されるのを防ぐゲート(実際のインシデントで、タイムアウトが{"positions": []}を返し、下流のリーダーがそれを信じたケース)をカバーしています。

2つのテストは、対象が存在しない場合にパスではなくスキップします。 これらはこのサーバーのコンシューマーをテストするため、ホストプロジェクト(OAS_HOST_REPOOAS_RECONCILE_CMD)が必要です。確認すべきものが存在しないときに静かにグリーンになるチェックは、チェックがないより悪いです。

ステータスと制限事項

  • stubバックエンドは完全で決定論的です。mt5_demoは、macOS上のWineで動作するMetaTrader 5ターミナルに対して本番環境で使用されています。

  • check_rate_limitは実装されていますが、テストベンチでは使用されていません — ベンチはブローカーのタイムアウトとキルスイッチの発動をシミュレートしますが、レート制限の応答はシミュレートしません。「実装済み」と「テスト済み」の区別がこのリポジトリの主題そのものであるため、明記しています。

  • MT5ブリッジはmacOS/Wine向けに設計されています。ネイティブWindowsインストールではOAS_MT5_COMMON_FILESの設定が必要ですが、私自身でテストはしていません。

  • シングルターミナル設計:リスナーは1つのポート上のシングルトンであり、2番目のサーバープロセスは最初のものを検出してバインディングを競うのではなく転送します。

ライセンス

MIT — LICENSEを参照してください。

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that lets an AI agent read your MetaTrader 5 account and place trades over the Model Context Protocol, with a configurable human approval gate.
    15
    4
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    A local-first MCP server that bridges AI coding agents with MetaTrader 5 for inspection, market data, MQL5 development, compiling, Strategy Tester review, workspace sync, logs, audit trails, demo trading, and carefully gated live trading.
    MIT
  • F
    license
    B
    quality
    C
    maintenance
    An MCP trading server over a paper broker with a deterministic risk layer that enforces limits before orders reach the handler, ensuring safe AI agent trading.
    7

View all related MCP servers

Related MCP Connectors

  • MCP server exposing the Backtest360 engine API as tools for AI agents.

  • MCP server for Gainium — manage trading bots, deals, and balances via AI assistants

  • MCP server for AI dialogue using various LLM models via AceDataCloud

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zorionarrillaga/oas-execute-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server