🛒 amazon-in-mcp
一个 MCP 服务器,让你的 LLM 直接在 Amazon.in 上购物。
最便宜的有货商品 · 最优性价比推荐 · 价格历史 · 无需付费 API。
✨ 它能做什么
为你的 LLM 提供三个可调用 amazon.in 的工具:
| 工具 |
返回内容 |
search_amazon_in(query, max_results=5) |
排序后的商品列表 + 两个便捷推荐:最便宜的有货商品 与 最优性价比(rating × log10(reviews) / √price) |
get_product(asin_or_url) |
完整商品详情 — 价格、原价(MRP)、折扣、评分、评论数、库存、卖点(bullets)、品牌、卖家、配送信息 |
price_history_link(asin_or_url) |
针对 amazon.in 域名的 Keepa.com 价格历史图表链接,无网络请求。 |
无需 API 密钥。无需账号。通过 stdio 本地运行。直接抓取 HTML 页面,配合轮换 User-Agent 与机器人检测页重试机制。
🚀 快速开始
1. 安装(Claude Code):
git clone https://github.com/justadityaraj/amazon-in-mcp.git
cd amazon-in-mcp && npm install && npm run build
claude mcp add amazon-in -- node "$PWD/dist/index.js"
2. 重启你的 MCP 客户端(Claude Code、Cursor、Claude Desktop 等)
3. 提问:
"在 amazon.in 上找一款 1TB 的外置固态硬盘,预算 ₹10,000 以内。给我最优性价比的选择。"
你的 LLM 会调用 search_amazon_in,按性价比排序,返回一件真实商品,附上当前价格和一条 Keepa 价格历史链接。
📸 效果展示
实际调用 search_amazon_in("wireless mouse", max_results=3) 的返回结果:
{
"query": "wireless mouse",
"total_results": 3,
"results": [
{
"asin": "B0CQRNWJM2",
"title": "ZEBRONICS Blanc Slim Wireless Mouse...",
"url": "https://www.amazon.in/dp/B0CQRNWJM2?tag=artech-21",
"price_inr": 423,
"mrp_inr": 799,
"rating": 4.0,
"review_count": 7801,
"in_stock": true,
"delivery": "FREE delivery Tomorrow",
"price_history_url": "https://keepa.com/#!product/12-B0CQRNWJM2"
}
],
"cheapest_in_stock": { "asin": "...", "price_inr": 199, "...": "..." },
"best_value": { "asin": "...", "rating": 4.3, "...": "..." }
}
get_product 会额外返回 bullets[]、brand、seller、discount_percent、availability。
⚙️ 配置你的 MCP 客户端
Claude Code
claude mcp add amazon-in -- node /absolute/path/to/amazon-in-mcp/dist/index.js
Claude Desktop
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"amazon-in": {
"command": "node",
"args": ["/absolute/path/to/amazon-in-mcp/dist/index.js"]
}
}
}
Cursor / Windsurf / 其他客户端
使用与 Claude Desktop 相同的 JSON 配置,将其放入对应客户端的 MCP 设置文件中即可。
🖼️ 图片搜索
服务器有意不支持图片输入 —— 以此保持与具体模型供应商无关。取而代之的做法是:将图片粘贴到你的 LLM 客户端中,让它描述商品,LLM 便会自动用正确的关键词调用 search_amazon_in。在任何支持 MCP 的客户端中体验一致。
🧮 "最优性价比" 是如何评分的
在所有库存充足、且评论数不少于 10 的商品中:
$$
\text{score} = \frac{\text{rating} \times \log_{10}(\text{reviews} + 10)}{\sqrt{\text{price}}}
$$
得分最高者胜出。cheapest_in_stock 只是有货商品里 price_inr 最低的那个 —— 当你只想要绝对便宜而不追求平衡时很有用。
🛡️ 稳健性
| 属性 |
说明 |
| UA 轮换 |
5 个现代桌面端 UA(Mac / Win / Linux 上的 Chrome / Safari / Firefox) |
| 重试 |
最多 3 次尝试,针对 5xx、429 以及机器人检测页使用指数退避 |
| 机器人检测 |
扫描前 8 KB 内容以识别已知的 CAPTCHA / 机器人标记 |
| 超时 |
每次请求 20 秒 |
| 状态 |
无状态。Stdio、无 Cookie、无会话 |
在高频使用下,预计约 1–5% 的请求会因机器人检测而失败。等待 30–60 秒后重试,或换一个网络环境运行。
💰 项目资金来源
默认情况下,本服务器返回的 amazon.in 链接会带有作者的 Amazon Associates 联盟标签(artech-21)。如果你(或你的 LLM)点击链接并下单购买,作者会获得一小笔佣金。你支付的价格不变。 这是让项目保持免费、MIT 许可并持续维护的唯一方式。
随时可以通过 AMAZON_IN_AFFILIATE_TAG 环境变量覆盖或禁用:
| 取值 |
行为 |
| 未设置 |
使用作者的标签(artech-21)—— 支持项目 |
yourtag-21 |
使用你自己的 Amazon Associates 标签 |
none / off / false / "" |
不带标签,返回原始的 amazon.in 链接 |
示例 —— 使用你自己的标签:
{
"mcpServers": {
"amazon-in": {
"command": "node",
"args": ["/path/to/dist/index.js"],
"env": { "AMAZON_IN_AFFILIATE_TAG": "yourtag-21" }
}
}
}
🗺️ 路线图
- [ ] 发布到 npm,让安装简化为
npx -y amazon-in-mcp-server
- [ ] 可选支持 Keepa API(由用户提供密钥),以获取真实的价格历史数据
- [ ] 过滤辅助参数 ——
min_rating、min_reviews、under_price
- [ ] 附带缓存 HTML 样本的冒烟测试套件
🛠️ 开发
npm install
npm run dev
npm run build
npm start
使用 MCP Inspector 进行交互式测试:
npx @modelcontextprotocol/inspector node dist/index.js
项目结构:
src/
index.ts # MCP server + 3 tool registrations
scraper.ts # fetch with UA rotation, retry, bot-check
parse.ts # cheerio selectors for search + product pages
constants.ts # UAs, headers, tuning constants, affiliate config
types.ts # SearchResultItem, ProductDetail
⚠️ 免责声明
本工具抓取公开可访问的 amazon.in 页面,用于个人研究与助手用途。它不会绕过身份验证、付费墙或 CAPTCHA —— 当 Amazon 返回机器人检测时,工具会停止并报告错误。
你需要自行负责以符合 Amazon 服务条款及当地法律的方式使用本工具。不对可用性、准确性或任何特定用途的适用性作任何保证。DOM 选择器尽力而为,Amazon 更新页面结构时可能失效。欢迎提交 PR。
📄 许可证
MIT © Aditya Raj Singh
欢迎提交 issue、bug 报告以及选择器修复 —— Amazon 的 DOM 每隔几个月就会变动,因此本项目会偶尔失效,需要社区共同维护。