oas-execute-mcp
oas-execute-mcp
언어 모델과 브로커 주문 사이에 안전 계층을 두는 MCP 서버입니다.
모델이 order_submit을 호출합니다. 브로커에 도달하기 전에 요청은 6개의 독립적인 검사를 통과하며, 그 중 하나라도 거부할 수 있습니다. 쓰기 경로에서는 7개입니다. 손절매 규칙이 오픈이 아닌 수정을 관장하기 때문입니다. 모든 시도(허용 또는 거부)는 사유와 함께 감사 로그에 추가됩니다. 브로커 자체는 교체 가능한 백엔드 뒤에 있으므로, 동일한 도구 표면이 모델이 알지 못하는 상태에서 디스크 시뮬레이터 또는 실제 MetaTrader 5 터미널에 대해 실행됩니다.
자체 채널에서 거래당 인간 승인 없이 10만 달러 규모의 prop-firm 평가 계정에 주문을 제출한 에이전트를 위해 구축되었습니다. 여기서 잘못된 크기의 주문은 실패한 테스트가 아니었습니다.
Why it exists
에이전트에게 돈을 쓰는 도구를 제공하는 것의 흥미로운 부분은 해피 패스가 아닙니다. 그것은:
도구가 반쯤 성공했을 때 반환하는 것 — 주문은 체결되었지만 스탑이 첨부되지 않은 경우;
타임아웃이 발생하는 경우 — 브로커가 응답하지 않아 체결 여부를 알 수 없는 경우;
실패가 상위 계층에 의해 성공으로 보고되지 않도록 중단되는 방법.
따라서 여기서의 설계 규칙은 모델이 일어난 일에 대해 스스로 설명하는 것을 절대 신뢰하지 않는다는 것입니다. 포지션 상태는 모든 호출 시 브로커로부터 다시 읽어옵니다. 거부는 명시적이고, 적으며, 프롬프트 옆이 아닌 실행 경로에 직접 위치합니다.
Related MCP server: mt5-mcp
The safety layer
7개의 검사, 각각 독립적으로 거부 가능, 모두 기계가 읽을 수 있는 사유로 기록됩니다. 그 중 6개는 order_submit과 브로커 사이에 있습니다. check_sl_widen_block은 수정을 관장하므로 오픈을 보지 않습니다:
검사 | 거부 조건 |
| 디스크에 킬 스위치 파일이 존재합니다. 즉시 작동하며 재시작이 필요하지 않습니다. |
| 주문이 설정된 상한보다 빠르게 도착하고 있습니다. |
| 상위 결정 기록이 오래되었습니다. 오래된 승인으로 주문할 수 없습니다. |
| 크기, 방향 또는 심볼이 브로커가 보고하는 것과 일치하지 않습니다. |
| 손절매 수정이 스탑을 가격에서 멀어지게 합니다. |
| 이 세션의 수동 재정의가 허용된 횟수를 초과했습니다. |
| 계정 자본이 설정된 최저치를 넘었습니다. |
감사 추가는 모든 경로의 게이트 후에 실행되며, 허용 또는 거부 여부와 관계없이 실행됩니다. 이는 검사가 아닌 기록입니다. 흔적을 남기지 않는 거부는 시스템의 실패로 간주됩니다.
safety.py는 이를 run_entry_safety_gates, run_modify_safety_gates, run_close_safety_gates로 그룹화하여, 종료가 오픈만을 규제해야 하는 규칙에 의해 차단되지 않도록 합니다. 이는 안전 시스템이 보호하려는 포지션에 사용자를 가두는 실패 모드입니다.
Tool surface
7개의 도구: order_submit · order_modify · order_close · close_all · position_list · account_info · health_check.
Architecture
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)는 localhost 엔드포인트를 폴링하고 터미널 측에서 실행합니다. backends/base.py는 인터페이스입니다. 브로커를 추가한다는 것은 이를 구현하는 것을 의미하며, 백엔드 위의 어떤 것도 변경되지 않습니다.
Install
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 백엔드는 이미 로그인된 터미널을 따릅니다. 읽어오는 계정 기록은 문서용(로그인 및 서버 이름)이며, 비밀번호를 포함하지 않으며, 버전 관리 외부에 있어야 합니다.
Tests
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 this9개의 테스트 파일, 모두 깨끗한 체크아웃에서 통과합니다. 각각은 자체 포함된 검사기입니다. 모듈 범위에서 어설션을 실행하고 실패 시 0이 아닌 값으로 종료되므로, 스위트에는 인터프리터 외에는 아무것도 필요하지 않습니다. tests/suite_test.py는 동일한 스크립트를 서브프로세스로 구동하므로 pytest도 작동하는 진입점입니다. 이는 두 번째 스위트가 아닌 브리지이며, 하나의 러너만 볼 수 있는 테스트 버전은 없습니다. 이들은 스텁에 대한 제출/수정/종료 주기, 손절매 고정 및 충전된 체결 후 재파생, 브리지 클라이언트 모드 핸드셰이크, 호가 및 포지션 경로, 그리고 오류 형태의 페이로드가 빈 포지션 목록으로 소비되는 것을 막는 게이트를 다룹니다. 이는 실제 사건으로, 타임아웃이 {"positions": []}을 반환했고 다운스트림 리더가 이를 믿었던 경우입니다.
두 테스트는 주제가 없을 때 통과하지 않고 건너뜁니다. 이들은 이 서버의 소비자를 실행하므로 호스트 프로젝트(OAS_HOST_REPO, OAS_RECONCILE_CMD)가 필요합니다. 검사 대상이 없을 때 조용히 초록색으로 변하는 검사는 검사가 없는 것보다 나쁩니다.
Status and limits
stub백엔드는 완전하고 결정적입니다.mt5_demo는 macOS에서 Wine으로 실행되는 MetaTrader 5 터미널에 대해 프로덕션에서 사용 중입니다.check_rate_limit는 구현되었지만 테스트 벤치에서 실행되지 않습니다 — 벤치는 브로커 타임아웃과 킬 스위치 발동을 시뮬레이션하며, 속도 제한 응답은 시뮬레이션하지 않습니다. "구현됨"과 "테스트됨"의 구분이 이 저장소의 전체 주제이기 때문에 명시합니다.MT5 브리지는 macOS/Wine에 맞춰져 있습니다. 네이티브 Windows 설치는
OAS_MT5_COMMON_FILES를 설정해야 하며, 제가 테스트하지 않았습니다.설계상 단일 터미널: 리스너는 하나의 포트에 싱글톤이며, 두 번째 서버 프로세스는 첫 번째를 감지하여 바인딩 경쟁 대신 첫 번째로 전달합니다.
License
MIT — LICENSE 참조.
This server cannot be installed
Maintenance
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
- MIT
- AlicenseAqualityAmaintenanceAn 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.154MIT
- Alicense-qualityCmaintenanceA 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
- FlicenseBqualityCmaintenanceAn 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
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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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