Skip to content

PageLens Analytics

by pagelens.io · remote · no sign-in to list tools · v1.0.0 · published by io.pagelens

Cookieless web analytics and AI Visibility: traffic, funnels, errors, and which AI bots read you.

Deletes · 1Final · 1Changes · 2

23 tools: 1 can delete or cancel things, 1 do something that can't be undone, 2 change things and 19 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http pagelens https://app.pagelens.io/mcp --header 'Authorization: <your-authorization>'

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "run_funnel" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_funnel" says "run": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

23 tools

Deletes or cancels 1Claude Code: deny
  • delete_user_dataGDPR erasure: permanently delete all events, session replays and the profile of one user on a site.No findings

    Why it is in this group

    • The name "delete_user_data" says "delete": a word for removing or ending something.
    • The description says "permanently delete".
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    GDPR erasure: permanently delete all events, session replays and the profile of one user on a site. Needs a write key and admin access.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
Can't be undone 1Claude Code: ask
  • run_funnelConversion funnel: how many sessions completed each step.1 finding

    Why it is in this group

    • The name "run_funnel" says "run": a word for a change.
    • The input addresses people (input.to): what it sends cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "run_funnel" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_funnel" says "run": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Conversion funnel: how many sessions completed each step. Steps are pages (path, * wildcard allowed), custom event names, or a page scrolled at least `threshold` percent (type scroll). mode: ordered (default; other pages may come in between), strict (each step right after the previous one) or flexible (middle steps may be skipped). compare_previous adds the same funnel over the previous period.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
Changes things 2Claude Code: ask
  • add_annotationMark a date on the charts (a release, a campaign, an outage).No findings

    Why it is in this group

    • The name "add_annotation" says "add": a word for a change.
    Description, as the server wrote it
    Mark a date on the charts (a release, a campaign, an outage). Needs a write key and member access or higher.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • create_goalCreate a goal that counts sessions visiting a page, firing a custom event, or scrolling a page at least `threshold` percent (type scroll).No findings

    Why it is in this group

    • The name "create_goal" says "create": a word for a change.
    Description, as the server wrote it
    Create a goal that counts sessions visiting a page, firing a custom event, or scrolling a page at least `threshold` percent (type scroll). Needs a write key and member access or higher.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
Only reads 19Claude Code: allow
  • get_ai_visibilityHow the site shows up in AI assistants, per AI company (OpenAI/ChatGPT, Anthropic/Claude, Perplexity, Google/Gemini…) and per page: crawler reads, live fetches while answering a pe…No findings

    Why it is in this group

    • The name "get_ai_visibility" says "get": a word for reading.
    Description, as the server wrote it
    How the site shows up in AI assistants, per AI company (OpenAI/ChatGPT, Anthropic/Claude, Perplexity, Google/Gemini…) and per page: crawler reads, live fetches while answering a person, human visits sent back, purchases and revenue, robots.txt access, and plain-language findings.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_bots_and_aiBot and AI traffic: AI crawlers (GPTBot, ClaudeBot…), AI assistants fetching pages, search engines, and human visits referred by AI assistants (ChatGPT, Perplexity, Claude…).No findings

    Why it is in this group

    • The name "get_bots_and_ai" says "get": a word for reading.
    Description, as the server wrote it
    Bot and AI traffic: AI crawlers (GPTBot, ClaudeBot…), AI assistants fetching pages, search engines, and human visits referred by AI assistants (ChatGPT, Perplexity, Claude…).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_breakdownTop values of one dimension (pages, entry/exit pages, referrers, channels, UTM tags, countries, cities, browsers, OS, devices, languages, custom events, outbound links) with visito…No findings

    Why it is in this group

    • The name "get_breakdown" says "get": a word for reading.
    Description, as the server wrote it
    Top values of one dimension (pages, entry/exit pages, referrers, channels, UTM tags, countries, cities, browsers, OS, devices, languages, custom events, outbound links) with visitors and sessions.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_errorsJavaScript errors grouped by message, with occurrences, affected sessions and pages.No findings

    Why it is in this group

    • The name "get_errors" says "get": a word for reading.
    Description, as the server wrote it
    JavaScript errors grouped by message, with occurrences, affected sessions and pages.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_eventsCustom events (sent with pagelens.track) and outbound clicks with counts and their properties.No findings

    Why it is in this group

    • The name "get_events" says "get": a word for reading.
    Description, as the server wrote it
    Custom events (sent with pagelens.track) and outbound clicks with counts and their properties.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_journeysMost common page-to-page paths visitors take.No findings

    Why it is in this group

    • The name "get_journeys" says "get": a word for reading.
    Description, as the server wrote it
    Most common page-to-page paths visitors take.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_overviewHeadline metrics (visitors, sessions, pageviews, pages per session, bounce rate, average session duration) for a period, compared with the previous period of the same length, plus …No findings

    Why it is in this group

    • The name "get_overview" says "get": a word for reading.
    Description, as the server wrote it
    Headline metrics (visitors, sessions, pageviews, pages per session, bounce rate, average session duration) for a period, compared with the previous period of the same length, plus a time series.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_pagesPer-page metrics: visitors, pageviews, entries, bounce rate and time on page.No findings

    Why it is in this group

    • The name "get_pages" says "get": a word for reading.
    Description, as the server wrote it
    Per-page metrics: visitors, pageviews, entries, bounce rate and time on page.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_realtimeVisitors online right now (last 5 minutes) and what they are viewing.No findings

    Why it is in this group

    • The name "get_realtime" says "get": a word for reading.
    Description, as the server wrote it
    Visitors online right now (last 5 minutes) and what they are viewing.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_retentionCohort retention of identified users (pagelens.identify): share of each daily or weekly cohort that came back in later periods.No findings

    Why it is in this group

    • The name "get_retention" says "get": a word for reading.
    Description, as the server wrote it
    Cohort retention of identified users (pagelens.identify): share of each daily or weekly cohort that came back in later periods.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_search_consoleGoogle Search Console data for the site (when connected): clicks, impressions, CTR and average position in Google Search, by query, page, country or device, plus a daily series.No findings

    Why it is in this group

    • The name "get_search_console" says "get": a word for reading.
    Description, as the server wrote it
    Google Search Console data for the site (when connected): clicks, impressions, CTR and average position in Google Search, by query, page, country or device, plus a daily series. Data lags about 2 days.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_sessionEvery pageview and event in one session, in order.No findings

    Why it is in this group

    • The name "get_session" says "get": a word for reading.
    Description, as the server wrote it
    Every pageview and event in one session, in order.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_userProfile of one identified user (traits, first/last seen, totals) and their sessions.No findings

    Why it is in this group

    • The name "get_user" says "get": a word for reading.
    Description, as the server wrote it
    Profile of one identified user (traits, first/last seen, totals) and their sessions.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • get_web_vitalsCore Web Vitals from real visitors (LCP, INP, CLS, FCP, TTFB) at p50/p75/p90, overall and per page.No findings

    Why it is in this group

    • The name "get_web_vitals" says "get": a word for reading.
    Description, as the server wrote it
    Core Web Vitals from real visitors (LCP, INP, CLS, FCP, TTFB) at p50/p75/p90, overall and per page.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_goalsGoals with conversions and conversion rate for the period, compared with the previous period.No findings

    Why it is in this group

    • The name "list_goals" says "list": a word for reading.
    Description, as the server wrote it
    Goals with conversions and conversion rate for the period, compared with the previous period.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_segmentsSaved segments (named filter sets such as "Paid traffic" or "Mobile in Germany") that can be applied to any report with segment_id.No findings

    Why it is in this group

    • The name "list_segments" says "list": a word for reading.
    Description, as the server wrote it
    Saved segments (named filter sets such as "Paid traffic" or "Mobile in Germany") that can be applied to any report with segment_id.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_sessionsRecent sessions with entry/exit page, pages viewed, duration, source, location and device.No findings

    Why it is in this group

    • The name "list_sessions" says "list": a word for reading.
    Description, as the server wrote it
    Recent sessions with entry/exit page, pages viewed, duration, source, location and device.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_sitesList the websites this key can access, with visitors in the last 24 hours.No findings

    Why it is in this group

    • The name "list_sites" says "list": a word for reading.
    Description, as the server wrote it
    List the websites this key can access, with visitors in the last 24 hours.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false
  • list_usersUsers active in the period: identified users (with traits) and anonymous visitors, with sessions, pageviews and first source.No findings

    Why it is in this group

    • The name "list_users" says "list": a word for reading.
    Description, as the server wrote it
    Users active in the period: identified users (with traits) and anonymous visitors, with sessions, pageviews and first source.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http pagelens https://app.pagelens.io/mcp --header 'Authorization: <your-authorization>'

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__pagelens__list_sites",
      "mcp__pagelens__list_segments",
      "mcp__pagelens__get_overview",
      "mcp__pagelens__get_breakdown",
      "mcp__pagelens__get_pages",
      "mcp__pagelens__get_realtime",
      "mcp__pagelens__list_sessions",
      "mcp__pagelens__get_session",
      "mcp__pagelens__get_events",
      "mcp__pagelens__get_errors",
      "mcp__pagelens__get_web_vitals",
      "mcp__pagelens__get_journeys",
      "mcp__pagelens__list_goals",
      "mcp__pagelens__get_retention",
      "mcp__pagelens__list_users",
      "mcp__pagelens__get_user",
      "mcp__pagelens__get_search_console",
      "mcp__pagelens__get_bots_and_ai",
      "mcp__pagelens__get_ai_visibility"
    ],
    "ask": [
      "mcp__pagelens__run_funnel",
      "mcp__pagelens__create_goal",
      "mcp__pagelens__add_annotation"
    ],
    "deny": [
      "mcp__pagelens__delete_user_data"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as pagelens. Review it before you use it.