{
  "name": "ace",
  "description": "Enrich products, generate content and feeds, translate, and run enrichment pipelines in ACE from any MCP client.",
  "version": "1.0.0",
  "endpoint": "https://ace.authoritas.com/api/mcp",
  "transports": [
    "streamable-http"
  ],
  "authentication": {
    "type": "http-bearer",
    "description": "Send an ACE API key as a bearer token (`ace_live_` or `ace_test_`). Listing tools is public; calling a tool requires a key. Create one in the ACE developer console."
  },
  "tools": [
    {
      "name": "enrich_product",
      "description": "Enrich a product record with improved title, description, structured attributes, and SEO metadata using AI.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "Product title"
          },
          "description": {
            "type": "string",
            "description": "Raw product description"
          },
          "price": {
            "type": "number",
            "description": "Product price"
          },
          "images": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uri"
            },
            "description": "Product image URLs"
          },
          "category": {
            "type": "string",
            "description": "Product category"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Existing product attributes to preserve or enhance"
          },
          "locale": {
            "type": "string",
            "description": "Target locale (default: en)"
          }
        },
        "required": [
          "title",
          "description",
          "price",
          "images",
          "category"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "generate_feed",
      "description": "Generate a formatted product feed for a specific platform (Google Shopping, Agentic Commerce, Shopify, etc.).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "productIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Product IDs to include in the feed",
            "minItems": 1
          },
          "platform": {
            "type": "string",
            "enum": [
              "google-shopping",
              "agentic-commerce",
              "shopify",
              "tiktok",
              "pinterest"
            ],
            "description": "Target platform for the feed"
          },
          "locale": {
            "type": "string",
            "description": "Output locale (default: en)"
          },
          "includeEnrichments": {
            "type": "boolean",
            "description": "Whether to include AI-enriched data (default: true)"
          }
        },
        "required": [
          "productIds",
          "platform"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "generate_content",
      "description": "Generate structured content (articles, guides, listicles) using a layout template and AI generation. Pass productIds to ground the piece in real catalog products.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "topic": {
            "type": "string",
            "description": "Content topic or title"
          },
          "layout": {
            "type": "string",
            "enum": [
              "ranked-list",
              "grid-showcase",
              "comparison-guide",
              "category-roundup",
              "how-to-guide",
              "buying-guide",
              "editorial",
              "listicle-article",
              "review",
              "product-spotlight",
              "seasonal-campaign"
            ],
            "description": "Content layout template to use"
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "SEO keywords to target"
          },
          "locale": {
            "type": "string",
            "description": "Content locale (e.g. 'en', 'de', 'fr')"
          },
          "productIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Product IDs to feature in the content"
          },
          "tone": {
            "type": "string",
            "description": "Desired content tone (e.g. 'professional', 'conversational')"
          },
          "wordCount": {
            "type": "integer",
            "minimum": 200,
            "maximum": 10000,
            "description": "Target word count"
          }
        },
        "required": [
          "topic",
          "layout",
          "keywords",
          "locale"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "generate_images",
      "description": "Generate product image variants (lifestyle, on-model, environment, etc.) from a source image.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sourceImageUrl": {
            "type": "string",
            "format": "uri",
            "description": "Source product image URL"
          },
          "variants": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "lifestyle",
                "on-model",
                "environment",
                "seasonal",
                "ugc-style"
              ]
            },
            "description": "Image variant types to generate",
            "minItems": 1
          },
          "productId": {
            "type": "string",
            "description": "Associated product ID for metadata"
          },
          "brandStyleId": {
            "type": "string",
            "description": "Brand style guide ID for consistent styling"
          },
          "dimensions": {
            "type": "object",
            "properties": {
              "width": {
                "type": "integer",
                "minimum": 64,
                "maximum": 4096
              },
              "height": {
                "type": "integer",
                "minimum": 64,
                "maximum": 4096
              }
            },
            "required": [
              "width",
              "height"
            ],
            "description": "Output image dimensions"
          }
        },
        "required": [
          "sourceImageUrl",
          "variants"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "translate_content",
      "description": "Translate content between locales with cultural adaptation and glossary support.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "content": {
            "type": "object",
            "description": "Content object to translate"
          },
          "sourceLocale": {
            "type": "string",
            "description": "Source language locale code (e.g. 'en')"
          },
          "targetLocale": {
            "type": "string",
            "description": "Target language locale code (e.g. 'de')"
          },
          "contentType": {
            "type": "string",
            "enum": [
              "article",
              "product",
              "feed"
            ],
            "description": "Type of content being translated"
          },
          "brandVoice": {
            "type": "string",
            "description": "Brand voice guidelines for the translation"
          },
          "glossary": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "source": {
                  "type": "string"
                },
                "target": {
                  "type": "string"
                },
                "context": {
                  "type": "string"
                }
              },
              "required": [
                "source",
                "target"
              ]
            },
            "description": "Glossary of preferred term translations"
          }
        },
        "required": [
          "content",
          "sourceLocale",
          "targetLocale",
          "contentType"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "search_products",
      "description": "Search the product catalog using natural language queries with optional filters.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Natural language search query"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Maximum number of results (default: 20)"
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "description": "Result offset for pagination"
          },
          "category": {
            "type": "string",
            "description": "Filter by product category"
          },
          "priceRange": {
            "type": "object",
            "properties": {
              "min": {
                "type": "number",
                "minimum": 0
              },
              "max": {
                "type": "number",
                "minimum": 0
              }
            },
            "description": "Filter by price range"
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Filter by product attributes (key-value pairs)"
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "list_docs",
      "description": "List ACE documentation pages (paths and titles). Optionally filter by path prefix.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "prefix": {
            "type": "string",
            "description": "Optional path prefix to filter pages. Top-level sections are guides, using-ace, and api-reference."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "read_docs",
      "description": "Read ACE documentation content by path (e.g. getting-started, guides/webhooks, api-reference/enrichment/rules/post).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Doc path/slug (e.g. getting-started, guides/webhooks, api-reference/enrichment/rules/post, index). Call list_docs first if you are unsure what exists."
          }
        },
        "required": [
          "path"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "generate_contextual_rules",
      "description": "Generate the eight section contextual rules (consumer criteria, product context, use cases, purchase occasions, key entities, target questions, differentiators, objections) for a set of products. Returns the rules synchronously.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "description": "Products to enrich. Each needs at least an id and a title.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "brand": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": true
            },
            "minItems": 1
          },
          "brandVoice": {
            "type": "object",
            "description": "Optional brand voice (tone, contentStyle, targetAudience, language).",
            "additionalProperties": true
          },
          "creativityLevel": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "description": "Creativity from 1 (conservative) to 5 (bold). Default engine setting when omitted."
          }
        },
        "required": [
          "products"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "enrich_content",
      "description": "Generate the selected content types for a product set, grounded in contextual rules you supply (or generated on the fly when omitted). Returns a job id to poll with get_enrichment_job.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "description": "Products to enrich. Each needs at least an id and a title.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "brand": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": true
            },
            "minItems": 1
          },
          "contentTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "description": "Content types to generate per product (e.g. product-description, meta-tags, jsonld-schema, irl-scenarios, internal-links)."
          },
          "rules": {
            "type": "object",
            "additionalProperties": true,
            "description": "Contextual rules by category. Generated automatically when omitted."
          },
          "brandVoice": {
            "type": "object",
            "additionalProperties": true
          },
          "targetLanguage": {
            "type": "string",
            "description": "BCP 47 locale for the output."
          }
        },
        "required": [
          "products",
          "contentTypes"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "run_enrichment_pipeline",
      "description": "Run the full enrichment pipeline over a product set: generate rules, then generate the selected content types per product grounded in those rules. Returns a job id to poll with get_enrichment_job.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "description": "Products to enrich. Each needs at least an id and a title.",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "brand": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": true
            },
            "minItems": 1
          },
          "contentTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Content types to generate per product (e.g. product-description, meta-tags, jsonld-schema, irl-scenarios). Defaults to a standard set."
          },
          "brandVoice": {
            "type": "object",
            "additionalProperties": true
          },
          "creativityLevel": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5
          },
          "targetLanguage": {
            "type": "string",
            "description": "BCP 47 locale for the output."
          }
        },
        "required": [
          "products"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "get_enrichment_job",
      "description": "Fetch the status, progress, and result of an enrichment job created by run_enrichment_pipeline or enrich_content.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "description": "The job id."
          }
        },
        "required": [
          "jobId"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "list_jobs",
      "description": "List this account's enrichment jobs, most recent first. Filter by status or kind, and page through results.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "completed",
              "partial",
              "failed",
              "cancelled"
            ],
            "description": "Only jobs in this state."
          },
          "kind": {
            "type": "string",
            "enum": [
              "rules",
              "content",
              "pipeline",
              "article"
            ],
            "description": "Only jobs of this kind."
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "1-based page number. Default 1."
          },
          "pageSize": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Default 20, max 100."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "get_job_results",
      "description": "Fetch the per-product results of a content or pipeline job, paginated. A rules job returns its rules payload directly.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "description": "The job id."
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "1-based page number. Default 1."
          },
          "pageSize": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200,
            "description": "Default 50, max 200."
          }
        },
        "required": [
          "jobId"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "cancel_job",
      "description": "Request cancellation of a queued or running enrichment job. Work already completed is kept and still billed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "description": "The job id to cancel."
          }
        },
        "required": [
          "jobId"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "get_usage",
      "description": "Account usage snapshot: credit balance, rate limit, total job count, and (for test keys) the monthly test quota.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "detect_language",
      "description": "Detect the dominant language of a product set, with confidence and a per-locale breakdown. Unbilled.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "description": "Products to evaluate. Utilities read common fields such as id, title and description.",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "minItems": 1
          }
        },
        "required": [
          "products"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "check_agentic_readiness",
      "description": "Score how ready each product is for AI shopping agents (field completeness, resolvable URL, structured attributes) and summarise the set. Unbilled.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "description": "Products to evaluate. Utilities read common fields such as id, title and description.",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "minItems": 1
          }
        },
        "required": [
          "products"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "score_review_quality",
      "description": "Combine per-item content quality, SEO, AI readability and brand voice sub-scores into the weighted overall score used by the review queue. Unbilled.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "contentQuality": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "seoScore": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "aiReadability": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "brandVoice": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                }
              },
              "required": [
                "contentQuality",
                "seoScore",
                "aiReadability"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "items"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "list_feeds",
      "description": "List the product feeds in this project, newest first, with product counts and status.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "get_feed",
      "description": "Fetch a single product feed's metadata by id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "feedId": {
            "type": "string",
            "description": "The feed id."
          }
        },
        "required": [
          "feedId"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "list_webhooks",
      "description": "List this account's webhook subscriptions, their subscribed events, and whether each is active. Signing secrets are never returned.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "create_webhook",
      "description": "Subscribe an HTTPS endpoint to enrichment job events. The signing secret is returned once, at creation, and never again.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "HTTPS endpoint to deliver to. Must start with https://."
          },
          "events": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string",
              "enum": [
                "enrichment.job.succeeded",
                "enrichment.job.partial",
                "enrichment.job.failed",
                "article.job.succeeded",
                "article.job.failed"
              ]
            },
            "description": "Event types to deliver."
          },
          "description": {
            "type": "string",
            "description": "Optional label for this subscription."
          }
        },
        "required": [
          "url",
          "events"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "delete_webhook",
      "description": "Permanently delete a webhook subscription. Pending deliveries for it stop.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The webhook subscription id."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "list_experiments",
      "description": "List the A/B experiments configured for this project, with their status and variants. Create and edit experiments through the dashboard or the REST API.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_list_connections",
      "description": "List Google Merchant Center connections available in this project.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_list_subaccounts",
      "description": "List sub-accounts under an MCA aggregator.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_pull_products",
      "description": "Pull every product from a Merchant Center connection into the local DB.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          },
          "pageSize": {
            "type": "number",
            "minimum": 1,
            "maximum": 1000,
            "default": 250
          },
          "maxPages": {
            "type": "number",
            "minimum": 1,
            "maximum": 1000,
            "default": 200
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_push_products",
      "description": "Push linked products back to Merchant Center via the v1 Merchant API.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          },
          "productIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional internal product UUIDs to push. Defaults to every linked product."
          },
          "feedLabel": {
            "type": "string"
          },
          "contentLanguage": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_list_products",
      "description": "Paginate products from Merchant Center (read-only view; bypasses local cache).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          },
          "pageSize": {
            "type": "number",
            "default": 1000,
            "minimum": 1,
            "maximum": 1000
          },
          "pageToken": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_list_issues",
      "description": "List account-level issues + aggregate product status counts for a connection.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_resolve_issue",
      "description": "Queue an automated fix for a specific product-level Merchant Center issue (e.g. missing GTIN). Dispatches the merchantCenterAgent via Inngest for each product.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          },
          "productIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional internal product UUIDs. If omitted, every linked product with the given issue is enqueued."
          },
          "issueCode": {
            "type": "string",
            "description": "Merchant Center issue code (e.g. missing_gtin, missing_color)."
          }
        },
        "required": [
          "issueCode"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_run_report",
      "description": "Execute an MCQL report query against a Merchant Center connection.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          },
          "query": {
            "type": "string",
            "description": "MCQL query, e.g. SELECT offer_id, title FROM product_view LIMIT 1000 (table names are snake_case)."
          },
          "pageSize": {
            "type": "number",
            "default": 100,
            "minimum": 1,
            "maximum": 1000
          }
        },
        "required": [
          "query"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_list_data_sources",
      "description": "List Merchant Center data sources (primary feeds, supplemental feeds, etc.).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          }
        },
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_create_promotion",
      "description": "Create a Merchant Center promotion. Requires the resource name of the destination data source and a complete Promotion object.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          },
          "dataSource": {
            "type": "string",
            "description": "Resource name of the data source (e.g. accounts/123/dataSources/456)."
          },
          "promotion": {
            "type": "object",
            "description": "Promotion payload conforming to the Merchant API Promotions resource (see promotionId, contentLanguage, targetCountry, redemptionChannel).",
            "additionalProperties": true
          }
        },
        "required": [
          "dataSource",
          "promotion"
        ],
        "additionalProperties": false
      }
    },
    {
      "name": "gmc_set_inventory",
      "description": "Set local or regional inventory for a Merchant Center product. Use the full product resource name (accounts/{merchantId}/products/{productId}).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "connectionId": {
            "type": "string",
            "description": "GMC connection row id (UUID). Optional; defaults to the first active connection for this project."
          },
          "productResourceName": {
            "type": "string"
          },
          "scope": {
            "type": "string",
            "enum": [
              "local",
              "regional"
            ]
          },
          "inventory": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "required": [
          "productResourceName",
          "scope",
          "inventory"
        ],
        "additionalProperties": false
      }
    }
  ]
}