A MCP server for Walmart Marketplace and Affiliate APIs, enabling sellers to manage items, inventory, prices, and orders, and consumers to search, lookup products, reviews, and store locations.
SaferSkills independently audited walmart-mcp (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A TypeScript Walmart API client, delivered as an MCP server (stdio) with a reusable SDK underneath. It wraps two Walmart APIs behind one client:
and orders. OAuth 2.0.
lookup, taxonomy, trending, reviews, and store locator. Read-only, RSA-signature auth.
Configure either or both surfaces. Tools register only for the surfaces you've configured.
client/ + api/ are a standalone, fully unit-testedWalmart SDK with zero MCP knowledge — import { WalmartSdk } and use it in any Node project. The MCP server is a thin wrapper.
@modelcontextprotocol/sdk + zod). RSAsigning and correlation UUIDs use Node's built-in crypto; .env is loaded via --env-file, no dotenv/node-rsa/uuid.
401; the Affiliate signature is regenerated (with a fresh timestamp) on every request.
structuredContentinstead of raw, deeply-nested Walmart payloads, so agents don't shell out to parse JSON.
| You are… | Use | Credentials from | Auth |
|---|---|---|---|
| A Walmart seller managing your listings/orders | Marketplace | developer.walmart.com → API Key Management | OAuth 2.0 (Client ID + Secret) |
| An affiliate / app reading the public catalog | Affiliate | walmart.io (program approval required) | RSA signature (Consumer ID + private key) |
npm install
npm run buildcp .env.example .env # then fill in whichever surface(s) you use# Marketplace (seller)
WALMART_CLIENT_ID=...
WALMART_CLIENT_SECRET=...
# Affiliate / Catalog (consumer)
WALMART_CONSUMER_ID=...
WALMART_PRIVATE_KEY=... # single-line Base64 PKCS#8 from the portal (or a full PEM)
WALMART_KEY_VERSION=1The server reads credentials from its environment; it does not auto-load `.env`. Your MCP client supplies them via the configenvblock (step 4). For the CLI and standalone runs, Node's--env-file=.envloads them (thenpm run check/npm startscripts do this).
Notes:
WALMART_PRIVATE_KEY accepts the single-line Base64 key theWalmart.io portal issues, or a full -----BEGIN PRIVATE KEY----- PEM. It's never logged. The matching public key is uploaded to the portal; WALMART_KEY_VERSION is shown next to it.
($XDG_DATA_HOME/walmart-mcp on Unix, %APPDATA%\walmart-mcp on Windows; files chmod 0600), then auto-refreshed on use.
npm run checkMints a Marketplace token (proves CLIENT_ID/SECRET) and signs a live Affiliate request (proves CONSUMER_ID + private key), skipping whichever surface you didn't configure. Expected output:
Marketplace validating OAuth client credentials… OK
Affiliate signing a taxonomy request… OK
✅ Configured surfaces validated. The MCP server reuses these same credentials.{
"mcpServers": {
"walmart": {
"command": "node",
"args": ["/absolute/path/to/walmart-mcp/dist/mcp/server.js"],
"env": {
"WALMART_CLIENT_ID": "...",
"WALMART_CLIENT_SECRET": "...",
"WALMART_CONSUMER_ID": "...",
"WALMART_PRIVATE_KEY": "...",
"WALMART_KEY_VERSION": "1"
}
}
}
}Your MCP client launches node dist/mcp/server.js, injects the env vars, and the server registers the tools for each configured surface. (To run standalone for testing: npm start.)
| Tool | Purpose |
|---|---|
affiliate_search | Full-text catalog search (compact results) |
affiliate_product_lookup | Look up products by item id(s), UPC, or GTIN |
affiliate_taxonomy | The catalog category tree |
affiliate_trending | Currently trending products |
affiliate_reviews | Customer reviews for a product |
affiliate_stores | Walmart stores near a lat/long, city, or ZIP |
| Tool | Auth | Purpose |
|---|---|---|
mp_get_items | OAuth | List your catalog (compact, cursor-paginated) |
mp_get_item | OAuth | One catalog item by SKU |
mp_get_inventory | OAuth | A SKU's on-hand inventory |
mp_update_inventory | OAuth | Write: set a SKU's available quantity |
mp_update_price | OAuth | Write: update a SKU's price |
mp_get_orders | OAuth | List orders by date/status (compact, cursor-paginated) |
mp_get_order | OAuth | One order by purchaseOrderId |
mp_acknowledge_order | OAuth | Write: acknowledge an order (required before shipping) |
Search/list tools return compact, structured results (structuredContent validated by an output schema) — just the fields the workflow needs — rather than the raw, deeply-nested Walmart payload.
| Symptom | Cause / fix |
|---|---|
| Server logs "No Walmart credentials found" | Neither surface configured. Fill the config env block (MCP) or .env (standalone). |
| A tool returns "… credentials are not configured" | That surface's env vars are missing; the other surface still works. |
| `401` / token errors on Marketplace | Client ID/Secret wrong or revoked. Re-check with npm run check. The client already refreshes a normal expiry automatically. |
| `401` / signature errors on Affiliate | Wrong Consumer ID, key version, or private key; or large clock skew (timestamp TTL ≈ 180s). Verify with npm run check. |
| "Could not parse the affiliate private key" | WALMART_PRIVATE_KEY isn't the Base64 PKCS#8 portal key or a valid PEM. |
| MCP server won't start / behaves like old code | dist/ is missing or stale — the MCP launch runs the built file and does not auto-build. Run npm run build. |
--env-file=.env errors with ENOENT | .env doesn't exist. cp .env.example .env and fill it in. |
npm test # vitest (fetch mocked, throwaway RSA keypair) — no credentials needed
npm run typecheck
npm run build # also runs on install (prepare) and before start/checksrc/
client/ WalmartClient, marketplaceAuth (OAuth), affiliateAuth + signature (RSA),
tokenStore, correlation, errors
api/ marketplace/{items,inventory,prices,orders}, affiliate/catalog (zero MCP knowledge)
types/ request/response shapes
mcp/ server.ts (stdio) + config.ts + tools.ts + format.ts
sdk.ts WalmartSdk facadeThe client/ + api/ layers are a standalone SDK, fully unit-tested with fetch mocked; mcp/ is a thin wrapper. Import the SDK directly via the package root (WalmartSdk).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.