Google Analytics MCP Server
Provides tools for querying Google Analytics 4 data, including real-time data, custom reports, quick insights, and metadata discovery.
Click on "Install 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 ServerShow me real-time active users"
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
π Dual Authentication: Support both Service Account and OAuth2 User Authorization
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
π Auto Token Refresh: Automatically refreshes expired OAuth2 access tokens
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
Either:
Service Account credentials (default), OR
OAuth2 tokens from a user authorization flow
π Authentication Modes
This MCP server supports two authentication modes, controlled by the GOOGLE_AUTH_MODE environment variable:
Mode | Value | Description |
Service Account |
| Use a GCP service account JSON key |
OAuth2 |
| Use user-authorized OAuth2 tokens |
Mode 1: Service Account (Default)
Use this mode for server-to-server authentication without user interaction.
Setup Steps
Create a Service Account in Google Cloud Console
Download the JSON key file
Grant access to your GA4 property:
Go to Google Analytics β Admin β Property Access Management
Add the service account email (e.g.,
xxx@project.iam.gserviceaccount.com) with Viewer access
Environment Variables
# Optional: defaults to 'service_account'
GOOGLE_AUTH_MODE=service_account
# Option 1: Direct JSON string
GOOGLE_CREDENTIALS='{"type":"service_account","project_id":"...","private_key":"...","client_email":"..."}'
# Option 2: Path to JSON file
GOOGLE_CREDENTIALS_PATH=/path/to/service-account.jsonClaude Desktop Configuration
{
"mcpServers": {
"google-analytics-mcp": {
"command": "npx",
"args": ["-y", "@toolsdk.ai/google-analytics-mcp"],
"env": {
"GOOGLE_AUTH_MODE": "service_account",
"GOOGLE_CREDENTIALS_PATH": "/path/to/service-account.json"
}
}
}
}Mode 2: OAuth2 User Authorization
Use this mode to access GA data on behalf of a user with their own permissions.
Advantages
β Access the user's own GA properties without service account setup
β No need to add service accounts to GA property permissions
β Works with the user's existing Google account permissions
β οΈ Important: This MCP server does NOT include the OAuth2 authorization flow itself. You need to implement the OAuth2 consent flow separately to obtain the tokens.
1. Implement OAuth2 Authorization Flow (Your Responsibility)
You need to implement the OAuth2 authorization flow using libraries like:
googleapis(Node.js)google-auth-library(Node.js)
Required OAuth2 scopes:
https://www.googleapis.com/auth/analytics.readonlyExample OAuth2 flow (simplified):
import { google } from 'googleapis';
const oauth2Client = new google.auth.OAuth2(
CLIENT_ID,
CLIENT_SECRET,
REDIRECT_URI
);
// Generate auth URL and redirect user
const authUrl = oauth2Client.generateAuthUrl({
access_type: 'offline', // Important: to get refresh_token
scope: ['https://www.googleapis.com/auth/analytics.readonly']
});
// After user consent, exchange code for tokens
const { tokens } = await oauth2Client.getToken(code);
// Save tokens to tokens.json
fs.writeFileSync('tokens.json', JSON.stringify(tokens, null, 2));2. tokens.json Format
After completing the OAuth2 flow, save the tokens in a tokens.json file:
{
"access_token": "ya29.a0AWY7CknXXX...",
"refresh_token": "1//0eXXX...",
"scope": "https://www.googleapis.com/auth/analytics.readonly",
"token_type": "Bearer",
"expiry_date": 1234567890000
}Field | Description | Required |
| The OAuth2 access token | β Yes |
| The refresh token (for auto-renewal) | β οΈ Recommended |
| Authorized scopes | Optional |
| Token type (usually "Bearer") | Optional |
| Token expiration timestamp (ms) | β οΈ Recommended |
3. Token Loading Priority
The MCP server loads OAuth2 tokens in the following order:
Direct JSON string via
GOOGLE_OAUTH2_TOKENSenvironment variablePath specified by
GOOGLE_OAUTH2_TOKEN_PATHenvironment variable{current working directory}/tokens.json{current working directory}/../tokens.json{src directory}/../../tokens.json
4. Environment Variables (OAuth2 Mode)
GOOGLE_AUTH_MODE=oauth2
# Option 1: Direct JSON string
GOOGLE_OAUTH2_TOKENS='{"access_token":"ya29...","refresh_token":"1//0e...","expiry_date":1234567890000}'
# Option 2: Path to tokens.json
GOOGLE_OAUTH2_TOKEN_PATH=/path/to/your/tokens.json
# Optional: For automatic token refresh
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-client-secretClaude Desktop Configuration (OAuth2)
{
"mcpServers": {
"google-analytics-mcp": {
"command": "npx",
"args": ["-y", "@toolsdk.ai/google-analytics-mcp"],
"env": {
"GOOGLE_AUTH_MODE": "oauth2",
"GOOGLE_OAUTH2_TOKEN_PATH": "/path/to/your/tokens.json",
"GOOGLE_CLIENT_ID": "your-client-id (optional)",
"GOOGLE_CLIENT_SECRET": "your-client-secret (optional)"
}
}
}
}β οΈ Token Lifecycle Management (OAuth2 Mode)
Access Token Expiration
Google OAuth2 access tokens typically expire after 1 hour
The MCP server will automatically attempt to refresh tokens if
refresh_tokenis provided
Automatic Token Refresh
When configured with GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET, the server will:
Detect when the access token is expired
Use the
refresh_tokento obtain a newaccess_tokenAutomatically save the new tokens to
tokens.json
Refresh Token Considerations
β οΈ Important Notes about Refresh Tokens:
Refresh tokens can expire or be revoked:
If the user revokes access in their Google Account settings
If the refresh token is unused for 6 months (for non-verified apps)
If you've exceeded the limit of 100 refresh tokens per user per client
Getting a refresh token:
You only get a
refresh_tokenon the first authorizationUse
access_type: 'offline'in your auth URLUse
prompt: 'consent'to force re-consent and get a new refresh token
Recommended practices:
Always request
access_type: 'offline'during OAuth2 flowStore and protect the
refresh_tokensecurelyImplement re-authorization flow for when refresh tokens become invalid
Monitor for
invalid_granterrors which indicate the refresh token is no longer valid
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 based on the authentication mode:
Service Account Mode:
Permission errors will prompt you to add the service account email to GA property access
OAuth2 Mode:
Permission errors will suggest re-authorization
Token errors will indicate refresh or re-authorization needs
Environment Variables Summary
Variable | Mode | Description |
| Both |
|
| Service Account | JSON string of service account key |
| Service Account | Path to service account JSON file |
| OAuth2 | JSON string of OAuth2 tokens |
| OAuth2 | Path to tokens.json |
| OAuth2 | Client ID for token refresh |
| OAuth2 | Client secret for token refresh |
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
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 |
|---|---|---|---|
| limit | No | Limit number of results | |
| endDate | Yes | End date (YYYY-MM-DD) | |
| metrics | Yes | Metrics to query (e.g., activeUsers, sessions, screenPageViews) | |
| orderBy | No | Sort results by dimension or metric | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| dimensions | No | Dimensions to query (e.g., country, pagePath, sessionSource) | |
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. | |
| metricFilter | No | Filter by metric values | |
| dimensionFilter | No | Filter by dimension values |
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 |
|---|---|---|---|
| type | No | Type of metadata to retrieve | both |
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. |
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 |
|---|---|---|---|
| limit | No | Limit number of results | |
| endDate | Yes | End date (YYYY-MM-DD) | |
| startDate | Yes | Start date (YYYY-MM-DD) | |
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. | |
| reportType | Yes | Type of quick insight report |
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 |
|---|---|---|---|
| limit | No | Limit number of results | |
| metrics | No | Real-time metrics (default: activeUsers) | |
| dimensions | No | Dimensions for real-time data (e.g., country, city, pagePath) | |
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. |
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 |
|---|---|---|---|
| type | No | Type of metadata to search | both |
| query | Yes | Search term to find dimensions/metrics | |
| category | No | Filter by category (e.g., "USER", "SESSION", "PAGE", "EVENT") | |
| propertyId | Yes | Google Analytics property ID (e.g., 123456789). Required for all queries. |
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.
TDQS
Each tool targets a distinct purpose: real-time data, comprehensive reports, metadata listing, predefined insights, and metadata search. No overlap, agent can easily differentiate.
Mostly snake_case with descriptive names, but mixes verb-noun (get_metadata, search_metadata) with noun-noun (realtime_data, analytics_report) and adjective-noun (quick_insights). Minor inconsistency but still clear.
5 tools is well-scoped for a Google Analytics server covering main data access needs: realtime, custom reports, metadata, insights, and search. Neither too few nor excessive.
Covers key Google Analytics data retrieval: real-time, custom reports via analytics_report (which can handle any dimensions/metrics), metadata listing, search, and predefined insights. No obvious gaps for a read-only analytics server.
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
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
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.
Hosted OAuth MCP for Google, Meta, X, and LinkedIn Ads, GA4, and Search Console.
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
- AlicenseBqualityDmaintenanceEnables LLM applications to query Google Analytics 4 data through standard MCP interfaces, supporting real-time data, custom reports, and metadata discovery.5781MIT
- 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
- AlicenseAqualityCmaintenanceEnables 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
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/kwp-lab/mcp-google-analytics-oauth2'
If you have feedback or need assistance with the MCP directory API, please join our Discord server