makiti-mcp

makiti-mcp

MCP server that acts as a shopping assistant, enabling product search, comparison, deal finding, and price history tracking via Hound web search.

Category
访问服务器

README

🛒 Makiti — MCP Shopping Assistant

Makiti est un serveur MCP (Model Context Protocol) qui agit comme assistant shopping intelligent. Il s’appuie sur Hound pour chercher le web et scraper les retailers, et fournit des outils MCP pour :

  • 🔍 rechercher des produits,
  • 🏷️ trouver le meilleur prix sur les retailers canadiens,
  • ⚖️ comparer des items,
  • 💰 trouver les meilleurs deals,
  • 📈 estimer l’historique de prix.

🚀 Installation

git clone https://github.com/seasayDev/makiti-mcp.git
cd makiti-mcp
npm install

⚙️ Configuration requise

Dépendance Description
Node.js >= 18 Runtime requis
Hound MCP Serveur MCP de recherche web (wrapper Hermes)
Hermes Agent Pour consommer les outils Makiti via MCP

Architecture

Makiti ne parle pas à Hound par HTTP : il spawn Hound en sous-processus et communique en JSON-RPC stdio (protocole MCP), exactement comme le fait Hermes. Le chemin du wrapper Hound est configurable via la variable d'environnement HOUND_WRAPPER (défaut : /data/data/com.termux/files/home/.hermes/scripts/hound-wrapper.sh).

[ Agent / Hermes ] ──stdio──> [ Makiti MCP ] ──spawn──> [ Hound MCP ] ──> web

🛠️ Outils disponibles

product_search

Rechercher des produits sur le web avec filtres de prix, marque, retailer, condition. Les résultats sont triés du moins cher au plus cher quand un prix est détecté.

{
  "query": "iPhone 15",
  "max_price": 1200,
  "brand": "Apple",
  "retailer": "amazon.ca",
  "condition": "new",
  "limit": 10
}

find_best_price ⭐ (nouveau)

Scraper directement les pages de recherche des retailers canadiens (Amazon.ca, Walmart.ca…) pour trouver le prix le plus bas réel, lu en direct sur les sites. Plus fiable que product_search car il lit les pages produits elles-mêmes.

{
  "query": "usb flash drive 128gb",
  "retailers": ["amazon.ca", "walmart.ca"],
  "limit": 5
}

Retailers supportés : amazon.ca, walmart.ca, bestbuy.ca, canadiantire.ca, staples.ca, newegg.ca.

⚠️ Best Buy Canada bloque le scraping automatisé (HTTP 403) — les erreurs sont listées dans la réponse.

product_compare

Comparer deux produits côte à côte : specs, prix, verdict.

{
  "product_a": "iPhone 15",
  "product_b": "Samsung Galaxy S24",
  "category": "smartphone",
  "budget": 1100
}

find_deals

Trouver les deals/promo actifs pour un produit ou une catégorie (filtré sur la région Canada).

{
  "query": "Nike running shoes",
  "region": "Canada",
  "retailer": "amazon.ca",
  "limit": 10
}

price_history

Suivre/estimer l’historique de prix d’un produit sur plusieurs retailers.

{
  "product": "PlayStation 5",
  "retailers": ["amazon.ca", "bestbuy.ca", "walmart.ca"],
  "days_back": 90
}

makiti_guide

Obtenir des conseils d’utilisation selon ton scénario shopping.

{
  "scenario": "acheter un laptop sous 800 CAD"
}

🧠 Leçons apprises (retour d'expérience réel)

Makiti a été mis à l'épreuve sur une vraie recherche (« meilleur prix clé USB 128GB Canada »). Voici ce que cette expérience a révélé, et comment le code a été corrigé.

Leçon 1 — Les filtres site: tuent les recherches Hound

Problème : product_search générait des requêtes comme USB flash drive 128GB site:amazon.ca price0 résultat sur tous les moteurs de Hound. Cause : les opérateurs site: combinés à des requêtes longues font échouer les moteurs.

Correction :

  • plus aucun site: dans les requêtes ;
  • les noms de retailers sont convertis en mots-clés (amazon.caamazon canada) ;
  • les requêtes sont gardées courtes (< 8 mots).

Leçon 2 — Fallback automatique des moteurs de recherche

Problème : pendant la session, les moteurs google et brave étaient bloqués (engine_blocked), donnant 0 résultat pendant plusieurs minutes.

Correction : hound-client.js implémente un fallback en 3 paliers :

  1. google, brave, duckduckgo, yahoo
  2. duckduckgo, yahoo, qwant, mojeek
  3. startpage, bing

Si un palier renvoie 0 résultat et des moteurs bloqués, on passe au palier suivant.

Leçon 3 — La recherche web seule ne suffit pas : il faut scraper les retailers

Problème : les résultats web donnent des liens de blogs/deals, pas de prix fiables. La méthode gagnante : le fetch direct des pages de recherche des retailers (amazon.ca/s?k=..., walmart.ca/en/search?q=...) a donné les vrais prix en CAD, y compris les promotions en cours (Kingston 64GB à 13,97$ Walmart, PNY 128GB à 26,08$ Amazon).

Correction : nouvel outil find_best_price qui scrappe Amazon.ca et Walmart.ca en parallèle et extrait (produit, prix) avec une heuristique ligne par ligne.

Leçon 4 — Les résultats « deals » partent en vrille géographique

Problème : find_deals sur « USB flash drive » renvoyait des deals hotukdeals (UK) et des sites pakistanais.

Correction : filtrage géographique — on garde les hits contenant des indices canadiens (.ca, Canada, CAD, québec, redflagdeals, slickdeals…) et on élimine les indices étrangers (hotukdeals, .co.uk, pakistan, karachi, indiamart…).

Leçon 5 — Le parsing de prix est un champ de mines

Problème : les pages retailers mélangent prix réels (Now $13.97) et bruit (You save $6.02, $890 sans décimales, Up to $15, headers markdown ##).

Correction (heuristique actuelle) :

  • les lignes You save $X ne fournissent jamais un prix ;
  • on privilégie les prix avec décimales ($13.97) ;
  • on ignore la navigation, les headers markdown, More buying choices, List:, You pay ;
  • les titres sont nettoyés (...284.6786 out of 5 stars. 28 reviews → nom seul).

Leçon 6 — La fraîcheur compte

Les prix bougent vite. Toutes les réponses rappellent que les prix sont relevés à l'instant du fetch et doivent être vérifiés sur la page produit avant achat (taxes/livraison non incluses).


🗺️ Roadmap (améliorations futures)

  • [ ] Parsing JSON-LD/structured data des pages retailers (au lieu de l'heuristique lignes) pour des prix exacts + URLs produits.
  • [ ] Contournement Best Buy via le browser stealthy de Hound (actions click/form) — actuellement bloqué 403.
  • [ ] price_alert — outil cron qui surveille un produit et notifie quand le prix passe sous un seuil.
  • [ ] Cache prix par produit (TTL court) pour éviter de refrapper les retailers à chaque appel.
  • [ ] Support USD→CAD pour les retailers américains (conversion + droits de douane indicatifs).
  • [ ] Détection de taxes/livraison par province depuis les pages produit.
  • [ ] compare_retailers — outil dédié qui croise les prix d'un même modèle sur 4+ retailers.

📦 Enregistrement dans Hermes

Dans ~/.hermes/config.yaml, ajoute :

mcp_servers:
  makiti:
    command: node
    args: ["/chemin/absolu/vers/makiti-mcp/server.js"]

Puis redémarre Hermes :

hermes gateway restart   # depuis un shell Termux, pas depuis le chat

Vérification :

hermes mcp list          # makiti doit apparaître ✓ enabled
hermes mcp test makiti   # ✓ Connected + tools discovered

🧪 Développement / test

# Vérifier le handshake MCP + un outil réel
printf '%s\n%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"product_search","arguments":{"query":"iPhone 15","limit":3}}}' \
  | timeout 100 node server.js

⚠️ Hound démarre en ~15 s au premier appel (proot Ubuntu). Patience sur le premier tools/call.


🔧 Scripts npm

npm start   # lancer le serveur MCP (alias node server.js)

📄 License

MIT © seasayDev

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选