blinkit-mcp
Click on "Deploy 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., "@blinkit-mcp find me amul butter"
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.
blinkit-mcp
An API-only MCP server for Blinkit
(Indian quick-commerce). Every runtime call is a plain HTTPS request to blinkit.com — no browser
automation in the happy path. A browser is used only once, during research, to discover endpoints;
see RESEARCH.md.
How it works (the important bits)
Cloudflare TLS fingerprinting blocks ordinary HTTP clients (curl, Node
fetch→ 403). We useimpitto impersonate Chrome's TLS handshake, so requests pass with no browser and no cookie/challenge. This is what makes API-only possible.Bootstrap:
GET /v2/accounts/auth_key/with a fixedreq_keyconstant → deviceauth_key(no login). Sent on every call.Login is headless OTP:
send_otp(phone)→verify_otp(phone, code)returns anaccess_tokenwe persist. No browser ever involved.Server-driven UI responses are parsed defensively into clean product/order objects.
Related MCP server: shop-mcp
Setup
pnpm install
pnpm buildAdd to your MCP client (e.g. Claude Code mcp config):
{
"mcpServers": {
"blinkit": { "command": "node", "args": ["/path/to/blinkit-mcp/dist/index.js"] }
}
}State is stored in ~/.blinkit-mcp/:
session.json— device id, auth_key, access_token (secret), location, store. chmod 600.staples.json— your reorder catalog + scorer weights.cart.json— the current working cart.
Tools
Auth/login — blinkit_login_status, blinkit_send_otp, blinkit_verify_otp, blinkit_logout
Location — blinkit_set_location, blinkit_check_serviceability
Discovery — blinkit_search, blinkit_autosuggest, blinkit_pick_best, blinkit_recommendations, blinkit_home_feed
Cart — blinkit_add_to_cart, blinkit_remove_from_cart, blinkit_view_cart, blinkit_clear_cart
Reorder — blinkit_quick_reorder, blinkit_list_staples, blinkit_set_staple
Checkout/pay — blinkit_get_addresses, blinkit_checkout, blinkit_prepare_order, blinkit_pay_upi, blinkit_payment_status
Orders — blinkit_order_count, blinkit_order_history
Typical flow (fully headless; only PhonePe approval is manual)
blinkit_set_location { lat: 28.5653836, lon: 77.38265 } # once, persists
blinkit_send_otp { phone: "9XXXXXXXXX" }
blinkit_verify_otp { phone: "9XXXXXXXXX", code: "1234" } # stores access_token + phone
blinkit_pick_best { query: "milk", brands:["Amul"], attrs:["full cream"] } # → product
blinkit_get_addresses # → address_id
blinkit_checkout { items: [ <chosen> ], address_id } # → server cart_id (creates+binds+validates)
blinkit_pay_upi { cart_id, method:"collect", vpa:"name@ybl", wait:true }
# → pushes a UPI collect to PhonePe; streams status via notifications; you approve on your phonePayment status & notifications
blinkit_pay_upiinitiates UPI payment (method:"qr"returns aupi://payintent link;method:"collect"+vpapushes a collect request to your UPI app). Withwait:trueit pollsverifyPaymentStatusuntil terminal and returnsfinal_status.blinkit_payment_statuschecks the last (or a given) in-flight payment on demand — returnspending/success/failed.The server declares the MCP
loggingcapability and emitsnotifications/messageduring the wait ("waiting for approval", "✅ approved", "❌ failed") — surfaced live by Claude Code.
Payment is delegated to Zomato zpaykit; the human step is approving the UPI request in PhonePe. See
RESEARCH.md §8–9for the full captured flow.
Notes / limits
Unofficial, reverse-engineered API — no stability guarantees; header/version constants may need bumping. Respect Blinkit's ToS and rate limits; intended for personal automation.
auth_key/req_keyconstants are overridable viaBLINKIT_REQ_KEYif Blinkit rotates them.Not affiliated with or endorsed by Blinkit/Zomato. Use at your own risk.
License
MIT — see LICENSE.
Available Tools
25 toolsblinkit_add_to_cartA
Add line items to the working cart and reprice. Pass the product objects (or their cart_item) returned by blinkit_search/blinkit_pick_best.
Inputs: items (required).
blinkit_autosuggestC
Typeahead suggestions for a partial query.
Inputs: query (required).
blinkit_checkoutA
Headless checkout prep: create a real server cart from items, bind the delivery address, and validate. Returns the server cart_id to pass to blinkit_prepare_order / blinkit_pay_upi.
Inputs: items (required), address_id (required).
blinkit_check_serviceabilityA
Check if Blinkit delivers to a lat/lon (does not change the saved location).
Inputs: lat (required), lon (required).
blinkit_clear_cartB
Empty the working cart.
Inputs: no named parameters.
blinkit_get_addressesA
List saved delivery addresses (id, label, location). Requires login.
Inputs: no named parameters.
blinkit_home_feedB
Products surfaced on the home feed for the saved location.
Inputs: no named parameters.
blinkit_list_staplesB
List the saved staple catalog and pick preferences.
Inputs: no named parameters.
blinkit_login_statusA
Show whether a user is logged in and the saved location/store.
Inputs: no named parameters.
blinkit_logoutA
Clear the stored access_token.
Inputs: no named parameters.
blinkit_order_countB
Lifetime order counts (delivered/live/cancelled). Requires login.
Inputs: no named parameters.
blinkit_order_historyA
Recent orders with totals, status, item names, and reorder product ids. Requires login.
Inputs: no named parameters.
blinkit_payment_statusA
Check the status of the last (or a specific) in-flight UPI payment without re-initiating it. Returns pending / success / failed.
Inputs: cart_id.
blinkit_pay_upiA
Initiate UPI payment on a prepared order via Zomato zpaykit. method 'qr' returns a upi://pay intent link to open on the phone; method 'collect' attempts to push a collect request to the given VPA (PhonePe). Then poll status.
Inputs: cart_id (required), vpa, wait, method.
blinkit_pick_bestA
Search and auto-pick the best product using the multi-factor scorer (brand + attributes + availability + price), with cheaper-equivalent swap. Returns the chosen product, alternatives, and the reason.
Inputs: query (required), attrs, brands, max_price.
blinkit_prepare_orderA
Mint a payment session for a server-synced cart (createOrder + zomato_payment_hash). Returns PAS token, orderId, payable amount. Fails if the order already has a pending payment.
Inputs: cart_id (required).
blinkit_quick_reorderA
Rebuild a basket from saved staples. With no keys, adds all auto-eligible staples silently; otherwise resolves the given staple keys. Returns the repriced cart and what was chosen for each item.
Inputs: keys.
blinkit_recommendationsB
Products frequently bought with a given product id ('people also bought').
Inputs: product_id (required).
blinkit_remove_from_cartB
Remove a product from the working cart by id and reprice.
Inputs: product_id (required).
blinkit_searchC
Search products. Returns clean product objects (id, name, brand, unit, price, mrp, inventory, eta) including the cart_item needed to add to cart.
Inputs: query (required), page.
blinkit_send_otpA
Send a login OTP to a phone number (headless, no browser). Step 1 of login.
Inputs: phone (required).
blinkit_set_locationB
Resolve a lat/lon, confirm serviceability, pick the express dark store, and save it as the default delivery location.
Inputs: lat (required), lon (required).
blinkit_set_stapleC
Add or update a staple in the reorder catalog.
Inputs: key (required), query (required), auto, unit, +4 more.
blinkit_verify_otpA
Verify the OTP and persist the access_token. Step 2 of login. NOTE: a wrong code returns ok:false even though Blinkit reports success.
Inputs: code (required), phone (required).
blinkit_view_cartA
Show the working cart, repriced (items, payable amount, delivery, MROV).
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 25 tools
Each tool targets a distinct action or resource (e.g., add_to_cart vs. remove_from_cart, search vs. pick_best). There is minimal overlap, and descriptions clearly differentiate similar tools.
All tools follow a consistent 'blinkit_verb_noun' pattern in snake_case, making the tool surface predictable and easy to navigate.
With 25 tools, the set is slightly larger than the ideal range but justifiable for a full-featured e-commerce MCP server covering login, location, cart, search, ordering, and payment.
The surface covers most lifecycle stages (login, search, cart, checkout, payment, staples), but lacks explicit order cancellation or address update during checkout, which are minor gaps.
Maintenance
Related MCP Connectors
Open-source MCP server for Zerodha Kite Connect. Portfolio, market data, backtesting, alerts.
Real-time data APIs for 50+ commerce, grocery, social and maps platforms over one OAuth MCP server
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
An MCP server that exposes functionalities to use Zomato's services.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables Claude to automate grocery shopping on Blinkit, including product search, cart management, location setup, and payment via UPI.1554MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for automating personal Amazon.in and Flipkart accounts via browser sessions, enabling product search, cart management, and guarded checkout.-
- AlicenseNot gradedqualityDmaintenanceMCP server that compares grocery basket prices across Blinkit, Zepto, BigBasket, and Amazon Now in real time, identifying the cheapest platform for the entire basket.28 npmMIT
- AlicenseNot gradedqualityCmaintenanceSelf-hosted MCP server that provides persistent browser sessions, product search, cart preparation, structured order history, and invoice retrieval for Hyperpure accounts, with manual payment only.MIT