Google Cloud Monitoring MCP server
Endpoint: https://monitoring.googleapis.com/mcp · Authentication: Sign in with OAuth
Retrieves Cloud Monitoring time series, PromQL query results, alerting policies, and dashboards. Requires Google Cloud credentials through OAuth.
How do I authenticate?
Add the endpoint in your client, start Connect or Sign in, approve the requested scopes, and return to the client. OAuth discovery finds the authorization server; client registration requirements vary by provider. Follow the provider guidance and client setup below.
Authentication and connection guideConnection specification
- Remote endpoint
https://monitoring.googleapis.com/mcp- Browser access
- Not yet measured
- Declared MCP transport
- Streamable HTTP
- Live-validated MCP transport
- Streamable HTTP — Observed by the latest catalog validation
- Declared authentication
- OAuth 2.1
- Detected authentication
- OAuth 2.1 detected or retained from publisher evidence
- Protocol lifecycle
- Stateful MCP · 2025-11-25
- Authorization server
https://accounts.google.com/- Category
- Observability
Product documentation · Official listing documentation
Provider guidance
- Initialization and tool listing succeeded without credentials in the 2026-10-20 audit; tool calls require Google Cloud credentials. Google OAuth clients are pre-registered in a Google Cloud project; the server does not advertise Dynamic Client Registration.
More Observability MCP servers · Browse all MCP servers · Test this endpoint in the MCP Playground
Connect it
Live-validated endpoint: https://monitoring.googleapis.com/mcp · Streamable HTTP. Registration requirements not verified: The OAuth authorization and app-registration requirements for this exact endpoint have not been verified. A compatible client will request authorization, but follow the publisher documentation and do not guess client credentials or callbacks.
Agent prompt for Claude Code or Codex
Add the Google Cloud Monitoring MCP server to my MCP client configuration and verify that it works. What it is: Retrieves Cloud Monitoring time series, PromQL query results, alerting policies, and dashboards. Requires Google Cloud credentials through OAuth. Server URL: https://monitoring.googleapis.com/mcp Transport: Streamable HTTP (remote MCP server, no local install). Authentication: OAuth 2.1. Registration requirements not verified: The OAuth authorization and app-registration requirements for this exact endpoint have not been verified. A compatible client will request authorization, but follow the publisher documentation and do not guess client credentials or callbacks. Tools (9, as last observed by mcptest): get_alert, get_alert_policy, get_dashboard, list_alert_policies, list_alerts, list_dashboards, list_metric_descriptors, list_timeseries, query_range. Reference: https://mcptest.io/servers/google-cloud-monitoring/ Steps: 1. Work out which MCP client I use (Claude Code, Codex, Cursor, VS Code or another) and add the server under the name "google-cloud-monitoring" in that client's MCP configuration, user scope unless I ask otherwise. Claude Code: claude mcp add --transport http --scope user 'google-cloud-monitoring' 'https://monitoring.googleapis.com/mcp' Other clients: use the setup for that client on the reference page. 2. Never write a credential value into a file that could be committed; reference an environment variable or the client's secret store, and ask me for any value you need. 3. Verify: connect to the server and call tools/list. Confirm the tools above are listed, and report any sign-in step I still have to complete.
Claude Code setup
Run in a terminal. This user-scoped entry is available across projects.
claude mcp add --transport http --scope user 'google-cloud-monitoring' 'https://monitoring.googleapis.com/mcp'- After adding the server, open Claude Code, run /mcp, select the server, and follow the browser flow to authenticate.
Codex CLI setup
Run in a terminal; Codex stores the entry in ~/.codex/config.toml.
codex mcp add 'google-cloud-monitoring' --url 'https://monitoring.googleapis.com/mcp'
codex mcp login 'google-cloud-monitoring'Cursor setup
Add to .cursor/mcp.json for this project, or ~/.cursor/mcp.json for all projects.
{
"mcpServers": {
"google-cloud-monitoring": {
"url": "https://monitoring.googleapis.com/mcp"
}
}
}VS Code setup
Add to .vscode/mcp.json, or run “MCP: Open User Configuration” for a private user-level entry.
{
"servers": {
"google-cloud-monitoring": {
"type": "http",
"url": "https://monitoring.googleapis.com/mcp"
}
}
}Claude setup
Add the endpoint above in Claude:
- Customize > Connectors > Add custom connector
- Team/Enterprise: Organization settings > Connectors > Add > Custom > Web
Claude Desktop setup
Add the endpoint above in Claude Desktop:
- Remote: Customize > Connectors (same as claude.ai)
- Local: Settings > Developer > Edit Config, or Settings > Extensions for .mcpb files
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows), local servers only
ChatGPT setup
Add the endpoint above in ChatGPT:
- ChatGPT web: Plugins > Add custom MCP server, then configure authentication and accept the risk warning
Windsurf setup
Add the endpoint above in Windsurf:
~/.config/devin/mcp_config.json(%APPDATA%\devin\mcp_config.jsonon Windows),serverUrlorurl- Cascade panel > ... > MCPs > Open MCP config file
Gemini CLI setup
Add the endpoint above in Gemini CLI:
gemini mcp add --transport http <name> <url>~/.gemini/settings.json(user) or.gemini/settings.json(project),mcpServers
MCP SDK setup
Add the endpoint above in MCP SDK:
- Programmatic:
new Client(...).connect(new StreamableHTTPClientTransport(url))
Notes for every client
- Publisher evidence (reviewed 2026-10-20): https://docs.cloud.google.com/monitoring/docs/use-monitoring-mcp
- Provider guidance: Initialization and tool listing succeeded without credentials in the 2026-10-20 audit; tool calls require Google Cloud credentials. Google OAuth clients are pre-registered in a Google Cloud project; the server does not advertise Dynamic Client Registration.
Client compatibility
| Client | Status | Why |
|---|---|---|
| Claude Code | Supported | Claude Code supports Streamable HTTP servers and OAuth sign-in. |
| Codex | Supported | Codex supports Streamable HTTP servers and OAuth sign-in. |
| Cursor | Supported | Cursor supports Streamable HTTP servers and OAuth sign-in. |
| VS Code | Supported | VS Code supports Streamable HTTP servers and OAuth sign-in. |
| Claude | Supported | Claude supports Streamable HTTP servers and OAuth sign-in. |
| Claude Desktop | Supported | Claude Desktop supports Streamable HTTP servers and OAuth sign-in. |
| ChatGPT | Partial | Stateful routing needs operational care: ChatGPT can preserve MCP sessions, but the deployment must route a session consistently and retain its state. |
| Windsurf | Partial | Windsurf's documentation does not state support for OAuth sign-in. |
| Gemini CLI | Supported | Gemini CLI supports Streamable HTTP servers and OAuth sign-in. |
| MCP SDK | Supported | MCP SDK supports Streamable HTTP servers and OAuth sign-in. |
Computed from this server's validated transport, protocol and authentication against documented client support. Checks the catalog has not observed are not counted.
Latest validation evidence
- Validation status
- Online when last tested
- Validation checked at
- Oct 26, 2026 at 11:06 AM
- Validation detail
- Negotiated stateful MCP 2025-11-25 at https://monitoring.googleapis.com/mcp; detected transport streamable-http; authentication oauth
Tool inventory
What the catalog validator observed on at https://monitoring.googleapis.com/mcp without credentials. The live server may have changed since; connect in the Playground for the current list.
Tools provided by Google Cloud Monitoring 9
Some details were sanitized for public display.
get_alertoutputSchema declaredUse this as the primary tool to get information about a specific alert. An alert is the representation of a violation of an alert policy. This is useful for understanding the details of a specific alert.
Input
name: stringname: stringrequiredRequired. The name of the alert. The format is: projects/[PROJECT_ID_OR_NUMBER]/alerts/[ALERT_ID] The `[ALERT_ID]` is a system-assigned unique identifier for the alert.
get_alert_policyoutputSchema declaredUse this as the primary tool to get information about a specific alerting policy. Alerting policies define the conditions under which you want to be notified about issues with your services. This is useful for understanding the details of a specific alert configuration.
Input
name: stringname: stringrequiredRequired. The alerting policy to retrieve. The format is: projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[ALERT_POLICY_ID]
get_dashboardoutputSchema declaredUse this as the primary tool to retrieve a single specific custom monitoring dashboard from a Google Cloud project using the resource name of the requested dashboard. Custom monitoring dashboards let users view and analyze data from different sources in the same context. This is often used as a follow on to list_dashboards to get full details on a specific dashboard.
Input
name: stringname: stringrequiredRequired. The resource name of the Dashboard. The format is one of: - `dashboards/[DASHBOARD_ID]` (for system dashboards) - `projects/[PROJECT_ID_OR_NUMBER]/dashboards/[DASHBOARD_ID]` (for custom dashboards).
list_alert_policiesoutputSchema declaredUse this as the primary tool to list the alerting policies in a Google Cloud project. Alerting policies define the conditions under which you want to be notified about issues with your services. This is useful for understanding what alerts are currently configured.
Input
filter?: string, name: string, orderBy?: string, pageSize?: integer, pageToken?: stringfilter?: stringoptionalOptional. If provided, this field specifies the criteria that must be met by alert policies to be included in the response. For more details, see [sorting and filtering]([REDACTED URI]
name: stringrequiredRequired. The [project]([REDACTED URI] whose alert policies are to be listed. The format is: projects/[PROJECT_ID_OR_NUMBER] Note that this field names the parent container in which the alerting policies to be listed are stored. To retrieve a single alerting policy by name, use the GetAlertPolicy operation, instead.
orderBy?: stringoptionalOptional. A comma-separated list of fields by which to sort the result. Supports the same set of field references as the `filter` field. Entries can be prefixed with a minus sign to sort by the field in descending order. For more details, see [sorting and filtering]([REDACTED URI]
pageSize?: integeroptionalOptional. The maximum number of results to return in a single response.
pageToken?: stringoptionalOptional. If this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return more results from the previous method call.
list_alertsoutputSchema declaredUse this as the primary tool to list the alerts in a Google Cloud project. An alert is the representation of a violation of an alert policy. This is useful for understanding current and past violations of an alert policy.
Input
filter?: string, orderBy?: string, pageSize?: integer, pageToken?: string, parent: stringfilter?: stringoptionalOptional. An alert is returned if there is a match on any fields belonging to the alert or its subfields.
orderBy?: stringoptionalOptional. A comma-separated list of fields in `Alert` to use for sorting. The default sort direction is ascending. To specify descending order for a field, add a `desc` modifier. The following fields are supported: * `open_time` * `close_time` For example, `close_time desc, open_time` will return the alerts closed most recently, with ties broken in the order of older alerts listed first. If the field is not set, the results are sorted by `open_time desc`.
pageSize?: integeroptionalOptional. The maximum number of results to return in a single response. If not set to a positive number, at most 50 alerts will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.
pageToken?: stringoptionalOptional. If non-empty, `page_token` must contain a value returned as the `next_page_token` in a previous response to request the next set of results.
parent: stringrequiredRequired. The name of the project to list alerts for.
list_dashboardsoutputSchema declaredUse this as the primary tool to retrieve a list of existing custom monitoring dashboards in a Google Cloud project. Custom monitoring dashboards let users view and analyze data from different sources in the same context. This is useful for understanding what custom dashboards are currently configured and available in a given project.
Input
pageSize?: integer, pageToken?: string, parent: stringpageSize?: integeroptionalA positive number that is the maximum number of results to return. If unspecified, a default of 1000 is used.
pageToken?: stringoptionalOptional. If this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.
parent: stringrequiredRequired. The scope of the dashboards to list. The format is: projects/[PROJECT_ID_OR_NUMBER]
list_metric_descriptorsoutputSchema declaredUse this as the primary tool to discover the types of metrics available in a Google Cloud project. This is a good first step to understanding what data is available for monitoring and building dashboards or alerts.
Input
activeOnly?: boolean, filter?: string, name: string, pageSize?: integer, pageToken?: stringactiveOnly?: booleanoptionalOptional. If true, only metrics and monitored resource types that have recent data (within roughly 25 hours) will be included in the response. - If a metric descriptor enumerates monitored resource types, only the monitored resource types for which the metric type has recent data will be included in the returned metric descriptor, and if none of them have recent data, the metric descriptor will not be returned. - If a metric descriptor does not enumerate the compatible monitored resource types, it will be returned only if the metric type has recent data for some monitored resource type. The re
filter?: stringoptionalOptional. If this field is empty, all custom and system-defined metric descriptors are returned. Otherwise, the [filter]([REDACTED URI] specifies which metric descriptors are to be returned. For example, the following filter matches all [custom metrics]([REDACTED URI] metric.type = starts_with("custom.googleapis.com/")
name: stringrequiredRequired. The [project]([REDACTED URI] on which to execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER]
pageSize?: integeroptionalOptional. A positive number that is the maximum number of results to return. The default and maximum value is 10,000. If a page_size <= 0 or > 10,000 is submitted, will instead return a maximum of 10,000 results.
pageToken?: stringoptionalOptional. If this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.
list_timeseriesoutputSchema declaredLists time series data from the Google Cloud Monitoring API
Input
aggregation?: any, filter: string, interval: any, name: string, orderBy?: string, pageSize?: integer, pageToken?: string, secondaryAggregation?: any, view: stringaggregation?: anyoptionalSpecifies the alignment of data points in individual time series as well as how to combine the retrieved time series across specified labels. By default (if no `aggregation` is explicitly specified), the raw time series data is returned.
filter: stringrequiredRequired. A [monitoring filter]([REDACTED URI] that specifies which time series should be returned. The filter must specify a single metric type, and can additionally specify metric labels and other information. For example: metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND metric.labels.instance_name = "my-instance-name"
interval: anyrequiredRequired. The time interval for which results should be returned. Only time series that contain data points in the specified interval are included in the response.
name: stringrequiredRequired. The [project]([REDACTED URI] organization or folder on which to execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER] organizations/[ORGANIZATION_ID] folders/[FOLDER_ID]
orderBy?: stringoptionalUnsupported: must be left blank. The points in each time series are currently returned in reverse time order (most recent to oldest).
pageSize?: integeroptionalA positive number that is the maximum number of results to return. If `page_size` is empty or more than 100,000 results, the effective `page_size` is 100,000 results. If `view` is set to `FULL`, this is the maximum number of `Points` returned. If `view` is set to `HEADERS`, this is the maximum number of `TimeSeries` returned.
pageToken?: stringoptionalIf this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.
secondaryAggregation?: anyoptionalApply a second aggregation after `aggregation` is applied. May only be specified if `aggregation` is specified.
view: stringrequiredRequired. Specifies which information is returned about the time series.
query_rangeoutputSchema declaredEvaluate a PromQL query in a range of time
Input
end?: string, location?: string, name: string, query?: string, start?: string, step?: string, timeout?: stringend?: stringoptionalThe end time to evaluate the query for. Either floating point UNIX seconds or RFC3339 formatted timestamp.
location?: stringoptionalLocation of the resource information. Has to be "global" now.
name: stringrequiredRequired. The project on which to execute the request. Data associcated with the project's workspace stored under the The format is: projects/[PROJECT_ID_OR_NUMBER]. Open source API but used as a request path prefix to distinguish different virtual Prometheus instances of Google Prometheus Engine.
query?: stringoptionalA PromQL query string. Query language documentation: [REDACTED URI]
start?: stringoptionalThe start time to evaluate the query for. Either floating point UNIX seconds or RFC3339 formatted timestamp.
step?: stringoptionalThe resolution of query result. Either a Prometheus duration string ([REDACTED URI] or floating point seconds. This non-standard encoding must be used for compatibility with the open source API. Clients may still implement timeouts at the connection level while ignoring this field.
timeout?: stringoptionalAn upper bound timeout for the query. Either a Prometheus duration string ([REDACTED URI] or floating point seconds. This non-standard encoding must be used for compatibility with the open source API. Clients may still implement timeouts at the connection level while ignoring this field.