Skip to main content
Investigate incidents with groundcover logs and traces, queried with gcQL (groundcover Query Language) over groundcover’s public, read-only MCP endpoint. This is the initial integration: configuration, verification, and three read-only tools (logs, traces, and the gcQL reference). More signals (metrics, APM, Kubernetes events/entities, monitors, monitor issues) and alert-source routing land in follow-up releases. v1 is read-only — no monitor creation, silencing, or other mutating actions.

Commands

1. Create a read-only service-account token

In groundcover: Settings → Access → Service Accounts → create a service account with a read-only policy → create an API key and copy it (shown once). OpenSRE never performs write actions.

2. Configure

Run the interactive setup:
…or set environment variables:
Single-workspace accounts need only the token. If your account has multiple workspaces or backends, verification tells you exactly which value to set. Multiple instances:
opensre integrations list shows integrations saved to the local store (via setup); environment-variable configuration is still picked up by verify and at runtime.

3. Verify

Verification connects to the MCP endpoint, confirms the expected read-only tool surface is present, and lists your workspaces. It returns passed, missing (token not configured), or failed with an actionable message — for example, naming the missing or mistyped GROUNDCOVER_TENANT_UUID / GROUNDCOVER_BACKEND_ID when the account is ambiguous. Tokens are never printed.

Tools

Writing efficient gcQL

gcQL is a pipe-based language: a query starts with a filter (or *) and pipes through operators. These rules keep queries fast and valid:
  • Lead with the filter directlylevel:error | …, not * | filter level:error. The | filter pipe is for post-aggregation conditions on computed aliases.
  • Project or aggregate — don’t pull raw rows blindly. Use | fields a, b, … to select columns, or | stats … to aggregate. A bare select-all (<filter> | limit N) can be rejected by the backend.
  • Keep the time window narrow. The default is the last 1 hour; widen only after an empty or inconclusive result.
  • Always include | limit N — it caps rows returned (not data scanned), so for wide ranges prefer stats/aggregations.
  • Discover fields with * | field_names (or get_groundcover_query_reference).
Examples:

Troubleshooting