Skip to main content
Glama
ssonthal

Zerodha Trading Bot - MCP Server

by ssonthal
README.md
# Zerodha Trading Bot - MCP Server

A Model Context Protocol (MCP) server that integrates with Zerodha APIs for automated trading. This server provides tools for authentication, market data retrieval, order placement, and portfolio management.

## Features

- **OAuth Authentication**: Secure authentication with Zerodha APIs
- **Market Data**: Real-time quotes and instrument information
- **Trading Operations**: Place, modify, and cancel orders
- **Portfolio Management**: View holdings, positions, and margins
- **MCP Integration**: Full Model Context Protocol compliance

## Prerequisites

- Node.js 18+ 
- Zerodha API credentials (API Key and Secret)
- Zerodha trading account

## Setup

### 1. Install Dependencies

```bash
npm install
```

### 2. Configure Environment Variables

Copy the example environment file and configure your Zerodha credentials:

```bash
cp env.example .env
```

Edit `.env` with your Zerodha API credentials:

```env
# Zerodha API Configuration
ZERODHA_API_KEY=your_api_key_here
ZERODHA_API_SECRET=your_api_secret_here
ZERODHA_REDIRECT_URI=http://localhost:3000/callback
ZERODHA_BASE_URL=https://api.kite.trade

# MCP Server Configuration
MCP_SERVER_PORT=3001
MCP_SERVER_HOST=localhost

# Trading Configuration
DEFAULT_QUANTITY=1
DEFAULT_ORDER_TYPE=MIS
DEFAULT_PRODUCT_TYPE=INTRADAY
```

### 3. Get Zerodha API Credentials

1. Log in to your Zerodha account
2. Go to [API Console](https://developers.kite.trade/)
3. Create a new application
4. Note down your API Key and Secret
5. Set the redirect URI to `http://localhost:3000/callback`

### 4. Authentication

Start the authentication server:

```bash
node src/auth-server.js
```

Visit `http://localhost:3000` and follow the OAuth flow. After successful authentication, you'll receive an access token. Add it to your `.env` file:

```env
ZERODHA_ACCESS_TOKEN=your_access_token_here
```

## Usage

### Start the MCP Server

```bash
npm start
```

### Test the Setup

```bash
npm test
```

## Available Tools

The MCP server provides the following tools:

### Authentication
- `get_login_url`: Get OAuth login URL
- `authenticate`: Authenticate with request token
- `validate_token`: Check if access token is valid

### Market Data
- `get_quote`: Get live quotes for symbols
- `get_instruments`: Get instrument information

### Portfolio
- `get_user_profile`: Get user profile
- `get_holdings`: Get current holdings
- `get_positions`: Get current positions
- `get_margins`: Get margin information

### Trading
- `place_order`: Place trading orders
- `get_order_history`: Get order history
- `cancel_order`: Cancel existing orders

## Example Usage

### Place a Market Order

```javascript
// Example order parameters
const orderParams = {
  tradingsymbol: "RELIANCE",
  exchange: "NSE",
  transaction_type: "BUY",
  quantity: 1,
  product: "MIS",
  order_type: "MARKET"
};
```

### Get Live Quotes

```javascript
// Get quotes for multiple symbols
const symbols = "NSE:RELIANCE,NSE:TCS,NSE:INFY";
const quotes = await zerodhaClient.getQuote(symbols);
```

## File Structure

```
ZerodhaTradingBot/
├── src/
│   ├── server.js          # Main server entry point
│   ├── mcp-server.js      # MCP server implementation
│   ├── zerodha-client.js  # Zerodha API client
│   └── auth-server.js     # OAuth authentication server
├── test/
│   └── test.js           # Test suite
├── package.json
├── env.example
└── README.md
```

## Security Considerations

- Never commit your `.env` file to version control
- Keep your API credentials secure
- Use environment variables for sensitive data
- Regularly rotate your access tokens

## Error Handling

The server includes comprehensive error handling for:
- Network connectivity issues
- Invalid API credentials
- Expired access tokens
- Invalid order parameters
- Rate limiting

## Development

### Running in Development Mode

```bash
npm run dev
```

### Adding New Tools

To add new trading tools:

1. Add the method to `ZerodhaClient` class in `src/zerodha-client.js`
2. Add the tool handler in `src/mcp-server.js`
3. Update the tool definitions in the `tools/list` handler

## Troubleshooting

### Common Issues

1. **Authentication Failed**: Check your API credentials and redirect URI
2. **Token Expired**: Re-authenticate using the auth server
3. **Order Rejected**: Verify order parameters and account balance
4. **Network Errors**: Check internet connectivity and API endpoints

### Debug Mode

Enable debug logging by setting:

```env
DEBUG=true
```

## License

MIT License - see LICENSE file for details.

## Support

For issues and questions:
1. Check the troubleshooting section
2. Review Zerodha API documentation
3. Open an issue on the repository

## Disclaimer

This software is for educational and development purposes. Use at your own risk. Always test thoroughly in a paper trading environment before using with real money.