What it does
ShopShield is an MCP server that gives Alexa+ five tools for checking shopping listings:
check_listing_wordingspots counterfeit signs in a title, such as disguised brand names, hidden characters and wording like "1:1" or "OEM".scam_risk_verdictcombines wording checks with the listed price compared to the official price, and returns a risk score from 0 to 100.is_real_discountchecks a claimed "original price" against the official price and says how much you really save.find_official_priceandcompare_pricesresearch official and marketplace prices using Gemini with Google Search.
Every tool returns a short speech line, so Alexa+ can read the answer aloud.
How we built it
The server is written in Python with FastMCP and uses streamable HTTP on the /mcp endpoint. The wording checks and scoring are deterministic code in heuristics.py, so results are fast and repeatable, and every score has clear reasons behind it. Gemini is used only to research prices, with caching to save quota. I tested it with a real MCP client over a Cloudflare tunnel, and the heuristics have seven passing tests.
Challenges we ran into
- The newer mcp 2.x library renamed FastMCP, which broke imports, so I pinned
mcp[cli]<2. - Gemini's Google Search lookup returned 429 errors on the free tier, even though plain calls worked. As a workaround, the shopper can state the official price, and the tools use it directly.
- I had no ngrok or Node on my machine, so I downloaded cloudflared manually for the tunnel and wrote a pure-Python test client instead of using MCP Inspector.
- A Gemini key was flagged after I made the repo public, and Google revoked it. I replaced it with a placeholder.
Accomplishments that we're proud of
I turned real trust and safety experience into a working voice tool. The scoring correctly flags a disguised "N.i.k.e Air Max 1:1 OEM" listing at 100 out of 100, passes a genuine listing at 0, and shows that a "67% off" claim is really about 30% off.
What we learned
I learned how MCP servers work end to end, how to keep AI use small and make the core logic deterministic, and how important it is to keep keys out of git. I also learned to design answers for the ear, not the screen.
What's next for ShopShield
Live price lookup once there's paid Gemini quota, seller age and review count in the score, more brands, an API key check before public use, and an Agent Skill so Alexa+ can use it more naturally.
Log in or sign up for Devpost to join the conversation.