Aether

MCP Integration

How to connect Aether to AI agents using the Model Context Protocol. Tool definitions, example workflows, and integration guidance.

What is MCP?

MCP (Model Context Protocol) is the emerging standard for how AI agents discover and use external tools. Rather than hard-coding API integrations, agents that support MCP can find tools at runtime through registries and platform integrations — and use them without any developer intervention.

Aether publishes an MCP server definition. This means agents built on platforms that support MCP (including Claude) can discover Aether and start using it to search products and compare prices automatically.

For Aether, MCP is the primary discovery channel. It requires zero human traffic and no SEO — agents find the tool themselves and connect when they need to answer a commercial query.

Server definition

Aether's MCP server declares the following identity:

{
  "name": "aether",
  "version": "0.1.0",
  "description": "Search and compare product prices across UK retailers. Returns structured product data with purchase links. Currently covers consumer electronics from Currys, Argos, John Lewis, AO.com and others."
}

The server exposes four tools, each mapping directly to an Aether API endpoint. The tool descriptions are written for LLMs — they describe when to use each tool, not just what it does.

Tool definitions

search_products

Maps to: GET /v1/products

The primary tool. Use this when a user asks to find, browse, or filter products.

{
  "name": "search_products",
  "description": "Search for products across UK retailers. Returns structured product data including current prices, stock availability, and purchase links from multiple merchants. Use this when helping someone find or compare products to buy.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "q": {
        "type": "string",
        "description": "Search query - product name, model, or keywords (e.g. 'Samsung Galaxy S25', 'noise cancelling headphones')"
      },
      "category": {
        "type": "string",
        "description": "Product category to search within",
        "enum": ["headphones", "webcams", "monitors", "keyboards"]
      },
      "brand": {
        "type": "string",
        "description": "Filter by brand name (e.g. 'Samsung', 'Apple', 'Sony')"
      },
      "max_price": {
        "type": "number",
        "description": "Maximum price in GBP"
      },
      "min_price": {
        "type": "number",
        "description": "Minimum price in GBP"
      },
      "condition": {
        "type": "string",
        "description": "Product condition filter",
        "enum": ["new", "refurbished", "used"]
      },
      "sort": {
        "type": "string",
        "description": "How to sort results",
        "enum": ["relevance", "price_asc", "price_desc"],
        "default": "relevance"
      },
      "limit": {
        "type": "integer",
        "description": "Number of results to return (1-50)",
        "default": 10
      }
    },
    "required": []
  }
}

Note: Neither q nor category is marked as required in the MCP schema because MCP does not support "at least one of" constraints. The underlying API returns a clear missing_parameter error if neither is provided.

compare_prices

Maps to: GET /v1/compare/{gtin}

The highest-value tool. Returns every merchant's listing for a specific product, sorted by price. Use this after search_products when the user wants to know where a product is cheapest, or when the user already has a specific product in mind.

{
  "name": "compare_prices",
  "description": "Compare prices for a specific product across all UK retailers. Provide a GTIN (barcode number) to see every merchant's price for that exact product, sorted cheapest first. Use this after search_products to find the best deal, or when the user has a specific product in mind.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "gtin": {
        "type": "string",
        "description": "The product's GTIN, EAN, or UPC barcode number (e.g. '8806095360850')"
      },
      "condition": {
        "type": "string",
        "description": "Filter by condition",
        "enum": ["new", "refurbished", "used"]
      }
    },
    "required": ["gtin"]
  }
}

get_product

Maps to: GET /v1/products/{id}

Full product details for a single item. Use this when the agent needs complete information about a product found via search — specifications, full description, identifiers, and all images.

{
  "name": "get_product",
  "description": "Get full details for a specific product by its Aether ID. Returns all available information including description, specifications, identifiers, and images. Use this when you need complete information about a product found via search.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "id": {
        "type": "string",
        "description": "The Aether product ID (e.g. 'aeth-curry-720702')"
      }
    },
    "required": ["id"]
  }
}

list_categories

Maps to: GET /v1/categories

Discovery tool. Returns which product categories Aether currently covers, with product counts. An agent should call this when it's unsure whether Aether can help with a particular product type.

{
  "name": "list_categories",
  "description": "List all available product categories that Aether covers. Returns category names, slugs, and product counts. Use this to discover what types of products can be searched.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "required": []
  }
}

Agent workflows

The tools are designed to be chained together. Here are two typical workflows.

Finding the best deal on a specific product

1. User asks: "Find me the best deal on Sony WH-1000XM5 headphones"

2. Agent calls: search_products(
     q = "Sony WH-1000XM5",
     category = "headphones"
   )

3. Agent receives results. Each product includes an ID and
   (if requested via fields=identifiers) a GTIN.

4. Agent calls: compare_prices(
     gtin = "4548736132108"
   )

5. Agent receives every merchant's price for that exact product,
   sorted cheapest first.

6. Agent presents to user: "The cheapest in-stock option is £249
   at AO.com. Currys has it for £279 and John Lewis for £279."

7. User clicks the purchase_url for AO.com → Aether earns commission.

Browsing a category with constraints

1. User asks: "I need a good webcam for under £100"

2. Agent calls: search_products(
     category = "webcams",
     max_price = 100,
     sort = "price_desc"
   )

   Sorted price_desc so the most expensive options within budget
   appear first - often the best quality within the range.

3. Agent presents the top options with prices from multiple merchants.

4. User picks one. Agent calls: compare_prices(
     gtin = "..."
   )

5. User sees all merchant prices for that webcam and clicks the
   cheapest option → Aether earns commission.

Checking whether Aether can help

1. User asks: "Can you find me a good sofa under £500?"

2. Agent calls: list_categories()

3. Agent sees that Aether covers electronics categories only -
   no furniture.

4. Agent tells the user: "I can compare prices on electronics
   like TVs, headphones, and laptops, but I don't currently
   have furniture data."

Adding Aether as an MCP server

For Claude-powered agents

If you're building with Claude and have MCP server support enabled, add Aether to your tool configuration:

{
  "mcpServers": {
    "aether": {
      "url": "https://mcp.aethergraph.io",
      "description": "UK product price comparison"
    }
  }
}

Claude will then discover Aether's tools automatically and use them when handling product or price queries.

For custom agent frameworks

If you're building your own agent framework with MCP support, point your MCP client at Aether's server URL:

https://mcp.aethergraph.io

The server responds with the full tool manifest described above. Your agent can then call tools using standard MCP request format, and Aether translates them into the appropriate API calls.

Direct REST API integration

If your agent platform does not support MCP, you can integrate with the REST API directly. The tool definitions above map one-to-one with the API Reference endpoints. The tool input schemas match the API query parameters.

Design notes

The tool descriptions are written for LLMs, not humans. This means they follow specific conventions:

Describe intent, not just mechanics. "Use this when helping someone find or compare products to buy" tells the agent when to use the tool, not just what it does technically.

Include concrete examples. Showing example inputs in the property descriptions (e.g. "e.g. 'Samsung Galaxy S25', 'noise cancelling headphones'") helps agents map user queries to the right parameters.

Be honest about scope. "Currently covers consumer electronics" prevents agents from trying to search for categories Aether doesn't carry, which would waste requests and produce empty results.

Suggest chaining. The compare_prices description says "Use this after search_products to find the best deal" — this hints at the intended workflow without being prescriptive.