# sbjerome/etrade-oauth-mcp architecture

> Architecture diagram of the GitHub repository sbjerome/etrade-oauth-mcp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-23). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sbjerome/etrade-oauth-mcp
- Repository: https://github.com/sbjerome/etrade-oauth-mcp

## Overview

etrade-oauth-mcp is an MCP server that exposes E*TRADE account, market-data, order, and alert operations to AI clients. The main workflow is OAuth 2.1 client authorization, Bearer-protected MCP access, tool dispatch, then OAuth 1.0a requests to E*TRADE; credentials and OAuth state are stored in OpenBao. The README documents the tool capabilities and transports. Sampled source confirms key storage and API-call patterns, but several route and handler implementations were not included, so those internal links are kept at subsystem level.

Main entry points: [`mcp_server.py`](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py) (MCP tool handlers), [`etrade_client.py`](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/etrade_client.py) (E*TRADE client), [`bao.py`](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/bao.py) (OpenBao secrets), [`auth.py`](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/auth.py) (OAuth 2.1 server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Client access"]
  node_oauth_server["OAuth 2.1 server<br/>[auth.py]"]
  node_bearer_guard["Bearer protection<br/>[auth.py]"]
end

subgraph group_runtime["MCP runtime"]
  node_mcp_transport["MCP transports<br/>[mcp_server.py]"]
  node_tool_runtime["MCP tool handlers<br/>[mcp_server.py]"]
  node_auth_tools["MCP auth tools<br/>[mcp_server.py]"]
end

subgraph group_etrade["E*TRADE capabilities"]
  node_session_tools["Session tools<br/>[mcp_server.py]"]
  node_account_tools["Account tools<br/>[mcp_server.py]"]
  node_market_tools["Market tools<br/>[mcp_server.py]"]
  node_order_tools["Order tools<br/>[mcp_server.py]"]
  node_alert_tools["Alert tools<br/>[mcp_server.py]"]
  node_etrade_client["E*TRADE client<br/>[etrade_client.py]"]
end

subgraph group_state["Credential state"]
  node_bao_store[("OpenBao secrets<br/>[bao.py]")]
end

node_ai_client(("AI client"))
node_etrade_api["E*TRADE API"]

node_ai_client -->|"requests tokens"| node_oauth_server
node_oauth_server -->|"reads and writes"| node_bao_store
node_ai_client -->|"calls tools"| node_mcp_transport
node_mcp_transport -->|"checks access"| node_bearer_guard
node_bearer_guard -->|"allows requests"| node_tool_runtime
node_tool_runtime -->|"dispatches"| node_session_tools
node_tool_runtime -->|"dispatches"| node_auth_tools
node_tool_runtime -->|"dispatches"| node_account_tools
node_tool_runtime -->|"dispatches"| node_market_tools
node_tool_runtime -->|"dispatches"| node_order_tools
node_tool_runtime -->|"dispatches"| node_alert_tools
node_session_tools -->|"reads and writes credentials"| node_bao_store
node_session_tools -->|"starts OAuth session"| node_etrade_client
node_auth_tools -->|"stores auth settings"| node_bao_store
node_account_tools -->|"calls account methods"| node_etrade_client
node_market_tools -->|"calls market methods"| node_etrade_client
node_order_tools -->|"calls order methods"| node_etrade_client
node_alert_tools -->|"calls alert methods"| node_etrade_client
node_etrade_client -->|"sends OAuth 1.0a requests"| node_etrade_api

click node_oauth_server "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/auth.py"
click node_bearer_guard "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/auth.py"
click node_mcp_transport "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py"
click node_tool_runtime "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py"
click node_session_tools "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py"
click node_auth_tools "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py"
click node_account_tools "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py"
click node_market_tools "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py"
click node_order_tools "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py"
click node_alert_tools "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py"
click node_etrade_client "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/etrade_client.py"
click node_bao_store "https://github.com/sbjerome/etrade-oauth-mcp/blob/main/bao.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_oauth_server,node_bearer_guard,node_ai_client toneBlue
class node_mcp_transport,node_tool_runtime,node_auth_tools toneAmber
class node_session_tools,node_account_tools,node_market_tools,node_order_tools,node_alert_tools,node_etrade_client,node_etrade_api toneMint
class node_bao_store toneRose
```

## Components

### Client access

- [OAuth 2.1 server](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/auth.py): `auth.py`
- [Bearer protection](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/auth.py): `auth.py`

### MCP runtime

- [MCP transports](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py): `mcp_server.py`
- [MCP tool handlers](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py): `mcp_server.py`
- [MCP auth tools](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py): `mcp_server.py`

### E*TRADE capabilities

- [Session tools](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py): `mcp_server.py`
- [Account tools](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py): `mcp_server.py`
- [Market tools](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py): `mcp_server.py`
- [Order tools](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py): `mcp_server.py`
- [Alert tools](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/mcp_server.py): `mcp_server.py`
- [E*TRADE client](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/etrade_client.py): `etrade_client.py`

### Credential state

- [OpenBao secrets](https://github.com/sbjerome/etrade-oauth-mcp/blob/main/bao.py): `bao.py`

### Other components

- **AI client**
- **E*TRADE API**

## Connections

- AI client → OAuth 2.1 server: requests tokens
- OAuth 2.1 server → OpenBao secrets: reads and writes
- AI client → MCP transports: calls tools
- MCP transports → Bearer protection: checks access
- Bearer protection → MCP tool handlers: allows requests
- MCP tool handlers → Session tools: dispatches
- MCP tool handlers → MCP auth tools: dispatches
- MCP tool handlers → Account tools: dispatches
- MCP tool handlers → Market tools: dispatches
- MCP tool handlers → Order tools: dispatches
- MCP tool handlers → Alert tools: dispatches
- Session tools → OpenBao secrets: reads and writes credentials
- Session tools → E*TRADE client: starts OAuth session
- MCP auth tools → OpenBao secrets: stores auth settings
- Account tools → E*TRADE client: calls account methods
- Market tools → E*TRADE client: calls market methods
- Order tools → E*TRADE client: calls order methods
- Alert tools → E*TRADE client: calls alert methods
- E*TRADE client → E*TRADE API: sends OAuth 1.0a requests
