MetaTrader 5 in a real Windows VM (Docker + QEMU/KVM), driven over REST + MCP — programmatic trading plus server-side TA: OHLC bars enriched with RSI/MACD/Bollinger/ADX/VWAP/Ichimoku/Order Blocks/FVGs (primitives, not signals). Typed MCP tools mirror the whole surface. Multi-broker, multi-account. No Wine bullshit.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport streamable-http · http counts 25 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
cancel_order
-
close_position
-
create_order
-
endpoints
-
get_account
-
get_backtest
-
get_history_deals
-
get_history_orders
-
get_order
-
get_position
-
get_rates
-
get_rates_ta
-
get_symbol
-
get_terminal
-
get_tick
-
get_ticks
-
list_orders
-
list_positions
-
list_symbols
-
list_terminals
-
modify_order
-
modify_position
-
ping
-
request
-
terminal_control
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 13a07b9 · analyzer v33 · 1w ago
skills & prompt files 1
danger signals1
- suspicious endpoint 20.20.20.1 psyb0t-mt5-httpapi-13a07b9/mt5api/config.py :266
or "http://20.20.20.1:8000/"
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 116
filesystem 25
- fs psyb0t-mt5-httpapi-13a07b9/mcpunifier/config.py :89
with open(path, encoding="utf-8") as handle: - fs psyb0t-mt5-httpapi-13a07b9/mt5api/backtest/cache_parser.py :6
from pathlib import Path - fs psyb0t-mt5-httpapi-13a07b9/mt5api/backtest/handler.py :21
import shutil - fs psyb0t-mt5-httpapi-13a07b9/mt5api/backtest/jobs.py :16
import shutil - fs psyb0t-mt5-httpapi-13a07b9/mt5api/config.py :33
with open(CONFIG_YAML, encoding="utf-8") as f: - fs psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :457
resp = client.open( - fs psyb0t-mt5-httpapi-13a07b9/mt5api/monitor.py :19
with open(INI_FILE, "r") as f: - fs psyb0t-mt5-httpapi-13a07b9/mt5api/mt5client.py :386
with open(journal_log, "rb") as f: - fs (weak) psyb0t-mt5-httpapi-13a07b9/scripts/check_health.py :37
with open(CONFIG, encoding='utf-8') as f: - fs (weak) psyb0t-mt5-httpapi-13a07b9/scripts/config_helper.py :67
with open(CONFIG_PATH, encoding="utf-8") as f: - fs (weak) psyb0t-mt5-httpapi-13a07b9/scripts/verify_binaries.py :108
with open(path, "rb") as handle: - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/integration/test_mcpunifier.py :19
from pathlib import Path - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/integration/test_nginx_routing.py :23
from pathlib import Path - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/integration/test_wickworks_lifecycle.py :43
import shutil - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/conftest.py :11
from pathlib import Path - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_backtest_handler.py :200
norm = open(os.path.join(stage_dir, "normalized.ini"), encoding="utf-8").read() - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_backtest_log_tail.py :20
with open(path, "w", encoding="utf-16-le") as handle: - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_config_generation.py :13
from pathlib import Path - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_healthcheck_behavior.py :11
import shutil - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_mcp_tool_parity.py :4
from pathlib import Path - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_recreate_vm_script.py :17
from pathlib import Path - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_requirements_sync.py :2
from pathlib import Path - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_terminal_instances.py :2
from pathlib import Path - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_verify_binaries.py :163
with open(verify_binaries.MANIFEST_PATH, encoding="utf-8") as handle: - fs (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_wickworks_healthcheck.py :13
from pathlib import Path
shell / exec 9
- shell psyb0t-mt5-httpapi-13a07b9/mt5api/backtest/handler.py :22
import subprocess - shell psyb0t-mt5-httpapi-13a07b9/mt5api/mt5client.py :2
import subprocess - shell (weak) psyb0t-mt5-httpapi-13a07b9/scripts/config_helper.py :13
import subprocess - shell (weak) psyb0t-mt5-httpapi-13a07b9/scripts/verify_binaries.py :35
import subprocess - shell (weak) psyb0t-mt5-httpapi-13a07b9/tests/integration/test_wickworks_lifecycle.py :44
import subprocess - shell (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_config_generation.py :12
import subprocess - shell (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_healthcheck_behavior.py :12
import subprocess - shell (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_recreate_vm_script.py :16
import subprocess - shell (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_verify_binaries.py :16
import subprocess
network 16
- net (weak) psyb0t-mt5-httpapi-13a07b9/examples/python/api.py :8
import requests - net psyb0t-mt5-httpapi-13a07b9/mcpunifier/client.py :11
import httpx - net psyb0t-mt5-httpapi-13a07b9/mt5api/handlers/symbols.py :3
from urllib import error as urllib_error - net (weak) psyb0t-mt5-httpapi-13a07b9/scripts/check_health.py :8
import socket - net (weak) psyb0t-mt5-httpapi-13a07b9/scripts/wickworks-healthcheck.py :47
import socket - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/integration/test_mcpunifier.py :17
import urllib.error - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/integration/test_nginx_routing.py :21
import urllib.error - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/integration/test_wickworks_lifecycle.py :93
return f"""import socket, threading - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/client.py :10
from urllib.parse import urljoin - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/test_history.py :10
import requests - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/test_limit_order.py :142
import requests - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/test_market_order.py :9
import requests - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/test_position_management.py :115
import requests - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/test_rates.py :39
import requests - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/test_rates_ta.py :12
import requests - net (weak) psyb0t-mt5-httpapi-13a07b9/tests/test_wickworks_healthcheck.py :91
with patch("socket.socket", _SlowSock):
secrets 2
- secrets psyb0t-mt5-httpapi-13a07b9/mt5api/config.py :213
API_TOKEN = _args.token or os.environ.get("API_TOKEN", "") - secrets (weak) psyb0t-mt5-httpapi-13a07b9/tests/real/client.py :74
token = os.environ.get("MT5_API_TOKEN")
tool registrations 49
- list_terminals psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :119
- ping psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :138
- get_terminal psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :148
- terminal_control psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :158
- get_account psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :175
- list_symbols psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :185
- get_symbol psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :198
- get_tick psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :209
- get_rates psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :220
- get_ticks psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :251
- get_rates_ta psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :288
- list_positions psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :319
- get_position psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :329
- modify_position psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :339
- close_position psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :364
- list_orders psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :394
- get_order psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :403
- create_order psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :413
- modify_order psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :457
- cancel_order psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :489
- get_history_orders psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :503
- get_history_deals psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :523
- get_backtest psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :543
- endpoints psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :569
- request psyb0t-mt5-httpapi-13a07b9/mcpunifier/mcp_server.py :582
- ping psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :93
- get_terminal psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :98
- terminal_control psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :104
- get_account psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :117
- list_symbols psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :125
- get_symbol psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :132
- get_tick psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :138
- get_rates psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :144
- get_ticks psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :165
- get_rates_ta psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :192
- list_positions psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :215
- get_position psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :220
- modify_position psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :225
- close_position psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :237
- list_orders psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :256
- get_order psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :261
- create_order psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :266
- modify_order psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :305
- cancel_order psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :327
- get_history_orders psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :338
- get_history_deals psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :345
- get_backtest psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :354
- endpoints psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :371
- request psyb0t-mt5-httpapi-13a07b9/mt5api/mcp_server.py :387
declared dependencies 8
- requests@*
- pandas@*
- pandas-ta@*
- mplfinance@*
- matplotlib@*
- smartmoneyconcepts@*
- github.com/psyb0t/aichteeteapee@v1.9.0
- github.com/psyb0t/ctxerrors@v0.2.3
transport_posture 1
- network-listening, binds all interfaces, no auth detected psyb0t-mt5-httpapi-13a07b9/mt5api/config.py :8
HOST = "0.0.0.0"