ACE (Agentic Commerce Engine)

MCP Server

Connect ACE to Cursor, VS Code, or Claude over the Model Context Protocol and call 36 tools from your assistant.

Use ACE from your IDE with MCP

ACE (Agentic Commerce Engine) runs inside any app that speaks the Model Context Protocol (MCP). Once connected, your assistant can read the ACE documentation and call ACE tools directly: run the Contextual Enrichment Engine, track jobs, score a feed, manage webhooks, and work with Google Merchant Center, without leaving your editor.

This guide is for people who use ACE at https://ace.authoritas.com and want to plug it into Cursor, VS Code, Claude Code, or another MCP client.


What is MCP and why use it with ACE?

MCP is a standard way for AI assistants to talk to external services. Connecting ACE means:

  • Your assistant can read the ACE docs, so it answers questions and writes integration code from the current documentation rather than guesswork.
  • Your assistant can call ACE, so "enrich these products for Google Shopping and tell me when the job finishes" becomes one instruction rather than a script you write first.

Which tools are available is controlled per project under Settings, Developer console, MCP.


Where to connect

ACE MCP server URL: https://ace.authoritas.com/api/mcp

It is a streamable HTTP MCP server. Listing tools is public, so a client can connect and discover the catalogue with no key. Calling a tool requires an API key in the Authorization header.

The fastest path is the Connect section under Settings, Developer console, MCP: one-click install buttons for Cursor and VS Code, a copy-paste command for Claude Code, and a config block with your key already filled in. A machine-readable server card is published at https://ace.authoritas.com/.well-known/mcp.json.


Step 1: Get an API key

Use the same key you use for the REST API.

  1. Log in at https://ace.authoritas.com.
  2. Go to Settings, Developer console, Keys.
  3. Create a key with the scopes for the tools you plan to call. An ace_test_ key is free and quota-capped, which makes it ideal for a first connection. An ace_live_ key runs against your account for real.

Scopes are enforced on every tool call, so give the key what it needs:

If you want toGrant
Read docs, jobs, usage, feedsenrichment:read
Run enrichment, cancel jobs, use Merchant Centerenrichment:write
Use the scoring and language utilitiesutils:read
Manage webhook subscriptionswebhooks:write

New keys get enrichment:read, enrichment:write, and utils:read. Add webhooks:write if you want the webhook tools. See API Keys.


Step 2: Add the server in Cursor

  1. Open Settings, MCP.
  2. Click Add new MCP server.
  3. Set the URL to https://ace.authoritas.com/api/mcp.
  4. Add a header. Name: Authorization. Value: Bearer <your-api-key>.
  5. Save, and restart Cursor if prompted.

Or by config, in ~/.cursor/mcp.json or your project's .cursor/mcp.json:

{
  "mcpServers": {
    "ace": {
      "url": "https://ace.authoritas.com/api/mcp",
      "headers": {
        "Authorization": "Bearer <your-api-key>"
      }
    }
  }
}

Step 3: Add the server in VS Code

For GitHub Copilot Agent or another MCP-capable extension, add .vscode/mcp.json:

{
  "servers": {
    "ace": {
      "type": "http",
      "url": "https://ace.authoritas.com/api/mcp",
      "headers": {
        "Authorization": "Bearer <your-api-key>"
      }
    }
  }
}

Reload VS Code as your extension requires.


Step 4: Claude Code, other clients, or scripts

For Claude Code, one command:

claude mcp add --transport http ace https://ace.authoritas.com/api/mcp --header "Authorization: Bearer <your-api-key>"

For anything else, use the same URL and header. The endpoint speaks MCP streamable HTTP and negotiates the protocol version with your client, currently up to 2025-06-18. Server-sent events are disabled; the server is stateless, so no session store is involved.

Discovery methods (initialize, ping, tools/list) work with no key. Every tools/call requires a valid key. Verify a connection without a client:

curl -X POST https://ace.authoritas.com/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

For transport details, see the MCP documentation.


Controlling which tools are available

In the ACE app, go to Settings, Developer console, MCP.

  • Tools tab: turn each tool on or off per project.
  • Try it tab: run a tool with custom JSON arguments and see the result, so you can confirm it works before wiring it into your editor.

Two things worth knowing:

  1. Discovery always lists the full catalogue. A disabled tool still appears in tools/list; calling it returns an error telling you to enable it. This keeps the advertised catalogue stable for clients that cache it.
  2. Scope is checked separately from enablement. A tool can be enabled for your project and still refuse a key that lacks the scope. The error names the scopes that would work.

Tool catalogue

36 tools. On means enabled by default; opt means you enable it under Settings, Developer console, MCP. Tools marked credits consume credits on a live key, or the free monthly quota on a test key.

Documentation

ToolDefaultWhat it does
list_docsonList ACE doc pages, optionally filtered by prefix (guides, using-ace, api-reference).
read_docsonRead one doc page in full by path.

Any valid key can read the docs, whatever its scopes.

Contextual Enrichment Engine

Scope: enrichment:write. See Contextual Enrichment Engine.

ToolDefaultWhat it does
generate_contextual_ruleson, creditsDerive the eight section contextual rules for a product set. Returns them synchronously.
enrich_contenton, creditsGenerate the requested content types per product, grounded in rules. Returns a job id.
run_enrichment_pipelineon, creditsDerive rules and generate content in one call. Returns a job id.

Jobs

Scope: enrichment:read, except cancel_job which needs enrichment:write.

ToolDefaultWhat it does
list_jobsonList jobs, newest first. Filter by status or kind.
get_enrichment_jobonStatus, progress, and result of one job.
get_job_resultsonPaginated per-product results for a job.
cancel_jobonCancel a queued or running job.

Account, feeds, and utilities

ToolDefaultScopeWhat it does
get_usageonenrichment:readCredit balance, rate limit, job count, test quota.
list_feedsonenrichment:readList the project's product feeds.
get_feedonenrichment:readOne feed's metadata by id.
detect_languageonutils:readDominant language of a product set. Unbilled.
check_agentic_readinessonutils:readPer-product readiness score plus a summary. Unbilled.
score_review_qualityonutils:readWeighted overall score from sub-scores. Unbilled.
search_productsoptenrichment:readNatural-language catalog search. Needs an ingested catalog.
list_experimentsoptenrichment:readThe project's A/B experiments.

Content and media

ToolDefaultWhat it does
enrich_producton, creditsEnrich a single product with title, description, attributes, and SEO metadata.
generate_contenton, creditsStructured content from a layout template. Pass productIds to ground it in real products.
generate_imageson, creditsProduct image variants from a source image.
translate_contenton, creditsTranslate between locales with glossary support.
generate_feedonFormat a feed for Google Shopping, Agentic Commerce, Shopify, TikTok, or Pinterest.

Webhooks

Scope: webhooks:read to list, webhooks:write to change. All opt-in. See Webhooks.

ToolWhat it does
list_webhooksList subscriptions and their events. Secrets are never returned.
create_webhookSubscribe an HTTPS endpoint to job events. The signing secret is returned once.
delete_webhookDelete a subscription.

Google Merchant Center

All opt-in, and all need a connected Merchant Center account. Read tools need enrichment:read; write tools need enrichment:write. Most take an optional connection id and default to the project's first active connection.

ToolWhat it does
gmc_list_connectionsList the connections available in this project.
gmc_list_subaccountsList sub-accounts under a multi-client (MCA) aggregator.
gmc_list_productsPaginate products straight from Merchant Center, bypassing the local cache.
gmc_list_data_sourcesList data sources such as primary and supplemental feeds.
gmc_list_issuesAccount-level issues plus aggregate product status counts.
gmc_run_reportRun an MCQL report, for example SELECT offer_id, title FROM product_view LIMIT 1000.
gmc_pull_productsPull products from a connection into ACE.
gmc_push_productsPush linked products back to Merchant Center.
gmc_resolve_issueQueue automated fixes for a specific issue code, for example missing_gtin.
gmc_create_promotionCreate a promotion on a data source.
gmc_set_inventorySet local or regional inventory for a product.

The last five mutate a live Merchant Center account. They are marked as destructive in the protocol, so a well-behaved client asks you to confirm before running them. Start with the read tools.


Tool reference

list_docs

Discover which doc pages exist.

ParameterTypeRequiredDescription
prefixstringNoFilter by path prefix. Top-level sections are guides, using-ace, api-reference.
{ "name": "list_docs", "arguments": { "prefix": "guides" } }

Returns { "pages": [ { "path": "guides/webhooks", "title": "Webhooks" }, ... ] }.

read_docs

Read one page in full.

ParameterTypeRequiredDescription
pathstringYesDoc slug, for example getting-started, guides/troubleshooting, api-reference/enrichment/rules/post.
{ "name": "read_docs", "arguments": { "path": "contextual-enrichment-engine" } }

generate_contextual_rules

Derive the eight section rules for a product set. Uses credits.

ParameterTypeRequiredDescription
productsarrayYesProducts to analyse. Each needs at least id and title.
brandVoiceobjectNoTone, contentStyle, targetAudience, language.
creativityLevelintegerNo1 (conservative) to 5 (bold).
{
  "name": "generate_contextual_rules",
  "arguments": {
    "products": [
      { "id": "sku-1", "title": "Merino base layer", "category": "Outdoor", "brand": "Fjell" }
    ],
    "creativityLevel": 3
  }
}

enrich_content

Generate content types per product, grounded in rules. Uses credits. Returns a job id.

ParameterTypeRequiredDescription
productsarrayYesProducts to enrich.
contentTypesarrayYesFor example product-description, meta-tags, jsonld-schema, irl-scenarios, internal-links.
rulesobjectNoRules to ground against. Generated on the fly when omitted.
brandVoiceobjectNoBrand voice for the output.
targetLanguagestringNoBCP 47 locale.

run_enrichment_pipeline

Rules and content in one call. Uses credits. Returns a job id.

ParameterTypeRequiredDescription
productsarrayYesProducts to enrich.
contentTypesarrayNoDefaults to a standard set.
brandVoiceobjectNoBrand voice for the output.
creativityLevelintegerNo1 to 5.
targetLanguagestringNoBCP 47 locale.
{
  "name": "run_enrichment_pipeline",
  "arguments": {
    "products": [{ "id": "sku-1", "title": "Merino base layer" }],
    "contentTypes": ["product-description", "meta-tags"],
    "targetLanguage": "de-DE"
  }
}

list_jobs, get_enrichment_job, get_job_results, cancel_job

ToolParameters
list_jobsstatus (queued, running, completed, partial, failed, cancelled), kind (rules, content, pipeline, article), page, pageSize (max 100)
get_enrichment_jobjobId (required)
get_job_resultsjobId (required), page, pageSize (max 200)
cancel_jobjobId (required)

A typical flow: run the pipeline, poll get_enrichment_job until status is terminal, then page get_job_results.

enrich_product

Enrich one product. Uses credits.

ParameterTypeRequiredDescription
titlestringYesProduct title.
descriptionstringYesRaw product description.
pricenumberYesProduct price.
imagesarrayYesImage URLs.
categorystringYesProduct category.
attributesobjectNoExisting attributes to preserve or enhance.
localestringNoTarget locale. Default en.

generate_content

Structured content from a layout template. Uses credits.

ParameterTypeRequiredDescription
topicstringYesContent topic or title.
layoutstringYesOne of ranked-list, grid-showcase, comparison-guide, category-roundup, how-to-guide, buying-guide, editorial, listicle-article, review, product-spotlight, seasonal-campaign.
keywordsarrayYesSEO keywords to target.
localestringYesContent locale.
productIdsarrayNoProducts to feature. They are loaded from your catalog and used as source material.
tonestringNoFor example professional, conversational.
wordCountintegerNoTarget word count, 200 to 10000.

layout selects the generator: product-backed layouts produce a listicle or comparison article, while how-to-guide and editorial produce prose. If you pass productIds that do not exist in the project, the call fails rather than inventing placeholder products, so use search_products to find valid ids.

generate_feed

ParameterTypeRequiredDescription
productIdsarrayYesProducts to include.
platformstringYesgoogle-shopping, agentic-commerce, shopify, tiktok, or pinterest.
localestringNoOutput locale.
includeEnrichmentsbooleanNoInclude AI-enriched data. Default true.

generate_images

ParameterTypeRequiredDescription
sourceImageUrlstringYesSource image to work from.
variantsarrayYeslifestyle, on-model, environment, seasonal, or ugc-style.

Charged per variant.

translate_content

ParameterTypeRequiredDescription
contentobjectYesThe content to translate.
sourceLocalestringYesSource locale.
targetLocalestringYesTarget locale.
contentTypestringYesarticle, product, or feed.
brandVoicestringNoBrand voice to preserve.
glossaryarrayNoTerm mappings, each { source, target, context? }.

Utilities

ToolParametersReturns
detect_languageproducts (required)Dominant locale, confidence, per-locale breakdown
check_agentic_readinessproducts (required)Per-product score and missing fields, plus a summary
score_review_qualityitems (required), each with contentQuality, seoScore, aiReadability, optional brandVoice and idWeighted overall score per item

All three are unbilled.

Webhooks

ToolParameters
list_webhooksnone
create_webhookurl (required, must be HTTPS), events (required), description
delete_webhookid (required)

Event types: enrichment.job.succeeded, enrichment.job.partial, enrichment.job.failed, article.job.succeeded, article.job.failed.


Authentication and errors

  • Authentication: every tools/call to https://ace.authoritas.com/api/mcp must include a valid key as Authorization: Bearer <your-api-key>. Use the same keys as the REST API. See API Keys.
  • Scopes: a key without the scope a tool requires gets an error naming the scopes that would work. Widen the key rather than retrying.
  • Rate limits: keys have a requests per minute limit. Exceeding it returns a rate limit error. See API Reference.
  • Credits: enrichment, content, and image tools consume credits on a live key and the free monthly quota on a test key. Check with get_usage, or GET /api/v1/usage.

Troubleshooting

SymptomCause and fix
401 on a tool callMissing or invalid key. Check the Authorization: Bearer <key> header and that the key is active.
Client shows no toolsWrong URL, or the client did not complete the handshake. tools/list is public, so test it with the curl above.
"tool is disabled"Enable it for your project under Settings, Developer console, MCP.
"requires one of these API key scopes"The key is valid but too narrow. Edit its scopes under Settings, Developer console, Keys.
Credits or 402Out of credits, or a test key has spent its monthly quota. Call get_usage or see Credits and usage.
Merchant Center tool failsIt needs a connected Merchant Center account. Connect one in ACE first.
A job never finishesPoll get_enrichment_job. A partial status means some products failed; get_job_results shows which.

Tips for daily use

  • Ask your assistant to call list_docs and read_docs before it writes integration code, so it works from the current documentation.
  • Start with check_agentic_readiness on a sample. It is free and tells you which products are too thin to enrich well.
  • Prefer run_enrichment_pipeline for a first run and enrich_content with cached rules for later batches.
  • Keep the Merchant Center write tools disabled until you specifically need them.

On this page