MCP Server
Connect Rezolve Ai to Cursor, VS Code, or Claude over the Model Context Protocol and call 37 tools from your assistant.
Rezolve Ai runs inside any app that speaks the Model Context Protocol (MCP). Once connected, your assistant can read the Rezolve Ai documentation and call Rezolve Ai 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 Rezolve Ai 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 Rezolve Ai?
MCP is a standard way for AI assistants to talk to external services. Connecting Rezolve Ai means:
- Your assistant can read the Rezolve Ai docs, so it answers questions and writes integration code from the current documentation rather than guesswork.
- Your assistant can call Rezolve Ai, 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
Rezolve Ai 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.
- Log in at https://ace.authoritas.com.
- Go to Settings, Developer console, Keys.
- 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. Anace_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 to | Grant |
|---|---|
| Read jobs, usage, and feeds, search the catalog, and read from Merchant Center | enrichment:read |
| Run enrichment, cancel jobs, and write to Merchant Center | enrichment:write |
| Use the scoring and language utilities | utils:read |
| List webhook subscriptions | webhooks:read |
| Create and delete webhook subscriptions | webhooks:write |
The documentation tools work with any valid key. A write scope also satisfies the matching read check. New keys get enrichment:read, enrichment:write, and utils:read. Add webhooks:write if you want the webhook tools. See API Keys.
A key pinned to a project runs every tool against that project. An account-wide key runs against the account's most recently created project.
Step 2: Add the server in Cursor
- Open Settings, MCP.
- Click Add new MCP server.
- Set the URL to
https://ace.authoritas.com/api/mcp. - Add a header. Name:
Authorization. Value:Bearer <your-api-key>. - 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 Rezolve Ai app, go to Settings, Developer console, MCP.
- Connect: install the server into Cursor, VS Code, or Claude Code with your key filled in.
- Tools: turn each tool on or off per project.
- Try it: 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:
- 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. - 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
37 tools. On means enabled by default; opt means you enable it under Settings, Developer console, MCP. Tools marked credits need a positive credit balance on a live key and are charged for the AI work they do. On a test key they draw on the free monthly quota instead.
Documentation
| Tool | Default | What it does |
|---|---|---|
list_docs | on | List Rezolve Ai doc pages, optionally filtered by prefix (guides, using-rezolve-ai, api-reference). |
read_docs | on | Read 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.
| Tool | Default | What it does |
|---|---|---|
generate_contextual_rules | on, credits | Derive the eight section contextual rules for a product set. Returns them synchronously. Rules generation itself is not charged. |
enrich_content | on, credits | Generate the requested content types per product, grounded in rules. Returns a job id. |
run_enrichment_pipeline | on, credits | Derive rules and generate content in one call. Returns a job id. |
Both content tools take lookup, which looks each product up by its barcode or other identifiers before writing.
Product lookup
Scope: enrichment:write. See Product lookup.
| Tool | Default | What it does |
|---|---|---|
lookup_product | on, credits | Find what published sources say about one product from its GTIN, ASIN, part number or page address, with the source of every fact. Only a web search is charged. |
Jobs
Scope: enrichment:read, except cancel_job which needs enrichment:write.
| Tool | Default | What it does |
|---|---|---|
list_jobs | on | List jobs, newest first. Filter by status or kind. |
get_enrichment_job | on | Status, progress, and result of one job. |
get_job_results | on | Paginated per-product results for a job. |
cancel_job | on | Cancel a pending or running job. |
Account, feeds, and utilities
| Tool | Default | Scope | What it does |
|---|---|---|---|
get_usage | on | enrichment:read | Credit balance, rate limit, job count, test quota. |
list_feeds | on | enrichment:read | List the project's product feeds. |
get_feed | on | enrichment:read | One feed's metadata by id. |
detect_language | on | utils:read | Dominant language of a product set. Unbilled. |
check_agentic_readiness | on | utils:read | Per-product readiness score plus a summary. Unbilled. |
get_site_agent_readiness | on | enrichment:read | Your site's latest agent readiness audit: level, score, each shopping agent's verdict and routes, the latest journey. Read only. Unbilled. |
score_review_quality | on | utils:read | Weighted overall score from sub-scores. Unbilled. |
search_products | opt | enrichment:read | Natural-language catalog search. Needs an ingested catalog. |
Content and media
| Tool | Default | What it does |
|---|---|---|
enrich_product | on, credits | Enrich a single product with title, description, attributes, and SEO metadata. |
generate_content | on, credits | Structured content from a layout template. Pass productIds to ground it in real products. |
generate_images | on, credits | Product image variants from a source image. |
translate_content | on, credits | Translate between locales with glossary support. |
generate_feed | on | Format 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.
| Tool | What it does |
|---|---|
list_webhooks | List subscriptions and their events. Secrets are never returned. |
create_webhook | Subscribe an HTTPS endpoint to job events. The signing secret is returned once. |
delete_webhook | Delete 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.
| Tool | What it does |
|---|---|
gmc_list_connections | List the connections available in this project. |
gmc_list_subaccounts | List sub-accounts under a multi-client (MCA) aggregator. |
gmc_list_products | Paginate products straight from Merchant Center, bypassing the local cache. |
gmc_list_data_sources | List data sources such as primary and supplemental feeds. |
gmc_list_issues | Account-level issues plus aggregate product status counts. |
gmc_run_report | Run an MCQL report, for example SELECT offer_id, title FROM product_view LIMIT 1000. |
gmc_pull_products | Pull products from a connection into Rezolve Ai. |
gmc_push_products | Push linked products back to Merchant Center. |
gmc_resolve_issue | Queue automated fixes for a specific issue code, for example missing_gtin. |
gmc_create_promotion | Create a promotion on a data source. |
gmc_set_inventory | Set local or regional inventory for a product. |
gmc_pull_products writes into your Rezolve Ai catalogue. The last four change 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
prefix | string | No | Filter by path prefix. Top-level sections are guides, using-rezolve-ai, api-reference. |
{ "name": "list_docs", "arguments": { "prefix": "guides" } }Returns { "pages": [ { "path": "guides/webhooks", "title": "Webhooks" }, ... ] }.
read_docs
Read one page in full.
| Parameter | Type | Required | Description |
|---|---|---|---|
path | string | Yes | Doc 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. The result holds the rules under rules, keyed by product category. Rules generation is not charged, but the tool still needs a positive balance on a live key, and on a test key it uses one quota unit per product.
| Parameter | Type | Required | Description |
|---|---|---|---|
products | array | Yes | Products to analyse. Each needs at least id and title. |
brandVoice | object | No | Tone, contentStyle, targetAudience, language. |
creativityLevel | integer | No | 1 (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.
It starts an enrichment run, so it is refused while another run is in progress on the project, whichever surface started that run. The refusal costs nothing.
| Parameter | Type | Required | Description |
|---|---|---|---|
products | array | Yes | Products to enrich. |
contentTypes | array | Yes | For example product-description, meta-tags, jsonld-schema, irl-scenarios, internal-links, product-title, highlights, product-qa, product-attributes, image-alt. |
rules | object | No | Rules to ground against: the rules object from generate_contextual_rules. When omitted, content is written from the product data alone. |
brandVoice | object | No | Brand voice for the output. |
targetLanguage | string | No | BCP 47 locale. |
lookup | boolean | No | Look each product up by its gtin, isbn, asin, mpn with brand, or url before writing. Free sources only. |
lookupSources | array | No | Sources to look up in: amazon, open_data, page, web_search. Naming any turns lookup on. web_search is charged. |
run_enrichment_pipeline
Rules and content in one call. Uses credits. Returns a job id.
It starts an enrichment run, so it is refused while another run is in progress on the project, whichever surface started that run. The tool's error says where that run is, for example "An enrichment run is already in progress in the Shopify app for 21 products." The refusal costs nothing: wait for the run to finish and call the tool again.
| Parameter | Type | Required | Description |
|---|---|---|---|
products | array | Yes | Products to enrich. |
contentTypes | array | No | Defaults to a standard set. |
brandVoice | object | No | Brand voice for the output. |
creativityLevel | integer | No | 1 to 5. |
targetLanguage | string | No | BCP 47 locale. |
lookup | boolean | No | Look each product up by its identifiers before writing. Free sources only. |
lookupSources | array | No | Sources to look up in: amazon, open_data, page, web_search. Naming any turns lookup on. web_search is charged. |
{
"name": "run_enrichment_pipeline",
"arguments": {
"products": [{ "id": "sku-1", "title": "Merino base layer" }],
"contentTypes": ["product-description", "meta-tags"],
"targetLanguage": "de-DE"
}
}With a lookup, each product's result says what the lookup did for it. Your own product data always wins where a source disagrees.
{
"name": "run_enrichment_pipeline",
"arguments": {
"products": [{ "id": "sku-1", "title": "Fineliner pen, azure", "gtin": "4006381333931" }],
"contentTypes": ["product-description"],
"lookup": true
}
}lookup_product
Look one product up. Send whatever you know about it. Only a web search uses credits, and an answer already found is served from cache at no cost.
| Parameter | Type | Required | Description |
|---|---|---|---|
q | string | No | A bare value whose type is worked out: a barcode, an ISBN, an ASIN, a page address or a part number. |
gtin | string | No | GTIN-8, UPC, EAN-13 or GTIN-14. Checked against its check digit. |
isbn | string | No | ISBN-10 or ISBN-13. |
asin | string | No | Amazon identifier. Needs a connected Amazon store. |
mpn | string | No | Manufacturer part number. Send brand with it to search the web. |
sku | string | No | Your own stock code. Matched in your catalogue only. |
url | string | No | A product page to read. |
brand | string | No | The product's brand. |
market | string | No | Two letter country, for example GB. |
locale | string | No | Language tag, for example en-GB. |
sources | array | No | Use only these: catalog, amazon, open_data, page, web_search. Leave web_search out for a lookup that costs nothing. |
refresh | boolean | No | Look up again instead of using a cached answer. |
At least one of q, gtin, isbn, asin, mpn, sku or url is needed.
{
"name": "lookup_product",
"arguments": { "gtin": "4006381333931", "market": "GB" }
}Returns match (matched, ambiguous or not found, with a confidence), product (the best value per field), facts (every statement with the page that makes it), sources (what each source did) and conflicts. A product that is not found is a normal answer, not an error. For a batch, use POST /api/v1/enrichment/lookup.
list_jobs, get_enrichment_job, get_job_results, cancel_job
| Tool | Parameters |
|---|---|
list_jobs | status (pending, running, completed, partial, failed, cancelled), kind (rules, content, pipeline, article, lookup), page, pageSize (default 20, max 100) |
get_enrichment_job | jobId (required) |
get_job_results | jobId (required), page, pageSize (max 200) |
cancel_job | jobId (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.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Product title. |
description | string | Yes | Raw product description. |
price | number | Yes | Product price. |
images | array | Yes | Image URLs. |
category | string | Yes | Product category. |
attributes | object | No | Existing attributes to preserve or enhance. |
locale | string | No | Target locale. Default en. |
generate_content
Structured content from a layout template. Uses credits.
| Parameter | Type | Required | Description |
|---|---|---|---|
topic | string | Yes | Content topic or title. |
layout | string | Yes | One of ranked-list, grid-showcase, comparison-guide, category-roundup, how-to-guide, buying-guide, editorial, listicle-article, review, product-spotlight, seasonal-campaign. |
keywords | array | Yes | SEO keywords to target. |
locale | string | Yes | Content locale. |
productIds | array | No | Products to feature. They are loaded from your catalog and used as source material. |
tone | string | No | For example professional, conversational. |
wordCount | integer | No | Target 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
| Parameter | Type | Required | Description |
|---|---|---|---|
productIds | array | Yes | Products to include. |
platform | string | Yes | google-shopping, agentic-commerce, shopify, tiktok, or pinterest. |
locale | string | No | Output locale. |
includeEnrichments | boolean | No | Include AI-enriched data. Default true. |
generate_images
| Parameter | Type | Required | Description |
|---|---|---|---|
sourceImageUrl | string | Yes | Source image to work from. |
variants | array | Yes | lifestyle, on-model, environment, seasonal, or ugc-style. |
Charged per variant.
translate_content
| Parameter | Type | Required | Description |
|---|---|---|---|
content | object | Yes | The content to translate. |
sourceLocale | string | Yes | Source locale. |
targetLocale | string | Yes | Target locale. |
contentType | string | Yes | article, product, or feed. |
brandVoice | string | No | Brand voice to preserve. |
glossary | array | No | Term mappings, each { source, target, context? }. |
Utilities
| Tool | Parameters | Returns |
|---|---|---|
detect_language | products (required) | Language code, a confidence of high, medium, or low, and the reasoning |
check_agentic_readiness | products (required) | Per-product score and missing fields, plus a summary |
score_review_quality | items (required), each with contentQuality, seoScore, aiReadability, optional brandVoice and id | Weighted overall score per item |
get_site_agent_readiness | none | The latest audit of your own site, or scanned: false: level, score, score coverage, commerce score, each shopping agent's verdict with its routes and what measured them, the latest agent journey and the latest Agent shelf result |
All four are unbilled.
Webhooks
| Tool | Parameters |
|---|---|
list_webhooks | none |
create_webhook | url (required, must be HTTPS), events (required), description |
delete_webhook | id (required) |
Use these event types: enrichment.job.succeeded, enrichment.job.partial, enrichment.job.failed. The signing secret is in the create_webhook result and is not shown again. For the full event list, payloads, and signature check, see Webhooks.
Resources and prompts
Besides tools, the server offers resources and prompts to clients that support them.
Resources are read-only context a client can load without spending a tool call. Each one mirrors a tool, with the same scope and the same per-project switch.
| Resource | Mirrors | What it holds |
|---|---|---|
ace://catalogue/feeds | list_feeds | The project's product feeds. |
ace://catalogue/readiness | check_agentic_readiness | How ready the catalogue is to be read by a shopping agent. |
ace://account/usage | get_usage | Usage for the account behind the key. |
ace://docs | list_docs | Every documentation page, with its path. |
Prompts are ready-made workflows that name the tools to call and the order to call them in.
| Prompt | Argument | What it does |
|---|---|---|
audit_catalogue | focus (optional) | Assesses how well the catalogue can be found, read, and quoted by AI shopping agents, and ranks what to fix first. It does not write anything. |
prepare_product | product (required) | Takes one product through rules, content, and a readiness check. |
diagnose_visibility | topic (optional) | Works out why a catalogue is not showing up in AI assistants' answers. |
Authentication and errors
- Authentication: every
tools/calltohttps://ace.authoritas.com/api/mcpmust include a valid key asAuthorization: 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. Use a key with those scopes 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, image, and translation tools are charged on a live key and use the free monthly quota on a test key. Check with
get_usage, or GET /api/v1/usage.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| 401 on a tool call | Missing or invalid key. Check the Authorization: Bearer <key> header and that the key is active. |
| Client shows no tools | Wrong 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. Create a key with the scopes you need under Settings, Developer console, Keys. |
| Credits or 402 | Out of credits, or a test key has spent its monthly quota. Call get_usage or see Credits and usage. |
| Merchant Center tool fails | It needs a connected Merchant Center account. Connect one in Rezolve Ai first. |
| A job never finishes | Poll 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_docsandread_docsbefore it writes integration code, so it works from the current documentation. - Start with
check_agentic_readinesson a sample. It is free and tells you which products are too thin to enrich well. - Prefer
run_enrichment_pipelinefor a first run andenrich_contentwith cached rules for later batches. - Keep the Merchant Center write tools disabled until you specifically need them.