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.