Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Screenshot one store page in a real browser on desktop and/or mobile and return the images. Pass `draft` to see a Fudge draft. `fullPage` captures top to bottom. Takes 15–60 seconds; up to 50 captures per store per day.
A store URL or path, e.g. / or /products/blue-runner. Defaults to the home page, or with `draft` to the page the draft is about.
A draft’s fudge://project/… ref: capture the page as that draft shows it. Staged product and page content changes appear only on Fudge’s review page, not here.
The connected store to use. Omit when only one is connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http fudge https://mcp.fudge.ai/mcp
Screenshot one store page in a real browser on desktop and/or mobile and return the images. Pass `draft` to see a Fudge draft. `fullPage` captures top to bottom. Takes 15–60 seconds; up to 50 captures per store per day.
| Argument | Type | Description |
|---|---|---|
| page | string | A store URL or path, e.g. / or /products/blue-runner. Defaults to the home page, or with `draft` to the page the draft is about. |
| draft | string | A draft’s fudge://project/… ref: capture the page as that draft shows it. Staged product and page content changes appear only on Fudge’s review page, not here. |
| store | string | The connected store to use. Omit when only one is connected. |
| device | string | |
| fullPage | boolean |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "string",
"maxLength": 2000,
"description": "A store URL or path, e.g. / or /products/blue-runner. Defaults to the home page, or with `draft` to the page the draft is about."
},
"draft": {
"type": "string",
"maxLength": 200,
"description": "A draft’s fudge://project/… ref: capture the page as that draft shows it. Staged product and page content changes appear only on Fudge’s review page, not here."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"device": {
"enum": [
"desktop",
"mobile",
"both"
],
"type": "string",
"default": "both"
},
"fullPage": {
"type": "boolean",
"default": false
}
}
}Check catalogue data coverage across published products, collections, pages and articles: taxonomy, SEO fields, product type, vendor, description, images, alt text and optionally GTIN and MPN. Without `type`, totals and per-field coverage; with `type`, the items missing fields, a page at a time. The first call scans the live catalogue and can return status "scanning". Results are kept for an hour.
| Argument | Type | Description |
|---|---|---|
| type | string | List this type’s offenders instead of the summary. |
| limit | integer | |
| store | string | The connected store to use. Omit when only one is connected. |
| offset | integer | |
| missing | string | With type: only items missing this field, named as in the summary, e.g. "Meta description". |
| refresh | boolean | Rescan instead of reusing this hour’s result. Only after the merchant changed catalogue data. |
| includeProductIdentifiers | boolean | Also check GTIN/barcode and MPN on products. A separate, slower scan. |
Check one live store page’s server HTML for SEO and structured data: title, meta description, canonical, noindex, headings, Open Graph, JSON-LD, lang, viewport, image alt text, mixed content and word count.
| Argument | Type | Description |
|---|---|---|
| page | string | A store URL or path, e.g. / or /products/blue-runner. |
| store | string | The connected store to use. Omit when only one is connected. |
| domain | string | The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "string",
"default": "/",
"maxLength": 2000,
"description": "A store URL or path, e.g. / or /products/blue-runner."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"domain": {
"type": "string",
"description": "The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store."
}
}
}Measure a store page with Google PageSpeed Insights: Lighthouse score and lab metrics, real-visitor Core Web Vitals and the largest improvement opportunities. Each device takes 10–30 seconds; results are cached for an hour. On a password-protected store, only real-visitor data is available.
| Argument | Type | Description |
|---|---|---|
| page | string | A store URL or path, e.g. / or /products/blue-runner. |
| store | string | The connected store to use. Omit when only one is connected. |
| device | string | |
| domain | string | The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "string",
"default": "/",
"maxLength": 2000,
"description": "A store URL or path, e.g. / or /products/blue-runner."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"device": {
"enum": [
"mobile",
"desktop",
"both"
],
"type": "string",
"default": "both"
},
"domain": {
"type": "string",
"description": "The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store."
}
}
}Check the live store’s crawlability for search and AI: robots.txt rules, /llms.txt, sitemap.xml, password protection and whether products are publicly reachable.
| Argument | Type | Description |
|---|---|---|
| store | string | The connected store to use. Omit when only one is connected. |
| domain | string | The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"domain": {
"type": "string",
"description": "The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store."
}
}
}Create a link the merchant opens to connect another Shopify store. Use when they ask to add a store. The link works once within 10 minutes.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Create a new blog article in a Fudge draft. It can be previewed in the draft and goes live when the merchant publishes.
| Argument | Type | Description |
|---|---|---|
| draft* | string | The draft’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
| article* | object |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"article"
],
"properties": {
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"article": {
"type": "object",
"required": [
"title",
"blogId"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"blogId": {
"type": "string",
"description": "GID of the blog to publish the post to at publish time (e.g. \"gid://shopify/Blog/123\"). Read `.skills/blog/index.md` for available blogs and their GIDs."
}
}
}
}
}Create a new hidden collection in a Fudge draft. It is deleted if the draft is discarded and goes live when the merchant publishes. Use only when the merchant asks.
| Argument | Type | Description |
|---|---|---|
| draft* | string | The draft’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
| collection* | object |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"collection"
],
"properties": {
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"collection": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"handle": {
"type": "string",
"description": "URL handle; derived from the title when omitted."
},
"products": {
"type": "array",
"items": {
"type": "string"
},
"description": "Product ids to include manually."
},
"matchType": {
"enum": [
"ANY",
"ALL"
],
"type": "string",
"description": "Whether products must match any or all conditions."
},
"sortOrder": {
"enum": [
"ALPHA_ASC",
"ALPHA_DESC",
"BEST_SELLING",
"CREATED",
"CREATED_DESC",
"MANUAL",
"MOST_RELEVANT",
"PRICE_ASC",
"PRICE_DESC"
],
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"relation",
"values"
],
"properties": {
"id": {
"type": "string"
},
"field": {
"enum": [
"tag",
"title",
"type",
"vendor",
"category",
"status",
"variantTitle",
"price",
"compareAtPrice",
"weight",
"inventory",
"metafield",
"unsupported"
],
"type": "string"
},
"values": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
},
"relation": {
"type": "string"
},
"matchType": {
"enum": [
"ANY",
"ALL"
],
"type": "string",
"description": "For multi-value conditions: match any or all values."
},
"definition": {
"type": "string",
"description": "metafield conditions only: the metafield definition as \"namespace.key\"."
}
},
"additionalProperties": false
},
"description": "Smart-collection rules, e.g. [{field: \"tag\", relation: \"TAGGED_WITH\", values: [\"sale\"]}]. Omit for a manual collection."
},
"templateSuffix": {
"type": "string"
},
"descriptionHtml": {
"type": "string"
}
}
}
}
}Create a new Shopify page in a Fudge draft, optionally with its own template. It can be previewed in the draft and goes live when the merchant publishes.
| Argument | Type | Description |
|---|---|---|
| page* | object | |
| draft* | string | The draft’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"page"
],
"properties": {
"page": {
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"minLength": 1
},
"createCustomTemplate": {
"type": "boolean",
"default": true,
"description": "Create a fresh custom template for this page (default true). False uses the default page template; assign an existing template afterwards with edit_entities on templateSuffix."
}
}
},
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Create a new hidden product in a Fudge draft, with options, variants, prices and media. It is deleted if the draft is discarded and becomes active when the merchant publishes. Use only when the merchant asks.
| Argument | Type | Description |
|---|---|---|
| draft* | string | The draft’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
| product* | object |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"product"
],
"properties": {
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"product": {
"type": "object",
"required": [
"title"
],
"properties": {
"seo": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
}
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"alt": {
"type": "string"
}
}
},
"description": "Existing Shopify file GIDs (e.g. from media uploads) to attach as product media."
},
"title": {
"type": "string",
"minLength": 1
},
"handle": {
"type": "string",
"description": "URL handle; derived from the title when omitted."
},
"vendor": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"values"
],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"values": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
}
}
},
"maxItems": 3,
"description": "Product options (max 3), e.g. [{name: \"Size\", values: [\"S\", \"M\"]}]. Omit for a single-variant product."
},
"category": {
"type": "string",
"description": "Shopify taxonomy category GID (browse `.taxonomy`)."
},
"giftCard": {
"type": "boolean",
"description": "Gift-card product — set only at creation, immutable afterwards."
},
"variants": {
"type": "array",
"items": {
"type": "object",
"required": [
"options"
],
"properties": {
"sku": {
"type": "string"
},
"price": {
"type": "string",
"description": "Decimal string in the shop currency, e.g. \"19.99\"."
},
"barcode": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "One value per product option, in the same order as `options` (e.g. [\"S\", \"Black\"])."
},
"compareAtPrice": {
"type": "string"
}
}
},
"maxItems": 100
},
"collections": {
"type": "array",
"items": {
"type": "string"
},
"description": "Collection ids/GIDs the product joins (manual membership)."
},
"productType": {
"type": "string"
},
"templateSuffix": {
"type": "string"
},
"descriptionHtml": {
"type": "string"
}
}
}
}
}Start a new Plan for a goal the merchant has agreed and no existing Plan covers, with a title, areas, milestones and an optional brief. Schedules and recurring work are approved in Fudge.
| Argument | Type | Description |
|---|---|---|
| areas* | array | Areas the Plan serves; empty for store-wide work. |
| brief | string | Markdown brief: goal, audience, decisions and constraints. Saved as brief.md in the Plan. |
| store | string | The connected store to use. Omit when only one is connected. |
| title* | string | Short outcome-focused title, e.g. “Rank for trail running shoes”. |
| milestones* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"areas",
"milestones"
],
"properties": {
"areas": {
"type": "array",
"items": {
"enum": [
"seo",
"ai-discovery",
"conversion",
"merchandising",
"landing-pages",
"blog",
"products",
"quizzes",
"popups",
"discounts",
"storefront"
],
"type": "string"
},
"maxItems": 4,
"description": "Areas the Plan serves; empty for store-wide work."
},
"brief": {
"type": "string",
"maxLength": 20000,
"description": "Markdown brief: goal, audience, decisions and constraints. Saved as brief.md in the Plan."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Short outcome-focused title, e.g. “Rank for trail running shoes”."
},
"milestones": {
"type": "array",
"items": {
"type": "object",
"required": [
"title"
],
"properties": {
"note": {
"type": "string",
"maxLength": 240,
"description": "One merchant-facing line on the intended outcome."
},
"title": {
"type": "string",
"maxLength": 160,
"minLength": 1
}
}
},
"maxItems": 20,
"minItems": 1
}
}
}Create a document inside an existing Plan, such as .plans/<slug>/brief.md, or with `replace` rewrite a whole document that was just read.
| Argument | Type | Description |
|---|---|---|
| path* | string | Destination path, for example .plans/<slug>/brief.md. |
| store | string | The connected store to use. Omit when only one is connected. |
| content* | string | Complete document content. |
| replace | boolean | True to replace an existing document you have read in full. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Destination path, for example .plans/<slug>/brief.md."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"content": {
"type": "string",
"description": "Complete document content."
},
"replace": {
"type": "boolean",
"description": "True to replace an existing document you have read in full."
}
}
}Delete a theme file from a Fudge draft, or stage removal of an item by its .entities path. Fudge refuses deletions that would break references. Publishing applies the removal; until then it can be undone.
| Argument | Type | Description |
|---|---|---|
| path* | string | A theme file such as sections/main-product.liquid or templates/product.json, or a content document such as .entities/product/123.jsonc or .entities/page/45.body.html. |
| draft* | string | The draft’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"path"
],
"properties": {
"path": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "A theme file such as sections/main-product.liquid or templates/product.json, or a content document such as .entities/product/123.jsonc or .entities/page/45.body.html."
},
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Change products, collections, pages, articles, blogs and their metafields in a Fudge draft with sparse patches, many items in one call. - Name only the fields you change; nested objects such as seo merge per key. - Rows with an "id" (variants, options, media) merge by id; omit "id" to add a row; {"id": …, "_delete": true} removes one. Variants and media live at .entities/product/{id}/variants.jsonc and media.jsonc. - Lists such as tags take a full array or {"add": […], "remove": […]}. - Metafields: .entities/product/{id}.metafields with {"namespace.key": {"type": …, "value": …}}; "value": null removes one. Changes to existing items are staged for the merchant’s review. Items the draft created change in Shopify at once.
| Argument | Type | Description |
|---|---|---|
| draft* | string | The draft’s fudge://project/… ref. |
| edits* | array | |
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"edits"
],
"properties": {
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"edits": {
"type": "array",
"items": {
"type": "object",
"required": [
"file",
"patch"
],
"properties": {
"file": {
"type": "string",
"description": "An .entities doc or patch-facet path, e.g. \".entities/product/123\", \".entities/product/123/variants.jsonc\", or \".entities/product/123.metafields\""
},
"patch": {
"type": "object",
"description": "Sparse JSON object using the document’s field names and value shapes. Arbitrary keys and nested JSON values are allowed; omitted fields stay unchanged.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
},
"minItems": 1
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Change part of a theme file or .entities document in a Fudge draft by replacing exact text, without line numbers. Fudge validates the result and refreshes the preview.
| Argument | Type | Description |
|---|---|---|
| path* | string | A theme file such as sections/main-product.liquid or templates/product.json, or a content document such as .entities/product/123.jsonc or .entities/page/45.body.html. |
| draft* | string | The draft’s fudge://project/… ref. |
| edits* | array | |
| store | string | The connected store to use. Omit when only one is connected. |
| revision | string | The revision returned when this file was read. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"path",
"edits"
],
"properties": {
"path": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "A theme file such as sections/main-product.liquid or templates/product.json, or a content document such as .entities/product/123.jsonc or .entities/page/45.body.html."
},
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"edits": {
"type": "array",
"items": {
"type": "object",
"required": [
"old_string",
"new_string"
],
"properties": {
"new_string": {
"type": "string",
"description": "Replacement text; empty deletes old_string."
},
"old_string": {
"type": "string",
"minLength": 1,
"description": "Exact text to replace."
},
"replace_all": {
"type": "boolean",
"description": "Replace every occurrence. Defaults to false."
}
}
},
"maxItems": 50,
"minItems": 1
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"revision": {
"type": "string",
"maxLength": 64,
"description": "The revision returned when this file was read."
}
}
}Change part of a store document, such as a Plan’s brief or the design guide, by replacing exact text. Fails if the text is gone or the document has changed since it was read.
| Argument | Type | Description |
|---|---|---|
| path* | string | Path of the existing document. |
| store | string | The connected store to use. Omit when only one is connected. |
| new_string* | string | Replacement text; empty deletes old_string. |
| old_string* | string | Exact text to replace. |
| replace_all | boolean | Replace every occurrence. Defaults to false. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"path",
"old_string",
"new_string"
],
"properties": {
"path": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "Path of the existing document."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"new_string": {
"type": "string",
"description": "Replacement text; empty deletes old_string."
},
"old_string": {
"type": "string",
"minLength": 1,
"description": "Exact text to replace."
},
"replace_all": {
"type": "boolean",
"description": "Replace every occurrence. Defaults to false."
}
}
}Search what Fudge knows about this store: memory guides, Plans, projects, findings, recommendations, recorded changes and past conversations. Pass `about` (a URL, Shopify GID or fudge:// ref) for everything related to one thing. Conversation results say whether the work is a draft, was published or was only discussed.
| Argument | Type | Description |
|---|---|---|
| about | string | ID, storefront URL/path or file that results must relate to. |
| query | string | |
| store | string | The connected store to use. Omit when only one is connected. |
| where | object | |
| cursor | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"about": {
"type": "string",
"description": "ID, storefront URL/path or file that results must relate to."
},
"query": {
"type": "string"
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"where": {
"type": "object",
"properties": {
"kind": {
"enum": [
"document",
"plan",
"project",
"finding",
"proposal",
"conversation",
"report",
"skill",
"change"
],
"type": "string"
},
"plan": {
"type": "string"
},
"time": {
"type": "object",
"required": [
"field"
],
"properties": {
"to": {
"type": "string"
},
"from": {
"type": "string"
},
"field": {
"enum": [
"created",
"updated",
"activity",
"edited",
"published"
],
"type": "string"
}
}
},
"edited": {
"type": "string",
"description": "File or entity directly edited; kind project or conversation."
},
"status": {
"type": "string"
},
"project": {
"type": "string"
}
}
},
"cursor": {
"type": "string"
}
}
}Find longer search phrases containing a seed keyword, with volume, difficulty and intent. Changes nothing and uses no credits; each store has a daily limit.
| Argument | Type | Description |
|---|---|---|
| seed* | string | |
| limit | integer | |
| store | string | The connected store to use. Omit when only one is connected. |
| language | string | Language code, e.g. "en". Defaults to the store’s language. |
| location* | string | Target country, e.g. "United States". Ask the merchant which countries they sell to if unknown. |
| minVolume | integer | |
| maxDifficulty | number |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"location",
"seed"
],
"properties": {
"seed": {
"type": "string",
"minLength": 1
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 1
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"language": {
"type": "string",
"description": "Language code, e.g. \"en\". Defaults to the store’s language."
},
"location": {
"type": "string",
"minLength": 1,
"description": "Target country, e.g. \"United States\". Ask the merchant which countries they sell to if unknown."
},
"minVolume": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"maxDifficulty": {
"type": "number",
"maximum": 100,
"minimum": 0
}
}
}Read the store’s design guide: colours, typography, spacing, components and brand voice. Use when designing or reviewing pages. With no guide yet and a distinctive theme, this starts a one-time extraction.
| Argument | Type | Description |
|---|---|---|
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Get Google search volume, difficulty, intent, CPC and 12-month history for specific keywords in one country. Missing values are unknown, not zero. Changes nothing and uses no credits; each store has a daily limit.
| Argument | Type | Description |
|---|---|---|
| store | string | The connected store to use. Omit when only one is connected. |
| keywords* | array | |
| language | string | Language code, e.g. "en". Defaults to the store’s language. |
| location* | string | Target country, e.g. "United States". Ask the merchant which countries they sell to if unknown. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"location",
"keywords"
],
"properties": {
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 50,
"minItems": 1
},
"language": {
"type": "string",
"description": "Language code, e.g. \"en\". Defaults to the store’s language."
},
"location": {
"type": "string",
"minLength": 1,
"description": "Target country, e.g. \"United States\". Ask the merchant which countries they sell to if unknown."
}
}
}List the Google searches a domain ranks for in one country, with position, URL, volume, difficulty and estimated traffic. Defaults to this store; pass a competitor’s domain to compare. Changes nothing and uses no credits; each store has a daily limit.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| store | string | The connected store to use. Omit when only one is connected. |
| domain | string | Defaults to this store’s domain. |
| language | string | Language code, e.g. "en". Defaults to the store’s language. |
| location* | string | Target country, e.g. "United States". Ask the merchant which countries they sell to if unknown. |
| pathPrefix | string | Only URLs under this path, e.g. /blogs/. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"location"
],
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"domain": {
"type": "string",
"description": "Defaults to this store’s domain."
},
"language": {
"type": "string",
"description": "Language code, e.g. \"en\". Defaults to the store’s language."
},
"location": {
"type": "string",
"minLength": 1,
"description": "Target country, e.g. \"United States\". Ask the merchant which countries they sell to if unknown."
},
"pathPrefix": {
"type": "string",
"pattern": "^\\/.*",
"description": "Only URLs under this path, e.g. /blogs/."
}
}
}Read Google’s live first results page for one search in one country: ranked results, features, AI Overview citations, People Also Ask and related searches. Changes nothing and uses no credits; each store has a daily limit.
| Argument | Type | Description |
|---|---|---|
| store | string | The connected store to use. Omit when only one is connected. |
| device | string | |
| keyword* | string | |
| language | string | Language code, e.g. "en". Defaults to the store’s language. |
| location* | string | Target country, e.g. "United States". Ask the merchant which countries they sell to if unknown. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"location",
"keyword"
],
"properties": {
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"device": {
"enum": [
"desktop",
"mobile"
],
"type": "string",
"default": "mobile"
},
"keyword": {
"type": "string",
"minLength": 1
},
"language": {
"type": "string",
"description": "Language code, e.g. \"en\". Defaults to the store’s language."
},
"location": {
"type": "string",
"minLength": 1,
"description": "Target country, e.g. \"United States\". Ask the merchant which countries they sell to if unknown."
}
}
}Read the latest run of one free diagnostic: status, report link and, once complete, the score and top fixes. Reading starts nothing. `waitSeconds` waits up to 50 seconds for a running report.
| Argument | Type | Description |
|---|---|---|
| audit* | string | The diagnostic’s id. |
| store | string | The connected store to use. Omit when only one is connected. |
| domain | string | The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store. |
| waitSeconds | integer | Default 0. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"audit"
],
"properties": {
"audit": {
"enum": [
"ai-readiness",
"catalog-audit",
"knowledge-base"
],
"type": "string",
"description": "The diagnostic’s id."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"domain": {
"type": "string",
"description": "The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store."
},
"waitSeconds": {
"type": "integer",
"maximum": 50,
"minimum": 0,
"description": "Default 0."
}
}
}Read the findings and recommendations Fudge has saved for this store, most important first; narrow by area, subject, kind, date or text. With `ref`, one record in full with its sources and measurements. An empty list means nothing is saved yet. This never starts an investigation.
| Argument | Type | Description |
|---|---|---|
| ref | string | Read one record in full; the other filters are ignored. |
| area | string | seo, ai-discovery, conversion or merchandising, or a library such as landing-pages or quizzes. |
| kind | string | |
| limit | integer | |
| query | string | Words to find in the title, summary or body. |
| since | string | Only records created or updated on or after this date. |
| store | string | The connected store to use. Omit when only one is connected. |
| subject | string | A product, collection, page or article ID (product-42 or a Shopify GID), or a Fudge Plan ref. |
Read a store’s overview: business context, standing memory, Google connection, work waiting on the merchant, Plans, top recommendations and recent results. With `area`, that area’s findings, Plans, work, outputs and headline numbers. Use for a brief or before planning work.
| Argument | Type | Description |
|---|---|---|
| area | string | seo, ai-discovery, conversion or merchandising, or a library such as landing-pages or blog. |
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"area": {
"enum": [
"seo",
"ai-discovery",
"conversion",
"merchandising",
"landing-pages",
"blog",
"products",
"quizzes",
"popups",
"discounts",
"storefront"
],
"type": "string",
"description": "seo, ai-discovery, conversion or merchandising, or a library such as landing-pages or blog."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Measure the store, or a product, collection, page, article or URL given as `subject`. `metrics` returns headline values with their previous period, definition and source. `breakdown` returns ranked rows such as queries, landing pages, channels, AI assistants, devices, countries, products or discount codes. With neither, returns what exists for the subject. Periods default to the 28 days ending three days ago against the 28 days before. Google Analytics, Search Console and Shopify are separate measurements.
| Argument | Type | Description |
|---|---|---|
| days | any | |
| sort | string | Breakdown metric to rank by, e.g. clicks, impressions, sessions, revenue, orders. |
| limit | integer | |
| store | string | The connected store to use. Omit when only one is connected. |
| device | string | |
| offset | integer | |
| compare | boolean | |
| country | string | Search Console three-letter country code, e.g. usa. |
List the store’s current offers: Fudge offers, active Shopify discounts, native bundles, shipping rates by zone and free-shipping thresholds. Use for an offers or average-order-value review.
| Argument | Type | Description |
|---|---|---|
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}List the audits Fudge can run for this store, three diagnostics and eight agent reviews, with any existing result. Listing starts nothing.
| Argument | Type | Description |
|---|---|---|
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}List the Shopify stores this connection can use.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List Fudge work for this store, including work started in Fudge or another assistant. `view: "needs_you"` returns what is waiting on the merchant. `query` searches past work.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| view | string | |
| limit | number | 1–50, default 20. |
| query | string | Ranked search; cannot be combined with before. |
| store | string | The connected store to use. Omit when only one is connected. |
| before | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"kind": {
"enum": [
"chat",
"draft",
"published"
],
"type": "string"
},
"view": {
"enum": [
"all",
"needs_you"
],
"type": "string"
},
"limit": {
"type": "number",
"description": "1–50, default 20."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Ranked search; cannot be combined with before."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"before": {
"type": "string"
}
}
}Ask Fudge to do work for this store: build or revise a page, article or other draft, investigate, or answer a question. Without `ref`, starts a new conversation; with `ref`, continues that work. Uses the store’s Fudge credits. `requestId` makes retries deliver once. Publishing always needs the merchant’s own approval in Fudge.
| Argument | Type | Description |
|---|---|---|
| ref | string | fudge://thread/… or fudge://project/… to continue; omit to start new work. |
| store | string | The connected store to use. Omit when only one is connected. |
| title | string | Short title for a new conversation. |
| message* | string | The merchant’s request in full: what to do, for which page or products, and any decisions already made. |
| delivery | string | |
| requestId* | string | A unique ID you choose for this request, e.g. a UUID. Retries reuse it. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"message",
"requestId"
],
"properties": {
"ref": {
"type": "string",
"description": "fudge://thread/… or fudge://project/… to continue; omit to start new work."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"title": {
"type": "string",
"maxLength": 80,
"description": "Short title for a new conversation."
},
"message": {
"type": "string",
"maxLength": 20000,
"minLength": 1,
"description": "The merchant’s request in full: what to do, for which page or products, and any decisions already made."
},
"delivery": {
"enum": [
"steer",
"queue"
],
"type": "string",
"default": "steer"
},
"requestId": {
"type": "string",
"maxLength": 100,
"minLength": 8,
"description": "A unique ID you choose for this request, e.g. a UUID. Retries reuse it."
}
}
}Open Fudge Home for a store: work waiting on the merchant, the next recommended step and the four growth areas. Use when the merchant asks to open Fudge or see their store at a glance.
| Argument | Type | Description |
|---|---|---|
| store | string | The connected store to use. Defaults to the first one. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"store": {
"type": "string",
"description": "The connected store to use. Defaults to the first one."
}
}
}Read a file in a Fudge draft: a theme file, a theme folder listing, or a content document under .entities (list with .entities/product?query=…). Lines are numbered; long files return `line_offset`. Theme files return a `revision`. Append #info to see where a theme file is used.
| Argument | Type | Description |
|---|---|---|
| path* | string | A theme file such as sections/main-product.liquid or templates/product.json, or a content document such as .entities/product/123.jsonc or .entities/page/45.body.html. |
| draft* | string | The draft’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
| line_limit | integer | Lines to return. Omit to read up to the limit. |
| char_offset | integer | Character offset within a very long first line, only when the result says to continue with one. |
| line_offset | integer | 0-based line to start from, from a previous read. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"path"
],
"properties": {
"path": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "A theme file such as sections/main-product.liquid or templates/product.json, or a content document such as .entities/product/123.jsonc or .entities/page/45.body.html."
},
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"line_limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Lines to return. Omit to read up to the limit."
},
"char_offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Character offset within a very long first line, only when the result says to continue with one."
},
"line_offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "0-based line to start from, from a previous read."
}
}
}Read one of Fudge’s reference articles by path, such as seo/audit.md. Without a path, lists them all.
| Argument | Type | Description |
|---|---|---|
| path | string | The guide’s path. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"path": {
"type": "string",
"maxLength": 200,
"description": "The guide’s path."
}
}
}Read a store document by path: Plans (.plans), playbooks (.playbooks), memory and design guide (.memory), brand kit (.brand) and projects (.projects). Omit `path` to list top-level folders; a folder path lists its documents.
| Argument | Type | Description |
|---|---|---|
| path | string | Document or folder path, optionally with its ?query. |
| store | string | The connected store to use. Omit when only one is connected. |
| offset | integer | Character offset from a previous `next`. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"path": {
"type": "string",
"default": "",
"maxLength": 2000,
"description": "Document or folder path, optionally with its ?query."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Character offset from a previous `next`."
}
}
}With `ref`: one work item’s live state, progress, latest result, what it is waiting for, and draft or publication state with links; `waitSeconds` waits up to 50 seconds. With `about` (a URL, path, Shopify GID, theme file or fudge:// ref): what has changed there, by `view` current, history or summary. `about: "fudge://store"` is the store-wide timeline.
| Argument | Type | Description |
|---|---|---|
| to | string | |
| ref | string | A work item to read: fudge://project/… or fudge://thread/…. |
| from | string | With view history: YYYY-MM-DD in store time, or an ISO timestamp. |
| view | string | |
| about | string | Storefront URL/path, Shopify GID, theme file, fudge://discount/<key>, .projects/.plans path, or fudge://store for the whole store. |
| store | string | The connected store to use. Omit when only one is connected. |
| cursor | string | |
| waitSeconds | integer | With ref: wait up to this long for running work to finish or need the merchant. Default 0. |
Add a change made outside Fudge to the store’s timeline, such as ads, prices, apps, email, shipping or theme edits in Shopify, so later results can be attributed. Fudge’s own publishes are recorded automatically.
| Argument | Type | Description |
|---|---|---|
| at | string | When it took effect: YYYY-MM-DD or an ISO timestamp. Defaults to now. |
| why | string | Intent or expected effect, so results can be checked against it later. |
| what* | string | What changed, concretely, e.g. "Raised Meta prospecting budget from €50 to €80 a day". |
| links | array | fudge:// references or Shopify GIDs of what the change affected, e.g. gid://shopify/Product/123. |
| store | string | The connected store to use. Omit when only one is connected. |
| surface* | string | Where: theme, catalogue, pricing, discounts, email, Meta ads, Google ads, apps, shipping or other. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"what",
"surface"
],
"properties": {
"at": {
"type": "string",
"description": "When it took effect: YYYY-MM-DD or an ISO timestamp. Defaults to now."
},
"why": {
"type": "string",
"description": "Intent or expected effect, so results can be checked against it later."
},
"what": {
"type": "string",
"minLength": 1,
"description": "What changed, concretely, e.g. \"Raised Meta prospecting budget from €50 to €80 a day\"."
},
"links": {
"type": "array",
"items": {
"type": "string"
},
"description": "fudge:// references or Shopify GIDs of what the change affected, e.g. gid://shopify/Product/123."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"surface": {
"type": "string",
"minLength": 1,
"description": "Where: theme, catalogue, pricing, discounts, email, Meta ads, Google ads, apps, shipping or other."
}
}
}Save a lasting rule, decision, correction or learning to store memory. Use when the user states how things should be done from now on, not for one-off requests. Duplicates change nothing; a contradiction comes back as a conflict.
| Argument | Type | Description |
|---|---|---|
| note* | string | The lasting rule, decision or learning to keep, written as it should apply in future work, with its conditions, exceptions and reason. Not a one-off task or a detail of the current draft. |
| store | string | The connected store to use. Omit when only one is connected. |
| personal | boolean | Save only for the person you are serving: how to work with them (language, tone, length, what to ask them). Default: shared with everyone working on this store. Never put a person's private details in shared memory. |
| replaces | boolean | The user explicitly corrected or reversed an earlier rule. Replace the old rule instead of returning a conflict. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"note"
],
"properties": {
"note": {
"type": "string",
"minLength": 1,
"description": "The lasting rule, decision or learning to keep, written as it should apply in future work, with its conditions, exceptions and reason. Not a one-off task or a detail of the current draft."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"personal": {
"type": "boolean",
"description": "Save only for the person you are serving: how to work with them (language, tone, length, what to ask them). Default: shared with everyone working on this store. Never put a person's private details in shared memory."
},
"replaces": {
"type": "boolean",
"description": "The user explicitly corrected or reversed an earlier rule. Replace the old rule instead of returning a conflict."
}
}
}Prepare a finished draft for the merchant’s publish decision. Returns the link to Fudge’s review page, what will change and whether publishing needs a plan. This does not publish; only the merchant can, in Fudge.
| Argument | Type | Description |
|---|---|---|
| ref* | string | The work’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"description": "The work’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Run Fudge’s free AI Readiness report: whether AI assistants can find and recommend the store’s products, with a score and prioritized fixes. Takes about 3 minutes and waits up to 45 seconds. Returns a run in progress or a result from the last 24 hours unless `fresh` is true.
| Argument | Type | Description |
|---|---|---|
| fresh | boolean | Start a new run even when a result from the last 24 hours exists. |
| store | string | The connected store to use. Omit when only one is connected. |
| domain | string | The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"fresh": {
"type": "boolean",
"description": "Start a new run even when a result from the last 24 hours exists."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"domain": {
"type": "string",
"description": "The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store."
}
}
}Run Fudge’s free AI shopping catalogue report: categories, structured data, product details and whether buyer searches find the right products. Takes 2–4 minutes and waits up to 45 seconds. Returns a run in progress or a result from the last 24 hours unless `fresh` is true.
| Argument | Type | Description |
|---|---|---|
| fresh | boolean | Start a new run even when a result from the last 24 hours exists. |
| store | string | The connected store to use. Omit when only one is connected. |
| domain | string | The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"fresh": {
"type": "boolean",
"description": "Start a new run even when a result from the last 24 hours exists."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"domain": {
"type": "string",
"description": "The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store."
}
}
}Run Fudge’s free Shopify Knowledge Base report: 15 shopper questions with the exact answers, gaps and conflicts with published information. Takes 2–5 minutes and waits up to 45 seconds. Returns a run in progress or a result from the last 24 hours unless `fresh` is true.
| Argument | Type | Description |
|---|---|---|
| fresh | boolean | Start a new run even when a result from the last 24 hours exists. |
| store | string | The connected store to use. Omit when only one is connected. |
| domain | string | The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"fresh": {
"type": "boolean",
"description": "Start a new run even when a result from the last 24 hours exists."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"domain": {
"type": "string",
"description": "The Shopify storefront to check, e.g. example.com. Required until a store is connected; afterwards, omit it to use a connected store."
}
}
}Find the store’s products, collections, pages and articles by name or handle, or list them by type. Matches singular, plural and partial words, and returns close matches when nothing matches every word.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query | string | Words from the title or handle. Leave empty to list by type in title order. |
| store | string | The connected store to use. Omit when only one is connected. |
| types | array | |
| offset | integer |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"default": "",
"maxLength": 200,
"description": "Words from the title or handle. Leave empty to list by type in title order."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"types": {
"type": "array",
"items": {
"enum": [
"product",
"collection",
"page",
"article"
],
"type": "string"
},
"default": [
"product",
"collection",
"page",
"article"
],
"minItems": 1
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0
}
}
}Search Fudge’s Lookbook of analysed ecommerce stores, pages and patterns. Describe the shopper problem or page element, not a brand. Use when the merchant wants to see how other stores solve something.
| Argument | Type | Description |
|---|---|---|
| limit | number | |
| query* | string | |
| scope* | string | |
| industry | string | |
| pageKind | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query",
"scope"
],
"properties": {
"limit": {
"type": "number"
},
"query": {
"type": "string"
},
"scope": {
"enum": [
"site",
"page",
"pattern"
],
"type": "string"
},
"industry": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"pageKind": {
"enum": [
"home",
"product",
"collection",
"auxiliary"
],
"type": "string"
}
}
}Find theme files in a Fudge draft. With `pattern`, search contents by regular expression; without it, list files matching `paths` globs.
| Argument | Type | Description |
|---|---|---|
| draft* | string | The draft’s fudge://project/… ref. |
| paths* | array | Files, folders or glob patterns, e.g. ["sections", "snippets/*price*.liquid"]. |
| store | string | The connected store to use. Omit when only one is connected. |
| pattern | string | Regular expression (RE2 syntax: no lookarounds or backreferences) to search for in those files. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"paths"
],
"properties": {
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"paths": {
"type": "array",
"items": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"maxItems": 20,
"minItems": 1,
"description": "Files, folders or glob patterns, e.g. [\"sections\", \"snippets/*price*.liquid\"]."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"pattern": {
"type": "string",
"maxLength": 500,
"description": "Regular expression (RE2 syntax: no lookarounds or backreferences) to search for in those files."
}
}
}Search Fudge’s reference articles on SEO, AI discovery, conversion, merchandising, content, store design and analytics. Returns matching paths and excerpts.
| Argument | Type | Description |
|---|---|---|
| query* | string | What the merchant wants to do or know, in a few words. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "What the merchant wants to do or know, in a few words."
}
}
}Send the Fudge team a problem with its tools, a capability you needed, or feedback the merchant asked you to pass on.
| Argument | Type | Description |
|---|---|---|
| type* | string | broken: a Fudge tool failed or did the wrong thing. stuck: you couldn’t finish the task with Fudge’s tools. hard: the tools made the task much harder than it should be. missing: the task needed something Fudge’s tools can’t do. merchant: the merchant asked you to pass this on; only when they ask. |
| store | string | The connected store to use. Defaults to the first one. |
| message* | string | Up to 250 words, starting with a one-line summary. For a problem: what you did, what the tools returned and what would have made it easy. For missing: the task, what you did instead and what the tool could look like. For merchant: their words as they put them. Leave out personal details nobody asked you to send. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"type",
"message"
],
"properties": {
"type": {
"enum": [
"broken",
"stuck",
"hard",
"missing",
"merchant"
],
"type": "string",
"description": "broken: a Fudge tool failed or did the wrong thing. stuck: you couldn’t finish the task with Fudge’s tools. hard: the tools made the task much harder than it should be. missing: the task needed something Fudge’s tools can’t do. merchant: the merchant asked you to pass this on; only when they ask."
},
"store": {
"type": "string",
"description": "The connected store to use. Defaults to the first one."
},
"message": {
"type": "string",
"description": "Up to 250 words, starting with a one-line summary. For a problem: what you did, what the tools returned and what would have made it easy. For missing: the task, what you did instead and what the tool could look like. For merchant: their words as they put them. Leave out personal details nobody asked you to send."
}
}
}Record the merchant’s answer from the preview consent card, with the answer code only that card receives.
| Argument | Type | Description |
|---|---|---|
| draft* | string | The draft’s fudge://project/… ref. |
| scope* | string | project: this draft only; site: every draft. |
| state* | string | |
| store | string | The connected store to use. Omit when only one is connected. |
| answer* | string | The answer code from Fudge’s consent card. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"scope",
"state",
"answer"
],
"properties": {
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"scope": {
"enum": [
"project",
"site"
],
"type": "string",
"description": "project: this draft only; site: every draft."
},
"state": {
"enum": [
"granted",
"declined"
],
"type": "string"
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"answer": {
"type": "string",
"maxLength": 200,
"description": "The answer code from Fudge’s consent card."
}
}
}Show 3–8 Lookbook references as a gallery of screenshots, best first, each with a one-sentence note on why it suits this store.
| Argument | Type | Description |
|---|---|---|
| references* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"references"
],
"properties": {
"references": {
"type": "array",
"items": {
"type": "object",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string"
},
"note": {
"type": "string",
"maxLength": 160
}
}
},
"maxItems": 8,
"minItems": 1
}
}
}Show a Fudge draft in the side panel with its screenshot, saved time, change count and links. Without a ref, lists recent drafts.
| Argument | Type | Description |
|---|---|---|
| ref | string | A fudge://project/… ref. |
| store | string | The connected store to use. Defaults to the first one. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ref": {
"type": "string",
"description": "A fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Defaults to the first one."
}
}
}Ask the merchant, with a card, whether new products and collections in a draft may be previewed by direct link on their live store. Use when a result says previewing needs their consent.
| Argument | Type | Description |
|---|---|---|
| draft* | string | The draft’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft"
],
"properties": {
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Show Fudge items to the merchant as rows that open in Fudge: work, Plans, findings, recommendations, reports, products and pages.
| Argument | Type | Description |
|---|---|---|
| refs* | array | |
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"refs"
],
"properties": {
"refs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 12,
"minItems": 1
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Open a private Fudge draft to build in directly. Fudge copies the live theme into a draft with its own preview. Give a short title and the storefront `page`, or `work` to continue existing work. `requestId` makes retries create one draft. Use for precise changes you make yourself; needs a Fudge plan that includes building.
| Argument | Type | Description |
|---|---|---|
| page | string | Storefront path the work is about, e.g. /products/blue-runner, /collections/sale or /pages/about. Anchors the preview. Defaults to the home page. |
| work | string | A fudge://project/… ref to continue instead of starting new work. |
| store | string | The connected store to use. Omit when only one is connected. |
| title* | string | Short merchant-facing name for the work, e.g. “Size guide on product pages”. |
| requestId* | string | A unique ID you choose for this request, e.g. a UUID. Retries reuse it. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"requestId"
],
"properties": {
"page": {
"type": "string",
"maxLength": 2000,
"description": "Storefront path the work is about, e.g. /products/blue-runner, /collections/sale or /pages/about. Anchors the preview. Defaults to the home page."
},
"work": {
"type": "string",
"maxLength": 200,
"description": "A fudge://project/… ref to continue instead of starting new work."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Short merchant-facing name for the work, e.g. “Size guide on product pages”."
},
"requestId": {
"type": "string",
"maxLength": 100,
"minLength": 8,
"description": "A unique ID you choose for this request, e.g. a UUID. Retries reuse it."
}
}
}Start Fudge’s free AI store builder for someone with a store idea but no store yet. It works out a name, logo and brand, then shows store concepts on Fudge’s website. Returns a link for them.
| Argument | Type | Description |
|---|---|---|
| description* | string | The store idea: what they sell, who for, and anything they’ve said about the brand. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"description"
],
"properties": {
"description": {
"type": "string",
"maxLength": 2000,
"minLength": 12,
"description": "The store idea: what they sell, who for, and anything they’ve said about the brand."
}
}
}Start Fudge’s free website redesign for a Shopify store, which generates three homepage concepts on Fudge’s website. Use when the merchant wants new design directions for their whole site. Returns a link for them.
| Argument | Type | Description |
|---|---|---|
| domain* | string | The Shopify storefront, e.g. example.com. |
| instructions | string | What the merchant wants from the redesign, in their words. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "The Shopify storefront, e.g. example.com."
},
"instructions": {
"type": "string",
"maxLength": 2000,
"description": "What the merchant wants from the redesign, in their words."
}
}
}Stop Fudge’s reply running on one work item. With `runId`, stops only that run. The draft and anything already saved stay.
| Argument | Type | Description |
|---|---|---|
| ref* | string | The work’s fudge://thread/… or fudge://project/… ref. |
| runId | string | |
| store | string | The connected store to use. Omit when only one is connected. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"ref"
],
"properties": {
"ref": {
"type": "string",
"description": "The work’s fudge://thread/… or fudge://project/… ref."
},
"runId": {
"type": "string"
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
}
}
}Create a new theme file in a Fudge draft, or with `replace` rewrite a whole file. New theme filenames include the draft’s file prefix, except templates, config and locales. Every sections/*.liquid file needs a {% schema %} with a non-empty "name".
| Argument | Type | Description |
|---|---|---|
| path* | string | A theme file such as sections/main-product.liquid or templates/product.json, or a content document such as .entities/product/123.jsonc or .entities/page/45.body.html. |
| draft* | string | The draft’s fudge://project/… ref. |
| store | string | The connected store to use. Omit when only one is connected. |
| content* | string | The complete file content, without line numbers. |
| replace | boolean | True to replace an existing file you have read in full. |
| revision | string | The revision returned when this file was read, when replacing. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"draft",
"path",
"content"
],
"properties": {
"path": {
"type": "string",
"maxLength": 2000,
"minLength": 1,
"description": "A theme file such as sections/main-product.liquid or templates/product.json, or a content document such as .entities/product/123.jsonc or .entities/page/45.body.html."
},
"draft": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The draft’s fudge://project/… ref."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"content": {
"type": "string",
"maxLength": 400000,
"description": "The complete file content, without line numbers."
},
"replace": {
"type": "boolean",
"description": "True to replace an existing file you have read in full."
},
"revision": {
"type": "string",
"maxLength": 64,
"description": "The revision returned when this file was read, when replacing."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"type": {
"enum": [
"product",
"collection",
"page",
"article"
],
"type": "string",
"description": "List this type’s offenders instead of the summary."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0
},
"missing": {
"type": "string",
"description": "With type: only items missing this field, named as in the summary, e.g. \"Meta description\"."
},
"refresh": {
"type": "boolean",
"default": false,
"description": "Rescan instead of reusing this hour’s result. Only after the merchant changed catalogue data."
},
"includeProductIdentifiers": {
"type": "boolean",
"default": false,
"description": "Also check GTIN/barcode and MPN on products. A separate, slower scan."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ref": {
"type": "string",
"pattern": "^fudge:\\/\\/(finding|proposal)\\/[\\w-]+$",
"description": "Read one record in full; the other filters are ignored."
},
"area": {
"enum": [
"seo",
"ai-discovery",
"conversion",
"merchandising",
"landing-pages",
"blog",
"products",
"quizzes",
"popups",
"discounts",
"storefront"
],
"type": "string",
"description": "seo, ai-discovery, conversion or merchandising, or a library such as landing-pages or quizzes."
},
"kind": {
"enum": [
"finding",
"recommendation"
],
"type": "string"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 20,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Words to find in the title, summary or body."
},
"since": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "Only records created or updated on or after this date."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"subject": {
"type": "string",
"description": "A product, collection, page or article ID (product-42 or a Shopify GID), or a Fudge Plan ref."
}
}
}| endDate |
| string |
| metrics | array |
| subject | string | What to measure: a product, collection, page or article ID (product-42 or a Shopify GID), its name or handle, a storefront URL or path (/products/x), or omit for the whole store. |
| ascending | boolean |
| breakdown | string |
| startDate | string |
| comparisonEnd | string |
| comparisonStart | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"days": {
"anyOf": [
{
"type": "number",
"const": 7
},
{
"type": "number",
"const": 28
},
{
"type": "number",
"const": 90
}
],
"default": 28
},
"sort": {
"enum": [
"views",
"visitors",
"newVisitors",
"returningVisitors",
"averageEngagementTime",
"sessions",
"engagedSessions",
"engagementRate",
"purchases",
"purchaseRate",
"revenue",
"addToCarts",
"checkouts",
"clicks",
"impressions",
"ctr",
"position",
"orders",
"orderRevenue",
"discounts",
"refunds",
"aov",
"units",
"unitsSold",
"productSales",
"stock",
"firstOrders",
"repeatOrders"
],
"type": "string",
"description": "Breakdown metric to rank by, e.g. clicks, impressions, sessions, revenue, orders."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"device": {
"enum": [
"all",
"mobile",
"desktop",
"tablet"
],
"type": "string",
"default": "all"
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0
},
"compare": {
"type": "boolean",
"default": true
},
"country": {
"type": "string",
"pattern": "^[a-zA-Z]{3}$",
"description": "Search Console three-letter country code, e.g. usa."
},
"endDate": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"metrics": {
"type": "array",
"items": {
"enum": [
"page_views",
"visitors",
"sessions",
"engagement_rate",
"add_to_carts",
"purchases",
"purchase_revenue",
"purchase_rate",
"ai_referral_sessions",
"organic_search_sessions",
"search_clicks",
"search_impressions",
"search_ctr",
"search_position",
"units_sold",
"product_sales",
"orders",
"order_revenue",
"average_order_value"
],
"type": "string"
},
"maxItems": 8,
"minItems": 1
},
"subject": {
"type": "string",
"maxLength": 2000,
"description": "What to measure: a product, collection, page or article ID (product-42 or a Shopify GID), its name or handle, a storefront URL or path (/products/x), or omit for the whole store."
},
"ascending": {
"type": "boolean",
"default": false
},
"breakdown": {
"enum": [
"search_queries",
"search_pages",
"search_devices",
"search_countries",
"landing_pages",
"page_views",
"channels",
"ai_assistants",
"ai_landing_pages",
"devices",
"countries",
"campaigns",
"products",
"discount_codes"
],
"type": "string"
},
"startDate": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"comparisonEnd": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"comparisonStart": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"to": {
"type": "string"
},
"ref": {
"type": "string",
"description": "A work item to read: fudge://project/… or fudge://thread/…."
},
"from": {
"type": "string",
"description": "With view history: YYYY-MM-DD in store time, or an ISO timestamp."
},
"view": {
"enum": [
"current",
"history",
"summary"
],
"type": "string"
},
"about": {
"type": "string",
"description": "Storefront URL/path, Shopify GID, theme file, fudge://discount/<key>, .projects/.plans path, or fudge://store for the whole store."
},
"store": {
"type": "string",
"description": "The connected store to use. Omit when only one is connected."
},
"cursor": {
"type": "string"
},
"waitSeconds": {
"type": "integer",
"maximum": 50,
"minimum": 0,
"description": "With ref: wait up to this long for running work to finish or need the merchant. Default 0."
}
}
}