Install
$ agentstack add skill-signoz-agent-skills-signoz-managing-views ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Managing Saved Views
Create, read, update, and delete SigNoz saved Explorer views via the SigNoz MCP server. A saved view is a reusable snapshot of an Explorer query on the Logs, Traces, Metrics, or Cost Meter page — name + filters + panel type, scoped to one sourcePage. They are not dashboards and not alerts.
This skill covers the full CRUD surface in one place because the operations share the same schema, the same identity model (UUID per view), and the same prerequisite resources. The only operation with real blast radius is delete, and update has a sharp edge (full-body replace) — both get explicit guards below.
Prerequisites
This skill calls SigNoz MCP server tools (signoz_create_view, signoz_list_views, signoz_get_view, signoz_update_view, signoz_delete_view, signoz_get_field_keys, signoz_get_field_values). Before running the workflow, confirm the signoz_* tools are available. If they are not, run signoz-mcp-setup first to initialize or repair the MCP connection. Do not fall back to raw HTTP calls or fabricate view payloads without the MCP tools.
When to use
Use this skill when the user wants to:
- Create a saved view from a current or described Explorer query.
- List / find existing views (by
sourcePage, name, or category). - Inspect a single view's filter or panel type.
- Update a view — rename, recategorize, or change its filter,
panel type, or aggregations.
- Delete a view that is no longer useful.
Do NOT use when the user wants to:
- Build a dashboard panel →
signoz-creating-dashboards/
signoz-modifying-dashboards.
- Run an ad-hoc Explorer query without saving it →
signoz-generating-queries. - Create or change an alert rule →
signoz-creating-alerts.
Schema reference
Read both resources BEFORE composing any create or update payload. Do not hand-compose a compositeQuery from memory — the correct schema is not the legacy builder.queryData format; it is the v5 spec described in these resources. Sending a legacy payload causes a silent HTTP 400.
Read both MCP resources by URI using your client's resource-read mechanism:
signoz://view/instructions— SavedView field reference,sourcePage
rules, the GET-then-PUT update flow, the minimal create body.
signoz://view/examples— round-tripped payloads (traces list, logs list,
metrics graph, and a Cost Meter graph) you can adapt verbatim.
The server returns HTTP 400 on legacy v3/v4 fields (builder, promql, unit, top-level id, queryFormulas, queryTraceOperator) — the failure mode is silent for the user, so reading the resources first is mandatory, not optional.
Operation flows
Create a view
- Resolve
sourcePage— must be exactly one oftraces,logs,
metrics, meter. If the user's intent is ambiguous ("save this query"), ask which Explorer they mean. It cannot be inferred from filter strings alone. Use meter for Cost Meter (usage / billing) views — it is a distinct Explorer page from metrics, even though the query runs on the metrics signal (see Step 4).
- Read the schema resources. Read both
signoz://view/instructions
and signoz://view/examples using your client's resource-read mechanism before composing any payload. Do not skip this step even if you think you know the schema — the legacy builder.queryData format is rejected with HTTP 400.
- Build the query using
signoz-generating-queries— mandatory. Use
the Skill tool to invoke signoz-generating-queries. The sub-skill handles field discovery, type checking, and live-data validation in one pass — adapting an example payload from signoz://view/examples or running a bare signoz_search_traces call skips the field-type checks and service-name resolution that catch silent 400s before they become permanent bad views. Skipping it means a malformed filter becomes a saved view that must be deleted and recreated. For a meter view, tell signoz-generating-queries it's a Cost Meter query (source=meter) so discovery hits the meter store, not the default one. Retain the exact query argument from its successful signoz_execute_builder_query validation call, then translate it explicitly:
``text execution query.compositeQuery.queries -> saved compositeQuery.queries ``
Build the top-level compositeQuery argument to signoz_create_view as { "queryType": "builder", "panelType": "", "queries": }. Copy the queries array losslessly, but do not copy the execution-only envelope fields schemaVersion, start, end, requestType, formatOptions, or variables; do not put a query key or a second nested compositeQuery inside the saved object. Choose panelType from the saved-view intent rather than inventing it from the execution envelope. The copied queries must retain every positive spec.limit and v5 spec.order entry losslessly. Never translate them to dashboard orderBy. Raw/list views use 100 rows (logs: timestamp/id desc; traces: timestamp desc); standalone aggregate views and formula results use 100 groups. Builder queries referenced by a formula use 10000 because their limits are applied before evaluation. Order by the primary aggregation or __result desc as appropriate. Time-series top-N ranks groups over the whole selected window and can omit a short-lived local spike.
- Enforce the signal rule in every
builder_queryspec.
- For
traces/logs/metrics:signal == sourcePage. A
sourcePage:"traces" view with signal:"logs" is a server-side error.
- For
meter(Cost Meter):signal:"metrics"andsource:"meter"—
a Cost Meter view is queried on the metrics signal against the meter store. Omitting source:"meter" silently queries the default metrics store; setting source:"meter" on a non-meter sourcePage is rejected.
- Mandatory pre-save sample fetch. Probe with the exact filter
from compositeQuery.queries[0].spec against the destination signal:
sourcePage=traces→signoz_search_traceswithlimit=1sourcePage=logs→signoz_search_logswithlimit=1sourcePage=metrics→signoz_query_metricswith the
metricName from spec.aggregations[0].metricName plus the same filter, timeRange=1h, requestType=scalar. Repeat per metric query if the view has multiple. The tool requires metricName — a filter-only probe is not supported.
sourcePage=meter→signoz_query_metricswith themetricName
from spec.aggregations[0].metricName, source=meter, the same filter, timeRange=24h (Cost Meter rolls up hourly, so a 1h window can be a single partial bucket), requestType=scalar.
Required even if Step 3 ran cleanly: the sub-skill validates the query it authored, not whatever you persist after edits or lifts. Empty → save anyway / revise / abort. Autonomous mode without authorization to persist empty views: abort and escalate.
- Preview before writing — this step is not optional. Before calling
signoz_create_view, show the user a summary: name, sourcePage, panelType, the full filter expression, and the Step 5 probe result ("sample fetch: N rows in last 1h" — for a meter view the probe window is 24h, so report it as such). For a human in the loop, wait for confirmation. For an autonomous agent, log the preview and proceed.
- Call
signoz_create_view. The server populatesid,
createdAt/By, updatedAt/By — never send those.
List or find views
signoz_list_views requires a sourcePage. If the user did not specify one and is searching by name, call it once per page (traces, logs, metrics, meter) and merge — do not guess. Use the name and category parameters for server-side partial-match filtering when the user gives a substring; do not fetch everything and grep client-side.
The response paginates. Always check pagination.hasMore before concluding a view does not exist. Default page size is 50; pass offset = pagination.nextOffset to continue. A view is only confirmed missing for a given sourcePage once you have walked pages until hasMore = false. As long as hasMore = true, keep paginating — there is no page-count cap.
Get a single view
Use signoz_get_view with the UUID. The returned data object is the canonical SavedView shape — it is what you pass back to signoz_update_view. Treat that data as the source of truth, not whatever the user described from memory.
Update a view (GET-then-PUT)
signoz_update_view is a full-body replace (HTTP PUT upstream). Sending a partial body wipes the unspecified fields. The flow:
signoz_get_viewwith the view'sid→ returns
{ "status": "success", "data": { ...SavedView... } }.
- Take the
dataobject. Strip server-populated fields (id,
createdAt, createdBy, updatedAt, updatedBy) — the MCP server strips them for you, but omitting them up front makes the diff readable.
- If the update changes
compositeQuery(new filter, different panel
type, different aggregation), invoke signoz-generating-queries to build and validate the new query before proceeding. Do not hand-edit compositeQuery from the user's description — the same Step 4 signal rule applies (including the meter case: signal:"metrics" + source:"meter"), and panelType changes often imply a stepInterval change too. For a meter view, tell signoz-generating-queries it is a Cost Meter query (source=meter) so it discovers and validates against the meter store. Derive the replacement saved compositeQuery from the successful execution query using the same explicit translation as Create: copy only query.compositeQuery.queries, then add queryType:"builder" and the intended panelType. Exclude schemaVersion, start, end, requestType, formatOptions, and variables. For pure metadata tweaks (rename, recategorize), skip this step and do not touch compositeQuery.
- Modify only the field(s) the user asked to change.
- Mandatory pre-save sample fetch — when
compositeQuerychanged.
Run the 1-row probe from the Create flow's Step 5 against the new filter. Empty → save anyway / revise / abort. Skip only for pure metadata tweaks (rename, recategorize).
- Show a diff-style preview before writing. One line per changed
field: name: "slow-checkout" → "slow-checkout-p99". Explicitly note any fields that are unchanged (e.g. "compositeQuery: unchanged") and include the Step 5 probe result when compositeQuery changed. This prevents silent mistakes and gives the user a chance to catch a wrong target view. Wait for confirmation on any change to compositeQuery, since that changes what the view actually shows.
- Call
signoz_update_viewwith{ "id": "", "view": }.
Delete a view
Deletion is destructive and immediately removes the view from the shared list — any team member who had the view bookmarked will see it disappear. Depending on the host application, the user may be offered a one-click restore action shortly after the delete (the SigNoz Assistant captures a snapshot and exposes a restore action), but treat that as a recovery affordance, not a substitute for getting the delete right. Treat this like dropping a row from a shared table:
- List to locate. Call
signoz_list_viewsto find the view
by name. If sourcePage is unknown, search all four pages (traces, logs, metrics, meter).
- Get to confirm — mandatory. Call
signoz_get_viewwith the
UUID from step 1. Do NOT skip this step even when you got the UUID from a list result that looks correct. List results are paginated and a name match is not a UUID guarantee — signoz_get_view is the confirmation that the UUID maps to the view the user named. Never call signoz_delete_view on a UUID without a prior signoz_get_view confirming the matching name and sourcePage.
- Show and ask. Present the resolved view's name,
sourcePage, and
category, and explicitly ask for confirmation. Do not auto-confirm based on the original prompt, even an emphatic one — destructive operations get a fresh confirmation against the resolved target.
- Call
signoz_delete_view. Report success with the deleted
view's name (not just the UUID), so the user can recognize it.
For autonomous agents without a human in the loop: refuse delete unless the calling context has been explicitly authorized for destructive operations on saved views, and log the resolved view metadata before the call.
Guardrails
- **Mandatory pre-save sample fetch on create and on
compositeQuery
updates.** Step 5 of each flow runs a 1-row probe against the destination signal using the exact filter from the about-to-save payload. Skipping is equivalent to skipping get-before-delete. The Step 3 signoz-generating-queries delegation is necessary but not sufficient — it validates the query it authored, not the filter you persist after edits.
Cross-signal-lift footgun: field keys are signal-scoped. An attribute observed on metrics (e.g. oauth.error_code on a counter) may not exist on traces or logs for the same tenant, even when emitted by the same service. Lifting an attribute from a sibling dashboard panel, alert rule, or view that targets a different signal is the most common source of empty saved views. signoz_get_field_keys signal= is necessary but not sufficient — sparse emission still produces zero-result views. Only the sample fetch confirms. The destination signal equals sourcePage for traces/logs/metrics; for a meter view it is signal=metrics with source=meter (never signal=meter).
A saved view returning zero rows under its own filter is a permanent artifact in a shared workspace; the human preview can't tell from JSON that the filter won't match, and autonomous mode has no preview, so the sample fetch is the only safety net.
- Translate the execution envelope before saving. The executable query and
saved-view query intentionally have different outer shapes. Save exactly {queryType, panelType, queries} in the create compositeQuery argument or update view.compositeQuery, where queries comes from the validated execution query.compositeQuery.queries. Never copy the range, request, formatting, or variables envelope into a view.
Quick reference
| Operation | Tools called | Key guard | |-----------|-------------|-----------| | Create | read signoz://view/instructions + signoz://view/examples → signoz-generating-queries → sample fetch on exact filter → preview → signoz_create_view | Mandatory pre-save sample fetch; preview before write; no legacy fields | | List | signoz_list_views (× 4 if no sourcePage given: traces/logs/metrics/meter) | Check pagination.hasMore | | Get | signoz_get_view(id) | Returns canonical body for update | | Update | signoz_get_view → modify → sample fetch if compositeQuery changed → diff preview → signoz_update_view | Full-body replace; sample fetch when compositeQuery changes; diff preview required | | Delete | signoz_list_views → signoz_get_view → confirm → signoz_delete_view | Get-before-delete mandatory; fresh confirmation |
Common mistakes
| Mistake | Fix | |---------|-----| | Hand-composing compositeQuery from examples or memory (even after reading signoz://view/examples) | Use the Skill tool to invoke signoz-generating-queries — reading examples and validating with signoz_search_traces is not a substitute | | Copying the full executable query envelope into the saved compositeQuery | Copy only query.compositeQuery.queries, then construct the saved shape `{queryType:"bui
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: SigNoz
- Source: SigNoz/agent-skills
- License: MIT
- Homepage: https://signoz.io/docs/ai/agent-skills
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.