Ivory River — Agent Commerce

Search, configure, quote, recommend gaming PCs and components. Hands user to in-browser checkout.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
85%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,201Tokens (tool definitions)
~1.0 KBTypical response size
Moderate attention impact (0.94% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "agent-commerce": {
      "url": "https://mcp.ivoryriver.store/sse"
    }
  }
}

Remote endpoints

https://mcp.ivoryriver.store/ssesse

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_products(query, limit, in_stock)

Search the Ivory River catalog with semantic + keyword hybrid ranking. Use for natural-language queries like "rtx 5090 laptop under $3000" or "case for AM5 build with tempered glass".

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Free-text search query."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "minimum": 1,
      "maximum": 50
    },
    "in_stock": {
      "type": "boolean",
      "default": true,
      "description": "Whether to exclude out-of-stock items. Default true."
    }
  },
  "required": [
    "query"
  ]
}
🟢get_product(id, fields)

Get full detail for a single product by ID. Includes price, stock, attributes, and (for BYOPC builds) a configurator summary.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "integer",
      "description": "WooCommerce product ID."
    },
    "fields": {
      "type": "string",
      "description": "Optional comma-separated field projection."
    }
  },
  "required": [
    "id"
  ]
}
🟢list_builds

List the four BYOPC tiers (Squire, Knight, DragonSlayer, Archangel) with their base prices and aggregate component summaries. Use this to overview what custom-build options exist before drilling into a specific tier.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢list_build_options(tier_id)

Pull the full configurator schema for a single BYOPC tier: every field (Processor, Motherboard, GPU, RAM, Storage, etc.) with all child product options including price, stock, and IDs. Use this to see what selections are available before quoting.

Input Schema

{
  "type": "object",
  "properties": {
    "tier_id": {
      "type": "integer",
      "description": "BYOPC tier product ID. 378 Squire, 459 Knight, 371 DragonSlayer, 460 Archangel."
    }
  },
  "required": [
    "tier_id"
  ]
}
⚪quote_build(tier_id, selections)

Itemize a configured BYOPC build: returns line totals + grand total + pairwise compatibility check. Empty selections are valid -- the server auto-fills the cheapest in-stock option for any required field.

Input Schema

{
  "type": "object",
  "properties": {
    "tier_id": {
      "type": "integer"
    },
    "selections": {
      "type": "object",
      "description": "Object mapping field_id (string) → child_product_id (integer). E.g. {\"123\": 456, \"789\": 101}.",
      "additionalProperties": {
        "type": "integer"
      }
    }
  },
  "required": [
    "tier_id"
  ]
}
🟢check_compatibility(product_id_1, product_id_2)

Pairwise socket / DDR / form-factor compatibility check between two products. Returns { compatible, reason }. Use before recommending a CPU + motherboard pairing or RAM + motherboard.

Input Schema

{
  "type": "object",
  "properties": {
    "product_id_1": {
      "type": "integer"
    },
    "product_id_2": {
      "type": "integer"
    }
  },
  "required": [
    "product_id_1",
    "product_id_2"
  ]
}
🟢recommend_build(use_case, budget)

Recommend BYOPC desktop tiers, optionally filtered by budget. `use_case` is informational (echoed in metadata) and helps the agent reason; the result is sorted by total ascending. For laptop recommendations, call search_products with category="laptops" instead.

Input Schema

{
  "type": "object",
  "properties": {
    "use_case": {
      "type": "string",
      "description": "Free-form e.g. \"competitive FPS gaming\", \"video editing\"."
    },
    "budget": {
      "type": "number",
      "description": "USD ceiling. Builds with total > budget are dropped."
    }
  }
}
🟡get_aivy_handoff_link(agent_name, recommendation, context)

Build the URL the agent hands to the user to finalize a recommendation. Lands the user on ivoryriver.store with the chat widget auto-opened, the agent's recommendation pre-staged, and quick-reply chips: [Yes, add to cart] [Show me the breakdown] [Modify components]. Use this AFTER you've recommended a build (via recommend_build / list_build_options / quote_build) and the user wants to proceed. The user always finishes the purchase in the browser; you never check out.

Input Schema

{
  "type": "object",
  "properties": {
    "agent_name": {
      "type": "string",
      "description": "How the agent should be named in the handoff greeting (e.g. \"Claude Desktop\", \"Cursor\", \"your AI assistant\"). Cosmetic; defaults to \"your AI assistant\"."
    },
    "recommendation": {
      "type": "object",
      "description": "The recommendation to hand off.",
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "byopc",
            "product",
            "generic"
          ],
          "description": "byopc = a BYOPC tier with selections; product = a specific WooCommerce product (laptop, GPU, etc.); generic = no specific product, conversation context only."
        },
        "tier_id": {
          "type": "integer",
          "description": "BYOPC tier product ID (kind=byopc)."
        },
        "tier_name": {
          "type": "string",
          "description": "Human-readable tier name shown in the chat (kind=byopc)."
        },
        "selections": {
          "type": "object",
          "additionalProperties": {
            "type": "integer"
          },
          "description": "field_id → child_product_id (kind=byopc)."
        },
        "product_id": {
          "type": "integer",
          "description": "WooCommerce product ID (kind=product)."
        },
        "product_name": {
          "type": "string",
          "description": "Human-readable product name shown in the chat (kind=product)."
        },
        "quoted_total": {
          "type": "number",
          "description": "USD total quoted to the user. Cosmetic in the greeting; the server re-quotes when the user confirms."
        }
      },
      "required": [
        "kind"
      ]
    },
    "context": {
      "type": "string",
      "description": "Optional one-line summary of what the user originally asked (e.g. \"streaming + 4K editing under $2K\"). Shown to the chat backend so Aivy understands the original ask."
    }
  },
  "required": [
    "recommendation"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools