log10x-mcp 1.13.2 → 1.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -338
- package/build/index.js +6 -6
- package/build/index.js.map +1 -1
- package/build/lib/advisor/reporter-forwarders.d.ts +4 -4
- package/build/lib/advisor/reporter-forwarders.js +5 -5
- package/build/lib/advisor/reporter-forwarders.js.map +1 -1
- package/build/lib/advisor/reporter.d.ts +3 -3
- package/build/lib/advisor/reporter.js +2 -2
- package/build/lib/advisor/reporter.js.map +1 -1
- package/build/lib/agent-only.d.ts +1 -1
- package/build/lib/agent-only.js +1 -1
- package/build/lib/ai-prettify.d.ts +3 -4
- package/build/lib/ai-prettify.js +4 -5
- package/build/lib/ai-prettify.js.map +1 -1
- package/build/lib/anchor-suggestions.js +3 -3
- package/build/lib/anchor-suggestions.js.map +1 -1
- package/build/lib/api.d.ts +2 -2
- package/build/lib/api.js +4 -4
- package/build/lib/api.js.map +1 -1
- package/build/lib/auth-model.d.ts +1 -1
- package/build/lib/auth-model.js +1 -1
- package/build/lib/backend-fetch.d.ts +13 -1
- package/build/lib/backend-fetch.js +14 -1
- package/build/lib/backend-fetch.js.map +1 -1
- package/build/lib/concurrency.d.ts +26 -0
- package/build/lib/concurrency.js +42 -0
- package/build/lib/concurrency.js.map +1 -1
- package/build/lib/correlate.js +12 -3
- package/build/lib/correlate.js.map +1 -1
- package/build/lib/customer-metrics.js +1 -1
- package/build/lib/customer-metrics.js.map +1 -1
- package/build/lib/detectors/slot-aggregation.d.ts +2 -2
- package/build/lib/detectors/slot-aggregation.js +2 -2
- package/build/lib/drift.js +34 -30
- package/build/lib/drift.js.map +1 -1
- package/build/lib/env-config/types.d.ts +1 -1
- package/build/lib/env-config/types.js +1 -1
- package/build/lib/first-seen.js +14 -8
- package/build/lib/first-seen.js.map +1 -1
- package/build/lib/interactive-query.d.ts +44 -0
- package/build/lib/interactive-query.js +50 -0
- package/build/lib/interactive-query.js.map +1 -0
- package/build/lib/investigation-templates.js +1 -1
- package/build/lib/investigation-templates.js.map +1 -1
- package/build/lib/line-chart.d.ts +13 -8
- package/build/lib/line-chart.js +50 -41
- package/build/lib/line-chart.js.map +1 -1
- package/build/lib/metrics-backend.d.ts +4 -4
- package/build/lib/metrics-backend.js +20 -17
- package/build/lib/metrics-backend.js.map +1 -1
- package/build/lib/not-configured.js +1 -1
- package/build/lib/not-configured.js.map +1 -1
- package/build/lib/offload-status.d.ts +2 -2
- package/build/lib/pattern-descriptor.d.ts +17 -7
- package/build/lib/pattern-descriptor.js +28 -36
- package/build/lib/pattern-descriptor.js.map +1 -1
- package/build/lib/pattern-df.d.ts +136 -0
- package/build/lib/pattern-df.js +291 -0
- package/build/lib/pattern-df.js.map +1 -0
- package/build/lib/pattern-label.d.ts +17 -4
- package/build/lib/pattern-label.js +18 -6
- package/build/lib/pattern-label.js.map +1 -1
- package/build/lib/pattern-render.d.ts +3 -3
- package/build/lib/pattern-render.js +1 -1
- package/build/lib/poc-cache.d.ts +2 -2
- package/build/lib/poc-cache.js +2 -2
- package/build/lib/primitive-errors.js +2 -2
- package/build/lib/product-kb/chunker.js +185 -3
- package/build/lib/product-kb/chunker.js.map +1 -1
- package/build/lib/product-kb/search.d.ts +15 -4
- package/build/lib/product-kb/search.js +54 -22
- package/build/lib/product-kb/search.js.map +1 -1
- package/build/lib/resolve-env.d.ts +12 -3
- package/build/lib/resolve-env.js +14 -5
- package/build/lib/resolve-env.js.map +1 -1
- package/build/lib/resolve-pattern-hash.js +4 -4
- package/build/lib/resolve-pattern-hash.js.map +1 -1
- package/build/lib/retriever-api.js +7 -3
- package/build/lib/retriever-api.js.map +1 -1
- package/build/lib/retriever-diagnostics.js +1 -1
- package/build/lib/retriever-diagnostics.js.map +1 -1
- package/build/lib/siem/cloudwatch.js +16 -9
- package/build/lib/siem/cloudwatch.js.map +1 -1
- package/build/lib/siem/datadog.d.ts +1 -1
- package/build/lib/siem/datadog.js +1 -1
- package/build/lib/siem/deps/index.js +1 -1
- package/build/lib/siem/deps/index.js.map +1 -1
- package/build/lib/siem/deps/types.d.ts +2 -2
- package/build/lib/siem/deps/types.js +2 -2
- package/build/lib/siem/resolve.d.ts +3 -3
- package/build/lib/siem/resolve.js +3 -3
- package/build/lib/siem-s3-connector.d.ts +2 -2
- package/build/lib/siem-s3-connector.js +2 -2
- package/build/lib/text-crop.d.ts +43 -0
- package/build/lib/text-crop.js +62 -0
- package/build/lib/text-crop.js.map +1 -0
- package/build/lib/thresholds.d.ts +2 -0
- package/build/lib/thresholds.js +1 -0
- package/build/lib/thresholds.js.map +1 -1
- package/build/lib/tool-errors.js +6 -13
- package/build/lib/tool-errors.js.map +1 -1
- package/build/lib/top-patterns-extras.d.ts +4 -4
- package/build/lib/top-patterns-extras.js +4 -4
- package/build/lib/top-patterns-render.d.ts +10 -1
- package/build/lib/top-patterns-render.js +14 -6
- package/build/lib/top-patterns-render.js.map +1 -1
- package/build/product-kb/docs/apps/mcp/faq.md +2 -18
- package/build/product-kb/docs/apps/mcp/index.md +0 -38
- package/build/product-kb/docs/apps/mcp/install.md +46 -43
- package/build/product-kb/docs/apps/mcp/tools/costs/estimate-savings.md +29 -0
- package/build/product-kb/docs/apps/mcp/tools/index.md +1 -3
- package/build/product-kb/docs/apps/mcp/tools/resolution/resolve-batch.md +1 -3
- package/build/product-kb/docs/apps/retriever/deploy/index.md +4 -4
- package/build/product-kb/docs/apps/retriever/deploy/lambda.md +2 -2
- package/build/product-kb/docs/apps/retriever/faq.md +34 -0
- package/build/product-kb/docs/apps/retriever/query.md +13 -0
- package/build/product-kb/docs/faq/apps/mcp.md +2 -18
- package/build/product-kb/docs/faq/general.md +2 -2
- package/build/product-kb/docs/install/index.md +7 -7
- package/build/product-kb/docs/summary.md +0 -1
- package/build/tools/advise-install.d.ts +1 -1
- package/build/tools/advise-install.js +1 -1
- package/build/tools/advise-retriever.d.ts +0 -7
- package/build/tools/advise-retriever.js +0 -7
- package/build/tools/advise-retriever.js.map +1 -1
- package/build/tools/backfill-metric.js +1 -1
- package/build/tools/backfill-metric.js.map +1 -1
- package/build/tools/baseline.js +40 -18
- package/build/tools/baseline.js.map +1 -1
- package/build/tools/commitment-report.d.ts +0 -2
- package/build/tools/commitment-report.js +42 -15
- package/build/tools/commitment-report.js.map +1 -1
- package/build/tools/configure-engine.d.ts +34 -1
- package/build/tools/configure-engine.js +76 -13
- package/build/tools/configure-engine.js.map +1 -1
- package/build/tools/dependency-check.js +7 -7
- package/build/tools/dependency-check.js.map +1 -1
- package/build/tools/doctor.js +142 -93
- package/build/tools/doctor.js.map +1 -1
- package/build/tools/env-register.js +1 -1
- package/build/tools/env-register.js.map +1 -1
- package/build/tools/estimate-savings.js +41 -24
- package/build/tools/estimate-savings.js.map +1 -1
- package/build/tools/event-lookup.js +38 -27
- package/build/tools/event-lookup.js.map +1 -1
- package/build/tools/investigate.js +59 -41
- package/build/tools/investigate.js.map +1 -1
- package/build/tools/login-status.js +7 -4
- package/build/tools/login-status.js.map +1 -1
- package/build/tools/metric-overlay.js +62 -12
- package/build/tools/metric-overlay.js.map +1 -1
- package/build/tools/metrics-that-moved.js +46 -23
- package/build/tools/metrics-that-moved.js.map +1 -1
- package/build/tools/overflow-contents.d.ts +2 -3
- package/build/tools/overflow-contents.js +31 -26
- package/build/tools/overflow-contents.js.map +1 -1
- package/build/tools/pattern-detail.d.ts +37 -0
- package/build/tools/pattern-detail.js +133 -37
- package/build/tools/pattern-detail.js.map +1 -1
- package/build/tools/pattern-diff.js +18 -31
- package/build/tools/pattern-diff.js.map +1 -1
- package/build/tools/pattern-examples.d.ts +1 -1
- package/build/tools/pattern-examples.js +3 -3
- package/build/tools/pattern-examples.js.map +1 -1
- package/build/tools/pattern-mitigate.d.ts +2 -2
- package/build/tools/pattern-mitigate.js +10 -29
- package/build/tools/pattern-mitigate.js.map +1 -1
- package/build/tools/poc-from-siem.js +4 -1
- package/build/tools/poc-from-siem.js.map +1 -1
- package/build/tools/preview-filter.js +26 -14
- package/build/tools/preview-filter.js.map +1 -1
- package/build/tools/product-qa.js +10 -7
- package/build/tools/product-qa.js.map +1 -1
- package/build/tools/rank-by-shape-similarity.js +100 -46
- package/build/tools/rank-by-shape-similarity.js.map +1 -1
- package/build/tools/retriever-query.js +8 -6
- package/build/tools/retriever-query.js.map +1 -1
- package/build/tools/retriever-register.d.ts +1 -1
- package/build/tools/retriever-register.js +2 -2
- package/build/tools/retriever-register.js.map +1 -1
- package/build/tools/retriever-series.js +1 -1
- package/build/tools/retriever-series.js.map +1 -1
- package/build/tools/rotate-api-key.js +9 -0
- package/build/tools/rotate-api-key.js.map +1 -1
- package/build/tools/savings.js +46 -12
- package/build/tools/savings.js.map +1 -1
- package/build/tools/services.js +14 -5
- package/build/tools/services.js.map +1 -1
- package/build/tools/signin.js +10 -1
- package/build/tools/signin.js.map +1 -1
- package/build/tools/top-patterns.js +108 -37
- package/build/tools/top-patterns.js.map +1 -1
- package/build/tools/trend.js +29 -23
- package/build/tools/trend.js.map +1 -1
- package/build/tools/whats-changing.d.ts +4 -4
- package/build/tools/whats-changing.js +71 -63
- package/build/tools/whats-changing.js.map +1 -1
- package/build/tools/whats-new.js +27 -41
- package/build/tools/whats-new.js.map +1 -1
- package/package.json +1 -1
- package/build/product-kb/docs/apps/mcp/reference.md +0 -100
package/README.md
CHANGED
|
@@ -1,165 +1,37 @@
|
|
|
1
1
|
# Log10x MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Ask your AI assistant about log costs, log patterns, and incidents in plain English, and get structured answers backed by real per-pattern metrics. "Why did our log costs spike this week?", "what's driving payments-svc volume?", "pull the payment_retry events for acme-corp from Jan 15 to Apr 15." The server exposes the 10x platform to Claude and any MCP-compatible assistant as a set of tools.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
10x groups your logs by message type. The same lines repeat over and over with only the timestamp or request ID changing, so 10x collapses each flood of near-identical lines into one message type and ranks them by volume and cost. That is how the answers stay exact instead of best-effort clustering, no regex required.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
This server is open source under Apache-2.0. A Log10x product license (API key) unlocks the account-scoped tools; without one, the server boots read-only against a public demo dataset so the tools can be explored immediately.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## What you can ask
|
|
10
10
|
|
|
11
|
-
|
|
|
12
|
-
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
24
|
-
### Investigation, triage, and archive tools (v1.3)
|
|
25
|
-
|
|
26
|
-
| Tool | Answers | Tier |
|
|
27
|
-
|---|---|---|
|
|
28
|
-
| `log10x_investigate` | "Why is this spiking?" — single-call investigation: anchor resolution, trajectory shape (acute-spike vs drift), cross-pattern lag correlation, temporal-evidence chain with stat/lag/chain confidence sub-scores, drift cohort analysis, two-stage Retriever fallback, recommended next actions. Returns observations + suggestions, NOT verdicts — output framed as "strongest temporal evidence (lead by lag time, not proven cause)." Tags `threshold_basis: "unvalidated_default"` until the operator points `LOG10X_THRESHOLDS_FILE` at calibrated overrides. Surfaces log-only signals (pool saturation, cache evictions, retry amplification) that APM structurally cannot see. See [`docs/cross-pillar-primitives.md`](docs/cross-pillar-primitives.md) for the agent behavior contract. | Reporter |
|
|
29
|
-
| `log10x_resolve_batch` | "Triage these events" — paste a file / array / text dump of raw log lines and get per-pattern frequency, severity, variable concentration, and next-action suggestions. Runs via the Log10x paste endpoint; works at any tier including CLI-only. | None |
|
|
30
|
-
| `log10x_retriever_query` | "Get me the actual events" — direct retrieval from the Retriever archive by templateHash with JS filter expressions over event payloads. Queries the customer's own S3 via pre-computed Bloom filters. Answers forensic, audit, and out-of-retention retrieval. | Retriever |
|
|
31
|
-
| `log10x_backfill_metric` | "Create a new Datadog metric backfilled with 90 days of history" — pulls historical events from the Retriever, aggregates into a bucketed time series, emits to the destination TSDB with historical timestamps preserved. Datadog + Prometheus remote_write supported today. | Retriever |
|
|
32
|
-
|
|
33
|
-
### Cross-pillar correlation primitives
|
|
34
|
-
|
|
35
|
-
Three deterministic primitives that take a log-pattern anchor and customer Prometheus metric candidates, then answer "which metrics moved with this log pattern, when, and by how much." They compose into a cascade narrative: filter → rank → overlay.
|
|
36
|
-
|
|
37
|
-
| Tool | Answers | Tier |
|
|
38
|
-
|---|---|---|
|
|
39
|
-
| `log10x_metrics_that_moved` | "Of these N customer metrics, which ones moved with my log pattern?" — deterministic phase-gap filter. Returns `moved[]`, `not_moved[]`, `evaluation_failed[]`. | Reporter + customer Prometheus |
|
|
40
|
-
| `log10x_rank_by_shape_similarity` | "Of the metrics that moved, which match the anchor's shape best, and which moved first?" — Pearson + signed lag scan. Returns ranked candidates with `lag_seconds`, `lag_at_bound`, `anchor_phase_aligned`. | Reporter + customer Prometheus |
|
|
41
|
-
| `log10x_metric_overlay` | "Show me the two curves side by side." — aligned timeseries + deterministic peak facts (`peak_offset_seconds`, etc.). No Pearson, no tier — raw data. | Reporter + customer Prometheus |
|
|
42
|
-
|
|
43
|
-
**Designed for AI callers, not humans.** Every output carries a unified envelope: `status`, `threshold_basis`, `anchor_ref` echo, `query_count`, `total_latency_ms`, `backend_pressure_hint`, and a `human_summary` field the agent can paste to a human. `metric_ref` round-trips identically across the three tools — pass it from one output to the next input verbatim.
|
|
44
|
-
|
|
45
|
-
**Calibration honesty.** The default thresholds (15% phase gap, ±1800s lag search) are hand-picked from one synthetic chaos test, not calibrated against any real customer backend. Every tool tags `threshold_basis: "unvalidated_default"` until a caller-supplied override moves it to `caller_override`. Agents MUST NOT auto-mitigate based on uncalibrated findings. See [`docs/cross-pillar-primitives.md`](docs/cross-pillar-primitives.md) for the full agent behavior contract and the per-backend calibration playbook.
|
|
46
|
-
|
|
47
|
-
**Structural guards.** When the anchor doesn't have a real busy/quiet split, the tool refuses with `status: "anchor_no_phase_separation"` rather than producing nonsense. When the candidate set produces zero meaningful signal, the tool returns `status: "no_signal"` so the agent stops searching cleanly. Backend errors surface as a structured `PrimitiveError` envelope (`error_type`, `retryable`, `suggested_backoff_ms`, `hint`), not thrown strings.
|
|
48
|
-
|
|
49
|
-
All tools query `prometheus.log10x.com` (for Reporter-tier tools) over HTTPS, with the same `X-10X-Auth` header used by the rest of the Log10x stack. No log scanning; sub-second at any scale.
|
|
50
|
-
|
|
51
|
-
## ROI examples — three real flows
|
|
52
|
-
|
|
53
|
-
These are real round-trips against the Log10x demo environment, captured during development. Every tool call below is verbatim what the model would produce; outputs are abbreviated for the README.
|
|
54
|
-
|
|
55
|
-
### 1. "Why is checkout-svc cost up?" (`log10x_cost_drivers`)
|
|
56
|
-
|
|
57
|
-
**Prompt**: *"Why did checkout cost spike this week?"*
|
|
58
|
-
|
|
59
|
-
**Tool call**: `log10x_cost_drivers({ service: "cart", timeRange: "7d" })`
|
|
60
|
-
|
|
61
|
-
**Output** (abbreviated):
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
cart — $137 → $38K/wk (4 cost drivers)
|
|
65
|
-
|
|
66
|
-
#1 cart cartstore ValkeyCartStore $51 → $13K/wk INFO 13.3B events
|
|
67
|
-
#2 shipping service Post shipping... $34 → $12K/wk CRIT 1.6B events
|
|
68
|
-
#3 GetCartAsync called with userId $34 → $8.7K/wk 8.7B events
|
|
69
|
-
#4 AddItemAsync called with... $18 → $4.6K/wk 4.2B events
|
|
70
|
-
|
|
71
|
-
4 drivers = 49% of increase · 2442 other patterns
|
|
72
|
-
|
|
73
|
-
**Next actions**:
|
|
74
|
-
- call `log10x_investigate({ starting_point: 'cart_cartstore_ValkeyCartStore' })` to trace the cause of the $13K delta on this pattern.
|
|
75
|
-
- call `log10x_dependency_check({ pattern: '...' })` before muting or dropping — blast-radius safety.
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
The next-action hints in the output literally tell the model what to do next. No prompt engineering required.
|
|
79
|
-
|
|
80
|
-
### 2. "What's broken in payments-svc?" (`log10x_investigate`)
|
|
81
|
-
|
|
82
|
-
**Prompt**: *"Investigate kafka — there's an alert firing."*
|
|
83
|
-
|
|
84
|
-
**Tool call**: `log10x_investigate({ starting_point: "kafka", window: "1h" })`
|
|
85
|
-
|
|
86
|
-
**Output** (abbreviated 8-link causal chain):
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
## Investigation: kafka, last 1h
|
|
90
|
-
|
|
91
|
-
**Anchor**: cluster_metadata_Wrote_producer_snapshot... (resolved from service_name)
|
|
92
|
-
**Service**: kafka
|
|
93
|
-
**Inflection**: 2026-04-14T00:19:52Z UTC
|
|
94
|
-
**Shape**: acute spike
|
|
95
|
-
**Reporter tier**: edge
|
|
96
|
-
|
|
97
|
-
### Most likely root cause
|
|
98
|
-
|
|
99
|
-
Pattern: cluster_metadata_dir_tmp_kafka_logs_Rolled_new_segment...
|
|
100
|
-
Confidence: 43% (stat:1.00 lag:0.43 chain:1.00)
|
|
101
|
-
Why: peaked 300s before the anchor, magnitude 1.4× baseline.
|
|
102
|
-
|
|
103
|
-
### Causal chain
|
|
104
|
-
|
|
105
|
-
1. cluster_metadata_dir_tmp_kafka_logs_Rolled... — peaked T-300s
|
|
106
|
-
2. Successfully_wrote_snapshot_org_apache_kafka... — peaked T-300s
|
|
107
|
-
3. opentelemetry_javaagent_shaded_instrumentation... — peaked T-300s
|
|
108
|
-
... (8 links total, each with stat × lag × chain confidence sub-scores)
|
|
109
|
-
|
|
110
|
-
### Suggested verification commands
|
|
111
|
-
|
|
112
|
-
gh api /repos/<owner>/kafka/commits?since=...&until=...
|
|
113
|
-
kubectl get events -n kafka --since=Xm
|
|
114
|
-
dog metric query "avg:trace.kafka.requests{*} by {resource_name}" --from ...
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
The full causal chain comes back in one tool call. The model doesn't need to compose. The verification commands are pre-substituted with the inflection timestamp so the user can paste them directly.
|
|
118
|
-
|
|
119
|
-
### 3. "Triage this Slack paste" (`log10x_resolve_batch`)
|
|
120
|
-
|
|
121
|
-
**Prompt**: *"My teammate dumped these 12 lines from order-processing-svc into Slack — what's happening?"*
|
|
122
|
-
|
|
123
|
-
**Tool call**: `log10x_resolve_batch({ source: "text", text: "..." })`
|
|
124
|
-
|
|
125
|
-
**Output** (abbreviated):
|
|
126
|
-
|
|
127
|
-
```
|
|
128
|
-
## Batch Triage
|
|
129
|
-
|
|
130
|
-
12 events, resolved into 3 distinct patterns. Templater wall time: 6.4s. Execution: Log10x paste endpoint.
|
|
131
|
-
|
|
132
|
-
**Severity mix**: INFO: 7 · ERROR: 4 · WARN: 1
|
|
133
|
-
|
|
134
|
-
### Top 3 patterns by interestingness
|
|
135
|
-
|
|
136
|
-
**#1 checkout_svc_tenant_acme_corp_order_status_failed_reason_payment_gateway** · 4 events (33% of batch) · interestingness 0.47
|
|
137
|
-
severity: ERROR
|
|
138
|
-
|
|
139
|
-
Variable concentration (top values within this batch):
|
|
140
|
-
- timestamp · 4 distinct · `1776067923000` 25%, `1776067925000` 25%, `1776067928000` 25%
|
|
141
|
-
- order · 4 distinct · `12347` 25%, `12349` 25%, `12352` 25%
|
|
142
|
-
|
|
143
|
-
**Next actions**:
|
|
144
|
-
- call `log10x_investigate({ starting_point: '...' })` for historical correlation (requires Reporter tier).
|
|
145
|
-
- call `log10x_retriever_query({ pattern: '...', filters: ["event.order === \"12347\""] })` to retrieve all historical events concentrated on order=12347 (requires Retriever tier).
|
|
146
|
-
- native Datadog follow-up: `dog log search '@order:"12347"' --from now-24h` — filters to the dominant variable concentration directly in the SIEM.
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
Every pattern is ranked by an interestingness score (severity-weighted); the dominant variable is identified; ready-to-paste next-action commands are pre-constructed for both Log10x tools and the customer's SIEM. The model just needs to relay the output and ask which path the user wants to take.
|
|
11
|
+
| You say | What happens |
|
|
12
|
+
|---|---|
|
|
13
|
+
| "Where do I start? Help me cut log costs." | A guided menu asks what you want (cut cost, investigate, install) and routes to the right next step, plus what's new and what changed. `log10x_start`, `log10x_whats_new`, `log10x_whats_changing` |
|
|
14
|
+
| "Sign me in." / "Who am I connected as?" | GitHub sign-in mints and stores an API key, and shows the environments your account can reach. `log10x_signin_start`, `log10x_login_status`, `log10x_create_env` |
|
|
15
|
+
| "Show me how to install this on my stack." | Paste-ready setup steps for your own pipeline, fetch-back wiring, and a recommended action per service. `log10x_advise_install`, `log10x_advise_retriever`, `log10x_configure_engine` |
|
|
16
|
+
| "Estimate savings on my data before I deploy." | A no-install savings report from a local log file or your existing log platform. `log10x_poc_from_local`, `log10x_poc_from_siem_submit`, `log10x_poc_from_siem_status` |
|
|
17
|
+
| "How much can I cut, and how much have I cut?" | Projected and realized savings with the per-pattern math behind every number. `log10x_estimate_savings`, `log10x_savings`, `log10x_commitment_report` |
|
|
18
|
+
| "What's driving my cost right now?" | The repeating message types and services driving volume and cost, and what moved week over week. `log10x_top_patterns`, `log10x_whats_changing`, `log10x_services` |
|
|
19
|
+
| "Why did payments-svc spike?" | A single-call investigation: timeline, correlated patterns, and the strongest temporal evidence, with confidence shown so nothing is presented as proven cause. `log10x_investigate`, `log10x_metrics_that_moved`, `log10x_metric_overlay` |
|
|
20
|
+
| "This message type is noise, cut it." | Sample, drop, compact, tier down, or offload a chosen message type, with examples and trend so the action is clear. `log10x_pattern_mitigate`, `log10x_pattern_examples`, `log10x_pattern_trend` |
|
|
21
|
+
| "Get me the actual events I offloaded." | Fetch the exact events back on demand from your own S3. `log10x_retriever_query`, `log10x_offload_add`, `log10x_retriever_register` |
|
|
22
|
+
| "Recognize more of my message types." | Build a custom symbol library from your own logs so the engine finds more savings. `log10x_compile`, `log10x_compile_link`, `log10x_compile_status` |
|
|
150
23
|
|
|
151
24
|
## Install
|
|
152
25
|
|
|
153
|
-
|
|
26
|
+
**Claude Code**
|
|
154
27
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
| 1.8.x | 1.0.21 (with `TENX_CONFIG`+`TENX_MODULES` overrides) | Earlier engines can run the MCP only if the user clones `log-10x/config` + `log-10x/modules` at the apps/mcp branches and points `TENX_CONFIG`/`TENX_MODULES` at them. |
|
|
28
|
+
```bash
|
|
29
|
+
claude mcp add --transport stdio --env LOG10X_API_KEY=your-api-key log10x -- npx -y log10x-mcp
|
|
30
|
+
```
|
|
159
31
|
|
|
160
|
-
|
|
32
|
+
Verify with `/mcp`. Omit the `--env` flag to run read-only against the public demo dataset.
|
|
161
33
|
|
|
162
|
-
|
|
34
|
+
**Claude Desktop**
|
|
163
35
|
|
|
164
36
|
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
|
|
165
37
|
|
|
@@ -177,210 +49,56 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
|
|
|
177
49
|
}
|
|
178
50
|
```
|
|
179
51
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
If `LOG10X_API_KEY` is omitted, the MCP boots in **demo mode** (read-only). Two flavors:
|
|
183
|
-
|
|
184
|
-
- **Your own demo data** — if you installed a Log10x engine with an anonymous demo license (the install wizard's `license_source: "demo"`, or you set `LOG10X_LICENSE_JWT=<jwt>`), the MCP queries the data *that engine* wrote, via the `/api/v1/demo/*` routes with the same license. The MCP reuses the demo license it minted (persisted at `~/.log10x/demo-license.json`), so reads and writes share one demo tenant. Demo queries are bounded to the **last 3 hours** and rate limited; `query_ai` is unavailable.
|
|
185
|
-
- **Shared sample data** — with no key and no demo license at all, the MCP falls back to the public Log10x demo env (the same sample data the console "Try Live Demo" shows).
|
|
52
|
+
**Cursor, Windsurf, and other MCP clients**
|
|
186
53
|
|
|
187
|
-
|
|
54
|
+
Add an `mcpServers` entry of the same shape: `"command": "npx"`, `"args": ["-y", "log10x-mcp"]`, and `LOG10X_API_KEY` in `env`. Omit the key to run read-only demo mode.
|
|
188
55
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
```bash
|
|
192
|
-
claude mcp add --transport stdio \
|
|
193
|
-
--env LOG10X_API_KEY=your-api-key \
|
|
194
|
-
log10x -- npx -y log10x-mcp
|
|
195
|
-
```
|
|
56
|
+
Full setup walkthrough: https://doc.log10x.com/apps/mcp/
|
|
196
57
|
|
|
197
|
-
|
|
58
|
+
## Credentials
|
|
198
59
|
|
|
199
|
-
|
|
60
|
+
Account-scoped tools need a Log10x API key. Two ways to get one:
|
|
200
61
|
|
|
201
|
-
|
|
62
|
+
- **GitHub sign-in:** run `log10x_signin_start`, complete the flow, then `log10x_signin_complete`. The key is stored for you. `log10x_login_status` shows who you're connected as.
|
|
63
|
+
- **Environment variable:** set `LOG10X_API_KEY` directly.
|
|
202
64
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
Even with the MCP installed, agents sometimes miss it for natural-language questions ("am I logged in?" → `which log10x` shell probe instead of `log10x_login_status`). Project rules nudge the agent toward MCP-first tool selection. Drop a snippet that says **"the log10x MCP IS the surface; call its tools before shelling out"** plus a few trigger-phrase mappings into:
|
|
206
|
-
|
|
207
|
-
| Client | Rule file |
|
|
208
|
-
|---|---|
|
|
209
|
-
| Cursor | `.cursor/rules/log10x.mdc` (with `alwaysApply: true` frontmatter) |
|
|
210
|
-
| Claude Code | `CLAUDE.md` (workspace root) |
|
|
211
|
-
| Windsurf | `.windsurfrules` (workspace root) |
|
|
212
|
-
| GitHub Copilot Chat | `.github/copilot-instructions.md` |
|
|
213
|
-
| Claude Desktop | (no project-rule mechanism — relies on manifest descriptions) |
|
|
214
|
-
|
|
215
|
-
Full canonical text and explanation in [doc.log10x.com/install/mcp-server/#help-your-ai-find-the-tools](https://doc.log10x.com/install/mcp-server/#help-your-ai-find-the-tools).
|
|
216
|
-
|
|
217
|
-
## Get your credentials
|
|
218
|
-
|
|
219
|
-
Two options:
|
|
220
|
-
|
|
221
|
-
1. **Sign in via GitHub**: launch the MCP without `LOG10X_API_KEY` set, then ask the LLM to "sign in to Log10x". `log10x_signin` runs the GitHub Device Flow, mints an API key, and saves it to `~/.log10x/credentials` — works across every MCP host on the same machine.
|
|
222
|
-
2. **Console**: log into [console.log10x.com](https://console.log10x.com) → Profile → API Settings → copy your API Key. (Optional: set your **Analyzer Cost** ($/GB for your SIEM) on that page — the server reads it automatically.)
|
|
223
|
-
|
|
224
|
-
## Multi-environment access
|
|
225
|
-
|
|
226
|
-
Two patterns, depending on what you need:
|
|
227
|
-
|
|
228
|
-
**Same account, multiple envs** (e.g., your account owns prod, staging, dev). Nothing special to configure — the MCP autodiscovers all envs your account can reach via `GET /api/v1/user`. Pass `environment: "<nickname>"` on any tool call, or just say "check staging costs" and the LLM routes there. The chosen env sticks for follow-up calls until you switch again.
|
|
229
|
-
|
|
230
|
-
**Multiple accounts** (e.g., a consultant accessing customer envs). The Log10x backend supports per-env permission sharing (OWNER / WRITE / READ). Have the env owner grant your account READ on their env from the console — it then shows up in your `/api/v1/user` response automatically, no client-side multi-credential setup needed. If you genuinely need parallel access from distinct API keys, register one MCP server per account in your host config with distinct server names.
|
|
231
|
-
|
|
232
|
-
## Usage
|
|
233
|
-
|
|
234
|
-
You never call tools directly. Just ask your AI assistant a question in plain English:
|
|
235
|
-
|
|
236
|
-
| You say | The AI calls |
|
|
237
|
-
|---|---|
|
|
238
|
-
| "Why did our log costs spike this week?" | `log10x_cost_drivers` |
|
|
239
|
-
| "What is this Payment Gateway Timeout pattern?" | `log10x_event_lookup` |
|
|
240
|
-
| "How much are we saving with the pipeline?" | `log10x_savings` |
|
|
241
|
-
| "When did the checkout service start spiking?" | `log10x_pattern_trend` |
|
|
242
|
-
| "What services are we monitoring?" | `log10x_services` |
|
|
243
|
-
| "How do I drop this in Datadog?" | `log10x_exclusion_filter` |
|
|
244
|
-
| "Anything depending on this before I drop it?" | `log10x_dependency_check` |
|
|
245
|
-
|
|
246
|
-
## Cost driver algorithm
|
|
247
|
-
|
|
248
|
-
When you ask about cost spikes, the server runs this algorithm:
|
|
249
|
-
|
|
250
|
-
1. **Query current window** — bytes per pattern for the selected timeframe
|
|
251
|
-
2. **Query baseline** — average of the 3 prior windows of the same size
|
|
252
|
-
3. **Compute delta** — `cost_this_period - cost_baseline` per pattern
|
|
253
|
-
4. **Apply gates** — a pattern is a cost driver when it passes both:
|
|
254
|
-
- Dollar floor: delta exceeds `$500/period`
|
|
255
|
-
- Contribution floor: delta is at least `5%` of the total service increase
|
|
256
|
-
5. **Sort by delta** descending
|
|
257
|
-
|
|
258
|
-
Example output:
|
|
259
|
-
|
|
260
|
-
```
|
|
261
|
-
cart — $103 → $13K/wk (3 cost drivers)
|
|
262
|
-
|
|
263
|
-
#1 cart cartstore ValkeyCartStore $51 → $6.4K/wk INFO 6.6B events
|
|
264
|
-
#2 GetCartAsync called with userId $34 → $4.3K/wk 4.2B events
|
|
265
|
-
#3 AddItemAsync called with userId $18 → $2.2K/wk 2.1B events
|
|
266
|
-
|
|
267
|
-
3 drivers = 98% of increase · 11 other patterns
|
|
268
|
-
```
|
|
65
|
+
**No key?** The server boots read-only against the public 10x demo dataset (the same sample data the website console shows), so analysis, discovery, and the install advisors all work out of the box. Mutating tools are disabled in this mode so shared demo state stays untouched. Set `LOG10X_DEMO_FALLBACK=off` to boot into pure POC mode (savings estimates on your own files, no account). The mode is fixed at startup; restart the server to re-detect.
|
|
269
66
|
|
|
270
67
|
## Environment variables
|
|
271
68
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
| Variable | Required | Description |
|
|
275
|
-
|---|---|---|
|
|
276
|
-
| `LOG10X_API_KEY` | No | Your Log10x API key. Omit to boot in demo mode + use `log10x_signin` to mint one via GitHub. The env list is autodiscovered from `GET /api/v1/user` — no env-id pinning needed. |
|
|
277
|
-
| `LOG10X_LICENSE_JWT` | No | A demo license JWT (from `POST /api/v1/license/demo`). With no API key set, the MCP reads back the data an engine running this same license wrote, via `/api/v1/demo/*` (last 3h only, rate limited). Usually unnecessary — the install wizard persists the minted demo license to `~/.log10x/demo-license.json` and the MCP reuses it automatically. |
|
|
278
|
-
| `LOG10X_API_BASE` | No | API base URL (default: `https://prometheus.log10x.com`) |
|
|
279
|
-
|
|
280
|
-
### Pasted-batch triage (`log10x_resolve_batch`)
|
|
281
|
-
|
|
282
|
-
| Variable | Required | Description |
|
|
283
|
-
|---|---|---|
|
|
284
|
-
| `LOG10X_PASTE_URL` | No | Override the Log10x paste endpoint (default: `https://meljpepqpd.execute-api.us-east-1.amazonaws.com/paste`). Body limit 100 KB. |
|
|
285
|
-
|
|
286
|
-
### Retriever (`log10x_retriever_query`, `log10x_backfill_metric`)
|
|
287
|
-
|
|
288
|
-
| Variable | Required | Description |
|
|
289
|
-
|---|---|---|
|
|
290
|
-
| `__SAVE_LOG10X_RETRIEVER_URL__` | Yes (Retriever tier) | Base URL of the customer's deployed Retriever query endpoint (e.g., `https://retriever.<your-domain>`). When unset, Retriever-dependent tools return a graceful "not configured" message. |
|
|
291
|
-
| `LOG10X_RETRIEVER_AUTH_HEADER` | No | Override the auth header name (default: `X-10X-Auth`, same as the Prometheus gateway). |
|
|
292
|
-
| `LOG10X_RETRIEVER_AUTH_VALUE` | No | Override the auth header value. Default is `${apiKey}/${envId}` from the active environment. |
|
|
293
|
-
| `__SAVE_LOG10X_RETRIEVER_TARGET__` | No | Override the default target prefix under which retriever writes indexed objects (default: `app`). |
|
|
294
|
-
| `LOG10X_RETRIEVER_INDEX_SUBPATH` | No | Override the index subpath inside the bucket (default: `indexing-results`, matching the engine's indexContainer convention). |
|
|
295
|
-
| `LOG10X_RETRIEVER_POLL_MS` | No | Override the marker-stability poll interval (default: `1500` ms). |
|
|
296
|
-
| `LOG10X_RETRIEVER_TIMEOUT_MS` | No | Override the query timeout (default: `90000` ms). |
|
|
69
|
+
All optional. The common path is just `LOG10X_API_KEY` (or no key at all).
|
|
297
70
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
**Known engine-side issues (GAPS G12)**: `log10x_retriever_query` has two unresolved engine-side bugs that `log10x_doctor` flags as `retriever_forensic_health` warnings: (1) it may return 0 events on windows where `log10x_pattern_trend` proves events exist, (2) it may crash with `MCP error -32000: Connection closed` when passed a canonical slash-underscore pattern name. Workarounds: use short/free-text pattern names, cross-check any zero result against `log10x_pattern_trend`, prefer `log10x_event_lookup` + `log10x_pattern_trend` for incident reconstruction where approximate timing is acceptable. See `docs/ENGINE_TICKETS.md` for the full engine-team ticket.
|
|
301
|
-
|
|
302
|
-
### Metric backfill destinations (`log10x_backfill_metric`)
|
|
303
|
-
|
|
304
|
-
| Variable | Required | Description |
|
|
305
|
-
|---|---|---|
|
|
306
|
-
| `DATADOG_API_KEY` (or `DD_API_KEY`) | Yes (Datadog destination) | Datadog API key used to POST to `/api/v2/series`. |
|
|
307
|
-
| `DATADOG_SITE` | No | Datadog site (default: `datadoghq.com`, override for `datadoghq.eu`, `us5.datadoghq.com`, etc.) |
|
|
308
|
-
| `PROMETHEUS_REMOTE_WRITE_URL` | Yes (Prometheus destination) | URL of a Prometheus `remote_write`-compatible adapter. The MCP posts JSON; the adapter translates to the native protobuf/Snappy wire format. |
|
|
309
|
-
|
|
310
|
-
The server fetches your analyzer cost ($/GB) from your Console profile at startup and refreshes it hourly. To change it, update the cost in your profile — the server picks up the new value within an hour.
|
|
311
|
-
|
|
312
|
-
## Spawning sub-agents that use this MCP
|
|
313
|
-
|
|
314
|
-
If you script Claude Code sub-agents (`Agent` tool, OpenAI Agents SDK, custom orchestrators) to call log10x MCP tools, watch out for **deferred-tool bootstrapping**. The sub-agent's static tool list does not always include `mcp__log10x__*` — those tools are loaded on demand via `ToolSearch` (or the equivalent in your client). A sub-agent that reads its tool list and concludes "no MCP tools available" without first calling `ToolSearch({query: "log10x"})` will refuse the task instead of using the tools.
|
|
315
|
-
|
|
316
|
-
In testing across 17 sub-agent runs, **prompt framing was the deciding factor**:
|
|
317
|
-
|
|
318
|
-
| Framing | Bootstrap success |
|
|
71
|
+
| Variable | Purpose |
|
|
319
72
|
|---|---|
|
|
320
|
-
|
|
|
321
|
-
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
```bash
|
|
339
|
-
npm install
|
|
340
|
-
npm run build # tsc → build/index.js
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
**Operational gotcha — restart after rebuild.** MCP clients (Claude Desktop, Claude Code, Cursor) typically launch the server as a long-running child process. Node caches loaded modules in memory, so the running process **will not pick up your `npm run build` output until it is killed and respawned**. After rebuilding, find and kill the stale processes:
|
|
344
|
-
|
|
345
|
-
```bash
|
|
346
|
-
pgrep -fl "log10x-mcp/build/index.js" # show running servers + start times
|
|
347
|
-
ps -o pid=,lstart= -p $(pgrep -f log10x-mcp/build/index.js)
|
|
348
|
-
pkill -f "log10x-mcp/build/index.js" # client will respawn on next tool call
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
If you ship a tool description change or a routing-hint update and the agent's behavior doesn't seem to reflect it, this is the most likely cause. Verify by `grep`-ing the raw tool output (most clients log it) for any string you added — if it's missing, the server is stale.
|
|
73
|
+
| `LOG10X_API_KEY` | Your Log10x API key. Omit to boot read-only on the public demo dataset. |
|
|
74
|
+
| `LOG10X_API_BASE` | API base URL override (default `https://prometheus.log10x.com`). |
|
|
75
|
+
| `LOG10X_ENV_ID` | Pin a specific environment id instead of autodiscovering from your account. |
|
|
76
|
+
| `LOG10X_DEMO_FALLBACK` | Set to `off` to boot into POC mode instead of attaching to the public demo dataset when no key is set. |
|
|
77
|
+
| `LOG10X_MCP_READ_ONLY` | Set to `true` or `1` to force read-only mode (all mutating tools refuse). |
|
|
78
|
+
| `LOG10X_CUSTOMER_METRICS_URL` / `_TYPE` / `_AUTH` | Point at your own metrics backend (Prometheus, Grafana Cloud, Mimir, Thanos, AMP) for BYO-metrics setups. |
|
|
79
|
+
| `DD_API_KEY` / `DD_APP_KEY` / `DD_SITE` | Datadog credentials for backfilling per-pattern metrics into Datadog. |
|
|
80
|
+
| `PROMETHEUS_REMOTE_WRITE_URL` / `PROMETHEUS_URL` | Prometheus endpoints for backfilling and reading per-pattern series. |
|
|
81
|
+
| `LOG10X_RETRIEVER_URL` | Base URL of your deployed Retriever query endpoint, for fetch-back (or set it with `log10x_retriever_register`). |
|
|
82
|
+
| `LOG10X_RETRIEVER_TIMEOUT_MS` / `LOG10X_RETRIEVER_POLL_MS` | Fetch-back query timeout (default 90000) and poll interval (default 1500). |
|
|
83
|
+
| `LOG10X_RETRIEVER_AUTH_HEADER` / `LOG10X_RETRIEVER_AUTH_VALUE` | Override the fetch-back auth header (defaults derive from the active environment). |
|
|
84
|
+
| `LOG10X_OFFLOAD_BUCKET` / `LOG10X_STREAMER_BUCKET` | S3 bucket names the offload tools manage. |
|
|
85
|
+
| `TENX_LICENSE_KEY` / `LOG10X_TENX_PATH` | Engine license key and local engine binary path for local compile operations. |
|
|
86
|
+
| `LOG10X_GH_REPO` / `LOG10X_GITOPS_REPO_PATH` | GitHub repo and local path for GitOps-aware config tools. |
|
|
87
|
+
|
|
88
|
+
## Connect your own data (optional)
|
|
89
|
+
|
|
90
|
+
10x keeps logs queryable without paying to index everything. The Receiver ships budget-overflow noise to your own S3, and the Retriever fetches those exact events back on demand when you need them. `log10x_offload_add` and `log10x_retriever_register` wire up the offload-and-fetch path; `log10x_backfill_metric` pushes per-pattern volume and cost series into your existing Datadog or Prometheus so the cost views light up alongside the rest of your dashboards.
|
|
352
91
|
|
|
353
92
|
## Security
|
|
354
93
|
|
|
355
|
-
|
|
356
|
-
- The server runs locally — no data leaves your machine except Prometheus queries
|
|
357
|
-
- Dependency check scripts run locally with your own SIEM credentials (read-only)
|
|
358
|
-
- No caching of log content — all data comes from pre-aggregated metrics
|
|
359
|
-
|
|
360
|
-
## Documentation
|
|
361
|
-
|
|
362
|
-
Full documentation: [doc.log10x.com/manage/mcp-server](https://doc.log10x.com/manage/mcp-server/)
|
|
94
|
+
The server runs locally as a subprocess of your AI client. Only pre-aggregated metric queries (per-pattern volume and cost) leave the machine, never raw log content. Local triage with `log10x_resolve_batch` runs entirely on your machine over stdin and stdout. Connections to your own log platform use read-only credentials. Set `LOG10X_MCP_READ_ONLY=true` to refuse every mutating tool regardless of mode.
|
|
363
95
|
|
|
364
|
-
##
|
|
96
|
+
## Open source and license
|
|
365
97
|
|
|
366
|
-
|
|
98
|
+
Apache-2.0. Published on npm as `log10x-mcp` (Node 20+). The source is public so the behavior behind every tool can be read directly. Account-scoped tools require a Log10x product license (API key); the public demo dataset needs none.
|
|
367
99
|
|
|
368
|
-
|
|
100
|
+
MCP clients run the server as a long-lived child process. After upgrading the package, restart the client so the new version takes effect.
|
|
369
101
|
|
|
370
|
-
|
|
371
|
-
**using Log10x requires a commercial license**.
|
|
372
|
-
|
|
373
|
-
| Component | License |
|
|
374
|
-
|-----------|---------|
|
|
375
|
-
| This package (`log10x-mcp`) | Apache 2.0 (open source) |
|
|
376
|
-
| Log10x engine and runtime | Commercial license required |
|
|
377
|
-
|
|
378
|
-
**What this means:**
|
|
379
|
-
- You can freely use, modify, and distribute this MCP server
|
|
380
|
-
- The Log10x backend services and `tenx` runtime that this MCP talks to require a paid subscription
|
|
381
|
-
- A valid Log10x API key is required to call the account-scoped tools (sign in via `log10x_signin` or set `LOG10X_API_KEY`)
|
|
102
|
+
## Documentation
|
|
382
103
|
|
|
383
|
-
|
|
384
|
-
- [Log10x Pricing](https://log10x.com/pricing)
|
|
385
|
-
- [Documentation](https://doc.log10x.com)
|
|
386
|
-
- [Contact Sales](mailto:sales@log10x.com)
|
|
104
|
+
https://doc.log10x.com/apps/mcp/
|
package/build/index.js
CHANGED
|
@@ -149,7 +149,7 @@ function getEnvs() {
|
|
|
149
149
|
* rewrites it, so ops can see the original text when hunting root causes.
|
|
150
150
|
*/
|
|
151
151
|
/**
|
|
152
|
-
* Tools that query the metrics backend (
|
|
152
|
+
* Tools that query the metrics backend (top_patterns, whats_changing,
|
|
153
153
|
* etc.). When the MCP is in pure-demo mode (no user configuration,
|
|
154
154
|
* silently landed on the demo backend), these tools short-circuit
|
|
155
155
|
* with a structured `not_configured` response instead of returning
|
|
@@ -997,7 +997,7 @@ registerLog10xTool('log10x_top_patterns', topPatternsSchema, (args) => wrap('log
|
|
|
997
997
|
// Set diff of patterns across a time boundary. Compares pattern presence in
|
|
998
998
|
// two windows and returns new / retired / persistent / re_emerged sets plus
|
|
999
999
|
// co_emergence_clusters (deploy fingerprint via first_seen clustering).
|
|
1000
|
-
// Coherent only because
|
|
1000
|
+
// Coherent only because 10x's pattern_hash is stable across queries;
|
|
1001
1001
|
// competitors that re-cluster per query can't answer this.
|
|
1002
1002
|
registerLog10xTool('log10x_pattern_diff', patternDiffSchema, (args) => wrap('log10x_pattern_diff', async () => {
|
|
1003
1003
|
const env = resolveEnv(getEnvs(), args.environment);
|
|
@@ -1006,9 +1006,9 @@ registerLog10xTool('log10x_pattern_diff', patternDiffSchema, (args) => wrap('log
|
|
|
1006
1006
|
// ── Tool: log10x_whats_changing ──
|
|
1007
1007
|
//
|
|
1008
1008
|
// Patterns ranked by delta vs a baseline window (not current cost). Restores
|
|
1009
|
-
// the
|
|
1009
|
+
// the removed cost-drivers ranking
|
|
1010
1010
|
// using the modern StructuredOutput envelope. Brand-new patterns (no
|
|
1011
|
-
// baseline) are excluded
|
|
1011
|
+
// baseline) are excluded; they go to log10x_whats_new.
|
|
1012
1012
|
registerLog10xTool('log10x_whats_changing', whatsChangingSchema, (args) => wrap('log10x_whats_changing', async () => {
|
|
1013
1013
|
const env = resolveEnv(getEnvs(), args.environment);
|
|
1014
1014
|
return executeWhatsChanging(args, env);
|
|
@@ -1406,7 +1406,7 @@ const REGISTERED_TOOLS = [
|
|
|
1406
1406
|
{ name: 'log10x_dependency_check', intent: 'Scan SIEM + dashboards + alerts for refs to a pattern before muting / deleting it' },
|
|
1407
1407
|
{ name: 'log10x_top_patterns', intent: 'Top N patterns by current cost, with per-row delta vs comparison_window and newly-emerged section' },
|
|
1408
1408
|
{ name: 'log10x_pattern_diff', intent: 'Set diff of patterns across a time boundary — new/retired/persistent/re_emerged + co_emergence_clusters (deploy fingerprint). Coherent across boundaries because pattern_hash is stable across queries.' },
|
|
1409
|
-
{ name: 'log10x_whats_changing', intent: 'Patterns ranked by delta vs baseline (growth/shrinkage). Brand-new patterns excluded
|
|
1409
|
+
{ name: 'log10x_whats_changing', intent: 'Patterns ranked by delta vs baseline (growth/shrinkage). Brand-new patterns excluded, see log10x_whats_new for those.' },
|
|
1410
1410
|
{ name: 'log10x_whats_new', intent: 'Patterns whose first_seen falls inside a recency window. Separate from delta-vs-baseline because new patterns have no baseline.' },
|
|
1411
1411
|
{ name: 'log10x_investigate', intent: 'Single-call root-cause — causal chain for acute spikes or cohort for drift' },
|
|
1412
1412
|
{ name: 'log10x_resolve_batch', intent: 'Pasted-batch triage — per-pattern variable concentration + next actions' },
|
|
@@ -1501,7 +1501,7 @@ async function handleCliFlags() {
|
|
|
1501
1501
|
'Environment:',
|
|
1502
1502
|
' LOG10X_API_KEY API key from console.log10x.com (or run `log10x_signin_start` then `log10x_signin_complete` to mint one via Auth0 Device Flow)',
|
|
1503
1503
|
' LOG10X_API_BASE Override Prometheus gateway URL',
|
|
1504
|
-
'
|
|
1504
|
+
' LOG10X_RETRIEVER_URL Retriever query endpoint (optional)',
|
|
1505
1505
|
' LOG10X_TENX_MODE `local` or `docker` backend for the local engine and compile tools; when unset, auto-detects and prefers `docker`, falling back to a native `tenx` install',
|
|
1506
1506
|
' LOG10X_TENX_PATH Path to local tenx CLI (used when LOG10X_TENX_MODE=local; compile requires the cloud flavor)',
|
|
1507
1507
|
' LOG10X_TENX_IMAGE Docker image when LOG10X_TENX_MODE=docker (default: log10x/pipeline-10x:latest)',
|