This is a collective intelligence layer that pools shopping decisions across AI agents. It exposes 23 MCP tools split between buyer operations (get_product_intelligence, get_category_recommendations, detect_deal) and seller analytics (get_competitive_landscape, get_rejection_analysis, get_category_demand). The smart_shopping_session tool starts a session and returns category intel in one call, while evaluate_and_compare logs product evaluations and fetches product intelligence simultaneously. Every agent that logs selections, rejections, and comparisons feeds the network, so subsequent agents get selection rates, rejection patterns, price verdicts, and constraint matches drawn from 1,200+ prior sessions. Works via remote Railway endpoint or local npx, with examples for LangChain, CrewAI, AutoGen, and OpenAI Agents.
The collective intelligence layer for AI shopping agents.
Every agent that connects makes every other agent smarter. 1,200+ shopping sessions, 95 products, 50 merchants, 10 categories — and growing.
Why this exists: When AI agents shop for users, each agent starts from zero. AgentSignal pools decision signals across all agents so every session benefits from what every other agent has already learned — selection rates, rejection patterns, price intelligence, merchant reliability, and proven constraint matches.
Remote — zero install, instant intelligence:
{
"mcpServers": {
"agent-signal": {
"url": "https://agent-signal-production.up.railway.app/mcp"
}
}
}
Local via npx:
npx agent-signal
Claude Desktop / Claude Code:
{
"mcpServers": {
"agent-signal": {
"command": "npx",
"args": ["agent-signal"]
}
}
}
The smart_shopping_session tool logs your session AND returns all available intelligence in a single call:
smart_shopping_session({
raw_query: "lightweight running shoes with good cushioning",
category: "footwear/running",
budget_max: 200,
constraints: ["lightweight", "cushioned"]
})
Returns:
| Tool | What it does |
|---|---|
smart_shopping_session | Start session + get category intelligence + similar session outcomes — all in one call |
evaluate_and_compare | Log product evaluation + get product intelligence + deal verdict — all in one call |
| Tool | What it tells you |
|---|---|
get_product_intelligence | Selection rate, rejection reasons, which competitors beat it and why |
get_category_recommendations | Top picks, decision factors, common requirements, average budgets |
check_merchant_reliability | Stock accuracy, selection rate, purchase outcomes by merchant |
get_similar_session_outcomes | What agents with similar constraints ended up choosing |
detect_deal | Price verdict against historical data — best_price_ever to above_average |
get_warnings | Stock issues, high rejection rates, abandonment signals |
get_constraint_match | Products that exactly match your constraints — skip the search |
| Tool | What it tells you |
|---|---|
get_competitive_landscape | Category rank, head-to-head win rate, who beats you and why, price positioning |
get_rejection_analysis | Why agents reject your product, weekly trends, what they chose instead |
get_category_demand | What agents are searching for, unmet needs, budget distribution, market gaps |
get_merchant_scorecard | Full merchant report — stock reliability, price competitiveness, selection rates by category |
| Tool | What it tells you |
|---|---|
get_budget_products | Best products within a specific budget — ranked by agent selections, with merchant availability |
get_trending_products | Products trending up or down — compares current vs previous period selection rates |
create_price_alert | Set a price alert — triggers when agents spot the product at or below your target |
check_price_alerts | Check which alerts have been triggered by recent agent activity |
| Tool | What it captures |
|---|---|
log_shopping_session | Shopping intent, constraints, budget, exclusions |
log_product_evaluation | Product considered, match score, disposition + rejection reason |
log_comparison | Products compared, dimensions, winner, deciding factor |
log_outcome | Final result — purchased, recommended, abandoned, or deferred |
import_completed_session | Bulk import a completed session retroactively |
get_session_summary | Retrieve full session details |
# 1. Start smart — one call gets you session ID + intelligence
smart_shopping_session(category: "electronics/headphones", constraints: ["noise-cancelling", "wireless"], budget_max: 400)
# 2. Evaluate products — get intel as you log
evaluate_and_compare(session_id: "...", product_id: "sony-wh1000xm5", price_at_time: 349, disposition: "selected")
evaluate_and_compare(session_id: "...", product_id: "bose-qc45", price_at_time: 279, disposition: "rejected", rejection_reason: "inferior ANC")
# 3. Compare and close
log_comparison(products_compared: ["sony-wh1000xm5", "bose-qc45"], winner: "sony-wh1000xm5", deciding_factor: "noise cancellation quality")
log_outcome(session_id: "...", outcome_type: "purchased", product_chosen_id: "sony-wh1000xm5")
Every step feeds the network. The next agent shopping for headphones benefits from your data.
# 1. How is my product performing vs competitors?
get_competitive_landscape(product_id: "sony-wh1000xm5")
# → Category rank #1, 68% head-to-head win rate, beats bose-qc45 on ANC quality
# 2. Why are agents rejecting my product?
get_rejection_analysis(product_id: "bose-qc45")
# → 45% rejected for "inferior ANC", agents chose sony-wh1000xm5 instead 3x more
# 3. What do agents want in my category?
get_category_demand(category: "electronics/headphones")
# → Top demands: noise-cancelling (89%), wireless (82%), unmet need: "spatial audio"
# 4. How does my store perform?
get_merchant_scorecard(merchant_id: "amazon")
# → 34% selection rate, 2% out-of-stock, cheapest option 41% of the time
| Category | Sessions |
|---|---|
| footwear/running | 150+ |
| electronics/headphones | 140+ |
| gaming/accessories | 130+ |
| electronics/tablets | 130+ |
| home/furniture/desks | 120+ |
| fitness/wearables | 118+ |
| electronics/phones | 115+ |
| home/smart-home | 107+ |
| kitchen/appliances | 105+ |
| electronics/laptops | 98+ |
Ready-to-run examples in /examples:
| Framework | File | Description |
|---|---|---|
| LangChain | langchain-shopping-agent.py | ReAct agent with LangGraph + MCP adapter |
| CrewAI | crewai-shopping-crew.py | Two-agent crew (researcher + shopper) |
| AutoGen | autogen-shopping-agent.py | AutoGen agent with MCP tools |
| OpenAI Agents | openai-agents-shopping.py | OpenAI Agents SDK with Streamable HTTP |
| Claude | claude-system-prompt.md | Optimized system prompt for Claude Desktop/Code |
All examples connect to the hosted MCP endpoint — no setup beyond pip install required.
Merchant-facing analytics at https://agent-signal-production.up.railway.app/api:
| Endpoint | Description |
|---|---|
GET /api/products/:id/insights | Product analytics — consideration rate, rejection reasons |
GET /api/categories/:category/trends | Category trends — top factors, budgets, attributes |
GET /api/competitive/lost-to?product_id=X | Competitive losses — what X loses to and why |
GET /api/sessions | Recent sessions (paginated) |
GET /api/sessions/:id | Full session detail |
POST /api/admin/aggregate | Trigger insight computation |
GET /api/health | Health check |
git clone https://github.com/dan24ou-cpu/agent-signal.git
cd agent-signal
npm install
cp .env.example .env # set DATABASE_URL to your PostgreSQL
npm run migrate
npm run seed # optional: sample data
npm run dev # starts API + MCP server on port 3100
MIT
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent