@relayburn/mcp 1.8.0 → 1.9.0

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/CHANGELOG.md CHANGED
@@ -4,6 +4,13 @@ All notable changes to `@relayburn/mcp`.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.9.0] - 2026-05-03
8
+
9
+ ### Changed
10
+
11
+ - `burn__sessionCost` is now a thin wrapper over `@relayburn/sdk`'s new `sessionCost()` function. The wire shape is unchanged (`sessionId`, `totalUSD`, `totalTokens`, `turnCount`, `models`, `note?`); the cost computation, archive-with-fallback strategy, and pricing snapshot all live in the SDK now, eliminating the duplicate query path that previously lived inside the MCP tool.
12
+ - `@relayburn/mcp` now depends on `@relayburn/sdk`. The package's role going forward is "MCP-shaped wrapper over the SDK's query surface" — new tools should call SDK functions rather than re-implementing computation against `@relayburn/analyze` / `@relayburn/ledger`.
13
+
7
14
  ## [1.6.2] - 2026-05-02
8
15
 
9
16
  ### Changed
@@ -3,36 +3,6 @@ import { PassThrough } from 'node:stream';
3
3
  import { describe, it } from 'node:test';
4
4
  import { startStdioServer } from './server.js';
5
5
  import { createSessionCostTool } from './tools/session-cost.js';
6
- const PRICING = {
7
- 'claude-sonnet-4-5': {
8
- input: 3,
9
- output: 15,
10
- cacheRead: 0.3,
11
- cacheWrite: 3.75,
12
- reasoningMode: 'same_as_output',
13
- },
14
- };
15
- function turn() {
16
- return {
17
- v: 1,
18
- source: 'claude-code',
19
- sessionId: 'S',
20
- messageId: 'm1',
21
- turnIndex: 0,
22
- ts: '2026-04-24T10:00:00.000Z',
23
- model: 'claude-sonnet-4-5',
24
- usage: {
25
- input: 1_000_000,
26
- output: 0,
27
- reasoning: 0,
28
- cacheRead: 0,
29
- cacheCreate5m: 0,
30
- cacheCreate1h: 0,
31
- },
32
- toolCalls: [],
33
- enrichment: {},
34
- };
35
- }
36
6
  function collectResponses(stream) {
37
7
  const lines = [];
38
8
  let buf = '';
@@ -55,14 +25,19 @@ function send(stream, msg) {
55
25
  stream.write(JSON.stringify(msg) + '\n');
56
26
  }
57
27
  describe('end-to-end: spawn server, call burn__sessionCost, verify cost', () => {
58
- it('returns the same total a direct cost computation would', async () => {
28
+ it('returns the same totals the SDK sessionCost would produce', async () => {
59
29
  const input = new PassThrough();
60
30
  const output = new PassThrough();
61
31
  const responses = collectResponses(output);
62
32
  const sessionCost = createSessionCostTool({
63
33
  defaultSessionId: 'S',
64
- queryTurns: async () => [turn()],
65
- loadPricing: async () => PRICING,
34
+ sessionCost: async (opts) => ({
35
+ sessionId: opts.session ?? null,
36
+ totalUSD: 3,
37
+ totalTokens: 1_000_000,
38
+ turnCount: 1,
39
+ models: ['claude-sonnet-4-5'],
40
+ }),
66
41
  });
67
42
  const server = startStdioServer({
68
43
  name: '@relayburn/mcp',
@@ -94,8 +69,6 @@ describe('end-to-end: spawn server, call burn__sessionCost, verify cost', () =>
94
69
  assert.ok(callResp.result, 'tool call returned a result');
95
70
  const text = callResp.result.content[0].text;
96
71
  const parsed = JSON.parse(text);
97
- // 1M input @ $3/M = $3, matching what `burn summary --session S` would
98
- // report for the same turns and pricing.
99
72
  assert.equal(parsed.totalUSD, 3);
100
73
  assert.equal(parsed.turnCount, 1);
101
74
  assert.equal(parsed.sessionId, 'S');
@@ -1 +1 @@
1
- {"version":3,"file":"end-to-end.test.js","sourceRoot":"","sources":["../src/end-to-end.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"end-to-end.test.js","sourceRoot":"","sources":["../src/end-to-end.test.ts"],"names":[],"mappings":"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"}
@@ -30,15 +30,6 @@ function fakeTurn(overrides = {}) {
30
30
  ...overrides,
31
31
  };
32
32
  }
33
- const PRICING_LOADER = async () => ({
34
- 'claude-sonnet-4-5': {
35
- input: 3,
36
- output: 15,
37
- cacheRead: 0.3,
38
- cacheWrite: 3.75,
39
- reasoningMode: 'same_as_output',
40
- },
41
- });
42
33
  describe('MCP tool handlers backed by archive (issue #97)', () => {
43
34
  let tmpDir;
44
35
  const originalHome = process.env['RELAYBURN_HOME'];
@@ -82,7 +73,6 @@ describe('MCP tool handlers backed by archive (issue #97)', () => {
82
73
  await buildArchive();
83
74
  const tool = createSessionCostTool({
84
75
  defaultSessionId: 's-cost',
85
- loadPricing: PRICING_LOADER,
86
76
  });
87
77
  const result = (await tool.handler({}));
88
78
  assert.equal(result.sessionId, 's-cost');
@@ -118,7 +108,6 @@ describe('MCP tool handlers backed by archive (issue #97)', () => {
118
108
  ]);
119
109
  const tool = createSessionCostTool({
120
110
  defaultSessionId: 's-cost',
121
- loadPricing: PRICING_LOADER,
122
111
  });
123
112
  const result = (await tool.handler({}));
124
113
  assert.equal(result.turnCount, 2);
@@ -136,7 +125,6 @@ describe('MCP tool handlers backed by archive (issue #97)', () => {
136
125
  const logs = [];
137
126
  const tool = createSessionCostTool({
138
127
  defaultSessionId: 's-cost',
139
- loadPricing: PRICING_LOADER,
140
128
  onLog: (m) => logs.push(m),
141
129
  });
142
130
  const result = (await tool.handler({}));
@@ -144,7 +132,7 @@ describe('MCP tool handlers backed by archive (issue #97)', () => {
144
132
  assert.equal(result.totalTokens, 1_000_000);
145
133
  // 1M input @ $3/M = $3.
146
134
  assert.equal(result.totalUSD, 3);
147
- assert.ok(logs.some((m) => /sessionCost: archive query failed/.test(m)), `expected an archive-fallback log line, got: ${JSON.stringify(logs)}`);
135
+ assert.ok(logs.some((m) => /archive query failed/.test(m)), `expected an archive-fallback log line, got: ${JSON.stringify(logs)}`);
148
136
  });
149
137
  });
150
138
  });
@@ -1 +1 @@
1
- {"version":3,"file":"archive-backed.test.js","sourceRoot":"","sources":["../../src/tools/archive-backed.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive-backed.test.js","sourceRoot":"","sources":["../../src/tools/archive-backed.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAEpE,OAAO,EACL,2BAA2B,EAC3B,WAAW,EACX,WAAW,EACX,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,qBAAqB,EAA0B,MAAM,mBAAmB,CAAC;AAElF,6EAA6E;AAC7E,4EAA4E;AAC5E,gDAAgD;AAEhD,SAAS,QAAQ,CAAC,YAAiC,EAAE;IACnD,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,CAAC;QACZ,EAAE,EAAE,0BAA0B;QAC9B,KAAK,EAAE,mBAAmB;QAC1B,KAAK,EAAE;YACL,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;SACjB;QACD,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,cAAc;QACvB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,IAAI,MAAc,CAAC;IACnB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;QACvC,2BAA2B,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,mEAAmE;YACnE,gEAAgE;YAChE,MAAM,WAAW,CAAC;gBAChB,QAAQ,EAAE;gBACV,QAAQ,CAAC;oBACP,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,CAAC;oBACZ,KAAK,EAAE;wBACL,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,CAAC;wBACZ,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC;aACH,CAAC,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;YAErB,MAAM,IAAI,GAAG,qBAAqB,CAAC;gBACjC,gBAAgB,EAAE,QAAQ;aAC3B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAsB,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,6CAA6C;YAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,wEAAwE;YACxE,iEAAiE;YACjE,oEAAoE;YACpE,2DAA2D;YAC3D,MAAM,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,YAAY,EAAE,CAAC;YAErB,uEAAuE;YACvE,4DAA4D;YAC5D,MAAM,WAAW,CAAC;gBAChB,QAAQ,CAAC;oBACP,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,CAAC;oBACZ,EAAE,EAAE,0BAA0B;oBAC9B,KAAK,EAAE;wBACL,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,CAAC;wBACZ,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,qBAAqB,CAAC;gBACjC,gBAAgB,EAAE,QAAQ;aAC3B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAsB,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,6CAA6C;YAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChC,4DAA4D;YAC5D,oEAAoE;YACpE,qEAAqE;YACrE,oBAAoB;YACpB,MAAM,SAAS,CAAC,WAAW,EAAE,EAAE,+BAA+B,EAAE,MAAM,CAAC,CAAC;YAExE,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,qBAAqB,CAAC;gBACjC,gBAAgB,EAAE,QAAQ;gBAC1B,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC3B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAsB,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,wBAAwB;YACxB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAChD,+CAA+C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CACtE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,26 +1,22 @@
1
- import type { PricingTable } from '@relayburn/analyze';
2
- import type { EnrichedTurn } from '@relayburn/ledger';
1
+ import type { SessionCostResult as SdkSessionCostResult } from '@relayburn/sdk';
3
2
  import type { ToolDefinition } from '../types.js';
4
3
  export interface SessionCostInput {
5
4
  sessionId?: string;
6
5
  }
7
- export interface SessionCostResult {
8
- sessionId: string | null;
9
- totalUSD: number;
10
- totalTokens: number;
11
- turnCount: number;
12
- models: string[];
13
- note?: string;
14
- }
6
+ export type SessionCostResult = SdkSessionCostResult;
15
7
  export interface SessionCostDeps {
16
8
  defaultSessionId: string | undefined;
17
- queryTurns?: (sessionId: string) => Promise<EnrichedTurn[]>;
18
- loadPricing?: () => Promise<PricingTable>;
19
9
  /**
20
- * Called when the default archive-backed `queryTurns` falls through to the
21
- * ledger-walking `queryAll` because the archive open / query threw. Defaults
22
- * to no-op so the MCP server stays quiet on the happy path; the CLI server
23
- * wires this to stderr so failures are visible in the MCP host's log.
10
+ * Override for the SDK's `sessionCost(...)` call. Tests inject a fake to
11
+ * exercise the tool surface without touching the on-disk ledger.
12
+ */
13
+ sessionCost?: (opts: {
14
+ session?: string;
15
+ onLog?: (msg: string) => void;
16
+ }) => Promise<SdkSessionCostResult>;
17
+ /**
18
+ * Forwarded to `@relayburn/sdk` so archive-fallback log lines surface in
19
+ * whatever channel the host wired up (CLI server uses stderr).
24
20
  */
25
21
  onLog?: (msg: string) => void;
26
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session-cost.d.ts","sourceRoot":"","sources":["../../src/tools/session-cost.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CA2F3E"}
1
+ {"version":3,"file":"session-cost.d.ts","sourceRoot":"","sources":["../../src/tools/session-cost.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC3G;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAqC3E"}
@@ -1,26 +1,6 @@
1
- import { costForTurn, loadPricing, sumCosts } from '@relayburn/analyze';
2
- import { buildArchive, queryAll, queryTurnsFromArchive } from '@relayburn/ledger';
1
+ import { sessionCost as sdkSessionCost } from '@relayburn/sdk';
3
2
  export function createSessionCostTool(deps) {
4
- const log = deps.onLog ?? (() => { });
5
- const queryTurns = deps.queryTurns ??
6
- (async (id) => {
7
- // Hooks append new turns to the JSONL ledger throughout the session,
8
- // but the archive is only materialized when something explicitly calls
9
- // `buildArchive`. Run an incremental build before each query so the
10
- // tool reflects fresh data. The build is
11
- // idempotent + cursor-driven, so it's a no-op when nothing has changed
12
- // since the last call.
13
- try {
14
- await buildArchive();
15
- return await queryTurnsFromArchive({ sessionId: id });
16
- }
17
- catch (err) {
18
- const msg = err instanceof Error ? err.message : String(err);
19
- log(`sessionCost: archive query failed, falling back to ledger walk: ${msg}`);
20
- return queryAll({ sessionId: id });
21
- }
22
- });
23
- const pricingLoader = deps.loadPricing ?? loadPricing;
3
+ const callSessionCost = deps.sessionCost ?? sdkSessionCost;
24
4
  return {
25
5
  name: 'burn__sessionCost',
26
6
  description: 'Return the total cost (USD), token count, and turn count for a session. ' +
@@ -40,57 +20,21 @@ export function createSessionCostTool(deps) {
40
20
  handler: async (raw) => {
41
21
  const input = raw;
42
22
  const sessionId = input.sessionId ?? deps.defaultSessionId;
43
- if (!sessionId) {
44
- return {
45
- sessionId: null,
46
- totalUSD: 0,
47
- totalTokens: 0,
48
- turnCount: 0,
49
- models: [],
50
- note: 'no session id provided and server was not registered with one',
51
- };
52
- }
53
- const turns = await queryTurns(sessionId);
54
- if (turns.length === 0) {
55
- return {
56
- sessionId,
57
- totalUSD: 0,
58
- totalTokens: 0,
59
- turnCount: 0,
60
- models: [],
61
- note: 'no turns recorded for this session yet',
62
- };
23
+ const opts = {};
24
+ if (sessionId !== undefined)
25
+ opts.session = sessionId;
26
+ if (deps.onLog !== undefined)
27
+ opts.onLog = deps.onLog;
28
+ const result = await callSessionCost(opts);
29
+ // The SDK's "no session id" note is generic ("no session id provided");
30
+ // keep the more descriptive variant the MCP tool used to surface so the
31
+ // hint that the *server* should have been registered with one stays
32
+ // visible to MCP clients.
33
+ if (result.sessionId === null && sessionId === undefined) {
34
+ return { ...result, note: 'no session id provided and server was not registered with one' };
63
35
  }
64
- const pricing = await pricingLoader();
65
- const models = new Set();
66
- let totalTokens = 0;
67
- const costs = [];
68
- for (const t of turns) {
69
- models.add(t.model);
70
- const u = t.usage;
71
- totalTokens +=
72
- (u.input ?? 0) +
73
- (u.output ?? 0) +
74
- (u.reasoning ?? 0) +
75
- (u.cacheRead ?? 0) +
76
- (u.cacheCreate5m ?? 0) +
77
- (u.cacheCreate1h ?? 0);
78
- const c = costForTurn(t, pricing);
79
- if (c)
80
- costs.push(c);
81
- }
82
- const total = sumCosts(costs);
83
- return {
84
- sessionId,
85
- totalUSD: round6(total.total),
86
- totalTokens,
87
- turnCount: turns.length,
88
- models: [...models].sort(),
89
- };
36
+ return result;
90
37
  },
91
38
  };
92
39
  }
93
- function round6(n) {
94
- return Math.round(n * 1_000_000) / 1_000_000;
95
- }
96
40
  //# sourceMappingURL=session-cost.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-cost.js","sourceRoot":"","sources":["../../src/tools/session-cost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-cost.js","sourceRoot":"","sources":["../../src/tools/session-cost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyB/D,MAAM,UAAU,qBAAqB,CAAC,IAAqB;IACzD,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,IAAI,cAAc,CAAC;IAC3D,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,0EAA0E;YAC1E,yEAAyE;YACzE,sBAAsB;QACxB,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,oFAAoF;iBACvF;aACF;YACD,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,GAAuB,CAAC;YACtC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;YAC3D,MAAM,IAAI,GAAwD,EAAE,CAAC;YACrE,IAAI,SAAS,KAAK,SAAS;gBAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACtD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3C,wEAAwE;YACxE,wEAAwE;YACxE,oEAAoE;YACpE,0BAA0B;YAC1B,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBACzD,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,+DAA+D,EAAE,CAAC;YAC9F,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,59 +1,39 @@
1
1
  import { strict as assert } from 'node:assert';
2
2
  import { describe, it } from 'node:test';
3
3
  import { createSessionCostTool } from './session-cost.js';
4
- const PRICING = {
5
- 'claude-sonnet-4-5': {
6
- input: 3,
7
- output: 15,
8
- cacheRead: 0.3,
9
- cacheWrite: 3.75,
10
- reasoningMode: 'same_as_output',
11
- },
12
- };
13
- function turn(overrides = {}) {
14
- return {
15
- v: 1,
16
- source: 'claude-code',
17
- sessionId: 's1',
18
- messageId: 'm1',
19
- turnIndex: 0,
20
- ts: '2026-04-24T10:00:00.000Z',
21
- model: 'claude-sonnet-4-5',
22
- usage: {
23
- input: 1000,
24
- output: 500,
25
- reasoning: 0,
26
- cacheRead: 0,
27
- cacheCreate5m: 0,
28
- cacheCreate1h: 0,
29
- },
30
- toolCalls: [],
31
- enrichment: {},
32
- ...overrides,
33
- };
34
- }
35
4
  describe('createSessionCostTool', () => {
36
- it('returns zero totals when defaultSessionId is missing and no override given', async () => {
5
+ it('returns the SDK no-session shape with the MCP-specific note when no id is registered', async () => {
37
6
  const tool = createSessionCostTool({
38
7
  defaultSessionId: undefined,
39
- queryTurns: async () => [],
40
- loadPricing: async () => PRICING,
8
+ sessionCost: async () => ({
9
+ sessionId: null,
10
+ totalUSD: 0,
11
+ totalTokens: 0,
12
+ turnCount: 0,
13
+ models: [],
14
+ note: 'no session id provided',
15
+ }),
41
16
  });
42
17
  const result = (await tool.handler({}));
43
18
  assert.equal(result.sessionId, null);
44
19
  assert.equal(result.totalUSD, 0);
45
20
  assert.equal(result.turnCount, 0);
46
- assert.match(result.note ?? '', /no session id/);
21
+ assert.match(result.note ?? '', /no session id provided and server was not registered/);
47
22
  });
48
23
  it('uses the override sessionId when provided', async () => {
49
24
  let queriedFor;
50
25
  const tool = createSessionCostTool({
51
26
  defaultSessionId: 'default-id',
52
- queryTurns: async (id) => {
53
- queriedFor = id;
54
- return [turn({ sessionId: id })];
27
+ sessionCost: async (opts) => {
28
+ queriedFor = opts.session;
29
+ return {
30
+ sessionId: opts.session ?? null,
31
+ totalUSD: 0,
32
+ totalTokens: 0,
33
+ turnCount: 1,
34
+ models: ['claude-sonnet-4-5'],
35
+ };
55
36
  },
56
- loadPricing: async () => PRICING,
57
37
  });
58
38
  await tool.handler({ sessionId: 'override-id' });
59
39
  assert.equal(queriedFor, 'override-id');
@@ -62,61 +42,58 @@ describe('createSessionCostTool', () => {
62
42
  let queriedFor;
63
43
  const tool = createSessionCostTool({
64
44
  defaultSessionId: 'baked-id',
65
- queryTurns: async (id) => {
66
- queriedFor = id;
67
- return [];
45
+ sessionCost: async (opts) => {
46
+ queriedFor = opts.session;
47
+ return {
48
+ sessionId: opts.session ?? null,
49
+ totalUSD: 0,
50
+ totalTokens: 0,
51
+ turnCount: 0,
52
+ models: [],
53
+ };
68
54
  },
69
- loadPricing: async () => PRICING,
70
55
  });
71
56
  await tool.handler({});
72
57
  assert.equal(queriedFor, 'baked-id');
73
58
  });
74
- it('aggregates usage and cost across turns', async () => {
75
- const turns = [
76
- turn({
77
- usage: {
78
- input: 1_000_000,
79
- output: 0,
80
- reasoning: 0,
81
- cacheRead: 0,
82
- cacheCreate5m: 0,
83
- cacheCreate1h: 0,
84
- },
85
- }),
86
- turn({
87
- messageId: 'm2',
88
- turnIndex: 1,
89
- usage: {
90
- input: 0,
91
- output: 1_000_000,
92
- reasoning: 0,
93
- cacheRead: 0,
94
- cacheCreate5m: 0,
95
- cacheCreate1h: 0,
96
- },
97
- }),
98
- ];
59
+ it('returns the SDK result verbatim when a session id is present', async () => {
99
60
  const tool = createSessionCostTool({
100
61
  defaultSessionId: 's1',
101
- queryTurns: async () => turns,
102
- loadPricing: async () => PRICING,
62
+ sessionCost: async (opts) => ({
63
+ sessionId: opts.session ?? null,
64
+ totalUSD: 18,
65
+ totalTokens: 2_000_000,
66
+ turnCount: 2,
67
+ models: ['claude-sonnet-4-5'],
68
+ }),
103
69
  });
104
70
  const result = (await tool.handler({}));
71
+ assert.equal(result.sessionId, 's1');
105
72
  assert.equal(result.turnCount, 2);
106
73
  assert.equal(result.totalTokens, 2_000_000);
107
- // 1M input @ $3/M + 1M output @ $15/M = $18.
108
74
  assert.equal(result.totalUSD, 18);
109
75
  assert.deepEqual(result.models, ['claude-sonnet-4-5']);
76
+ assert.equal(result.note, undefined);
110
77
  });
111
- it('records a note when the session has no turns yet', async () => {
78
+ it('passes the host onLog through to the SDK so archive-fallback messages surface', async () => {
79
+ let captured;
112
80
  const tool = createSessionCostTool({
113
81
  defaultSessionId: 's1',
114
- queryTurns: async () => [],
115
- loadPricing: async () => PRICING,
82
+ onLog: () => { },
83
+ sessionCost: async (opts) => {
84
+ captured = opts.onLog;
85
+ return {
86
+ sessionId: opts.session ?? null,
87
+ totalUSD: 0,
88
+ totalTokens: 0,
89
+ turnCount: 0,
90
+ models: [],
91
+ note: 'no turns recorded for this session yet',
92
+ };
93
+ },
116
94
  });
117
- const result = (await tool.handler({}));
118
- assert.equal(result.turnCount, 0);
119
- assert.match(result.note ?? '', /no turns recorded/);
95
+ await tool.handler({});
96
+ assert.equal(typeof captured, 'function');
120
97
  });
121
98
  it('declares its tool surface (name, description, schema)', () => {
122
99
  const tool = createSessionCostTool({ defaultSessionId: undefined });
@@ -1 +1 @@
1
- {"version":3,"file":"session-cost.test.js","sourceRoot":"","sources":["../../src/tools/session-cost.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-cost.test.js","sourceRoot":"","sources":["../../src/tools/session-cost.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relayburn/mcp",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "MCP (Model Context Protocol) server exposing read-only relayburn ledger queries for in-session self-query",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,9 +19,10 @@
19
19
  "node": ">=22"
20
20
  },
21
21
  "dependencies": {
22
- "@relayburn/reader": "1.8.0",
23
- "@relayburn/ledger": "1.8.0",
24
- "@relayburn/analyze": "1.8.0"
22
+ "@relayburn/reader": "1.9.0",
23
+ "@relayburn/ledger": "1.9.0",
24
+ "@relayburn/sdk": "1.9.0",
25
+ "@relayburn/analyze": "1.9.0"
25
26
  },
26
27
  "repository": {
27
28
  "type": "git",