Profile
Back to NewsBack
GitHub Trending 35 min
Reader Mode
SigNoz/signoz-mcp-server: MCP Server for SigNoz

SigNoz/signoz-mcp-server: MCP Server for SigNoz

14 hours ago

SigNoz MCP Server

Go Version</a> License</a> MCP Protocol</a>

A Model Context Protocol (MCP) server that provides seamless access to SigNoz observability data through AI assistants and LLMs. Query metrics, traces, logs, alerts, dashboards, and services using natural language.

📖 Full Documentation

Table of Contents

Connect to SigNoz Cloud

Connect your AI tool to SigNoz Cloud's hosted MCP server. No installation is required; just add the hosted MCP URL and authenticate.

https://mcp.<region>.signoz.cloud/mcp
Make sure you select the correct region that matches your SigNoz Cloud account. Using the wrong region will result in authentication failures.
> Find your region under Settings → Ingestion in SigNoz, or see the SigNoz Cloud region reference.

One-Click Install Links

GitHub does not reliably make custom-protocol links like cursor:// and vscode: clickable in README rendering.

Use the documentation page for one-click install buttons:

If you prefer, use the manual configuration examples below in this README.

Cursor

Manual Configuration

Add this configuration to .cursor/mcp.json:

{
  "mcpServers": {
    "signoz": {
      "url": "https://mcp.<region>.signoz.cloud/mcp"
    }
  }
}

Need help? See the Cursor MCP docs.

VS Code / GitHub Copilot

Manual Configuration

Add this configuration to .vscode/mcp.json:

{
  "servers": {
    "signoz": {
      "type": "http",
      "url": "https://mcp.<region>.signoz.cloud/mcp"
    }
  }
}

Need help? See the VS Code MCP docs.

Claude Desktop

Add SigNoz Cloud as a custom connector in Claude Desktop:

  1. Open Claude Desktop.
  2. Go to Settings → Developer (or Features, depending on your version).
  3. Click Add Custom Connector or Add Remote MCP Server.
  4. Enter your SigNoz MCP URL: https://mcp..signoz.cloud/mcp
When prompted, complete the authentication flow.

Claude Code

Run this command to add the hosted SigNoz MCP server:

claude mcp add --scope user --transport http signoz https://mcp.<region>.signoz.cloud/mcp

After configuring the MCP server, authenticate in a terminal:

claude /mcp

Select the signoz server and complete the authentication flow.

OpenAI Codex

Run this command to add the hosted SigNoz MCP server:

codex mcp add signoz --url https://mcp.<region>.signoz.cloud/mcp

Or add this configuration to config.toml:

[mcp_servers.signoz]
url = "https://mcp.<region>.signoz.cloud/mcp"

After adding the server, authenticate:

codex mcp login signoz

Then run /mcp inside Codex to verify the connection.

Grok Build

Run this command to add the hosted SigNoz MCP server:

grok mcp add -t http signoz https://mcp.<region>.signoz.cloud/mcp

Or add this configuration to ~/.grok/config.toml:

[mcp_servers.signoz]
url = "https://mcp.<region>.signoz.cloud/mcp"
enabled = true

Adding the server does not authenticate it. Start Grok Build, run /mcps, select the signoz server, and complete the OAuth flow in your browser:

grok
/mcps

No API key is stored in the config file; credentials are saved separately once the OAuth flow completes.

Use -s project on the add command to write to ./.grok/config.toml instead, so the server is shared with everyone working in that directory.

Verify the connection with:

grok mcp list
grok mcp doctor

SigNoz Cloud Authentication

When you add the hosted MCP URL to your client, the client initiates an authentication flow. You will be prompted to enter:

  1. Your SigNoz instance URL (for example, your-instance.signoz.cloud). Protocol-less URLs are accepted; paths, query parameters, and fragments are ignored.
  2. Your API key
Create an API key in Settings → API Keys in SigNoz. Only Admin users can create API keys.

Self-Hosted Installation

Download Binary (Recommended)

Download the latest binary from GitHub Releases:

# macOS (Apple Silicon)
curl -L https://github.com/SigNoz/signoz-mcp-server/releases/latest/download/signoz-mcp-server_darwin_arm64.tar.gz | tar xz

macOS (Intel)

curl -L https://github.com/SigNoz/signoz-mcp-server/releases/latest/download/signoz-mcp-server_darwin_amd64.tar.gz | tar xz

Linux (amd64)

curl -L https://github.com/SigNoz/signoz-mcp-server/releases/latest/download/signoz-mcp-server_linux_amd64.tar.gz | tar xz

This extracts a signoz-mcp-server binary in the current directory. Move it somewhere on your PATH or note the absolute path for the config below.

Go Install

go install github.com/SigNoz/signoz-mcp-server/cmd/server@latest

The binary is installed as server to $GOPATH/bin/ (default: $HOME/go/bin/server). You may want to rename it:

mv "$(go env GOPATH)/bin/server" "$(go env GOPATH)/bin/signoz-mcp-server"

Docker

Docker images are available on Docker Hub:

docker pull signoz/signoz-mcp-server:latest

Run in HTTP mode:

docker run -p 8000:8000 \
  -e TRANSPORT_MODE=http \
  -e MCP_SERVER_PORT=8000 \
  -e SIGNOZ_URL=https://your-signoz-instance.com \
  -e SIGNOZ_API_KEY=your-api-key \
  signoz/signoz-mcp-server:latest

Use a specific version tag (e.g. v0.1.0) instead of latest for pinned deployments.

Build from Source

git clone https://github.com/SigNoz/signoz-mcp-server.git
cd signoz-mcp-server
make build

The binary is at ./bin/signoz-mcp-server.

Connect to Self-Hosted SigNoz

Prerequisites

  • A running SigNoz instance on the latest release. Each server release targets the latest SigNoz release and is not tested against older versions; see CHANGELOG.md for breaking changes.
  • A SigNoz API key (Settings → API Keys in the SigNoz UI)
  • The signoz-mcp-server binary (see Self-Hosted Installation)

Stdio Mode (Claude Desktop / Cursor / Any MCP Client)

Add this to your MCP client config (claude_desktop_config.json, .cursor/mcp.json, etc.). Replace the command path with the absolute path to your signoz-mcp-server binary:

{
    "mcpServers": {
        "signoz": {
            "command": "/absolute/path/to/signoz-mcp-server",
            "args": [],
            "env": {
                "SIGNOZ_URL": "https://your-signoz-instance.com",
                "SIGNOZ_API_KEY": "your-api-key-here",
                "LOG_LEVEL": "info"
            }
        }
    }
}

HTTP Mode

HTTP mode listens on all interfaces by default. Set MCP_SERVER_HOST=127.0.0.1 when the server should accept loopback connections only.

Memory footprint

The server keeps the SigNoz docs search index in memory. With stemming on titles and headings and a single standard-analyzed body field, the embedded 746-page index used 28 to 36 MiB of resident heap across eight local Go 1.26 whole-package test runs. Build peaks ranged from 97 to 134 MiB above the pre-build heap baseline, using 64-page batches. These are index measurements, not whole-process RSS or container memory guarantees; request handling and refresh work add memory.

| Moment | Index memory behavior | | --- | --- | | Startup build from the embedded corpus (746 pages) | Up to 134 MiB above the pre-build heap baseline in the measured runs | | Scheduled full rebuild | Builds a new index while the old index is still serving; combined peak has not been re-measured with this configuration | | Scheduled refresh that changes a few pages | Applies changed pages in one atomic batch to the live index; peak depends on the changed content and has not been re-measured with this configuration | | Scheduled refresh that finds no changed pages | no index work; pages are revalidated with If-None-Match and unchanged ones cost a 304 |

A scheduled refresh (default every 6h) first compares the live sitemap with the served one and stops there when it is unchanged. Otherwise it revalidates every page with If-None-Match and touches the index only when at least one page's content changed. A change set covering up to a quarter of the pages is applied to the live index in place; a larger one, the 25th in-place update on the same index, and any forced refresh (default every 24h) that finds changed content rebuild the index from scratch, which also compacts the segments that in-place updates leave behind. Full rebuilds use 64-page batches. In-place updates use one atomic batch bounded by the quarter-of-pages threshold, not the full-build batch size.

Recommendations for containerized HTTP deployments:

  • Set the memory limit to at least 512Mi, and monitor memory during refreshes and concurrent requests. The highest measured index-only build peak is 134 MiB above baseline and the resident index is 28 to 36 MiB; rebuilds also retain the serving index. Setting Go's GOMEMLIMIT is optional: it can reclaim garbage earlier but cannot shrink live data inside an index batch.
  • Set both SIGNOZ_DOCS_REFRESH_INTERVAL=0 and SIGNOZ_DOCS_FULL_REFRESH_INTERVAL=0 when you would rather serve the docs snapshot that shipped with the release than pay any refresh. New docs pages then arrive with the next server upgrade. Setting only the first keeps the daily forced refresh.
  • Every refresh logs docs refresh starting and ends with a completion or failure line, for example docs refresh no-op; sitemap unchanged, docs refresh found no page changes; index kept, docs refresh applied delta, docs refresh rebuilt index, or a docs refresh failed / docs full refresh failed warning. A refresh normally finishes within a few minutes. A container whose last docs line is docs refresh starting, docs refresh fetching pages, or docs refresh rebuilding index and that then restarted most likely died mid-refresh.

With OAuth (Multi-Tenant / Cloud)

Start the server:

TRANSPORT_MODE=http \
MCP_SERVER_PORT=8000 \
OAUTH_ENABLED=true \
OAUTH_TOKEN_SECRET=$(openssl rand -base64 32) \
OAUTH_ISSUER_URL=https://your-public-mcp-url.com \
./signoz-mcp-server

Client config needs just the URL, no keys:

{
    "mcpServers": {
        "signoz": {
            "url": "https://your-public-mcp-url.com/mcp"
        }
    }
}

The client discovers OAuth endpoints automatically, opens a browser for credentials, and handles token exchange.

Without OAuth (Simple Setup)

The API key and SigNoz URL only need to be provided in one place: the server or the client.

Option A — Credentials on the server (simpler client config):

SIGNOZ_URL=https://your-signoz-instance.com \
SIGNOZ_API_KEY=your-api-key \
TRANSPORT_MODE=http \
MCP_SERVER_PORT=8000 \
./signoz-mcp-server
{
    "mcpServers": {
        "signoz": {
            "url": "http://localhost:8000/mcp"
        }
    }
}

Option B — API key on the client (server holds the URL, client sends the key):

SIGNOZ_URL=https://your-signoz-instance.com \
TRANSPORT_MODE=http \
MCP_SERVER_PORT=8000 \
./signoz-mcp-server
{
    "mcpServers": {
        "signoz": {
            "url": "http://localhost:8000/mcp",
            "headers": {
                "SIGNOZ-API-KEY": "your-api-key-here"
            }
        }
    }
}

MCP Protocol Compatibility

SigNoz uses the official MCP Go SDK v1.8.0 and supports both current lifecycle models over HTTP and stdio:

| Protocol era | Lifecycle | |---|---| | 2025-11-25 | Legacy clients use initialize, then notifications/initialized, before ordinary requests. | | 2026-07-28 | Clients may call server/discover, then send direct requests carrying protocol and client capabilities in per-request _meta; no initialize handshake is required. |

The HTTP /mcp endpoint is stateless and sessionless. MCP messages use JSON POST requests and successful responses use application/json; the server does not issue or require Mcp-Session-Id. GET /mcp and DELETE /mcp return 405 Method Not Allowed, so deployments need neither sticky routing nor the old GET listener/heartbeat. Existing client configuration does not change.

Stdio input has a 16 MiB frame limit. Split larger requests into smaller calls. MCP_MAX_REQUEST_BYTES controls HTTP request bodies only.

The server intentionally does not advertise the deprecated logging capability. Discovery ordering is not a compatibility guarantee. Unknown tools, resources, and prompts use the official SDK's standard invalid-params behavior rather than legacy implementation-specific wording or error codes.

HTTP Probe Endpoints

HTTP mode exposes unauthenticated probe endpoints. New Kubernetes deployments should use /livez for livenessProbe and /readyz for readinessProbe.

| Endpoint | Purpose | |----------|---------| | /livez | Shallow liveness probe. Returns 200 OK when the server process can answer HTTP requests. It does not check dependencies. | | /readyz | Readiness probe. Returns 200 OK only after the pod is ready to receive traffic; currently this requires the docs index to be ready. Otherwise returns 503. | | /healthz | Legacy/generic health check kept for backward compatibility. It follows the same strict status as /readyz; use /livez for shallow liveness. |

What Can You Do With It?

"Show me all available metrics"
"What's the p99 latency for http_request_duration_seconds?"
"List all active alerts"
"Show me error logs for the paymentservice from the last hour"
"How many errors per service in the last hour?"
"Search traces for the checkout service from the last hour"
"Get details for trace ID abc123"
"Create a dashboard with CPU and memory widgets"
"How do I send Docker logs to SigNoz?"

Available Tools

Tool metadata: every tool accepts searchContext. Copy the user's entire original request verbatim, including preflight or confirmation context; it is used for MCP observability and is not forwarded to SigNoz APIs.
Input validation: calls are never rejected for schema mismatches. Arguments are validated against each tool's advertised schema; a mismatched call still runs best-effort, and the successful result carries a deterministic appended Input validation notice: naming the affected top-level parameter when it can be derived safely from the advertised schema. Complex root-only mismatches use a generic fallback. Mismatches are also counted in the mcp.tool.validation.mismatches metric. Arguments a tool's schema does not declare add no notice and are handled as before: most tools ignore them, and a few reject them with a coded error, such as the retired log query alias or an unknown notification-channel field. They are also logged at WARN with their names and counted in the same metric under path and constraint undeclared_argument.
Upstream errors: upstream SigNoz 401 and 403 tool failures carry a stable structured code (UNAUTHORIZED or PERMISSION_DENIED) and numeric status. Recognized SigNoz error envelopes may also include bounded upstreamURL, upstreamSuggestions, upstreamDetails ([{message, suggestions}]), and upstreamRetry ({delay} in nanoseconds); the same recovery guidance appears in agent-readable text. Unrecognized bodies use the local status-derived coded fallback instead of raw passthrough, and authorization failures still name the failed tool and immediate recovery action. This error-only addition does not change tool names, schemas or descriptions, success payloads, resources or templates, or prompts.

| Tool | Description | |------|-------------| | signoz_get_org_overview | Get the current status and overall posture of the SigNoz deployment, with typed projections plus sourceStats containing every reported stats field | | signoz_list_metrics | Discover active metric names and catalog metadata | | signoz_query_metrics | Query known metrics for values, trends, breakdowns, or formulas | | signoz_get_top_metrics | Return top 100 metrics ranked by ingested sample volume with pre-computed percentages for cost and volume analysis | | signoz_check_metric_usage | Given a list of metric names (up to 50 per call), return which dashboards and alerts reference each one | | signoz_check_metric_cardinality | Return label/attribute keys for a single metric with cardinality counts and sample values, sorted highest-cardinality first | | signoz_get_field_keys | Discover available field keys for metrics, traces, or logs, including AI trace fields | | signoz_get_field_values | Get possible values for a field key | | signoz_list_alerts | List firing/silenced/inhibited Alertmanager alert instances (not rule definitions) | | signoz_list_alert_rules | List configured alert-rule summaries, including inactive/OK and disabled rules | | signoz_get_alert | Get one alert rule's full definition by id | | signoz_get_alert_history | Get one rule's firing or state-transition history | | signoz_create_alert | Create a v2alpha1 threshold, PromQL, or anomaly alert with direct or policy routing | | signoz_update_alert | Fully replace an existing alert rule by id | | signoz_delete_alert | Permanently delete a confirmed alert rule by UUIDv7 id | | signoz_list_dashboards | List tenant-dashboard summaries and discover UUIDs | | signoz_get_dashboard | Get one dashboard's full layout, variables, panels, and queries | | signoz_create_dashboard | Create a custom multi-panel dashboard | | signoz_update_dashboard | Fully replace a fetched dashboard while preserving unrequested fields | | signoz_patch_dashboard | Apply a partial RFC 6902 JSON Patch without resending the whole dashboard | | signoz_delete_dashboard | Permanently delete a confirmed dashboard by id | | signoz_import_dashboard | Create a dashboard from a known curated template path | | signoz_list_dashboard_templates | Search curated templates and discover an import path | | signoz_list_services | List APM services with trace activity in a time range | | signoz_get_service_top_operations | Get ranked operations for one traced service | | signoz_list_views | List saved Explorer views for traces/logs/metrics/Cost Meter and discover UUIDs | | signoz_get_view | Get one saved Explorer view's complete definition by id | | signoz_search_docs | Find ranked official-doc matches when no exact page is selected | | signoz_fetch_doc | Fetch one known official-doc page or heading as Markdown | | signoz_create_view | Save one reusable Explorer query spec | | signoz_update_view | Fully replace a fetched saved view while preserving unrequested fields | | signoz_delete_view | Permanently delete a confirmed saved view by id | | signoz_aggregate_logs | Aggregate log statistics and grouped or top-N breakdowns | | signoz_search_logs | Return individual log records matching filters | | signoz_aggregate_traces | Aggregate span or per-AI-trace statistics and grouped or top-N breakdowns | | signoz_search_traces | Return span rows or one row per trace (including AI traces), or discover trace IDs | | signoz_get_trace_details | Get one known trace with all spans and hierarchy | | signoz_get_ai_pricing | List AI model prices, or models seen in the last hour with no price | | signoz_list_ai_attribute_mappings | List the mapping groups that turn vendor AI span attributes into gen_ai.* keys | | signoz_test_ai_attribute_mapping | Run sample spans through the AI attribute mappings without saving anything | | signoz_execute_builder_query | Query Builder v5 requests the dedicated tools cannot express | | signoz_list_notification_channels | List channel IDs, names, and display names without provider settings | | signoz_get_notification_channel | Get all provider-specific settings for one channel by ID | | signoz_create_notification_channel | Create a notification channel | | signoz_update_notification_channel | Fully replace a fetched channel's config | | signoz_delete_notification_channel | Permanently delete a confirmed channel by ID |

For detailed usage and examples, see the full documentation.

Resource deep links: the resource read tools (signoz_list_dashboards, signoz_get_dashboard, signoz_list_alerts, signoz_list_alert_rules, signoz_get_alert, signoz_list_services, signoz_search_traces, signoz_get_trace_details) and the dashboard write tools (signoz_create_dashboard, signoz_update_dashboard, signoz_patch_dashboard, signoz_import_dashboard) include a webUrl field when the request carries a SigNoz instance URL: an absolute deep link to the resource in the SigNoz web UI (per result row for signoz_search_traces). The MCP server discovers the browser base from each SigNoz backend's global.external_url. API requests keep using the request's backend URL. See Browser links for self-hosted SigNoz.

Agent Routing Guidance

Use signoz_search_docs for topical discovery when no exact documentation page is selected, then signoz_fetch_doc for the chosen page or heading. Use live data tools for tenant telemetry, alert state, dashboards, saved views, and notification channels.

Docs tools use the same authentication path as other MCP tools.

Available Resources

| Resource | Read when you need | |---|---| | signoz://alert/instructions | Alert schemas, fields, thresholds, evaluation, and notification workflow | | signoz://alert/examples | Alert payloads from the SigNoz OpenAPI spec (threshold, formula, PromQL, anomaly, tiered routing, notification settings) plus a Cost Meter budget example | | signoz://dashboard/instructions | Dashboard fields, variables, chaining, and layout | | signoz://dashboard/widgets-instructions | Panel choices and query-specific guides | | signoz://dashboard/widgets-examples | Panel examples and validation patterns | | signoz://dashboard/list-filter-guide | signoz_list_dashboards filter DSL: grammar, per-key operators, and examples | | signoz://dashboard/patch-instructions | signoz_patch_dashboard JSON Patch recipes and exact paths (add/edit/move/remove a panel, query, variable) | | signoz://dashboard/examples | Dashboard payloads from the SigNoz OpenAPI spec: create bodies, a full replacement, and JSON Patch arrays | | signoz://dashboard/query-builder-example | Dashboard Query Builder aggregations, filters, legends, and functions | | signoz://promql/instructions | PromQL widgets or alerts, especially dotted OTel metric names | | signoz://dashboard/clickhouse-schema-for-logs | Bundled logs schema snapshot for dashboard SQL | | signoz://dashboard/clickhouse-logs-example | Raw ClickHouse logs widget patterns | | signoz://dashboard/clickhouse-schema-for-metrics | Bundled metrics schema snapshot for dashboard SQL | | signoz://dashboard/clickhouse-metrics-example | Raw ClickHouse metrics widget patterns | | signoz://dashboard/clickhouse-schema-for-traces | Bundled traces schema snapshot for dashboard SQL | | signoz://dashboard/clickhouse-traces-example | Raw ClickHouse traces widget patterns | | signoz://logs/query-builder-guide | Logs Query Builder v5 JSON or unfamiliar log fields | | signoz://traces/query-builder-guide | Traces Query Builder v5 JSON or unfamiliar trace fields | | signoz://ai/query-builder-guide | AI agent and LLM queries: when to set queryType: builder_ai_query, per-trace cost, token, and call-count keys, caveats, and examples | | signoz://metrics-aggregation-guide | Metric aggregations, formulas, grouping, limits, and Cost Meter queries | | signoz://query-builder/examples | query_range requests from the SigNoz OpenAPI spec, per query type and request type for signoz_execute_builder_query | | signoz://notification-channel/examples | Every notification channel kind, its config.spec fields, and a worked payload per kind | | signoz://view/instructions | Saved view fields, the v2 typed spec, and read-before-replace workflow | | signoz://view/examples | Saved-view payloads from the SigNoz OpenAPI spec for logs, traces, metrics, and Cost Meter, plus a replacement body | | signoz://docs/sitemap | Indexed official-doc catalog and page URLs |

Resource Template Migration

The live signoz://dashboard/{id}/summary and signoz://alert/{id}/summary resource templates are retired. resources/templates/list now returns an empty catalog. Use signoz_get_dashboard for a dashboard definition. For the former alert summary, call signoz_get_alert, then signoz_get_alert_history; omit the time range for the same six-hour window and set limit: 10 and order: "desc" for the closest history result.

Parameter Reference

signoz_get_org_overview

Get the current status and overall posture of the SigNoz deployment before drilling into exact resources. data.sourceStats is the authoritative complete flat bag containing every key and value reported by the deployment stats endpoint, including current and future fields. Typed convenience projections cover telemetry freshness and volume, infrastructure presence, dashboards, alert rules and runtime, notification channels, saved views, log pipelines, cloud integrations, users, authentication, service accounts, roles, licensing, and configuration.

  • Parameters: no task parameters; like every tool, it accepts non-required searchContext for MCP observability.
  • Authoritative source: sourceStats preserves every successfully decoded entry from the upstream data object under its original dotted key. Use the grouped fields for convenient interpretation and sourceStats when exact backend coverage or a newly introduced field matters. Counts are deployment aggregates; use signoz_list_dashboards, signoz_list_alert_rules, signoz_list_notification_channels, or signoz_list_views for exact inventories; signoz_list_metrics for metric names; signoz_list_alerts for current alert instances; and signoz_search_logs, signoz_search_traces, or signoz_query_metrics for time-windowed or per-service data.
  • Missing fields: a key absent from sourceStats was not reported by the upstream collector and must not be interpreted as zero. The endpoint can return a partial HTTP 200 when an individual collector fails. In typed projections, a missing group total produces available: false; a reported zero produces available: true. Expected missing or invalid projection fields set metadata.projectionPartial and add an incompleteGroups entry with affected output paths, reason, next action, and exact fallback tools where available. An invalid projection value is still retained unchanged in sourceStats and named in invalidProjectionFields.
  • Cloud-integration completeness: cloudIntegrations.sourceAvailability reports whether both current AWS/Azure provider counts were reported. Each provider has its own dataAvailable; an absent provider count is never converted to zero. If neither provider is reported, source availability is unavailable without setting overall metadata.projectionPartial; this can mean cloud integrations are unsupported/edition-gated or both provider queries failed, so do not interpret it as “no cloud integrations configured.” If exactly one is reported, source availability is partial and the missing provider receives non-recursive recovery guidance. connectedAccounts means a non-removed account with an account ID and at least one agent report, not a recent check-in or proof that an integration service is enabled.
  • Feature flags: featureFlags.flags lists every flag from GET /api/v2/features with its name, kind, stage, description, and the resolvedValue in effect for this org, sorted by name. Some flags change how data is stored or queried, such as use_json_body for JSON log bodies. If SigNoz does not report them, featureFlags.available is false and metadata.incompleteGroups has a featureFlags entry; treat every flag as unknown, not off.
  • Projection metadata: reportedStatCount is the number of authoritative entries in sourceStats; projectedStatCount counts entries also represented in typed groups; and unprojectedStatCount counts entries available only in sourceStats, including future fields. projectionPartial, incompleteGroups, and invalidProjectionFields describe only typed-projection gaps; they do not indicate data was removed from sourceStats or claim endpoint-wide completeness.

signoz_list_metrics

Discover metric names and catalog metadata such as type, temporality, unit, and monotonicity. Use signoz_query_metrics for values or trends. This list has a limit but no offset pagination.

  • Parameters:
- searchText (optional) - Filter metrics by name substring. Names separate words with dots or underscores (system.cpu.time, http_server_duration), so search one word, such as cpu or memory - limit (optional) - Maximum number of metrics to return (default: 50) - timeRange (optional) - Relative range: 30m, 1h, 6h, 24h, 7d (default: 1h; ignored when both start and end are provided) - start/end (optional) - Unix ms timestamps. When both are provided, they override timeRange. - source (optional) - Data-source filter. Use "meter" to list Cost Meter metrics, the usage/billing metrics SigNoz meters on (currently telemetry ingestion volume); omit for the default metrics store - Completeness note: the response appends a note reporting hasMore (inferred from returnedRows == limit) so a limit-truncated list is never mistaken for the full set; narrow with searchText for more specificity

signoz_query_metrics

Query a known metric for values, trends, breakdowns, or formulas. The tool applies metric-aware defaults and auto-fetches omitted metadata; call it directly when metricName is known. Use signoz_list_metrics only to discover a name or inspect catalog metadata.

  • Parameters:
- metricName (required) - Metric name to query - metricType (optional) - gauge, sum, histogram, exponential_histogram, summary (auto-fetched if absent) - isMonotonic (optional) - Boolean (or the strings "true"/"false"); auto-fetched if absent. An invalid value is rejected rather than silently treated as false - temporality (optional) - cumulative, delta, unspecified (auto-fetched if absent) - timeAggregation (optional) - Aggregation within each series per time bucket (defaulted by type when omitted; SigNoz validates the combination) - spaceAggregation (optional) - Aggregation across series (defaulted by type when omitted; percentiles are histogram-only). Summary metrics need both aggregations set - groupBy (optional) - Label names to group by, as an array or a comma-separated string. Metric labels hold resource and data-point attributes in one set, so names need no context prefix. An array item that is not a string is rejected with a coded error - filter (optional) - Filter expression. Pass the expression text, not {"expression": ...}, which is rejected with a coded error. Regex matches use REGEXP, not PromQL's =~; a =~ or !~ that SigNoz rejects comes back with that hint. The former query alias is rejected with a coded error that names filter - timeRange (optional) - Relative time range where unit is m/h/d (e.g. '30m', '1h', '6h', '7d'; default: '1h'; ignored when both start and end are provided) - start/end (optional) - Unix ms timestamps. When both are provided, they override timeRange. - stepInterval (optional) - Step in seconds (auto-calculated if omitted) - requestType (optional) - Response format. Enum: time_series (default), scalar. Unknown values are rejected. - reduceTo (required when requestType is scalar) - How to reduce each series to one value: last, max, min, avg, sum, count, median. It has no default; SigNoz rejects a scalar request without it. For a total count use timeAggregation: increase with reduceTo: sum - formula (optional) - Expression over named queries (e.g., "A / B * 100") - formulaQueries (optional) - Array of additional named metric queries for formula, or a JSON-encoded string of that array. The item schema is typed: name and metricName are required; metricType, isMonotonic, temporality, timeAggregation, spaceAggregation, reduceTo, groupBy (array or comma-separated string), and filter mirror the top-level parameters and are auto-fetched or defaulted the same way. - limit (optional) - Maximum number of groups (series) in the result (default: 100, max: 10000; higher values are clamped). With a formula, limit applies to the formula result; formula inputs are not limited - orderBy (optional) - Result order as , where the key is __result or a groupBy field (e.g. __result asc; default: __result desc) - having (optional) - Condition on the primary query's aggregated values, applied after grouping (e.g. __result > 0.5). With a formula it filters query A's series before the formula runs; SigNoz ignores a having on the formula result itself, so the tool never sends one there. SigNoz validates it - functions (optional) - Post-query transforms applied to each time_series result, as an array of {name, args} objects (or a JSON-encoded string). SigNoz returns scalar results unchanged, and the decisions note says so. Names such as cutOffMin, clampMax, absolute, runningDiff, ewma3, timeShift, and fillZero; SigNoz validates names and args - source (optional) - Data-source filter. Use "meter" to query Cost Meter data; omit for the default metrics store - Result bounds: standalone generated metric queries and formula results use limit: 100 with __result desc unless limit or orderBy says otherwise. Queries feeding a formula get no limit, because SigNoz applies input limits before formula evaluation and would drop groups from the result. The response decisions note reports the effective bounds. - Key-not-found errors: a filter referencing a key absent from this workspace's metrics metadata fails with recovery guidance in the error text plus a machine-readable missingKeys array in the structured error content

signoz_get_top_metrics

Return top 100 metrics ranked by ingested sample volume with pre-computed percentages. Use this to identify which metrics are driving the most ingestion volume and cost. Wraps POST /api/v2/metrics/treemap. Response fields: metricName, percentage (share of total sample volume), totalValue (absolute sample count).

  • Parameters:
- timeRange (optional) - Relative time range where unit is m/h/d (e.g. '1h', '24h', '3d', '7d', '30d'; default: '7d'; ignored when both start and end are provided). Start with 7d; if the query times out, retry with 3d, then 24h - start/end (optional) - Unix ms timestamps. When both are provided, they override timeRange - Completeness note: returns a fixed top 100 by ingested sample volume; the response appends a note flagging whether the list was truncated at that cap (hasMore)

signoz_check_metric_usage

Given a list of metric names, return which dashboards and alerts reference each one. Wraps /api/v3/metrics/dashboards?metricName=... and /api/v2/metrics/alerts?metricName=... per metric.

  • Parameters:
- metricNames (required) - Array of metric name strings to check (max 50 per call). Example: ["system.disk.io", "k8s.node.condition"]. For larger lists, split into batches of 50 and merge results.
  • Response: per metric, dashboards (list of dashboard names that reference the metric), alerts (list of alert names that reference the metric), error (non-empty when the lookup failed; do not treat the metric as unused in that case)
  • Limits: Maximum 50 metrics per call; 30-second overall timeout (partial results returned on expiry)

signoz_check_metric_cardinality

Return label/attribute keys for one metric with cardinality counts and sample values, sorted highest first. Samples help distinguish unbounded values such as UUIDs from bounded dimensions such as status codes. This tool does not show whether the metric is used; call signoz_check_metric_usage before recommending a drop.

  • Parameters:
- metricName (required) - Metric name to inspect. Example: k8s.container.memory_limit - timeRange (optional) - Relative time range where unit is m/h/d (e.g. '30m', '1h', '6h', '24h', '3d', '7d'; default: '7d'; ignored when both start and end are provided) - start/end (optional) - Unix ms timestamps. When both are provided, they override timeRange

signoz_list_alerts

Lists currently firing/silenced/inhibited alert instances from Alertmanager, not rule definitions. Use signoz_list_alert_rules for configured rules, signoz_get_alert with an id for one full rule definition, or signoz_get_alert_history for the state timeline.

  • Parameters:
- limit (optional) - Maximum number of alerts per page (default: 50) - offset (optional) - Number of results to skip for pagination (default: 0) - active / silenced / inhibited (optional) - Tri-state filters. Boolean (or the strings "true"/"false"). Omit to defer to the backend default (all states included). An invalid value is rejected rather than silently dropped - filter (optional) - Comma-separated alert-label comparisons using =, !=, =~ (regex), or !~ (negative regex), e.g. alertname="HighCPU",severity="critical" - receiver (optional) - Regex to filter alerts by receiver name

signoz_list_alert_rules

Lists configured alert-rule summaries from GET /api/v3/rules, including inactive/OK and disabled rules. SigNoz applies filter and states before paging, so finding rules by name, label, severity, or state doesn't need a walk through every page. Use signoz_get_alert for one full definition; use signoz_list_alerts for current Alertmanager instances.

  • Parameters:
- filter (optional) - Filter expression, at most 1024 characters. Keys: name (the rule title), severity, alert_type, rule_type, created_by, updated_by, and created_at or updated_at with RFC 3339 times. Any other key is a rule label, matched case-sensitively (cluster = 'prod'); labels. matches only the label. A bare word matches the name, description, or labels, ignoring case. Example: name CONTAINS 'High Response Time' AND severity IN ('critical', 'error') - states (optional) - Only rules in these states: firing, pending, recovering, inactive, nodata, or disabled, as an array or a comma-separated string - sort (optional) - Field to sort by: updated_at (default), created_at, name, state, or severity - order (optional) - asc or desc (default) - limit (optional) - Maximum number of rules to return per page (default: 50, max: 1000; higher values are clamped) - offset (optional) - Number of rules to skip for pagination (default: 0)

signoz_get_alert

Gets one alert rule's full definition (GET /api/v2/rules/{id}). Use signoz_list_alert_rules to discover IDs. Before signoz_update_alert, call this only when a complete current definition is not already available for the prepared operation; reuse a still-current result and preserve unchanged fields.

  • Parameters: id (required) - Alert rule ID (UUIDv7 on v2-capable servers).
  • Note: Response shape depends on the SigNoz server version. Post-#10997 servers return the canonical Rule type with createdAt/updatedAt/createdBy/updatedBy; older servers return GettableRule with createAt/updateAt/createBy/updateBy (no 'd').

signoz_list_dashboards

Lists paginated tenant-dashboard summaries (name, UUID, description, tags, timestamps). Use signoz_get_dashboard for panel and query definitions, and page by raising offset by limit until you have covered total before concluding a dashboard is absent.

  • Parameters:
- limit (default 50), offset (default 0) – offset-based pagination - filter (optional) – server-side filter DSL over dashboard metadata (name, description, tags, creator, timestamps, locked state) - sort (optional) – updated_at (default), created_at, or name - order (optional) – asc or desc (default desc)

Only source: user dashboards can be updated, patched, or deleted. source is not a server-side list-filter column; filter returned rows locally across pages when needed.

The filter DSL is a boolean expression of key operator value terms and bare free-text words joined with AND/OR/NOT and parentheses (e.g. name CONTAINS 'overview' AND locked = true). Read signoz://dashboard/list-filter-guide for the full grammar, the filterable keys with their operators, value formats, and worked examples; the list response also echoes the authoritative reserved-key set in reservedKeywords.

signoz_get_dashboard

Gets one known tenant dashboard's complete layout, variables, panels, and queries. Use signoz_list_dashboards to discover the UUID.

  • Parameters: id (required) - Dashboard UUID

signoz_create_dashboard

Creates a custom multi-panel dashboard. Use signoz_import_dashboard when a curated template fits, or signoz_create_view to save one Explorer query. Read signoz://dashboard/instructions, signoz://dashboard/widgets-instructions, and signoz://dashboard/widgets-examples before composing the payload.

  • Parameters:
- schemaVersion (required) – Must be "v6" - name (DNS-1123 label) or generateName: true to derive it from spec.display.name - tags (required) – Array of key/value tags (may be empty) - spec (required) – Perses spec: display, variables (array), panels (map keyed by panel id), layouts (array)

Static Markdown panels use signoz/TextPanel with queries: [], plus plugin.spec.mode: "markdown", text, presentation, and headerOptions. Include the panel's layout reference. Query-bearing panels still require one query; Text panels do not need a query dry run. Widget examples and patch instructions include both kinds. Area charts use signoz/AreaChartPanel with one time_series query; visualization.stack (none, normal, or percent) stacks grouped series, and chartAppearance.fillMode is solid or gradient. Dashboard inputs use canonical id; the legacy uuid input is rejected on the changed dashboard tools.

signoz_import_dashboard

Creates a dashboard from a curated template hosted in the SigNoz/dashboards repo (main branch). The server fetches the template JSON and creates the dashboard in one call.

When the relative template path is unknown, call signoz_list_dashboard_templates first. Pass its path, not a URL or absolute path.

  • Parameters:
- path (required) – Template path within the SigNoz/dashboards repo, e.g. hostmetrics/hostmetrics.json

signoz_list_dashboard_templates

Searches the bundled catalog of curated SigNoz dashboard templates and returns the matches as {"templates": [...], "total": N}, where each entry has id, title, path, description, category, and keywords. It does not list dashboards already created in the tenant; use signoz_list_dashboards for those.

  • Parameters:
- searchText (optional) – Words matched case-insensitively against each template's id, title, path, category, description, and keywords; a template must match every word, e.g. postgres or kubernetes pod. At most 2048 characters. Omit to return the full catalog.

signoz_update_dashboard

Fully replaces an existing dashboard. Fetch it with signoz_get_dashboard, take the data object out of that response, merge only the requested changes into it, and send that object's fields at the top level, preserving every other field. The {status, data} response envelope is not accepted as input. Use signoz_update_view for a saved Explorer query.

  • Parameters:
- id (required) – Dashboard id (the legacy uuid key is also accepted) - schemaVersion, name, tags, spec – the complete post-update state (see the tool's JSON Schema)

signoz_patch_dashboard

Applies an RFC 6902 JSON Patch to a dashboard: a partial update without re-sending the entire dashboard. Prefer this over signoz_update_dashboard for targeted edits (rename, add/edit one panel or query, tweak a variable). Read signoz://dashboard/patch-instructions for worked recipes and exact paths; notably, adding a panel needs two ops (the panel plus its grid item) or it won't render.

  • Parameters:
- id (required) – Dashboard id (the legacy uuid key is also accepted) - patch (required) – Array of {op, path, value} operations; paths are JSON Pointers into the dashboard's postable shape, e.g. /spec/display/name, /spec/panels/, /spec/layouts/0/spec/items/-, /tags/-

signoz_list_services

Lists APM services with trace activity in a time range, sorted by service name and paginated. Absence means no trace activity in that window, not that the same service.name never appears in logs; use signoz_get_field_values with signal="logs" for log values.

  • Parameters:
- timeRange (optional) - Relative time range where unit is m/h/d (e.g. '30m', '1h', '6h', '7d'; defaults to last 6 hours; ignored when both start and end are provided) - start (optional) - Start time in unix milliseconds (defaults to 6 hours ago). - end (optional) - End time in unix milliseconds (defaults to now) - limit (optional) - Maximum services per page (default: 50, max: 1000; higher values are clamped) - offset (optional) - Number of results to skip for pagination (default: 0)

signoz_get_service_top_operations

Gets the built-in operation table for one traced service, ranked by p99 latency with each operation's p50, p95, p99, call count, and error count. Use signoz_aggregate_traces for custom aggregation, grouping, time series, cross-service comparison, or arbitrary trace filters.

  • Parameters:
- service (required) - Exact traced service name, typically from signoz_list_services - timeRange (optional) - Relative time range where unit is m/h/d (e.g. '30m', '1h', '6h', '7d'; defaults to last 6 hours; ignored when both start and end are provided) - start (optional) - Start time in unix milliseconds (defaults to 6 hours ago). - end (optional) - End time in unix milliseconds (defaults to now) - tags (optional) - JSON-encoded TagQueryParam array passed as a string, for example [{"key":"http.method","tagType":"SpanAttribute","operator":"In","stringValues":["GET"]}]; omit for no tag filter

signoz_get_alert_history

Gets one configured rule's firing or state-transition history. Defaults to the last 6 hours. Use state and filter to narrow results. For the next page, pass data.nextCursor as cursor and repeat the original filters, time range, and order.

The response is { "status": "success", "data": { "items": [...], "total": , "nextCursor": "" } }; nextCursor is omitted on the final page.

  • Parameters:
- id (required) - Alert rule ID from signoz_list_alert_rules - timeRange (optional) - Relative time range where unit is m/h/d (e.g. '30m', '1h', '6h', '7d'; defaults to last 6 hours; ignored when both start and end are provided) - start (optional) - Start timestamp in unix milliseconds (defaults to 6 hours ago). - end (optional) - End timestamp in unix milliseconds (defaults to now) - state (optional) - Filter by alert state: inactive, pending, recovering, firing, nodata, or disabled (omit for all transitions) - filter (optional) - SigNoz query-builder expression over timeline labels. Combine conditions with AND, OR, and parentheses; quote strings with single quotes. Example: severity = 'critical' AND (team = 'payments' OR service.name = 'checkout'). To discover keys, first call without a filter and inspect data.items[].labels[].key.name. The backend-shaped filterExpression alias remains accepted for compatibility, but filter is canonical. - cursor (o

... (README truncated for length)

Chat with me