Kite Connect MCP Server
# Kite Connect MCP POC
A proof-of-concept TypeScript MCP server that demonstrates how MCP tools can call Kite Connect APIs over stdio. This project is intentionally incomplete and focuses on proving the primary concept rather than providing a production-ready trading integration.
## Features
- `greet`: returns a greeting for a provided name.
- `add_two_numbers`: adds two numbers.
- `factorial`: calculates the factorial of a non-negative integer.
- `buy_stock`: places a Kite Connect market buy order on NSE.
- `sell_stock`: places a Kite Connect market sell order on NSE.
## Prerequisites
- Node.js
- pnpm
- A Zerodha Kite Connect API key
- A valid Kite Connect access token
## Setup
Install dependencies:
```bash
pnpm install
```
Create a `.env` file in the project root:
```bash
KITE_API_KEY=your_api_key
KITE_ACCESS_TOKEN=your_access_token
```
## Run
Start the MCP server:
```bash
pnpm dev
```
The server uses stdio transport, so it is intended to be launched by an MCP-compatible client.
## MCP Tools
### `buy_stock`
Places a regular CNC market buy order on NSE.
Input:
```json
{
"stock": "INFY",
"qty": 1
}
```
### `sell_stock`
Places a regular CNC market sell order on NSE.
Input:
```json
{
"stock": "INFY",
"qty": 1
}
```
### `greet`
Input:
```json
{
"name": "Bhimanshu"
}
```
### `add_two_numbers`
Input:
```json
{
"a": 2,
"b": 3
}
```
### `factorial`
Input:
```json
{
"a": 5
}
```
## Safety Note
The `buy_stock` and `sell_stock` tools call Kite Connect's `placeOrder` API and can place real market orders. Use valid credentials carefully and test with small quantities only when you are ready to trade.
## Project Structure
```text
.
├── config.ts # Loads required environment variables
├── index.ts # Defines and starts the MCP server
├── trade.ts # Wraps Kite Connect order placement
├── package.json # Scripts and dependencies
└── tsconfig.json # TypeScript configuration
```
TDQS
Scored across 5 tools
The stock tools (buy_stock, sell_stock) are distinct, and the math/greeting tools are also individually clear. However, the mix of unrelated domains within a single server creates confusion about tool selection and purpose.
buy_stock and sell_stock follow a consistent verb_noun pattern, but greet, add_two_numbers, and factorial use different styles (bare verb, verb_object, and noun). This inconsistency makes the API feel chaotic.
Five tools is a reasonable number, but for a stock trading server only two are relevant. The other three are unrelated, making the count misleading and the server's scope unfocused.
For a trading server, critical operations like get_quote, list_positions, or place_order variants are missing. Instead, the set includes non-trading utilities, creating severe gaps that prevent any real trading workflow.