github Python analyzed 13a07b9

psyb0t/mt5-httpapi

github

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.

maintainer
psyb0t
license
WTFPL
first seen
2026-07-26
last seen
2026-08-25
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 25 tools
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
skills & danger signals github-tarball
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

code evidence vHEAD · github-tarball
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"