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.
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
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things2Claude Code: ask: see these tools
- Only reads19Claude Code: allow: see these tools
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.
- Warnrun_funnel
The server marks "run_funnel" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_funnel" says "run": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false}; The name "run_funnel" says "run": a word for a change.
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.
{
"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.