FeedShine: Shopify Google Shopping Feed
Server Details
Grow sales on Google and beyond. Fix your Shopify product feeds and optimize every field in chat.
- Status
- Healthy
- Uptime
- 85.4% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 15 tools
Most tools target clearly distinct resources and the descriptions even cross-reference each other (e.g. list_section_products vs optimize_next, list_products vs list_product_issues vs list_section_products). The main risk is the near-identical pair set_product_override vs set_product_overrides, distinguished only by pluralization and payload shape, which an agent could easily misselect.
All names are snake_case verb_noun (get_, list_, set_, update_, run_, preview_, optimize_) and follow a predictable pattern. The only deviations are the singular/plural set_product_override(s) pair and the slightly awkward set_products_included, which mix the override-batch and include-batch naming styles.
Fifteen tools is at the top of the well-scoped range but each one earns its place: reads (feed list/get, schema, guides, search queries), product inspection, bulk and single actions, verification, and a workflow driver. Nothing appears redundant or padded for the stated Shopify feed-management purpose.
The surface covers the core lifecycle well: inspect feeds/settings, read rules, edit mappings, override products individually or in bulk, verify output, and regenerate. Gaps are minor (no explicit create/delete feed or store-wide shared-rule editing, which the descriptions defer to the app UI), leaving workable rather than blocking holes.
Available Tools
15 toolsget_feedGet feed configurationARead-onlyIdempotentInspect
Get one feed's full configuration: its saved settings, the rule behind every attribute, the file URL and the latest run. Settings are grouped in tabs (metadata, target, basic, media, identifiers, detail, label, shipping, others, custom, supplemental, inventory, reviews).
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | Yes | Feed id from list_feeds |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Feed id |
| gzip | No | Whether the file is served gzipped |
| name | Yes | Merchant-facing feed name |
| type | No | PRIMARY, SUPPLEMENTAL, INVENTORY or REVIEWS |
| group | No | The product group this feed belongs to |
| format | No | XML, TSV, CSV or API |
| enabled | No | False when the feed is paused and will not run |
| fileUrl | No | Public feed URL, null for API feeds |
| marketId | No | Shopify market this feed is bound to, if any |
| settings | No | Stored settings as the merchant saved them |
| latestRun | No | Most recent generation run for this feed |
| marketplace | No | Channel this feed targets, for example google or meta |
| attributeRules | No | Current mapping rules for all mappable attributes, matching what the feed editor shows |
| masterDefaulted | No | Attributes sent from the store's master field of the same name, because this feed has no rule of its own for them |
| settingsOptions | No | Allowed values for every enumerated settings field, keyed tab.field, for building an update_feed_settings call |
| explicitlyMapped | No | Attributes with a stored mapping rather than the smart default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds the response shape (tab grouping, per-attribute rules, latest run), which is useful context but largely duplicates what the output schema already provides.
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?
Two sentences, front-loaded with the core purpose before the content enumeration. The long tab list is dense but genuinely descriptive of the response, so it earns its space without 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?
With an output schema present, return values need not be re-explained, and annotations cover the safety profile, so the description is nearly sufficient. The only shortfall is the absence of any routing guidance toward list_feeds or update_feed_settings.
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?
There is a single parameter with 100% schema description coverage ('Feed id from list_feeds'), so the schema carries parameter semantics entirely. The description adds no format, sourcing, or edge-case detail about feedId, making the baseline 3 correct.
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 one feed's full configuration') and enumerates the payload contents (saved settings, per-attribute rules, file URL, latest run). The singular 'one feed's' implicitly distinguishes it from the sibling list_feeds and from the mutation sibling update_feed_settings.
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 is only implied: the schema note 'Feed id from list_feeds' hints that list_feeds is the discovery step, but the description never states when to call this versus list_feeds or update_feed_settings, nor any prerequisites. No exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mapping_schemaGet the attribute mapping vocabularyARead-onlyIdempotentInspect
The rule vocabulary for feed attribute mappings: which attributes accept a mapping, the product fields a rule can read (including the store's master fields as master.), the condition operators, the value sources (field, static, combine, lookup, extract, liquid), the limits, and a worked example. A mapping is how ONE update_feed_settings call fixes a field for the entire catalog, including filling values that are missing (condition is_empty plus a fallback value source). Read this before proposing any mappings.attributes change. No arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| shape | No | Where a rule set is stored and how rule order resolves |
| fields | No | Product fields a rule can read |
| limits | No | Maximum rules per attribute and conditions per rule |
| example | No | A worked mapping to copy the shape from |
| repeated | No | Attributes that take one entry per line |
| operators | No | Condition operators a rule can use |
| attributes | No | Every attribute that accepts a mapping rule |
| unmappable | No | Attributes that are computed and cannot be mapped |
| masterFields | No | The store's master fields by name, flagged when one is an attribute's store-wide default |
| optionFields | No | How to reference a product's own option names |
| valueSources | No | The value-source kinds and their arguments |
| masterFieldsNote | No | How a rule references a master field |
| structuredSyntax | No | Colon syntax for grouped attributes |
| valuelessOperators | No | Operators that take no comparison value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds useful context beyond that: 'No arguments,' the exact shape of the returned vocabulary, and the worked-example coverage. It stops short of noting caching or size characteristics, so it lands just under full marks.
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 a single dense paragraph with no filler sentences. The mid-sentence enumeration partially duplicates the output schema, but each item helps an agent decide whether this reference is worth fetching.
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 no-argument reference tool with an output schema present, the description conveys everything needed: what to expect back, when to read it, and how it connects to the mapping-writing flow. Nothing an agent needs before calling 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?
Zero parameters, which is the baseline-4 case. The description's 'No arguments' is a redundant confirmation of what the empty schema already shows, adding no new semantics.
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 resource — the rule vocabulary for feed attribute mappings — and enumerates its exact contents (attributes, product fields, operators, value sources, limits, example). An agent can distinguish this reference tool from the sibling mutation tools like update_feed_settings 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?
Explicitly instructs 'Read this before proposing any mappings.attributes change,' naming the prerequisite condition. It also explains the relationship to update_feed_settings (one call fixes a field for the whole catalog), so the agent knows when this lookup precedes that write.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_optimization_guideGet the optimization playbookARead-onlyIdempotentInspect
The app's feed optimization playbook. Without section, lists every section with its summary and current affected count so you can pick where to start. With a section id (issues, titles, descriptions, images, identifiers, categories, price-availability, details, bundles, shipping, campaigns), the full guide: rules, checklist, examples, and which attributes to change. Read the relevant guide BEFORE proposing changes to any feed attribute it covers.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | Omit for the section overview, or pass one section id for its full playbook |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| guide | No | The full playbook for the requested section |
| sections | No | Every section with its summary and affected count |
| issueGroups | No | Item-level issue codes, on the issues section |
| fieldWideFix | No | When to prefer one mapping over per-product overrides |
| accountIssues | No | Account-level issues, on the issues section |
| affectedCount | No | Products the requested section currently flags |
| totalProducts | No | Products in the feed the counts were taken against |
| countsIssueRows | No | Only on the issues section: affectedCount counts issue rows, not products. list_section_products and optimize_next count sample products |
| mappableAttributes | No | Attributes in this section that a mapping rule can fix catalog-wide |
| searchDataAvailable | No | False when Search Console data has not been synced, so title advice is generic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely useful behavior: the overview mode returns per-section summaries and current affected counts, and the detailed mode returns rules, checklist, examples, and target attributes. It stops short of describing any pagination or limits, but for a static reference tool that is minor.
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?
Three sentences, front-loaded with the two-mode behavior, then the payload contents, then the actionable instruction. No filler.
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 a zero-required single-enum parameter, an existing output schema, and full annotation coverage, the description supplies everything an agent needs: mode selection, payload expectations, and the pre-change reading requirement.
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 enum is fully documented, so the baseline is 3. The description goes beyond the schema by explaining the semantic consequence of omitting the parameter versus passing one, which tells the agent how the mode switches. The enumerated section ids largely duplicate the enum, adding little extra.
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 ('the app's feed optimization playbook') and clearly delineates the two operating modes. It is readily distinguishable from siblings like get_feed or optimize_next.
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 tells the agent what omitting the section does ('so you can pick where to start') and gives a hard directive: 'Read the relevant guide BEFORE proposing changes to any feed attribute it covers.' This is a clear when-to-use rule with a sequencing constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_queriesGet Google Search Console queriesARead-onlyIdempotentInspect
Lifetime Google Search Console query data for product pages, from the copy the app imports when the merchant syncs search data. With productId, the queries that product ranks for (clicks, impressions, position) so its title can be aligned to real demand. Without productId, the store's top title/query mismatch opportunities, highest impressions first. Fails with instructions when Search Console isn't connected or synced.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return, 1 to 100 | |
| feedId | No | Count this feed's title overrides. Defaults to the store's primary feed | |
| productId | No | Product id from list_products or optimize_next |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| queries | No | That product's queries with clicks, impressions and position |
| productId | No | Echoed back when the call was scoped to one product |
| topOpportunities | No | Products whose highest-impression query has words missing from the title |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe, idempotent, non-destructive read. The description adds genuine context beyond them: the data comes from an imported copy created at merchant sync time, and the tool 'fails with instructions' when Search Console isn't connected. It doesn't cover freshness/staleness or pagination, but the failure path is valuable disclosure.
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?
Three tight sentences, front-loaded with the data source, then the two branches, then the failure case. Every sentence earns its place with no redundancy.
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, return values needn't be explained, and the description covers both modes, the data origin, and the failure condition. Nothing operationally relevant to invoking this 3-parameter tool 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, but the description meaningfully interprets productId's presence vs absence (product-level ranking queries vs store-wide mismatch opportunities) and clarifies the ordering (highest impressions first). It does not explain the feedId title-override behavior, keeping it below 5.
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 ('Lifetime Google Search Console query data for product pages') and clearly delineates its two operating modes. An agent can distinguish it from siblings like optimize_next or list_products without opening the 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 conditions for each mode: supply productId to get the queries a product ranks for, or omit it for store-wide title/query mismatch opportunities. It also states what happens on failure (Search Console not connected/synced). It stops short of naming sibling alternatives or exclusions, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedsList product groups and feedsARead-onlyIdempotentInspect
List every product group and its feeds (type, format, enabled state, market binding) with each feed's latest generation run. Start here to find feed ids. Each feed carries its market name and locale, so feeds serving different languages are told apart before any text is written to them.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| groups | Yes | One entry per product group: groupId, groupName, collectionGids and its feeds, each with its marketName, marketLocale and latestRun |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description still adds real value by disclosing the market name/locale distinction so feeds for different languages can be told apart before writing text to them.
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?
Three sentences, zero filler, and front-loaded with the resource scope before the routing guidance and the locale caveat. Every sentence carries information an agent needs.
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?
An output schema exists and annotations cover safety, so return values and permissions need no explanation here. The description supplies the scope, the entry-point role, and the locale nuance, which is everything an agent needs to call a zero-parameter list tool correctly.
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?
The tool takes zero parameters, so per the rubric the baseline is 4. No parameter meaning is needed and the description correctly spends no words on inputs.
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+resource ('List every product group and its feeds') and enumerates the returned fields (type, format, enabled state, market binding, latest generation run). This clearly distinguishes it from get_feed (single feed) and the other list_* siblings.
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?
'Start here to find feed ids' gives explicit entry-point guidance and implies the relationship to get_feed/run_feed which consume those ids. There is no explicit when-not or named alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_product_issuesList Merchant Center issuesARead-onlyIdempotentInspect
Google Merchant Center issues for this store, as of the app's last nightly sync: one row per issue code with severity, affected product counts, sample products and the destinations it applies to. Account-level issues are included. Covers the whole account (file feeds and the native channel too). Call this FIRST when the merchant asks why products are disapproved or wants to fix issues. Then inspect specific products with preview_product and fix via set_product_override or update_feed_settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| itemIssues | No | One row per issue code with severity, product count and up to 10 sample products |
| refreshedAt | No | When the app last synced issues from Merchant Center, null if never |
| accountIssues | No | Issues affecting the whole Merchant Center account |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds traits the annotations cannot express: data freshness ('as of the app's last nightly sync') and aggregation granularity ('one row per issue code', account-level issues included). The staleness caveat materially changes how an agent should qualify its answer.
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?
Three tight sentences, front-loaded with the scoping constraint and the first-call instruction. The middle sentence enumerates return fields (severity, counts, sample products, destinations) that the output schema already carries, which is mildly redundant, but it supports the routing decision.
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?
An output schema exists so return values need no explanation, and the description still supplies the sync-freshness caveat, the account-level coverage, and a complete follow-up workflow. Nothing an agent needs to call and act on this tool 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?
The tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description correctly implies whole-account scope rather than suggesting unimplemented filters.
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 ('Google Merchant Center issues for this store') plus exact output granularity ('one row per issue code with severity, affected product counts, sample products and destinations'). It also scopes coverage explicitly (account-level issues, file feeds and native channel), which distinguishes it from list_products, list_feeds, and get_feed.
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 an explicit entry condition ('Call this FIRST when the merchant asks why products are disapproved or wants to fix issues') and names the downstream alternatives with sequencing: preview_product to inspect, set_product_override or update_feed_settings to fix. An agent knows both when to pick this tool and what to do next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsList feed productsARead-onlyIdempotentInspect
List products a feed covers, paginated, with per-product include/exclude state, attribute overrides (merged, plus storeOverrides and feedOverrides apart), stock, tags, the first variants' SKU, barcode, price and weight, and (API feeds) Google item status. filter: all | excluded | customized.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number, default 1 | |
| feedId | Yes | Primary or supplemental feed id, from list_feeds | |
| filter | No | all (default), excluded (left out of the feed), or customized (has overrides) | |
| search | No | Matches title, handle, vendor, SKU, or barcode | |
| pageSize | No | Rows per page, 1 to 50, default 25 |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | The page number returned |
| rows | No | The page of products, each with its overrides, stock, tags and first variants |
| total | No | Total products matching the filter across all pages |
| bounded | No | True when the feed's group limits it to chosen collections |
| pageSize | No | Rows per page used for this result |
| isApiFeed | No | True when rows carry Google item status from Merchant API pushes |
| groupError | No | True when none of the group's collections have synced yet, so the list is empty |
| totalPages | No | Total number of pages available |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered; the description adds value beyond that by disclosing pagination and the exact return shape (include/exclude state, merged vs. separate storeOverrides/feedOverrides, stock, tags, variant SKU/barcode/price/weight, API-feed Google status). It does not cover default page size behavior or limits, but with annotations present this is solid context.
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 the core action ('List products a feed covers, paginated') and every clause thereafter enumerates a distinct returned field or the filter options, so little is wasted. The single run-on sentence plus trailing fragment is dense but not padded.
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 return format needn't be explained, yet the description still describes it, and annotations plus full parameter documentation leave no operational gaps. The only shortfall is the absence of sibling-routing guidance for a large sibling set.
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 all five parameters are already documented in the schema. The description only restates the filter enum values (all | excluded | customized) and adds no format or semantic detail beyond that, 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?
States a specific verb (List) and resource (products a feed covers) and enumerates exactly which fields are returned, so an agent can distinguish it from siblings like list_section_products or list_product_issues. The scope is unambiguous without opening the 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?
Usage is implied via 'products a feed covers' and the filter enum, but there is no explicit when-to-use guidance or routing against alternatives such as list_section_products or get_feed. The filter hint duplicates what the schema already states rather than adding selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_section_productsList the products a section flagsARead-onlyIdempotentInspect
A page of the products one optimization section flags (up to 50), each with the machine reason it was flagged. No per-product enrichment, so it is cheap to scan a whole field at once. Use this BEFORE optimize_next on any catalog big enough that fixing products one by one is not realistic: read a page, find the cause the products share, and fix the field once with update_feed_settings. On the issues section the rows are the sample products Google named, worst issue first. list_product_issues gives each code's full count and documentation. Paginate with nextCursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Products per page, 1 to 50 | |
| cursor | No | nextCursor from the previous call | |
| feedId | No | Defaults to the store's primary feed | |
| section | Yes | Which optimization section to list |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| feedId | No | The feed the list was computed against |
| section | No | The section listed |
| products | No | The page of flagged products, each with its reason |
| attributes | No | The feed attributes this section covers |
| nextCursor | No | Pass back to get the next page, null at the end |
| affectedCount | No | Products this section flags in total |
| totalProducts | No | Products in the feed |
| mappedAttributes | No | Section attributes this feed already maps, so some listed products may already be filled |
| suggestedActions | No | Keyed by reason: how products flagged for it can be fixed (override, mapping, exclude, edit_in_shopify) and with which tool |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds real behavioral context beyond them: no per-product enrichment and therefore cheap whole-field scanning, page cap of 50, worst-issue-first ordering on the issues section, and cursor-based pagination. It stops short of describing the reason field's format or failure modes, so not a 5.
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 what the tool returns, then when to use it, then section-specific behavior and pagination. Four sentences, each carrying distinct information; no restatement of the title or schema.
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?
An output schema exists, so return shapes need not be re-explained. Given the 4-param, enum-driven tool, the description covers purpose, selection criteria, workflow, sibling alternatives, ordering, and pagination — everything an agent needs to call it correctly.
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 still adds meaning: 'up to 50' reinforces the limit cap, 'Paginate with nextCursor' ties cursor to the response field, and it explains that section='issues' yields Google's named sample rows ordered worst-first — section-dependent behavior the enum alone does not convey.
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+resource (list a page of products flagged by one optimization section) and scopes it precisely: up to 50, with the machine reason, no enrichment. It explicitly distinguishes itself from siblings list_product_issues (counts/docs per code) and optimize_next (one-by-one fixing), so an agent can route without opening schemas.
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 an explicit when-to-use ('BEFORE optimize_next on any catalog big enough that fixing products one by one is not realistic'), a three-step workflow (read a page, find the shared cause, fix once with update_feed_settings), and names the sibling that covers the alternative need (list_product_issues). Nothing 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.
optimize_nextGet the next product to optimizeARead-onlyIdempotentInspect
The one-product-at-a-time optimization loop, for small catalogs and for the exceptions left after a field-wide fix. Returns the next product needing work in a section with everything required to propose a fix: why it's flagged, its current mapped feed output, its top search queries (null when Search Console isn't synced), and the section's rules. Propose a change, get the merchant's approval, apply with set_product_override (confirm: true), verify with preview_product, then call this again with the returned cursor. done: true means the section is finished. On a large catalog, prefer list_section_products plus one update_feed_settings change over hundreds of overrides.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | cursor from the previous optimize_next result | |
| feedId | No | Defaults to the store's primary feed | |
| section | Yes | Which optimization section to walk |
Output Schema
| Name | Required | Description |
|---|---|---|
| done | No | True when the section has nothing left to walk |
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| guide | No | The section's rules, so a fix can be proposed in one call |
| cursor | No | Pass back to advance, or unchanged to skip |
| feedId | No | The feed the walk is computed against |
| context | No | Why it is flagged: the reason, plus the query or issue behind it |
| product | No | The next product: id, handle and title |
| excluded | No | When the feed drops the product, the reasons counted by variant |
| remaining | No | Products still flagged in this section |
| sourceFields | No | The Shopify fields a rule could read: tags and the first variants' SKU, barcode, price and weight |
| alreadyInFeed | No | True when the feed's mapped output already carries the attribute behind the flag, so there is nothing to change |
| searchQueries | No | Its top search queries, null when none are synced |
| suggestedAction | No | How this product can be fixed: the action, the tool that carries it, and what to tell the merchant |
| outsideFeedGroup | No | True when this product is outside the feed's product group, so this feed never sends it and an override here would do nothing |
| currentAttributes | No | That product's current mapped feed output for the section's attributes, null when the feed drops it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), and the description adds behavior annotations cannot express: the cursor-chaining loop, the done:true termination signal, and the fact that top search queries are null when Search Console isn't synced. That null-handling caveat and the loop mechanics are exactly the kind of context that prevents an agent from stalling or misreading an empty field.
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?
It is dense and somewhat long, but every sentence carries load: loop scope first, payload contents next, workflow, termination, then the large-catalog alternative. Front-loading the tool's identity before the workflow detail keeps it easy to scan despite the length.
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?
An output schema exists, so return values need not be explained, yet the description still characterizes the payload well enough to be actionable. Combined with the workflow, termination signal, and large-catalog escape hatch, nothing an agent needs to drive this loop 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%, so the schema already documents cursor provenance, the feedId default, and the full section enum. The description reinforces cursor chaining ('call this again with the returned cursor') and the section walk but adds no syntax or format detail beyond the schema, so the baseline of 3 is appropriate.
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?
The description states a specific verb and resource ('Returns the next product needing work in a section') and explicitly frames the tool as the one-product-at-a-time loop, which immediately distinguishes it from the batch-oriented siblings. It names the exact payload the call returns, so an agent knows precisely what this tool yields versus what list_section_products yields.
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?
It gives explicit when-to-use conditions ('for small catalogs and for the exceptions left after a field-wide fix') and an explicit when-not with the named alternative ('On a large catalog, prefer list_section_products plus one update_feed_settings change over hundreds of overrides'). It also lays out the full surrounding workflow with the sibling tools to call between iterations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_productPreview a product's feed outputARead-onlyIdempotentInspect
Run the real feed mapping pipeline for ONE product and return the exact items Google would receive, including overrides and market prices. Use after edits to verify the output.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Variant page, 10 items per page, default 1 | |
| feedId | Yes | Primary or supplemental feed id, from list_feeds | |
| productId | Yes | Product id from list_products |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| page | No | Variant page returned |
| items | No | The exact feed rows this product produces |
| errors | No | Mapping errors hit while building the rows |
| inGroup | No | False when the product sits outside this feed's product group, so the feed never carries it |
| product | No | The product being previewed |
| excluded | No | Variants the feed leaves out, counted by reason (missing_image, out_of_stock, ...) |
| itemMeta | No | Variant and product behind each row, in the same order |
| pageSize | No | Rows per page |
| totalItems | No | Rows the product produces across all pages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavior beyond that: this executes the actual production mapping pipeline (not a mock) and the output includes overrides and market prices, which is meaningful context an agent could not infer from the annotations.
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?
Two tight sentences with zero filler; the high-value scope and return-content information is front-loaded before the usage hint.
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?
An output schema exists, so return values needn't be enumerated, and the description still characterizes the payload (exact Google items, overrides, market prices). The only minor gap is variant pagination behavior, which the schema already covers via the page parameter.
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% – feedId, productId, and page are all documented in the schema, including pagination size and defaults. The description adds no additional parameter meaning, so 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 concrete verb+resource: it runs the real feed mapping pipeline for one product and returns the exact items Google would receive. The emphasis on 'ONE product' implicitly separates it from the feed-wide run_feed sibling, but it never names an alternative, leaving the differentiation to inference.
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 situational trigger: 'Use after edits to verify the output.' That tells the agent when to reach for it, but there is no explicit when-not guidance and no named alternative (e.g., use run_feed for a full-feed validation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_feedRegenerate a feed nowAIdempotentInspect
Queue a full regeneration of one feed now. Cheap and idempotent (no confirm needed) but unnecessary after update_feed_settings or override changes, which queue a run automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | Yes | Feed id from list_feeds. The feed must be enabled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| queued | No | True when a regeneration run was queued |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so 'idempotent' partly restates structured data. The description nonetheless adds genuinely new behavioral context: it is cheap enough that no user confirmation is required, and it duplicates work that other tools trigger implicitly. It does not mention the 'feed must be enabled' precondition, though the schema covers that.
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?
Two tight sentences with no filler; the action is front-loaded and the caveat about automatic runs follows immediately so the agent reads it before invoking. No restructuring would improve it.
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 single-parameter, idempotent trigger tool with an output schema and full annotation coverage, the description supplies everything missing from structured data: cost, lack of confirmation, and its redundancy relative to sibling mutations. Nothing an agent needs to invoke it correctly is absent.
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?
Only one parameter (feedId) with 100% schema description coverage, including its source (list_feeds) and a precondition (must be enabled). The description adds nothing beyond the schema, which is the expected baseline when the schema does the work.
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 ('Queue a full regeneration of one feed') plus timing ('now'), which cleanly separates it from read-oriented siblings like get_feed and list_feeds. It also distinguishes itself from update_feed_settings and the override tools by framing itself as the manual trigger for the same run.
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 tells the agent when NOT to call it ('unnecessary after update_feed_settings or override changes, which queue a run automatically') and names the sibling tools responsible for that overlap. This is exactly the routing information an agent needs to avoid redundant runs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_product_overrideOverride one product's attributesADestructiveIdempotentInspect
Set one product's attribute overrides and/or include state, for every feed (omit feedId) or for one feed. Overrides replace mapped attribute values on every item of the product, and a feed's own override wins over the store-wide one per attribute. An empty string sends nothing for that attribute, and omitting one the product already has returns it to its mapped value. The map you send REPLACES the product's whole override map, so send every attribute you want kept. The preview lists the ones it would drop under removes, and current shows what is stored today. This tool previews by default: called without confirm, it returns the proposed change and applies NOTHING. Show the merchant the proposal, then call again with confirm: true to apply.
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | No | Feed id from list_feeds. Omit to write the override every feed inherits. | |
| confirm | No | Omit or false to preview. True applies the change. | |
| included | No | Include this product. Omit to keep its current state. | |
| overrides | No | Full replacement override map for this product (max 50 attributes). Include every attribute that should stay, since anything left out goes back to its mapped value. | |
| productId | Yes | Product id from list_products |
Output Schema
| Name | Required | Description |
|---|---|---|
| feed | No | The feed's id and name, on a feed-scoped call |
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| scope | No | Which override layer the call addressed: one feed's row, or the row every feed inherits |
| errors | No | Reasons the save was refused |
| applied | No | True when the change was saved |
| current | No | The row this call replaces, as stored before the call |
| preview | No | True when this call only proposed the change |
| product | No | The product's id and title |
| removes | No | Attributes overridden today that this call drops, because the map replaces the stored one |
| setting | No | The saved override row, on the confirm call |
| proposed | No | Overrides this call would store, or stored |
| effective | No | What the feed emits today after merging the store-wide and feed rows, when they differ |
| overriddenBy | No | On a store-wide call, the feeds holding their own row for this product. Their values win over this write. |
| validationErrors | No | Problems that must be fixed before confirming |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the sent map REPLACES the entire override map (send every attribute you want kept), empty string sends nothing, omitting an existing attribute reverts it to mapped value, and a feed-level override wins over the store-wide one per attribute. It also discloses the preview-by-default safety behavior, which is not expressible via the destructiveHint/idempotentHint annotations alone.
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?
Scoping is front-loaded and every sentence carries operational weight, with the confirm workflow placed last as the closing action. It is dense but slightly long; the destructive replacement warning is repeated in spirit across two clauses.
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 need not detail return values, yet it still tells the agent what the preview contains ('removes' and 'current'). Combined with the replacement, precedence, and confirm semantics, an agent has everything needed to call this correctly.
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%, so the baseline is 3, but the description adds genuinely new semantics: empty-string behavior, the per-attribute feed-vs-store precedence rule, and the fact that omitted attributes revert rather than persist. These are not spelled out 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?
States a specific verb and resource ('Set one product's attribute overrides and/or include state') and immediately scopes it by feed ('for every feed (omit feedId) or for one feed'). The singular 'one product' framing cleanly distinguishes it from the plural sibling set_product_overrides and set_products_included.
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 operational workflow: previews by default, show the merchant the proposal, then re-call with confirm:true. It does not, however, name sibling alternatives (e.g. bulk set_product_overrides) or state when to prefer this tool over them, so routing relies on inference from 'one product'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_product_overridesOverride attributes on many productsADestructiveIdempotentInspect
Set DIFFERENT attribute overrides on many products in one call (up to 200). This is the tool for a real title pass: get_search_queries gives each product its own top query and the words missing from its title, so every product needs a different string and no feed mapping can express that. Omit feedId to write once for every feed, which is the default for a title pass. Name a feed only when that feed needs its own values (another language, say). Each entry's overrides REPLACE that product's override map on the chosen layer, exactly like set_product_override, so send every attribute that should stay. The preview lists the ones each entry would drop under removes. An omitted included keeps that product's current include state. Unknown product ids are skipped and reported, not fatal. This tool previews by default: called without confirm, it returns the proposed change and applies NOTHING. Show the merchant the proposal, then call again with confirm: true to apply. One regeneration is queued for the whole batch.
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | No | Feed id from list_feeds. Omit to write the overrides every feed inherits. | |
| confirm | No | Omit or false to preview the whole batch. True applies it. | |
| products | Yes | One entry per product, up to 200 per call |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| count | No | Entries in the previewed batch |
| scope | No | Which override layer the call addressed: one feed's row, or the row every feed inherits |
| errors | No | Reasons the save was refused |
| feedId | No | The feed the batch was written against, on a feed-scoped call |
| applied | No | True when the change was saved |
| changes | No | Per-product before and after, for the merchant to approve |
| preview | No | True when this call only proposed the change |
| appliedCount | No | Products actually written on the confirm call |
| removesCount | No | Products whose entry drops overrides they hold today (each change lists them under removes) |
| outrankedCount | No | Products in a store-wide batch whose own feed row wins over this write |
| validationErrors | No | Problems that must be fixed before confirming |
| unknownProductIds | No | Ids in the preview that match no product |
| skippedUnknownProductIds | No | Ids skipped during the write because they match no product |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, but the description goes much further: replacement semantics for the override map, the requirement to resend every attribute that should stay, the removes list in the preview, unknown ids skipped and reported without failing, and a preview-by-default workflow that applies nothing without confirm. It also discloses the batch regeneration side effect. Nothing here contradicts the annotations.
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?
Dense but front-loaded: the batch scope, the title-pass use case, and feedId guidance come before the mechanics. Every sentence carries information, though the paragraph is longer than strictly necessary and could be split for scanability.
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?
An output schema exists so return internals need not be described here. The description still covers the mutation contract, preview/confirm flow, batch limits, and non-fatal error handling, which is everything an agent needs to call this destructive, batch-scoped write safely.
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, but the description adds real meaning: feedId omission writes the feed every feed inherits, confirm gates preview vs apply, and an omitted included preserves current state. This clarifies intent beyond the schema text, though the per-attribute specifics remain 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?
States a specific verb, resource, batch scope (up to 200), and the key qualifier 'DIFFERENT' overrides, which separates it from the singular sibling set_product_override. An agent can identify it without opening the 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?
Explicitly says this is 'the tool for a real title pass', explains why a feed mapping cannot substitute (each product needs a different string), and gives a clear rule for feedId: omit by default, name a feed only when that feed needs its own values. This is when-to-use, when-not, and alternative routing in one place.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_products_includedInclude or exclude products in bulkADestructiveIdempotentInspect
Bulk include or exclude products (max 1000 ids per call), from every feed (omit feedId) or from one feed. A store-wide exclusion holds in every feed until it is lifted store-wide. This tool previews by default: called without confirm, it returns the proposed change and applies NOTHING. Show the merchant the proposal, then call again with confirm: true to apply.
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | No | Feed id from list_feeds. Omit to include or exclude across every feed. | |
| confirm | No | Omit or false to preview the count. True applies the change. | |
| included | Yes | True includes the products, false excludes them | |
| productIds | Yes | Product ids from list_products, up to 1000 per call |
Output Schema
| Name | Required | Description |
|---|---|---|
| feed | No | The feed's id and name, on a feed-scoped call |
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| scope | No | Which override layer the call addressed: one feed's row, or the row every feed inherits |
| errors | No | Reasons the save was refused |
| applied | No | True when the change was saved |
| preview | No | True when this call only proposed the change |
| included | No | The include state being set |
| matchedCount | No | How many of the supplied ids exist on this store |
| productCount | No | Ids supplied, or products written on confirm |
| validationErrors | No | Problems that must be fixed before confirming |
| stillExcludedProductIds | No | Products the other layer still excludes. Inclusion is ANDed across layers, so this call cannot re-include them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/idempotent/openWorld, but the description adds the traits that actually matter to an agent: preview-by-default (applies NOTHING without confirm), the 1000-id ceiling, and that a store-wide exclusion persists in every feed until lifted store-wide. That is richer behavioral context than the annotations supply and does not contradict them.
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?
Three sentences, zero padding, front-loaded with the core action and limits before the preview-vs-apply workflow. Every clause carries operational meaning.
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 need not explain return values, and it covers the remaining gaps an agent needs: batching limit, feed scoping, preview safety, and store-wide exclusion persistence. Nothing required to call this destructive tool safely 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 the consequence of omitting feedId (applies to every feed) and the persistence semantics of an exclusion set without a feedId. The confirm preview/apply mechanic is largely restated from the schema, so it is not a full 5.
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 pair (include/exclude) on a specific resource (products), plus scope (bulk, max 1000 ids, one feed or all feeds). An agent can place this against set_product_override/set_product_overrides 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?
Gives explicit operational guidance: omit feedId for store-wide, provide it for a single feed, and call once without confirm to preview then again with confirm to apply. It does not name the sibling override tools or state when to prefer one over this, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_feed_settingsUpdate feed settingsADestructiveIdempotentInspect
Update a feed's attribute settings. Pass a PARTIAL settings object mirroring the tab shape from get_feed. Only the keys you send change. mappings.attributes merges per attribute, so you can fix one field per call without resending the others. Pass null for an attribute to drop its mapping and return it to the smart default. A mapping written here applies to this feed only and wins over the store's shared rule for that attribute. The merchant edits shared rules in the app. Call get_mapping_schema before writing a mapping. This tool previews by default: called without confirm, it returns the proposed change and applies NOTHING. Show the merchant the proposal, then call again with confirm: true to apply. Changes reach Google on the next generation run (queued automatically on save).
| Name | Required | Description | Default |
|---|---|---|---|
| feedId | Yes | Feed id from list_feeds | |
| confirm | No | Omit or false to preview. True applies the change. | |
| revision | No | The revision returned by the preview call. Pass it back on confirm so the write is refused if the merchant changed the feed in between. | |
| settings | Yes | Partial settings, e.g. { basic: { titleTemplate: "..." } } |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language result or next step, safe to read out to the merchant. |
| errors | No | Reasons the save was refused |
| applied | No | True when the change was saved |
| changed | No | False when the proposal matches the current settings |
| changes | No | One entry per setting this call would change or changed |
| preview | No | True when this call only proposed the change |
| revision | No | Pass this back on the confirm call so a concurrent merchant edit is not overwritten |
| validationErrors | No | Problems that must be fixed before confirming |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: preview-by-default with nothing applied, merge-per-attribute semantics so one field can be fixed per call, precedence over the store's shared rule, conflict protection via the revision token, and the fact that changes only reach Google on the next generation run. The destructiveHint=true annotation is reconciled by the preview gate, not contradicted.
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 and ordered sensibly from payload shape to merge semantics to the preview/confirm gate. It is on the long side, and the preview behavior is restated in both the description and the confirm parameter's schema text, which is mild redundancy for a safety-critical point.
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 nested-object mutation tool with an output schema present, the description covers everything an agent needs: payload shape, merge/drop semantics, scoping and precedence, the two-phase confirm flow, the revision guard, and downstream propagation timing. No return-format explanation is needed.
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 already 100%, so the schema itself documents confirm and revision. The description still adds meaning the schema does not carry: that a null attribute value drops the mapping and reverts it to the smart default, and that mappings are feed-scoped and outrank shared rules. That is real added value above the 3 baseline.
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?
Opens with a specific verb and resource ('Update a feed's attribute settings') and immediately characterizes the payload shape ('PARTIAL settings object mirroring the tab shape from get_feed'). It is clearly distinguishable from siblings like get_feed, list_feeds, and the set_product_override family.
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 an explicit ordered workflow (preview first, show merchant, then call again with confirm: true) plus two named prerequisites: call get_mapping_schema before writing a mapping, and fetch the tab shape from get_feed. It also states the exact condition for dropping a mapping (pass null).
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.
15 tool updates
- First observed
get_feed - First observed
get_mapping_schema - First observed
get_optimization_guide - First observed
get_search_queries - First observed
list_feeds - First observed
list_product_issues - First observed
list_products - First observed
list_section_products - First observed
optimize_next - First observed
preview_product - First observed
run_feed - First observed
set_product_override - First observed
set_product_overrides - First observed
set_products_included - First observed
update_feed_settings
Publisher details
- Operator
- Digital Darts · Publisher source
- Operator website
- https://feedshine.app
- Vendor relationship
- First-party
- Documentation
- https://feedshine.app/help/connect-ai-assistants
- Trust center
- Not available
- Restrictions
- Requires a Shopify store with the FeedShine app installed on a paid plan. Each connection is approved in the app with a single-use connect code that expires after 10 minutes. No regional limits.
Related MCP Connectors
Preview-first feed optimization for retailers and agencies: audit, fix and serve product feeds.
All-in-one Shopify SEO. Rank on Google and in AI search. Find what's broken and fix it in chat.
Check if a product feed is ready for AI shopping (ChatGPT, Gemini, AI Mode): score, gaps, fixes.
Let your AI manage WooCommerce and Shopify stores: products, SEO, descriptions and images.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables reading products, checking approval statuses, and analyzing feeds across multiple Google Merchant Center accounts via natural language.69 npmMIT
- AlicenseNot gradedqualityBmaintenanceCreate, launch, and manage Meta + Google ads from Claude and ChatGPT. Analytics, strategy, and autopilot automation for any store.1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables GEO auditing and optimization for Shopify stores, including GEO score, AI readiness checks, and actionable recommendations.20 npmMIT

Presso MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceConnects e-commerce and marketing data sources like Shopify, GA4, Google Ads, and Meta Ads to AI assistants, enabling natural language queries about store performance, ad campaigns, and customer behavior.11 npm2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.