Skip to main content

Search Brands (Market)

mdmcp-search_brands

Find brands for the brand_slug and brand filters. Search by name, slug, or description.

A slug you already hold is a valid query and returns that brand as exact, which is how you re-check a slug you were given (fcuk is French Connection UK).

Use the returned slug value for the brand_slug filter, COPIED EXACTLY: that filter is case-sensitive and some slugs carry capitals (LC-Waikiki, EA7), so re-casing one matches zero products with no error. Use the returned name when you filter on the free-text brand field — that canonical spelling matches variant listings the user's phrasing may miss. Never put a slug in a brand filter. Some brands have slug: null (no normalised slug); for those the name is all you get, and it is exactly what brand wants.

Every hit carries match: exact (query equals its name or slug, ignoring case, accents, punctuation and spacing; a separator between two digits is kept, so 3-6 months is not 36 months), lexical (text search ranked it: a typo, a partial, or the name plus or minus a word), or semantic_only (only the vector arm returned it: a nearest neighbour, not a match — verify or discard). Nothing beats semantic_only = not found. No hit is evidence of data behind the name. Rules: market_data_docs(topic="lookup_matching").

An unmapped brand (nothing beats semantic_only) is filtered on brand with the user's own string — never an unrelated slug or name. The leniency behind exact judges the NAME; it never licenses rewriting a slug.

Try queries like

"Nike", "luxury brands", "Gucci", "sportswear", "fcuk".

Parameters​

NameTypeRequiredConstraintsDescription
querystring | string[]yes—Single query string or list of query strings for batch search.
search_limitintegernodefault: 10 · 1–50Maximum number of results to return (default 10, max 50). Raise it when validating or comparing many entities in one call so the list is not clipped at the default 10.

Returns​

  • When query is a string: list[BrandHit]
  • When query is a list: list[list[BrandHit]] with results in same order as queries.

Try it​

Loading interactive widget…

Code examples​

curl -s https://mcp.edited.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-06-18" \
-H "x-api-key: $MCP_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mdmcp-search_brands",
"arguments": {
"query": "Nike",
"search_limit": 10
}
}
}'

Example response​

The payload — what you read from result.structuredContent.result. A refusal arrives on the sibling error key instead, with isError still false — see Concepts → Response shape.

[
{
"name": "Nike",
"slug": "nike",
"match": "exact"
},
{
"name": "Nike SB",
"slug": "nike-sb",
"match": "lexical"
},
{
"name": "Nike Golf",
"slug": "nike-golf",
"match": "lexical"
}
]

Input schema​

{
"type": "object",
"properties": {
"query": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"maxItems": 10,
"type": "array"
}
]
},
"search_limit": {
"default": 10,
"description": "Maximum number of results to return (default 10, max 50). Raise it when validating or comparing many entities in one call so the list is not clipped at the default 10.",
"maximum": 50,
"minimum": 1,
"type": "integer"
}
},
"required": [
"query"
]
}

Output schema​

Describes both branches of the envelope — result on success, error on a refusal. Validate against this rather than pattern-matching the prose above; see Concepts → Response shape.

{
"type": "object",
"properties": {
"result": {
"anyOf": [
{
"items": {
"properties": {
"name": {
"type": "string"
},
"slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"match": {
"description": "What matched, not how well. Not a score. See the tool description.",
"enum": [
"exact",
"lexical",
"semantic_only"
],
"type": "string"
}
},
"required": [
"name",
"slug",
"match"
],
"type": "object"
},
"type": "array"
},
{
"items": {
"items": {
"properties": {
"name": {
"type": "string"
},
"slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"match": {
"description": "What matched, not how well. Not a score. See the tool description.",
"enum": [
"exact",
"lexical",
"semantic_only"
],
"type": "string"
}
},
"required": [
"name",
"slug",
"match"
],
"type": "object"
},
"type": "array"
},
"type": "array"
}
]
},
"error": {
"type": "object",
"description": "Present instead of `result` when the call was rejected. Branch on `code`; never string-match `message`.",
"properties": {
"code": {
"type": "string",
"enum": [
"invalid_input",
"not_entitled",
"upstream_unavailable",
"internal"
]
},
"message": {
"type": "string"
},
"field": {
"type": "string",
"description": "Offending parameter, when the failure is attributable to one."
},
"details": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"code",
"message"
]
}
},
"x-fastmcp-wrap-result": true,
"oneOf": [
{
"required": [
"result"
]
},
{
"required": [
"error"
]
}
]
}