Search Sizes (Market)
mdmcp-search_size_options
Find specific sizes to use in filter queries. Search by size name or category.
Size options are individual sizes within a size group. Names are as the group
writes them and are often not the bare size you would type: XL & larger,
3XL, One Size, 8-8.5 adult, 2-3 years. Sizes are stored the way a label
prints them, so a spelled-out word finds nothing — NO size is named "medium" or
"large"; search M, XL. Search the size you mean and read the name you get
back.
Use the returned id value when building size filters.
Every hit carries match: exact (query equals its name, ignoring case, accents,
punctuation and spacing; a separator between two digits is kept, so 3-6 months is
not 36 months; a pasted id is never compared), 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").
"M", "XL", "One Size", "32 waist", "2-3 years".
Parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
query | string | string[] | yes | — | Single query string or list of query strings for batch search. |
search_limit | integer | no | default: 10 · 1–50 | 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. |
Returns
- When query is a string: list[SizeOptionHit]
- When query is a list: list[list[SizeOptionHit]] with results in same order as queries.
Try it
Code examples
- curl
- TypeScript
- Python
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_size_options",
"arguments": {
"query": "Nike",
"search_limit": 10
}
}
}'
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const client = new Client({ name: "demo", version: "1.0.0" }, { capabilities: {} });
await client.connect(
new StreamableHTTPClientTransport(new URL("https://mcp.edited.com/mcp"), {
requestInit: { headers: { "x-api-key": process.env.MCP_API_KEY ?? "" } },
}),
);
const result = await client.callTool({
name: "mdmcp-search_size_options",
arguments: {
"query": "Nike",
"search_limit": 10
},
});
import os
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
headers = {"x-api-key": os.environ["MCP_API_KEY"]}
async with streamablehttp_client("https://mcp.edited.com/mcp", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool(
"mdmcp-search_size_options",
{"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.
[
{
"id": 901,
"group_id": 43,
"name": "12",
"subtitle": null,
"tags": "uk_size_12_equivalent",
"tags_women": null,
"visible": true,
"group": {
"id": 43,
"name": "Womens UK",
"category": "womens_garments",
"gender": "adults",
"subtitle": null,
"unit": "womens_uk",
"visible": true
},
"match": "exact"
}
]
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": {
"group": {
"properties": {
"category": {
"type": "string"
},
"gender": {
"type": "string"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"subtitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"unit": {
"type": "string"
},
"visible": {
"description": "Constant (`true`; ingest filters on it), not an availability signal.",
"type": "boolean"
}
},
"required": [
"category",
"gender",
"id",
"name",
"subtitle",
"unit",
"visible"
],
"type": "object"
},
"group_id": {
"type": "integer"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"subtitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tags": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tags_women": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"visible": {
"description": "Constant (`true`; ingest filters on it), not an availability signal.",
"type": "boolean"
},
"match": {
"description": "What matched, not how well. Not a score. See the tool description.",
"enum": [
"exact",
"lexical",
"semantic_only"
],
"type": "string"
}
},
"required": [
"group",
"group_id",
"id",
"name",
"subtitle",
"tags",
"tags_women",
"visible",
"match"
],
"type": "object"
},
"type": "array"
},
{
"items": {
"items": {
"properties": {
"group": {
"properties": {
"category": {
"type": "string"
},
"gender": {
"type": "string"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"subtitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"unit": {
"type": "string"
},
"visible": {
"description": "Constant (`true`; ingest filters on it), not an availability signal.",
"type": "boolean"
}
},
"required": [
"category",
"gender",
"id",
"name",
"subtitle",
"unit",
"visible"
],
"type": "object"
},
"group_id": {
"type": "integer"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"subtitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tags": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tags_women": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"visible": {
"description": "Constant (`true`; ingest filters on it), not an availability signal.",
"type": "boolean"
},
"match": {
"description": "What matched, not how well. Not a score. See the tool description.",
"enum": [
"exact",
"lexical",
"semantic_only"
],
"type": "string"
}
},
"required": [
"group",
"group_id",
"id",
"name",
"subtitle",
"tags",
"tags_women",
"visible",
"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"
]
}
]
}