sigrank 0.16.1 β 0.17.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 +19 -8
- package/index.mjs +199 -1
- package/package.json +2 -1
- package/tools.mjs +15 -4
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# SigRank MCP
|
|
2
2
|
|
|
3
3
|
> **π SigRank is live: [signalaf.com](https://signalaf.com)** β the leaderboard for how
|
|
4
|
-
> efficiently you use AI, not how much.
|
|
5
|
-
>
|
|
4
|
+
> efficiently you use AI, not how much. Run `npx sigrank` to see your cascade now.
|
|
5
|
+
> _Token counts only. Never your prompts._
|
|
6
6
|
|
|
7
7
|
<div align="center">
|
|
8
8
|
|
|
@@ -21,12 +21,13 @@ For all builders, burners and 10xers.
|
|
|
21
21
|
[](https://nodejs.org)
|
|
22
22
|
[](https://signalaf.com)
|
|
23
23
|
[](https://glama.ai/mcp/servers/SunrisesIllNeverSee/sigrank-mcp)
|
|
24
|
-
[](https://smithery.ai/servers/burnmydays/sigrank)
|
|
25
25
|
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
28
|
## Table of Contents
|
|
29
29
|
|
|
30
|
+
- [The SigRank ecosystem](#the-sigrank-ecosystem)
|
|
30
31
|
- [Quickstart](#quickstart--3-steps-to-the-board)
|
|
31
32
|
- [Install from GitHub](#install-from-github)
|
|
32
33
|
- [Install via Smithery](#install-via-smithery)
|
|
@@ -51,6 +52,16 @@ For all builders, burners and 10xers.
|
|
|
51
52
|
|
|
52
53
|
---
|
|
53
54
|
|
|
55
|
+
## The SigRank ecosystem
|
|
56
|
+
|
|
57
|
+
| Repo | What it is | Install |
|
|
58
|
+
|------|-----------|---------|
|
|
59
|
+
| **[sigrank-mcp](https://github.com/SunrisesIllNeverSee/sigrank-mcp)** (this repo) | The instrument β extracts 4 token pillars, computes the cascade, submits to the leaderboard. MCP server + TUI dashboard. | `npx sigrank` |
|
|
60
|
+
| **[sigrank-app](https://github.com/SunrisesIllNeverSee/sigrank-app)** | The leaderboard β signalaf.com. Privacy-preserving operator profiles, class tiers, board rankings. | [signalaf.com](https://signalaf.com) |
|
|
61
|
+
| **[signaf](https://github.com/SunrisesIllNeverSee/signa)** | The coach β reads your session logs, builds a taste profile, measures ASI, coaches you on token efficiency. | `npx @burnmydays/signaf` |
|
|
62
|
+
| **[sigrank-vscode](https://github.com/SunrisesIllNeverSee/sigrank-vscode)** | The IDE extension β see your cascade metrics inline in VS Code. | `code --install-extension sigrank.sigrank` |
|
|
63
|
+
| **[fundscore](https://github.com/SunrisesIllNeverSee/fundscore)** | The repo scorer β investor-readiness scoring for GitHub repos. CLI + MCP server. | `npx fundscore` |
|
|
64
|
+
|
|
54
65
|
## Quickstart β 3 steps to the board
|
|
55
66
|
|
|
56
67
|
```bash
|
|
@@ -95,14 +106,14 @@ sigrank
|
|
|
95
106
|
**Repo:** [`SunrisesIllNeverSee/sigrank-mcp`](https://github.com/SunrisesIllNeverSee/sigrank-mcp)
|
|
96
107
|
**Site:** [signalaf.com](https://signalaf.com)
|
|
97
108
|
**npm:** [sigrank](https://www.npmjs.com/package/sigrank)
|
|
98
|
-
**Smithery:** [smithery.ai/servers/burnmydays/sigrank
|
|
109
|
+
**Smithery:** [smithery.ai/servers/burnmydays/sigrank](https://smithery.ai/servers/burnmydays/sigrank)
|
|
99
110
|
**Glama:** [glama.ai/mcp/servers/SunrisesIllNeverSee/sigrank-mcp](https://glama.ai/mcp/servers/SunrisesIllNeverSee/sigrank-mcp)
|
|
100
111
|
|
|
101
112
|
---
|
|
102
113
|
|
|
103
114
|
## Install via Smithery
|
|
104
115
|
|
|
105
|
-
SigRank is available on [Smithery](https://smithery.ai/servers/burnmydays/sigrank
|
|
116
|
+
SigRank is available on [Smithery](https://smithery.ai/servers/burnmydays/sigrank) as a stdio MCP bundle β one-click install for Claude Desktop, Cursor, and other MCP clients.
|
|
106
117
|
|
|
107
118
|
### Smithery CLI
|
|
108
119
|
|
|
@@ -111,7 +122,7 @@ SigRank is available on [Smithery](https://smithery.ai/servers/burnmydays/sigran
|
|
|
111
122
|
npm install -g smithery
|
|
112
123
|
|
|
113
124
|
# Connect to SigRank (downloads the MCPB bundle locally)
|
|
114
|
-
smithery mcp add burnmydays/sigrank
|
|
125
|
+
smithery mcp add burnmydays/sigrank --id sigrank
|
|
115
126
|
|
|
116
127
|
# List available tools
|
|
117
128
|
smithery tool list sigrank
|
|
@@ -123,7 +134,7 @@ smithery tool call sigrank rank_paste '{"text": "1000000 500000 50000 800000"}'
|
|
|
123
134
|
|
|
124
135
|
### Claude Desktop (via Smithery)
|
|
125
136
|
|
|
126
|
-
1. Go to [smithery.ai/servers/burnmydays/sigrank
|
|
137
|
+
1. Go to [smithery.ai/servers/burnmydays/sigrank](https://smithery.ai/servers/burnmydays/sigrank)
|
|
127
138
|
2. Click **Install**
|
|
128
139
|
3. Smithery handles the rest β no manual config editing
|
|
129
140
|
|
|
@@ -132,7 +143,7 @@ smithery tool call sigrank rank_paste '{"text": "1000000 500000 50000 800000"}'
|
|
|
132
143
|
## Commands
|
|
133
144
|
|
|
134
145
|
```
|
|
135
|
-
β SigRank CLI v0.
|
|
146
|
+
β SigRank CLI v0.17.0
|
|
136
147
|
|
|
137
148
|
Default (no args)
|
|
138
149
|
sigrank unified dashboard: cascade + token pillars + board
|
package/index.mjs
CHANGED
|
@@ -28,6 +28,8 @@ import {
|
|
|
28
28
|
ListToolsRequestSchema,
|
|
29
29
|
ListPromptsRequestSchema,
|
|
30
30
|
GetPromptRequestSchema,
|
|
31
|
+
ListResourcesRequestSchema,
|
|
32
|
+
ReadResourceRequestSchema,
|
|
31
33
|
McpError,
|
|
32
34
|
ErrorCode,
|
|
33
35
|
} from "@modelcontextprotocol/sdk/types.js";
|
|
@@ -67,7 +69,7 @@ process.on("unhandledRejection", (reason) => {
|
|
|
67
69
|
async function startMcpServer() {
|
|
68
70
|
const server = new Server(
|
|
69
71
|
{ name: "sigrank", version: serverVersion() },
|
|
70
|
-
{ capabilities: { tools: {
|
|
72
|
+
{ capabilities: { tools: { listChanged: false } } },
|
|
71
73
|
);
|
|
72
74
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
73
75
|
tools: TOOLS,
|
|
@@ -172,6 +174,202 @@ async function startMcpServer() {
|
|
|
172
174
|
throw new McpError(ErrorCode.InvalidParams, `Unknown prompt: ${name}`);
|
|
173
175
|
});
|
|
174
176
|
|
|
177
|
+
// --- Resources: static context agents can read without calling a tool ---
|
|
178
|
+
const RESOURCES = [
|
|
179
|
+
{
|
|
180
|
+
uri: "sigrank://scoring-formula",
|
|
181
|
+
name: "SigRank Scoring Formula",
|
|
182
|
+
description:
|
|
183
|
+
"The yield cascade formula and all derived metrics: Ξ₯ (Yield = Cache Reads Γ Output / InputΒ²), SNR (signal-to-noise), Leverage (Cr/I), Velocity (O/I), 10xDEV score, and class tier thresholds (Burner / Builder / 10xer).",
|
|
184
|
+
mimeType: "text/markdown",
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
uri: "sigrank://class-tiers",
|
|
188
|
+
name: "Class Tier Definitions",
|
|
189
|
+
description:
|
|
190
|
+
"Definitions and thresholds for the three SigRank operator classes: Burner (raw volume), Builder (balanced efficiency), and 10xer (cascade-optimized). Includes the yield ranges that define each tier.",
|
|
191
|
+
mimeType: "text/markdown",
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
uri: "sigrank://install-guide",
|
|
195
|
+
name: "Quick Start Guide",
|
|
196
|
+
description:
|
|
197
|
+
"Step-by-step install and first submission: npx sigrank β enroll β submit. Covers ccusage/tokscale/tokendash bundled deps, privacy model (token counts only, never prompts), and dry-run workflow.",
|
|
198
|
+
mimeType: "text/markdown",
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
uri: "sigrank://privacy-model",
|
|
202
|
+
name: "Privacy Model",
|
|
203
|
+
description:
|
|
204
|
+
"How SigRank protects user privacy: runs locally, only four token counts (input, output, cacheCreate, cacheRead) leave the machine, ed25519-signed submissions, no prompt content ever transmitted.",
|
|
205
|
+
mimeType: "text/markdown",
|
|
206
|
+
},
|
|
207
|
+
];
|
|
208
|
+
|
|
209
|
+
const RESOURCE_CONTENT = {
|
|
210
|
+
"sigrank://scoring-formula": `# SigRank Scoring Formula
|
|
211
|
+
|
|
212
|
+
## Yield (Ξ₯) β the headline metric
|
|
213
|
+
|
|
214
|
+
\`\`\`
|
|
215
|
+
Ξ₯ = Cache Reads Γ Output / InputΒ²
|
|
216
|
+
\`\`\`
|
|
217
|
+
|
|
218
|
+
Yield rewards operators who maximize output while minimizing input β and who build cache to amortize that input across sessions. A high yield means you're getting more done with less, efficiently.
|
|
219
|
+
|
|
220
|
+
## Derived Metrics
|
|
221
|
+
|
|
222
|
+
| Metric | Formula | Meaning |
|
|
223
|
+
|--------|---------|---------|
|
|
224
|
+
| **SNR** | Output / (Input + CacheCreate) | Signal-to-noise: how much of your token spend is productive output vs. overhead |
|
|
225
|
+
| **Leverage** | Cache Reads / Input | How well you reuse cached context β higher = better cache utilization |
|
|
226
|
+
| **Velocity** | Output / Input | Raw output efficiency β how much output you generate per token of input |
|
|
227
|
+
| **10xDEV** | Composite score | Weighted blend of yield, leverage, and velocity for cross-platform comparison |
|
|
228
|
+
|
|
229
|
+
## Class Tier Thresholds
|
|
230
|
+
|
|
231
|
+
| Tier | Yield Range | Profile |
|
|
232
|
+
|------|-------------|---------|
|
|
233
|
+
| **Burner** | Ξ₯ < 1.0 | Raw volume β high input, low cache reuse, brute-force output |
|
|
234
|
+
| **Builder** | 1.0 β€ Ξ₯ < 10.0 | Balanced β moderate cache, decent output efficiency |
|
|
235
|
+
| **10xer** | Ξ₯ β₯ 10.0 | Cascade-optimized β high cache reads, minimal input, efficient output |
|
|
236
|
+
|
|
237
|
+
The formula is deterministic and computed locally. No network calls needed for scoring.
|
|
238
|
+
`,
|
|
239
|
+
|
|
240
|
+
"sigrank://class-tiers": `# SigRank Class Tiers
|
|
241
|
+
|
|
242
|
+
Every operator is classified into one of three tiers based on their Yield (Ξ₯ = Cache Reads Γ Output / InputΒ²).
|
|
243
|
+
|
|
244
|
+
## Burner (Ξ₯ < 1.0)
|
|
245
|
+
- **Profile:** Raw volume operators. High input tokens, low cache reuse.
|
|
246
|
+
- **Behavior:** Brute-force β lots of context fed in, relatively little output back.
|
|
247
|
+
- **Typical:** New AI users, verbose prompters, no session continuity.
|
|
248
|
+
- **Fix:** Build cache across sessions. Stop re-explaining context. Use --continue.
|
|
249
|
+
|
|
250
|
+
## Builder (1.0 β€ Ξ₯ < 10.0)
|
|
251
|
+
- **Profile:** Balanced operators. Moderate cache, decent output efficiency.
|
|
252
|
+
- **Behavior:** Productive β reasonable input-to-output ratio, some cache leverage.
|
|
253
|
+
- **Typical:** Experienced AI coders who use CLAUDE.md, project context, and session continuity.
|
|
254
|
+
- **Fix:** Increase cache reads by reusing sessions. Reduce input by trimming unnecessary context.
|
|
255
|
+
|
|
256
|
+
## 10xer (Ξ₯ β₯ 10.0)
|
|
257
|
+
- **Profile:** Cascade-optimized operators. High cache reads, minimal input, efficient output.
|
|
258
|
+
- **Behavior:** Surgical β minimal new input, maximum cache reuse, high-yield output.
|
|
259
|
+
- **Typical:** Power users with long-running sessions, tight context windows, and aggressive cache strategies.
|
|
260
|
+
- **Maintain:** Keep cache hit rate high. Avoid context bloat. Monitor with watch_tokenpull.
|
|
261
|
+
|
|
262
|
+
Tiers are recalculated on every submission. Your tier can change between windows (7d, 30d, 90d, all-time).
|
|
263
|
+
`,
|
|
264
|
+
|
|
265
|
+
"sigrank://install-guide": `# SigRank Quick Start
|
|
266
|
+
|
|
267
|
+
## Install
|
|
268
|
+
|
|
269
|
+
\`\`\`bash
|
|
270
|
+
npx sigrank
|
|
271
|
+
\`\`\`
|
|
272
|
+
|
|
273
|
+
No global install needed. The MCP server starts automatically when an AI client (Claude, Cursor, Cline) connects.
|
|
274
|
+
|
|
275
|
+
## First Submission
|
|
276
|
+
|
|
277
|
+
1. **Enroll** β register your operator codename:
|
|
278
|
+
\`\`\`bash
|
|
279
|
+
npx sigrank enroll
|
|
280
|
+
\`\`\`
|
|
281
|
+
|
|
282
|
+
2. **Pull + Submit** β scan your local AI session logs and publish:
|
|
283
|
+
\`\`\`bash
|
|
284
|
+
npx sigrank submit
|
|
285
|
+
\`\`\`
|
|
286
|
+
|
|
287
|
+
3. **Dry Run** β see exactly what would be sent before publishing:
|
|
288
|
+
\`\`\`bash
|
|
289
|
+
npx sigrank submit --dry-run
|
|
290
|
+
\`\`\`
|
|
291
|
+
|
|
292
|
+
## Token Pull Sources (bundled)
|
|
293
|
+
|
|
294
|
+
SigRank bundles three token readers as dependencies:
|
|
295
|
+
- **ccusage** β Claude Code session logs
|
|
296
|
+
- **tokscale** β multi-platform token telemetry
|
|
297
|
+
- **tokendash** β dashboard + TUI for token usage
|
|
298
|
+
|
|
299
|
+
No separate install needed. All three are called automatically by the tokenpull tools.
|
|
300
|
+
|
|
301
|
+
## MCP Client Setup
|
|
302
|
+
|
|
303
|
+
Add to your MCP client config:
|
|
304
|
+
\`\`\`json
|
|
305
|
+
{
|
|
306
|
+
"mcpServers": {
|
|
307
|
+
"sigrank": {
|
|
308
|
+
"command": "npx",
|
|
309
|
+
"args": ["sigrank"]
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
\`\`\`
|
|
314
|
+
|
|
315
|
+
## Live Board
|
|
316
|
+
|
|
317
|
+
Visit https://signalaf.com to see the global leaderboard.
|
|
318
|
+
`,
|
|
319
|
+
|
|
320
|
+
"sigrank://privacy-model": `# SigRank Privacy Model
|
|
321
|
+
|
|
322
|
+
## What leaves your machine
|
|
323
|
+
|
|
324
|
+
**Only four numbers per submission:**
|
|
325
|
+
- Input tokens
|
|
326
|
+
- Output tokens
|
|
327
|
+
- Cache create tokens
|
|
328
|
+
- Cache read tokens
|
|
329
|
+
|
|
330
|
+
**That's it.** No prompts, no code, no file contents, no conversation text.
|
|
331
|
+
|
|
332
|
+
## How it works
|
|
333
|
+
|
|
334
|
+
1. **Local-first:** All token pulling happens on your machine. SigRank reads session logs from ~/.claude, ~/.codex, ~/.local/share/amp, etc.
|
|
335
|
+
2. **Token counts only:** The MCP tools extract integer counts from log metadata. The actual content of your conversations is never read, parsed, or transmitted.
|
|
336
|
+
3. **Signed submission:** Submissions are ed25519-signed. The board verifies authenticity without seeing your data.
|
|
337
|
+
4. **No auth required:** No API keys, no OAuth, no account needed to read the leaderboard. Enrollment only requires a codename.
|
|
338
|
+
|
|
339
|
+
## What SigRank can NOT see
|
|
340
|
+
|
|
341
|
+
- Your prompts or messages
|
|
342
|
+
- Your code or file contents
|
|
343
|
+
- Your tool calls or their results
|
|
344
|
+
- Which AI platform you use (beyond token counts)
|
|
345
|
+
- Your identity (only your chosen codename)
|
|
346
|
+
|
|
347
|
+
## Verification
|
|
348
|
+
|
|
349
|
+
The submit_verified tool uses ed25519 signing. The board's source_attestations table records the signature for audit. You can verify your own submissions via get_operator.
|
|
350
|
+
`,
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
354
|
+
resources: RESOURCES,
|
|
355
|
+
}));
|
|
356
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
|
|
357
|
+
const uri = req.params.uri;
|
|
358
|
+
const content = RESOURCE_CONTENT[uri];
|
|
359
|
+
if (!content) {
|
|
360
|
+
throw new McpError(ErrorCode.InvalidParams, `Unknown resource: ${uri}`);
|
|
361
|
+
}
|
|
362
|
+
return {
|
|
363
|
+
contents: [
|
|
364
|
+
{
|
|
365
|
+
uri,
|
|
366
|
+
mimeType: "text/markdown",
|
|
367
|
+
text: content,
|
|
368
|
+
},
|
|
369
|
+
],
|
|
370
|
+
};
|
|
371
|
+
});
|
|
372
|
+
|
|
175
373
|
await server.connect(new StdioServerTransport());
|
|
176
374
|
}
|
|
177
375
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sigrank",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.1",
|
|
4
|
+
"author": "SunrisesIllNeverSee (https://github.com/SunrisesIllNeverSee)",
|
|
4
5
|
"description": "SigRank MCP server β the yield cascade + live leaderboard as MCP tools any agent can call",
|
|
5
6
|
"mcpName": "io.github.SunrisesIllNeverSee/sigrank-mcp",
|
|
6
7
|
"type": "module",
|
package/tools.mjs
CHANGED
|
@@ -553,6 +553,7 @@ export const TOOLS = [
|
|
|
553
553
|
description:
|
|
554
554
|
'Computes the SigRank yield cascade from a paste of token counts. Parses the input, runs the full cascade math locally (no network calls), and returns: Ξ₯ Yield (the headline efficiency metric, Ξ₯ = Cache Reads Γ Output / InputΒ²), SNR (signal-to-noise ratio), Leverage ratio (Cr/I = cache reads divided by input), Velocity (O/I = output divided by input), 10xDEV score, operator class tier (Burner / Builder / 10xer), and a deterministic prose "card" summarizing the result in plain English. Accepts two input formats: (1) JSON object {"input":N,"output":N,"cacheCreate":N,"cacheRead":N} or (2) four whitespace-separated numbers in order: input output cacheCreate cacheRead. Returns an error if the input is malformed or has negative values. Use this for a quick one-off ranking without submitting to the board. Do NOT use this to submit your score β use submit_paste instead, which both ranks and publishes. Do NOT use this if you want to rank all four time windows at once β use rank_windows for that. After calling this, use submit_paste to publish the result if you want to appear on the leaderboard.',
|
|
555
555
|
annotations: {
|
|
556
|
+
title: "Rank a paste",
|
|
556
557
|
...ANNOTATIONS.readOnlyHint,
|
|
557
558
|
...ANNOTATIONS.destructiveHint,
|
|
558
559
|
...ANNOTATIONS.idempotentHint,
|
|
@@ -577,7 +578,7 @@ export const TOOLS = [
|
|
|
577
578
|
name: "get_leaderboard",
|
|
578
579
|
description:
|
|
579
580
|
"Fetches the live public SigRank leaderboard from signalaf.com. Reads all ranked operators sorted by yield (Ξ₯ = Cache Reads Γ Output / InputΒ²) and returns an array of operator summaries. Each entry contains: codename (public display name), yield (Ξ₯, the headline efficiency metric), leverage ratio (Cr/I = cache reads divided by input), velocity (O/I = output divided by input), class tier (Burner / Builder / 10xer), and rank position (integer, 1-based). Returns an empty array if no operators have submitted yet. Use this to see where operators stand overall, to find specific codenames for get_operator lookups, or to display the current rankings. Do NOT use this to check your own rank if you already know your codename β use get_operator instead for a single-operator profile with per-window breakdowns. After calling this, follow up with get_operator to get detailed metrics for any operator of interest.",
|
|
580
|
-
annotations: { ...ANNOTATIONS.readOnlyHint, ...ANNOTATIONS.openWorldHint },
|
|
581
|
+
annotations: { title: "Get leaderboard", ...ANNOTATIONS.readOnlyHint, ...ANNOTATIONS.openWorldHint },
|
|
581
582
|
inputSchema: {
|
|
582
583
|
type: "object",
|
|
583
584
|
properties: {},
|
|
@@ -590,7 +591,7 @@ export const TOOLS = [
|
|
|
590
591
|
name: "get_operator",
|
|
591
592
|
description:
|
|
592
593
|
"Fetches one operator's live profile from the SigRank board by their codename. Reads the operator's current submission data from signalaf.com and returns their detailed metrics: yield (Ξ₯), leverage ratio (Cr/I), velocity (O/I), class tier (Burner / Builder / 10xer), rank position (integer, 1-based), and per-window breakdowns for each time range (7d, 30d, 90d, all-time) with the four canonical pillars (input, output, cacheCreate, cacheRead) per window. Returns an error if the codename is not found on the board. Use this to look up any operator who has submitted to the board β codenames are public and visible on the leaderboard. Do NOT use this to browse all operators β use get_leaderboard for that. After calling this, you can use simulate_change to model what would happen if the operator adjusted their token mix.",
|
|
593
|
-
annotations: { ...ANNOTATIONS.readOnlyHint, ...ANNOTATIONS.openWorldHint },
|
|
594
|
+
annotations: { title: "Get operator profile", ...ANNOTATIONS.readOnlyHint, ...ANNOTATIONS.openWorldHint },
|
|
594
595
|
inputSchema: {
|
|
595
596
|
type: "object",
|
|
596
597
|
properties: {
|
|
@@ -611,6 +612,7 @@ export const TOOLS = [
|
|
|
611
612
|
description:
|
|
612
613
|
"Ranks a paste of token counts AND publishes it to the live SigRank board at signalaf.com in one call. First computes the cascade locally for an instant preview (yield, leverage, velocity, class, card), then submits the raw paste to the board's web-paste endpoint, which re-parses and re-scores it server-side. The server score is authoritative β it may differ from the local preview if the board applies additional validation. Returns both the local preview and the server response (including the operator's new rank if accepted). A codename is required to publish β omit it for a local preview only (no board submission). Token-only, no auth required. Use this when you have token counts from ccusage or a dashboard and want to both see your score and publish it. Do NOT use this if you want to pull your local usage automatically β use tokenpull_submit for the zero-paste flow. Do NOT use this for multi-window dashboard pastes β use rank_windows to rank them first, then submit each window. After calling this, use get_operator with your codename to verify your submission appeared on the board.",
|
|
613
614
|
annotations: {
|
|
615
|
+
title: "Submit paste to board",
|
|
614
616
|
...ANNOTATIONS.destructiveHint,
|
|
615
617
|
...ANNOTATIONS.idempotentHint,
|
|
616
618
|
...ANNOTATIONS.openWorldHint,
|
|
@@ -639,7 +641,7 @@ export const TOOLS = [
|
|
|
639
641
|
name: "tokenpull",
|
|
640
642
|
description:
|
|
641
643
|
"Pull your LOCAL token usage from the platform's session logs and rank it across the four windows (7d/30d/90d/all-time) with the cascade β zero paste. Token-only: reads usage counts not message content. The numbers stay on your machine unless you submit them. Some platforms may have partial data (estimated=true when cacheCreate isn't available) or a dataGap note when the log format doesn't expose raw token counts.",
|
|
642
|
-
annotations: { ...ANNOTATIONS.readOnlyHint, ...ANNOTATIONS.openWorldHint },
|
|
644
|
+
annotations: { title: "Pull local token usage", ...ANNOTATIONS.readOnlyHint, ...ANNOTATIONS.openWorldHint },
|
|
643
645
|
inputSchema: {
|
|
644
646
|
type: "object",
|
|
645
647
|
properties: {
|
|
@@ -657,6 +659,7 @@ export const TOOLS = [
|
|
|
657
659
|
description:
|
|
658
660
|
"Pull your LOCAL token usage from session logs AND publish it to the SigRank board in one call β the zero-paste flow. Reads the four canonical pillars (input, output, cacheCreate, cacheRead) per window from your local logs, computes the cascade, and submits each window to the board where it is re-scored server-side and tagged with the source platform. Requires a codename to publish; omit for a local preview only. Token-only β no prompt content is read or transmitted.",
|
|
659
661
|
annotations: {
|
|
662
|
+
title: "Pull and submit tokens",
|
|
660
663
|
...ANNOTATIONS.destructiveHint,
|
|
661
664
|
...ANNOTATIONS.idempotentHint,
|
|
662
665
|
...ANNOTATIONS.openWorldHint,
|
|
@@ -689,6 +692,7 @@ export const TOOLS = [
|
|
|
689
692
|
description:
|
|
690
693
|
"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 the Claude Max usage dashboard and get the cascade (Ξ₯, SNR, Leverage, Velocity, 10xDEV, class, card) for each window. Each window is parsed and scored independently. Named keys required (input/output/cacheCreate/cacheRead); positional order is NOT safe here (dashboards list cache_read before cache_create β see WINDOWED_PROFILES gotcha). Omit windows you don't have β partial input is allowed (1β4 windows). Does NOT submit to the board; use tokenpull_submit for zero-paste publishing.",
|
|
691
694
|
annotations: {
|
|
695
|
+
title: "Rank all time windows",
|
|
692
696
|
...ANNOTATIONS.readOnlyHint,
|
|
693
697
|
...ANNOTATIONS.idempotentHint,
|
|
694
698
|
...ANNOTATIONS.openWorldHint,
|
|
@@ -759,6 +763,7 @@ export const TOOLS = [
|
|
|
759
763
|
description:
|
|
760
764
|
"One poll per call: pulls your local token logs and returns the current cascade for the watched window β the tool never blocks or loops. Re-call at your desired cadence to watch for changes (interval_s is advisory only and echoed back as poll_interval_s). With submit:true (and an enrolled device) each call may also sign + publish the watched window to the board, rate-limited to once per 5 min per platform+window; default is preview-only (no submit).",
|
|
761
765
|
annotations: {
|
|
766
|
+
title: "Watch token pull",
|
|
762
767
|
...ANNOTATIONS.idempotentHint,
|
|
763
768
|
...ANNOTATIONS.openWorldHint,
|
|
764
769
|
},
|
|
@@ -794,7 +799,7 @@ export const TOOLS = [
|
|
|
794
799
|
name: "tokenpull_compare",
|
|
795
800
|
description:
|
|
796
801
|
"Pull token usage from ALL four local sources in parallel β tokenpull (JSONL canon), ccusage CLI, token-dashboard SQLite, and tokscale report β and return them side-by-side with delta % vs tokenpull as the baseline. Also computes the cascade (Ξ₯, SNR, Leverage, class) for each source so you can see how each verifier scores. Useful for validating your numbers before submitting, or understanding discrepancies between tools. Claude only for token-dash; codex and others use tokenpull + ccusage + tokscale. Token-only, on-device.",
|
|
797
|
-
annotations: { ...ANNOTATIONS.readOnlyHint, ...ANNOTATIONS.openWorldHint },
|
|
802
|
+
annotations: { title: "Compare token sources", ...ANNOTATIONS.readOnlyHint, ...ANNOTATIONS.openWorldHint },
|
|
798
803
|
inputSchema: {
|
|
799
804
|
type: "object",
|
|
800
805
|
properties: {
|
|
@@ -813,6 +818,7 @@ export const TOOLS = [
|
|
|
813
818
|
description:
|
|
814
819
|
'Bind THIS device to your SigRank operator so your signed token runs cascade to the live board. Paste the key from signalaf.com β Settings β "New key" (or "Generate connect code"). On first run it generates + stores a local ed25519 keypair (~/.sigrank-mcp/identity.json); only the PUBLIC key is ever sent. Need a new key? Click "New key" at signalaf.com β Settings, then paste it here.',
|
|
815
820
|
annotations: {
|
|
821
|
+
title: "Enroll device identity",
|
|
816
822
|
...ANNOTATIONS.destructiveHint,
|
|
817
823
|
...ANNOTATIONS.idempotentHint,
|
|
818
824
|
...ANNOTATIONS.openWorldHint,
|
|
@@ -840,6 +846,7 @@ export const TOOLS = [
|
|
|
840
846
|
description:
|
|
841
847
|
"Publish your LOCAL token runs to the SigRank board as a VERIFIED operator β the enrolled, signed path. Reads your pillars (tokenpull), builds the canonical Schema 1.0 snapshot per window, ed25519-signs it with your device key, and POSTs to /api/v1/snapshots. Requires `npx sigrank-mcp enroll` first (a bound device). Only signed submissions from a trusted device rank on the board. Token-only; the private key never leaves your machine. Pass dry_run:true to inspect the exact signed payload without publishing.",
|
|
842
848
|
annotations: {
|
|
849
|
+
title: "Submit verified score",
|
|
843
850
|
...ANNOTATIONS.destructiveHint,
|
|
844
851
|
...ANNOTATIONS.idempotentHint,
|
|
845
852
|
...ANNOTATIONS.openWorldHint,
|
|
@@ -872,6 +879,7 @@ export const TOOLS = [
|
|
|
872
879
|
description:
|
|
873
880
|
"The first PRESCRIPTIVE SigRank tool β 'what if I changed my token mix?' Takes your current 4 pillars (input/output/cacheCreate/cacheRead) and one or more proposed changes, runs the canonical cascade on BOTH the current and simulated values, and returns the exact Ξ₯ Yield delta, class change, and per-metric diffs. This is the 'show me the payoff before I do the work' primitive: no network, no submission, pure local math. Use it to answer 'would increasing my cache-read by 50k tokens actually move my class?' before you change your workflow. Accepts the current pillars as JSON or 4 numbers (same as rank_paste) plus a `changes` object with any of the 4 pillar names mapped to new absolute values OR relative deltas (e.g. {cacheRead: '+50000'} or {input: 800000}).",
|
|
874
881
|
annotations: {
|
|
882
|
+
title: "Simulate metric change",
|
|
875
883
|
...ANNOTATIONS.readOnlyHint,
|
|
876
884
|
...ANNOTATIONS.idempotentHint,
|
|
877
885
|
...ANNOTATIONS.openWorldHint,
|
|
@@ -921,6 +929,7 @@ export const TOOLS = [
|
|
|
921
929
|
description:
|
|
922
930
|
"Analyzes your token cascade and diagnoses where you're leaking efficiency. Takes your 4 pillars (input/output/cacheCreate/cacheRead) and produces a ranked list of efficiency leaks with severity (critical/warning/info), findings, and recommendations. Checks: cache leverage (are you rereading what you wrote?), velocity (are you generating enough output per input?), SNR (is your signal drowning in noise?), cache creation ratio (are you over-committing?), input bloat (is fresh input too high?), and 10xDEV (is the full cascade compounding?). Each finding includes an estimated Ξ₯ impact. Pure local math β no network, no submission. Use this BEFORE simulate_change to understand what's wrong, then use simulate_change to test fixes. Accepts the same input formats as rank_paste (JSON or 4 whitespace numbers).",
|
|
923
931
|
annotations: {
|
|
932
|
+
title: "Diagnose cascade breakdown",
|
|
924
933
|
...ANNOTATIONS.readOnlyHint,
|
|
925
934
|
...ANNOTATIONS.idempotentHint,
|
|
926
935
|
...ANNOTATIONS.openWorldHint,
|
|
@@ -943,6 +952,7 @@ export const TOOLS = [
|
|
|
943
952
|
description:
|
|
944
953
|
"Generates ranked, simulated improvement suggestions for your token cascade. Takes your 4 pillars, tests multiple improvement strategies (increase cache reads, reduce fresh input, increase output, optimize cache creation), simulates each with the canonical cascade engine, and returns them ranked by Ξ₯ yield impact. Each suggestion includes: the action, which pillar to change, how much to change it, the projected Ξ₯ after the change, the yield delta, the projected class tier, and a rationale. Also returns the single highest-impact change (best_single_change). Pure local math β no network, no submission. Use this after diagnose_cascade to get actionable next steps, then use simulate_change to fine-tune before committing. Accepts the same input formats as rank_paste.",
|
|
945
954
|
annotations: {
|
|
955
|
+
title: "Suggest improvements",
|
|
946
956
|
...ANNOTATIONS.readOnlyHint,
|
|
947
957
|
...ANNOTATIONS.idempotentHint,
|
|
948
958
|
...ANNOTATIONS.openWorldHint,
|
|
@@ -965,6 +975,7 @@ export const TOOLS = [
|
|
|
965
975
|
description:
|
|
966
976
|
"Runs the full self-improvement cycle in one call: (1) gets your current token pillars β either from the provided text or by running tokenpull on your local logs, (2) diagnoses where you're leaking efficiency (diagnose_cascade), (3) generates ranked improvement suggestions (suggest_improvements), (4) simulates the top suggestion (simulate_change), and (5) returns the complete cycle: diagnosis + suggestions + the simulated impact of the best change. This is the 'one-click optimize' tool β call it at the end of a session to see what to improve next time. If you provide pillars in `text`, it skips the tokenpull step. If you omit `text`, it runs tokenpull first (requires local ccusage logs). Pure local math β no network, no submission. The `scope` parameter adds mode detection (BUILD/EDIT/DEBUG/MAINTAIN/IDLE) and scoped analysis: 'daily' (default β current behavior + mode), 'weekly' (compound into weekly snapshots + report artifact), 'trend' (30d/90d trajectory analysis).",
|
|
967
977
|
annotations: {
|
|
978
|
+
title: "Self-improve plan",
|
|
968
979
|
...ANNOTATIONS.readOnlyHint,
|
|
969
980
|
...ANNOTATIONS.idempotentHint,
|
|
970
981
|
...ANNOTATIONS.openWorldHint,
|