Google Analytics MCP Server
Provides tools to query Google Analytics 4 data, including real-time data, custom reports with dimensions and metrics, quick insights, and metadata discovery.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Analytics MCP Serverget my top pages from last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Analytics MCP Server
A Model Context Protocol (MCP) server that provides seamless access to Google Analytics 4 data through standard MCP interfaces. This tool allows LLM applications to easily query and analyze Google Analytics data without directly dealing with the complexities of the Google Analytics Data API.
Features
Real-time Data Access: Get real-time analytics data for current active users and activity
Custom Reports: Create comprehensive reports with custom dimensions and metrics
Quick Insights: Predefined analytics insights for common use cases
Metadata Discovery: Get available dimensions and metrics for your Google Analytics property
Smart Error Handling: Detailed error messages with actionable solutions for permission issues
Standard MCP Interface: Works with any MCP-compatible client
Related MCP server: Google Analytics MCP Server
Installation
npm install @toolsdk.ai/google-analytics-mcpPrerequisites
Node.js >= 18.0.0
Google Analytics 4 property
Google Cloud service account with appropriate permissions
Setup
1. Google Cloud Service Account Setup
Create a Google Cloud service account with the "Viewer" role for your Google Analytics property
Download the service account key as JSON
Add the service account to your Google Analytics property with Viewer access:
Go to Google Analytics (analytics.google.com)
Navigate to Admin > Property Access Management
Add your service account email with Viewer access
2. Environment Configuration
Create a .env file in your project root with the following content:
GOOGLE_CREDENTIALS='{"type":"service_account","project_id":"your-project-id","private_key_id":"your-private-key-id","private_key":"-----BEGIN PRIVATE KEY-----\nYOUR_PRIVATE_KEY\n-----END PRIVATE KEY-----\n","client_email":"your-service-account@your-project.iam.gserviceaccount.com","client_id":"your-client-id","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/your-service-account%40your-project.iam.gserviceaccount.com"}'Note: Make sure to properly format the private key with \n for newlines.
Usage
Use ToolSDK.ai
import { ToolSDKApiClient } from 'toolsdk/api';
const toolSDK = new ToolSDKApiClient();
// Get Tools
const GoogleAnalyticsMCP = await toolSDK.package('@toolsdk.ai/google-analytics-mcp', {
GOOGLE_CREDENTIALS: process.env.GOOGLE_CREDENTIALS,
});Use Claude
{
"mcpServers": {
"google-analytics-mcp": {
"command": "npx",
"args": [
"-y",
"@toolsdk.ai/google-analytics-mcp"
],
"env": {
"GOOGLE_CREDENTIALS": "Your Google Credentials JSON String"
}
}
}
}Available Tools
analytics_report
Get comprehensive Google Analytics data with custom dimensions and metrics. Can create any type of report.
Parameters:
propertyId(string, required): Google Analytics property IDstartDate(string, required): Start date (YYYY-MM-DD)endDate(string, required): End date (YYYY-MM-DD)dimensions(array, optional): Dimensions to querymetrics(array, required): Metrics to querydimensionFilter(object, optional): Filter by dimension valuesmetricFilter(object, optional): Filter by metric valuesorderBy(object, optional): Sort results by dimension or metriclimit(number, optional): Limit number of results (default: 100)
realtime_data
Get real-time analytics data for current active users and activity.
Parameters:
propertyId(string, required): Google Analytics property IDdimensions(array, optional): Dimensions for real-time datametrics(array, optional): Real-time metrics (default: ['activeUsers'])limit(number, optional): Limit number of results (default: 50)
quick_insights
Get predefined analytics insights for common use cases.
Parameters:
propertyId(string, required): Google Analytics property IDstartDate(string, required): Start date (YYYY-MM-DD)endDate(string, required): End date (YYYY-MM-DD)reportType(string, required): Type of quick insight report (overview, top_pages, traffic_sources, etc.)limit(number, optional): Limit number of results (default: 20)
get_metadata
Get available dimensions and metrics for Google Analytics property.
Parameters:
propertyId(string, required): Google Analytics property IDtype(string, optional): Type of metadata to retrieve (dimensions, metrics, both)
search_metadata
Search for specific dimensions or metrics by name or category.
Parameters:
propertyId(string, required): Google Analytics property IDquery(string, required): Search term to find dimensions/metricstype(string, optional): Type of metadata to search (dimensions, metrics, both)category(string, optional): Filter by category
Error Handling
The server provides detailed error messages with actionable solutions:
Permission Errors: Clear instructions on how to grant access to your service account
Configuration Errors: Guidance on setting up environment variables correctly
API Errors: Detailed information about what went wrong with the Google Analytics API
License
MIT
Available Tools
5 toolsanalytics_reportAnalytics ReportC
Get comprehensive Google Analytics data with custom dimensions and metrics. Can create any type of report.
| Name | Required | Description | Default |
|---|---|---|---|
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| endDate | Yes | End date (YYYY-MM-DD) | |
| dimensions | No | Dimensions to query (e.g., country, pagePath, sessionSource) | |
| metrics | Yes | Metrics to query (e.g., activeUsers, sessions, screenPageViews) | |
| dimensionFilter | No | Filter by dimension values | |
| metricFilter | No | Filter by metric values | |
| orderBy | No | Sort results by dimension or metric | |
| limit | No | Limit number of results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavior. It does not mention read-only nature, rate limits, authentication needs, or data freshness. Only states it 'gets data', but lacks behavioral context.
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?
Two sentences, no fluff. However, the second sentence adds little value and could be merged or improved. Overall concise but not maximally informative.
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?
With 9 parameters, 4 required, nested objects, and no output schema, the description is insufficient. It lacks guidance on constructing reports, response format, and limitations.
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 100%, so baseline is 3. The description adds 'custom dimensions and metrics' but does not enhance understanding beyond the schema's parameter descriptions.
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 it fetches Google Analytics data with custom dimensions and metrics, distinguishing it from sibling tools like realtime_data and quick_insights. However, the claim 'any type of report' is vague and lacks specificity.
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?
No guidance on when to use this tool versus alternatives. The description implies it is for comprehensive custom reports but does not mention exclusions or when to choose sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metadataGet Analytics MetadataA
Get available dimensions and metrics for Google Analytics property
| Name | Required | Description | Default |
|---|---|---|---|
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. | |
| type | No | Type of metadata to retrieve | both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must disclose behavioral traits. It fails to mention that the tool is read-only or any permissions needed, leaving the agent without assurance of side effects.
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 concise sentence with no wasted words, front-loaded with the key action and resource.
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 simple retrieval tool with two parameters, the description is adequate but not complete. It does not indicate the return format or mention that no output schema exists, which could help the agent plan subsequent steps.
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 100%, so the schema already explains both parameters. The description adds no additional meaning beyond what the schema provides, meeting the baseline.
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 'Get available dimensions and metrics for Google Analytics property' clearly states the verb ('Get') and the resource ('available dimensions and metrics'), which is specific and distinguishes it from sibling tools like 'realtime_data' and 'analytics_report'.
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 does not provide explicit guidance on when to use this tool versus alternatives, such as 'search_metadata'. The purpose is implied but no 'when not to use' or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quick_insightsQuick InsightsC
Get predefined analytics insights for common use cases
| Name | Required | Description | Default |
|---|---|---|---|
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| endDate | Yes | End date (YYYY-MM-DD) | |
| reportType | Yes | Type of quick insight report | |
| limit | No | Limit number of results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It indicates read-only analytics, but lacks details on data freshness, caching, permissions, or side effects. The description is insufficient for a mutation-free tool.
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?
Single sentence is concise and front-loaded. However, it could include more actionable information without becoming verbose.
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?
With 5 parameters and no output schema, the description should detail return values or pagination. It does not explain what the insights contain, how 'limit' works, or date formats, leaving the agent underinformed.
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 covers 100% of parameters with descriptions, so the tool's description adds no extra meaning. However, it does not harm. Baseline 3 is appropriate as description doesn't compensate but is not needed.
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?
Description states verb 'Get' and resource 'predefined analytics insights', implying a read operation for common use cases. It distinguishes from siblings like 'realtime_data' and 'analytics_report' by focusing on predefined reports, but could be more specific about the types of insights.
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?
No guidance on when to use this tool versus siblings or alternatives. Does not mention prerequisites, limitations, or comparison to 'analytics_report' for custom reports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
realtime_dataReal-time DataC
Get real-time analytics data for current active users and activity
| Name | Required | Description | Default |
|---|---|---|---|
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. | |
| dimensions | No | Dimensions for real-time data (e.g., country, city, pagePath) | |
| metrics | No | Real-time metrics (default: activeUsers) | |
| limit | No | Limit number of results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavioral traits. It only states the tool retrieves data, omitting whether it is read-only, any required authentication, rate limits, or limitations (e.g., data freshness). This is insufficient for safe invocation.
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, clear sentence with no wasted words. It is front-loaded and efficient, though it could be slightly expanded to cover key context without losing conciseness.
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 no output schema, the description should explain what data is returned (structure, fields, pagination). It only vaguely mentions 'real-time analytics data for current active users and activity', leaving significant gaps for an agent to understand the output.
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 100% schema description coverage, the schema already documents all parameters. The description adds no further meaning beyond the schema, so the baseline score of 3 applies. No enrichment is provided.
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 the tool retrieves real-time analytics data for current active users and activity, using the verb 'Get' and specifying the resource. However, it could be more precise about the data source (Google Analytics) and slightly differentiates from siblings like 'analytics_report' which likely covers historical data.
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?
No guidance is provided on when to use this tool versus alternatives like 'analytics_report' or 'quick_insights'. The description does not mention context, prerequisites, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_metadataSearch Analytics MetadataC
Search for specific dimensions or metrics by name or category
| Name | Required | Description | Default |
|---|---|---|---|
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. | |
| query | Yes | Search term to find dimensions/metrics | |
| type | No | Type of metadata to search | both |
| category | No | Filter by category (e.g., "USER", "SESSION", "PAGE", "EVENT") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose behavioral traits such as read-only nature, authorization needs, or side effects. The search behavior is implied but not explicitly stated.
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 extremely concise—one sentence that is front-loaded. It could benefit from slightly more detail, but it is not verbose.
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?
With no output schema and 4 parameters, the description is too brief. It does not explain return values, pagination, or any behavioral specifics, leaving gaps for the agent.
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 100%, so baseline is 3. The description does not add meaning beyond the schema; it simply restates the search purpose. No additional parameter context provided.
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 it searches for dimensions or metrics by name or category. It uses a specific verb and resource, but doesn't distinguish from the sibling 'get_metadata' tool.
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?
No guidance on when to use this tool versus alternatives like 'get_metadata'. The description only states the purpose, not the context or exclusions.
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.
5 tool updates
v1.0.5- First observed
analytics_report - First observed
get_metadata - First observed
quick_insights - First observed
realtime_data - First observed
search_metadata
TDQS
Scored across 5 tools
Each tool targets a distinct aspect of Google Analytics: general-report, metadata, predefined insights, real-time data, and metadata search. There is no overlap, and even the general reporting tool is clearly separated from the predefined insights.
Tool names mix imperative verbs ('get_', 'search_') with descriptive noun phrases ('analytics_report', 'quick_insights', 'realtime_data'). This inconsistency makes the set less predictable, though all names are still readable.
With 5 tools, the server is well-scoped for providing core analytics data access: metadata discovery, predefined insights, real-time tracking, and a flexible custom report generator. The number feels neither too few nor excessive.
The tool surface covers the main data retrieval use cases (custom reports, real-time, insights, metadata). A minor gap is the lack of a tool to list or select Google Analytics properties, which may require prior knowledge of property IDs.
Maintenance
Related MCP Connectors
The BigQuery remote MCP server is a fully managed service that uses the Model Context Protocol to connect AI applications and LLMs to BigQuery data sources. It provides secure, standardized tools for AI agents to list datasets and tables, retrieve schemas, generate and execute SQL queries through natural language, and analyze data—enabling direct access to enterprise analytics data without requiring manual SQL coding.
Connect Google Analytics to ChatGPT. Query GA4 data in plain English and get instant insights.
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Let AI agents query data and act across all your business apps via MCP.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables LLMs to interact with Google Analytics 4 data through the Google Analytics Data API, supporting standard reports, real-time data, and metadata retrieval.19MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying Google Analytics 4 data using natural language through MCP clients like Claude and Cursor, supporting 200+ dimensions and metrics for traffic, user behavior, and e-commerce analysis.MIT
- AlicenseAqualityDmaintenanceEnables querying Google Analytics 4 properties using natural language through MCP clients. Supports customizable reports with any dimensions and metrics, listing properties, and real-time data.4MIT
- AlicenseAqualityDmaintenanceEnables LLM applications to query and analyze Google Analytics 4 data through standard MCP interfaces, supporting service account and OAuth2 authentication.514 npmMIT