diff --git a/README.md b/README.md index 730bf2c..4c7864b 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ sul token bearer fornito dal client. - **Una singola immagine Docker** (`cerbero-mcp`) ospita tutti i router exchange in un unico processo FastAPI -- **Quattro exchange** (Deribit, Bybit, Hyperliquid, Alpaca) e **due data - provider** read-only (Macro, Sentiment) +- **Cinque exchange** (Deribit, Bybit, Hyperliquid, Alpaca, IBKR) e **due + data provider** read-only (Macro, Sentiment) - **Switch testnet/mainnet per-request** tramite header `Authorization: Bearer `: lo stesso container serve entrambi gli ambienti senza riavvii @@ -19,7 +19,7 @@ sul token bearer fornito dal client. override-abili tramite variabili dedicate (`DERIBIT_URL_*`, `BYBIT_URL_*`, `HYPERLIQUID_URL_*`, `ALPACA_URL_*`) - **Documentazione interattiva** OpenAPI/Swagger esposta a `/apidocs` -- **Qualità verificata**: 310 test (unit + integration + smoke), mypy +- **Qualità verificata**: 366 test (unit + integration + smoke), mypy pulito, ruff pulito ## Avvio rapido (sviluppo, senza Docker) @@ -88,6 +88,7 @@ non è richiesto sugli endpoint pubblici (`/health`, `/apidocs`, | `POST /mcp-bybit/tools/{tool}` | Tool exchange Bybit | | `POST /mcp-hyperliquid/tools/{tool}` | Tool exchange Hyperliquid | | `POST /mcp-alpaca/tools/{tool}` | Tool exchange Alpaca | +| `POST /mcp-ibkr/tools/{tool}` | Tool exchange Interactive Brokers | | `POST /mcp-macro/tools/{tool}` | Tool macro/market data | | `POST /mcp-sentiment/tools/{tool}` | Tool sentiment/news | | `GET /admin/audit` | Query dell'audit log JSONL (bearer richiesto, no X-Bot-Tag) | @@ -140,7 +141,7 @@ Parametri di query (tutti opzionali): - `from`, `to`: ISO 8601 datetime (es. `2026-05-01` o `2026-05-01T12:34:56Z`) - `actor`: `testnet` | `mainnet` -- `exchange`: nome dell'exchange (`deribit`, `bybit`, `hyperliquid`, `alpaca`) +- `exchange`: nome dell'exchange (`deribit`, `bybit`, `hyperliquid`, `alpaca`, `ibkr`) - `action`: nome del tool (es. `place_order`) - `bot_tag`: identificatore del bot - `limit`: massimo record restituiti, default `1000`, massimo `10000` @@ -186,6 +187,13 @@ rate, basis spot/perp, place_order, set_stop_loss, set_take_profit. Account, positions, bars, snapshot, option chain, place_order, amend_order, cancel_order, close_position. +### IBKR (Interactive Brokers) +Account, positions, activities, ticker, bars, snapshot, option chain, +search_contracts, clock, streaming (tick + depth via WebSocket +singleton), place_order, amend_order, cancel_order, close_position, +bracket/OCO/OTO orders. Auth via OAuth 1.0a Self-Service con minting +session token unattended (vedi sezione "IBKR Setup" più sotto). + ### Macro Treasury yields, FRED indicators, equity futures, asset prices, calendar, get_yield_curve_slope, get_breakeven_inflation, get_cot_tff, @@ -280,7 +288,7 @@ PORT=9000 TESTNET_TOKEN="$TESTNET_TOKEN" bash tests/smoke/run.sh ```bash uv sync -uv run pytest # tutta la suite (310 test attesi) +uv run pytest # tutta la suite (366 test attesi) uv run pytest tests/unit -v # solo unit uv run pytest tests/integration -v uv run ruff check src/ tests/ @@ -361,10 +369,6 @@ pybit (workaround documentato nel client). Per Alpaca l'override è applicato al solo trading endpoint: gli endpoint dati (`data.alpaca.markets`) restano quelli predefiniti dell'SDK. -## Licenza - -Privato. - ## IBKR Setup IBKR uses OAuth 1.0a Self-Service for fully unattended runtime auth. Setup is @@ -427,3 +431,7 @@ curl -X POST "https://cerbero-mcp./admin/ibkr/rotate-keys/confirm?env=testn -H "Authorization: Bearer " -H "Content-Type: application/json" \ -d '{"new_consumer_key":"...","new_access_token":"...","new_access_token_secret":"..."}' ``` + +## Licenza + +Privato.