oas-execute-mcp
oas-execute-mcp
MCP-сервер, который размещает уровень безопасности между языковой моделью и брокерским ордером.
Модель вызывает order_submit. Прежде чем что-либо достигнет брокера, запрос проходит шесть
независимых проверок, любая из которых может его отклонить — семь на путях записи, поскольку
правило стоп-лосса регулирует модификации, а не открытия. Каждая попытка — разрешенная или отклоненная —
добавляется в журнал аудита с указанием причины. Сам брокер находится за сменяемым бэкендом, поэтому
один и тот же набор инструментов работает с симулятором на диске или живым терминалом MetaTrader 5, не сообщая
модели, какой из них используется.
Создано для агента, который на своем собственном канале отправлял ордера на проп-фирменный оценочный счет в $100 000 без одобрения каждой сделки человеком, где ордер неправильного размера не был провальным тестом.
Зачем это существует
Интересная часть предоставления агенту инструмента, который тратит деньги, — это не счастливый путь. Это:
что возвращает инструмент, когда он частично успешен — ордер исполнился, но стоп не прикрепился;
где оказывается тайм-аут — брокер так и не ответил, и вы не знаете, исполнился ли ордер;
как предотвращается сообщение о сбое как об успехе слоем выше.
Поэтому правило дизайна здесь заключается в том, что собственному отчету модели о произошедшем никогда не доверяют. Состояние позиции перечитывается от брокера при каждом вызове. Отказы явные, их мало, и они находятся непосредственно на пути выполнения, а не рядом с ним в подсказке.
Related MCP server: mt5-mcp
Уровень безопасности
Семь проверок, каждая из которых может отказать независимо, все регистрируются с машиночитаемой причиной.
Шесть из них находятся между order_submit и брокером; check_sl_widen_block управляет
модификациями, поэтому он никогда не видит открытие:
Проверка | Отказывает, когда |
| На диске существует файл аварийного выключателя. Срабатывает мгновенно, без перезапуска. |
| Ордера поступают быстрее установленного лимита. |
| Запись решения вышестоящего уровня устарела — ни один ордер не может опираться на старое одобрение. |
| Размер, сторона или символ не соответствуют тому, что сообщает брокер. |
| Модификация стоп-лосса переместила бы стоп дальше от цены. |
| Ручные переопределения за эту сессию превысили разрешенное количество. |
| Собственный капитал счета пересек установленный минимум. |
Запись в аудит выполняется после прохождения шлюзов на каждом пути — разрешенном или отклоненном — это запись, а не проверка: отказ, не оставляющий следа, рассматривается как сбой системы.
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 routeMQL5 эксперт (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"
}
}
}Выбор бэкенда и пути задаются переменными окружения:
Переменная | По умолчанию | Назначение |
|
|
|
|
| Состояние, журнал аудита, запись счета |
| MT5-under-Wine по умолчанию | MT5 |
Поставляется с бэкендом 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.
This server cannot be deployed
Maintenance
Related MCP Connectors
- FensoryOAuthcom.fensory
Trading MCP server for AI agents, with live market data, account reads and controlled execution.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn 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.1581 PyPI5MIT
- AlicenseNot gradedqualityCmaintenanceA 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
- FlicenseBqualityDmaintenanceAn 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-
- FlicenseNot gradedqualityCmaintenanceCloud-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.-