> For the complete documentation index, see [llms.txt](https://help.seoutils.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.seoutils.app/guide/mcp-server.md).

# MCP Server (AI Integration)

The MCP Server lets you connect AI assistants like Claude, ChatGPT, Codex, Cursor, or any MCP-compatible client to your SEO data. Ask questions in plain English and get instant answers — no need to navigate dashboards or export reports manually.

<div data-full-width="true"><figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2FRf4Cj5GRET4ouj1V5xDv%2FXnapper-2026-03-19-21.42.45.png?alt=media&amp;token=f20fe4f9-cffd-40f5-bf56-dd8ef24b189a" alt=""><figcaption><p>Claude using SEO Utils to build an area demographics dashboard</p></figcaption></figure></div>

{% hint style="info" %}
MCP (Model Context Protocol) is an open standard that lets AI assistants connect to external data sources. SEO Utils runs an MCP server locally on your machine — your data never leaves your computer.
{% endhint %}

### Example Reports Generated by MCP

These reports were generated entirely by the MCP Server — one prompt, zero manual work:

* [**Laravel.com Complete SEO & Backlink Report**](https://app.seoutils.app/laravel-complete-seo-report) — Traffic analytics, keyword rankings, backlink profile, competitor analysis, and trend charts in one interactive dashboard.
* [**SEO Health Report for tuikhoeconban.com**](https://app.seoutils.app/seo-health-report-tuikhoeconban) — Google Search Console audit with CTR opportunities, keyword cannibalization, zero-click queries, and prioritized recommendations.

## What Can You Do With It?

| Use Case                         | Example Prompt                                                                                                                                                                     |
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Generate reports**             | "Generate a weekly SEO report for example.com"                                                                                                                                     |
| **Find weak pages**              | "Find pages with high impressions but low CTR"                                                                                                                                     |
| **Keyword cannibalization**      | "Which keywords have multiple pages competing?"                                                                                                                                    |
| **Ranking trends**               | "Show me my biggest ranking winners and losers this month"                                                                                                                         |
| **Ranked-page changes**          | "Compare the captured HTML before and after this page was lost, and tell me which changes may have contributed"                                                                    |
| **Content gaps**                 | "Find queries I'm ranking for but don't have dedicated pages"                                                                                                                      |
| **Local SEO**                    | "Generate a local SEO report for my business"                                                                                                                                      |
| **Multi-location analytics**     | "Compare my Haidilao hot pot rankings across all locations"                                                                                                                        |
| **Client reports**               | "Create a professional client-ready report for example.com"                                                                                                                        |
| **Keyword research**             | "Check keyword metrics for: seo tools, rank tracker"                                                                                                                               |
| **SERP analysis**                | "What's ranking for 'seo tools' in Google?"                                                                                                                                        |
| **Backlink analysis**            | "Show me the backlinks for example.com"                                                                                                                                            |
| **Content gap**                  | "Find keywords competitors rank for but I don't"                                                                                                                                   |
| **Backlink gap**                 | "Find sites linking to competitors but not me"                                                                                                                                     |
| **Traffic analytics**            | "Show me the traffic overview for laravel.com"                                                                                                                                     |
| **Organic keywords**             | "What keywords does laravel.com rank for?"                                                                                                                                         |
| **Demographics**                 | "Show me population and income data around my business"                                                                                                                            |
| **Bulk analysis**                | "Compare organic traffic for laravel.com, symfony.com, and codeigniter.com"                                                                                                        |
| **NAP Finder**                   | "Which domains have the most NAP citations for my business?"                                                                                                                       |
| **Keyword explorer**             | "What are the keyword suggestions for 'keto diet' in the US?"                                                                                                                      |
| **Saved keywords**               | "Create a keyword list called 'Competitors' and add: seo tools, rank tracker"                                                                                                      |
| **Grow rank tracker**            | "Add the top 20 content-gap keywords from my competitor into my example.com rank tracker"                                                                                          |
| **Clean up rank tracker**        | "Remove these irrelevant keywords from my example.com rank tracker: foo, bar, baz"                                                                                                 |
| **Weight rank tracker keywords** | "In my example.com rank tracker, make 'buy seo tools' count three times and set 'seo tools login' to Track only"                                                                   |
| **Automations**                  | "Create an automation that exports PDF when my rank tracker finishes"                                                                                                              |
| **Indexing health**              | "How many of my pages are indexed? Which directories have the worst indexing rate?"                                                                                                |
| **Indexing diagnostics**         | "Find pages with zero internal links that aren't indexed — orphan pages"                                                                                                           |
| **Internal link analysis**       | "Which pages have the most internal links pointing to them?"                                                                                                                       |
| **Find internal links**          | "Find internal links for my five best priority pages on example.com — quote the cost first"                                                                                        |
| **AI log analysis**              | "Which AI bots are violating my robots.txt? What questions is Perplexity asking about my site?"                                                                                    |
| **Keyword insights**             | "Which keywords are trending up in my rank tracker?"                                                                                                                               |
| **GA4 conversions**              | "Which pages generate the most conversions from organic search?"                                                                                                                   |
| **Custom queries**               | "How many keywords am I tracking across all reports?"                                                                                                                              |
| **Manage workspaces**            | "Create a new workspace called Client A" or "In the Client A workspace, create a rank tracker for clienta.com"                                                                     |
| **SEO Tests**                    | "Create a split test on example.com comparing /pricing vs /pricing-v2 — 50/50 traffic, hypothesis is the new layout will lift CTR"                                                 |
| **Local rank tracking**          | "Create a GMB rank tracker for Haidilao Hot Pot in Bellevue, WA — 5x5 grid at 500m radius, tracking 'hot pot bellevue' and 'best chinese bellevue', weekly on Mondays 9am Pacific" |
| **LLM rank tracking**            | "Create an LLM rank tracker for my brand Acme (variants: Acme, Acme Inc) tracking 'best crm software' and 'top crm tools' in ChatGPT and Google AI Overview, weekly"               |
| **AI Visibility**                | "In my Ahrefs exploration, what is my share of voice in AI answers, and in which prompts do Semrush and Moz win instead of me?"                                                    |
| **Review monitoring**            | "Start tracking the Google reviews for Haidilao Hot Pot Bellevue — pull the 200 most recent reviews and tell me which ones have no owner response"                                 |
| **Citation discovery**           | "Run a NAP Finder for Monsoon Seattle at 615 19th Avenue East, phone (206) 325-2111, then show me which directories cite the business"                                             |
| **Content briefs**               | "Create a content struct for 'keto meal plan', wait for the analysis, then generate an AI outline with GPT and write an article draft from it"                                     |
| **Keyword clustering**           | "Cluster these 50 keto keywords by SERP similarity and tell me how many pages I need to cover them — use the DataForSEO SERP API"                                                  |
| **Entity analysis**              | "Run an NLP analysis on my keto guide and my competitor's page with TextRazor — which entities do they cover that I don't?"                                                        |

The MCP server gives the AI read-only access to your database, can fetch live data from external APIs (keyword metrics, SERP results, backlinks), and can manage your saved keyword lists.

## Requirements

* A valid SEO Utils license key
* MCP Access (one-time purchase)

## Setting Up the MCP Server

{% stepper %}
{% step %}
**Purchase MCP Access**

Go to **Settings → Services** and scroll down to the **MCP Server (AI Integration)** section. Click **"Purchase MCP Access"** to complete the one-time purchase via Stripe.

<figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2F56vFkvWBODYSBbc6P9Dh%2FXnapper-2026-03-21-15.13.49.png?alt=media&amp;token=4faf10c9-ba94-4b75-bbbc-7dcb850bcc1a" alt=""><figcaption><p>Purchase MCP Access button in Settings</p></figcaption></figure>

Alternatively, you can purchase MCP access directly from your browser at [app.seoutils.app/mcp/purchase](https://app.seoutils.app/mcp/purchase) — enter your license key and complete the checkout.

{% hint style="info" %}
MCP access is a one-time purchase with unlimited updates — no subscription. It's tied to your license key, works on all devices associated with your license, and cannot be transferred. An active (non-expired) SEO Utils license is required.
{% endhint %}
{% endstep %}

{% step %}
**Refresh Purchase Status**

After completing your purchase, go back to **Settings → MCP Server** and click the **"Refresh"** button to verify your purchase. This confirms your MCP access is active.

<figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2FO8DgaJGyC2rh4jgDor7u%2FXnapper-2026-03-21-15.15.35.png?alt=media&amp;token=43b5d43f-5efd-4698-b690-f9cec4c6c9b6" alt=""><figcaption><p>Click Refresh to verify your purchase</p></figcaption></figure>
{% endstep %}

{% step %}
**Enable the MCP Server**

Once your purchase is verified, toggle **"Enable MCP Server"** to start the server. You should see the status change to **Running (port 19515)**.

<figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2FIKIQ715z5A66FAXlLmy4%2FXnapper-2026-09-28-18.16.04.png?alt=media&amp;token=ead4bb9c-32a6-475b-ae06-edc32ff256b6" alt=""><figcaption><p>MCP Server running, with the Connect an AI app picker below</p></figcaption></figure>
{% endstep %}

{% step %}
**Connect your AI app**

Under **Connect an AI app**, pick your app and follow its steps, described below.

<figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2FZupRvmROMYFOUrOl89WP%2FXnapper-2026-09-28-18.13.49.png?alt=media&amp;token=cf35fe36-d108-49df-a636-ed9d452588be" alt=""><figcaption><p>Connect an AI app with Claude Desktop &#x26; Cowork selected</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## Connecting to AI Assistants

In SEO Utils, go to **Settings → MCP Server** and use **Connect an AI app**: pick your app, and SEO Utils shows exactly what to do (usually one click), then how to add the [SEO Utils skill](#install-the-seo-utils-skill-recommended). Every command has its own **Copy** button, already filled in with the location of SEO Utils on your computer.

| App                                              | How it connects                                    | Requires Node.js? | Requires public URL?                              |
| ------------------------------------------------ | -------------------------------------------------- | ----------------- | ------------------------------------------------- |
| **Claude Desktop & Cowork**                      | One click: **Install in Claude Desktop**           | No                | No                                                |
| **Claude Code**                                  | One click: **Add to Claude Code**                  | No                | No                                                |
| **OpenAI Codex** (ChatGPT desktop app, CLI, IDE) | One click: **Add to Codex**                        | No                | No                                                |
| **OpenCode** (CLI, desktop app, IDE)             | One click: **Add to OpenCode**                     | No                | No                                                |
| **Cursor**                                       | One click: **Add to Cursor**                       | No                | No                                                |
| **VS Code** (GitHub Copilot)                     | One click: **Add to VS Code**                      | No                | No                                                |
| **OpenClaw**                                     | One command                                        | No                | No                                                |
| **Grok Build** (CLI coding agent)                | One command                                        | No                | No                                                |
| **Google Antigravity**                           | Paste a config                                     | No                | No                                                |
| **Perplexity (Mac)**                             | Paste a command                                    | No                | No                                                |
| **ChatGPT desktop app**                          | One click: **Add to Codex** (shared MCP servers)   | No                | No                                                |
| **n8n / Make**                                   | HTTP with the auth token                           | No                | Yes (HTTPS), unless n8n runs on the same computer |
| **Claude Web (claude.ai)**                       | Custom connector, token via Request headers (beta) | No                | Yes (HTTPS)                                       |
| **ChatGPT (web), Grok (grok.com)**               | Not supported yet                                  | —                 | —                                                 |

{% hint style="info" %}
**How the local apps connect.** Every app down to Perplexity starts SEO Utils itself as its MCP server (the SEO Utils program with `mcp-stdio`). That needs no Node.js and puts no auth token in the app's config, so [rotating the token](#rotating-the-auth-token) doesn't break it. The app can also start before SEO Utils: if SEO Utils isn't open, the AI is told to open it, and it works as soon as SEO Utils is running.
{% endhint %}

{% hint style="warning" %}
**Connected with SEO Utils 2.5.0 or earlier?** Those connections use `mcp-remote` (Node.js) or a URL with your token. They keep working, but pick your app in **Connect an AI app** and install again to switch to the new connection.
{% endhint %}

<details>

<summary>Claude Desktop &#x26; Cowork</summary>

1. In **Connect an AI app**, choose **Claude Desktop & Cowork**
2. Click **"Install in Claude Desktop"**
3. **Restart Claude Desktop** to apply changes. On Windows, fully quit it first (tray icon or Task Manager)

You'll see SEO Utils under **Settings → Connectors** in Claude Desktop. It works in Cowork on this computer too.

{% hint style="info" %}
Claude Desktop can start before SEO Utils. Open SEO Utils whenever you want to use it; there's no need to restart Claude Desktop.
{% endhint %}

</details>

<details>

<summary>Claude Code</summary>

1. In **Connect an AI app**, choose **Claude Code**
2. Click **"Add to Claude Code"**. SEO Utils is added for all your projects
3. Start a new Claude Code session

**Prefer the terminal?** Copy the command shown under the button and run it. On a Mac it looks like this:

```bash
claude mcp add --scope user seo-utils -- '/Applications/SEO Utils.app/Contents/MacOS/SEO Utils' mcp-stdio
```

{% hint style="warning" %}
**Added SEO Utils by URL before** (`claude mcp add --transport http seo-utils …`)? That entry belongs to the project folder you ran it in and takes priority there. Remove it in that folder with `claude mcp remove seo-utils --scope local`, so the tools don't show up twice.
{% endhint %}

</details>

<details>

<summary>OpenAI Codex (ChatGPT Desktop App, CLI &#x26; IDE Extension)</summary>

The ChatGPT desktop app (Codex), the Codex CLI and the IDE extension share one config file: `~/.codex/config.toml` (Windows: `%USERPROFILE%\.codex\config.toml`).

1. In **Connect an AI app**, choose **OpenAI Codex**
2. Click **"Add to Codex"**. Only the SEO Utils entry in `config.toml` changes; your other settings and comments are kept. The entry lets SEO Utils tools run for up to 15 minutes. Without it, Codex stops any tool after 60 seconds
3. In the app, open the MCP settings and select **Restart**. In the CLI, start a new session; in the IDE extension, restart the extension

**Added SEO Utils to Codex with an earlier version?** Click **"Add to Codex"** again to get the 15-minute timeout.

**Prefer the terminal?** Copy the `codex mcp add seo-utils -- … mcp-stdio` command shown under the button and run it. The command can't set the timeout, so then open `config.toml` and add this line under `[mcp_servers.seo-utils]`:

```toml
tool_timeout_sec = 900
```

{% hint style="info" %}
If **Add to Codex** says `config.toml` couldn't be read, the file has an error, and SEO Utils leaves it unchanged. Fix the file, or run the command instead.
{% endhint %}

</details>

<details>

<summary>OpenCode (CLI, Desktop App &#x26; IDE Extension)</summary>

The OpenCode CLI, desktop app and IDE extension share one config folder: `~/.config/opencode` (Windows: `%USERPROFILE%\.config\opencode`).

1. In **Connect an AI app**, choose **OpenCode**
2. Click **"Add to OpenCode"**. SEO Utils adds itself to `opencode.json` in that folder, or to `opencode.jsonc` if that's the file you use. Your other settings and comments are kept
3. Restart OpenCode. To check, run `opencode mcp list`: **seo-utils** shows as connected

**Prefer to edit the file yourself?** Copy the config shown under the button and add its `seo-utils` entry to the `mcp` section of your config. On a Mac it looks like this:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "seo-utils": {
      "type": "local",
      "command": ["/Applications/SEO Utils.app/Contents/MacOS/SEO Utils", "mcp-stdio"],
      "enabled": true,
      "timeout": 900000
    }
  }
}
```

{% hint style="warning" %}
Keep the `timeout` line. Without it, OpenCode stops every tool after 60 seconds, and some SEO Utils tools take several minutes.
{% endhint %}

</details>

<details>

<summary>Cursor</summary>

1. In **Connect an AI app**, choose **Cursor**
2. Click **"Add to Cursor"**. Cursor opens and asks you to confirm
3. Confirm the install in Cursor

</details>

<details>

<summary>VS Code (GitHub Copilot)</summary>

1. In **Connect an AI app**, choose **VS Code**
2. Click **"Add to VS Code"**. VS Code opens and asks you to confirm
3. Confirm the install and, when prompted, that you trust the server. Then use SEO Utils from Copilot Chat in agent mode

</details>

<details>

<summary>OpenClaw</summary>

1. In **Connect an AI app**, choose **OpenClaw** and copy the command. On a Mac it looks like this:

```bash
openclaw mcp add seo-utils --command '/Applications/SEO Utils.app/Contents/MacOS/SEO Utils' --arg mcp-stdio
```

2. Run it in a terminal. OpenClaw applies the change without a restart; the next turn uses SEO Utils
3. Check the connection with `openclaw mcp doctor seo-utils --probe`

</details>

<details>

<summary>Grok Build (xAI coding agent)</summary>

1. In **Connect an AI app**, choose **Grok Build** and copy the command. On a Mac it looks like this:

```bash
grok mcp add seo-utils -- '/Applications/SEO Utils.app/Contents/MacOS/SEO Utils' mcp-stdio
```

2. Run it in a terminal, then press `r` in `/mcps`

{% hint style="info" %}
Grok Build also reads Claude Code's MCP servers. If you already added SEO Utils to Claude Code, it's there already.
{% endhint %}

</details>

<details>

<summary>Google Antigravity</summary>

1. In **Connect an AI app**, choose **Google Antigravity** and copy the config. On a Mac it looks like this:

```json
{
  "mcpServers": {
    "seo-utils": {
      "args": ["mcp-stdio"],
      "command": "/Applications/SEO Utils.app/Contents/MacOS/SEO Utils"
    }
  }
}
```

2. Add it to `~/.gemini/config/mcp_config.json`, which Antigravity 2.0, the Antigravity IDE and the CLI share. In the IDE, open **… → MCP Servers → Manage MCP Servers → View raw config**. (In Antigravity 2.0, **Add MCP** opens the MCP Store, so edit the file for a custom server.) If the file already lists servers, add the `seo-utils` entry inside its `mcpServers`
3. Ask the agent "What tools do you have access to?" to confirm the connection

</details>

<details>

<summary>Perplexity (Mac — Local)</summary>

Perplexity's Mac app supports local MCP servers through a helper app.

1. Open Perplexity → **Settings** → **Connectors**
2. Install the **PerplexityXPC** helper when prompted
3. Click **Add Connector** → **Simple** tab
4. Set **Server Name** to `SEO Utils`
5. In SEO Utils, choose **Perplexity** in **Connect an AI app**, copy the command and paste it as the **Command**
6. Click **Save** and wait for status to show **Running**
7. Go to Perplexity homepage and toggle your MCP on under **Sources**

{% hint style="warning" %}
**macOS only.** Perplexity local MCP is only available in the Mac App Store version. Windows and Linux users can use the remote option (see "Claude Web / Perplexity (Remote) / n8n / Make" below) with a Cloudflare Tunnel or VPS.
{% endhint %}

{% hint style="info" %}
Requires a **Perplexity paid plan**.
{% endhint %}

</details>

<details>

<summary>ChatGPT</summary>

**ChatGPT desktop app:** it runs local MCP servers from the same list as Codex (**Settings → MCP servers**, stored in `~/.codex/config.toml`). In SEO Utils, choose **OpenAI Codex** in **Connect an AI app** and click **"Add to Codex"**, then select **Restart** in the ChatGPT app's MCP servers settings. See **OpenAI Codex** above.

**ChatGPT on the web:** not supported yet. Its custom connectors (Developer mode → **ChatGPT Plugins**) authenticate with OAuth or no authentication only, and SEO Utils requires its auth token on every request.

</details>

<details>

<summary>n8n / Make / Claude Web (claude.ai)</summary>

**Requires a publicly accessible HTTPS URL and the auth token**

Cloud apps cannot connect to `localhost`, so SEO Utils needs a public HTTPS address, and the app must send SEO Utils' auth token (`Authorization: Bearer …`) with every request.

* **n8n** — its MCP nodes support a Bearer header. If n8n runs on the same computer as SEO Utils, use `http://localhost:19515/mcp` directly, no public URL needed: in **Connect an AI app**, choose **Claude web, Grok, n8n, Make** and copy the config with the URL and header
* **Make** — its **MCP Client** app connects to a server URL with an access token
* **Claude Web (claude.ai)** — go to **Customize → Connectors → Add custom connector** and enter the URL with `/mcp` appended. Claude can send the token only through **Request headers** (`Authorization: Bearer YOUR_TOKEN_HERE`), which is in beta for a limited set of organizations. Without it, the connector can't authenticate with SEO Utils. Custom connectors are on all Claude plans (Free: one connector); on Team and Enterprise, an Owner adds them

**Getting a public HTTPS address**

* **VPS with a reverse proxy** — if SEO Utils runs on a VPS, set up a reverse proxy (Nginx on Linux, [Caddy](https://caddyserver.com) on any OS) with HTTPS pointing to `127.0.0.1:19515`, and use your public URL (e.g., `https://mcp.yourdomain.com/mcp`)
* **Cloudflare Tunnel** — use a named tunnel on your Cloudflare account ([Cloudflare's guide](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/)) pointing to `http://localhost:19515`

{% hint style="warning" %}
**Don't use a quick tunnel** (`cloudflared tunnel --url …`, a `trycloudflare.com` address). Quick tunnels don't support Server-Sent Events, which MCP uses to stream responses.
{% endhint %}

The token is in SEO Utils **Settings → MCP Server → Connect an AI app → Other MCP apps**. A connection set up with the token stops working when you rotate it; update it with the new one.

</details>

<details>

<summary>Grok (grok.com)</summary>

**Not supported yet.** Grok's custom connectors (**grok.com/connectors → New Connector → Custom**) are available to all Grok users, but they authenticate with OAuth or API keys, and xAI documents no way to send SEO Utils' `Authorization: Bearer` token. Grok Build, xAI's coding agent, does connect: see **Grok Build** above.

</details>

<details>

<summary>Other MCP apps</summary>

In **Connect an AI app**, choose **Other MCP apps**. It shows two configs to copy:

* **For apps that start a local server (stdio)**: runs SEO Utils with `mcp-stdio`. No token, and it keeps working after a token rotation
* **For apps that connect by URL (HTTP)**: `http://localhost:19515/mcp` with the `Authorization: Bearer …` header. Update it after you rotate the token. To keep the connection in one workspace, add an `X-SEO-Utils-Workspace` header (see [Working Across Client Workspaces](#working-across-client-workspaces))

</details>

## Install the SEO Utils Skill (Recommended)

Install our free skill to help your AI assistant choose the right MCP tool automatically. Without it, the AI sometimes calls the wrong tool — for example, fetching third-party API data when you ask about your own rank tracker reports.

The skill uses the open [Agent Skills](https://agentskills.io) format (SKILL.md) and works across all major AI assistants. In SEO Utils, **Connect an AI app** shows the skill step for the app you pick (step 2).

| App                                            | How to add the skill                                                                     | How to update it                                                |
| ---------------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| **Claude Desktop, Cowork, claude.ai**          | Plugin: **Customize → Plugins → Add → Add marketplace** → `seoutilsapp/seo-utils-skills` | Automatic with **Sync automatically**, or **Check for updates** |
| **Claude Code**                                | Plugin: two `/plugin` commands                                                           | **Enable auto-update**, or `claude plugin update`               |
| **Codex, Cursor, VS Code, OpenClaw, OpenCode** | **Install skill** button                                                                 | Click **Install skill** again                                   |
| **Google Antigravity**                         | **Install skill** button                                                                 | Click **Install skill** again                                   |
| **Grok Build**                                 | **Install skill** button                                                                 | Click **Install skill** again                                   |
| **ChatGPT**                                    | **Save skill ZIP**, then upload                                                          | Upload the new ZIP                                              |
| **Perplexity**                                 | **Save SKILL.md**, then upload                                                           | Upload the new file                                             |

<details>

<summary>Claude Desktop / Cowork / claude.ai</summary>

The skill comes as a Claude plugin, so it updates from its source and reaches claude.ai, the desktop app, Cowork and Claude Code at once.

1. In Claude, go to **Customize → Plugins**
2. Click **Add → Add marketplace** and enter `seoutilsapp/seo-utils-skills`
3. Install **SEO Utils** from that marketplace

**Prefer to upload the skill?** In SEO Utils, choose **Claude Desktop & Cowork** in **Connect an AI app** and click **"Save skill ZIP"**. Then in Claude go to **Customize → Skills → + → Create skill → Upload a skill**. An uploaded skill doesn't update itself; don't install both.

</details>

<details>

<summary>Claude Code</summary>

Run these in Claude Code, one at a time:

```
/plugin marketplace add seoutilsapp/seo-utils-skills
```

```
/plugin install seo-utils@seo-utils
```

Claude Code leaves auto-update off for marketplaces you add, so turn it on once: `/plugin` → **Marketplaces** → **seo-utils** → **Enable auto-update**.

If you installed the plugin in Claude Desktop or claude.ai, Claude Code already has it: plugins on your Claude account sync to Claude Code.

</details>

<details>

<summary>OpenAI Codex, Cursor, VS Code, OpenClaw &#x26; OpenCode</summary>

These apps all read the shared skills folder `~/.agents/skills`.

1. In **Connect an AI app**, choose your app
2. Click **"Install skill"**. SEO Utils downloads the current skill and saves it to `~/.agents/skills/seo-utils-mcp-guide/SKILL.md`
3. Restart the app if it's open

**Prefer the terminal?**

```bash
mkdir -p ~/.agents/skills/seo-utils-mcp-guide
curl -sL https://raw.githubusercontent.com/seoutilsapp/seo-utils-skills/main/Skill.md \
  -o ~/.agents/skills/seo-utils-mcp-guide/SKILL.md
```

</details>

<details>

<summary>Google Antigravity</summary>

In **Connect an AI app**, choose **Google Antigravity** and click **"Install skill"**. The skill is saved to `~/.gemini/config/skills/seo-utils-mcp-guide/SKILL.md`, and new conversations pick it up.

**Prefer the terminal?**

```bash
mkdir -p ~/.gemini/config/skills/seo-utils-mcp-guide
curl -sL https://raw.githubusercontent.com/seoutilsapp/seo-utils-skills/main/Skill.md \
  -o ~/.gemini/config/skills/seo-utils-mcp-guide/SKILL.md
```

</details>

<details>

<summary>Grok Build</summary>

In **Connect an AI app**, choose **Grok Build** and click **"Install skill"**. The skill is saved to `~/.grok/skills/seo-utils-mcp-guide/SKILL.md`, and Grok Build loads it right away.

</details>

<details>

<summary>ChatGPT</summary>

1. In **Connect an AI app**, choose **ChatGPT** and click **"Save skill ZIP"**
2. In ChatGPT, go to **Plugins → Skills → Create → Upload from your computer**
3. Upload the ZIP file

{% hint style="info" %}
Uploading skills needs a ChatGPT **Business, Enterprise or Edu** plan.
{% endhint %}

</details>

<details>

<summary>Perplexity</summary>

1. In **Connect an AI app**, choose **Perplexity** and click **"Save SKILL.md"**
2. In Perplexity, go to **Skills → Create skill → Upload a skill**
3. Upload the `SKILL.md` file

</details>

### Updating the Skill

We update the skill when SEO Utils adds or changes MCP tools. How you get the update depends on how you added it:

* **Claude plugin (Claude Desktop, Cowork, claude.ai)** — in **Customize → Plugins**, open the `seo-utils` marketplace and select **Check for updates**, or turn on **Sync automatically** once

<figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2FaEarVSoVDEdbMe3FIuLl%2FXnapper-2026-10-15-12.13.27.png?alt=media&amp;token=c731d26e-71fe-45c1-a2de-f83d7c5dda52" alt=""><figcaption><p>Update SEO Utils skill in the Claude Desktop app.</p></figcaption></figure>

* **Claude plugin (Claude Code)** — turn on auto-update (`/plugin` → **Marketplaces** → **seo-utils** → **Enable auto-update**), or run `claude plugin update seo-utils@seo-utils`, then `/reload-plugins`
* **Install skill button** (Codex, Cursor, VS Code, OpenClaw, OpenCode, Antigravity, Grok Build) — click **Install skill** again; it replaces the old copy. Restart the app if it's open
* **Uploaded file** (ChatGPT, Perplexity, or a ZIP uploaded to Claude) — save the file again, delete the old skill in the app, and upload the new one
* **Copied with `curl`** — run the same `curl` command again

Source: [github.com/seoutilsapp/seo-utils-skills](https://github.com/seoutilsapp/seo-utils-skills)

## Run SEO Tasks from Your Phone

You can run SEO tasks from your phone using either Cowork (Dispatch) or Telegram/Discord channels. Both methods process tasks on your desktop using the MCP server.

{% tabs %}
{% tab title="Using Cowork" %}
With [**Dispatch**](https://support.claude.com/en/articles/13947068-assign-tasks-to-claude-from-anywhere-in-cowork) in Cowork, you can assign SEO tasks from your phone and Claude will execute them on your desktop.

<figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2FTTteCJHeqpizMioftLWu%2F651722891_26122169734092241_7220925609115220025_n-1.jpg?alt=media&amp;token=ae30c609-a03b-4223-a002-ccd26816813e" alt="" width="188"><figcaption><p>Assign SEO tasks from your phone using Dispatch in Cowork</p></figcaption></figure>

For example, you can message Claude from your phone:

* "Generate a weekly SEO report for example.com and save it as HTML"
* "Check the backlink profile for competitor.com"
* "Find keyword cannibalization issues for my site in GSC"

Claude processes the task on your desktop using your local SEO data and MCP tools, then returns the results to your phone.

{% hint style="warning" %}
**Requirements:** Your computer must be awake and Claude Desktop must be open. You need a Claude **Pro or Max plan** and the latest Claude mobile + desktop apps installed.
{% endhint %}
{% endtab %}

{% tab title="Using Telegram or Discord" %}
With [**Channels**](https://code.claude.com/docs/en/channels) in Claude Code, you can send SEO prompts from Telegram or Discord — Claude processes them on your computer and replies right back in the chat.

<figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2F9j11YZD2mDJPG9dZ8f9D%2F656274220_26154072467568634_4527803090415720073_n.jpg?alt=media&amp;token=abfcedd2-66e0-499f-81d7-b5ee9c08915a" alt="" width="188"><figcaption><p>Send SEO prompts from Telegram to Claude Code with MCP access</p></figcaption></figure>

{% stepper %}
{% step %}
**Create a project folder and set up MCP**

Create a folder for your SEO workspace:

```bash
mkdir ~/seo-workspace && cd ~/seo-workspace
```

Then add SEO Utils to Claude Code: in SEO Utils, choose **Claude Code** in **Connect an AI app** and click **"Add to Claude Code"** (see [Connecting to AI Assistants](#connecting-to-ai-assistants)). It's added for all your projects, this folder included.
{% endstep %}

{% step %}
**Install** [**Bun**](https://bun.sh) (required for channel plugins)

```bash
curl -fsSL https://bun.sh/install | bash
```

{% endstep %}

{% step %}
**Set up Telegram or Discord channel**

Follow the official guide for your platform:

* [**Telegram setup**](https://code.claude.com/docs/en/channels) — Create a bot via BotFather, install the plugin, configure, and pair
* [**Discord setup**](https://code.claude.com/docs/en/channels) — Create a bot in Discord Developer Portal, install the plugin, configure, and pair
  {% endstep %}

{% step %}
**Start Claude Code with channels enabled**

```bash
cd ~/seo-workspace
claude --channels plugin:telegram@claude-plugins-official
```

Or for Discord:

```bash
claude --channels plugin:discord@claude-plugins-official
```

{% endstep %}

{% step %}
**Send SEO prompts from your phone**

Open Telegram or Discord on your phone and message your bot:

* "Show me the top trending queries in GSC for my site"
* "Generate a backlink report for competitor.com"
* "Create an automation that emails me when rank tracking completes"

Claude processes the request on your computer and replies in the chat.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
**Requirements:** Your computer must be running with Claude Code open. Channels require Claude Code v2.1.80+, a Claude **Pro or Max plan**, and [Bun](https://bun.sh) installed.
{% endhint %}

**Multiple channels for different clients**

Run separate Claude Code sessions with different bot tokens — one per client or project. Each session has its own MCP connection, workspace, and chat bot.

```bash
# Client A
cd ~/seo-workspace-client-a
TELEGRAM_BOT_TOKEN=<token_A> claude --channels plugin:telegram@claude-plugins-official

# Client B
cd ~/seo-workspace-client-b
TELEGRAM_BOT_TOKEN=<token_B> claude --channels plugin:telegram@claude-plugins-official
```

The environment variable overrides the saved config, so each session uses a different bot. Works the same way for Discord with `DISCORD_BOT_TOKEN`.
{% endtab %}
{% endtabs %}

## Available Tools

The MCP server exposes the following tools that the AI uses automatically:

{% hint style="info" %}
The AI reaches most of these through a few catalog tools, so it doesn't load dozens of tool definitions up front: it finds an action with `search_actions`, reads its parameters with `describe_action`, and runs it with `read_action` (your local data, free), `lookup_action` (external data, may spend your API credits) or `write_action` (creates, changes, deletes or sends something). The names below are the action names it uses.
{% endhint %}

**Data Tools** (read your existing SEO data):

| Tool              | Description                                                                                      |
| ----------------- | ------------------------------------------------------------------------------------------------ |
| `list_tables`     | Lists all database tables with descriptions                                                      |
| `describe_table`  | Shows columns, types, and relationships for a specific table                                     |
| `query_database`  | Executes read-only SQL queries against your SEO data                                             |
| `query_gsc`       | Specialized SQL tool for Google Search Console data with built-in timezone and filter guidance   |
| `list_workspaces` | Lists all workspaces and shows the active one and how it was chosen                              |
| `set_workspace`   | Switches the AI to a different workspace until the AI app reconnects ([Workspaces](#workspaces)) |

**Action Tools** (fetch live data from APIs):

| Tool                                 | Description                                                                                                                                                                                                                       |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `check_keyword_metrics`              | Check search volume, difficulty, CPC, and search intents for keywords via DataForSEO                                                                                                                                              |
| `fetch_serp_data`                    | Fetch live Google SERP results for keywords. Caches results to avoid duplicate API calls                                                                                                                                          |
| `get_backlink_summary`               | Get backlink overview: total backlinks, referring domains, domain rank, spam score, distributions                                                                                                                                 |
| `get_backlink_history`               | Get historical backlink trends: new/lost backlinks and referring domains over time                                                                                                                                                |
| `fetch_backlinks`                    | Fetch individual backlink records with filters (dofollow, platform type, etc.)                                                                                                                                                    |
| `get_referring_domains`              | Get list of domains linking to a target with rank, spam score, and backlink count                                                                                                                                                 |
| `get_anchor_texts`                   | Get anchor text distribution — which texts are used most in backlinks                                                                                                                                                             |
| `get_backlink_competitors`           | Find domains competing for the same backlink sources                                                                                                                                                                              |
| `get_content_gap`                    | Find keywords competitors rank for but you don't                                                                                                                                                                                  |
| `get_backlink_gap`                   | Find domains linking to competitors but not you                                                                                                                                                                                   |
| `get_demographics`                   | Fetch demographic data (population, income, age, homeownership) around a location — supports US, UK, Australia, and Canada                                                                                                        |
| `get_gmb_report_group_dashboard`     | Get aggregated multi-location dashboard — visibility score, rankings, trends across all locations in a report group                                                                                                               |
| `create_gmb_report_group`            | Create a report group from existing individual GMB rank tracker reports for multi-location analytics                                                                                                                              |
| `delete_gmb_report_group`            | Delete a report group (individual reports are not affected)                                                                                                                                                                       |
| `find_google_business`               | Resolve a business name/address to a Google Place ID via Google Places autocomplete (used before create\_gmb\_rank\_tracker\_report or create\_google\_business\_review\_fetch)                                                   |
| `find_google_business_from_maps_url` | Resolve a Google Maps link (full URL, maps.app.goo.gl share link, or ?cid= link) to the business's Place ID, name, and address — no Google Places API key needed; goes through DataForSEO                                         |
| `create_gmb_rank_tracker_report`     | Create a new GMB rank tracker report with full grid, schedule, and keyword setup. Auto-geocodes place\_id → center coords; auto-generates the measurement grid (square/circle/polygon) or accepts an explicit list of coordinates |
| `update_gmb_rank_tracker_report`     | Partially update an existing GMB rank tracker report — change schedule, grid, locale, branding, or measurement points. Markers regenerate automatically when grid inputs change                                                   |
| `run_gmb_rank_tracker`               | Trigger a fresh snapshot run for an existing GMB rank tracker report. Asynchronous; consumes DataForSEO credits (one task per keyword × grid point)                                                                               |
| `delete_gmb_rank_tracker_reports`    | Permanently delete one or more GMB rank tracker reports (up to 100 per call) with their keywords, grid, snapshots and ranking history. Each report is deleted on its own; the result lists what was deleted and why any was not   |
| `get_traffic_summary`                | Get organic traffic overview (ETV, keyword counts, paid traffic) for a domain                                                                                                                                                     |
| `get_organic_keywords`               | Get keywords a domain ranks for with position, volume, traffic, difficulty                                                                                                                                                        |
| `get_traffic_competitors`            | Find organic search competitors with shared keyword overlap                                                                                                                                                                       |
| `get_top_pages`                      | Get top pages by organic traffic for a domain                                                                                                                                                                                     |
| `get_historical_rank`                | Get historical organic traffic and ranking trends over time (monthly)                                                                                                                                                             |
| `get_keyword_suggestions`            | Get Google keyword suggestions with full metrics (volume, KD, CPC, backlinks, SERP info)                                                                                                                                          |
| `get_bing_related_keywords`          | Get Bing related keywords with metrics                                                                                                                                                                                            |
| `fetch_autocomplete_keywords`        | Trigger autocomplete keyword generation from Google or Bing (background)                                                                                                                                                          |
| `get_autocomplete_keywords`          | Get autocomplete keywords with metrics from the database                                                                                                                                                                          |
| `bulk_traffic_analysis`              | Analyze organic traffic for multiple domains at once                                                                                                                                                                              |
| `bulk_backlink_analysis`             | Analyze backlink profiles for multiple URLs/domains at once                                                                                                                                                                       |
| `submit_url_for_google_indexing`     | Submit a URL for Google indexing via the Indexing API                                                                                                                                                                             |
| `check_google_indexing_status`       | Check a URL's indexing status via the URL Inspection API (returns coverage state, verdict, etc.)                                                                                                                                  |
| `trigger_indexing_action`            | Run batch inspection scan, trigger internal link crawl, check crawl status, recalculate paths                                                                                                                                     |
| `submit_url_to_index_now`            | Submit a URL to IndexNow for Bing indexing                                                                                                                                                                                        |
| `check_index_now_status`             | Check if a URL is indexed by Bing                                                                                                                                                                                                 |
| `send_email`                         | Send an email with optional attachments using your configured SMTP credentials                                                                                                                                                    |
| `get_robots_compliance`              | Per-bot robots.txt compliance for a log analysis report — which bots are allowed, how many requests violated a Disallow rule. Uses the Go-side robots.txt matcher (SQL can't evaluate robots.txt rules)                           |

**Saved Keywords Tools** (manage your keyword lists):

| Tool                         | Description                                      |
| ---------------------------- | ------------------------------------------------ |
| `list_saved_keywords_lists`  | List all keyword lists with keyword counts       |
| `create_saved_keywords_list` | Create a new keyword list with a name and locale |
| `update_saved_keywords_list` | Rename a keyword list                            |
| `delete_saved_keywords_list` | Delete a keyword list and all its keywords       |
| `add_keywords_to_list`       | Add keywords to a list (duplicates are skipped)  |
| `remove_keywords_from_list`  | Remove keywords from a list by their IDs         |

**Organic Rank Tracker Tools** (set up trackers, grow tracked keyword sets, and queue runs):

| Tool                                   | Description                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `create_organic_rank_tracker_report`   | Create a rank tracker with keywords, locale, schedule, collection method, device type, optional DataForSEO settings, and optional ranked-page HTML capture. HTML capture is off by default; its scope can include only the target domain or the target and tracked competitors, with a configurable retention period. The first scan runs automatically unless you say otherwise or its schedule window delays it.                          |
| `update_organic_rank_tracker_report`   | Update an existing tracker's name, schedule, collection method, business name, include-subdomains setting, DataForSEO settings, or ranked-page HTML capture, scope, and retention. Domain, keywords, locale, and device type cannot be changed. Disabling capture keeps existing HTML history. Some pixel-tracking settings lock after data is collected.                                                                                   |
| `add_organic_rank_tracker_keywords`    | Add keywords to an existing rank tracker report. A keyword the report already has is not added twice. With a weight, every listed keyword — new or existing — gets that weight. Does NOT rerun the tracker — the AI asks you separately.                                                                                                                                                                                                    |
| `update_organic_rank_tracker_keywords` | Set the weight of existing keywords in a rank tracker report: a whole number from 0 to 1000, where 100 counts once and 0 (Track only) tracks a keyword without counting it. Keywords are matched by their exact text; any not found are listed back.                                                                                                                                                                                        |
| `remove_organic_rank_tracker_keywords` | Remove keywords from a rank tracker report by their text. Destructive — also deletes those keywords' historical positions, PAA appearances, and insights. Keywords not found in the report are reported back but don't cause an error.                                                                                                                                                                                                      |
| `run_rank_tracker`                     | Queue a rank tracker run for a report. Background job; consumes DataForSEO credits. Optional `force_refresh` to rescrape everything.                                                                                                                                                                                                                                                                                                        |
| `compare_ranked_page_html`             | Compare two completed ranked-page HTML captures from the same URL, or explicitly compare an old and replacement URL. Returns paginated line differences, capture metadata, ranked/new/lost states, and affected keywords. It defaults to main content; full HTML is available for metadata and template analysis. It reads existing local captures, does not rescrape, and treats changes as evidence rather than proof of a ranking cause. |

{% hint style="info" %}
`compare_ranked_page_html` analyzes the rendered HTML of pages that ranked, not Google's SERP source. Enable [**Capture Ranked Page HTML**](/guide/organic-rank-tracker.md#page-html-tab) on the tracker first. The AI finds two completed captures in your local history, then uses the comparison tool; no DataForSEO credits are consumed by the comparison.
{% endhint %}

**LLM Rank Tracker Tools** (track brand visibility in AI answers):

| Tool                             | Description                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `create_llm_rank_tracker_report` | Create a new LLM rank tracker — brand variants, search terms, AI engines (ChatGPT, ChatGPT Web Search, Google AI Overview, Google AI Mode), locale, and schedule. Auto-runs the first snapshot unless you say otherwise (scheduled reports still auto-start within \~15 minutes; use an on-demand schedule to fully defer). Requires DataForSEO credentials and a configured LLM extraction provider. The first brand variant becomes the report's title |
| `run_llm_rank_tracker`           | Queue a snapshot run for an existing LLM rank tracker report. Background job; sends every search term to every configured AI engine and consumes DataForSEO credits. One snapshot per day — re-running the same day updates today's snapshot                                                                                                                                                                                                             |

**AI Visibility Tools** (how often AI answers name your brand against competitors — see [AI Visibility](/guide/ai-visibility.md)):

{% hint style="info" %}
The read tools are free: they answer from what SEO Utils already loaded and never send a request to DataForSEO. When a list or the Overview is not loaded yet, the AI gets its price instead, and asks you before it runs the paid tool. A paid tool never spends more than the price you agreed to, and sends nothing when the price went up since the quote. Exports and the client report are not available over MCP; ask the AI to write its own report from the read tools instead.
{% endhint %}

| Tool                                | Runs with       | Description                                                                                                                           |
| ----------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `list_ai_visibility_explorations`   | `read_action`   | Your explorations, most recently opened first, with your share of voice and the spend so far. Free                                    |
| `get_ai_visibility_exploration`     | `read_action`   | One exploration: its brands, market, window and topic, its spend so far, and the status of its latest load. Free                      |
| `get_ai_visibility_overview`        | `read_action`   | The Overview numbers: share of voice, mentions, citations, gaps, share over time, countries, cited domains and AI search demand. Free |
| `get_ai_visibility_gaps`            | `read_action`   | Where each competitor wins and you don't, plus the pages cited for a competitor and not for you. Free                                 |
| `search_ai_mentions`                | `read_action`   | The real prompts and answers behind a number (you mentioned, rivals win, one competitor wins, both…), filtered and sorted. Free       |
| `get_ai_visibility_prompt`          | `read_action`   | One prompt's full AI answer with its sources. Free                                                                                    |
| `get_ai_visibility_citations`       | `read_action`   | The domains cited for each brand, and your own cited pages. Free                                                                      |
| `estimate_ai_visibility_load`       | `read_action`   | Quote an Overview load or Refresh before it starts. Free                                                                              |
| `get_ai_visibility_load_status`     | `read_action`   | Progress of the latest load. Free                                                                                                     |
| `get_ai_visibility_markets`         | `read_action`   | The countries and languages you can explore, and where ChatGPT data exists. Free                                                      |
| `get_ai_visibility_ambiguity_hints` | `read_action`   | Warns about brand names that are common words, before you create an exploration. Free                                                 |
| `resolve_ai_visibility_brand`       | `lookup_action` | Turns a website or a name into a brand (it reads the site's home page once for its name). Free                                        |
| `suggest_ai_visibility_competitors` | `lookup_action` | Suggests up to 8 competitors from AI answers. About $0.10 when not cached, only after you agree                                       |
| `load_ai_visibility_list`           | `lookup_action` | Loads a page of prompts or cited pages that is not loaded yet. About $0.10–$0.20 a request, only after you agree                      |
| `run_ai_visibility_load`            | `write_action`  | Starts the Overview load or Refresh at the quoted price, only after you agree. Runs in the background                                 |
| `stop_ai_visibility_load`           | `write_action`  | Stops the running load. Requests already sent are still charged                                                                       |
| `create_ai_visibility_exploration`  | `write_action`  | Creates an exploration: your brand and up to 5 competitors in one market. Free; it loads nothing until you start a load               |
| `update_ai_visibility_exploration`  | `write_action`  | Renames an exploration or changes its brands, market, window or topic. A changed setup needs a new (paid) load                        |
| `delete_ai_visibility_exploration`  | `write_action`  | Deletes an exploration. The AI asks you first                                                                                         |

**Review Fetcher Tools** (track Google Business Profile reviews):

| Tool                                  | Description                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `create_google_business_review_fetch` | Start tracking a business's Google reviews — resolves the business via `find_google_business` (name) or `find_google_business_from_maps_url` (Google Maps link), sets the initial pull depth, locale, and DataForSEO queue priority, and runs the first fetch unless you say otherwise. Requires DataForSEO credentials. Note: there is no automatic schedule for review fetches — each snapshot is triggered on demand |
| `run_google_business_review_fetch`    | Trigger a review fetch for a tracked business. Background job; pulls the latest reviews via DataForSEO, deduplicates them, and flags new, missing (removed/filtered by Google), and reinstated reviews. Returns the snapshot ID so progress can be checked                                                                                                                                                              |

**N.A.P Finder Tools** (find local citation pages):

| Tool             | Description                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_nap_finder` | Create and run a N.A.P Finder report in one step — searches Google for exact-match combinations of your business name, address, and phone number to find the pages that cite them. Each call is a fresh report (reports are one-shot and can't be re-run). Scrapes via DataForSEO, your own IP, or proxies; supports custom search-term template lists, excluded domains, and per-country locales. Results arrive in the background |

The AI resolves the business address and phone automatically via `find_google_business` when you only give a name, and analyzes finished reports through `query_database` on the `nap_finder_items` table (e.g. citations per domain, missing listings).

**Content Struct Tools** (competitor content analysis and AI outlines):

| Tool                       | Description                                                                                                                                                                                                                                                                                                                                                                                               |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `create_content_struct`    | Create a content analysis report for one or more keywords — scrapes the top Google results and extracts meta titles, descriptions, and heading structures (H1–H4) from up to 20 top-ranking competitor pages per keyword. Multiple keywords are grouped. Scrapes via your own IP (default), proxies, or the DataForSEO SERP API (consumes credits). The analysis runs in the background                   |
| `generate_content_outline` | Generate an AI content outline from a finished content struct report — sends the competitor headings to your chosen AI model (OpenAI, Anthropic, Gemini, OpenRouter, or Ollama) and produces a suggested meta title, meta description, and a full H1–H4 outline. Replaces any existing outline once the new one is ready (a failed generation keeps the old outline); uses your AI provider's API credits |

**SERP Clustering Tools** (group keywords into topic clusters):

| Tool                            | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `create_serp_clustering_report` | Create a SERP clustering report and run it — scrapes the Google results for every keyword and groups keywords into clusters when their SERPs share enough URLs (keywords whose results overlap can be targeted by one page). Supports a similarity threshold (3–7 shared results), three clustering algorithms (default / strict / balanced strict), per-country locales, device choice, and an optional target domain for per-cluster rank analysis. Scrapes via your own IP (default), proxies, or the DataForSEO SERP API (consumes credits); with DataForSEO connected it also fetches search volume / CPC / difficulty for the keywords. Runs in the background |
| `run_serp_clustering`           | Re-run clustering for an existing report — optionally adding new keywords first. Reuses SERP data newer than `saved_serp_days` instead of re-scraping, and can either re-cluster everything from scratch or keep existing clusters and only distribute new keywords into them. The similarity threshold can change per run; locale, device, and SERP depth stay fixed                                                                                                                                                                                                                                                                                                |

**Text Analysis Tools** (extract entities and topics with NLP):

| Tool               | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_nlp_analysis` | Run an NLP entity analysis on pasted text/HTML or on live URLs (scraped first) — extracts the named entities (people, organizations, places, products, concepts) the content is about, with confidence scores, Wikipedia links, and mention counts; TextRazor also extracts topics. Uses whichever NLP provider you configured (TextRazor, Dandelion, or Google NLP — API key required in Settings, uses that provider's quota). Each call creates a new Text Analysis report and runs in the background |

**Internal Links Tools** (find, review and apply internal links — see [Internal Links](/guide/google-search-console/internal-links.md#use-it-from-an-ai-assistant)):

| Tool                                  | Description                                                                                                                             |
| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `get_internal_links_overview`         | The Internal Links numbers for a property: pages crawled, orphans, priority targets, link text and link cap problems                    |
| `list_internal_link_opportunities`    | One Opportunities list (priority targets, orphans, anchors, too many links, duplicate links, or every page), searched, sorted and paged |
| `get_internal_link_source_candidates` | The pages that could link to one target page, closest first                                                                             |
| `estimate_internal_link_run`          | Quote a Find links run before it starts. Free                                                                                           |
| `run_internal_links`                  | Start Find links for up to 50 target pages. Spends TypeSafe and embedding credit                                                        |
| `get_internal_links_run_status`       | Progress of the latest Find links run                                                                                                   |
| `cancel_internal_links_run`           | Stop the running Find links run. Finished pages keep their suggestions                                                                  |
| `list_internal_link_suggestions`      | Suggestions by status and target page, with the sentence, the link text and the reason                                                  |
| `review_internal_link_suggestions`    | Accept, reject or move suggestions back to review, up to 200 at a time                                                                  |
| `edit_internal_link_anchor`           | Change a suggestion's link text to other words of the same sentence                                                                     |
| `apply_internal_links`                | Write accepted links into your live WordPress site, up to 50 at a time                                                                  |
| `revert_internal_links`               | Remove applied links from your live WordPress site                                                                                      |
| `reconcile_internal_links`            | Settle unconfirmed applies and reverts by reading the pages (**Check N unconfirmed**)                                                   |
| `get_internal_link_rules`             | The link rules, Advanced settings and your own rules for the AI                                                                         |
| `save_internal_link_rules`            | Change some of those rules. The others keep their values                                                                                |
| `get_internal_link_crawl_status`      | Progress of the latest link crawl                                                                                                       |

**Automation Tools** (manage your workflows):

| Tool                              | Description                                            |
| --------------------------------- | ------------------------------------------------------ |
| `get_automation_schemas`          | Get available trigger types, action types, and configs |
| `create_automation`               | Create a new automation workflow                       |
| `update_automation`               | Update or pause/resume an automation                   |
| `delete_automation`               | Delete an automation and its history                   |
| `save_automation_report_mappings` | Set which reports trigger an automation                |

**Workspace Tools** (manage your workspaces):

| Tool               | Description                                                                                                        |
| ------------------ | ------------------------------------------------------------------------------------------------------------------ |
| `create_workspace` | Create a new workspace for organizing projects. Name must be unique; new workspaces are not made active by default |
| `update_workspace` | Rename a workspace or update its logo URL. Default workspace can be renamed                                        |

To list, query, or switch workspaces, the AI uses the existing `list_workspaces` / `set_workspace` data tools. Deleting a workspace is done in the desktop app (and is blocked if the workspace still contains data).

**SEO Test Tools** (manage your SEO experiments):

| Tool              | Description                                                                                                                      |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `create_seo_test` | Create a new SEO test (split / time\_based / url\_switch). Validates type-specific fields and fetches baseline metrics from GSC  |
| `update_seo_test` | Update an existing SEO test's name, description, hypothesis, end\_date, or type-specific timing fields (test\_type is immutable) |

To list, view metrics, or delete tests, the AI uses `query_database` on the `tests`, `test_pages`, and `test_metrics` tables. Deleting a test is done in the desktop app.

**Keyword Insights Tools** (analyze ranking behavior):

| Tool                          | Description                                                                               |
| ----------------------------- | ----------------------------------------------------------------------------------------- |
| `get_keyword_insight_summary` | Get insight counts (trending up/down, pogo sticking, flickering, key events) for a report |

The AI can also query the `keyword_insights`, `keyword_insight_histories`, `ga4_landing_page_metrics`, and `ga4_property_mappings` tables directly via `query_database` for deeper analysis.

{% hint style="info" %}
SQL queries are **read-only** — the AI cannot modify your data via SQL. Action tools fetch data from external APIs (DataForSEO) and may incur API costs. Saved Keywords, Organic Rank Tracker, LLM Rank Tracker, Review Fetcher, and N.A.P Finder tools can create, update, and delete keyword lists, add, weight or remove keywords in rank tracker reports, create LLM rank tracker reports and review fetches, and queue tracker/fetch/citation-search runs on your behalf. Removing rank tracker keywords also deletes their historical positions and insights — there is no undo. Running a tracker, review fetch, or N.A.P Finder search via DataForSEO consumes DataForSEO credits. AI Visibility tools create, edit and delete explorations, and their paid tools (an Overview load, a list page, competitor suggestions) spend DataForSEO credits only after you agree to the quoted price.
{% endhint %}

## Built-in Prompts

Claude Desktop shows these in the prompt picker — click the slash icon to find them:

| Prompt                       | What It Does                                                                         |
| ---------------------------- | ------------------------------------------------------------------------------------ |
| **Weekly SEO Report**        | Comprehensive weekly performance report with rankings, GSC data, and recommendations |
| **Keyword Cannibalization**  | Finds keywords where multiple pages compete for the same query                       |
| **Weak Pages Analysis**      | Identifies underperforming pages that need optimization                              |
| **Ranking Trends**           | Analyzes ranking changes over time with winners and losers                           |
| **Content Gap Analysis**     | Finds content opportunities from Search Console data                                 |
| **Local SEO Report**         | Google Business rank tracking performance report                                     |
| **SERP Landscape**           | Competitive analysis of SERP features and competitors                                |
| **Ranked Page HTML Changes** | Compares stored page captures and evaluates changes around new, lost, or moved pages |
| **Client Report**            | Professional, client-ready report in non-technical language                          |

## Example Prompts

Here are some prompts you can try right away. Click each category to expand.

{% hint style="info" %}
**Tip for GSC queries:** When asking about your own site's search performance, include **"in GSC"** or **"from my Search Console data"** in your prompt. This tells the AI to query your local Google Search Console data instead of fetching third-party estimates.
{% endhint %}

<details>

<summary>📊 Reporting &#x26; Charts</summary>

* "Create a dashboard to report all SEO metrics of tuikhoeconban.com" (Work with [Claude Cowork Live Artifact to create live SEO dashboard](https://www.facebook.com/groups/seoutils/posts/1360693665894236/).)
* "Pull my Google Search Console data for the last 30 days. Show me a line chart of daily clicks and impressions over time. Also show a table of the top 10 queries by clicks."
* "Get my organic rank tracker data for example.com. Create a pie chart showing the ranking distribution: how many keywords are on page 1 (positions 1-10), page 2 (11-20), page 3 (21-30), and beyond."
* "Pull my Google Business rank tracker data for My Business Name. Create a heatmap or grid visualization showing my ranking positions across different geographic points."
* "Compare my Google Search Console query performance between the last 7 days and the previous 7 days. Find the top 10 queries that gained the most clicks and the top 10 that lost the most."
* "Create a comprehensive SEO dashboard for example.com with: 1) A line chart of GSC clicks over the last 30 days, 2) Current organic rank distribution as a donut chart, 3) A table of top 10 pages by impressions."

</details>

<details>

<summary>🔍 SEO Analysis</summary>

* "Find pages on my site that rank on positions 11-20 (page 2) with more than 100 impressions. These are quick-win opportunities to push to page 1."
* "Find pages with high impressions but low CTR — the title or description probably needs work."
* "Which keywords have multiple pages competing for the same position? Show me the cannibalization issues."
* "Find queries I'm appearing for in Google but don't have a dedicated page targeting them."

</details>

<details>

<summary>📈 Tracking &#x26; Trends</summary>

* "Compare my organic ranking distribution today vs 30 days ago. How many keywords moved to page 1? How many dropped off?"
* "Show me my biggest ranking winners and losers this month."
* "List all my organic rank tracker reports and how many keywords each one tracks."

</details>

<details>

<summary>🗺️ Local SEO</summary>

* "Show me my Google Business rank tracking data. Create a summary of how many grid points I rank in top 3, top 10, and not ranking."
* "Show me the ranking trend for 'hot pot' in my GMB report #7"
* "Compare my local rankings between this week and last week. Which keywords improved?"
* "List all my GMB rank tracker reports with their keywords and latest snapshot dates"
* "Show me the demographics around my business and correlate with my local rankings — do I rank better in high-income or high-density areas?"
* "Show me the multi-location dashboard for Haidilao Hot Pot across all locations"
* "Create a report group for all my Haidilao reports so I can see combined rankings"
* "What's my visibility score for Haidilao across Bellevue and Seattle? Compare vs 30 days ago"
* "Which location has the best local rankings for 'hot pot'?"

</details>

<details>

<summary>📍 Create, Update &#x26; Delete GMB Rank Trackers</summary>

* "Create a GMB rank tracker for Haidilao Hot Pot in Bellevue, WA tracking 'hot pot bellevue', 'best chinese bellevue', and 'haidilao'. Use a 5x5 square grid with 500m radius, run weekly on Mondays 9-11am Pacific."
* "Set up a circle 7x7 GMB tracker for my dental clinic at 100 Park Ave, New York with 1 mile radius, tracking 'dentist near me', 'emergency dentist nyc', and 'tooth cleaning manhattan'. Run once now so I can see the baseline."
* "Track Pho Bac Sup Shop in Seattle for 'pho near me' and 'best pho seattle' — square 7x7, 800m radius, weekly Mondays at 8am Pacific."
* "Create a GMB tracker for Joe's Pizza in NYC simulating searches from Brooklyn instead of Manhattan, tracking 'pizza near me' and 'best slice brooklyn'."
* "I have 9 specific tracking points for my market research project — coordinates: \[{lat: 47.61, lng: -122.20}, {lat: 47.62, lng: -122.20}, ...]. Create a GMB report for Haidilao Hot Pot Bellevue using those exact points and track 'coffee shop'."
* "Update my Haidilao GMB report — bump it from 5x5 to 7x7 grid and change the schedule to twice-per-month on the 1st at 8am Pacific."
* "Disable the daily run schedule on GMB report #7 and switch it to a one-time manual tracker."
* "Rebrand the export header on GMB report #12 to 'Q1 Local SEO — Acme Dental' and set the comparison period to 30 days."
* "Run a fresh snapshot for GMB report #7 right now — I want to see today's rankings without waiting for the schedule."
* "Delete GMB report #12 — it was only a test."
* "I have a few 'Joe's Pizza' GMB test reports. List them for me, then delete all of them once I confirm."

</details>

<details>

<summary>🌐 Create &#x26; Update Organic Rank Trackers</summary>

* "Set up an organic rank tracker for example.com in the US English, tracking 'best seo tool', 'seo software', and 'free seo audit'. Use DataForSEO, desktop, weekly schedule."
* "Track moz.com on mobile in the UK for 'keyword research', 'local seo', and 'backlink checker' — DataForSEO, weekly, start scanning right away."
* "Create a rank tracker for mycompany.io scraping from my own IP with 5-second delays. Daily schedule. Keywords: 'widget pricing', 'widget reviews', 'best widgets 2026'. Don't start scanning yet — I want to review settings first."
* "Set up tracking for a French SaaS — saas-fr.com in France French, tracking 'logiciel de gestion', 'outil de productivité', 'crm français'. DataForSEO, weekly."
* "Make a rank tracker for laravel.com in the US that includes subdomains (so docs.laravel.com counts as laravel.com). DataForSEO, desktop, weekly. Keywords: 'php framework', 'laravel tutorial', 'best php frameworks'."
* "Set up a rank tracker for a Chicago dental clinic — chicagosmiles.com, US English, DataForSEO, daily — but only run it between 9am and 5pm Chicago time."
* "Change the schedule on rank tracker #19 from weekly to daily."
* "Make rank tracker #19 run only on Mondays and Thursdays, between 08:00 and 12:00 in America/New\_York."
* "Remove the time window and day restrictions from rank tracker #22 so it can run at any time."
* "Rename rank tracker #22 to 'Moz.com — Q1 Tracking' and turn on include subdomains."
* "Switch rank tracker #23 from own-IP scraping to DataForSEO and bump priority to 2 for faster turnaround."
* "Disable pixel tracking on report #20." *(Will error if a snapshot has already captured pixel data — pixel settings are immutable after data is collected, by design.)*
* "Add 'cold brew beans' and 'nitro cold brew' to rank tracker #19 with a weight of 50."
* "In rank tracker #19, set 'buy seo tools' to a weight of 300 and make 'seo tools login' Track only."

</details>

<details>

<summary>🔑 Keyword Research</summary>

* "Check keyword metrics for: seo tools, rank tracker, keyword research, backlink checker"
* "Check keyword metrics for these keywords in Vietnam: công cụ seo, phân tích backlink"
* "What's the search volume and difficulty for 'best seo tools 2026'?"

</details>

<details>

<summary>🔗 Backlink Analysis</summary>

* "Show me the backlink profile for seoutils.app"
* "How have the backlinks for example.com changed over the past year? Show me a chart."
* "Which domains link to seoutils.app? Show the top 20 by authority rank."
* "Show me only dofollow backlinks for example.com"
* "Find backlinks from blog platforms pointing to example.com"
* "What's the spam score and domain rank for example.com's backlink profile?"
* "How many referring domains does example.com have? Break it down by dofollow vs nofollow."
* "What anchor texts are used most in backlinks to seoutils.app? Is there over-optimization?"
* "Who are the backlink competitors for seoutils.app? Which sites compete for the same link sources?"

</details>

<details>

<summary>🎯 Gap Analysis</summary>

* "Find keywords that ahrefs.com and semrush.com rank for but seoutils.app doesn't"
* "What content opportunities am I missing compared to my top 3 competitors?"
* "Find domains that link to ahrefs.com but not seoutils.app"
* "Show me the backlink gap between seoutils.app and its top competitors: semrush.com, moz.com"
* "Find high-volume keywords (1000+ searches) that competitors rank for in the US but I don't"

</details>

<details>

<summary>📊 Traffic Analytics</summary>

* "Show me the traffic overview for laravel.com"
* "What are the top organic keywords for laravel.com in the US?"
* "Who are the traffic competitors for seoutils.app?"
* "What are the top pages by traffic for laravel.com?"
* "Show me only informational keywords that laravel.com ranks for"
* "What keywords does laravel.com rank for in positions 1-3 with more than 1000 monthly searches?"
* "Show me the organic traffic trend for laravel.com over the past 5 years. Draw a chart."

</details>

<details>

<summary>🏘️ Demographics (US, UK, Australia &#x26; Canada)</summary>

* "Show me the demographics around my GMB report #7 business"
* "What's the population density and median income near Haidilao Hot Pot Bellevue?"
* "Compare the demographics data with my local rankings — do I rank better in high-income or low-income areas?"
* "Show me census data within 3 miles of coordinates 47.61, -122.20"
* "Show me demographics around my business in London / Sydney / Toronto"

</details>

<details>

<summary>🔎 GSC Insights &#x26; Mentions</summary>

* "Find keyword cannibalization issues for example.com in GSC"
* "Using my GSC data, what percentage of queries are branded vs non-branded for example.com?"
* "Show me my top trending queries in GSC this month vs last month"
* "What are my optimization opportunities in GSC — queries I rank for but don't mention in page titles?"
* "Show me GSC traffic by country for my site — which countries send the most clicks?"
* "Break down my GSC queries by position range: how many rank 1-3, 4-10, 11-20, and 21+?"
* "Which queries in GSC have zero mentions in page titles but high impressions?"
* "Show me additional traffic sources beyond web search in my Search Console data"

</details>

<details>

<summary>🔗 URL Indexing</summary>

* "How many of my URLs are indexed vs not indexed? Show the breakdown by coverage state."
* "Submit this URL for Google indexing: <https://example.com/new-page>"
* "Check the indexing status of <https://example.com/page> using the URL Inspection API"
* "Show me all URLs that have been crawled but not indexed — what's causing them to be rejected?"
* "Which directories on my site have the worst indexing rate?"
* "Find orphan pages — URLs with zero internal links that aren't indexed"
* "Show me the top 10 pages by internal inlink count and their indexing status"
* "Run an inspection scan for my site to update all URL statuses"
* "Start an internal link crawl for my site"
* "Which URLs have had their coverage state change in the last 7 days?"
* "Show me pages that went from 'Submitted and indexed' to something else recently"
* "Submit <https://example.com/updated-page> to IndexNow for Bing"

</details>

<details>

<summary>🪢 Internal Links</summary>

* "Show me the orphan pages on example.com and which pages could link to each one"
* "What would it cost to find links for my ten best priority targets?"
* "Find links for /coffee-grinders and /espresso-machines, and tell me when the run is done"
* "Show me the suggestions for /coffee-grinders — accept the ones with a confidence over 80% and reject the rest"
* "Change the link text of the second suggestion to 'burr grinder'"
* "Apply every accepted link to WordPress"
* "Set the maximum body links per page to 8 for example.com"

</details>

<details>

<summary>📐 Content Struct (Content Brief)</summary>

* "Create a content struct for 'keto meal plan' and tell me when the analysis is done"
* "Analyze the top Google results for 'best running shoes', 'trail running shoes', and 'running shoes for flat feet' — group them as 'Running Shoes Cluster'"
* "Create a content struct for 'best pho hanoi' targeting Vietnam, using the DataForSEO SERP API"
* "Create a content struct for 'coffee grinder' but exclude amazon.com and reddit.com from the competitor pages"
* "Generate an AI content outline for my 'keto meal plan' content struct using Claude"
* "Regenerate the outline for report #191 with GPT — focus the prompt on beginner-friendly content"
* "Show me the content brief for 'keto' — report #189"
* "Write a 2000-word article using the content outline from content struct report #191"
* "Show me the AI-generated outline and suggested meta title/description for report #193"
* "Which H2 headings appear most frequently across competitor pages for 'hot pot' in report #191?"
* "Write an SEO-optimized blog post following the content brief in report #189."
* "Compare the heading structure of the top 5 competitor pages for 'keto' in report #189"

</details>

<details>

<summary>🧩 SERP Clustering</summary>

* "Cluster these keywords by SERP similarity: keto diet, keto meal plan, keto recipes, low carb diet, keto for beginners — call the report 'Keto Cluster'"
* "Create a SERP clustering report for my keyword list using the DataForSEO SERP API with a similarity of 5 and the strict algorithm"
* "Cluster these German keywords for germany: hochzeit checkliste, hochzeitsplanung, hochzeit budget — and set target domain example.de so I can see where I rank per cluster"
* "Is my 'Keto Cluster' report done yet? If it failed, tell me why"
* "Add these new keywords to SERP clustering report #22 and distribute them into the existing clusters — reuse SERP data from the last 30 days"
* "Re-run report #22 from scratch with a stricter similarity of 6"
* "Show me the clusters in report #22 — cluster name, keyword count, and total search volume, biggest first"
* "Which keywords in report #22 ended up unclustered, and which clusters does my domain not rank in at all?"

</details>

<details>

<summary>📝 Text Analysis (NLP)</summary>

* "Run an NLP analysis on <https://example.com/blog/keto-guide> with TextRazor and show me the entities it covers"
* "Analyze these three competitor pages with Google NLP and tell me which entities all of them mention: \[urls]"
* "Here's my article draft — analyze it with Dandelion and list the entities with their Wikipedia links: \[pasted text]"
* "Analyze my German landing page example.de/preise with TextRazor in German — call the report 'Preise Entities'"
* "Is my 'Preise Entities' analysis finished? If it failed, tell me why"
* "Show me all my NLP analysis reports"
* "What are the top entities found in my TextRazor analysis report #19?"
* "Which entities appear most frequently across all items in report #21?"
* "Compare the entities found by GoogleNLP vs TextRazor for the same URLs"
* "Show me all entities with confidence score above 0.8 in report #20"
* "What topics were identified in my TextRazor report? Show them sorted by score"

</details>

<details>

<summary>📊 Bulk Analysis</summary>

* "Compare organic traffic for laravel.com, symfony.com, and codeigniter.com"
* "Show me the backlink profiles for seoutils.app, ahrefs.com, and semrush.com"
* "Which of these domains has the highest domain rank: moz.com, majestic.com, semrush.com?"
* "Analyze traffic and backlinks for my top 5 competitors"
* "Compare referring domains count for example.com vs example.org"

</details>

<details>

<summary>📍 NAP Finder</summary>

* "List all my NAP Finder reports"
* "Which domains have the most NAP citations for Monsoon Seattle?"
* "Show me all NAP citations found on yelp.com for my business"
* "What search terms found the most results in NAP Finder report #5?"
* "Find all NAP citations ranking in position 1-3 for monsoon seattle"
* "Compare NAP citations between report #5 and report #6 — which domains appear in both?"
* "Run a NAP Finder for Monsoon Seattle at 615 19th Avenue East, phone (206) 325-2111, using DataForSEO"
* "Find citation pages for Joe's Pizza — look up the address and phone from Google first, exclude joespizza.com"
* "Run a NAP citation check for my business with both phone formats: (222) 333-4444 and 222-333-4444"
* "Run a NAP Finder for my Toronto business in the Canadian locale, scanning the top 50 results per query"
* "Run a NAP Finder for Monsoon using my custom search term list, then tell me when it's done and which new domains it found compared to report #7"

</details>

<details>

<summary>🔬 Keyword Explorer</summary>

* "What are the keyword suggestions for 'keto diet' in the US?"
* "Show me Bing related keywords for 'coffee shops' sorted by search volume"
* "Find keyword suggestions for 'seo tools' with search volume over 1000 and keyword difficulty under 40"
* "Get keyword suggestions for 'best laptops' — only show commercial and transactional intent keywords"
* "Fetch autocomplete keywords for 'seo tools' from Google"
* "Show me the autocomplete keywords for 'keto' from both Google and Bing"
* "What's the search volume, keyword difficulty, and CPC for 'keto diet'?"

</details>

<details>

<summary>📋 Saved Keywords</summary>

* "Show me all my saved keyword lists"
* "Create a new keyword list called 'Competitor Keywords' for the US market"
* "Add these keywords to my 'Competitor Keywords' list: seo tools, keyword research, backlink checker"
* "Create a keyword list called 'Vietnam SEO' for Vietnam in Vietnamese"
* "Rename my 'Old Keywords' list to 'Archive - Q1 2026'"
* "Delete the 'Test Keywords' list"
* "How many keywords are in each of my saved keyword lists?"

</details>

<details>

<summary>📈 Organic Rank Tracker</summary>

* "Add these keywords to my rank tracker for example.com: seo audit, technical seo, on-page seo"
* "Take the top 20 keywords from the content gap report between example.com and competitor.com and add them to my rank tracker for example.com"
* "Pull the highest-converting GSC queries from the last 90 days that I'm not yet tracking, and add them to my example.com rank tracker"
* "Add 'black friday deals, cyber monday sale' to my shop.com tracker and rerun it right now"
* "Remove these keywords from my example.com rank tracker: outdated keyword, irrelevant term, typo'd kw"
* "Find every keyword in my shop.com tracker that hasn't ranked in the last 60 days and remove them"
* "Clean up my rank tracker — remove all keywords containing the word 'test'"
* "Force-refresh my rank tracker for example.com — I want fresh SERPs for every keyword"
* "Rerun the rank tracker for laravel.com"
* "Enable ranked-page HTML capture for my example.com tracker. Capture only my target domain and keep the files forever."
* "Enable ranked-page HTML capture for my shop.com tracker, include my tracked competitors, and keep captures for 90 days."
* "For my example.com rank tracker, compare the two captures around when <https://example.com/old-page> became lost. Summarize the main-content changes and tell me which are plausible contributors, without treating correlation as proof."
* "A new URL replaced my old ranking page. Compare the last capture of <https://example.com/old-page> with the first capture of <https://example.com/new-page>, show which tracked keywords moved, and clearly label it as a cross-page comparison."
* "Compare the full captured HTML before and after my page declined. Check title, canonical, robots directives, structured data, redirects, and template changes."

</details>

<details>

<summary>🌐 SERP Analysis</summary>

* "What's ranking for 'seo tools' in Google?"
* "Fetch SERP data for: rank tracker, keyword research tool, seo software"
* "Show me the top 10 Google results for 'best seo tools' in the US"
* "What pages are ranking for 'local seo' in the UK?"

</details>

<details>

<summary>🤖 LLM Rank Tracker</summary>

* "Show me all my LLM rank tracker reports"
* "Create an LLM rank tracker for my brand Ahrefs (variants: Ahrefs, ahrefs.com) tracking 'best seo tools' and 'best backlink checker' in ChatGPT and Google AI Overview, weekly"
* "Set up an LLM rank tracker for Hasiru Farms in India tracking 'organic vegetables bangalore' on Google AI Overview"
* "Create an LLM rank tracker for my brand across all four AI engines, on-demand only — don't run it yet, I want to review it first"
* "Run my Ahrefs LLM rank tracker now"
* "How is my brand mentioned across AI engines like ChatGPT and Google AI Overview?"
* "Which search terms trigger the most AI citations for my brand?"
* "Compare my LLM visibility across engines — ChatGPT vs ChatGPT Web Search vs Google AI Overview vs Google AI Mode"
* "Show me the trend of my brand mentions in AI responses over the last month"

</details>

<details>

<summary>🔭 AI Visibility</summary>

* "List my AI Visibility explorations and their share of voice"
* "In my Ahrefs exploration, what is my share of voice on ChatGPT compared with Google AI Overviews?"
* "Where do my competitors win in AI answers and I don't? Show me the top prompts where Semrush is named and Ahrefs isn't"
* "Which pages get cited in AI answers for Semrush but not for us?"
* "Create an AI Visibility exploration for ahrefs.com against semrush.com and moz.com in the United States, then tell me what the first load costs"
* "Refresh my Ahrefs exploration — quote the price first and wait for my OK"
* "Suggest competitors for notion.so in AI answers, and tell me the price before you look"
* "Write me a one-page client summary of my Ahrefs exploration: share of voice, the biggest gaps and the top cited domains"
* "Build a one-page visual dashboard of my Ahrefs AI Visibility exploration as an artifact: share of voice on Google AI Overviews vs ChatGPT, the head-to-head against each competitor (they win / both / you win) as a chart, the trend since the first month, and three key takeaways at the bottom. Use only cached data, don't spend anything"
* "Make a sleek battle card artifact for Ahrefs vs Semrush in AI answers from my AI Visibility data: who wins on each AI platform, by how much, and one line on why it matters. Big numbers, minimal text, cached data only"

</details>

<details>

<summary>⭐ Review Fetcher</summary>

* "Start tracking the Google reviews for Haidilao Hot Pot in Bellevue, WA — pull the 300 most recent reviews"
* "Track the reviews of this business: <https://maps.app.goo.gl/AbC123> — start with the 100 latest"
* "Add my dental clinic to the Review Fetcher but don't fetch anything yet — I'll run it manually later"
* "Set up review tracking for my restaurant in Germany with reviews translated to German"
* "Fetch the latest reviews for my Haidilao review tracker and tell me how many new ones came in"
* "Which of my reviews have no owner response yet? List the worst-rated ones first"
* "Did any of my Google reviews go missing since the last check? Show me the removed ones"
* "Summarize the themes in my 1-star and 2-star reviews from the latest snapshot"
* "Compare my star-rating breakdown between the latest snapshot and the previous one"

</details>

<details>

<summary>📄 Log Analysis</summary>

* "Show me all my log analysis reports"
* "Which pages get the most Googlebot crawls in my latest log analysis?"
* "Show me pages with 404 errors that Googlebot is trying to crawl"
* "What's the crawl frequency breakdown by HTTP status code?"

</details>

<details>

<summary>🤖 AI Log Analysis (AEO / GEO)</summary>

* "Is GPTBot violating my robots.txt in my latest log analysis report?"
* "Which AI bots are ignoring my Disallow rules — filter to violations > 0"
* "Which pages are Perplexity and ChatGPT-User fetching most this month?"
* "What questions are AI engines asking about my site? Group by extracted\_query"
* "How is AI traffic trending vs search traffic over the last 30 days?"
* "Which pages has Googlebot crawled recently but AI bots haven't visited in over a week?"
* "What's the error rate per AI bot — which bots are getting 4xx/5xx responses most?"

</details>

<details>

<summary>🧪 SEO Tests</summary>

* "Show me all my SEO tests and their current status"
* "How is my SEO test #5 performing — are clicks and impressions improving?"
* "Compare the before and after metrics for my latest completed SEO test"
* "Create a time-based SEO test on example.com starting today: hypothesis is rewriting the H1 on /blog/seo-guide will improve CTR. Change implemented date is today."
* "Create a 50/50 split test on shop.example.com comparing /products/a, /products/b (control) vs /products/c, /products/d (variant), starting next Monday"
* "Create a URL switch test on example.com alternating /pricing with /pricing-v2 every 7 days, starting today, ending in 60 days"
* "Update SEO test #7 — extend the end date to 2026-08-01 and update the hypothesis to mention the new schema markup"
* "Update test #3 to clear the end date so it runs indefinitely"

</details>

<details>

<summary>📧 Send Email</summary>

* "Send an email to <client@example.com> with subject 'Weekly SEO Report' and a summary of this week's ranking changes"
* "Email me the keyword cannibalization analysis for my site"
* "Send the content brief for 'keto diet' to my team at <team@example.com>"
* "Compose and send an email to <client@example.com> with the top 10 ranking improvements this month"

</details>

<details>

<summary>⚡ Automations</summary>

* "Show me all my automations"
* "What trigger types and action types are available for automations?"
* "Create an automation that exports a PDF report when my organic rank tracker snapshot completes"
* "Create an automation that runs when a content struct outline is generated. It should: 1) Export the outline as markdown to my Downloads folder, 2) Send an email to <client@example.com> with subject 'New Content Brief: \[keyword name]' and body showing the meta title, meta description, and number of headings, with the markdown file attached, 3) Send a GET webhook to <https://n8n.example.com/webhook/content-brief>"
* "Set up an automation to send an email with the rank tracker PDF attached when a snapshot finishes"
* "Create a webhook automation that posts rank tracker data to my n8n workflow when a snapshot completes"
* "Pause automation #1"
* "Delete the 'Test' automation"

</details>

<details>

<summary>🔬 Keyword Insights</summary>

* "Show me the keyword insight summary for my example.com rank tracker report"
* "Which keywords are trending up in my rank tracker report #20?"
* "Are any of my keywords pogo sticking or flickering? Explain what that means."
* "Show me the insight history — which keywords recently became unstable?"
* "How many of my keywords have enough data for trend analysis?"

</details>

<details>

<summary>📈 Rankings + GA4 Conversions (SEO Utils exclusive)</summary>

These prompts combine ranking data with Google Analytics 4 conversion metrics — something no standalone GA4 or rank tracker tool can do on its own. Note: this shows **correlation** (keyword ranking changes on pages that also saw conversion changes), not direct causation.

* "Show me keywords that improved in ranking on pages that also saw increased conversions. I want to see the position change alongside the page's conversion count."
* "Show me pages that generated conversions from organic search, and for each page, show me which keywords rank on that page and their current position."
* "Which pages generate the most organic revenue in GA4, and what keywords am I tracking on those pages?"
* "Are any of my pogo-sticking or flickering keywords on pages that generate conversions? These pages need stabilization first."
* "Give me a complete SEO health report for example.com: how many keywords are trending up vs down, which have unstable rankings, which pages have the most conversions, and what's my total organic revenue from GA4."

</details>

<details>

<summary>🗂️ Workspaces</summary>

* "List my workspaces"
* "Create a new workspace called Client A"
* "Create a workspace named E-commerce Projects with logo <https://example.com/logo.png>"
* "Rename workspace 3 to Personal Sites"
* "Update the Side Projects workspace — clear the logo"
* "Which workspace am I in right now? Switch me to Client A and show all the rank tracker reports in that workspace."
* "In the Client B workspace, create an organic rank tracker for clientb.com with the keywords from my 'Client B' saved list."
* "List the saved keyword lists in the Client A workspace without switching my workspace."

</details>

<details>

<summary>📝 Client &#x26; Comprehensive Reports</summary>

* "Generate a professional, client-ready SEO report for example.com for the last 30 days. Use clear, non-technical language suitable for stakeholders."
* "Create a comprehensive SEO health report for example.com. Include: GSC performance summary, top queries, optimization opportunities, cannibalization issues, and a weekly clicks trend chart."
* "Give me a complete SEO & backlink report for example.com — include traffic overview, top keywords, top pages, top competitors, backlink profile, and combined trends. Save it as an interactive HTML dashboard."

</details>

## Workspaces

If you use multiple workspaces in SEO Utils, the MCP server defaults to your currently active workspace. You can ask the AI to list, switch, create, or rename workspaces:

> "List my workspaces"

> "Switch to the Client Projects workspace"

> "Create a new workspace called Client A"

> "Rename workspace 3 to E-commerce Projects"

> "Update my Personal workspace — change the logo to <https://example.com/logo.png>"

After switching, all subsequent queries will be scoped to that workspace. New workspaces are **not** made active automatically — switch to them with `set_workspace` (or in the workspace switcher in the app). Workspace deletion is only available in the desktop app and is blocked if the workspace still contains any data.

### Working Across Client Workspaces

A switch lasts only until your AI app reconnects to SEO Utils. Apps reconnect when they restart, and remote connections can reconnect on their own. After a reconnect, the AI is back in the workspace that is active in the desktop app.

If you work across several client workspaces, choose the workspace in a way that survives reconnects:

| Way to choose                     | Example                                                           | How long it lasts                                       |
| --------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------- |
| Name the workspace in the request | "Create a rank tracker for example.com in the Client A workspace" | That request only                                       |
| Switch the workspace              | "Switch to the Client A workspace"                                | Until the AI app reconnects                             |
| Set a workspace on the connection | The `X-SEO-Utils-Workspace` header (see below)                    | Every request on that connection, also after reconnects |

When more than one applies, the first row in the table wins. When none applies, the AI uses the workspace that is active in the desktop app.

{% hint style="warning" %}
If the chosen workspace does not exist (for example, it was deleted), SEO Utils refuses the request and runs nothing. It never falls back to another workspace. Choose an existing workspace and ask again.
{% endhint %}

{% hint style="info" %}
Naming a workspace in a request and the connection header need SEO Utils versions after 2.7.0.
{% endhint %}

<details>

<summary>Set a workspace on the connection</summary>

Use this when one AI connection always works for one client, for example an agent per client on a server.

1. Find the workspace ID: ask the AI "List my workspaces".
2. Add the header `X-SEO-Utils-Workspace: <workspace ID>` to the connection, next to the `Authorization` header. For example, in Claude Code:

```bash
claude mcp add --transport http seo-utils-client-a http://localhost:19515/mcp \
  --header "Authorization: Bearer YOUR_TOKEN_HERE" \
  --header "X-SEO-Utils-Workspace: 12"
```

3. Add one connection per client, each with its own workspace ID.

Only apps that connect by URL (HTTP) can send a header. The **Install in Claude Desktop** connection and other local (stdio) connections cannot: with those, name the workspace in each request.

</details>

## Data Accuracy

The MCP server is designed to return the same numbers you see in the app. Behind the scenes, it automatically handles:

* **Timezone conversion** — Google Search Console uses Pacific Time, while other tools use your server's timezone. The MCP applies the correct offsets automatically.
* **Default filters** — Filters like `search_type = 'web'` for GSC data are applied automatically. You don't need to specify them.
* **Smart table selection** — When you ask about total clicks over time, the MCP uses the aggregate table (accurate totals). When you ask about specific queries, it uses the query-level table. Same logic as the app.
* **Rank tracker specifics** — NULL positions correctly handled as "not ranking," local pack results prioritized over organic, and average rank calculations match the app exactly.

You just ask your question in plain English — the MCP handles all the complexity.

## Security

| Aspect             | Detail                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Network**        | Server binds to `127.0.0.1` only — not accessible from the internet                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| **Authentication** | Bearer token required for all connections                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **Data access**    | SQL queries are read-only. A small set of write tools can: create/update/delete saved keyword lists, add keywords to rank tracker reports, create LLM rank tracker reports and review fetches, queue tracker and review-fetch runs, run N.A.P Finder citation searches, create content structs and generate AI content outlines, create and run SERP clustering reports, run NLP text analyses, create/update workspaces, delete GMB rank tracker reports, manage automations and GMB report groups, and review, apply and revert internal links on your WordPress site |
| **Query safety**   | Only SELECT statements allowed, auto-limited to 1,000 rows                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| **Token storage**  | Auth token file has `0600` permissions (owner-read only)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| **Token rotation** | Rotate the auth token anytime from Settings — the old token stops working immediately, no restart needed                                                                                                                                                                                                                                                                                                                                                                                                                                                                |

{% hint style="success" %}
Your SEO data stays on your machine. The MCP server runs locally and the AI connects to it directly — no data is sent to any third-party server.
{% endhint %}

### Rotating the Auth Token

If your token was exposed — shared in a screenshot, a screen recording, or a config file — rotate it to generate a new one and lock out anyone still holding the old token.

{% stepper %}
{% step %}

#### Open the MCP Server Settings

Go to **Settings → Services** and scroll to the **MCP Server (AI Integration)** section. The **Rotate auth token** option appears while the server is running.
{% endstep %}

{% step %}

#### Click "Rotate token"

A confirmation dialog explains the impact: the current token is invalidated immediately, and apps connected by URL with the token, and Claude Desktop set up by an earlier SEO Utils version, lose access until you update them. Click **"Rotate"** to confirm.

<figure><img src="https://1176579443-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2DwV6sJBiKjUHMDggb4d%2Fuploads%2Fuf2k3NpdiKtUBlBYPNMI%2FXnapper-2026-09-28-18.17.32.png?alt=media&amp;token=34cd468d-56d8-41a1-82ee-68a3c691e70b" alt=""><figcaption><p>Rotate token in the MCP Server settings</p></figcaption></figure>
{% endstep %}

{% step %}

#### Reconnect Your AI Clients

The new token takes effect instantly — no restart of SEO Utils needed.

* **Apps added with a button or command in Connect an AI app** (Claude Desktop, Claude Code, Codex, Cursor, VS Code, OpenClaw, Grok Build, Antigravity, Perplexity) — nothing to do: they read the current token from SEO Utils
* **Apps connected by URL with the token** (n8n, Make, claude.ai, other HTTP clients) — copy the new token from **Connect an AI app → Other MCP apps** and replace the old one
* **Connections made with SEO Utils 2.5.0 or earlier** — install again from **Connect an AI app**
  {% endstep %}
  {% endstepper %}

{% hint style="warning" %}
Rotation cannot be undone. Any client still configured with the old token — including automations on n8n, Make.com, or a VPS — will get authentication errors until you update it with the new token.
{% endhint %}

## Frequently Asked Questions

<details>

<summary>Is this self-hosted?</summary>

Yes! The MCP server runs entirely inside the SEO Utils app on your own machine. Your data stays local — nothing is sent to any third-party server. It works on macOS, Windows, and Linux (including VPS).

</details>

<details>

<summary>What about security? Is my desktop accessible from the internet?</summary>

No. The MCP server binds to `127.0.0.1` (localhost) only — it is **not** accessible from the internet. Only applications running on your own machine can connect to it, and they need a valid Bearer token to authenticate. Your data never leaves your computer.

</details>

<details>

<summary>Can I run this on a VPS for 24/7 automations?</summary>

Yes! You can install SEO Utils on a VPS (Linux is supported) and keep it running 24/7. This is great for automations with n8n, Make, etc. — they won't fail when your local machine is turned off. If you need external access from the internet, put SEO Utils behind a reverse proxy (like Nginx) with HTTPS. The built-in Bearer token auth ensures only authorized clients can connect.

</details>

<details>

<summary>Which AI clients are supported?</summary>

Any MCP-compatible client works, including:

* **Claude Desktop / Cowork (desktop)** — one click (local connection)
* **Claude Code** — one click or one command (local connection)
* **OpenAI Codex (ChatGPT desktop app, CLI, IDE extension)** — one click or one command (local connection, shared `config.toml`)
* **Cursor** and **VS Code (GitHub Copilot)** — one click (local connection)
* **OpenClaw**, **Grok Build** — one command (local connection)
* **Google Antigravity** — paste a config (local connection)
* **Perplexity (Mac)** — paste a command (macOS only, paid plan)
* **ChatGPT desktop app** — one click, through **Add to Codex** (local connection)
* **n8n, Make** — via HTTP with the auth token (requires a public HTTPS URL, or n8n on the same machine)
* **Claude Web (claude.ai)** — via custom connector, only with its Request headers beta (requires a public HTTPS URL)
* **ChatGPT on the web, Grok (grok.com)** — not supported yet: their connectors can't send SEO Utils' auth token
* **Any MCP client** — the standard MCP protocol, as a local command (stdio) or over HTTP

None of the local connections need Node.js. See [Connecting to AI Assistants](#connecting-to-ai-assistants).

</details>

<details>

<summary>Can the AI modify or delete my data?</summary>

SQL queries are strictly **read-only** — only `SELECT` statements are allowed. However, a small set of action tools can write on your behalf: Saved Keywords tools (create/rename/delete lists, add/remove keywords), Organic Rank Tracker tools (create/update reports, add or remove keywords, queue a tracker run — which consumes DataForSEO credits; removing a keyword also deletes its historical positions and insights), LLM Rank Tracker tools (create reports, queue a snapshot run — also consumes DataForSEO credits), Review Fetcher tools (create a review fetch, queue a fetch run — also consumes DataForSEO credits), Content Struct tools (create reports — consumes DataForSEO credits when scraping via the SERP API — and generate AI outlines, which spend your configured AI provider's credits), SERP Clustering tools (create reports and queue clustering runs — scraping and keyword metrics consume DataForSEO credits when it is the chosen method; adding keywords to an existing report is part of a run), Workspace tools (create or rename workspaces), GMB report groups (create/delete), GMB rank tracker reports (delete one or many — permanent: it also removes their keywords, grid, snapshots and ranking history), Automations (create/update/delete), Internal Links (run Find links, which spends TypeSafe and embedding credit; review suggestions; change the rules; apply or revert links on your live WordPress site), and AI Visibility (create, edit and delete explorations; start or stop an Overview load and load lists that are not loaded yet, which consume DataForSEO credits, or your rental credits, only at the price you agreed to). Workspace deletion is intentionally *not* exposed over MCP — that operation lives in the desktop app. Everything else (GSC, backlinks, snapshots, settings) cannot be modified by the AI.

</details>

<details>

<summary>The AI uses the wrong tool for GSC queries</summary>

When asking about your own site's search performance (cannibalization, trending queries, weak pages, etc.), include **"in GSC"** or **"from my Search Console data"** in your prompt. Without this hint, the AI may fetch third-party estimated data from DataForSEO instead of querying your actual Google Search Console data stored locally.

**Example:** Instead of "Find cannibalization issues for example.com", say "Find cannibalization issues for example.com **in GSC**".

</details>

## Troubleshooting

<details>

<summary>MCP server won't start</summary>

Make sure you have a valid license key and have purchased MCP access. Check that port 19515 is not being used by another application.

</details>

<details>

<summary>Claude Desktop shows "Server disconnected" or "failed"</summary>

This usually means one of these:

1. **Installed with SEO Utils 2.5.0 or earlier** — that connection runs `mcp-remote` on Node.js, and it stops for good if Claude Desktop starts before SEO Utils. Click **"Install in Claude Desktop"** again with the current SEO Utils: the new connection needs no Node.js and survives either app starting first
2. **SEO Utils is not running** — Open the app and make sure the MCP server is enabled (status shows "Running")
3. **Didn't restart Claude Desktop** — After installing, you must fully quit and reopen Claude Desktop

</details>

<details>

<summary>Claude's custom connector can't use http://localhost</summary>

Claude's custom connectors (**Customize → Connectors**) run on Anthropic's servers, not on your computer, so they can't reach `localhost` at all, whatever the URL scheme.

**Use "Install in Claude Desktop" instead** — it connects locally, with no URL.

</details>

<details>

<summary>"Install in Claude Desktop" says success but nothing shows</summary>

Try these fixes in order:

**1. Fully kill Claude Desktop (most common fix on Windows)**

On Windows, closing the window doesn't quit Claude Desktop — it stays running in the background. Open **Task Manager** (Ctrl+Shift+Esc), find **Claude** in the process list, click **End Task**, then reopen Claude Desktop.

**2. Installed with SEO Utils 2.5.0 or earlier?**

That setup needs Node.js. Click **"Install in Claude Desktop"** again with the current SEO Utils, whose connection doesn't.

**3. Windows: config file in wrong location**

On Windows, Claude Desktop installs as an MSIX package and reads config from a different location than expected. Update to the latest SEO Utils version (v1.45+) which automatically detects the correct path.

If you're on an older version, manually create `claude_desktop_config.json` at:

```
C:\Users\<YourUsername>\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\
```

instead of `%APPDATA%\Claude\`. Copy the local (stdio) config from SEO Utils **Settings → MCP Server → Connect an AI app → Other MCP apps**.

</details>

<details>

<summary>SyntaxError: Unexpected token { / Cannot find module 'node:path'</summary>

This comes from the `mcp-remote` connection that SEO Utils 2.5.0 and earlier installed: Claude Desktop ran it with an old Node.js, which is common with **nvm**.

**Fix:** click **"Install in Claude Desktop"** again with the current SEO Utils, then restart Claude Desktop. The new connection doesn't use Node.js.

</details>

<details>

<summary>The AI says "SEO Utils isn't running"</summary>

The AI app is connected, but SEO Utils is closed or its MCP server is off. Open SEO Utils and make sure **Settings → MCP Server** shows **Running**, then ask again. There's no need to restart the AI app.

If the AI says the connection dropped during a call and it "may or may not have completed", check the result in SEO Utils before asking it to run the same action again.

</details>

<details>

<summary>"Add to Claude Code" says the claude command wasn't found</summary>

SEO Utils looks for Claude Code's `claude` command in the usual install locations. If it's somewhere else, copy the command shown under the button and run it in a terminal.

</details>

<details>

<summary>"Add to Cursor" or "Add to VS Code" says it couldn't open the app</summary>

The app isn't installed, or your system doesn't know it can open its install links. Install or update Cursor or VS Code, open it once, then click the button again.

</details>

<details>

<summary>Queries return no data</summary>

Make sure you're in the correct workspace. Use the prompt "List my workspaces" to check which one is active, then switch if needed. A switch ends when your AI app reconnects; to stay in one workspace, see [Working Across Client Workspaces](#working-across-client-workspaces).

</details>

<details>

<summary>Does the auth token change when I restart SEO Utils?</summary>

No. The auth token is generated once and persists across restarts. You only need to set up the connection once — it will keep working after restarting SEO Utils or your computer.

The token only changes when you rotate it yourself via **Settings → MCP Server → Rotate token** (see [Rotating the Auth Token](#rotating-the-auth-token)). After a rotation, only apps connected by URL with the token need the new one.

</details>
