# exNiche

> Product search for AI shopping agents: prices and buy links from big retailers. No key needed.

- name: com.exniche/search
- version: 0.10.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 78/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.exniche%2Fsearch
- tools: https://api.protogrid.dev/v1/servers/com.exniche%2Fsearch/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "search": {
      "type": "http",
      "url": "https://exniche.com/mcp",
      "headers": {
        "Authorization": "Bearer ${SEARCH_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${SEARCH_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-3d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 78/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 94 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 6 tools declare all four hints; missing: list_gaps (destructiveHint); find_retailers (destructiveHint); check_product_link (destructiveHint); …
- pass `tools.token_cost`: about 1,499 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 50 (weight 15)

- warn `stability.changes`: 27 tool changes in 30 days
- fail `stability.rug_pull`: 4 tools kept their name but changed most of their description in 30 days; review before trusting them
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 6, about 1,499 tokens to load them all
- tool set hash: a77dcf7901c5a02ae564220343ca495f
- tools last changed: 2026-11-11T08:27:01.939Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.exniche/search.svg)](https://protogrid.dev/servers/com.exniche/search)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-11 `get_setup_and_upgrade_links` changed (description)
  - before: Free. Return exNiche install commands for MCP clients, the agent guide, and and how to get a free API key (POST /v1/keys). Free: 1,000 calls a month per key. Nothing is ever charged.
  - after: Free. Return exNiche install commands for MCP clients, the agent guide, and how to get a free API key (POST /v1/keys). Free: 1,000 calls a month per key. Nothing is ever charged.
- 2026-11-11 `search_products` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Search recorded retail listings across stores using explicit budget, currency, size, color and stock filters. Needs a free key. Counts 1 call. Returns ranked purchase links with observed availability; unknown facts stay unknown. Misses may be saved as agent observations, never verified human demand.
  - after: Search products for sale at big retailers and well-known brand stores: Myer, JB Hi-Fi, Zappos, Nike and about 180 more, deepest in Australia and US fashion. Use this when a shopper wants a product, a price check, or somewhere to buy it. Put the product in `query` (2 to 4 words, brand first: 'sony headphones', 'breville espresso machine') and budget, country, size and colour in their own fields. Returns ranked listings with title, store, price, availability, the retailer's product url and when it was last checked, plus retailer_search links to try when nothing matches. Prices are in each listing's own currency, exclude shipping and tax, and are not converted. No key needed. Example: {"query": "espresso machine", "country": "AU", "max_price": 600}.
- 2026-11-11 `check_product_link` added
  - Fetch one product page live and return whether it still exists, its current price and stock. Use it on a url from search_products before quoting a price to the shopper. Only allowlisted retailer and brand-store urls; robots.txt is honoured. status: live, out_of_stock, dead (gone), blocked (retailer refused; hand the shopper the url), not_allowed, unreadable. No key needed.
- 2026-11-11 `find_retailers` changed (description, inputSchema) **meaning changed**
  - before: Free, no key. Returns ready-to-open search links on the big retailers and brand stores that fit a product query (brand named in the query first, then category specialists, then general retailers). Use it to go straight to the right stores, or when search_products finds nothing.
  - after: Find which big retailers and brand stores to search for a product, with a ready-made search link for each. Use this when search_products returns nothing, when the shopper names a store or brand, or to give the shopper places to look. Returns up to 10 retailers (the brand's own store first, then category specialists, then general retailers), each with search_url, a short reason, and agent_access ('open' = you can fetch the page, 'blocks_bots' = hand the link to the shopper). No key needed. Example: {"query": "breville espresso machine", "region": "AU"}.
- 2026-11-09 `find_retailers` added
  - Free, no key. Returns ready-to-open search links on the big retailers and brand stores that fit a product query (brand named in the query first, then category specialists, then general retailers). Use it to go straight to the right stores, or when search_products finds nothing.
- 2026-11-08 `get_setup_and_upgrade_links` changed (description, outputSchema) **meaning changed**
  - before: Free. Return exNiche install commands for MCP clients, the agent guide, and the signup and prepaid-credit links to hand the user when free credits run out. Free: 1,000 credits a month. Credits: A$10 = 10,000. No automatic charges.
  - after: Free. Return exNiche install commands for MCP clients, the agent guide, and and how to get a free API key (POST /v1/keys). Free: 1,000 calls a month per key. Nothing is ever charged.
- 2026-11-08 `search_products` changed (description, inputSchema, outputSchema)
  - before: Search recorded retail listings across stores using explicit budget, currency, size, color and stock filters. 1 credit. Returns ranked purchase links with observed availability; unknown facts stay unknown. Misses may be saved as agent observations, never verified human demand.
  - after: Search recorded retail listings across stores using explicit budget, currency, size, color and stock filters. Needs a free key. Counts 1 call. Returns ranked purchase links with observed availability; unknown facts stay unknown. Misses may be saved as agent observations, never verified human demand.
- 2026-11-08 `list_gaps` changed (description)
  - before: Products people asked for that none of the closest products checked offer, with the original ask, requirements and products checked, plus agent-search misses repeated by 3+ requests from 2+ agents. No key: free 10-gap preview. Workspace key: full rows, paged by cursor, 1 credit per call. A gap is worth a closer look, never verified demand.
  - after: Products people asked for that none of the closest products checked offer, with the original ask, requirements and products checked, plus agent-search misses repeated by 3+ requests from 2+ agents. No key: 10-gap preview. With a free key (POST /v1/keys): full rows, paged by cursor, counts 1 call. A gap is worth a closer look, never verified demand.
- 2026-11-04 `list_gaps` changed (description)
  - before: Products people asked for that none of the closest products checked offer, with the original ask, requirements and products checked, plus agent-search misses repeated by 3+ requests from 2+ agents. No key: free 10-gap preview. Workspace key: full rows, paged by cursor, 1 + 10 credits per gap. A gap is worth a closer look, never verified demand.
  - after: Products people asked for that none of the closest products checked offer, with the original ask, requirements and products checked, plus agent-search misses repeated by 3+ requests from 2+ agents. No key: free 10-gap preview. Workspace key: full rows, paged by cursor, 1 credit per call. A gap is worth a closer look, never verified demand.
- 2026-11-03 `get_gap` removed
  - Get one gap by id or slug. detail=summary costs 1 credit; detail=full (exact score parts, every ask with link and attribution, requirements, 8-week ask counts) costs 100 credits. Unscored leads only return summary.

Full history: https://api.protogrid.dev/v1/servers/com.exniche%2Fsearch/changes

## Remotes

- https://exniche.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (6)

- `check_product_link`: Fetch one product page live and return whether it still exists, its current price and stock. Use it on a url from search_products before quoting a price to the shopper. Only allowlisted retailer and brand-store urls; robots.txt is honoured. status: live, out_of_stock, dead (gone), blocked (retailer refused; hand the shopper the url), not_allowed, unreadable. No key needed.
- `find_retailers`: Find which big retailers and brand stores to search for a product, with a ready-made search link for each. Use this when search_products returns nothing, when the shopper names a store or brand, or to give the shopper places to look. Returns up to 10 retailers (the brand's own store first, then category specialists, then general retailers), each with search_url, a short reason, and agent_access ('open' = you can fetch the page, 'blocks_bots' = hand the link to the shopper). No key needed. Example: {"query": "breville espresso machine", "region": "AU"}.
- `get_setup_and_upgrade_links`: Free. Return exNiche install commands for MCP clients, the agent guide, and how to get a free API key (POST /v1/keys). Free: 1,000 calls a month per key. Nothing is ever charged.
- `list_gaps`: Products people asked for that none of the closest products checked offer, with the original ask, requirements and products checked, plus agent-search misses repeated by 3+ requests from 2+ agents. No key: 10-gap preview. With a free key (POST /v1/keys): full rows, paged by cursor, counts 1 call. A gap is worth a closer look, never verified demand.
- `report_not_found`: Free. Report a genuine shopper mismatch after a search. Do not send synthetic reports or personal details. Response states whether the agent observation was saved; it is not verified human demand.
- `search_products`: Search products for sale at big retailers and well-known brand stores: Myer, JB Hi-Fi, Zappos, Nike and about 180 more, deepest in Australia and US fashion. Use this when a shopper wants a product, a price check, or somewhere to buy it. Put the product in `query` (2 to 4 words, brand first: 'sony headphones', 'breville espresso machine') and budget, country, size and colour in their own fields. Returns ranked listings with title, store, price, availability, the retailer's product url and when it was last checked, plus retailer_search links to try when nothing matches. Prices are in each listing's own currency, exclude shipping and tax, and are not converted. No key needed. Example: {"query": "espresso machine", "country": "AU", "max_price": 600}.
