Skip to main content
Glama
kite-connect-mcp

kite-connect-mcp

Create an alert (dry run by default)

create_alert
Destructive

Create price alerts to monitor instrument prices and trigger notifications or automatic basket orders when conditions are met.

Instructions

Create a price alert. DRY RUN BY DEFAULT: with dry_run=true (the default) nothing is sent; the answer shows the exact request, every safety check and, when live trading is enabled and the checks pass, a confirmation_token. To create it, repeat the identical call with dry_run=false and that token. Kite allows at most 500 active alerts per user.

The alert watches lhs_attribute (LastTradedPrice) of lhs_exchange:lhs_tradingsymbol and triggers when "value operator right-hand side" becomes true (operators: <=, >=, <, >, ==). The right-hand side is a constant (rhs_type=constant with rhs_constant, in INR for prices) or another instrument's attribute (rhs_type=instrument with rhs_exchange and rhs_tradingsymbol). Indices live on the exchange INDICES (INDICES:NIFTY 50).

type=simple only notifies. type=ato (alert triggers order) also places the basket orders by itself when the condition becomes true, with no confirmation at that moment: the confirmation you give now covers them. Each basket order is checked like place_order (per-order cap, allow-lists, tick and lot size) and counts toward the daily order count and value caps; MARKET orders are valued at the live price plus a buffer (paid market data needed), MCX/CDS/BCD orders cannot be valued and so cannot be sent live. A simple alert has no orders and no caps. Returns the created alert (with its uuid) when sent.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "name": "<name>",
      "type": "<type>",
      "lhs_exchange": "<lhs_exchange>",
      "lhs_tradingsymbol": "<lhs_tradingsymbol>",
      "operator": "<operator>",
      "rhs_type": "<rhs_type>"
    },
    "name": "create_alert"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameYesa label for the alert
typeYessimple: only notify. ato: also place the basket `orders` by itself when the condition is true
ordersNothe basket of orders: required for type=ato (up to 20), not allowed for simple
dry_runNotrue (default): validate and preview only, nothing is sent. false: send it live, which needs live trading enabled on the server and the confirmation_token from a dry run
operatorYescomparison of the monitored value with the right-hand side
rhs_typeYesconstant: compare with rhs_constant. instrument: compare with another instrument (rhs_*)
lhs_exchangeYesexchange of the monitored instrument: NSE, BSE, NFO, CDS, BCD, MCX, or INDICES for indices
rhs_constantNothe number to compare with (INR for prices); only for rhs_type=constant
rhs_exchangeNoonly for rhs_type=instrument
lhs_attributeNowhat to monitor; LastTradedPrice is the only attribute Kite documentsLastTradedPrice
rhs_attributeNoonly for rhs_type=instrument; defaults to LastTradedPrice
lhs_tradingsymbolYestradingsymbol of the monitored instrument: INFY, 'NIFTY 50'
rhs_tradingsymbolNoonly for rhs_type=instrument
confirmation_tokenNothe confirmation_token returned by a dry run of this exact call (single use)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/open-world behavior, but the description adds far more: the 500-active-alert cap, that an ATO alert fires its basket with no confirmation at trigger time, that each basket order is re-checked like place_order and counts against daily order/value caps, that MARKET orders use live price plus a buffer requiring paid market data, and that MCX/CDS/BCD orders cannot be valued so cannot go live.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well ordered: the dry-run workflow is front-loaded before the condition semantics and the ATO risk paragraph. Length is justified by a 14-parameter, multi-mode, two-phase tool, though the uppercase inline emphasis and long run-on second sentence slightly reduce scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world tool with no output schema, the description covers the return value ('the created alert (with its uuid) when sent'), what the dry-run response contains, the live-trading prerequisite, and the risk profile of ATO baskets. Nothing an agent needs before calling is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: how lhs_attribute/operator/right-hand side compose into a trigger condition, that the RHS is either a constant (INR for prices) or another instrument's attribute, and that indices live on INDICES (INDICES:NIFTY 50). It does not walk through the individual AlertOrder order fields, which the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a price alert') and immediately flags the non-obvious default ('DRY RUN BY DEFAULT'), which distinguishes it from any read sibling like get_alerts or modify_alert.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit two-step instructions: run with dry_run=true, inspect checks and confirmation_token, then repeat the identical call with dry_run=false and the token. Also routes between type=simple and type=ato and notes a simple alert has no orders and no caps. It does not mention sibling tools such as modify_alert or delete_alerts, so the when-to-use-this-vs-alternative story is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.