Ninja MCP
Allows inspection of Apple Pay as a payment method for the Ninja/AnaNinja mobile API, including availability and details for pending checkouts.
Allows inspection of Google Pay as a payment method for the Ninja/AnaNinja mobile API, including availability and details for pending checkouts.
Allows inspection of Samsung Pay as a payment method for the Ninja/AnaNinja mobile API, including availability and details for pending 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., "@Ninja MCPsearch for organic milk in Riyadh"
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.
Unofficial Ninja MCP
MCP server for AI agents working with the Ninja/AnaNinja API.
This project exposes the Ninja/AnaNinja API as a small operational MCP:
auth with reusable local
deviceId/authKeysaved addresses
vertical/store discovery for retail, pharmacy, beauty, and restaurants
retail/pharmacy/beauty product search, detail lookup, and product image URLs
restaurant branch search, menu lookup, variant IDs, and topping metadata
draft order validation for product verticals and restaurants
guarded checkout creation
payment-method inspection plus saved-card, wallet, and STC Pay helpers
Live checkout/payment tools use explicit execution flags and keep state in local 0600 files.
Install
npm install
npm run buildRun locally:
npm startMCP client config example:
{
"mcpServers": {
"ninja": {
"command": "node",
"args": ["/absolute/path/to/ninja-mcp/dist/index.js"],
"env": {
"NINJA_MCP_STATE_FILE": "/Users/you/.ninja-mcp/state.json"
}
}
}
}Related MCP server: intelligence-api
First Login
Call
ninja_auth_start_loginwith the account phone number. This registers a device session and sends an OTP.Call
ninja_auth_verify_otpwith the OTP.Future calls reuse the saved auth key. This MCP does not use an OAuth refresh-token flow.
The default state path is:
~/.ninja-mcp/state.jsonOverride with:
NINJA_MCP_STATE_FILE=/secure/path/state.jsonState files contain auth material.
Current Coverage
Implemented:
auth/device session reuse
saved address listing
vertical discovery for
RETAIL,PHARMACY,BEAUTY, andRESTAURANTproduct search and detail lookup for retail/pharmacy/beauty through the Fahras products endpoint
product image URL extraction from product and restaurant menu media
restaurant branch search and restaurant menu lookup through GraphQL
draft order validation for retail, pharmacy OTC, beauty, and restaurant carts
checkout creation for pending unpaid orders/payment requests
payment-method inspection for a pending checkout
account-level saved payment option inspection
payment helpers for saved card and wallet
STC Pay initiate + OTP helper flow
MCP request-shape support:
saved-card payment request shape:
savedCard.cardIdwith optionalsavedCard.cvvwallet payment request shape:
includeWallet: truerestaurant checkout request shape:
OrderRequest.restaurantwithbranchIdandmenuId, plus restaurant variant IDs inlineItems[].itemId
Not implemented by this MCP:
Tabby/Tamara and other redirect/token-based methods
Apple Pay, Samsung Pay, Google Pay, QPay, KNET, Benefit, Daftar
prescription/consultation pharmacy handling beyond
request.pharmacypassthrough
Agent Workflow
Read ninja://agent-guide or call ninja_agent_guide first.
Typical product-vertical call sequence:
ninja_saved_addressesninja_search_productswithvertical: "RETAIL","PHARMACY", or"BEAUTY"ninja_create_draft_orderReview the exact cart, total, delivery location, and payment method.
ninja_create_checkoutwithconfirmCreateOrder: trueninja_pending_payment_methodsChoose from the available payment methods.
Use a method-specific helper if this MCP implements that method.
Typical restaurant call sequence:
ninja_saved_addressesninja_search_restaurantsninja_restaurant_menuninja_create_draft_orderwithvertical: "RESTAURANT",restaurant.branchId,restaurant.menuId, and restaurant variant IDs inlineItems[].itemIdReview the draft, then continue through checkout/payment if the cart is correct.
Implemented method-specific helpers:
saved card: call
ninja_pending_payment_methods, choose acardIndex, then callninja_pay_saved_cardwallet: call
ninja_pay_walletif wallet is available for the pending checkoutSTC Pay: use
ninja_initiate_stc_pay, collect the fresh OTP, then callninja_submit_stc_otp
Card setup: card registration is outside this MCP. Add a saved card to the account, then refresh ninja_saved_payment_options or ninja_pending_payment_methods. Once the card appears as saved, use ninja_pay_saved_card.
API Notes
The bearer token is a short-lived HS256 JWT signed locally with
authKey.Saved addresses are backend GraphQL data, not only local client memory.
Product search uses vertical discovery to find the store/search context, then the Fahras products endpoint.
Product image URLs come from
medias; search/menu tools return them asimageUrls.Retail/pharmacy/beauty product search returns both
idandproductId. UseproductId, exposed asorderItemId, forlineItems[].itemId. Theidfield is store-scoped and should not be used as the cart item id.Restaurant carts use menu variant IDs. Use
variant.orderItemId/variantIdfromninja_restaurant_menuforlineItems[].itemId.Restaurant toppings use
toppingIdandtoppingOptionIdfrom the menu response.createDraftOrder.paymentMethodsis a direct list, not a{ data: [...] }wrapper.Always draft before checkout/payment.
createOrdercan recover the same pending payment request for the same cart.Payment methods are returned per payment request; availability can vary by account, cart, location, and time.
ninja_pending_payment_methodslabels each method withapiCapabilityandmcpCapability.Saved cards expose
requiresCvv; saved-card payment acceptscardIndexorcardId, plus optionalcvv.ninja_saved_payment_optionslists account-level saved cards and wallets; for an actual checkout, preferninja_pending_payment_methods.STC Pay initiate expects
mobileNumberin9665XXXXXXXXform; the MCP normalizes common Saudi formats.Payment calls can return
PENDING; pollpaymentStatusand then inspectshowOrder.Totals are read from known payment-summary keys. If the upstream shape changes, the MCP reports candidate keys instead of guessing from an arbitrary amount.
State And Side Effects
Tool outputs redact full auth/payment IDs.
Auth state and pending payment context are written with mode
0600.Live mutation tools use execution flags, such as
confirmCreateOrder,confirmSendOtp,confirmSubmitOtp, andconfirmSubmitPayment.Failed payment attempts keep pending context so callers can try another available method.
Successful payment clears pending checkout context.
Environment
NINJA_MCP_STATE_FILE=/secure/path/state.json
NINJA_FIREBASE_CHECK_TOKEN=optional_firebase_check_token
NINJA_CLIENT_VERSION=optional_api_client_version_override
NINJA_CLIENT_USER_AGENT=optional_api_user_agent_overrideThis 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.
Latest Blog Posts
- 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/Khaled-Harthi/Ninja-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server