This repo contains the source code for a MCP server that interacts with APIs for Google Analytics.
The server supports two deployment modes:
- Local (stdio) β run as a subprocess by Gemini CLI, Claude Desktop, Claude Code, or any MCP client. Uses Application Default Credentials. No extra infrastructure needed.
- Remote (HTTP + OAuth) β deploy to Google Cloud Run and connect from web-based clients such as claude.ai. Users authenticate with their own Google account via OAuth 2.0; no credentials are shared with the server operator. See Remote deployment.
Join the discussion and ask questions in the π€-analytics-mcp channel on Discord.
The server uses the Google Analytics Admin API and Google Analytics Data API to provide several Tools for use with LLMs.
get_account_summaries: Retrieves information about the user's Google Analytics accounts and properties.get_property_details: Returns details about a property.list_google_ads_links: Returns a list of links to Google Ads accounts for a property.
run_report: Runs a Google Analytics report using the Data API.run_funnel_report: Runs a Google Analytics funnel report using the Data API.get_custom_dimensions_and_metrics: Retrieves the custom dimensions and metrics for a specific property.
run_realtime_report: Runs a Google Analytics realtime report using the Data API.
β¨ Watch the Google Analytics MCP Setup Tutorial on YouTube for a step-by-step walkthrough of these instructions.
Setup involves the following steps:
- Configure Python.
- Configure credentials for Google Analytics.
- Configure Gemini.
Follow the instructions to enable the following APIs in your Google Cloud project:
Configure your Application Default Credentials (ADC). Make sure the credentials are for a user with access to your Google Analytics accounts or properties.
Credentials must include the Google Analytics read-only scope:
https://www.googleapis.com/auth/analytics.readonly
Check out Manage OAuth Clients for how to create an OAuth client.
Here are some sample gcloud commands you might find useful:
-
Set up ADC using user credentials and an OAuth desktop or web client after downloading the client JSON to
YOUR_CLIENT_JSON_FILE.gcloud auth application-default login \ --scopes https://www.googleapis.com/auth/analytics.readonly,https://www.googleapis.com/auth/cloud-platform \ --client-id-file=YOUR_CLIENT_JSON_FILE
-
Set up ADC using service account impersonation.
gcloud auth application-default login \ --impersonate-service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=https://www.googleapis.com/auth/analytics.readonly,https://www.googleapis.com/auth/cloud-platform
When the gcloud auth application-default command completes, copy the
PATH_TO_CREDENTIALS_JSON file location printed to the console in the
following message. You'll need this for the next step!
Credentials saved to file: [PATH_TO_CREDENTIALS_JSON]
-
Install Gemini CLI or Gemini Code Assist.
-
Create or edit the file at
~/.gemini/settings.json, adding your server to themcpServerslist.Replace
PATH_TO_CREDENTIALS_JSONwith the path you copied in the previous step.We also recommend that you add a
GOOGLE_CLOUD_PROJECTattribute to theenvobject. ReplaceYOUR_PROJECT_IDin the following example with the project ID of your Google Cloud project.{ "mcpServers": { "analytics-mcp": { "command": "pipx", "args": ["run", "analytics-mcp"], "env": { "GOOGLE_APPLICATION_CREDENTIALS": "PATH_TO_CREDENTIALS_JSON", "GOOGLE_PROJECT_ID": "YOUR_PROJECT_ID" } } } }
-
Add the MCP server with the following command:
Replace
PATH_TO_CREDENTIALS_JSONwith the path you copied in the previous step, and replaceYOUR_PROJECT_IDwith the project ID of your Google Cloud project.claude mcp add analytics-mcp \ --scope user \ -e "GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIALS_JSON" \ -e "GOOGLE_PROJECT_ID=YOUR_PROJECT_ID" \ -- pipx run analytics-mcp
Deploy the server to Cloud Run so web-based MCP clients such as claude.ai can connect to it. Each user authenticates with their own Google account via OAuth 2.0 β no Analytics credentials are configured on the server, and requests without a valid per-user token are rejected.
In addition to the Google Analytics Admin API and Google Analytics Data API, enable:
-
Open APIs & Services β Credentials in the Google Cloud Console.
-
Click Create credentials β OAuth client ID.
-
Choose Web application as the application type.
-
Under Authorized redirect URIs, add a placeholder for now β you will replace it with the real service URL after deploying:
https://example.com/auth/callback -
Click Create and note the Client ID and Client secret.
Never pass the OAuth client secret as a plaintext --set-env-vars value β it
would be visible to anyone who can describe the Cloud Run service.
printf '%s' 'YOUR_OAUTH_CLIENT_SECRET' | gcloud secrets create \
analytics-mcp-oauth-client-secret --data-file=-Run the deploy script, which builds the image with Cloud Build and performs
the two-phase Cloud Run deployment (deploy β discover service URL β redeploy
with ANALYTICS_MCP_BASE_URL set):
PROJECT_ID=YOUR_PROJECT_ID \
REGION=YOUR_REGION \
OAUTH_CLIENT_ID=YOUR_OAUTH_CLIENT_ID \
./deploy/cloud-run.shThe script prints the service URL when it finishes. Then return to your OAuth client in the Google Cloud Console and replace the placeholder redirect URI with:
https://YOUR_SERVICE_URL/auth/callback
The service is deployed with --allow-unauthenticated because
authentication happens at the application layer: FastMCP's Google OAuth
provider rejects any request to /mcp that doesn't carry a valid per-user
token.
-
Open claude.ai and go to Settings β Connectors.
-
Add a custom connector with the URL:
https://YOUR_SERVICE_URL/mcp -
Authorize with your Google account when prompted.
| Variable | Required | Description |
|---|---|---|
ANALYTICS_MCP_OAUTH_CLIENT_ID |
Yes (HTTP mode) | OAuth 2.0 client ID |
ANALYTICS_MCP_OAUTH_CLIENT_SECRET |
Yes (HTTP mode) | OAuth 2.0 client secret. Set from Secret Manager via --set-secrets, never --set-env-vars. |
ANALYTICS_MCP_BASE_URL |
Yes (HTTP mode) | Public URL of the deployed service |
PORT |
Cloud Run | Port to listen on (default: 8080, auto-set by Cloud Run) |
When ANALYTICS_MCP_OAUTH_CLIENT_ID and ANALYTICS_MCP_OAUTH_CLIENT_SECRET
are both set, the server starts in HTTP mode with OAuth and serves /mcp.
Otherwise it runs on stdio exactly as before β local setups are unaffected.
Launch Gemini Code Assist or Gemini CLI and type /mcp. You should see
analytics-mcp listed in the results.
Here are some sample prompts to get you started:
-
Ask what the server can do:
what can the analytics-mcp server do? -
Ask about a Google Analytics property
Give me details about my Google Analytics property with 'xyz' in the name -
Prompt for analysis:
what are the most popular events in my Google Analytics property in the last 180 days? -
Ask about signed-in users:
were most of my users in the last 6 months logged in? -
Ask about property configuration:
what are the custom dimensions and custom metrics in my property?
Contributions welcome! See the Contributing Guide.
