dukaan-agent
Creates Razorpay orders and generates UPI deep links and QR codes for completing customer checkouts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dukaan-agentfind me a blue shirt under 800 rupees"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Dukaan Agent
An open agentic-commerce agent for D2C merchants with WhatsApp-first customers — built on MCP + Razorpay test-mode APIs.
What this is
Tier-2 D2C merchants take orders on WhatsApp by hand and send payment links one message at a time. Dukaan Agent exposes a merchant's catalog and checkout as MCP tools so any AI agent (Claude Desktop, etc.) can search products, honour a customer's spend mandate, and complete a UPI checkout autonomously — no human clicking a link, every money action bounded and logged.
Razorpay demoed exactly this loop for Zomato at FTX'26 on the Claude Agent SDK. This is the open version any WhatsApp-first D2C merchant can plug in — no enterprise contract — with a real delegation model, an append-only audit trail, and measured results across 50 sessions.
Mock-first: the whole project runs offline with zero credentials. Razorpay orders and Hinglish parsing fall back to deterministic mocks; adding real keys flips on the live path with no code changes.
Related MCP server: Cashfree CLI
Architecture
Customer (WhatsApp-style chat)
│ "ek blue shirt chahiye 800 se kam mein"
▼
Mock Chat UI (ui/index.html — demo surface)
│
▼
MCP Server (FastMCP) ── server/mcp_server.py
├── Tools
│ search_catalog · get_product_details · create_order · get_session_audit
├── Intent parsing server/intent_parser.py (Claude Haiku ▸ mock fallback)
├── Catalog server/catalog.py (SQLite + fuzzy search)
├── Delegation server/delegation.py (spend mandates)
├── Guardrails server/guardrails.py (velocity · allowlist · auth · fraction)
└── Audit trail server/audit.py (append-only JSONL)
│
▼
Razorpay Test-Mode API ── server/razorpay_client.py (live ▸ mock fallback)
│
▼
UPI deep link + QR ── server/upi.py → upi://pay?pa=…&am=…&cu=INRHow it works
Customer sends a message — English or Hinglish (
"ek blue shirt chahiye 800 se kam mein").Intent is parsed into
{category, keywords, max_price_inr, quantity, color}(Claude Haiku, or the built-in deterministic parser offline).search_catalogfuzzy-matches the SQLite catalog and returns in-stock products (out-of-stock items are flagged, never silently ordered).create_orderruns all guardrails — velocity → merchant allowlist → mandate authorization → single-order fraction — before any money moves.Razorpay order + UPI QR are generated; the agent hands back a
upi://paydeep link and a scannable QR — no human in the checkout loop.Every step is written to an append-only audit log, retrievable as a timestamped timeline via
get_session_audit.
Guardrails — the 3-layer delegation model
A spend cap is one if-statement; this is a delegation model. A customer pre-authorizes an agent with a mandate (total cap, per-category allowlist, expiry). Every order clears four checks — all run (no short-circuit) so the audit log records the full picture, and the first failure is reported as the blocking reason.
Layer | Check | Blocks when | Reason code |
Velocity | ≤ 3 orders / hour / customer | 4th order within the hour |
|
Anomaly | Merchant on pre-approved allowlist | Merchant not recognised |
|
Authorization | Within mandate: not expired, total cap, category allowlist | Cap / category / expiry breached |
|
Single-order | No order > 40% of remaining balance | One order too large |
|
Batch results
Seeded 50 synthetic shopping sessions (English + Hinglish) across four customer mandates, run fully offline. Reproduce with make batch.
18/50 sessions completed successfully · avg 3.0 tool calls to checkout
· guardrails fired correctly in 21/21 attempted violationsOutcome | Count |
Successful orders | 18 |
Blocked by guardrails | 21 (cap 6 · category 7 · velocity 5 · expired 3) |
Errors (out-of-stock / ambiguous) | 11 |
Accuracy vs expected outcome | 50 / 50 (100%) |
Full breakdown is written to batch/report.txt.
Setup
Everything runs without any API keys (mock mode). Keys are optional and only enable the live path.
# 1. Clone and enter
git clone <your-repo-url> dukaan-agent && cd dukaan-agent
# 2. Install dependencies
pip install -r requirements.txt # or: make setup
# 3. (Optional) add real keys
cp .env.example .env # fill in Razorpay test + Anthropic keys
# 4. Seed the catalog
python -m server.catalog # or: make seed
# 5. Run the 50-session batch + report
python batch/runner.py && python batch/report.py # or: make batch
# 6. Run the tests
pytest tests/ -v # or: make test
# 7. Open the demo chat UI
open ui/index.htmlConnect to Claude Desktop (requires Python 3.10+ for FastMCP)
python -m server.mcp_server # or: make serveAdd to claude_desktop_config.json:
{
"mcpServers": {
"dukaan-agent": {
"command": "python",
"args": ["-m", "server.mcp_server"],
"cwd": "/absolute/path/to/dukaan-agent",
"env": {
"RAZORPAY_KEY_ID": "your_key_here",
"RAZORPAY_KEY_SECRET": "your_secret_here",
"ANTHROPIC_API_KEY": "your_key_here"
}
}
}
}Note: The MCP server (
make serve) needs Python 3.10+ (FastMCP). The offline pipeline —make seed,make test,make batch— runs on Python 3.9+.
Project structure
dukaan-agent/
├── server/
│ ├── mcp_server.py # FastMCP server — 4 tools, 3 resources (entry point)
│ ├── catalog.py # SQLite catalog + token-level fuzzy search
│ ├── delegation.py # spend mandates (cap · category allowlist · expiry)
│ ├── guardrails.py # velocity · allowlist · authorization · single-order
│ ├── audit.py # append-only JSONL audit trail
│ ├── intent_parser.py # Hinglish/English parser (Claude Haiku ▸ mock)
│ ├── razorpay_client.py # Razorpay test-mode wrapper (live ▸ mock)
│ └── upi.py # UPI deep link + QR code
├── batch/
│ ├── intents.json # 50 synthetic shopping intents
│ ├── runner.py # batch runner (direct calls, offline)
│ └── report.py # stats + headline metric → report.txt
├── ui/index.html # mock WhatsApp-style demo chat
├── tests/ # catalog · delegation · guardrails (pytest)
├── data/ # SQLite DB, audit log, QR PNGs (auto-created)
├── requirements.txt
├── Makefile # setup · seed · serve · test · batch · clean
└── .env.exampleWhy this matters
India is building NPCI's Unified Agent Protocol (UAP) — national infrastructure for AI agents to make UPI payments under one-time consent with per-merchant spend limits, extending UPI Circle's delegation framework. Dukaan Agent is a working prototype of that direction: consent-bounded, category-limited, auditable agentic checkout over UPI — the shape of Indian agentic commerce before the rails ship.
License
MIT
This server cannot be installed
Maintenance
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
AI-agent product catalog: search, lookup & purchase routing over verified merchant data.
India payments for AI agents — UPI, cards, wallets via Razorpay Payment Links. Never holds funds.
AI shopping gateway for product search, inventory, carts, and merchant-hosted checkout.
Product search for AI agents: Amazon + Shopify, cart-to-checkout buy path. Pay-per-call, no API key.
Related MCP Servers
- AlicenseAqualityDmaintenanceLets AI assistants shop at UCP-enabled merchants through tools for discovery, checkout, discounts, fulfillment, and payment.59MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to test Cashfree payment integrations end-to-end by creating orders, simulating payments, listening to webhooks, and verifying signatures via MCP tools.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to browse product catalogs, search products with filters, and initiate checkouts, generating order summaries and checkout URLs.
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to browse a merchant catalog and place Razorpay test-mode orders with budget gating, persistent monthly limits, and full audit trails.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Blazehue/Dukaan'
If you have feedback or need assistance with the MCP directory API, please join our Discord server