Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the GTmetrix MCP server

Vendor MCP
Open markdown

The GTmetrix MCP connector routes your AI agent's tool calls to GTmetrix's own MCP server through Scalekit. Each user signs in to GTmetrix once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 18 tools.

Tools
18
What they doRead · write · destructive
8 · 8 · 28 read8 write2 destructive
Users sign in with
OAuth app
Scalekit's or your own

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the GTmetrix MCP connection

    In AgentKit > Connections, create a GTmetrix MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for GTmetrix MCP server, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'gtmetrixmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize GTmetrix MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'gtmetrixmcp_get_account_status',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • gtmetrixmcp_get_account_statusReturns the current GTmetrix account status including plan type, remaining API credits, next refill date, and feature access flags.Read-only

    GetAccountStatus

    Returns the current GTmetrix account status including plan type, remaining API credits, next refill date, and feature access flags.

    Inputs

    This tool takes no inputs.

  • gtmetrixmcp_get_catalogFetch a GTmetrix lookup catalog in JSON format for resolving names to IDs.Read-only

    GetCatalog

    Fetch a GTmetrix lookup catalog in JSON format for resolving names to IDs. Available catalogs: browsers, locations, simulated-devices, throttle-connections, lighthouse-audits.

    Inputs

    catalog_idstringrequired
    The catalog to retrieve.one of browserslocationssimulated-devicesthrottle-connectionslighthouse-audits
  • gtmetrixmcp_get_guideFetch a GTmetrix documentation guide in markdown format.Read-only

    GetGuide

    Fetch a GTmetrix documentation guide in markdown format. Available guides: har-analysis, test-options, report-analysis, general-test-error, lighthouse-error.

    Inputs

    guide_idstringrequired
    The identifier of the guide to fetch.one of har-analysistest-optionsreport-analysisgeneral-test-errorlighthouse-error
  • gtmetrixmcp_get_reportRetrieve the report data using the report ID.Read-only

    GetReport

    Retrieve the report data using the report ID. Contains GTmetrix scores, Core Web Vitals, top Lighthouse issues, resource summary, and download URLs.

    Inputs

    report_idstringrequired
    The 8-character report ID to retrieve.
  • gtmetrixmcp_get_report_harFetch the raw HAR (net.har) for a completed GTmetrix report and return it inline.Read-only

    GetReportHar

    Fetch the raw HAR (net.har) for a completed GTmetrix report and return it inline. Use when direct download of the HAR URL is not possible.

    Inputs

    report_idstringrequired
    A GTmetrix report identifier (8 characters, e.g. hDjmzKIf).
    forceboolean
    Bypass the size limit and return the HAR regardless of size. WARNING: a large HAR (often several MB) can overflow the model context window — only set this if you understand the cost.default false
  • gtmetrixmcp_get_report_historyFetch historical performance data for a GTmetrix page.Read-only

    GetReportHistory

    Fetch historical performance data for a GTmetrix page. Returns all reports in reverse chronological order for trend analysis.

    Inputs

    limitinteger
    Maximum number of successful reports to return, newest first (default 200, max 500). Capped by the account plan's history limit.
    page_idstring
    A GTmetrix page identifier. Use when you already have the page id from a previous call. Provide either report_id OR page_id — not both.
    report_idstring
    A GTmetrix report identifier (e.g. hDjmzKIf). The page that owns this report is looked up automatically. Provide either report_id OR page_id — not both.
  • gtmetrixmcp_get_testGet the current status of a started GTmetrix test.Read-only

    GetTest

    Get the current status of a started GTmetrix test. Long-polls server-side until the test completes or budget expires.

    Inputs

    test_idstringrequired
    The 8-character test ID returned by gtmetrix_start_test.
    wait_secondsinteger
    Number of seconds to wait for the test to complete (0–30). If omitted, returns immediately with current status.
  • gtmetrixmcp_list_pagesList GTmetrix pages for the authenticated account.Read-only

    ListPages

    List GTmetrix pages for the authenticated account. A page is a URL and test-settings combination. Returns pages with latest scores, Core Web Vitals, and monitoring status.

    Inputs

    adblockboolean
    Pass true to show only pages with AdBlock enabled.
    anonymize_user_agentboolean
    Pass true to show only pages with anonymized user agent.
    browserstring
    Exact browser ID. Use gtmetrix_get_catalog with catalog_id='browsers' to resolve a name to an ID.
    cookiesboolean
    Pass true to show only pages with cookies configured.
    dnsboolean
    Pass true to show only pages with custom DNS overrides configured.
    filterboolean
    Pass true to show only pages with URL allow/block filtering configured.
    httpauthboolean
    Pass true to show only pages with HTTP authentication configured.
    limitinteger
    Maximum number of pages to return (default 200, max 2000).
    locationstring
    Exact location/region ID. Use gtmetrix_get_catalog with catalog_id='locations' to resolve a name to an ID.
    monitoringstring
    Filter by monitoring frequency: 'none' (not monitored; 'no' and 'never' are accepted as aliases), 'hourly', 'daily', 'weekly', or 'monthly'.one of nonenoneverhourlydailyweeklymonthly
    privateboolean
    Pass true to show only private pages. Omit to include all pages regardless of visibility.
    simulate_devicestring
    Exact simulated device ID. Use gtmetrix_get_catalog with catalog_id='simulated-devices' for valid IDs.
    stop_onloadboolean
    Pass true to show only pages that stop test at window.onload.
    tagstring
    Substring match against tag names. Shows only pages that have at least one tag whose name contains this string. Useful for discovery; for exact filtering use `tag_ids` instead.
    tag_idsarray
    Exact tag ids (from `tags[].tag_id`) the page must have ALL of — unlike `tag`, no substring/any-match. Same semantics as the REST API's filter[page_tag] and the Dashboard's tag filter.
    throttlestring
    Exact throttle connection string in 'down_kbps/up_kbps/latency_ms' format (e.g. '20000/5000/0'). Use gtmetrix_get_catalog with catalog_id='throttle-connections' for preset values.
    urlstring
    Substring match against the page URL (case-insensitive). E.g. 'example.com' matches any page whose URL contains that string.
    videoboolean
    Pass true to show only pages with video recording enabled.