A Model Context Protocol (MCP) server for Tradovate integration in Claude Desktop. This server enables AI assistants to manage Tradovate trading accounts through natural language interactions.
- ✅ Complete Tradovate API integration
- 🔒 Secure authentication handling
- 📈 Real-time market data access
- 💼 Account management
- 📊 Risk management controls
- 🔄 Order placement and management
- 📝 Comprehensive test coverage
To install the Tradovate MCP server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @0xjmp/mcp-tradovate --client claude
- Clone the repository:
git clone https://github.com/0xjmp/mcp-tradovate.git
cd mcp-tradovate
- Install dependencies:
go mod download
- Build the project:
go build ./cmd/mcp-tradovate
- Run:
./mcp-tradovate
Create a .env
file in the project root with your Tradovate credentials:
TRADOVATE_USERNAME=your_username
TRADOVATE_PASSWORD=your_password
TRADOVATE_APP_ID=your_app_id
TRADOVATE_APP_VERSION=your_app_version
TRADOVATE_CID=your_client_id
TRADOVATE_SEC=your_client_secret
authenticate
: Connect to Tradovate API- No parameters required
-
get_accounts
: List all trading accounts- No parameters required
-
get_positions
: View current positions- No parameters required
-
get_risk_limits
: Get risk management settings- Required parameters:
account_id
: (number) Account ID to get limits for
- Required parameters:
-
set_risk_limits
: Configure risk management settings- Required parameters:
account_id
: (number) Account ID to set limits forday_max_loss
: (number) Maximum daily loss limitmax_drawdown
: (number) Maximum drawdown limitmax_position_qty
: (number) Maximum position quantitytrailing_stop
: (number) Trailing stop percentage
- Required parameters:
-
place_order
: Submit a new order- Required parameters:
account_id
: (number) Account ID to place the order forcontract_id
: (number) Contract ID to tradeorder_type
: (string) Type of order (Market, Limit, etc.)quantity
: (number) Number of contracts to tradetime_in_force
: (string) Time in force (Day, GTC, IOC, etc.)
- Optional parameters:
price
: (number) Order price (required for Limit orders)
- Required parameters:
-
cancel_order
: Cancel an existing order- Required parameters:
order_id
: (number) Order ID to cancel
- Required parameters:
-
get_fills
: Get fills for a specific order- Required parameters:
order_id
: (number) Order ID to get fills for
- Required parameters:
-
get_contracts
: List available contracts- No parameters required
-
get_market_data
: Get real-time market data- Required parameters:
contract_id
: (number) Contract ID to get market data for
- Required parameters:
-
get_historical_data
: Get historical price data- Required parameters:
contract_id
: (number) Contract ID to get data forstart_time
: (string) Start time in ISO 8601 formatend_time
: (string) End time in ISO 8601 formatinterval
: (string) Time interval (1m, 5m, 15m, 1h, 1d)
- Required parameters:
Run all tests with coverage:
go test -v -race -coverprofile=coverage.txt -covermode=atomic ./...
Follow Go best practices and conventions:
go fmt ./...
go vet ./...
-
Authentication Failures
- Verify your Tradovate credentials in the
.env
file - Ensure your API access is enabled in Tradovate
- Verify your Tradovate credentials in the
-
Connection Issues
- Check your internet connection
- Verify Tradovate API status
- Ensure firewall isn't blocking connections
-
Rate Limiting
- Implement appropriate delays between requests
- Monitor API usage limits
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions, please file an issue on the GitHub repository.
Jake Peterson (@0xjmp)