Skip to main content
Glama
zorionarrillaga

oas-execute-mcp

oas-execute-mcp

MCP-сервер, который размещает уровень безопасности между языковой моделью и брокерским ордером.

Модель вызывает order_submit. Прежде чем что-либо достигнет брокера, запрос проходит шесть независимых проверок, любая из которых может его отклонить — семь на путях записи, поскольку правило стоп-лосса регулирует модификации, а не открытия. Каждая попытка — разрешенная или отклоненная — добавляется в журнал аудита с указанием причины. Сам брокер находится за сменяемым бэкендом, поэтому один и тот же набор инструментов работает с симулятором на диске или живым терминалом MetaTrader 5, не сообщая модели, какой из них используется.

Создано для агента, который на своем собственном канале отправлял ордера на проп-фирменный оценочный счет в $100 000 без одобрения каждой сделки человеком, где ордер неправильного размера не был провальным тестом.


Зачем это существует

Интересная часть предоставления агенту инструмента, который тратит деньги, — это не счастливый путь. Это:

  • что возвращает инструмент, когда он частично успешен — ордер исполнился, но стоп не прикрепился;

  • где оказывается тайм-аут — брокер так и не ответил, и вы не знаете, исполнился ли ордер;

  • как предотвращается сообщение о сбое как об успехе слоем выше.

Поэтому правило дизайна здесь заключается в том, что собственному отчету модели о произошедшем никогда не доверяют. Состояние позиции перечитывается от брокера при каждом вызове. Отказы явные, их мало, и они находятся непосредственно на пути выполнения, а не рядом с ним в подсказке.

Related MCP server: mt5-mcp

Уровень безопасности

Семь проверок, каждая из которых может отказать независимо, все регистрируются с машиночитаемой причиной. Шесть из них находятся между 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

Собственный капитал счета пересек установленный минимум.

Запись в аудит выполняется после прохождения шлюзов на каждом пути — разрешенном или отклоненном — это запись, а не проверка: отказ, не оставляющий следа, рассматривается как сбой системы.

safety.py группирует их в run_entry_safety_gates, run_modify_safety_gates и run_close_safety_gates, поэтому закрытие никогда не блокируется правилом, которое должно управлять только открытием — это режим отказа, когда система безопасности запирает вас в позиции, которую она должна была защищать.

Набор инструментов

Семь инструментов: 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) опрашивает локальный эндпоинт и выполняется на стороне терминала. 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

MT5-under-Wine по умолчанию

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

Девять тестовых файлов, все проходят на чистом checkout. Каждый из них — это самодостаточная проверка: он выполняет свои утверждения на уровне модуля и завершается с ненулевым кодом при сбое, поэтому набору тестов нужен только интерпретатор. tests/suite_test.py запускает те же скрипты как подпроцессы, так что pytest также является рабочей точкой входа — это мост, а не второй набор тестов, и нет версии тестов, которую видит только один раннер. Они охватывают цикл submit/modify/close против заглушки, привязку стоп-лосса и повторное выведение после исполнения с комиссией, рукопожатие моста в режиме клиента, маршруты котировок и позиций, а также шлюз, который предотвращает потребление полезной нагрузки с ошибкой как пустого списка позиций — реальный инцидент, когда тайм-аут вернул {"positions": []} и нижестоящий читатель поверил этому.

Два теста пропускаются, а не проходят, когда их предмет отсутствует. Они проверяют потребителя этого сервера, поэтому им нужен хост-проект (OAS_HOST_REPO, OAS_RECONCILE_CMD). Проверка, которая молча зеленеет, когда проверяемая вещь отсутствует, хуже, чем отсутствие проверки.

Статус и ограничения

  • Бэкенд stub завершен и детерминирован. mt5_demo используется в производстве против терминала MetaTrader 5, работающего под Wine на macOS.

  • check_rate_limit реализована, но не используется тестовым стендом — стенд симулирует тайм-ауты брокера и срабатывание аварийного выключателя, а не ответы ограничения скорости. Указано, потому что различие между "реализовано" и "протестировано" — это вся суть этого репозитория.

  • Мост MT5 ориентирован на macOS/Wine. Для нативной установки Windows необходимо установить OAS_MT5_COMMON_FILES и не было протестировано мной.

  • Однотерминальный по дизайну: слушатель — это синглтон на одном порту, и второй процесс сервера обнаруживает первый и перенаправляет к нему, а не конкурирует за привязку.

Лицензия

MIT — см. LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    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
    81 PyPI
    5
    MIT
  • A
    license
    Not graded
    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
    D
    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
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Cloud-hosted MCP server that connects AI clients to MetaTrader 4/5 for live prices, account state, indicators, and trades with dry-run safety via natural language.
    -