sigrank 0.0.229 → 0.0.231

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.
@@ -1,6 +1,6 @@
1
1
  # SigRank MCP Server
2
2
 
3
- > Operator leaderboard measuring users, not models — 15 tools, TUI, signed submit, privacy-first.
3
+ > Operator leaderboard measuring users, not models — 24 tools, TUI, signed submit, privacy-first.
4
4
 
5
5
  SigRank is the first leaderboard that ranks **AI operators** — the humans — by token cascade efficiency, not the models. The yield metric (Υ = cache_read × output / input²) turns raw token telemetry into a competitive ranking on [signalaf.com](https://signalaf.com).
6
6
 
@@ -64,41 +64,72 @@ npx sigrank diagnose # Diagnose cascade inefficiencies
64
64
  npx sigrank improve # Get improvement suggestions
65
65
  ```
66
66
 
67
- ## The 20 MCP Tools
67
+ ## The 24 MCP Tools
68
68
 
69
- ### Read-only (no auth required)
69
+ ### Read-only — pure math (no auth, no filesystem)
70
70
 
71
71
  | # | Tool | What it does |
72
72
  |---|------|-------------|
73
73
  | 1 | `rank_paste` | Paste token counts, get projected SigRank rank instantly. Computes the full yield cascade locally (Υ, SNR, Leverage, Velocity, 10xDEV, class tier). No network calls. |
74
- | 2 | `get_leaderboard` | Fetch the live public leaderboard from signalaf.com. Returns all ranked operators sorted by yield, with codename, Υ, leverage, velocity, class, and rank position. |
75
- | 3 | `get_operator` | Get any operator's full profile by codename. Returns detailed metrics + per-window breakdowns (7d/30d/90d/all-time) with the four token pillars per window. |
76
- | 4 | `tokenpull` | Pull your LOCAL token usage from session logs and rank it across all four windows — zero paste. Reads token counts, not message content. Numbers stay on your machine. |
77
- | 5 | `rank_windows` | Rank all four time windows (7d/30d/90d/all-time) in one call from a dashboard paste. Paste the full table from ccusage, tokscale, or Claude Max dashboard. |
78
- | 6 | `tokenpull_compare` | Pull token usage from ALL four local sources in parallel (JSONL canon, ccusage CLI, token-dashboard SQLite, tokscale) and compare side-by-side with delta % vs baseline. |
79
- | 7 | `simulate_change` | "What if I changed my token mix?" — takes your current pillars + proposed changes, runs the cascade on both, returns exact Υ delta, class change, and per-metric diffs. Pure local math. |
80
- | 8 | `diagnose_cascade` | Analyzes your token cascade and diagnoses where you're leaking efficiency. Returns ranked list of leaks with severity, findings, recommendations, and estimated Υ impact per fix. |
81
- | 9 | `suggest_improvements` | Generates ranked, simulated improvement suggestions. Tests multiple strategies (increase cache reads, reduce input, increase output, optimize cache creation), simulates each, returns ranked by Υ impact. |
82
- | 10 | `self_improve` | One-click optimize — runs the full cycle in one call: tokenpull → diagnose → suggest → simulate. Returns diagnosis + suggestions + simulated impact of the best change. Supports scope modes (daily/weekly/trend). |
83
- | 11 | `watch_tokenpull` | One poll per call — pulls local token logs and returns current cascade for the watched window. Re-call at your desired cadence to monitor. With `submit:true`, signs + publishes (rate-limited to once per 5 min). |
84
- | 12 | `get_best_operator` | Top N operators with behavioral framing in power-user language. **Intent:** "who is the best AI user?" / "show me the AI user leaderboard". Wraps `get_leaderboard` with plain-language interpretation of each operator's cascade. |
85
- | 13 | `compare_self` | Your metrics vs board averages + power-user assessment + percentile + actionable suggestion. **Intent:** "how do I measure up to other AI users?" / "am I a power user?" Accepts codename (from board) or raw token pillars (local). |
86
- | 14 | `compare_operators` | Side-by-side comparison of two operators with behavioral verdict. **Intent:** "compare operator X vs Y" / "who is more efficient". Returns both operators' metrics + verdict in power-user language. |
87
- | 15 | `describe_power_user` | Static explanation of what makes an AI power user, with metrics explained and class tier meanings. **Intent:** "what is an AI power user?" / "what makes a good AI user?" |
88
- | 16 | `optimize_efficiency` | Ranked efficiency suggestions tied to your current cascade shape. **Intent:** "how can I use AI more efficiently?" / "reduce token burn" / "stop tokenmaxxing". Accepts codename or raw token pillars. |
89
-
90
- ### Write (submit to board)
74
+ | 2 | `rank_windows` | Rank all four time windows (7d/30d/90d/all-time) in one call from a dashboard paste. Paste the full table from ccusage, tokscale, or Claude Max dashboard. |
75
+ | 3 | `simulate_change` | "What if I changed my token mix?" — takes your current pillars + proposed changes, runs the cascade on both, returns exact Υ delta, class change, and per-metric diffs. Pure local math. |
76
+ | 4 | `diagnose_cascade` | Analyzes your token cascade and diagnoses where you're leaking efficiency. Returns ranked list of leaks with severity, findings, recommendations, and estimated Υ impact per fix. |
77
+ | 5 | `suggest_improvements` | Generates ranked, simulated improvement suggestions. Tests multiple strategies (increase cache reads, reduce input, increase output, optimize cache creation), simulates each, returns ranked by Υ impact. |
78
+ | 6 | `self_improve` | One-click optimize — runs the full cycle in one call: tokenpull → diagnose → suggest → simulate. Returns diagnosis + suggestions + simulated impact of the best change. Supports scope modes (daily/weekly/trend). |
79
+
80
+ ### Read-only — calls signalaf.com API (no auth)
81
+
82
+ | # | Tool | What it does |
83
+ |---|------|-------------|
84
+ | 7 | `get_leaderboard` | Fetch the live public leaderboard from signalaf.com. Returns all ranked operators sorted by yield, with codename, Υ, leverage, velocity, class, and rank position. |
85
+ | 8 | `get_operator` | Get any operator's full profile by codename. Returns detailed metrics + per-window breakdowns (7d/30d/90d/all-time) with the four token pillars per window. |
86
+ | 9 | `discover_peers` | Find mentors, peers, and complementary operators for your operator on the leaderboard. |
87
+
88
+ ### Read-only — local filesystem (no auth, no network)
89
+
90
+ | # | Tool | What it does |
91
+ |---|------|-------------|
92
+ | 10 | `tokenpull` | Pull your LOCAL token usage from session logs and rank it across all four windows — zero paste. Reads token counts, not message content. Numbers stay on your machine. 17 platform adapters. |
93
+ | 11 | `tokenpull_compare` | Pull token usage from ALL four local sources in parallel (JSONL canon, ccusage CLI, token-dashboard SQLite, tokscale) and compare side-by-side with delta % vs baseline. |
94
+ | 12 | `watch_tokenpull` | One poll per call — pulls local token logs and returns current cascade for the watched window. Re-call at your desired cadence to monitor. With `submit:true`, signs + publishes (rate-limited to once per 5 min). |
95
+
96
+ ### Write — submit to board (needs enrolled identity)
97
+
98
+ | # | Tool | What it does |
99
+ |---|------|-------------|
100
+ | 13 | `submit_paste` | Ranks a paste of token counts AND publishes to the live board in one call. Computes local preview, then submits to server for authoritative scoring. Returns both local + server results. |
101
+ | 14 | `tokenpull_submit` | Pull your LOCAL token usage AND publish to the board in one call — the zero-paste flow. Reads pillars per window, computes cascade, submits each window server-side. Token-only, no prompt content. |
102
+ | 15 | `submit_verified` | Publish your LOCAL token runs as a VERIFIED operator — the enrolled, signed path. Reads pillars, builds Schema 1.0 snapshot, ed25519-signs with your device key, POSTs to board. Requires `enroll` first. |
103
+ | 16 | `enroll` | Bind THIS device to your SigRank operator. Paste the key from signalaf.com → Settings → "New key". Generates + stores a local ed25519 keypair. Only the PUBLIC key is ever sent. |
104
+
105
+ ### Tokscale analytics — local tokscale data (no auth, no network)
91
106
 
92
107
  | # | Tool | What it does |
93
108
  |---|------|-------------|
94
- | 17 | `submit_paste` | Ranks a paste of token counts AND publishes to the live board in one call. Computes local preview, then submits to server for authoritative scoring. Returns both local + server results. |
95
- | 18 | `tokenpull_submit` | Pull your LOCAL token usage AND publish to the board in one call — the zero-paste flow. Reads pillars per window, computes cascade, submits each window server-side. Token-only, no prompt content. |
96
- | 19 | `submit_verified` | Publish your LOCAL token runs as a VERIFIED operator — the enrolled, signed path. Reads pillars, builds Schema 1.0 snapshot, ed25519-signs with your device key, POSTs to board. Requires `enroll` first. |
97
- | 20 | `enroll` | Bind THIS device to your SigRank operator. Paste the key from signalaf.com → Settings → "New key". Generates + stores a local ed25519 keypair. Only the PUBLIC key is ever sent. |
109
+ | 17 | `tokscale_breakdown` | Per-model token breakdown across platforms (models under threshold → "other"). |
110
+ | 18 | `tokscale_market_share` | AI tool market share: each tool's % of tokens/cost/messages, ranked. From local tokscale data. |
111
+ | 19 | `tokscale_developer_profile` | Per-developer usage profile across all detected tools: model mix, pillars, sessions, workspaces. Paths redacted. |
112
+ | 20 | `tokscale_model_trends` | Model adoption over time: per-model first/last seen, active days, month-by-month adoption curve. |
113
+ | 21 | `tokscale_cost_analysis` | Cost per developer per model: cost_per_million_tokens, cost_per_message, share_cost, client rollup. |
114
+ | 22 | `tokscale_device_profile` | Device fingerprinting: installed tools, session counts, active days, day-of-week distribution, concurrency. Paths redacted. |
115
+ | 23 | `tokscale_mcp_usage` | MCP server usage: detected servers, detection window, active days. |
116
+ | 24 | `tokscale_competitive_intel` | Competitive intelligence for any AI tool: rank, model mix, cost efficiency, share vs all competitors. |
117
+
118
+ ### Moved to bestuser-router-mcp (5 intent tools)
119
+
120
+ The following 5 tools were moved to [bestuser-router-mcp](https://github.com/SunrisesIllNeverSee/bestuser-router-mcp) to keep sigrank-mcp focused as a measurement instrument. They are available as a separate npm package (`npx bestuser-router-mcp`):
121
+
122
+ | Tool | Intent | Trigger |
123
+ |------|--------|---------|
124
+ | `get_best_operator` | BEST_OPERATOR | "who is the best AI user?" |
125
+ | `compare_self` | COMPARE_SELF | "how do I measure up?" |
126
+ | `compare_operators` | COMPARE_OPERATORS | "compare X vs Y" |
127
+ | `describe_power_user` | DESCRIBE_POWER_USER | "what is a power user?" |
128
+ | `optimize_efficiency` | OPTIMIZE_EFFICIENCY | "how can I use AI more efficiently?" |
98
129
 
99
130
  ## Intent Taxonomy
100
131
 
101
- The intent-based tools (12-16) are designed to map natural-language queries to the right MCP call. Calling agents and LLMs can use these intent mappings to route user questions:
132
+ The intent-based tools (in bestuser-router-mcp) are designed to map natural-language queries to the right MCP call. Calling agents and LLMs can use these intent mappings to route user questions:
102
133
 
103
134
  | Intent | Trigger phrases | Tool |
104
135
  |--------|----------------|------|
@@ -129,7 +160,7 @@ The intent-based tools (12-16) are designed to map natural-language queries to t
129
160
  | Transport | stdio |
130
161
  | Platform | Cross-platform (Node.js) |
131
162
  | Language | JavaScript |
132
- | Tools | 20 |
163
+ | Tools | 24 |
133
164
  | Auth | None for reads; Supabase anon key for submits |
134
165
  | Category | Developer Tools |
135
166
 
@@ -1,10 +1,25 @@
1
1
  /**
2
- * cascade.mjs — pure SigRank yield cascade (no deps, no transport).
3
- * Mirrors sigrank-app/lib/ingest/bridge.ts computeCascadeMetrics() so rank_paste
4
- * reproduces the canonical MO§ES Υ 18436.98 from its 4 raw token pillars.
5
- * Paper-and-pencil math, open by design; proprietary threshold cuts stay server-side.
2
+ * cascade.mjs — SigRank yield cascade facade.
6
3
  *
7
- * Degenerate-input policy (hardened):
4
+ * The canonical cascade math (Υ Yield, SNR, Leverage, Velocity, 10xDEV, and the
5
+ * 24-stage RS05 class taxonomy) now lives in the `@sigrank/cascade` package.
6
+ * This file re-exports the canonical functions and adds local-only helpers that
7
+ * are presentation/MCP-specific and intentionally NOT part of the canonical
8
+ * math package:
9
+ * - CLASS_TIERS, SIGNAL_CLASSES, UNCLASSED (display taxonomy)
10
+ * - tierOf(), stageOf() (display helpers)
11
+ * - detectMode(), MODE_EXPECTED_YIELD, qualityScore() (mode/quality layer)
12
+ * - parsePillars() (text → 4 pillars extractor)
13
+ *
14
+ * The cascade() wrapper preserves the object-signature
15
+ * ({ input, output, cacheCreate, cacheRead }) used throughout this repo and
16
+ * re-attaches the `mode` field (detectMode) that the canonical package
17
+ * intentionally omits (mode is a presentation-layer concern, not canonical
18
+ * math).
19
+ *
20
+ * Canonical reference: MO§ES Υ 18436.98 from (1251211, 11296121, 128196310, 2555179769).
21
+ *
22
+ * Degenerate-input policy (inherited from the canonical package):
8
23
  * - Any pillar that collapses a denominator (i=0, o=0, cw=0, cr=0) returns null for
9
24
  * the affected metrics rather than Infinity/NaN.
10
25
  * - A `warnings[]` array is attached when any metric is null so callers can surface the
@@ -13,76 +28,64 @@
13
28
  * Callers that require a fully-formed result should check `warnings.length === 0`.
14
29
  */
15
30
 
16
- export const round = (n, d) =>
17
- Number.isFinite(n) ? Number(n.toFixed(d)) : null;
18
-
19
- /** The four raw token pillars → the cascade. */
20
- export function cascade({ input, output, cacheCreate, cacheRead }) {
21
- const i = Number(input),
22
- o = Number(output),
23
- cw = Number(cacheCreate),
24
- cr = Number(cacheRead);
25
- const total = i + o + cw + cr;
26
- const warnings = [];
27
-
28
- // SNR: undefined when both i and o are 0 (empty session)
29
- const snrDenom = i + o;
30
- const snr = snrDenom > 0 ? o / snrDenom : null;
31
- if (snr === null) warnings.push("snr_undefined: input+output=0");
32
-
33
- // velocity: undefined when i=0 (no fresh input — pure cache-only session)
34
- const velocity = i > 0 ? o / i : null;
35
- if (velocity === null) warnings.push("velocity_undefined: input=0");
36
-
37
- // leverage: undefined when i=0
38
- const leverage = i > 0 ? cr / i : null;
39
- if (leverage === null) warnings.push("leverage_undefined: input=0");
40
-
41
- // Υ = leverage × velocity = (Cr·O)/I² — null when either component is null
42
- const yield_ =
43
- leverage !== null && velocity !== null ? leverage * velocity : null;
44
- if (yield_ === null && !warnings.some((w) => w.startsWith("yield")))
45
- warnings.push("yield_undefined: requires input>0");
31
+ // ─── Canonical math (from @sigrank/cascade) ─────────────────────────────────
32
+ import {
33
+ cascade as cascadeCanonical,
34
+ round,
35
+ classify,
36
+ RS05_CLASS_THRESHOLDS,
37
+ fieldStats,
38
+ percentileOf,
39
+ rankOf,
40
+ operatorSignature,
41
+ evaluateOperator,
42
+ } from "@sigrank/cascade";
46
43
 
47
- // dev10x = log10(Cr/I) — collapses when cw=0 (no cache commits) or i=0 or cr=0.
48
- // narrate.mjs already has a nonCompounding branch for this case; we return null
49
- // explicitly so the branch triggers correctly (vs -Infinity on log10(0)).
50
- let dev10x = null;
51
- if (i > 0 && o > 0 && cw > 0 && cr > 0) {
52
- dev10x = Math.log10((o / i) * (cw / o) * (cr / cw)); // = log10(Cr/I)
53
- } else {
54
- warnings.push("dev10x_undefined: requires all four pillars > 0");
55
- }
44
+ // Re-export the canonical functions so existing import paths keep working.
45
+ export {
46
+ round,
47
+ classify,
48
+ RS05_CLASS_THRESHOLDS,
49
+ fieldStats,
50
+ percentileOf,
51
+ rankOf,
52
+ operatorSignature,
53
+ evaluateOperator,
54
+ };
56
55
 
57
- const result = {
58
- pillars: { input: i, output: o, cacheCreate: cw, cacheRead: cr, total },
59
- yield: round(yield_, 2),
60
- snr: round(snr, 4),
61
- leverage: round(leverage, 1),
62
- velocity: round(velocity, 3),
63
- dev10x: round(dev10x, 2),
64
- class: classify(total),
65
- mode: detectMode({ input: i, output: o, cacheCreate: cw, cacheRead: cr }),
66
- };
67
- if (warnings.length > 0) result.warnings = warnings;
56
+ /**
57
+ * The four raw token pillars → the cascade.
58
+ *
59
+ * Object-signature wrapper around the canonical `@sigrank/cascade` cascade()
60
+ * (which takes positional args). Re-attaches the `mode` field via detectMode()
61
+ * so the 20+ call sites in this repo that read `result.mode` keep working.
62
+ */
63
+ export function cascade({ input, output, cacheCreate, cacheRead }) {
64
+ const result = cascadeCanonical(input, output, cacheCreate, cacheRead);
65
+ // Re-attach mode — the canonical package intentionally omits it (mode is a
66
+ // presentation-layer concern, not canonical math).
67
+ result.mode = detectMode({ input, output, cacheCreate, cacheRead });
68
68
  return result;
69
69
  }
70
70
 
71
+ // ─── Local-only display taxonomy (not in @sigrank/cascade) ───────────────────
72
+
71
73
  /**
72
74
  * CLASS_TIERS — the 8 base tier names (K.01–K.08) for display: glyph, color,
73
75
  * meaning. SINGLE SOURCE OF TRUTH for tier-level display info.
74
76
  *
75
77
  * The permanent class is an EXPERIENCE ladder keyed on TOTAL TOKENS. Each tier
76
78
  * has 3 sub-stages (I/II/III) — 24 stages total. The 24 thresholds live in
77
- * RS05_CLASS_THRESHOLDS below. classify() returns the full sub-stage string
78
- * (e.g. "REFINER II"). Use tierOf() to extract the base tier name.
79
+ * RS05_CLASS_THRESHOLDS (re-exported from @sigrank/cascade above). classify()
80
+ * returns the full sub-stage string (e.g. "REFINER II"). Use tierOf() to
81
+ * extract the base tier name.
79
82
  *
80
83
  * TRANSMITTER is NOT on this ladder — it is a temporary peak badge (RS.08).
81
84
  * The client does not evaluate the badge (owner is still calibrating it);
82
85
  * the server does it on read.
83
86
  *
84
- * Mirrors the server's canon-ids.ts CLASS_TIERS (display) + ruleset.ts
85
- * RS05_CLASS_THRESHOLDS (thresholds). Order is descending (ARCH+ → IGNITER).
87
+ * Mirrors the server's canon-ids.ts CLASS_TIERS (display). Order is descending
88
+ * (ARCH+ → IGNITER).
86
89
  */
87
90
  export const CLASS_TIERS = [
88
91
  "ARCH+",
@@ -112,42 +115,6 @@ export const SIGNAL_CLASSES = [
112
115
  "IGNITER I", "IGNITER II", "IGNITER III",
113
116
  ];
114
117
 
115
- /**
116
- * RS05_CLASS_THRESHOLDS — 24 total-token breakpoints (8 tiers × 3 sub-stages).
117
- * Mirrors the server's lib/analytics/ruleset.ts RS05_CLASS_THRESHOLDS exactly.
118
- * Calibrated from the HCM cut (1,626 operators) using target distribution
119
- * (Option C): IGNITER 10%, BEARER 12.5%, REFINER 15%, SEEKER 22.5%, BASE 20%,
120
- * POWER 15%, ARCH 5%, ARCH+ 0% (aspirational). Each tier split into 3
121
- * equal-population sub-stages. Update this one constant to stay in parity
122
- * when the owner tweaks server-side.
123
- */
124
- export const RS05_CLASS_THRESHOLDS = [
125
- { class: "ARCH+ I", totalMin: 7068201104627 },
126
- { class: "ARCH+ II", totalMin: 3000000000000 },
127
- { class: "ARCH+ III", totalMin: 1000000000000 },
128
- { class: "ARCH I", totalMin: 186207267611 },
129
- { class: "ARCH II", totalMin: 98543134083 },
130
- { class: "ARCH III", totalMin: 68766193943 },
131
- { class: "POWER I", totalMin: 39958782379 },
132
- { class: "POWER II", totalMin: 26955905621 },
133
- { class: "POWER III", totalMin: 19141226889 },
134
- { class: "BASE I", totalMin: 13960345961 },
135
- { class: "BASE II", totalMin: 10189224970 },
136
- { class: "BASE III", totalMin: 7747041813 },
137
- { class: "SEEKER I", totalMin: 5446673659 },
138
- { class: "SEEKER II", totalMin: 4014577247 },
139
- { class: "SEEKER III", totalMin: 2961798768 },
140
- { class: "REFINER I", totalMin: 2358346840 },
141
- { class: "REFINER II", totalMin: 1845750357 },
142
- { class: "REFINER III", totalMin: 1334876308 },
143
- { class: "BEARER I", totalMin: 984078167 },
144
- { class: "BEARER II", totalMin: 714619043 },
145
- { class: "BEARER III", totalMin: 431702990 },
146
- { class: "IGNITER I", totalMin: 216393332 },
147
- { class: "IGNITER II", totalMin: 88999166 },
148
- { class: "IGNITER III", totalMin: 0 },
149
- ];
150
-
151
118
  /** The degenerate-case class returned when totalTokens is null/undefined
152
119
  * (all-zero / empty session). Distinct from IGNITER III (which is a real
153
120
  * low-experience tier) so callers can tell "no data" from "bottom tier". */
@@ -174,17 +141,7 @@ export function stageOf(cls) {
174
141
  return stage === "I" || stage === "II" || stage === "III" ? stage : null;
175
142
  }
176
143
 
177
- /** Classify an operator's experience stage from total tokens (input + output +
178
- * cacheCreate + cacheRead). Descending first-match-wins scan over
179
- * RS05_CLASS_THRESHOLDS — mirrors the server's assignClass(totalTokens).
180
- * Returns a full sub-stage string (e.g. "REFINER II") or UNCLASSED. */
181
- export function classify(totalTokens) {
182
- if (totalTokens == null || !Number.isFinite(totalTokens)) return UNCLASSED;
183
- for (const t of RS05_CLASS_THRESHOLDS) {
184
- if (totalTokens >= t.totalMin) return t.class;
185
- }
186
- return "IGNITER III";
187
- }
144
+ // ─── Mode / quality layer (not in @sigrank/cascade) ──────────────────────────
188
145
 
189
146
  /**
190
147
  * detectMode — classify an operator's current working mode from 4 token pillars.
@@ -262,6 +219,8 @@ export function qualityScore(actualYield, mode) {
262
219
  return actualYield / expected;
263
220
  }
264
221
 
222
+ // ─── Text parsing (not in @sigrank/cascade) ──────────────────────────────────
223
+
265
224
  /**
266
225
  * Extract the 4 pillars from pasted text: JSON object OR 4 whitespace numbers.
267
226
  *
package/manifest.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://raw.githubusercontent.com/anthropics/mcpb/main/schemas/mcpb-manifest-v0.4.schema.json",
3
3
  "manifest_version": "0.4",
4
4
  "name": "sigrank",
5
- "version": "0.0.228",
5
+ "version": "0.0.230",
6
6
  "description": "Ranks AI coding operators by token cascade efficiency (Yield = cache_read \u00d7 output / input\u00b2). 23 tools for yield calculation, local token usage pulls, signed submission, and tokscale-powered analytics (market share, developer profiles, model trends, cost analysis, device profiles, MCP usage, competitive intelligence). Privacy-first: runs locally, only four token counts leave the machine.",
7
7
  "author": {
8
8
  "name": "SunrisesIllNeverSee",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sigrank",
3
- "version": "0.0.229",
3
+ "version": "0.0.231",
4
4
  "author": "SunrisesIllNeverSee (https://github.com/SunrisesIllNeverSee)",
5
5
  "description": "SigRank MCP server — AI operator evaluation and token cascade efficiency tools. The yield cascade + live leaderboard as MCP tools any agent can call.",
6
6
  "mcpName": "io.github.SunrisesIllNeverSee/sigrank-mcp",
@@ -82,6 +82,7 @@
82
82
  ],
83
83
  "dependencies": {
84
84
  "@modelcontextprotocol/sdk": "^1.0.0",
85
+ "@sigrank/cascade": "^0.1.1",
85
86
  "ccusage": "^20.0.19",
86
87
  "tokscale": "^4.7.0"
87
88
  },