Skip to main content
Glama

RZP Trident ⚡

The agentic commerce layer for Razorpay merchants — MCP server · bounded wallet · proactive upsell · human override · blockchain audit

RZP Trident makes any Razorpay merchant AI-transactable. Drop in a YAML config, run one command, and any MCP-compatible AI agent (Claude, GPT, Gemini) can search your catalog, create real Razorpay orders, and complete purchases — with enforced spend limits and a full audit trail.


What it does 🎯

🔌

MCP Server — 5 tools over stdio; any MCP-compatible agent connects, zero network config

🔐

Agent Wallet — per-tx limits, category rules, one-time spend tokens; lives in agent code, not accessible to the LLM

🤖

Buyer Agent — Mistral Nemo 12B on NVIDIA NIM; strict 5-step purchase workflow with Mistral quirk recovery

💡

Post-purchase Upsell — after a cold-medicine buy, agent surfaces Knorr Soup without being asked

🛒

Preemptive Cross-sell — before the agent runs, clicking A4 Paper surfaces a pantry suggestion; clicking Coffee surfaces cleaning supplies

🚨

OTP Override — over-limit transactions pop a human-in-the-loop modal; block → escalate → approve

📊

Blockchain Ledger PDF — one-click export of all wallet events, hash-chained per block with merchant labels

🎨

Live Demo UI — two merchants side-by-side (B2C + B2B), fully scrollable stores, clickable products, floating trident FAB


Related MCP server: E-Commerce MCP Server

Live Demo — Two Merchant Archetypes

QuickMart

SupplyHub

Type

B2C quick-commerce

B2B procurement

Theme

Green · consumer grid

Amber · procurement table

Wallet

₹1,000 · ₹800/tx · grocery + pharma

₹10,000 · ₹5,000/tx · office + pantry

Products

Crocin ₹30 · Vicks ₹108 · Knorr Soup ₹65 · Amul Milk ₹65 · Bournville ₹110 · Whey ₹999

A4 Paper · Nescafé · HP Ink · Dettol · Markers · Tape

Demo 1

Click Crocin → cold medicine ordered → Knorr Soup upsell appears

Click A4 Paper → preemptive pantry suggestion (Nescafé)

Demo 2

Click Whey ₹999 → exceeds ₹800 limit → OTP modal → approve

Click Nescafé → preemptive cleaning suggestion (Dettol)


Architecture 🏗️

Browser (localhost:8000 → Live Demo)
├── QuickMart card (B2C, green)         SupplyHub card (B2B, amber)
│   Scrollable product grid              Scrollable procurement table
│   Click product → pre-fill agent       Click row → pre-fill + cross-sell
│   Trident FAB → agent panel (50%)      Trident FAB → agent panel (50%)
│
│         POST /buy          GET /events/{merchant} (SSE)
│
dashboard/app.py  (FastAPI + per-merchant wallet instances)
│
buyer_agent/agent.py  (Mistral Nemo 12B via NVIDIA NIM)
│   _handle_tool interceptor
│   ├── wallet.authorize(amount, category)  ← hard gate, not LLM-accessible
│   ├── wallet.debit(token)
│   └── MCP over stdio → mcp_server/server.py
│
mcp_server/server.py — 5 tools
│   ├── search_catalog
│   ├── get_product_details
│   ├── create_razorpay_order          ← REAL Razorpay Orders API
│   ├── process_payment                ← test-mode simulation
│   └── get_order_status
│
agent_wallet/wallet.py
└── authorize → one-time token → debit → SQLite audit log

3 key design decisions:

🔌 MCP over stdio — server is a process not a service; zero network config; works with Claude Desktop, Continue, LangChain out of the box

🔒 Wallet outside MCP — lives in agent code, not in the LLM's tool list; the model cannot read its state or call its methods; it is a hard gate

Real Razorpay orders — every order_id is verifiable in the Razorpay test dashboard; payment capture is test-mode simulated (Razorpay has no server-side capture without browser checkout)


Project layout 📁

rzp/
├── main.py                        # one command to run everything
├── requirements.txt
├── .env.example                   # RAZORPAY_KEY_ID · RAZORPAY_KEY_SECRET · NVIDIA_API_KEY
├── merchant.example.yaml
│
├── merchants/                     # wallet config per merchant
│   ├── quickmart.yaml             # B2C · ₹800/tx · grocery + pharma
│   └── supplyhub.yaml             # B2B · ₹5,000/tx · office + pantry + electronics
│
├── data/merchants/                # product catalogs (JSON → SQLite via ingestion)
│   ├── quickmart_catalog.json     # 8 products incl. Knorr Soup + Whey Protein
│   └── supplyhub_catalog.json     # 6 B2B SKUs with MOQ
│
├── ingestion/
│   └── normalizer.py              # LLM normalizer — any catalog format → SQLite
│
├── mcp_server/                    # MCP tools + Razorpay client
├── agent_wallet/                  # spend wallet with authorize/debit/token system
├── buyer_agent/                   # Mistral agent loop with Mistral quirk recovery
│
└── dashboard/
    ├── app.py                     # FastAPI · SSE · per-merchant wallet init · reset API
    └── static/
        └── index.html             # full-stack demo UI — single self-contained file

Setup ⚡

# 1. Install
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# 2. Keys
cp .env.example .env
# → fill RAZORPAY_KEY_ID, RAZORPAY_KEY_SECRET, NVIDIA_API_KEY

# 3. Run
python main.py
# → open http://localhost:8000 → click Live Demo

MCP tools 🔧

Tool

Does what

Wallet-gated

search_catalog

Full-text search with optional max_price

get_product_details

Price, category, stock for a product_id

create_razorpay_order

Creates a real Razorpay order

✅ pre-auth

process_payment

Debits wallet + simulates payment capture

✅ token

get_order_status

Order status lookup


Wallet mechanics 💳

authorize(amount, category)
  ├── amount > per_tx_limit   → ❌ BLOCKED  (frontend shows OTP modal for QuickMart)
  ├── category not allowed    → ❌ BLOCKED  (agent explains gracefully)
  ├── balance < amount        → ❌ BLOCKED  (agent explains gracefully)
  └── all clear               → ✅ one-time token issued

debit(token)
  └── valid + unused token    → ✅ balance decremented + event written to audit log

Demo UI — Interaction Model 🖱️

  • Click any product → agent input pre-filled, panel auto-opens, preemptive suggestion shown in feed

  • Trident FAB (bottom-right of each card) → toggles agent panel between 0% and 50% of card height

  • Run → → input clears immediately, SSE events stream into the feed live

  • Upsell chips → appear post-purchase (QuickMart cold flow) or pre-emptively on product click (SupplyHub B2B flow)

  • Ledger PDF (demo bar) → downloads blockchain-style PDF of all wallet events, hash-chained


Reset between demos

curl -X POST http://localhost:8000/reset/quickmart
curl -X POST http://localhost:8000/reset/supplyhub

Then reload the page.


Stack 🛠️

Layer

Tech

LLM

Mistral Nemo 12B via NVIDIA NIM (OpenAI-compatible API)

Agent protocol

MCP over stdio (Python mcp SDK)

Payments

Razorpay Orders API — real orders, test-mode payment capture

Backend

FastAPI + uvicorn + SSE

Storage

SQLite (catalog + agent events + wallet events)

PDF export

jsPDF — blockchain-style ledger with prev/hash per block

Frontend

Vanilla JS + HTML/CSS — single index.html, no build step

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hrsh-kr/rzp-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server