| name | newegg-shell-shocker |
| description | Query Newegg Shell Shocker flash deal products. Use this skill when users mention Shell Shocker, Shell Shocker deals, Newegg flash deals, today's flash deals, Newegg promotions, flash deal list, limited-time specials. |
| keywords | shell shocker, newegg, flash deal, 闪促, 限时特价. |
| allowed-tools | bash, read_file |
Newegg Shell Shocker
Query Newegg Shell Shocker daily and next-day flash deal products.
Agent execution rules (read first)
- Do not call
ask_clarification for this task. The data source (one public JSON-RPC call, no auth) and the output format (Markdown tables below) are fully specified — this is not missing_info, ambiguous_requirement, or approach_choice.
- Immediately after loading this skill, use the
bash tool to run curl. Do not ask the user how to fetch data or which output format they prefer.
- Required header on every request: all calls to
apis.newegg.com/ex-mcp/... must carry x-skill: newegg-shell-shocker in addition to Content-Type. It identifies the calling skill to the endpoint — include it even when you assemble a request by hand rather than copying the example below.
- Run exactly:
curl -sS -X POST "https://apis.newegg.com/ex-mcp/endpoint/website-www-tool" \
-H "Content-Type: application/json" \
-H "x-skill: newegg-shell-shocker" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"getapi_home_v2_shellshocker_page","arguments":{"CountryCode":"USA","CompanyCode":1003}}}'
- Unwrap the response before reading it (see Response Structure), then build the tables in Response Format. If curl fails (non-zero exit), the envelope carries
error, result.isError is true, or the body is not valid JSON, report the error in your reply — still without asking the user to choose a fetch method.
Trigger Scenarios
- User asks "What's on Shell Shocker"
- User asks "Today's flash deals" / "Newegg flash deals"
- User searches for Shell Shocker prices of specific products
- User requests to view Newegg limited-time special list
API
- Method: POST (JSON-RPC
tools/call)
- Endpoint:
https://apis.newegg.com/ex-mcp/endpoint/website-www-tool
- Tool name:
getapi_home_v2_shellshocker_page
- Arguments:
CountryCode (USA) and CompanyCode (1003) are both required; priceTypes is optional
- Auth: none — no API key, no MCP client registration, no handshake
Response Structure
Unwrap first. The payload sits at result.content[0].text as a JSON string, and decoding it
can yield another JSON string before you reach the object. Keep decoding until you have a dict with
TodayItems — do not assume a single json.loads is enough. result.structuredContent carries the
same object when present and is the shortcut.
After unwrapping, the root object contains:
TodayItems (array) - Today's flash deal items
TomorrowItems (array) - Tomorrow's flash deal items
Each item element contains an ItemBase object, from which to extract:
| Field | Path | Description |
|---|
| Item Number | ItemBase.Item | e.g., 32-508-055 |
| Item Title | ItemBase.Description.Title | Full item name |
| Original Price | ItemBase.OriginalUnitPrice | Original price (USD) |
| Flash Deal Price | ItemBase.FinalPrice | Final price (USD) |
| Image Filename | ItemBase.Image.Normal.ImageName | e.g., 32-508-055-V01.jpg |
| Promotion Info | ItemBase.PromotionInfo.PromotionText | e.g., free gifts, additional discounts, etc. |
Image URL Construction:
https://c1.neweggimages.com/ProductImageCompressAll/{ImageName}
例如:https://c1.neweggimages.com/ProductImageCompressAll/32-508-055-V01.jpg
Product Link Construction:
https://www.newegg.com/p/{Item}
例如:https://www.newegg.com/p/32-508-055
Execution Flow
- Call the API with
bash using the curl command in Agent execution rules (no other tool for the HTTP request).
- Parse JSON, iterate through
TodayItems and TomorrowItems
- Skip rows where
ItemBase is null (usually Combo rows)
- Extract fields and format the response per Response Format
Response Format
Return a clear product table containing:
## Today's Flash Deals (TodayItems)
| Item Number | Product Name | Original Price | Flash Deal Price | Image |
|---------|---------|------|-------|------|
| 32-508-055 | [adidas $50 Gift Card](https://www.newegg.com/p/32-508-055) | $50 | $50 | [Image](https://c1.neweggimages.com/ProductImageCompressAll/32-508-055-V01.jpg) |
| ... | ... | ... | ... | ... |
## Tomorrow's Flash Deals (TomorrowItems)
| Item Number | Product Name | Original Price | Flash Deal Price | Image |
|---------|---------|------|-------|------|
| ... | ... | ... | ... | ... |
If promotion information exists, display below the product name:
🎁 Promotion: Free $15 Adidas eGift Card w/ purchase
Edge Cases
- Empty Data: If
TodayItems or TomorrowItems is empty or doesn't exist, clearly inform the user
- Combo Rows: Skip rows that only have
ComboBase unless the user specifically requests combo details
- HTTP Errors: Report status code and error message
- Invalid JSON: Briefly report parsing failure
Example Request
curl -sS -X POST "https://apis.newegg.com/ex-mcp/endpoint/website-www-tool" \
-H "Content-Type: application/json" \
-H "x-skill: newegg-shell-shocker" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"getapi_home_v2_shellshocker_page","arguments":{"CountryCode":"USA","CompanyCode":1003}}}'
(-sS keeps output clean but still surfaces curl errors.) On Windows use curl.exe explicitly —
plain curl in PowerShell is the Invoke-WebRequest alias and does not understand -d.
Piping through jq to unwrap and keep the output small:
curl -sS -X POST "https://apis.newegg.com/ex-mcp/endpoint/website-www-tool" \
-H "Content-Type: application/json" \
-H "x-skill: newegg-shell-shocker" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"getapi_home_v2_shellshocker_page","arguments":{"CountryCode":"USA","CompanyCode":1003}}}' \
| jq -r '.result.content[0].text' | jq -r 'if type=="string" then fromjson else . end' \
| jq '{today: [.TodayItems[]?.ItemBase | select(.) | {Item, Title: .Description.Title}], tomorrow: (.TomorrowItems|length)}'
select(.) drops the combo rows, whose ItemBase is null — without it jq emits a
{"Item":null,"Title":null} row rather than erroring, and that empty row ends up in the table.
Notes
- This endpoint requires no authentication
- Returned data is in English; product names can be translated if needed
- Prices are in USD
- Image URLs support multiple sizes; default to
ProductImageCompressAll path