Pirsch Analytics MCP Server
Pirsch MCP Server
Pirsch Analytics API v1용의 특화된 읽기 전용 Model Context Protocol 서버입니다. MCP SDK v2를 사용하며 모든 성공적인 도구 호출에 대해 구조화된 결과와 JSON 텍스트를 모두 반환합니다.
요구 사항
Node.js 22.19.0 이상
읽기 권한이 있는 Pirsch OAuth API 클라이언트. 쓰기 전용 액세스 키를 사용하지 마세요.
Related MCP server: Plausible MCP
구성
{
"mcpServers": {
"pirsch": {
"command": "npx",
"args": ["-y", "@verygoodplugins/mcp-pirsch@latest"],
"env": {
"PIRSCH_CLIENT_ID": "your-read-only-oauth-client-id",
"PIRSCH_CLIENT_SECRET": "your-oauth-client-secret",
"PIRSCH_DEFAULT_DOMAIN_ID": "optional-default-domain-id"
}
}
}
}PIRSCH_DEFAULT_DOMAIN_ID는 선택 사항입니다. 설정되지 않은 경우 모든 쿼리 도구는 domainId를 요구하며, 서버는 첫 번째 접근 가능한 도메인을 선택하지 않습니다. pirsch_list_domains를 사용하여 ID를 안전하게 확인하세요.
선택적 PIRSCH_TIMEZONE은 timezone을 명시적으로 포함하지 않는 요청에 대한 기본 시간대를 제공합니다.
도구
도구 | 용도 |
|
|
| 날짜와 필터를 사용하여 문서화된 v1 지표 하나를 읽습니다. |
| 문서화된 필터 차원에 허용된 값을 나열합니다. |
| 두 기간의 실제 합계와 방문자 시리즈를 비교합니다. |
모든 도구는 읽기 전용입니다. 출력 스키마와 일치하는 structuredContent와 동등한 JSON 텍스트 블록을 반환합니다. 입력 또는 API 오류는 MCP isError: true를 사용하며 자격 증명이나 원시 업스트림 본문을 노출하지 않습니다.
통계 쿼리
pirsch_query_statistics는 metric, 선택적 domainId 및 평면 camel-case 필터를 허용합니다. 대부분의 지표는 ISO 날짜를 요구합니다:
{
"metric": "pages",
"domainId": "your-domain-id",
"from": "2026-08-01",
"to": "2026-08-23",
"limit": 20,
"sort": "visitors",
"direction": "desc"
}서버는 eventMetaKey, entryPath, operatingSystem, utmCampaign과 같은 공개 camel-case 필드를 Pirsch의 문서화된 API-v1 매개변수 이름에 매핑합니다. limit는 1–100으로 제한되고 활성 방문자 start는 0–3600초로 제한됩니다.
지표에는 합계, 방문자, 페이지 및 진입/이탈 페이지, 세션 및 페이지 지속 시간, 목표, 이벤트 및 이벤트 메타데이터, 성장, 활성 방문자, 시간 분석, 획득, 브라우저/기기, 지리, UTM, 태그, 키워드, 퍼널, 세션 및 세션 세부 정보가 포함됩니다. session_details는 visitorId와 sessionId를 모두 요구하며, 이벤트별 지표는 event를 요구합니다.
기간 비교
명명된 period(today, yesterday, week, lastWeek, month 또는 lastMonth) 또는 두 개의 명시적 날짜 쌍을 제공하세요:
{
"domainId": "your-domain-id",
"from": "2026-08-01",
"to": "2026-08-07",
"compareFrom": "2026-07-25",
"compareTo": "2026-07-31",
"scale": "day"
}응답은 /statistics/total을 비교하고 두 /statistics/visitor 시리즈를 유지합니다. 차트를 합산하여 합계를 추정하지 않습니다.
1.0 마이그레이션
버전 1.0은 의도적으로 이전 17개 도구 인터페이스를 대체합니다. 별칭이 안전하지 않은 도메인 선택과 모호한 입력 동작을 유지할 수 있으므로 기본 별칭이 없습니다.
이전 도구 | 대체 |
|
|
|
|
|
|
도메인 검색 |
|
입력 이름은 이제 camel-case 및 평면(domainId, compareFrom, eventMetaKey)이며, domain_id, 중첩 filter 또는 호환성 별칭이 아닙니다.
개발
npm install
npm run typecheck
npm run lint
npm test
npm run build
npx -y @modelcontextprotocol/inspector@latest --cli node dist/index.js --method tools/list --format json릴리스 워크플로는 신뢰할 수 있는 게시로 npm에 게시한 다음 GitHub OIDC를 통해 동일한 태그가 지정된 매니페스트를 MCP 레지스트리에 게시합니다. 로컬 개발 및 CI는 아무것도 게시하지 않습니다.
지원
버그 및 기능 요청은 이 저장소에 이슈를 열어주세요. Pirsch 관련 질문은 Pirsch 문서를 통해 가장 잘 해결됩니다. 패키지 지원은 Very Good Plugins에서 유지 관리합니다.
Very Good Plugins가 🧡로 제작했습니다.
Available Tools
4 toolspirsch_compare_periodsCompare Pirsch periodsARead-only
Compare Pirsch totals and visitor series for a named or explicitly supplied pair of periods.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| city | No | ||
| from | No | ||
| path | No | ||
| sort | No | ||
| tags | No | ||
| event | No | ||
| limit | No | ||
| scale | No | ||
| start | No | ||
| offset | No | ||
| period | No | ||
| region | No | ||
| search | No | ||
| toTime | No | ||
| browser | No | ||
| channel | No | ||
| country | No | ||
| keyword | No | ||
| pattern | No | ||
| utmTerm | No | ||
| domainId | No | ||
| exitPath | No | ||
| fromTime | No | ||
| hostname | No | ||
| language | No | ||
| platform | No | ||
| referrer | No | ||
| timezone | No | ||
| compareTo | No | ||
| direction | No | ||
| entryPath | No | ||
| sessionId | No | ||
| utmMedium | No | ||
| utmSource | No | ||
| visitorId | No | ||
| utmContent | No | ||
| compareFrom | No | ||
| screenClass | No | ||
| utmCampaign | No | ||
| eventMetaKey | No | ||
| includeTitle | No | ||
| referrerName | No | ||
| customMetricKey | No | ||
| operatingSystem | No | ||
| customMetricType | No | ||
| includeAverageTimeOnPage | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | Yes | |
| totals | Yes | |
| current | Yes | |
| domainId | Yes | |
| previous | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful non-obvious context — that the tool produces both aggregate totals and a visitor series, and that periods can be supplied two different ways — but it does not disclose how the comparison is presented (deltas vs side-by-side) or how named and explicit periods interact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 15-word sentence that front-loads the verb and resource and compresses both period-specification modes into one phrase. There is no filler, redundancy, or repetition of schema or annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the output schema and safety annotations cover return values and side-effect profile, the tool is highly complex (47 parameters, 0 required, 0% schema coverage) and the one-sentence description covers only the core concept. An agent still cannot determine which parameters form the primary versus comparison period pair, how 'period' interacts with explicit date ranges, or what most optional parameters mean, so the description is insufficient for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage across 47 parameters, the description must carry semantic weight. It contributes the central concept that two periods are involved and can be expressed by name (mapping to 'period') or explicitly (mapping to from/to plus compareFrom/compareTo). Yet it never names these parameters or clarifies the remaining filter/dimension parameters, leaving the agent to infer their roles from their names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Compare'), a concrete resource ('Pirsch totals and visitor series'), and a scope ('a named or explicitly supplied pair of periods'), going well beyond the title. It also implicitly differentiates from siblings like pirsch_list_domains (listing), pirsch_query_statistics (single-scope querying), and pirsch_list_filter_options (enumerating options), since comparison is a distinct operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied rather than stated: invoke this tool when a two-period comparison is needed, and choose between a 'named' period or an explicit date pair. However, it never explicitly routes away from pirsch_query_statistics for single-period needs or states when not to use this tool, leaving the agent to infer the decision boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pirsch_list_domainsList Pirsch domainsARead-only
List safe summaries of domains available to the configured read-only Pirsch OAuth client.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| domains | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true and destructiveHint=false, so the description's 'safe summaries' and 'read-only OAuth client' reinforce but don't heavily extend that. It adds some context about the nature of the output (safe summaries) and authentication, but doesn't disclose behaviors like pagination, rate limits, or output format beyond what the schema already provides. This is consistent with the bar set by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence that front-loads the primary action and resource. It is concise with no wasted words, and all information is relevant to the tool's core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description doesn't need to detail return structure. It mentions the OAuth client and 'safe summaries,' which provides sufficient context for an agent to know what it will get. Minor lack of detail about what 'safe' means is acceptable since the output schema can clarify.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the baseline is 4. The description doesn't need to add parameter meaning; 'safe summaries' is the only behavioral nuance and is not tied to any parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List') and resource ('safe summaries of domains'), and it distinguishes itself from siblings like pirsch_query_statistics by focusing on domain listing. The phrase 'configured read-only Pirsch OAuth client' adds precision about the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when you need to list domains available to the configured client—but does not explicitly name alternatives or exclusions. However, the context is clear and the sibling tools (statistics, filter options, compare periods) are obviously different in purpose, so it provides adequate guidance without explicit 'when-not-to-use'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pirsch_list_filter_optionsList Pirsch filter optionsCRead-only
List supported values for one documented Pirsch Analytics API v1 filter dimension.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| city | No | ||
| from | No | ||
| path | No | ||
| sort | No | ||
| tags | No | ||
| event | No | ||
| limit | No | ||
| scale | No | ||
| start | No | ||
| offset | No | ||
| option | Yes | ||
| region | No | ||
| search | No | ||
| toTime | No | ||
| browser | No | ||
| channel | No | ||
| country | No | ||
| keyword | No | ||
| pattern | No | ||
| utmTerm | No | ||
| domainId | No | ||
| exitPath | No | ||
| fromTime | No | ||
| hostname | No | ||
| language | No | ||
| platform | No | ||
| referrer | No | ||
| timezone | No | ||
| direction | No | ||
| entryPath | No | ||
| sessionId | No | ||
| utmMedium | No | ||
| utmSource | No | ||
| visitorId | No | ||
| utmContent | No | ||
| screenClass | No | ||
| utmCampaign | No | ||
| eventMetaKey | No | ||
| includeTitle | No | ||
| referrerName | No | ||
| customMetricKey | No | ||
| operatingSystem | No | ||
| customMetricType | No | ||
| includeAverageTimeOnPage | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| option | Yes | |
| domainId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, covering safety and mutation semantics. However, the description adds no behavioral context beyond a bare 'list' operation. It does not describe the return format (e.g., an array of strings), any pagination behavior, or that the results are dependent on the 'option' parameter. The description provides minimal value over annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler or redundancy. It front-loads the core purpose and uses precise terminology. This is appropriately concise for a simple listing operation, despite lacking depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (45 parameters, 5 enums, no output schema shown), the description is severely under-specified. It does not explain how to select among the many optional parameters, nor does it mention that different 'option' values may accept different filters. An agent would struggle to call this tool correctly without additional documentation or schema exploration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% – the description explains none of the 45 parameters, not even the required 'option'. The description does not clarify how to use the additional filter parameters (e.g., country, city, page) or that they are contextual depending on the chosen option. An agent cannot infer parameter purpose from the description, which is a critical gap for a tool with dozens of properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: 'List supported values for one documented Pirsch Analytics API v1 filter dimension.' It clearly identifies the verb (list), the resource (supported values for a filter dimension), and the domain (Pirsch Analytics API v1). This distinguishes it from sibling tools that operate on domains, statistics, or period comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention that it should be used to fetch allowed values before constructing a filter query, nor does it contrast with pirsch_query_statistics or pirsch_compare_periods. The agent is left to infer the use case from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pirsch_query_statisticsQuery Pirsch analyticsBRead-only
Read one documented Pirsch Analytics API v1 metric for an explicitly selected domain and filter.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| city | No | ||
| from | No | ||
| path | No | ||
| sort | No | ||
| tags | No | ||
| event | No | ||
| limit | No | ||
| scale | No | ||
| start | No | ||
| metric | Yes | ||
| offset | No | ||
| region | No | ||
| search | No | ||
| toTime | No | ||
| browser | No | ||
| channel | No | ||
| country | No | ||
| keyword | No | ||
| pattern | No | ||
| utmTerm | No | ||
| domainId | No | ||
| exitPath | No | ||
| fromTime | No | ||
| hostname | No | ||
| language | No | ||
| platform | No | ||
| referrer | No | ||
| timezone | No | ||
| direction | No | ||
| entryPath | No | ||
| sessionId | No | ||
| utmMedium | No | ||
| utmSource | No | ||
| visitorId | No | ||
| utmContent | No | ||
| screenClass | No | ||
| utmCampaign | No | ||
| eventMetaKey | No | ||
| includeTitle | No | ||
| referrerName | No | ||
| customMetricKey | No | ||
| operatingSystem | No | ||
| customMetricType | No | ||
| includeAverageTimeOnPage | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| metric | Yes | |
| domainId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds that the metric must be documented and the domain explicitly selected, which is useful scope context. It does not describe pagination, rate limits, or error behavior, but with annotations covering safety, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff, front-loading the action 'Read'. It is concise, clear, and every word contributes to the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 45 parameters and zero schema descriptions, the description is severely under-specified. It does not explain the relationship to sibling tools, the role of domainId despite being optional, or how to combine filters. The output schema and annotations reduce some burden, but an agent would need external documentation to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 45 parameters, and the description fails to compensate. It does not explain how to specify the metric, how to select the domain via domainId, which parameters act as filters, or any mutual exclusivity. The only hint is 'explicitly selected domain', which is vague and not mapped to the schema (domainId is optional, only metric is required).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Read' and clearly identifies the resource as a Pirsch Analytics API v1 metric, with constraints that it handles one metric for an explicitly selected domain and filter. This distinguishes it from siblings like pirsch_list_domains and pirsch_compare_periods, though it does not name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for single-metric queries by saying 'one documented metric' and 'explicitly selected domain', which hints at prerequisites like selecting a domain and providing filters. However, it does not explicitly state when to use this tool over pirsch_list_domains or pirsch_compare_periods, nor does it mention needing domain IDs from list_domains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
20 tool updates
v0.1.3- Removed
pirsch_active - Removed
pirsch_compare - Added
pirsch_compare_periods - Removed
pirsch_entry_pages - Removed
pirsch_event_pages - Removed
pirsch_events - Removed
pirsch_exit_pages - Removed
pirsch_goals - Removed
pirsch_growth - Changed
pirsch_list_domains3 fields changed- added
Input schema / $schemaAdded value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / properties / searchRemoved value: -{ - "type": "string" -} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "domains": { + "items": { + "additionalProperties": false, + "properties": { + "displayName": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "id": { + "type": "string" + }, + "timezone": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "domains" + ], + "type": "object" +}
- Added
pirsch_list_filter_options - Removed
pirsch_overview - Removed
pirsch_pages - Added
pirsch_query_statistics - Removed
pirsch_referrers - Removed
pirsch_session_details - Removed
pirsch_sessions - Removed
pirsch_total - Removed
pirsch_utm - Removed
pirsch_visitors
17 tool updates
v0.1.2- First observed
pirsch_active - First observed
pirsch_compare - First observed
pirsch_entry_pages - First observed
pirsch_event_pages - First observed
pirsch_events - First observed
pirsch_exit_pages - First observed
pirsch_goals - First observed
pirsch_growth - First observed
pirsch_list_domains - First observed
pirsch_overview - First observed
pirsch_pages - First observed
pirsch_referrers - First observed
pirsch_session_details - First observed
pirsch_sessions - First observed
pirsch_total - First observed
pirsch_utm - First observed
pirsch_visitors
TDQS
Each tool targets a distinct concern: listing domains, querying a metric, enumerating filter options, and comparing periods. There is no overlap or ambiguity between them.
All tools follow a consistent 'pirsch_verb_noun' pattern (list_domains, query_statistics, list_filter_options, compare_periods). The naming style is uniform and predictable.
Four tools is well-scoped for a read-only analytics server. Each tool covers a necessary high-level operation without unnecessary bloat or redundancy.
The set covers the core read-only needs: domain discovery, metric querying, filter exploration, and period comparison. A minor gap is the lack of a more comprehensive report endpoint, but the available tools can be combined to cover most scenarios.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Privacy-first web analytics. Query pageviews, referrers, trends, and AI insights.
Analytics your AI agent can actually use. Track, experiment, and optimize via MCP.
Query your Betterlytics web analytics from AI agents: traffic, funnels, journeys, errors, uptime.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables querying Plausible Analytics data for website statistics, traffic, engagement, and conversions through natural language, with support for filters, dimensions, and time-series.6-
- AlicenseBqualityDmaintenanceEnables natural language interaction with Plausible Analytics data to query traffic, visitors, engagement, and more using conversational questions.41MIT
- AlicenseAqualityCmaintenanceMCP server that provides read access to Plausible Analytics data with natural-language date resolution, enabling users to query analytics like 'yesterday' or 'last week' without needing to know exact date formats.8MIT
- AlicenseAqualityCmaintenanceExposes Rybbit Analytics as MCP tools for querying site traffic, page views, visitor sessions, and live visitor counts through natural language.9MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/verygoodplugins/mcp-pirsch'
If you have feedback or need assistance with the MCP directory API, please join our Discord server