brands
Server Details
Search brands, find authorized retailers and verify a shop's authorization on authorized.by
- Status
- Healthy
- Uptime
- 100.0% over 71 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 7 tools
Each tool has a distinct resource/action: get_brand vs get_brands clearly separates profile lookup from search/list, and the same pattern holds for retailers. The bidirectional relationship tools are explicitly scoped by direction, while verify_retailer_authorization is a targeted check rather than a listing tool.
All tools use snake_case with predictable get_ or verify_ prefixes. Singular versus plural names consistently reflect whether the tool retrieves one entity or searches/lists multiple entities.
Seven tools are well-scoped for a read-only brand/retailer authorization directory. Each tool covers a distinct lookup, relationship, or verification need without redundant surface area.
The surface covers brand search/profile, retailer search/profile, relationship listings in both directions, and targeted authorization verification by domain plus brand or GTIN. For a read-only directory, no obvious lifecycle operation is missing.
Available Tools
7 toolsget_brandGet brand profileARead-onlyIdempotentInspect
Get the public profile of one brand (manufacturer) on authorized.by. Read-only. Returns categories, website, headquarters country, description, registration date and the number of authorized retailers. Use get_brands first if you only know an approximate name. Data scope: results only cover relationships registered and confirmed on authorized.by. An empty result or a not-found error does NOT prove that no authorization exists outside authorized.by. Distinguish outcomes: an empty list means no matching record on authorized.by; an error result whose text starts with 'Brand not found' or 'Retailer not found' means the given id/alias is unknown; an error result whose text starts with 'Tool execution failed' is a technical error and says nothing about the data.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_alias | Yes | Brand numeric ID, slug or alias, e.g. 'deuter' or '16709'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools. |
| logo | Yes | Logo image URL, or null. |
| name | Yes | Display name. |
| slug | Yes | URL-safe identifier. Accepted by the id_or_alias argument of the detail tools. |
| details | Yes | Extended profile details. |
| categories | Yes | Product categories. |
| website_url | Yes | Brand website URL, or null. |
| product_count | Yes | Number of products registered on authorized.by; null when unknown. |
| retailer_count | Yes | Number of retailers currently authorized by this brand on authorized.by. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive profile, but the description adds genuinely non-obvious semantics: results are limited to relationships registered and confirmed on authorized.by, and an empty result is not proof of non-authorization. It further disambiguates outcome classes (empty list vs. 'Brand not found' vs. 'Tool execution failed'), though the returned-field enumeration partly duplicates the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, alternative routing, and data scope are front-loaded in the first three sentences. The final outcome-disambiguation sentence is long and somewhat repetitive, but every clause does map to a distinct failure mode an agent must interpret correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and it covers the remaining needs: how to find the right ID, what the data scope means, and how to read empty versus error responses. Nothing required to invoke or interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents that it accepts a numeric ID, slug, or alias with examples ('deuter', '16709'), so the description adds no meaning beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the public profile of one brand') plus scope ('on authorized.by') and enumerates the returned fields, so it is clearly distinguishable from get_brands (search) and get_brand_retailers (relationship listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the sibling tool: 'Use get_brands first if you only know an approximate name.' It also states the data-scope condition under which results are meaningful and warns that absence of a record on authorized.by does not imply no authorization elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_retailersList a brand's authorized retailersARead-onlyIdempotentInspect
List all retailers (shops) currently authorized by a brand on authorized.by. Read-only. Use this to list a brand's authorized shops; to check one shop by its domain or URL, use verify_retailer_authorization. Sorted by subscription plan (PREMIUM, then START, then FREE) and then by brand-connection count descending. Each retailer includes shop_url, seal_implemented (whether the authorized.by seal is live on their shop), official_shop, partnership_date, and certificate_url / certificate_url_de: links to the public authorized.by certificate page (English / German) proving this specific brand-retailer authorization. Share the certificate link when a user needs verifiable proof. Only active partnerships are returned: confirmed by both the brand and the retailer, with both profiles public and the brand approved by authorized.by. Revoked or pending partnerships are never listed. Responses are cached and refreshed when the underlying profile or partnership changes, so a revocation may take a short time to disappear. partnership_date is the date the authorization STARTED, not the date it was last verified; a partnership listed here is currently active as of the response time. Data scope: results only cover relationships registered and confirmed on authorized.by. An empty result or a not-found error does NOT prove that no authorization exists outside authorized.by. Distinguish outcomes: an empty list means no matching record on authorized.by; an error result whose text starts with 'Brand not found' or 'Retailer not found' means the given id/alias is unknown; an error result whose text starts with 'Tool execution failed' is a technical error and says nothing about the data.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_alias | Yes | Brand numeric ID, slug or alias. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Number of entries in the list. |
| brand_id | Yes | Numeric ID of the brand the list belongs to. |
| retailers | Yes | |
| premium_count | Yes | Number of listed retailers on the PREMIUM plan. |
| tuv_certified_count | Yes | Number of listed retailers with a TÜV certification. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnly, idempotent, openWorld) by disclosing caching and refresh lag, the active-only filter definition (both parties confirmed, public profiles, brand approved), and the exclusion of revoked/pending partnerships. It also supplies an error taxonomy ('Brand not found' / 'Tool execution failed') that changes how results should be interpreted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose, routing, then behavioral details, then caveats. Every section is useful, but the field-by-field enumeration (shop_url, seal_implemented, certificate_url...) is somewhat verbose given an output schema exists, and the sort-order and data-scope passages could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema is present, the description more than covers what the schema cannot: authorization scope on authorized.by, active-only semantics, cache staleness, and outcome disambiguation. Nothing an agent needs to call and interpret this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents 'Brand numeric ID, slug or alias', so the description adds little syntax-level detail beyond repeating the id/alias concept in its error section. Baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('List all retailers (shops) currently authorized by a brand on authorized.by') with an explicit contrast against the sibling verify_retailer_authorization. An agent can distinguish this from get_retailer_brands or get_retailers without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the use case ('list a brand's authorized shops') and names the alternative plus the condition that selects it ('to check one shop by its domain or URL, use verify_retailer_authorization'). It also defines when an empty list versus an error result applies, giving the agent explicit interpretation rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brandsSearch brandsARead-onlyIdempotentInspect
Search brands (manufacturers) registered on authorized.by, or list them all. Read-only. 'search' matches the brand name, alias or website domain (partial match). Returns for each brand: id, name, slug, logo and the number of retailers it has authorized. Omit 'search' to retrieve the full index; use 'page' and 'size' to paginate. Data scope: results only cover relationships registered and confirmed on authorized.by. An empty result or a not-found error does NOT prove that no authorization exists outside authorized.by. Distinguish outcomes: an empty list means no matching record on authorized.by; an error result whose text starts with 'Brand not found' or 'Retailer not found' means the given id/alias is unknown; an error result whose text starts with 'Tool execution failed' is a technical error and says nothing about the data.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number (default 0). | |
| size | No | Page size (default 500). | |
| search | No | Filter by brand name, alias or website domain/URL, e.g. 'deuter' or 'deuter.com'. Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Network-wide totals. |
| brands | Yes | |
| pagination | Yes | Pagination of this response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which already declare readOnly/idempotent/openWorld): it discloses the data scope (only confirmed relationships on authorized.by) and warns that an empty or error result does not disprove authorization elsewhere, plus an explicit error taxonomy ('Brand not found' vs 'Tool execution failed'). That is exactly the behavioral context an agent needs to avoid misinterpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and mode split, then constraints and error semantics; every sentence carries information. The enumerated return-field list partially duplicates the output schema and adds a little length, but no sentence is idle padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations carry the safety profile and an output schema exists, so the description only needed to add scope and interpretation guidance — which it does thoroughly, including the critical caveat about absence of proof outside authorized.by.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3; the description adds that 'search' is a partial match against name, alias or website domain, and that omitting it returns the full index rather than an empty set. Pagination behavior is left to the schema's own defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search/list) and resource (brands/manufacturers) plus the source registry (authorized.by), and the dual mode 'search or list them all' makes clear it is the multi-item retrieval tool, distinct from the singular get_brand sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to omit 'search' (to get the full index) and how to paginate with page/size, and gives outcome-distinguishing rules for empty vs not-found vs technical errors. It stops short of naming alternatives such as get_brand for single-id lookups, so routing between siblings is still inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_retailerGet retailer profileARead-onlyIdempotentInspect
Get the public profile of one retailer (shop) on authorized.by. Read-only. Returns address, contact details, opening hours, categories, subscription plan, TÜV certification, customer rating, registration date, seal_implemented (whether the authorized.by seal is live on their shop), and certificate_url / certificate_url_de: links to the retailer's public authorized.by certificate page (English / German) listing all brands that authorized it. These links are null when the retailer has no active authorization. Data scope: results only cover relationships registered and confirmed on authorized.by. An empty result or a not-found error does NOT prove that no authorization exists outside authorized.by. Distinguish outcomes: an empty list means no matching record on authorized.by; an error result whose text starts with 'Brand not found' or 'Retailer not found' means the given id/alias is unknown; an error result whose text starts with 'Tool execution failed' is a technical error and says nothing about the data.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_alias | Yes | Retailer numeric ID, slug or alias. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools. |
| logo | Yes | Logo image URL, or null. |
| name | Yes | Display name. |
| plan | Yes | authorized.by subscription plan of the retailer: PREMIUM, START or FREE. |
| slug | Yes | URL-safe identifier. Accepted by the id_or_alias argument of the detail tools. |
| details | Yes | Extended profile details. |
| shop_url | Yes | Retailer online-shop URL, or null. |
| brand_count | Yes | Number of brands that currently authorize this retailer on authorized.by. |
| tuv_certified | Yes | Whether the retailer holds a TÜV certification via authorized.by. |
| certificate_url | Yes | Public authorized.by certificate page (English) that proves the authorization; null when there is no active authorization. |
| seal_implemented | Yes | Whether the authorized.by seal is live on the retailer's shop. |
| certificate_url_de | Yes | Same certificate page in German; null when there is no active authorization. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which already declare read-only, idempotent, non-destructive): it discloses the data scope limitation, the nullability of certificate links when no active authorization exists, and a precise three-way outcome taxonomy (empty list vs. 'Brand/Retailer not found' vs. 'Tool execution failed'). That directly prevents misreading a null or error as evidence of no authorization.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose first, then scope caveats, then outcome disambiguation, which is the right ordering. It is somewhat long and enumerates return fields that the output schema already covers, which is the one place sentences don't fully earn their space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the field enumeration is redundant but harmless; everything an agent needs to call this correctly and interpret its result — scope limits, null semantics, error taxonomy — is present. No meaningful gaps remain for a single-parameter lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter is documented as 'Retailer numeric ID, slug or alias' in the schema itself. The description adds no format examples, alias-vs-id precedence, or resolution behavior beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ('Get the public profile of one retailer') with explicit domain scoping ('on authorized.by'), which cleanly separates it from the plural sibling get_retailers and from get_brand. The mention of the certificate links and fields further pins down what 'profile' means here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is clear: look up a single retailer by id/slug/alias, and the description explains what to conclude from empty vs. not-found vs. technical error results. It does not, however, explicitly route the agent to alternatives such as get_retailers (listing) or verify_retailer_authorization (authorization check), so the when-not guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_retailer_brandsList a retailer's authorized brandsARead-onlyIdempotentInspect
List all brands a retailer (shop) is currently authorized to sell, according to authorized.by. Read-only. Use this to answer 'which brands has shop X been authorized for?'. Sorted by brand name. Each entry includes official_shop, partnership_date, and certificate_url / certificate_url_de: links to the public authorized.by certificate page (English / German) proving this specific brand-retailer authorization. Share the certificate link when a user needs verifiable proof. Only active partnerships are returned: confirmed by both the brand and the retailer, with both profiles public and the brand approved by authorized.by. Revoked or pending partnerships are never listed. Responses are cached and refreshed when the underlying profile or partnership changes, so a revocation may take a short time to disappear. partnership_date is the date the authorization STARTED, not the date it was last verified; a partnership listed here is currently active as of the response time. Data scope: results only cover relationships registered and confirmed on authorized.by. An empty result or a not-found error does NOT prove that no authorization exists outside authorized.by. Distinguish outcomes: an empty list means no matching record on authorized.by; an error result whose text starts with 'Brand not found' or 'Retailer not found' means the given id/alias is unknown; an error result whose text starts with 'Tool execution failed' is a technical error and says nothing about the data.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_alias | Yes | Retailer numeric ID, slug or alias. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Number of entries in the list. |
| brands | Yes | |
| retailer_id | Yes | Numeric ID of the retailer the list belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: discloses that only active, mutually confirmed partnerships appear, that revocations may lag due to caching, the exact meaning of partnership_date, the per-entry certificate links, and a three-way mapping of empty list vs. 'not found' error vs. technical failure. That is precisely the behavioral context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, use case, and output shape before the caveats, and every paragraph carries real information. It is on the long side, with mild redundancy ('Read-only' restates readOnlyHint) and a somewhat padded caching explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, trust-sensitive lookup with an output schema present, the description supplies everything an agent needs: scope limitations, active-only filtering, field meanings, certificate sharing guidance, and failure-mode disambiguation. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents that id_or_alias accepts a numeric ID, slug, or alias, so the description earns only marginal credit. It does add value by explaining what an unrecognized id/alias produces ('Retailer not found'), which tells the agent how invalid parameter values surface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'List all brands a retailer (shop) is currently authorized to sell, according to authorized.by.' The directionality (retailer → brands) implicitly distinguishes it from the inverse sibling get_brand_retailers, and the quoted example question makes the intended query unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('answer which brands has shop X been authorized for') and an explicit exclusion: empty results or not-found errors do not prove absence of authorization. However, it never names the concrete alternatives available among siblings (e.g., get_brand_retailers, verify_retailer_authorization), so routing between tools is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_retailersSearch retailersARead-onlyIdempotentInspect
Search retailers (shops) registered on authorized.by, or list them all. Read-only. 'search' matches the company name, alias or shop domain (partial match): a URL is reduced to its domain, except on marketplace hosts such as amazon.de or ebay.de, where the store path is kept and the bare host lists every seller. A partial match can find other shops (shop.de also finds myshop.de), so compare shop_url with the domain you are checking; to verify one shop against a brand, use verify_retailer_authorization. Returns for each retailer: id, name, slug, shop URL, logo, the number of brands that authorized it, and seal_implemented (whether the authorized.by seal is live on their shop). Omit 'search' to retrieve the full index; use 'page' and 'size' to paginate. Data scope: results only cover relationships registered and confirmed on authorized.by. An empty result or a not-found error does NOT prove that no authorization exists outside authorized.by. Distinguish outcomes: an empty list means no matching record on authorized.by; an error result whose text starts with 'Brand not found' or 'Retailer not found' means the given id/alias is unknown; an error result whose text starts with 'Tool execution failed' is a technical error and says nothing about the data.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page number (default 0). | |
| size | No | Page size (default 500). | |
| search | No | Filter by retailer company name, alias or shop domain/URL, e.g. 'best-shop' or 'best-shop.de'. Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Network-wide totals. |
| retailers | Yes | |
| pagination | Yes | Pagination of this response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description still adds substantial context: data only covers relationships registered on authorized.by, empty results do not prove absence of authorization, and error prefixes ('Brand not found' vs 'Tool execution failed') are decoded. That is genuine behavioral disclosure beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and mode selection, then layers matching semantics and result interpretation. Dense but nearly every sentence carries decision-relevant information; the error-prefix enumeration is slightly heavy for the space it occupies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description still summarizes returned fields briefly and, more importantly, closes the interpretive gap around empty vs error results — the one thing an output schema cannot convey. Nothing material for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining match semantics (company name, alias, shop domain, partial match risk) and the marketplace-host exception where the store path is kept. It does not restate defaults for page/size, but those are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Search retailers (shops) registered on authorized.by, or list them all') and immediately scopes it against siblings by pointing to verify_retailer_authorization for single-shop verification. An agent can distinguish this from get_retailer / get_retailer_brands without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use branching: omit 'search' to list the full index, use 'page'/'size' to paginate, and use verify_retailer_authorization instead when the goal is checking one shop against a brand. It also warns that a partial match can return other shops and to compare shop_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_retailer_authorizationVerify a retailer's authorizationARead-onlyIdempotentInspect
Check whether a shop is an authorized retailer of a brand, from the shop's domain or URL plus the brand or one of its products' GTIN (EAN). Read-only. Use this when you know the seller's domain, e.g. from a shopping or UCP catalog result. Pass exactly one of 'brand' or 'gtin'; a GTIN resolves the product's brand and the check stays brand-level. status: AUTHORIZED = authorization active: the brand has confirmed this shop on authorized.by; official_shop, partnership_date and certificate_url / certificate_url_de prove it, share the certificate link when a user needs proof. NO_RECORD_FOR_BRAND = the shop and the brand are on authorized.by, but this brand has not confirmed this shop there (also when a GTIN belongs to several brands and not exactly one confirmed it; brand is then null). RETAILER_NOT_REGISTERED = no public shop on authorized.by at this domain. BRAND_NOT_REGISTERED = no public brand or product matches 'brand' or 'gtin'. None of these statuses means that the shop is unauthorized. Domains match exactly, never a parent domain or another subdomain (www. and m. count as the same shop); marketplace hosts such as amazon.de or ebay.de only match the exact store URL. The answer is computed live, never cached. Data scope: results only cover relationships registered and confirmed on authorized.by. An empty result or a not-found error does NOT prove that no authorization exists outside authorized.by. Distinguish outcomes: an empty list means no matching record on authorized.by; an error result whose text starts with 'Brand not found' or 'Retailer not found' means the given id/alias is unknown; an error result whose text starts with 'Tool execution failed' is a technical error and says nothing about the data.
| Name | Required | Description | Default |
|---|---|---|---|
| gtin | No | GTIN / EAN of a product of the brand, 8 to 14 or 18 digits. Omit when passing 'brand'. | |
| brand | No | Brand numeric ID, slug, alias or website domain, e.g. 'deuter' or 'deuter.com'. Use get_brands to find the slug from a name. Omit when passing 'gtin'. | |
| retailer_domain | Yes | Shop domain or URL, e.g. 'best-shop.de' or 'https://www.best-shop.de/de/grills'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gtin | Yes | The checked GTIN, normalized to 14 digits (18 for GTIN-18); null when checked by brand. |
| brand | Yes | The checked brand; null when the shop or the brand is not registered, or when a GTIN matches several brands and not exactly one of them confirmed the shop. |
| status | Yes | Outcome of the check: AUTHORIZED (authorization active), NO_RECORD_FOR_BRAND, RETAILER_NOT_REGISTERED or BRAND_NOT_REGISTERED. None of them means that the shop is unauthorized. |
| retailer | Yes | The authorized.by shop registered at this domain; null when there is none. |
| checked_at | Yes | Timestamp (ISO 8601) the check was made; answers are never cached. |
| official_shop | Yes | Whether this shop is the brand's own official shop. |
| certificate_url | Yes | Public authorized.by certificate page (English) that proves the authorization; null when there is no active authorization. |
| retailer_domain | Yes | The checked shop domain and path, as parsed from the request. |
| partnership_date | Yes | Date (YYYY-MM-DD) the authorization STARTED. Not a last-verified date: every listed partnership is active as of the response. |
| certificate_url_de | Yes | Same certificate page in German; null when there is no active authorization. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent, yet the description adds substantive context: the answer is computed live and never cached, domains match exactly (no parent/subdomain, www./m. equivalent), and marketplace hosts only match exact store URLs. It also defines each status code and warns that a not-found does not prove non-authorization, which is exactly the kind of interpretation burden annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the parameter rule, then status semantics, then data-scope caveats. It is long and dense with acronyms, but nearly every sentence carries decision-relevant information; the status glossary is verbose yet necessary for correct interpretation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return-value explanation is optional, yet the description supplies status meanings, error-text distinction ('Brand not found' vs 'Tool execution failed'), and the scope limitation of authorized.by. An agent has everything needed to call it and interpret edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real semantics: the mutual exclusivity of brand and gtin, and that a GTIN resolves the product's brand while the check stays brand-level. That clarifies behavior the schema fields alone only hint at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check whether a shop is an authorized retailer of a brand') plus the exact inputs (domain/URL + brand or GTIN). It is clearly distinguishable from the sibling read tools like get_brand_retailers or get_retailer, which list entities rather than perform a brand-level authorization check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when you know the seller's domain, e.g. from a shopping or UCP catalog result' gives a concrete selection condition, and 'Pass exactly one of brand or gtin' disambiguates the two modes. It does not explicitly name a sibling alternative or state when not to use it, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
get_brands1 field changed- changed
Input schema / properties / search / descriptionPrevious value: -"Filter by brand name or alias. Optional."New value: +"Filter by brand name, alias or website domain/URL, e.g. 'deuter' or 'deuter.com'. Optional."
- Changed
get_retailers1 field changed- changed
Input schema / properties / search / descriptionPrevious value: -"Filter by retailer company name or alias. Optional."New value: +"Filter by retailer company name, alias or shop domain/URL, e.g. 'best-shop' or 'best-shop.de'. Optional."
1 tool update
- Changed
verify_retailer_authorization3 fields changed- changed
Output schema / descriptionPrevious value: -"Outcome of the authorization check, with certificate links when VERIFIED."New value: +"Outcome of the authorization check, with certificate links when AUTHORIZED." - changed
Output schema / properties / status / descriptionPrevious value: -"Outcome of the check: VERIFIED, NO_RECORD_FOR_BRAND, RETAILER_NOT_REGISTERED or BRAND_NOT_REGISTERED. None of them means that the shop is unauthorized."New value: +"Outcome of the check: AUTHORIZED (authorization active), NO_RECORD_FOR_BRAND, RETAILER_NOT_REGISTERED or BRAND_NOT_REGISTERED. None of them means that the shop is unauthorized." - changed
Output schema / properties / status / enumPrevious value: -[ - "VERIFIED", - "NO_RECORD_FOR_BRAND", - "RETAILER_NOT_REGISTERED", - "BRAND_NOT_REGISTERED", - null -]New value: +[ + "AUTHORIZED", + "NO_RECORD_FOR_BRAND", + "RETAILER_NOT_REGISTERED", + "BRAND_NOT_REGISTERED", + null +]
1 tool update
- Added
verify_retailer_authorization
6 tool updates
- Changed
get_brand3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / id_or_alias / descriptionPrevious value: -"Brand numeric ID or alias, e.g. 'deuter' or '16709'."New value: +"Brand numeric ID, slug or alias, e.g. 'deuter' or '16709'." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "The public profile of one brand.", + "properties": { + "categories": { + "description": "Product categories.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "description": "Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools.", + "type": "integer" + }, + "name_de": { + "description": "German category name.", + "type": [ + "string", + "null" + ] + }, + "name_en": { + "description": "English category name.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name_de", + "name_en" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "details": { + "additionalProperties": false, + "description": "Extended profile details.", + "properties": { + "description": { + "additionalProperties": false, + "description": "Description text in German (de) and English (en); each may be null.", + "properties": { + "de": { + "description": "German text, or null.", + "type": [ + "string", + "null" + ] + }, + "en": { + "description": "English text, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "de", + "en" + ], + "type": [ + "object", + "null" + ] + }, + "hq_country": { + "description": "Headquarters country code, or null.", + "type": [ + "string", + "null" + ] + }, + "registration_date": { + "description": "Date (YYYY-MM-DD) the company registered on authorized.by.", + "type": [ + "string", + "null" + ] + }, + "social": { + "additionalProperties": false, + "description": "Social media profile URLs; each may be null.", + "properties": { + "facebook": { + "type": [ + "string", + "null" + ] + }, + "instagram": { + "type": [ + "string", + "null" + ] + }, + "linkedin": { + "type": [ + "string", + "null" + ] + }, + "youtube": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "instagram", + "facebook", + "linkedin", + "youtube" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "description", + "hq_country", + "registration_date", + "social" + ], + "type": [ + "object", + "null" + ] + }, + "id": { + "description": "Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools.", + "type": "integer" + }, + "logo": { + "description": "Logo image URL, or null.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Display name.", + "type": [ + "string", + "null" + ] + }, + "product_count": { + "description": "Number of products registered on authorized.by; null when unknown.", + "type": "integer" + }, + "retailer_count": { + "description": "Number of retailers currently authorized by this brand on authorized.by.", + "type": "integer" + }, + "slug": { + "description": "URL-safe identifier. Accepted by the id_or_alias argument of the detail tools.", + "type": [ + "string", + "null" + ] + }, + "website_url": { + "description": "Brand website URL, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "slug", + "website_url", + "logo", + "categories", + "retailer_count", + "product_count", + "details" + ], + "type": "object" +}
- Changed
get_brand_retailers3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / id_or_alias / descriptionPrevious value: -"Brand numeric ID or alias."New value: +"Brand numeric ID, slug or alias." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "All retailers currently authorized by the brand, with per-retailer certificate links.", + "properties": { + "brand_id": { + "description": "Numeric ID of the brand the list belongs to.", + "type": "integer" + }, + "premium_count": { + "description": "Number of listed retailers on the PREMIUM plan.", + "type": "integer" + }, + "retailers": { + "items": { + "additionalProperties": false, + "properties": { + "brand_count": { + "description": "Number of brands that currently authorize this retailer on authorized.by.", + "type": "integer" + }, + "certificate_url": { + "description": "Public authorized.by certificate page (English) that proves the authorization; null when there is no active authorization.", + "type": [ + "string", + "null" + ] + }, + "certificate_url_de": { + "description": "Same certificate page in German; null when there is no active authorization.", + "type": [ + "string", + "null" + ] + }, + "details": { + "additionalProperties": false, + "description": "Extended profile details.", + "properties": { + "address": { + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "Product categories.", + "items": { + "additionalProperties": false, + "properties": { + "de": { + "description": "German text, or null.", + "type": [ + "string", + "null" + ] + }, + "en": { + "description": "English text, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "de", + "en" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "description": { + "additionalProperties": false, + "description": "Description text in German (de) and English (en); each may be null.", + "properties": { + "de": { + "description": "German text, or null.", + "type": [ + "string", + "null" + ] + }, + "en": { + "description": "English text, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "de", + "en" + ], + "type": [ + "object", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "opening_hours": { + "description": "Weekly opening hours of the physical store; empty or null when unknown.", + "items": { + "additionalProperties": false, + "properties": { + "closing_hour": { + "description": "Closing time.", + "type": [ + "string", + "null" + ] + }, + "day_of_week": { + "description": "Day of the week.", + "type": [ + "string", + "null" + ] + }, + "opening_hour": { + "description": "Opening time.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "day_of_week", + "opening_hour", + "closing_hour" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "payment_methods": { + "description": "Accepted payment methods; null when unknown.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "phone": { + "type": [ + "string", + "null" + ] + }, + "registration_date": { + "description": "Date (YYYY-MM-DD) the company registered on authorized.by.", + "type": [ + "string", + "null" + ] + }, + "social": { + "additionalProperties": false, + "description": "Social media profile URLs; each may be null.", + "properties": { + "facebook": { + "type": [ + "string", + "null" + ] + }, + "instagram": { + "type": [ + "string", + "null" + ] + }, + "linkedin": { + "type": [ + "string", + "null" + ] + }, + "youtube": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "instagram", + "facebook", + "linkedin", + "youtube" + ], + "type": [ + "object", + "null" + ] + }, + "trustami": { + "additionalProperties": false, + "description": "Customer rating from Trustami; fields are null when no rating exists.", + "properties": { + "profile_url": { + "description": "URL of the rating profile, or null.", + "type": [ + "string", + "null" + ] + }, + "rating": { + "description": "Average customer rating, or null.", + "type": [ + "number", + "null" + ] + }, + "review_count": { + "description": "Number of customer reviews, or null.", + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "rating", + "review_count", + "profile_url" + ], + "type": [ + "object", + "null" + ] + }, + "tuv_certification_date": { + "description": "Date (YYYY-MM-DD) the TÜV certification was granted; null when not certified.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "address", + "phone", + "email", + "opening_hours", + "payment_methods", + "description", + "categories", + "tuv_certification_date", + "registration_date", + "trustami", + "social" + ], + "type": [ + "object", + "null" + ] + }, + "id": { + "description": "Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools.", + "type": "integer" + }, + "logo": { + "description": "Logo image URL, or null.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Display name.", + "type": [ + "string", + "null" + ] + }, + "official_shop": { + "description": "Whether this shop is the brand's own official shop.", + "type": "boolean" + }, + "partnership_date": { + "description": "Date (YYYY-MM-DD) the authorization STARTED. Not a last-verified date: every listed partnership is active as of the response.", + "type": [ + "string", + "null" + ] + }, + "plan": { + "description": "authorized.by subscription plan of the retailer: PREMIUM, START or FREE.", + "type": [ + "string", + "null" + ] + }, + "product_count": { + "description": "Number of products registered on authorized.by; null when unknown.", + "type": [ + "integer", + "null" + ] + }, + "seal_implemented": { + "description": "Whether the authorized.by seal is live on the retailer's shop.", + "type": "boolean" + }, + "shop_url": { + "description": "Retailer online-shop URL, or null.", + "type": [ + "string", + "null" + ] + }, + "slug": { + "description": "URL-safe identifier. Accepted by the id_or_alias argument of the detail tools.", + "type": [ + "string", + "null" + ] + }, + "sponsored": { + "description": "Whether the brand sponsors (highlights) this retailer.", + "type": "boolean" + }, + "tuv_certified": { + "description": "Whether the retailer holds a TÜV certification via authorized.by.", + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "slug", + "shop_url", + "logo", + "plan", + "tuv_certified", + "seal_implemented", + "official_shop", + "sponsored", + "certificate_url", + "certificate_url_de", + "brand_count", + "product_count", + "partnership_date", + "details" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "total": { + "description": "Number of entries in the list.", + "type": "integer" + }, + "tuv_certified_count": { + "description": "Number of listed retailers with a TÜV certification.", + "type": "integer" + } + }, + "required": [ + "brand_id", + "total", + "premium_count", + "tuv_certified_count", + "retailers" + ], + "type": "object" +}
- Changed
get_brands2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "A page of brands plus network-wide totals and pagination.", + "properties": { + "brands": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "description": "Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools.", + "type": "integer" + }, + "logo": { + "description": "Logo image URL, or null.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Display name.", + "type": [ + "string", + "null" + ] + }, + "retailer_count": { + "description": "Number of retailers currently authorized by this brand on authorized.by.", + "type": "integer" + }, + "slug": { + "description": "URL-safe identifier. Accepted by the id_or_alias argument of the detail tools.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "slug", + "logo", + "retailer_count" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "meta": { + "additionalProperties": false, + "description": "Network-wide totals.", + "properties": { + "generated_at": { + "description": "Timestamp (ISO 8601) the index was generated.", + "type": [ + "string", + "null" + ] + }, + "total_brands": { + "description": "Total number of public brands on authorized.by.", + "type": "integer" + }, + "total_connections": { + "description": "Total number of active brand-retailer authorizations on authorized.by.", + "type": "integer" + }, + "total_retailers": { + "description": "Total number of public retailers on authorized.by.", + "type": "integer" + } + }, + "required": [ + "total_brands", + "total_retailers", + "total_connections", + "generated_at" + ], + "type": [ + "object", + "null" + ] + }, + "pagination": { + "additionalProperties": false, + "description": "Pagination of this response.", + "properties": { + "page": { + "description": "Zero-based page number of this response.", + "type": "integer" + }, + "size": { + "description": "Page size used for this response.", + "type": "integer" + }, + "total_items": { + "description": "Total number of matching entries across all pages.", + "type": "integer" + }, + "total_pages": { + "description": "Total number of pages.", + "type": "integer" + } + }, + "required": [ + "page", + "size", + "total_items", + "total_pages" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "brands", + "meta", + "pagination" + ], + "type": "object" +}
- Changed
get_retailer3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / id_or_alias / descriptionPrevious value: -"Retailer numeric ID or alias."New value: +"Retailer numeric ID, slug or alias." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "The public profile of one retailer.", + "properties": { + "brand_count": { + "description": "Number of brands that currently authorize this retailer on authorized.by.", + "type": "integer" + }, + "certificate_url": { + "description": "Public authorized.by certificate page (English) that proves the authorization; null when there is no active authorization.", + "type": [ + "string", + "null" + ] + }, + "certificate_url_de": { + "description": "Same certificate page in German; null when there is no active authorization.", + "type": [ + "string", + "null" + ] + }, + "details": { + "additionalProperties": false, + "description": "Extended profile details.", + "properties": { + "address": { + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "Product categories.", + "items": { + "additionalProperties": false, + "properties": { + "de": { + "description": "German text, or null.", + "type": [ + "string", + "null" + ] + }, + "en": { + "description": "English text, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "de", + "en" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "description": { + "additionalProperties": false, + "description": "Description text in German (de) and English (en); each may be null.", + "properties": { + "de": { + "description": "German text, or null.", + "type": [ + "string", + "null" + ] + }, + "en": { + "description": "English text, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "de", + "en" + ], + "type": [ + "object", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "opening_hours": { + "description": "Weekly opening hours of the physical store; empty or null when unknown.", + "items": { + "additionalProperties": false, + "properties": { + "closing_hour": { + "description": "Closing time.", + "type": [ + "string", + "null" + ] + }, + "day_of_week": { + "description": "Day of the week.", + "type": [ + "string", + "null" + ] + }, + "opening_hour": { + "description": "Opening time.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "day_of_week", + "opening_hour", + "closing_hour" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "payment_methods": { + "description": "Accepted payment methods; null when unknown.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "phone": { + "type": [ + "string", + "null" + ] + }, + "registration_date": { + "description": "Date (YYYY-MM-DD) the company registered on authorized.by.", + "type": [ + "string", + "null" + ] + }, + "social": { + "additionalProperties": false, + "description": "Social media profile URLs; each may be null.", + "properties": { + "facebook": { + "type": [ + "string", + "null" + ] + }, + "instagram": { + "type": [ + "string", + "null" + ] + }, + "linkedin": { + "type": [ + "string", + "null" + ] + }, + "youtube": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "instagram", + "facebook", + "linkedin", + "youtube" + ], + "type": [ + "object", + "null" + ] + }, + "trustami": { + "additionalProperties": false, + "description": "Customer rating from Trustami; fields are null when no rating exists.", + "properties": { + "profile_url": { + "description": "URL of the rating profile, or null.", + "type": [ + "string", + "null" + ] + }, + "rating": { + "description": "Average customer rating, or null.", + "type": [ + "number", + "null" + ] + }, + "review_count": { + "description": "Number of customer reviews, or null.", + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "rating", + "review_count", + "profile_url" + ], + "type": [ + "object", + "null" + ] + }, + "tuv_certification_date": { + "description": "Date (YYYY-MM-DD) the TÜV certification was granted; null when not certified.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "address", + "phone", + "email", + "opening_hours", + "payment_methods", + "description", + "categories", + "tuv_certification_date", + "registration_date", + "trustami", + "social" + ], + "type": [ + "object", + "null" + ] + }, + "id": { + "description": "Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools.", + "type": "integer" + }, + "logo": { + "description": "Logo image URL, or null.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Display name.", + "type": [ + "string", + "null" + ] + }, + "plan": { + "description": "authorized.by subscription plan of the retailer: PREMIUM, START or FREE.", + "type": [ + "string", + "null" + ] + }, + "seal_implemented": { + "description": "Whether the authorized.by seal is live on the retailer's shop.", + "type": "boolean" + }, + "shop_url": { + "description": "Retailer online-shop URL, or null.", + "type": [ + "string", + "null" + ] + }, + "slug": { + "description": "URL-safe identifier. Accepted by the id_or_alias argument of the detail tools.", + "type": [ + "string", + "null" + ] + }, + "tuv_certified": { + "description": "Whether the retailer holds a TÜV certification via authorized.by.", + "type": "boolean" + } + }, + "required": [ + "id", + "name", + "slug", + "shop_url", + "logo", + "certificate_url", + "certificate_url_de", + "plan", + "tuv_certified", + "seal_implemented", + "brand_count", + "details" + ], + "type": "object" +}
- Changed
get_retailer_brands3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / id_or_alias / descriptionPrevious value: -"Retailer numeric ID or alias."New value: +"Retailer numeric ID, slug or alias." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "All brands that currently authorize the retailer, with per-brand certificate links.", + "properties": { + "brands": { + "items": { + "additionalProperties": false, + "properties": { + "certificate_url": { + "description": "Public authorized.by certificate page (English) that proves the authorization; null when there is no active authorization.", + "type": [ + "string", + "null" + ] + }, + "certificate_url_de": { + "description": "Same certificate page in German; null when there is no active authorization.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools.", + "type": "integer" + }, + "logo": { + "description": "Logo image URL, or null.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Display name.", + "type": [ + "string", + "null" + ] + }, + "official_shop": { + "description": "Whether this shop is the brand's own official shop.", + "type": "boolean" + }, + "partnership_date": { + "description": "Date (YYYY-MM-DD) the authorization STARTED. Not a last-verified date: every listed partnership is active as of the response.", + "type": [ + "string", + "null" + ] + }, + "slug": { + "description": "URL-safe identifier. Accepted by the id_or_alias argument of the detail tools.", + "type": [ + "string", + "null" + ] + }, + "website_url": { + "description": "Brand website URL, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "slug", + "website_url", + "logo", + "official_shop", + "certificate_url", + "certificate_url_de", + "partnership_date" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "retailer_id": { + "description": "Numeric ID of the retailer the list belongs to.", + "type": "integer" + }, + "total": { + "description": "Number of entries in the list.", + "type": "integer" + } + }, + "required": [ + "retailer_id", + "total", + "brands" + ], + "type": "object" +}
- Changed
get_retailers2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "description": "A page of retailers plus network-wide totals and pagination.", + "properties": { + "meta": { + "additionalProperties": false, + "description": "Network-wide totals.", + "properties": { + "generated_at": { + "description": "Timestamp (ISO 8601) the index was generated.", + "type": [ + "string", + "null" + ] + }, + "total_brands": { + "description": "Total number of public brands on authorized.by.", + "type": "integer" + }, + "total_connections": { + "description": "Total number of active brand-retailer authorizations on authorized.by.", + "type": "integer" + }, + "total_retailers": { + "description": "Total number of public retailers on authorized.by.", + "type": "integer" + } + }, + "required": [ + "total_brands", + "total_retailers", + "total_connections", + "generated_at" + ], + "type": [ + "object", + "null" + ] + }, + "pagination": { + "additionalProperties": false, + "description": "Pagination of this response.", + "properties": { + "page": { + "description": "Zero-based page number of this response.", + "type": "integer" + }, + "size": { + "description": "Page size used for this response.", + "type": "integer" + }, + "total_items": { + "description": "Total number of matching entries across all pages.", + "type": "integer" + }, + "total_pages": { + "description": "Total number of pages.", + "type": "integer" + } + }, + "required": [ + "page", + "size", + "total_items", + "total_pages" + ], + "type": [ + "object", + "null" + ] + }, + "retailers": { + "items": { + "additionalProperties": false, + "properties": { + "brand_count": { + "description": "Number of brands that currently authorize this retailer on authorized.by.", + "type": "integer" + }, + "details": { + "additionalProperties": false, + "description": "Extended profile details.", + "properties": { + "address": { + "type": [ + "string", + "null" + ] + }, + "categories": { + "description": "Product categories.", + "items": { + "additionalProperties": false, + "properties": { + "de": { + "description": "German text, or null.", + "type": [ + "string", + "null" + ] + }, + "en": { + "description": "English text, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "de", + "en" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "description": { + "additionalProperties": false, + "description": "Description text in German (de) and English (en); each may be null.", + "properties": { + "de": { + "description": "German text, or null.", + "type": [ + "string", + "null" + ] + }, + "en": { + "description": "English text, or null.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "de", + "en" + ], + "type": [ + "object", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "opening_hours": { + "description": "Weekly opening hours of the physical store; empty or null when unknown.", + "items": { + "additionalProperties": false, + "properties": { + "closing_hour": { + "description": "Closing time.", + "type": [ + "string", + "null" + ] + }, + "day_of_week": { + "description": "Day of the week.", + "type": [ + "string", + "null" + ] + }, + "opening_hour": { + "description": "Opening time.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "day_of_week", + "opening_hour", + "closing_hour" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "payment_methods": { + "description": "Accepted payment methods; null when unknown.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "phone": { + "type": [ + "string", + "null" + ] + }, + "registration_date": { + "description": "Date (YYYY-MM-DD) the company registered on authorized.by.", + "type": [ + "string", + "null" + ] + }, + "social": { + "additionalProperties": false, + "description": "Social media profile URLs; each may be null.", + "properties": { + "facebook": { + "type": [ + "string", + "null" + ] + }, + "instagram": { + "type": [ + "string", + "null" + ] + }, + "linkedin": { + "type": [ + "string", + "null" + ] + }, + "youtube": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "instagram", + "facebook", + "linkedin", + "youtube" + ], + "type": [ + "object", + "null" + ] + }, + "trustami": { + "additionalProperties": false, + "description": "Customer rating from Trustami; fields are null when no rating exists.", + "properties": { + "profile_url": { + "description": "URL of the rating profile, or null.", + "type": [ + "string", + "null" + ] + }, + "rating": { + "description": "Average customer rating, or null.", + "type": [ + "number", + "null" + ] + }, + "review_count": { + "description": "Number of customer reviews, or null.", + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "rating", + "review_count", + "profile_url" + ], + "type": [ + "object", + "null" + ] + }, + "tuv_certification_date": { + "description": "Date (YYYY-MM-DD) the TÜV certification was granted; null when not certified.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "address", + "phone", + "email", + "opening_hours", + "payment_methods", + "description", + "categories", + "tuv_certification_date", + "registration_date", + "trustami", + "social" + ], + "type": [ + "object", + "null" + ] + }, + "id": { + "description": "Numeric authorized.by ID. Accepted by the id_or_alias argument of the detail tools.", + "type": "integer" + }, + "logo": { + "description": "Logo image URL, or null.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Display name.", + "type": [ + "string", + "null" + ] + }, + "seal_implemented": { + "description": "Whether the authorized.by seal is live on the retailer's shop.", + "type": "boolean" + }, + "shop_url": { + "description": "Retailer online-shop URL, or null.", + "type": [ + "string", + "null" + ] + }, + "slug": { + "description": "URL-safe identifier. Accepted by the id_or_alias argument of the detail tools.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "slug", + "shop_url", + "logo", + "seal_implemented", + "brand_count", + "details" + ], + "type": "object" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "retailers", + "meta", + "pagination" + ], + "type": "object" +}
3 tool updates
- Added
get_retailer - Added
get_retailer_brands - Added
get_retailers
3 tool updates
- First observed
get_brand - First observed
get_brand_retailers - First observed
get_brands
Related MCP Connectors
Search, compare prices and find official stores across brands that sell on Shopify.
Search fashion across 1,000+ retailers; compare prices, sizes and stock by country.
Product search across online shops worldwide, plus every seller's price with a direct link.
Find brands, logos and brandmarks, and manage brand subscriptions and webhooks with Logo.dev.
Related MCP Servers
- AlicenseAqualityBmaintenanceSearch ethical, origin-verified products and brands from 30+ countries. Find Canadian, sustainable, vegan, and cruelty-free alternatives with affiliate purchase links.618 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides a multilingual, region-aware brand catalogue and click-through URL generation for MCP-compatible agents, enabling commerce recommendations with attribution tracking.MIT
- AlicenseAqualityAmaintenanceEnables AI agents to search and compare home appliances, TVs, electronics and tools on the Iranian shop Baneh, find the cheapest in-stock matches, browse by category or brand, and read product details and buyer reviews. Runs read-only with no authentication, with prices returned in Toman.7MIT
- FlicenseNot gradedqualityCmaintenanceDTC competitor intelligence: catalog snapshots, price history, cross-brand product comparison, and drop/restock detection for 84 Shopify-powered brands. Pay-per-call via Apify.-
Glama MCP Gateway
Add one secure layer between your agents and this server.