Mcp Pirsch — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Pirsch (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server for Pirsch Analytics, enabling natural language analytics queries, period comparisons, and trend analysis for your website traffic.
#### Option 1: Using NPX (No Installation Required)
The simplest way - no need to install anything globally:
# For Claude Desktop
npx @verygoodplugins/mcp-pirsch
# For Claude Code
claude mcp add pirsch "npx @verygoodplugins/mcp-pirsch"#### Option 2: Global Installation
Install once, use anywhere:
# Install globally
npm install -g @verygoodplugins/mcp-pirsch
# For Claude Code
claude mcp add pirsch "mcp-pirsch"#### Option 3: Local Development
For contributing or customization:
# Clone and install
git clone https://github.com/verygoodplugins/mcp-pirsch.git
cd mcp-pirsch
npm install
npm run build<details> <summary><b>Claude Desktop Configuration</b></summary>
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"pirsch": {
"command": "npx",
"args": ["@verygoodplugins/mcp-pirsch"],
"env": {
"PIRSCH_CLIENT_ID": "your_client_id",
"PIRSCH_CLIENT_SECRET": "your_client_secret",
"PIRSCH_DEFAULT_DOMAIN_ID": "your_domain_id",
"PIRSCH_TIMEZONE": "America/New_York"
}
}
}
}Or if installed globally:
{
"mcpServers": {
"pirsch": {
"command": "mcp-pirsch",
"env": {
"PIRSCH_CLIENT_ID": "your_client_id",
"PIRSCH_CLIENT_SECRET": "your_client_secret"
}
}
}
}</details>
<details> <summary><b>Claude Code Configuration</b></summary>
claude mcp add pirsch "npx @verygoodplugins/mcp-pirsch" \
--env PIRSCH_CLIENT_ID=your_client_id \
--env PIRSCH_CLIENT_SECRET=your_client_secret \
--env PIRSCH_DEFAULT_DOMAIN_ID=your_domain_id</details>
<details> <summary><b>Cursor IDE Configuration</b></summary>
Add to .mcp.json in your project:
{
"mcpServers": {
"pirsch": {
"command": "node",
"args": ["./node_modules/@verygoodplugins/mcp-pirsch/dist/index.js"],
"env": {
"PIRSCH_CLIENT_ID": "your_client_id",
"PIRSCH_CLIENT_SECRET": "your_client_secret"
}
}
}
}</details>
Create a .env file for local development:
# Required
PIRSCH_CLIENT_ID=your_client_id
PIRSCH_CLIENT_SECRET=your_client_secret
# Optional
PIRSCH_DEFAULT_DOMAIN_ID=your_domain_id # Auto-detected if not set
PIRSCH_TIMEZONE=America/New_York # Default: UTC
PIRSCH_TOKEN_SKEW_MS=60000 # Token refresh buffer (default: 60 seconds)#### pirsch_list_domains List all accessible domains to discover domain IDs.
Parameters:
search (optional): Filter domains by nameExample:
List all my Pirsch domains#### pirsch_overview Get cached overview statistics for a domain.
Parameters:
domain_id (optional): Target domain IDReturns: Visitors, page views, and member counts
Note: This is the Pirsch cached overview endpoint. Filters do not apply, and it should not be used as a substitute for pirsch_total over a custom date range.
#### pirsch_total Get total metrics for a specific period.
Parameters:
domain_id (optional): Target domain IDfilter (optional): Filter object with date range, dimensions, etc.Most analytics tools accept filter fields either inside filter or as top-level arguments. Both forms are supported for MCP client compatibility.
Returns: Total visitors, views, sessions, bounces, bounce rate, conversion rate, and custom metric aggregates
#### pirsch_visitors Get visitor time series data.
Parameters:
domain_id (optional): Target domain IDfilter (optional): Including scale (day/week/month/year)Example:
Show me daily visitor trends for the last month#### pirsch_pages Get top pages with performance metrics.
Parameters:
domain_id (optional): Target domain IDfilter (optional): Including:sort: Sort fielddirection: asc/descsearch: Search in page pathsinclude_avg_time_on_page: Include time metricsinclude_title: Include page titlesTip: Exact path: "/news/" still matches only that URL. For section queries on page-style tools, path-shaped values such as search: "/news/", path: "~/news/", or pattern: "/news/*" are narrowed again inside the MCP so /documentation/news/... does not leak into /news/... results. path_prefix is also available when you want an explicit root-prefix filter. Top-level search, path, and path_prefix arguments are also accepted.
#### pirsch_entry_pages Get entry page analytics.
#### pirsch_exit_pages Get exit page analytics.
#### pirsch_referrers Analyze traffic sources and referrers.
Parameters:
domain_id (optional): Target domain IDfilter (optional): Standard filter parameters#### pirsch_goals Get conversion goals together with their observed stats.
Parameters:
domain_id (optional): Target domain IDfilter (optional): Standard filter parameters#### pirsch_events Get aggregated event statistics including counts, visitors, conversion rate, and metadata keys.
Parameters:
domain_id (optional): Target domain IDfilter (optional): Standard filter parameters#### pirsch_event_pages Get pages on which a specific event fired.
Parameters:
domain_id (optional): Target domain IDfilter (required): Standard filter parameters, including eventThe event can also be passed as a top-level event argument. If your client uses goal payload field names, event_name is accepted as an alias and normalized to event. The same path-prefix narrowing described for pirsch_pages also applies here.
#### pirsch_utm Analyze UTM campaign parameters.
Parameters:
type (required): source | medium | campaign | content | termdomain_id (optional): Target domain IDfilter (optional): Standard filter parametersExample:
Show me UTM source breakdown for this week#### pirsch_growth Calculate growth rates across metrics.
Parameters:
domain_id (optional): Target domain IDfilter (optional): Date range for growth calculation#### pirsch_active Get currently active visitors and pages.
Parameters:
domain_id (optional): Target domain IDstart (optional): Seconds to look back (default: 600)Example:
Show me active visitors in the last 5 minutes#### pirsch_sessions Get session list data including entry/exit pages, duration, geography, device, and traffic source context.
Parameters:
domain_id (optional): Target domain IDfilter (optional): Standard filter parameters#### pirsch_session_details Get the chronological page-view and event timeline for a single session.
Parameters:
domain_id (optional): Target domain IDfilter (required): Must include both visitor_id and session_id#### pirsch_compare Compare metrics between two time periods using true period totals from Pirsch totals, plus the matching visitor series for charts.
Parameters:
domain_id (optional): Target domain IDperiod (optional): today | yesterday | week | lastWeek | month | lastMonthcompare (optional): previous | year | customfrom, to (optional): Custom date range (YYYY-MM-DD)compare_from, compare_to (optional): Custom comparison rangescale (optional): day | week | month | yearExample:
Compare this week's traffic to last weekMost tools accept a filter object that maps to Pirsch query parameters:
{
// Date/Time
"from": "2024-01-01", // Start date (YYYY-MM-DD)
"to": "2024-01-31", // End date (YYYY-MM-DD)
"from_time": "09:00", // Start time (HH:MM)
"to_time": "17:00", // End time (HH:MM)
"tz": "America/New_York", // Timezone
// Dimensions
"path": "~/news/", // Exact or operator-based path filter (~ contains, ! not, ^ does-not-contain)
"entry_path": "/landing", // Entry page
"exit_path": "/checkout", // Exit page
"pattern": "*.pdf", // URL pattern
// Traffic Sources
"referrer": "google.com", // Referrer domain
"referrer_name": "Google", // Referrer name
"channel": "organic", // Traffic channel
// UTM Parameters
"utm_source": "newsletter",
"utm_medium": "email",
"utm_campaign": "summer-sale",
"utm_content": "header-cta",
"utm_term": "analytics",
// Device/Browser
"os": "Windows",
"browser": "Chrome",
"platform": "desktop", // desktop | mobile | unknown
"screen_class": "xxl",
// Location
"country": "US",
"city": "New York",
"language": "en",
// Pagination/Sorting
"offset": 0,
"limit": 100,
"sort": "visitors",
"direction": "desc", // asc | desc
"search": "/news/", // Path-shaped searches are narrowed to root-prefix matches on page-style tools
"path_prefix": "/news/", // Optional explicit MCP-local prefix matcher for page-style tools
"keyword": "wordpress crm", // Google Search Console keyword filter
// Advanced
"event": "signup",
"event_meta_key": "plan",
"tag": "premium",
"visitor_id": "12345...", // Required together with session_id for pirsch_session_details
"session_id": "67890",
"custom_metric_key": "revenue",
"custom_metric_type": "float"
}Show me the visitor statistics for last weekWhat are my top 10 /news/ posts by traffic this month?Analyze UTM campaign performance for the summer saleShow me referrer breakdown excluding direct trafficCompare this month's metrics to the same period last yearHow many people are on my site right now?Show me conversion goals and top event-driven pages for the last 90 daysList recent sessions that entered on /news/ and inspect one session in detailnpm install
npm run buildnpm run dev # Watch mode with auto-reloadnpm test#### Invalid credentials error
#### Token refresh failures
PIRSCH_TOKEN_SKEW_MS is not set too low#### Domain not found
pirsch_list_domains to see available domainsPIRSCH_DEFAULT_DOMAIN_ID is correct#### No data returned
pirsch_total for custom date range totals; pirsch_overview is cached and not filterablesearch, ~/path/, and /path/* filters are narrowed to root-prefix matches inside the MCPpath_prefix when you want explicit prefix behavior without relying on Pirsch operators#### Slow responses
PIRSCH_TOKEN_SKEW_MS for your use caseContributions are welcome! Please:
MIT - See LICENSE file for details.
Built by Jack Arturo 🧡
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.