Guide

How to ask Claude about your Google Ads profit per product (MCP)

Opteno runs a Model Context Protocol (MCP) server at https://mcp.opteno.app/mcp. Add it in Claude as a custom connector, sign in to Opteno with OAuth, and Claude answers questions such as “which products lost money on Google Ads in the last 30 days?” from your own per-product profit figures, using 12 tools. The only changes it can make are adding or removing product tags inside Opteno and changing the filters on that store’s open Opteno dashboard.

Last checked · More guides

What Claude can read, and the only things it can change

Nine of the twelve tools only read, one changes the filters on that store’s open Opteno dashboard, and two add or remove tags inside Opteno. None can touch bids, budgets, campaigns, prices or Google Ads exclusions.

Each tool calls the same service method the Opteno dashboard calls, so Claude’s figures and the dashboard’s are the same figures.

  • Store summary — get_store_summary, find_store_id

    A store’s totals for a period — ad cost, clicks, conversions, revenue, refunds, net revenue, cost of goods, net profit, ROAS, CTR and CPC — plus its top and bottom five products. find_store_id looks up the store ID from its name.

  • Products — search_products, get_product_performance

    Search and filter by product name, status or ROAS, up to 25 per call, or read one product’s metrics by name, including cost of goods, net profit, POAS and gross margin. If a partial name matches several products, the answer covers the first and lists the others.

  • Variants — get_variant_breakdown

    Per-variant performance for one product, with each variant’s price and cost per item.

  • Compare — compare_products

    Several products side by side on cost, revenue and profitability; names it cannot match are listed as not found.

  • Kill, scale, watch — get_kill_scale_recommendations

    Sorts every product with enough spend into buckets by ROAS. Defaults: minimum ad spend 10 in the store’s currency, scale at ROAS 2 or above, kill at 1 or below. Each entry also carries net profit and POAS; one call judges up to 1,000 products.

  • Tags — list_tags, get_products_by_tag

    A store’s tags, and every product carrying one, with metrics.

  • Write — tag_products, remove_tag_from_products

    Add a tag to products (creating it if needed) or take one off. Needs the products:write scope and the tag permission in your Opteno role.

  • View — apply_dashboard_filters

    Sets filters on the store’s dashboard in any tab already open for it in your workspace, including a teammate’s: status, country, ROAS range, minimum ad cost, clicks, search, sort and tags. It changes what the dashboard shows, not your product data.

Exclusions stay in the app

There is no MCP tool for Google Ads product exclusions: they are planned in Opteno and applied only after a person approves them. The server also cannot reach billing, account settings or another workspace.

Connect Claude in five steps

Setup is one URL and one sign-in; no API key or client secret is needed. The Claude steps follow Anthropic’s help article “Get started with custom connectors using remote MCP”, read on 29 September 2026, which says custom connectors work in Claude, Cowork and Claude Desktop on Free, Pro, Max, Team and Enterprise plans, with Free users limited to one.

  1. Step 1: Open Customize > Connectors in Claude

    On Pro or Max, click “+” then “Add custom connector”. On Team and Enterprise, an Owner first adds it under Organization settings > Connectors (“Add”, hover over “Custom”, select “Web”); members then find it in Customize > Connectors and click “Connect”.

  2. Step 2: Paste the server URL and click Add

    Enter https://mcp.opteno.app/mcp. Leave “Advanced settings” (OAuth Client ID and Secret) empty: Opteno supports dynamic client registration, so Claude registers itself.

  3. Step 3: Sign in to Opteno and choose what Claude gets

    The consent screen lists the scopes Claude asks for. You can only untick scopes, not add them, and one must stay ticked. Keep dashboard:read, which covers every read tool and the dashboard filter. Keep products:write only if Claude should tag; the screen calls it “Change product status”, but over MCP it reaches only the two tag tools. Untick exclusions:write and markets:write, which no MCP tool uses. Under “Stores it may use”, pick stores; leaving it empty means every store you can access.

  4. Step 4: Turn the connector on in a chat

    Click “+” on the lower left of the chat, then “Connectors”, and switch Opteno on.

  5. Step 5: Ask, and review tool calls

    Name the store and the period. Anthropic advises “Allow always” only for tools you trust to run unsupervised, so keeping approval on for the two tag tools is sensible.

To disconnect, remove the connector in Customize > Connectors, or revoke it in Opteno under Settings → Developer → MCP, in the Connected apps card, which cuts the client off immediately.

Questions to ask, and what Claude does with them

Name the store and a period; Claude picks the tools. The quoted answers below illustrate the shape of a reply and are not real data.

With Opteno’s default POAS setting, POAS (profit on ad spend) is what remains of revenue after cost of goods and returns, divided by ad spend, and 1.00 is break-even. Example figures, default POAS setting, no refunds: product A has 1,200 revenue, 700 cost of goods and 400 ad spend, so ROAS is 3.00 and POAS is (1,200 − 700) ÷ 400 = 1.25. Product B has 900 revenue, 600 cost of goods and 350 ad spend: ROAS 2.57, but POAS 300 ÷ 350 = 0.86, a loss of 50 after ad spend. With default thresholds both land in the scale bucket, because buckets use ROAS — so ask for POAS alongside them.

  • “Which products had POAS below break-even in the last 30 days?”

    Break-even is a POAS of 1 with the default POAS setting. The MCP tools have no POAS filter, so Claude reads POAS on each product row, most completely from get_kill_scale_recommendations (ask for a minimum spend of 0; that covers products with ad spend and known cost of goods, up to 1,000 per call). Illustration: “Two products were under break-even: Product B at 0.86 and Product D at 0.64.”

  • “Compare Product A, Product B and Product C over 14 days”

    compare_products lines them up. Names match partially, Shopify product IDs exactly, and anything unmatched is listed as not found. Illustration: “Product A made the most net profit; Product C was not found.”

  • “Tag the kill bucket as ‘review’”

    Claude runs get_kill_scale_recommendations, then tag_products. The tag is created if missing and lives inside Opteno. A partial name tags the product with the most ad spend whose name contains it. Kill-bucket entries give names, not Shopify product IDs, so when names overlap ask Claude to fetch the Shopify product IDs first (compare_products returns them) and tag by ID.

  • “Show only active products with ROAS above 3 on my dashboard”

    apply_dashboard_filters sets those filters on the store’s dashboard in any tab already open for it; an open tab picks them up within about 15 seconds. A dashboard opened afterwards starts with its usual filters. No product data or metrics change.

How the period you ask for becomes a window

Opteno keeps rolling 7, 14, 30 and 60-day windows ending yesterday. Every tool that reports metrics rounds the days you ask for up to the nearest window, uses 30 days when you give none, and states the window in its answer. apply_dashboard_filters leaves the dashboard’s window unchanged unless you name a period.

  • 1 to 7 days → the 7-day window.
  • 8 to 14 days → the 14-day window.
  • 15 to 30 days → the 30-day window.
  • 31 days or more → the 60-day window. “Last 90 days” returns 60-day figures; “last 10 days” returns 14-day figures.

The REST API for scripts

For scripts there is a read-only REST API with two GET endpoints, described by an OpenAPI schema at https://api.opteno.app/api/v1/schema/ and Swagger docs at https://api.opteno.app/api/v1/docs/. Authenticate with a workspace API key sent as Authorization: Bearer opt_live_…, created under Settings → Developer → Keys.

GET /api/v1/stores/ lists the stores a key can reach. GET /api/v1/dashboard/products/?store_id=… returns product rows with 7, 14 and 30-day metrics, summary totals and offset/limit pagination (50 rows by default, 200 at most), with the dashboard’s filters, including min_poas and max_poas. Unlike MCP, it has no 60-day window: anything over 30 days returns 30-day figures. The trailing slash in each path is required.

What keeps your data yours

Claude sees only the stores and scopes you grant, and every tool call is checked on the server as if you had made it in the dashboard.

  • You sign in on Opteno’s own page (OAuth 2.1 with PKCE, S256 only), so Claude never sees your password. Access tokens last one hour, refresh tokens 30 days.
  • Before any tool runs, the server checks the store against the credential’s allow-list and your role’s permission for the action.
  • The caller is identified from the credential, never from a tool argument.
  • Revoking under Settings → Developer → MCP, in the Connected apps card, cuts Claude off immediately.
  • API keys carry scopes and an optional store allow-list, are shown once, stop working the moment they are revoked, and are not charged for.
  • Neither the MCP server nor the API can reach billing, account settings or another workspace.

Full reference

The developer page at opteno.app/developers lists all twelve tools and the key scopes; every API parameter is in the Swagger docs at https://api.opteno.app/api/v1/docs/.

Questions

Does Opteno have an MCP server for Claude?

Yes. It is at https://mcp.opteno.app/mcp and offers 12 tools for store summaries, product and variant performance, comparisons, kill/scale/watch buckets, tags and dashboard filters. Add it in Claude as a custom connector and sign in with OAuth.

Can Claude change my Google Ads campaigns or my Shopify store through Opteno?

No. The only writes over MCP are adding or removing product tags inside Opteno and changing the filters on that store’s open Opteno dashboard. It cannot change bids, budgets, campaigns, prices or exclusions.

Which Claude plans can connect it?

Anthropic’s help centre lists Free, Pro, Max, Team and Enterprise, with Free limited to one custom connector. On Team and Enterprise an Owner adds the connector, then each member connects with their own sign-in.

Can Claude list the products below POAS break-even?

Mostly. Claude reads POAS on each product row, usually from the kill/scale/watch tool with a minimum spend of 0. That covers products with ad spend and known cost of goods, up to 1,000 per call. Break-even is a POAS of 1 with the default POAS setting. The MCP tools have no POAS filter argument; the REST API (min_poas, max_poas) and the dashboard do.

Why did I get 60-day figures when I asked for 90 days?

Over MCP, the longest rolling window is 60 days, and any request over 30 days uses it. The REST API stops at 30 days. Requests round up, so 10 days gives the 14-day window.

Can I use an API key instead of OAuth?

Yes; the developer page shows how. OAuth is the better route for Claude, because a key written into a URL can end up in logs and browser history, and only revoking the key ends that.

See which products are losing you money

Connect Shopify and Google Ads in under five minutes. From $14.99 a month, cancel whenever you want, and no change to your store or your campaigns without your approval.

support@opteno.app