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.
- package/MCP_SERVER_DESCRIPTION.md +57 -26
- package/analytics/cascade.mjs +65 -106
- package/manifest.json +1 -1
- package/package.json +2 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SigRank MCP Server
|
|
2
2
|
|
|
3
|
-
> Operator leaderboard measuring users, not models —
|
|
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
|
|
67
|
+
## The 24 MCP Tools
|
|
68
68
|
|
|
69
|
-
### Read-only (no auth
|
|
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 | `
|
|
75
|
-
| 3 | `
|
|
76
|
-
| 4 | `
|
|
77
|
-
| 5 | `
|
|
78
|
-
| 6 | `
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
|
83
|
-
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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 | `
|
|
95
|
-
| 18 | `
|
|
96
|
-
| 19 | `
|
|
97
|
-
| 20 | `
|
|
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 (
|
|
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 |
|
|
163
|
+
| Tools | 24 |
|
|
133
164
|
| Auth | None for reads; Supabase anon key for submits |
|
|
134
165
|
| Category | Developer Tools |
|
|
135
166
|
|
package/analytics/cascade.mjs
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* cascade.mjs —
|
|
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
|
-
*
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
|
78
|
-
* (e.g. "REFINER II"). Use tierOf() to
|
|
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)
|
|
85
|
-
*
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
},
|