rgo-trading-api
by bhdhiman
README.md
# RGO Trading API — Python client, CLI & MCP server
A Python toolkit for the **RGO Client API** and **Dealer API** (a trading
order/position system). It ships three layers so you can use it however you
like:
| Layer | Entry point | Use it for |
|-------|-------------|------------|
| **Library** | `rgo_api/` | Import in your own Python code |
| **CLI** | `cli.py` | Explicit commands (`python cli.py positions`) |
| **MCP server** | `mcp_server.py` | **Ask an AI assistant in plain English** (Claude CLI, etc.) |
> ⚠️ **This places REAL trades.** Order placement/update/deletion is gated
> behind a config flag (`RGO_ALLOW_TRADING`) and is **off by default**. Reads
> are always safe. See [Safety](#safety).
---
## Features
- **Dealer reads**: executed deals, pending orders, all positions.
- **Order writes** on both the Client and Dealer APIs: place, update, delete
(opt-in).
- **Realtime deals** via WebSocket (`DealerApi.ws_stream`).
- **Natural-language access** through the Model Context Protocol (MCP): ask
*"show my open positions"* and let your AI client call the right tool.
- Typed, validated requests (Pydantic v2), a single shared HTTP layer, and a
test suite that mocks all network calls (no real trades in CI).
See [`docs/API.md`](docs/API.md) for the full endpoint reference and
[`docs/MCP.md`](docs/MCP.md) for AI-assistant setup.
---
## Requirements
- Python 3.10+
- An RGO account with API access (credentials + your broker's endpoints)
## Install
```bash
git clone https://github.com/bhdhiman/rgo-trading-api.git
cd rgo-trading-api
python -m venv .venv
# Windows:
.venv\Scripts\python -m pip install -r requirements.txt
# macOS/Linux:
# .venv/bin/python -m pip install -r requirements.txt
```
## Configure
```bash
cp .env.example .env # then edit .env with your real values
```
`.env` is gitignored — your credentials never get committed.
| Variable | Meaning |
|----------|---------|
| `RGO_LICENSE_ID` | Your license id |
| `RGO_DEALER_USERNAME` / `RGO_DEALER_PASSWORD` | Dealer login (for the read JWT) |
| `RGO_API_USERNAME` / `RGO_API_PASSWORD` | Header credentials for order writes |
| `RGO_CLIENT_BASE` | Client API base URL, e.g. `https://api.YOUR_DOMAIN:6017/clientapi` |
| `RGO_DEALER_BASE_READ` | Dealer **read** base URL (e.g. port 9016) |
| `RGO_DEALER_BASE_WRITE` | Dealer **write** base URL (may use a different port, e.g. 6016) |
| `RGO_WS_URL` | Realtime WebSocket URL |
| `RGO_ALLOW_TRADING` | `false` by default — set `true` to enable REAL orders |
---
## Usage — CLI
```bash
# Reads (safe)
python cli.py positions
python cli.py deals
python cli.py orders
# Writes (need RGO_ALLOW_TRADING=true AND --yes)
python cli.py place --api dealer --user <ACCOUNT> --type BuyLimit \
--side BID --price 1 --volume 1 --current 94000 --symbol GOLDOCT --yes
python cli.py delete --api dealer --position <POSITION_ID> --yes
```
## Usage — library
```python
from rgo_api import DealerApi, load_settings
with DealerApi(load_settings()) as api:
positions = api.get_positions()
deals = api.get_deals()
pending = api.get_pending_orders()
```
## Usage — AI assistant (MCP)
Register the server with your MCP-capable client (e.g. the Claude CLI), then
ask in plain English:
- *"show my open positions"*
- *"list today's deals"*
- *"what orders are pending?"*
Full setup (registration + generic MCP client) is in [`docs/MCP.md`](docs/MCP.md).
---
## Safety
This software can place real financial orders. Guardrails:
- **Credentials live only in `.env`** (gitignored). Nothing is hardcoded.
- **Trading is opt-in.** Place/update/delete refuse to run unless
`RGO_ALLOW_TRADING=true`; the CLI additionally requires `--yes`.
- **Inputs are validated** (side, order type, positive price/volume) before any
request is sent.
You are responsible for any orders you place. No warranty — see
[`LICENSE`](LICENSE).
---
## Tests
```bash
python -m pytest --cov=rgo_api
```
All HTTP is mocked with `respx`; tests never contact a live server or place
trades.
## Project structure
```
rgo_api/ # client library
config.py # settings from .env
models.py # request models + response-envelope parsing
_http.py # shared httpx transport
dealer_api.py # dealer reads + writes + websocket
client_api.py # client order writes
cli.py # Typer command-line interface
mcp_server.py # FastMCP server (AI-assistant tools)
docs/ # API + MCP documentation
tests/ # pytest suite (network mocked)
```
## License
[MIT](LICENSE)
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues