# MCP Server (AI Integration)

The MCP Server lets you connect AI assistants like Claude Desktop, Claude Code, 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&#x26;token=f20fe4f9-cffd-40f5-bf56-dd8ef24b189a" alt=""><figcaption><p>MCP Server settings in SEO Utils</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"                                      |
| **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"       |
| **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?"                                    |
| **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?"                                           |

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)
* For Claude Desktop: Node.js installed (used by the mcp-remote bridge)

## 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&#x26;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&#x26;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%2F4imbgGrKUemf1P8aTROd%2FXnapper-2026-03-21-15.17.34.png?alt=media&#x26;token=a2b51030-62c6-4649-b02c-78e0b57601f6" alt=""><figcaption><p>MCP Server enabled and running</p></figcaption></figure>
{% endstep %}

{% step %}
**Connect to Claude**

Choose one of the three connection methods described below.
{% endstep %}
{% endstepper %}

## Connecting to AI Assistants

Pick the method that matches your setup:

| Method                                                              | Best for               | Requires Node.js? | Requires public URL?    |
| ------------------------------------------------------------------- | ---------------------- | ----------------- | ----------------------- |
| **Claude Desktop — Auto Install**                                   | Most users             | Yes               | No                      |
| **Claude Code**                                                     | Developers             | No                | No                      |
| **Google Antigravity**                                              | Developers             | Yes               | No                      |
| **OpenClaw**                                                        | Self-hosted AI users   | Yes               | No                      |
| **Perplexity (Mac)**                                                | Perplexity users       | Yes               | No                      |
| **ChatGPT Desktop**                                                 | ChatGPT users          | No                | No (with tunnel) or Yes |
| **Claude Web / ChatGPT Web / Perplexity (Remote) / n8n / Make.com** | Cloud tools, VPS users | No                | Yes (HTTPS)             |

<details>

<summary>Claude Desktop (Recommended)</summary>

**One-Click Install** — works with both Claude Desktop and Cowork (desktop version). Connects locally — no public URL needed.

1. Install [**Node.js**](https://nodejs.org) (LTS version) if you haven't already
2. In the MCP Server settings, click the **"Auto Install"** tab
3. Click **"Install in Claude Desktop"**
4. **Restart Claude Desktop** to apply changes

You'll see SEO Utils appear under **Settings → Connectors** in Claude Desktop.

{% hint style="warning" %}
**Node.js is required.** Claude Desktop can only connect to local MCP servers using a bridge tool called `mcp-remote`, which runs on Node.js. Without it, the install will appear to succeed but Claude Desktop won't be able to connect. Download Node.js from [nodejs.org](https://nodejs.org).
{% endhint %}

{% hint style="info" %}
**Don't want to install Node.js?** Use **Claude Code** instead — it connects directly without any bridge.
{% endhint %}

</details>

<details>

<summary>Claude Code</summary>

**No Node.js required** — Claude Code connects directly to the MCP server over HTTP.

**Option A: One-line command**

Copy the token from the MCP Server settings (**Manual Config** tab), then run:

```bash
claude mcp add --transport http seo-utils http://localhost:19515/mcp \
  --header "Authorization: Bearer YOUR_TOKEN_HERE"
```

**Option B: Add to `.mcp.json`**

1. In the MCP Server settings, click the **"Manual Config"** tab
2. Click **"Copy Config"** to copy the JSON configuration
3. Add it to your project's `.mcp.json`:

```json
{
  "mcpServers": {
    "seo-utils": {
      "url": "http://localhost:19515/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN_HERE"
      }
    }
  }
}
```

The actual token is included in the copied config — you don't need to fill it in manually.

**Option C: Import from Claude Desktop** (if already installed there)

```bash
claude mcp add-from-claude-desktop
```

This imports all MCP servers from your Claude Desktop config, including SEO Utils. Mac and WSL only.

</details>

<details>

<summary>Google Antigravity</summary>

**Requires Node.js** — Antigravity uses `mcp_config.json` with the same bridge approach as Claude Desktop.

1. Open **Antigravity** → click **"..."** in the Agent Panel → **MCP Servers**
2. Click **Manage MCP Servers** → **Edit configuration** to open `mcp_config.json`
3. Add the SEO Utils server:

**macOS / Linux:**

```json
{
  "mcpServers": {
    "seo-utils": {
      "command": "npx",
      "args": ["-y", "mcp-remote@latest", "http://localhost:19515/mcp", "--header", "Authorization: Bearer YOUR_TOKEN_HERE", "--allow-http"]
    }
  }
}
```

**Windows:**

```json
{
  "mcpServers": {
    "seo-utils": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "mcp-remote@latest", "http://localhost:19515/mcp", "--header", "Authorization: Bearer YOUR_TOKEN_HERE", "--allow-http"]
    }
  }
}
```

Replace `YOUR_TOKEN_HERE` with the token from SEO Utils Settings → MCP Server → Manual Config.

4. Save the file and **restart Antigravity**
5. Ask the agent "What tools do you have access to?" to confirm the connection

{% hint style="info" %}
Requires [**Node.js**](https://nodejs.org) installed.
{% endhint %}

</details>

<details>

<summary>OpenClaw</summary>

**Requires Node.js** — OpenClaw supports MCP servers natively via `openclaw.json`.

Add the SEO Utils MCP server to your `openclaw.json` config:

**macOS / Linux:**

```json
{
  "mcpServers": {
    "seo-utils": {
      "command": "npx",
      "args": ["-y", "mcp-remote@latest", "http://localhost:19515/mcp", "--header", "Authorization: Bearer YOUR_TOKEN_HERE", "--allow-http"]
    }
  }
}
```

**Windows:**

```json
{
  "mcpServers": {
    "seo-utils": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "mcp-remote@latest", "http://localhost:19515/mcp", "--header", "Authorization: Bearer YOUR_TOKEN_HERE", "--allow-http"]
    }
  }
}
```

Replace `YOUR_TOKEN_HERE` with the token from SEO Utils Settings → MCP Server → Manual Config.

Restart OpenClaw and the MCP tools will be available to your agents.

{% hint style="info" %}
Requires [**Node.js**](https://nodejs.org) installed.
{% endhint %}

</details>

<details>

<summary>ChatGPT Desktop</summary>

**Via Developer Mode** — ChatGPT Desktop supports MCP servers through Developer Mode (beta). It requires an HTTPS URL, so you'll need a tunnel for local connections.

1. Open **ChatGPT Desktop** → **Settings** → **Advanced settings** → Enable **Developer Mode**
2. Install [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/) (free, no account needed):
   * **macOS**: `brew install cloudflare/cloudflare/cloudflared`
   * **Windows**: Download from [cloudflare.com](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/) and run the installer
   * **Linux**: `wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && sudo dpkg -i cloudflared-linux-amd64.deb`
3. Start the tunnel to expose your local MCP server:

```bash
cloudflared tunnel --url http://localhost:19515
```

4. Copy the generated HTTPS URL from the terminal output (e.g., `https://xxx.trycloudflare.com`)
5. In ChatGPT, go to **Settings** → **Connectors** → **Create**
6. Enter the connector URL: `https://xxx.trycloudflare.com/mcp`
7. Add the auth header: `Authorization: Bearer YOUR_TOKEN_HERE`

Copy the token from SEO Utils Settings → MCP Server → Manual Config.

{% hint style="warning" %}
**ChatGPT requires HTTPS.** It cannot connect to `http://localhost` directly. The Cloudflare Tunnel must be running whenever you use the MCP server. If you restart the tunnel, you'll get a new URL and need to update the connector.
{% endhint %}

{% hint style="info" %}
Developer Mode requires **ChatGPT Plus, Pro, or Enterprise** plan.
{% endhint %}

</details>

<details>

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

**Requires Node.js** — Perplexity Mac app supports local MCP servers via 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. Set the **Command** to:

```
npx -y mcp-remote@latest http://localhost:19515/mcp --header "Authorization: Bearer YOUR_TOKEN_HERE" --allow-http
```

Replace `YOUR_TOKEN_HERE` with the token from SEO Utils Settings → MCP Server → Manual Config.

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 currently only available on the Mac App Store version. Windows and Linux users need to use the remote MCP option (see "Claude Web / n8n / Make.com" below) with a Cloudflare Tunnel or VPS.
{% endhint %}

{% hint style="info" %}
Requires **Node.js** installed ([nodejs.org](https://nodejs.org)) and a **Perplexity paid plan**.
{% endhint %}

</details>

<details>

<summary>Claude Web / Perplexity (Remote) / n8n / Make.com</summary>

**Requires a publicly accessible HTTPS URL**

Claude Web (claude.ai), Cowork (web version), n8n (cloud), and Make.com cannot connect to `localhost`. You need to make your MCP server accessible over the internet.

**Option A: Cloudflare Tunnel (easiest, free, no VPS needed)**

1. Install [cloudflared](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/):
   * **macOS**: `brew install cloudflare/cloudflare/cloudflared`
   * **Windows**: Download from [cloudflare.com](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/) and run the installer
   * **Linux**: `wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && sudo dpkg -i cloudflared-linux-amd64.deb`
2. Run: `cloudflared tunnel --url http://localhost:19515`
3. Copy the generated `https://xxx.trycloudflare.com` URL
4. In Claude.ai, go to **Settings → Connectors → Add custom connector** and enter the URL with `/mcp` appended

**Option B: VPS with reverse proxy**

If you're running SEO Utils on a VPS:

1. Set up a reverse proxy (Nginx on Linux, [Caddy](https://caddyserver.com) on any OS) with HTTPS pointing to `127.0.0.1:19515`
2. In Claude.ai, go to **Settings → Connectors → Add custom connector**
3. Enter your public URL (e.g., `https://mcp.yourdomain.com/mcp`)

**Option C: Self-hosted n8n on the same machine**

If n8n runs on the same machine as SEO Utils, just use `http://localhost:19515/mcp` directly — no public URL or tunnel needed.

{% hint style="warning" %}
**Cannot connect to localhost from the cloud.** Claude.ai, cloud-hosted n8n, and Make.com run on remote servers and cannot reach your local machine. Use Cloudflare Tunnel or a VPS to make it accessible.
{% endhint %}

{% hint style="info" %}
Custom connectors on Claude.ai require a **Pro or Max plan**.
{% endhint %}

</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.

<details>

<summary>Claude Desktop / Cowork</summary>

1. [Download the skill ZIP](https://github.com/seoutilsapp/seo-utils-skills/archive/refs/heads/main.zip)
2. In Claude Desktop, go to **Customize → Skills**
3. Click **"+"** → **"Upload a skill"**
4. Upload the downloaded ZIP file
5. Toggle the skill on

</details>

<details>

<summary>Claude Code</summary>

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

</details>

<details>

<summary>ChatGPT</summary>

1. [Download the skill ZIP](https://github.com/seoutilsapp/seo-utils-skills/archive/refs/heads/main.zip)
2. In ChatGPT, go to **Customize → Skills**
3. Click **"New skill"** → **"Upload from your computer"**
4. Upload the downloaded ZIP file

</details>

<details>

<summary>Perplexity</summary>

1. Download the [Skill.md file](https://raw.githubusercontent.com/seoutilsapp/seo-utils-skills/main/Skill.md)
2. In Perplexity Computer, go to the **My Skills** tab
3. Upload the `Skill.md` file

</details>

<details>

<summary>Google Antigravity</summary>

Copy the skill to your global skills directory:

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

Or for workspace-only: copy to `<your-project>/.agents/skills/seo-utils-mcp-guide/SKILL.md`

</details>

<details>

<summary>OpenClaw</summary>

Copy the skill to your global skills directory:

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

Or for workspace-only: copy to `<your-project>/skills/seo-utils-mcp-guide/SKILL.md`

</details>

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&#x26;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&#x26;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 and add the SEO Utils MCP server:

```bash
mkdir ~/seo-workspace && cd ~/seo-workspace
claude mcp add --transport http seo-utils http://localhost:19515/mcp \
  --header "Authorization: Bearer YOUR_TOKEN_HERE"
```

Replace `YOUR_TOKEN_HERE` with the token from SEO Utils Settings → MCP Server → Manual Config.

{% hint style="info" %}
You can also use any other method from the **Claude Code** tab above (`.mcp.json` or import from Claude Desktop).
{% endhint %}
{% 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:

**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                                                  |
| `set_workspace`   | Switches to a different workspace                                                              |

**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)                                                                                                                                             |
| `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** (grow tracked keyword sets and queue runs):

| Tool                                | Description                                                                                                                                |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `add_organic_rank_tracker_keywords` | Add keywords to an existing rank tracker report. Duplicates are silently skipped. Does NOT rerun the tracker — the AI asks you separately. |
| `run_rank_tracker`                  | Queue a rank tracker run for a report. Background job; consumes DataForSEO credits. Optional `force_refresh` to rescrape everything.       |

**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                |

**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 and Organic Rank Tracker tools can create, update, and delete keyword lists, add keywords to rank tracker reports, and queue tracker runs on your behalf. Running the tracker consumes DataForSEO credits.
{% 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                                |
| **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>🔑 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>📐 Content Struct (Content Brief)</summary>

* "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>📝 Text Analysis (NLP)</summary>

* "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?"

</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"
* "Force-refresh my rank tracker for example.com — I want fresh SERPs for every keyword"
* "Rerun the rank tracker for laravel.com"

</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"
* "How is my brand mentioned across AI search engines like ChatGPT and Perplexity?"
* "Which search terms trigger the most AI citations for my brand?"
* "Compare my LLM visibility across different AI engines — ChatGPT vs Perplexity vs Gemini"
* "Show me the trend of my brand mentions in AI responses over the last month"

</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"

</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>📝 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 switch workspaces:

> "List my workspaces"

> "Switch to the Client Projects workspace"

After switching, all subsequent queries will be scoped to that workspace.

## 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. Saved Keywords and Organic Rank Tracker tools can create/update/delete keyword lists, add keywords to rank tracker reports, and queue tracker runs |
| **Query safety**   | Only SELECT statements allowed, auto-limited to 1,000 rows                                                                                                                    |
| **Token storage**  | Auth token file has `0600` permissions (owner-read only)                                                                                                                      |

{% 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 %}

## 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)** — via Auto Install or manual config (local connection)
* **Claude Code** — via `.mcp.json` config (local connection)
* **Google Antigravity** — via `mcp_config.json` (local connection, requires Node.js)
* **OpenClaw** — via `openclaw.json` (local connection, requires Node.js)
* **ChatGPT Desktop** — via Developer Mode + tunnel or public URL (Plus/Pro/Enterprise)
* **Perplexity (Mac)** — via local MCP connector (macOS only, paid plan)
* **Claude Web (claude.ai) / Cowork (web)** — via custom connector (requires public URL, Pro/Max plan)
* **Perplexity (Remote)** — via remote connector (requires public URL, paid plan)
* **n8n, Make, Zapier** — via the HTTP API (requires public URL or same machine)
* **Any MCP client** — the server uses the standard MCP protocol over HTTP

</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) and Organic Rank Tracker tools (add keywords to a report, queue a tracker run — which consumes DataForSEO credits). 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. **SEO Utils is not running** — Open the app and make sure the MCP server is enabled (status shows "Running")
2. **Node.js is not installed** — The Auto Install method requires Node.js. Download it from [nodejs.org](https://nodejs.org) (LTS version), then restart Claude Desktop
3. **Windows path issue** — If you see `'C:\Program' is not recognized` in the logs, update to the latest SEO Utils version which fixes this. Or reinstall by clicking "Install in Claude Desktop" again
4. **Didn't restart Claude Desktop** — After installing, you must fully quit and reopen Claude Desktop

If you don't want to install Node.js, use **Claude Code** instead — it connects directly without Node.js.

</details>

<details>

<summary>Claude Desktop Connector says URL must be HTTPS</summary>

The Connectors UI in Claude Desktop (Settings → Connectors) only accepts HTTPS URLs. Since the MCP server runs on `http://localhost:19515`, you can't use Connectors for local connections.

**Use the Auto Install method instead** — it uses a bridge tool that handles the local connection. If you don't have Node.js, use **Claude Code** which supports local HTTP connections directly.

</details>

<details>

<summary>Auto Install says success but nothing shows in Claude Desktop</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. Check Node.js is installed**

Open Terminal/Command Prompt and run `node -v`. If not found, download from [nodejs.org](https://nodejs.org), install it, then try clicking "Install in Claude Desktop" again.

**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 config from SEO Utils Settings → MCP Server → Manual Config.

</details>

<details>

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

Claude Desktop is using an old version of Node.js. This commonly happens when you use **nvm** (Node Version Manager) — your terminal has the correct version, but Claude Desktop doesn't load nvm's shell config and picks up an older Node.js instead.

**Fix:** Edit your Claude Desktop config file and set both the full path to npx AND the PATH environment variable:

1. Run `which npx` in your terminal to get the path (e.g., `/Users/yourname/.nvm/versions/node/v22.18.0/bin/npx`)
2. Open your Claude Desktop config:
   * **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
   * **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
3. Update the `seo-utils` entry:

```json
{
  "mcpServers": {
    "seo-utils": {
      "command": "/Users/yourname/.nvm/versions/node/v22.18.0/bin/npx",
      "args": ["-y", "mcp-remote@latest", "http://localhost:19515/mcp", "--header", "Authorization: Bearer YOUR_TOKEN_HERE", "--allow-http"],
      "env": {
        "PATH": "/Users/yourname/.nvm/versions/node/v22.18.0/bin:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}
```

Replace `/Users/yourname/.nvm/versions/node/v22.18.0` with your actual nvm path (run `which npx` to find it). Both the `command` and `PATH` must point to the same Node.js version.

4. Restart Claude Desktop

</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.

</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.

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.seoutils.app/guide/mcp-server.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
