---
title: "Google Search Console Tools"
description: "MCP tools for Google Search Console data. Get real performance metrics, identify SEO opportunities, and manage sitemaps—through your AI assistant."
canonical_url: "https://nuxtseo.com/pro/docs/reference/mcp/gsc-tools"
last_updated: "2026-05-06T18:44:31.416Z"
---

Access your Google Search Console data through AI. Get real clicks, impressions, rankings, and run analysis presets to find SEO opportunities. Requires GSC connected in your Pro dashboard.

<callout type="info">

Connect your site to Google Search Console in the [Pro dashboard](/pro/dashboard) before using these tools. Data syncs automatically via gscdump.com.

</callout>

## Quick Start

All GSC tools auto-detect your site if you have one GSC-connected site. For multiple sites, pass `siteUrl`.

```ts
// Auto-detect (single site)
gsc_query({ type: 'pages', period: '28d', limit: 10 })

// Explicit site
gsc_query({ type: 'pages', siteUrl: 'https://mysite.com', period: '28d' })
```

## gsc_status

Check GSC connection and sync status.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        siteUrl
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      Site URL (optional if single site)
    </td>
  </tr>
</tbody>
</table>

```ts
gsc_status()
```

Returns:

```json
{
  "connected": true,
  "site": "https://mysite.com",
  "syncStatus": "synced",
  "syncProgress": { "percent": 100 },
  "dateRange": {
    "oldest": "2023-01-15",
    "newest": "2024-01-20"
  },
  "lastSyncAt": 1705789200000,
  "isSyncing": false,
  "hasData": true,
  "isComplete": true,
  "daysSynced": 365,
  "daysAvailable": 365
}
```

## gsc_query

Unified GSC data query. Use the `type` parameter to select what data to retrieve.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Default
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        type
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      required
    </td>
    
    <td>
      Query type (see below)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        siteUrl
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Site URL (optional)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        period
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <code>
        28d
      </code>
    </td>
    
    <td>
      <code>
        7d
      </code>
      
      , <code>
        28d
      </code>
      
      , <code>
        3m
      </code>
      
      , <code>
        6m
      </code>
      
      , <code>
        12m
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        limit
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      <code>
        25
      </code>
    </td>
    
    <td>
      Max results (1-100)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        sort
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <code>
        clicks
      </code>
    </td>
    
    <td>
      <code>
        clicks
      </code>
      
      , <code>
        impressions
      </code>
      
      , <code>
        ctr
      </code>
      
      , <code>
        position
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        sortDir
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <code>
        desc
      </code>
    </td>
    
    <td>
      <code>
        asc
      </code>
      
      , <code>
        desc
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        search
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Filter text
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        minClicks
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Minimum clicks
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        maxClicks
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Maximum clicks
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        minImpressions
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Minimum impressions
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        maxImpressions
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Maximum impressions
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        minPosition
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Minimum position
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        maxPosition
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Maximum position
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        maxCtr
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Maximum CTR
    </td>
  </tr>
</tbody>
</table>

### type: pages

Top pages with clicks, impressions, CTR, and position. Includes comparison to previous period.

<table>
<thead>
  <tr>
    <th>
      Extra Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        filter
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <code>
        top-level
      </code>
      
      , <code>
        new
      </code>
      
      , <code>
        lost
      </code>
      
      , <code>
        improving
      </code>
      
      , <code>
        declining
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        minClicks
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      Minimum clicks
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        maxPosition
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      Maximum position
    </td>
  </tr>
</tbody>
</table>

```ts
gsc_query({ type: 'pages', period: '28d', limit: 10, filter: 'declining' })
```

### type: keywords

Top keywords/queries with performance metrics.

<table>
<thead>
  <tr>
    <th>
      Extra Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        filter
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <code>
        top-level
      </code>
      
      , <code>
        new
      </code>
      
      , <code>
        lost
      </code>
      
      , <code>
        improving
      </code>
      
      , <code>
        declining
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        minImpressions
      </code>
    </td>
    
    <td>
      <code>
        number
      </code>
    </td>
    
    <td>
      Minimum impressions
    </td>
  </tr>
</tbody>
</table>

```ts
gsc_query({ type: 'keywords', period: '28d', limit: 20, minImpressions: 100 })
```

### type: timeseries

Daily time-series data for trend analysis.

```ts
gsc_query({ type: 'timeseries', period: '28d' })
```

Returns daily data points with clicks, impressions, CTR, and position.

### type: countries

Traffic breakdown by country.

```ts
gsc_query({ type: 'countries', period: '28d', limit: 10 })
```

### type: devices

Traffic breakdown by device type (desktop, mobile, tablet).

```ts
gsc_query({ type: 'devices', period: '28d' })
```

### type: analysis

Run SEO analysis presets to find opportunities.

<table>
<thead>
  <tr>
    <th>
      Extra Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        preset
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      required - see preset table below
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        brandTerms
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      Brand terms for brand presets (comma-separated)
    </td>
  </tr>
</tbody>
</table>

#### Available Presets

<table>
<thead>
  <tr>
    <th>
      Preset
    </th>
    
    <th>
      What It Finds
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        striking-distance
      </code>
    </td>
    
    <td>
      Keywords in positions 4-20 that could reach page 1 with optimization
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        opportunity
      </code>
    </td>
    
    <td>
      High impressions, low CTR - title/content improvements needed
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        movers-rising
      </code>
    </td>
    
    <td>
      Keywords gaining rankings - double down on what's working
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        movers-declining
      </code>
    </td>
    
    <td>
      Keywords losing rankings - needs attention before further drops
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        decay
      </code>
    </td>
    
    <td>
      Pages/keywords with declining performance over time
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        zero-click
      </code>
    </td>
    
    <td>
      Keywords with impressions but no clicks - featured snippet opportunities?
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        non-brand
      </code>
    </td>
    
    <td>
      Non-branded traffic (requires <code>
        brandTerms
      </code>
      
      )
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        brand-only
      </code>
    </td>
    
    <td>
      Branded traffic only (requires <code>
        brandTerms
      </code>
      
      )
    </td>
  </tr>
</tbody>
</table>

```ts
// Find quick wins
gsc_query({ type: 'analysis', preset: 'striking-distance', period: '28d', limit: 20 })

// Brand vs non-brand split
gsc_query({ type: 'analysis', preset: 'non-brand', brandTerms: 'nuxt seo, nuxtseo' })
```

#### Preset-Specific Fields

<table>
<thead>
  <tr>
    <th>
      Preset
    </th>
    
    <th>
      Extra Fields
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        striking-distance
      </code>
    </td>
    
    <td>
      <code>
        potentialClicks
      </code>
      
      , <code>
        opportunityScore
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        opportunity
      </code>
    </td>
    
    <td>
      <code>
        potentialClicks
      </code>
      
      , <code>
        opportunityScore
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        movers-*
      </code>
    </td>
    
    <td>
      <code>
        clicksChange
      </code>
      
      , <code>
        posChange
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        decay
      </code>
    </td>
    
    <td>
      <code>
        decayPct
      </code>
      
      , <code>
        missedClicks
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        brand/non-brand
      </code>
    </td>
    
    <td>
      <code>
        summary
      </code>
      
       with brand share stats
    </td>
  </tr>
</tbody>
</table>

### type: page-detail

Get all keywords ranking for a specific page.

<table>
<thead>
  <tr>
    <th>
      Extra Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        pageUrl
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      required - full URL of the page
    </td>
  </tr>
</tbody>
</table>

```ts
gsc_query({
  type: 'page-detail',
  pageUrl: 'https://mysite.com/docs/getting-started',
  period: '28d',
  limit: 20
})
```

Use this to see which keywords drive traffic to a specific page.

### type: keyword-detail

Get all pages ranking for a specific keyword.

<table>
<thead>
  <tr>
    <th>
      Extra Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        keyword
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      required - keyword to analyze
    </td>
  </tr>
</tbody>
</table>

```ts
gsc_query({
  type: 'keyword-detail',
  keyword: 'nuxt meta tags',
  period: '28d'
})
```

Use this to detect keyword cannibalization - multiple pages competing for the same keyword.

## gsc_sitemaps

Sitemap management - view status, submit, delete, or refresh sitemaps.

<table>
<thead>
  <tr>
    <th>
      Parameter
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Default
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        siteUrl
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Site URL (optional)
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        action
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      <code>
        list
      </code>
    </td>
    
    <td>
      <code>
        list
      </code>
      
      , <code>
        submit
      </code>
      
      , <code>
        delete
      </code>
      
      , <code>
        refresh
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        sitemapUrl
      </code>
    </td>
    
    <td>
      <code>
        string
      </code>
    </td>
    
    <td>
      -
    </td>
    
    <td>
      Sitemap URL (required for submit/delete)
    </td>
  </tr>
</tbody>
</table>

```ts
// List sitemaps
gsc_sitemaps()

// Submit new sitemap
gsc_sitemaps({ action: 'submit', sitemapUrl: 'https://mysite.com/sitemap.xml' })

// Refresh all sitemaps
gsc_sitemaps({ action: 'refresh' })

// Delete sitemap
gsc_sitemaps({ action: 'delete', sitemapUrl: 'https://mysite.com/old-sitemap.xml' })
```

## Data Freshness

<table>
<thead>
  <tr>
    <th>
      Tool
    </th>
    
    <th>
      Cache
    </th>
    
    <th>
      Notes
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        gsc_status
      </code>
    </td>
    
    <td>
      5 min
    </td>
    
    <td>
      Real-time sync status
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        gsc_query
      </code>
    </td>
    
    <td>
      1 hour
    </td>
    
    <td>
      All query types
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        gsc_sitemaps
      </code>
      
       (list)
    </td>
    
    <td>
      1 hour
    </td>
    
    <td>
      Sitemap status
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        gsc_sitemaps
      </code>
      
       (submit/delete/refresh)
    </td>
    
    <td>
      None
    </td>
    
    <td>
      Immediate action
    </td>
  </tr>
</tbody>
</table>

GSC data has a 2-3 day delay from Google. The `newest` date in sync status shows the most recent available data.

## Using with Audit Prompts

These tools power the [SEO Audit prompts](/pro/docs/reference/mcp/audit-prompts):

- **seo_audit_site** - Runs `gsc_query` with timeseries, analysis presets, countries, and devices for a complete site audit
- **seo_audit_page** - Runs `gsc_query` with page-detail and keyword-detail for deep page analysis

The prompts orchestrate these tools and generate prioritized action plans from the data.
