Upfixe Ads

Upfixe is the autonomous PPC engine built for AI agents.

От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноМожет изменять данные

Что умеет

  • Whoami: Return a single-call snapshot of this user's Upfixe state — email, admin flag, the Google Ads principal/MCC they pinned, brand count + plan limit, drafts/published campaign counts, reports cou
  • List Brands: List the brands (businesses / clients) this Upfixe account manages. Returns brandId (numeric), name, website, Google Ads customerId, and whether a value-proposition doc has been extracted
  • Create Brand: Register a new brand (business / client) on this Upfixe account. Each brand pins to exactly one Google Ads customerId. Two ways to choose it: • Pass customerId explicitly. Required when

Какие данные видит

Нужен ли аккаунт

Не нужен: сервер работает без входа

Upfixe is the autonomous PPC engine built for AI agents. With Upfixe's Model Context Protocol (MCP) server, your AI assistant can research keywords, draft responsive search ads, structure ad groups, publish campaigns, and pull cross-network analytics across both Google Ads and Microsoft Advertising (Bing Ads). Features enterprise-grade token encryption (AES-256-GCM) and strict safety guardrails (auto-paused deployments, daily budget caps, O&O syndication filters).

Create and manage Google Ads campaigns from chat.

Upfixe turns natural-language briefs into budget-aware Google Ads campaigns: Keywords, ad copy, structure, and budget allocation, all drafted as paused campaigns you review in Google Ads before going live.

What it does

  • Analyzes your homepage and landing pages to extract your value proposition
  • Generates keyword candidates filtered by your daily budget (no keywords you can't afford)
  • Drafts complete campaigns (keywords + ad copy + structure) as paused drafts with a direct Google Ads deep-link for review
  • Reports on live campaign performance and lets you pause/resume from chat

Why it's different Most Google Ads MCPs are read-only analytics tools. Upfixe is write-capable and budget-aware! Built for SMBs who want to launch real campaigns from Claude, not just query existing ones.

Setup Sign in with Google during the OAuth flow to connect your Google Ads account. Free 7-day trial.

Learn more: https://upfixe.com/mcp

Как подключить

Как подключить Upfixe Ads к Claude

Адрес сервера, который нужно вставить в настройках Claude:

https://upfixe-ads--george-mvur.run.tools

  1. Откройте Claude (сайт claude.ai или приложение для компьютера).
  2. Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
  3. Нажмите Добавить пользовательский коннектор (Add custom connector).
  4. Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
  5. В чате нажмите + → Коннекторы и включите новый коннектор.

Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.

Авторизация

После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.

Как подключить Upfixe Ads к ChatGPT

Адрес сервера, который нужно вставить в настройках ChatGPT:

https://upfixe-ads--george-mvur.run.tools

  1. Откройте ChatGPT в браузере (chatgpt.com). Нужен тариф Plus, Pro, Business, Enterprise или Edu.
  2. Один раз включите режим разработчика: Настройки → Приложения → Дополнительные настройки → Режим разработчика (Settings → Apps → Advanced settings → Developer mode).
  3. Откройте Настройки → Коннекторы и нажмите Создать (Create).
  4. Заполните форму: Название (любое), Описание (одна фраза, что делает сервис), URL MCP-сервера (скопируйте ниже).
  5. В поле Аутентификация выберите OAuth, если сервис требует вход, иначе Нет. Нажмите Создать.
  6. В новом чате откройте + → Приложения/Коннекторы и включите коннектор.

Название раздела у OpenAI менялось (Connectors → Apps/Plugins). Если пункт называется иначе, ищите «режим разработчика» в настройках. В рабочих пространствах Business/Enterprise администратор должен разрешить пользовательские коннекторы.

Авторизация

При первом использовании ChatGPT откроет окно входа в сервис. Войдите и подтвердите доступ.

Как подключить Upfixe Ads к Cursor

Адрес сервера, который нужно вставить в настройках Cursor:

https://upfixe-ads--george-mvur.run.tools

Быстрый способ: нажмите кнопку Открыть в Cursor ниже, Cursor сам предложит добавить сервер.

Вручную:

  1. В Cursor откройте Settings → Cursor Settings → MCP и нажмите Add new global MCP server.
  2. Вставьте JSON, скопированный ниже, в открывшийся файл ~/.cursor/mcp.json (для одного проекта: .cursor/mcp.json в корне проекта).
  3. Сохраните файл. Сервер появится в списке MCP; при необходимости пройдите авторизацию по кнопке рядом с ним.

Авторизация

Если сервис требует вход, рядом с сервером в списке MCP появится кнопка авторизации.

Список инструментов сервера (27)

Технические названия из tools/list. Нужны только разработчикам.

whoamiReturn a single-call snapshot of this user's Upfixe state — email, admin flag, the Google Ads principal/MCC they pinned, brand count + plan limit, drafts/published campaign counts, reports count, plan tier, and trial days remaining. Use this when the user asks 'what's my MCC?', 'which plan am I on?', 'how many brands do I have?', or any other introspection question — it's a Supabase-only read so it's instant. Don't call list_ad_accounts (slow, Google API) just to answer 'what's my MCC?'.
list_brandsList the brands (businesses / clients) this Upfixe account manages. Returns brandId (numeric), name, website, Google Ads customerId, and whether a value-proposition doc has been extracted yet. If empty, the user is brand new — coach them to call create_brand. Required first step for most other tools.
create_brandRegister a new brand (business / client) on this Upfixe account. Each brand pins to exactly one Google Ads customerId. Two ways to choose it: • Pass customerId explicitly. Required when the user manages more than one Google Ads account (agencies / MCC owners). Call list_ad_accounts first to discover the available customerIds, surface them to the user, and pass the one they confirm. • Omit customerId. Only safe when the user has exactly one accessible account. If they have multiple, this tool returns an error rather than silently picking one. If no Google Ads account is connected to the Upfixe account at all, this returns an error telling the user to connect at https://app.upfixe.com/connect-google-ads. After creating, call fetch_homepage_content to scrape the site, then update_value_prop_doc to save the doc.
list_ad_accountsReturn every Google Ads account reachable from the user's OAuth grant — useful for agency managers and MCC owners who need to pick which account a brand publishes into. Each entry includes the customerId (10 digits), the descriptive name, a flag for whether it's a manager (MCC) account, and a `status` field (ENABLED, CANCELED, SUSPENDED, CLOSED, UNKNOWN). IMPORTANT: only `status='ENABLED'` accounts can host new campaigns. CANCELED/SUSPENDED/CLOSED accounts appear here for transparency but create_brand and set_brand_ad_account will refuse to bind to them. If the user has multiple options, surface only the ENABLED ones unless they explicitly ask about a closed account. When the user is creating a brand (create_brand) or rebinding one (set_brand_ad_account), call this tool first, surface the human-readable names to the user, and pass the customerId they confirm. Don't guess — agencies routinely run dozens of accounts and binding to the wrong one means campaign spend lands on the wrong client.
set_brand_ad_accountChange which Google Ads customerId this brand publishes into. Validates that the new customerId is actually in the user's accessible-accounts list, so an LLM hallucinating an ID can't quietly redirect campaign spend. Use this when (a) a brand was bound to the wrong account on creation, or (b) an agency moves a client between MCCs. Future campaigns drafted for this brand will publish into the new account; already-live campaigns in the old account aren't touched.
get_value_prop_docReturn the brand's value-proposition doc as rendered markdown using the 9-section template: Elevator Pitch, Who We Are, Current Client Base, Problems We Solve, Client Journey, Services and Pricing, Philosophy, USP, Tag lines. Same shape the web app's value-prop generator produces — chat-generated and web-generated docs read identically. If the doc is wrong/stale/missing, call update_value_prop_doc to fix it.
update_value_prop_docOverwrite the value-prop doc for a brand with the 9-section template the web app uses. Use this when first creating a doc (after fetch_homepage_content + your own analysis) or when the user wants to revise an existing one. Read the current doc first via get_value_prop_doc if making a partial edit — this tool replaces the whole doc, it doesn't patch. Field semantics map 1:1 to the markdown sections shown to users (Elevator Pitch, Who We Are, Current Client Base, Problems We Solve, Client Journey, Services and Pricing, Philosophy, USP, Tag lines).
propose_campaign_goalGiven a brand and a landing page, propose a structured campaign goal (who/what/why/where + core message + suggested seed keywords) for the user to APPROVE before any keyword research or draft generation happens. This is the same goal generator the web app uses. Call this tool AFTER the user has provided a campaign brief (landing page URL + country/language + budget + target CPA) and BEFORE calling generate_campaign_draft. The goal it returns is the foundation for keyword research and ad copy — having the user okay it now (or ask for edits) means we don't waste a 1-2 minute campaign generation on the wrong positioning. Show the returned goal to the user verbatim. If they want changes, just ask follow-up questions and re-draft conversationally — there's no 'edit goal' tool, the goal is just text/structured fields. Once they approve, pass `campaignGoal` (free-form string version of the goal) into generate_campaign_draft.
get_keyword_suggestionsDiscover Google Ads keywords for a landing page, ranked by ROI score and filtered for the given daily budget. Returns flat ranked candidates + a structure recommendation (tier, ad-group count, match-type mix, bid strategy). The LLM caller is expected to group these thematically and propose final ad-group names with the user — this tool does the deterministic discovery + budget-aware structuring, not the creative grouping. Pre-resolved geo + language constants are required.
set_master_accountSet which Google Ads account is the user's MCC (My Client Center / manager). This becomes the `login-customer-id` HTTP header for every subsequent Google Ads API call against a sub-account under the manager. Required for agency users with multiple client accounts under one MCC; single-account users normally don't need to call this. Validates that the customerId is in the user's accessible-accounts list AND that Google Ads reports it as a manager account (`isManager=true`). Pass a sub-account ID and the call rejects. After setting, the displayed names of sibling sub-accounts in list_ad_accounts will resolve correctly instead of falling back to 'Account 1234567890'.
fetch_homepage_contentScrape a brand's homepage and return the raw extracted content — title, meta description, headings (h1/h2/h3), meta tags, primary body text (truncated ~5000 chars), and call-to-action labels — so you (Claude) can reason over it directly to infer the brand's positioning, audience, services, and unique selling points. This is the preferred way to build a value-prop doc: call fetch_homepage_content, read the content yourself, then distill it into the 9-section template the web app also uses — elevatorPitch, whoWeAre, currentClientBase, problemsWeSolve, clientJourney, servicesAndPricing, philosophy, usp, taglines (array of 1-5) — and call update_value_prop_doc({ brandId, elevatorPitch, whoWeAre, currentClientBase, problemsWeSolve, clientJourney, servicesAndPricing, philosophy, usp, taglines }) to persist it. No server-side LLM call happens here — you do the reasoning. Typical flow: create_brand → fetch_homepage_content({ url: brand.website }) → analyze the returned content → update_value_prop_doc with your distilled 9-section doc.
fetch_keyword_forecastsReturns Google Keyword Planner forecasts (search volume, competition level, top-of-page CPC bid range in micros) for the given country/language. Use this to design ad-group themes and select keywords with good unit economics BEFORE drafting the campaign. Two input sources, use either or both: • `seeds` — 0-20 seed keywords you derived from the brand's value-prop doc or the user's brief. • `landingPageUrl` — a target landing page; Keyword Planner extracts page-relevant ideas. If you have a landing page in the campaign brief, pass it here too — it produces ideas the seeds alone would miss (page copy and product names). At least one of `seeds` or `landingPageUrl` is required. Returns up to 200 forecasts per call. This is the preferred way to plan campaigns — call fetch_keyword_forecasts to see real search data, then design ad groups + write RSA copy yourself, then call save_campaign_draft to persist the structure. Note: bid values are in micros (1_000_000 = 1.00 in the account's currency). Competition is LOW/MEDIUM/HIGH/UNKNOWN.
generate_campaign_draftRun the end-to-end Upfixe campaign generator: keyword research from the landing page and user-provided seeds, budget/CPA filter (drops keywords whose top-of-page CPC > targetCpa × 0.5), automatic ad-group splitting by theme/volume/ROI, and AI-generated ad copy (up to 15 headlines + 4 descriptions per ad group). Persists the result as a row in campaign_drafts and returns the draftId. NOTHING is pushed to Google Ads — that's a separate, explicit step (publish_campaign_to_google_ads). INTENDED SEQUENCE: 1. User provides campaign brief (landing page, country, language, budget, target CPA, any positive/negative seed keywords). 2. Call propose_campaign_goal — show the proposed goal, get user approval. 3. Call generate_campaign_draft (this tool) with the approved goal as `campaignGoal`. 4. Show the returned draft to the user — keywords per ad group, sample headlines, total campaign size — and ask if they want changes. 5. If they're happy and EXPLICITLY say they want to publish, call publish_campaign_to_google_ads({ draftId, confirm: true }). Takes 1-2 minutes typically — keyword research and ad copy both involve external API calls. If it fails, the error message will say why (most often: Google Ads OAuth expired, landing page unreachable, or the targetCpa is so low that all keywords get filtered out).
save_campaign_draftADVANCED MODE — for most flows, use generate_campaign_draft instead, which runs keyword research and ad-copy generation for you. This tool only persists a campaign structure that Claude designed manually (after calling fetch_keyword_forecasts to see the planner data). Returns a draftId. The draft is NOT pushed to Google Ads yet — call publish_campaign_to_google_ads({ draftId }) to push as paused. This is the new preferred way to create a campaign — Claude designs the structure, this tool persists it.
list_campaign_draftsReturn recent campaign drafts on this Upfixe account, newest first. Useful for: • Recovering from a dropped connection during generate_campaign_draft — the work finishes server-side even if the LLM never gets the response, so the draft will be here. • Answering 'what drafts do I have for brand X?' or 'show me my campaigns'. • Picking up where the user left off in a previous session. Returns brandId, draftId, name, status, createdAt, and a 1-line summary (ad-group count + total keywords + total headlines). To see full contents, follow up with inspect_campaign_draft({ draftId }).
inspect_campaign_draftReturn the complete contents of a campaign draft: campaign-level settings (name, budget, target CPA, country, language, isCold, negative keywords), and per-ad-group: keywords with search volume + bid estimate + competition, plus all generated headlines and descriptions. Use this BEFORE publish_campaign_to_google_ads so the user can see what they're about to create in their Google Ads account. The draft summary returned by generate_campaign_draft is intentionally brief — this tool is the source of truth for what would actually publish. Show the user the headlines + a sample of keywords per ad group; flag any ad groups that look off-target (e.g. a brand-name mismatch, or keywords that imply low intent).
publish_campaign_to_google_ads⚠️ THIS PUBLISHES TO GOOGLE ADS RIGHT NOW. The campaign and all its ad groups, keywords, and ads will be created in the user's Google Ads account immediately after this call. It will be created with status=PAUSED so no money is spent until a human clicks Enable in the Google Ads UI — that's the safety boundary — but the campaign IS in their account. DO NOT call this tool because the user said 'approve', 'looks good', 'yes', or 'go ahead' while reviewing the draft. Those words mean 'I like the draft' — they do NOT mean 'put it in my Google Ads account'. The user must explicitly say something like 'publish to Google Ads', 'push it to Google Ads', or 'create it in my Google Ads account' before you call this. If there is ANY ambiguity, summarize what will happen and ask 'should I create this in your Google Ads account right now? It'll be paused so it won't spend until you click Enable in Google Ads UI.' REQUIRES confirm=true to actually publish. If confirm is missing/false, returns a summary and waits for the user to explicitly say yes to publishing. Idempotent: if the draft is already published (publication record exists), the call is a no-op and returns the existing Google Ads campaign id. (This tool was previously named approve_campaign_as_draft — that name was misleading.)
get_campaign_reportFetch Google Ads performance data (spend, impressions, clicks, conversions, CTR, CPA) for a brand over a date range. Returns per-campaign rows plus ad-group, keyword, and ad-level breakdowns. Includes a previous-period comparison so the LLM can talk about change (last-7-day vs the prior 7 days, etc). Defaults to last 30 days. Pass explicit ISO dates (YYYY-MM-DD) for custom ranges.
pause_campaignSet a Google Ads campaign's status to PAUSED. Reversible via resume_campaign. The campaign stops spending immediately. Use when the user wants to halt spend on a specific campaign without deleting it.
resume_campaignSet a paused Google Ads campaign's status back to ENABLED. The campaign starts spending again at its existing daily budget. Use to re-enable a campaign that pause_campaign or the publish_campaign_to_google_ads flow left in PAUSED state.
update_campaign_budgetUpdate the daily budget of a live Google Ads campaign. Takes effect within minutes. The new amount overrides the existing budget — Google Ads doesn't keep a history at this layer (the Upfixe dashboard does). Validates the new budget is positive. Strongly recommend confirming with the user before calling — a large budget change can blow through a daily spend cap fast.
edit_campaign_draftModify a campaign draft (still in our DB, not yet pushed to Google Ads). Useful for tuning after save_campaign_draft persists the first version: rename, change budget, change target CPA, swap the landing page, or extend the negative-keyword list. Editable fields: name, dailyBudget, targetCpa, destinationUrl (landing page), additional negative keywords. Anything else (regenerate ad groups, change country/language, swap keywords) requires designing a fresh draft via fetch_keyword_forecasts + save_campaign_draft — those changes reflow the whole campaign structure and aren't safe to patch in place. Rejects if the draft has already been pushed to Google Ads (status != 'draft') — edit there via pause/budget/keyword tools instead.
add_negative_keywordsAdd campaign-level negative keywords to a live Google Ads campaign. Suppresses ad serving across every ad group when the user's query matches a negative. Default match type is BROAD (any query containing the term excludes the ad); pass matchType per keyword to use PHRASE or EXACT. Use when reports show wasted spend on irrelevant queries — the LLM should look at the keyword performance section of get_campaign_report to find candidates before adding.
remove_keywordsRemove a keyword from a live ad group. Looks up the keyword's criterion id by text + optional match-type filter, then issues a REMOVE mutate. If no matchType is given and the same text exists across multiple match types, removes all of them. Use when reports show a specific keyword burning budget without converting. To stop the whole campaign from serving on a query, prefer add_negative_keywords (campaign-level) — removing a keyword only affects that one ad group. Irreversible: re-adding requires a fresh save_campaign_draft or manual ad-group edits.
delete_ad_groupPermanently remove an ad group from a live Google Ads campaign. All keywords and ads in it stop serving. **Irreversible** — Google Ads sets status=REMOVED rather than truly deleting, but the only way back is to recreate the ad group + keywords + ads from scratch. Prefer pause_campaign (whole campaign) or remove_keywords (specific keywords) for less drastic interventions. Use this only when a whole thematic block of the campaign needs to go (e.g. 'commercial leads' ad group when the user pivots to residential-only).
get_account_summaryAggregate Google Ads performance across every brand on this Upfixe account. Returns per-brand totals (spend, impressions, clicks, conversions) plus the overall sum — useful for agency users who want to answer 'how are my clients doing this month?' without asking for each brand individually. Defaults to last 30 days. Brands with no live campaigns or no impressions in the period contribute zeros. Falls through brand-by-brand failures (one brand's revoked OAuth or deactivated customerId doesn't block the others).
contact_founderSend a free-form message direct to the Upfixe founder (currently george@upfixe.com). Use this when the user wants to report a bug, request a feature, ask a billing question, or just talk to a human. The message + user identity is persisted server-side; the founder will follow up at the user's account email. Don't use this for things the other tools can answer — call list_brands / get_campaign_report / whoami first.