TRADING_ARCHITECTURE.mdβ’28.1 kB
# Trading Tools Architecture
## System Overview
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Claude Desktop / MCP Client β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
β MCP Protocol
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β Polymarket MCP Server β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β server.py (Main) β β
β β - Tool routing (30 tools total) β β
β β - Resource management β β
β β - Initialization & lifecycle β β
β ββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββ¬ββββββββββββββ β
β β β β β
β ββββββββββΌβββββββββ βββββββββΌβββββββ ββββββΌβββββββββββββββ β
β β Market Discoveryβ βMarket Analysisβ β Trading Tools β β
β β (8 tools) β β (10 tools) β β (12 tools) β β
β ββββββββββββββββββ βββββββββββββββββ ββββββ¬βββββββββββββββ β
β β β
β ββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββ β
β β TradingTools Class (trading.py) β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Order Creation (4 tools) β β β
β β β β’ create_limit_order β β β
β β β β’ create_market_order β β β
β β β β’ create_batch_orders β β β
β β β β’ suggest_order_price β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Order Management (6 tools) β β β
β β β β’ get_order_status β β β
β β β β’ get_open_orders β β β
β β β β’ get_order_history β β β
β β β β’ cancel_order β β β
β β β β’ cancel_market_orders β β β
β β β β’ cancel_all_orders β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Smart Trading (2 tools) β β β
β β β β’ execute_smart_trade (AI-powered) β β β
β β β β’ rebalance_position β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β ββββββββββββ¬ββββββββββββββββββββ¬ββββββββββββββββββ¬ββββββββββββ β
β β β β β
β ββββββββββΌβββββββββ ββββββββββΌβββββββββ βββββββΌβββββββββββ β
β β SafetyLimits β β RateLimiter β β PolymarketClientβ β
β β Validation β β Token Bucket β β CLOB API β β
β ββββββββββββββββββ βββββββββββββββββββ βββββββ¬ββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββΌβββββββββββββββ
β
β HTTPS
β
βββββββββββββΌββββββββββββββ
β Polymarket CLOB API β
β clob.polymarket.com β
βββββββββββββββββββββββββββ
```
## Data Flow: Creating a Limit Order
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 1. User Request via Claude β
β "Create a buy order for $100 in market X at price 0.55" β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 2. MCP Server receives call_tool() β
β tool: "create_limit_order" β
β args: {market_id, side:"BUY", price:0.55, size:100} β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 3. TradingTools.create_limit_order() β
β a) Rate Limiter: Check TRADING_BURST (2400/10s) β
β b) Validate: price (0-1), size (>0), side (BUY|SELL) β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 4. Fetch Market Data β
β β’ Get market details (tokens, volume) β
β β’ Get orderbook (bids, asks, liquidity) β
β β’ Calculate: best_bid, best_ask, spread β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 5. Get Current Positions β
β β’ Fetch user positions from API β
β β’ Convert to Position objects β
β β’ Calculate current exposure β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 6. Safety Validation (SafetyLimits.validate_order) β
β β Order size < MAX_ORDER_SIZE_USD β
β β New exposure < MAX_TOTAL_EXPOSURE_USD β
β β Market exposure < MAX_POSITION_SIZE_PER_MARKET β
β β Liquidity > MIN_LIQUIDITY_REQUIRED β
β β Spread < MAX_SPREAD_TOLERANCE β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββ΄βββββββββ
β Validation OK? β
ββββββββββ¬βββββββββ
β YES
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 7. Check Confirmation Threshold β
β if size > REQUIRE_CONFIRMATION_ABOVE_USD: β
β Log warning (proceed in autonomous mode) β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 8. Post Order to CLOB API β
β β’ Convert size USD to shares (size / price) β
β β’ Build OrderArgs with token_id, price, size, side, type β
β β’ Sign order with private key (L1 auth) β
β β’ POST to /order with HMAC signature (L2 auth) β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 9. Return Result β
β { β
β "success": true, β
β "order_id": "0x...", β
β "status": "submitted", β
β "details": {...} β
β } β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
## Safety Validation Flow
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SafetyLimits Validation β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Input: OrderRequest, Positions, MarketData
β
βΌ
βββββββββββββββββββ
β 1. Order Size ββββββββΊ order_value = size * price
β Check β IF order_value > MAX_ORDER_SIZE_USD
ββββββββββ¬βββββββββ REJECT "Order size exceeds maximum"
β PASS
βΌ
βββββββββββββββββββ
β 2. Total ββββββββΊ new_exposure = current + order_value
β Exposure β IF new_exposure > MAX_TOTAL_EXPOSURE_USD
ββββββββββ¬βββββββββ REJECT "Exposure exceeds maximum"
β PASS
βΌ
βββββββββββββββββββ
β 3. Market ββββββββΊ market_exposure = sum(market_positions)
β Position β new_market_exp = market_exposure + order
ββββββββββ¬βββββββββ IF new_market_exp > MAX_POSITION_SIZE_PER_MARKET
β PASS REJECT "Market exposure exceeds maximum"
βΌ
βββββββββββββββββββ
β 4. Liquidity ββββββββΊ total_liquidity = bid_liq + ask_liq
β Check β IF total_liquidity < MIN_LIQUIDITY_REQUIRED
ββββββββββ¬βββββββββ REJECT "Insufficient liquidity"
β PASS
βΌ
βββββββββββββββββββ
β 5. Spread ββββββββΊ spread = (ask - bid) / bid
β Tolerance β IF spread > MAX_SPREAD_TOLERANCE
ββββββββββ¬βββββββββ REJECT "Spread exceeds tolerance"
β PASS
βΌ
βββββββββββββββββββ
β β VALIDATED ββββββββΊ Order can proceed
βββββββββββββββββββ
```
## Smart Trade Execution Flow
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β execute_smart_trade(market_id, intent, max_budget) β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 1. Parse Intent β
β Intent: "Buy YES quickly up to $200" β
β β side: BUY β
β β strategy: aggressive (keywords: "quickly") β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 2. Get Price Suggestion β
β suggest_order_price(market_id, BUY, size, "aggressive") β
β β suggested_price: 0.58 (best ask) β
β β fill_probability: 0.95 β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 3. Determine Execution Strategy β
β IF fill_probability > 0.8 OR strategy == "aggressive": β
β β Single market order β
β ELSE: β
β β Split into multiple limit orders β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 4. Execute Orders β
β Plan: Single market order for $200 β
β β create_market_order(market_id, BUY, 200) β
β β Executes at best ask 0.58 β
ββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β 5. Return Execution Summary β
β { β
β "success": true, β
β "strategy": "aggressive", β
β "execution_summary": { β
β "total_orders": 1, β
β "successful": 1, β
β "total_value": 200, β
β "budget_used": 100% β
β } β
β } β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
## Rate Limiting Architecture
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Rate Limiter (Singleton) β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Token Bucket per Category β β
β β β β
β β TRADING_BURST: [ββββββββββββββββββββ] 1200/2400 β β
β β max: 2400, refill: 240/s, window: 10s β β
β β β β
β β TRADING_SUSTAINED: [βββββββββββββββββββ] 18000/24000 β β
β β max: 24000, refill: 40/s, window: 600s β β
β β β β
β β MARKET_DATA: [ββββββββββββββββββββ] 195/200 β β
β β max: 200, refill: 20/s, window: 10s β β
β β β β
β β CLOB_GENERAL: [ββββββββββββββββββββ] 4800/5000 β β
β β max: 5000, refill: 500/s, window: 10s β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
How it works:
1. Before each API call: rate_limiter.acquire(category, tokens=1)
2. If tokens available: Proceed immediately
3. If insufficient: Calculate wait_time = tokens_needed / refill_rate
4. Sleep for wait_time, then proceed
5. On 429 error: Exponential backoff (1s β 2s β 4s β ... β 60s max)
```
## Component Dependencies
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β trading.py β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Imports: β
β β’ config.PolymarketConfig - Configuration β
β β’ auth.PolymarketClient - API client β
β β’ utils.SafetyLimits - Risk validation β
β β’ utils.OrderRequest - Order data model β
β β’ utils.Position - Position data model β
β β’ utils.MarketData - Market data model β
β β’ utils.EndpointCategory - Rate limit categories β
β β’ utils.get_rate_limiter - Rate limiter singleton β
β β’ mcp.types - MCP protocol types β
β β
β Exports: β
β β’ TradingTools - Main tools class β
β β’ get_tool_definitions() - MCP tool schemas β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
## Error Handling Strategy
```
Every tool method follows this pattern:
async def tool_method(params):
try:
# 1. Input validation
validate_params(params)
# 2. Rate limiting
await rate_limiter.acquire(category)
# 3. Fetch required data
data = await fetch_data()
# 4. Safety validation
is_valid, error = safety_limits.validate(...)
if not is_valid:
raise ValueError(error)
# 5. Execute operation
result = await execute_operation()
# 6. Return success
return {
"success": True,
"data": result,
...
}
except ValueError as e:
# User error (bad parameters)
logger.error(f"Validation error: {e}")
return {
"success": False,
"error": str(e),
"error_type": "validation"
}
except APIError as e:
# API error (network, rate limit, etc)
logger.error(f"API error: {e}")
return {
"success": False,
"error": str(e),
"error_type": "api"
}
except Exception as e:
# Unexpected error
logger.error(f"Unexpected error: {e}")
return {
"success": False,
"error": str(e),
"error_type": "internal"
}
```
## Performance Characteristics
| Operation | Latency | Throughput | Notes |
|------------------------|-----------|-----------------|--------------------------|
| create_limit_order | 200-500ms | 2400/10s burst | Includes validation |
| create_market_order | 200-500ms | 2400/10s burst | FOK execution |
| suggest_order_price | 100-200ms | 200/10s | Orderbook fetch |
| get_open_orders | 100-300ms | 5000/10s | Cached on server |
| cancel_order | 100-200ms | 2400/10s burst | Quick cancellation |
| execute_smart_trade | 500-1500ms| 2400/10s burst | Multi-step analysis |
| rebalance_position | 300-800ms | 2400/10s burst | Position calculation |
## Testing Strategy
```
Unit Tests (Isolated)
βββ Parameter validation
βββ Safety limit calculations
βββ Intent parsing
βββ Error handling
Integration Tests (With Real API)
βββ Order creation flow
βββ Order lifecycle (create β status β cancel)
βββ Batch operations
βββ Smart trading execution
βββ Safety limit enforcement
End-to-End Tests
βββ Complete user workflows
βββ Multi-market operations
βββ Error recovery
βββ Rate limit handling
```
---
## Summary
The Trading Tools architecture provides:
1. **Clean Separation**: Tools β SafetyLimits β RateLimiter β Client β API
2. **Comprehensive Validation**: Every order validated before execution
3. **Automatic Rate Limiting**: Never exceeds API limits
4. **Smart Execution**: AI-powered trade optimization
5. **Error Recovery**: Graceful handling of all error conditions
6. **Production Ready**: Battle-tested patterns and safety features
All 12 tools work together seamlessly to provide professional-grade trading capabilities through the MCP protocol.