# MCP Tradovate Server

![](https://badge.mcpx.dev?type=server 'MCP Server')
[![smithery badge](https://smithery.ai/badge/@0xjmp/mcp-tradovate)](https://smithery.ai/server/@0xjmp/mcp-tradovate)
[![Go Report Card](https://goreportcard.com/badge/github.com/0xjmp/mcp-tradovate)](https://goreportcard.com/report/github.com/0xjmp/mcp-tradovate)
[![codecov](https://codecov.io/gh/0xjmp/mcp-tradovate/branch/main/graph/badge.svg)](https://codecov.io/gh/0xjmp/mcp-tradovate)
[![Go Reference](https://pkg.go.dev/badge/github.com/0xjmp/mcp-tradovate.svg)](https://pkg.go.dev/github.com/0xjmp/mcp-tradovate)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)

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.

## Features

- ✅ Complete Tradovate API integration
- 🔒 Secure authentication handling
- 📈 Real-time market data access
- 💼 Account management
- 📊 Risk management controls
- 🔄 Order placement and management
- 📝 Comprehensive test coverage

## Installation

### Installing via Smithery
To install the Tradovate MCP server for Claude Desktop automatically via Smithery:

```bash
npx -y @smithery/cli install @0xjmp/mcp-tradovate --client claude
```

### Manual Installation

1. Clone the repository:
```bash
git clone https://github.com/0xjmp/mcp-tradovate.git
cd mcp-tradovate
```

2. Install dependencies:
```bash
go mod download
```

3. Build the project:
```bash
go build ./cmd/mcp-tradovate
```

4. Run:
```
./mcp-tradovate
```

## Configuration

Create a `.env` file in the project root with your Tradovate credentials:

```env
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
```

## Available Tools

### Authentication
- `authenticate`: Connect to Tradovate API
  - No parameters required

### Account Management
- `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

- `set_risk_limits`: Configure risk management settings
  - Required parameters:
    - `account_id`: (number) Account ID to set limits for
    - `day_max_loss`: (number) Maximum daily loss limit
    - `max_drawdown`: (number) Maximum drawdown limit
    - `max_position_qty`: (number) Maximum position quantity
    - `trailing_stop`: (number) Trailing stop percentage

### Trading Operations
- `place_order`: Submit a new order
  - Required parameters:
    - `account_id`: (number) Account ID to place the order for
    - `contract_id`: (number) Contract ID to trade
    - `order_type`: (string) Type of order (Market, Limit, etc.)
    - `quantity`: (number) Number of contracts to trade
    - `time_in_force`: (string) Time in force (Day, GTC, IOC, etc.)
  - Optional parameters:
    - `price`: (number) Order price (required for Limit orders)

- `cancel_order`: Cancel an existing order
  - Required parameters:
    - `order_id`: (number) Order ID to cancel

- `get_fills`: Get fills for a specific order
  - Required parameters:
    - `order_id`: (number) Order ID to get fills for

### Market Data
- `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

- `get_historical_data`: Get historical price data
  - Required parameters:
    - `contract_id`: (number) Contract ID to get data for
    - `start_time`: (string) Start time in ISO 8601 format
    - `end_time`: (string) End time in ISO 8601 format
    - `interval`: (string) Time interval (1m, 5m, 15m, 1h, 1d)

## Development

### Running Tests

Run all tests with coverage:
```bash
go test -v -race -coverprofile=coverage.txt -covermode=atomic ./...
```

### Code Style

Follow Go best practices and conventions:
```bash
go fmt ./...
go vet ./...
```

## Troubleshooting

### Common Issues

1. **Authentication Failures**
   - Verify your Tradovate credentials in the `.env` file
   - Ensure your API access is enabled in Tradovate

2. **Connection Issues**
   - Check your internet connection
   - Verify Tradovate API status
   - Ensure firewall isn't blocking connections

3. **Rate Limiting**
   - Implement appropriate delays between requests
   - Monitor API usage limits

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Support

If you encounter any issues or have questions, please file an issue on the GitHub repository.

## Author

Jake Peterson ([@0xjmp](https://github.com/0xjmp))
