@sharpe-terminal/mcp-server 1.2.0 → 1.5.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.
@@ -14,80 +14,303 @@ export const API_TOOL_OUTPUT_SCHEMA = {
14
14
  .describe("Sharpe API payload after filtering and response-size truncation."),
15
15
  error: z.string().optional().describe("Error message when the call fails."),
16
16
  };
17
+ /**
18
+ * Splits a client result into rows + pagination. The api-client preserves
19
+ * the pagination envelope for paginated endpoints (funding/rates,
20
+ * gem-finder/data); filtering and truncation operate on the rows, and the
21
+ * pagination block is reattached to the final payload so callers can pass
22
+ * the cursor onward. Metadata riding beside a page (a futures chart's
23
+ * `chart`/`coverage`/`source`) comes back as `extras` so it is reattached
24
+ * too rather than dropped with the envelope.
25
+ */
26
+ export function splitPaginated(result) {
27
+ if (result &&
28
+ typeof result === "object" &&
29
+ !Array.isArray(result) &&
30
+ "pagination" in result &&
31
+ "data" in result) {
32
+ const { data, pagination, ...extras } = result;
33
+ return { rows: data, pagination: pagination ?? null, extras };
34
+ }
35
+ return { rows: result, pagination: null, extras: {} };
36
+ }
37
+ /**
38
+ * Client-side paging for a free route that ignores limit/cursor and returns
39
+ * every row. Mirrors the v1 `paginateData` contract (src/lib/api/response.ts):
40
+ * the cursor is the base64url-encoded next offset, so a keyless caller walks
41
+ * the same pages an authenticated one would.
42
+ */
43
+ export function paginateRows(rows, limit, cursor) {
44
+ const offset = cursor ? decodeOffsetCursor(cursor) : 0;
45
+ const nextOffset = offset + limit;
46
+ const hasMore = nextOffset < rows.length;
47
+ return {
48
+ data: rows.slice(offset, nextOffset),
49
+ pagination: {
50
+ cursor: hasMore
51
+ ? Buffer.from(String(nextOffset)).toString("base64url")
52
+ : null,
53
+ has_more: hasMore,
54
+ total: rows.length,
55
+ },
56
+ };
57
+ }
58
+ function decodeOffsetCursor(cursor) {
59
+ const decoded = /^[A-Za-z0-9_-]+$/.test(cursor)
60
+ ? Buffer.from(cursor, "base64url").toString("utf8")
61
+ : "";
62
+ if (!/^\d+$/.test(decoded))
63
+ throw new Error("Invalid pagination cursor.");
64
+ return Number(decoded);
65
+ }
66
+ /**
67
+ * A row's time in epoch ms, read from the keys the futures routes sort on
68
+ * (`snapshot_at ?? settled_at ?? timestamp`). Null when absent or unparseable.
69
+ */
70
+ export function rowTimeMs(row) {
71
+ if (!row || typeof row !== "object" || Array.isArray(row))
72
+ return null;
73
+ const rec = row;
74
+ const raw = rec.snapshot_at ?? rec.settled_at ?? rec.timestamp;
75
+ if (raw == null)
76
+ return null;
77
+ const ms = typeof raw === "number" ? raw : Date.parse(String(raw));
78
+ return Number.isFinite(ms) ? ms : null;
79
+ }
80
+ /**
81
+ * Caps an array at `size` items. Sharpe time series are ordered oldest-first,
82
+ * so a head slice handed agents only the oldest rows (a 3M oi-snapshot capped
83
+ * to readings 9-10 days old, 2026-09-24 audit). An ascending series keeps its
84
+ * newest rows; every other array keeps its head, where the API puts its
85
+ * ranking.
86
+ */
87
+ function capArray(values, size) {
88
+ const first = rowTimeMs(values[0]);
89
+ const last = rowTimeMs(values[values.length - 1]);
90
+ if (first != null && last != null && last > first) {
91
+ return {
92
+ kept: values.slice(Math.max(0, values.length - size)),
93
+ latest: true,
94
+ };
95
+ }
96
+ return { kept: values.slice(0, size), latest: false };
97
+ }
17
98
  export const TEXT_TOOL_OUTPUT_SCHEMA = {
18
99
  report: z.string().optional().describe("Formatted markdown report."),
100
+ // analyze_coin returns the coin beside its report. The schema is strict, so
101
+ // leaving it out made SDK clients that validate output reject every
102
+ // analyze_coin result (-32602, 2026-09-26).
103
+ coin: z.string().optional().describe("Coin the report covers."),
19
104
  error: z.string().optional().describe("Error message when the call fails."),
20
105
  };
106
+ function encodeSnapshotCursor(payload) {
107
+ return Buffer.from(JSON.stringify(payload)).toString("base64url");
108
+ }
109
+ function decodeSnapshotCursor(cursor) {
110
+ try {
111
+ const payload = JSON.parse(Buffer.from(cursor, "base64url").toString("utf8"));
112
+ if (payload.version !== 1 ||
113
+ typeof payload.snapshot !== "string" ||
114
+ payload.snapshot.length === 0 ||
115
+ !Number.isInteger(payload.offset) ||
116
+ (payload.offset ?? -1) < 0) {
117
+ throw new Error("invalid cursor");
118
+ }
119
+ return payload;
120
+ }
121
+ catch {
122
+ throw new Error("Invalid Gem Finder pagination cursor.");
123
+ }
124
+ }
125
+ /**
126
+ * Client-side pagination for the free Gem Finder fallback, whose raw payload
127
+ * contains the complete `coins` array. Cursor shape matches the v1 endpoint so
128
+ * agents do not silently restart from offset zero when no API key is set.
129
+ */
130
+ export function paginateSnapshotPayload(payload, limit, cursor) {
131
+ const rows = Array.isArray(payload.coins) ? payload.coins : [];
132
+ const snapshot = typeof payload.updatedAt === "string" && payload.updatedAt
133
+ ? payload.updatedAt
134
+ : "empty-snapshot";
135
+ let offset = 0;
136
+ if (cursor) {
137
+ const decoded = decodeSnapshotCursor(cursor);
138
+ if (decoded.snapshot !== snapshot) {
139
+ throw new Error("Gem Finder pagination cursor belongs to an expired cache snapshot. Restart without a cursor.");
140
+ }
141
+ offset = decoded.offset;
142
+ }
143
+ const data = rows.slice(offset, offset + limit);
144
+ const nextOffset = offset + limit;
145
+ const hasMore = nextOffset < rows.length;
146
+ return {
147
+ data,
148
+ pagination: {
149
+ cursor: hasMore
150
+ ? encodeSnapshotCursor({
151
+ version: 1,
152
+ snapshot,
153
+ offset: nextOffset,
154
+ })
155
+ : null,
156
+ has_more: hasMore,
157
+ total: rows.length,
158
+ },
159
+ };
160
+ }
21
161
  const TRUNCATION_MESSAGE = "Response truncated to protect the agent context window. Narrow the result set with a cursor, offset, or filter parameters to retrieve the remaining items.";
22
162
  export function truncateResponse(data) {
23
- if (Array.isArray(data) && data.length > MAX_ITEMS) {
24
- return capByCharacters({
25
- items: data.slice(0, MAX_ITEMS),
26
- truncated: true,
27
- total: data.length,
28
- showing: MAX_ITEMS,
29
- }, ["items"]);
163
+ if (Array.isArray(data)) {
164
+ const serializedLength = JSON.stringify(data).length;
165
+ if (data.length > MAX_ITEMS || serializedLength > CHARACTER_LIMIT) {
166
+ const { kept, latest } = capArray(data, MAX_ITEMS);
167
+ const items = kept.map((value) => truncateNestedValue(value));
168
+ const result = { items };
169
+ markTruncated(result, "items", data.length, items.length, latest);
170
+ return capByCharacters(result);
171
+ }
172
+ return data.map((value) => truncateNestedValue(value));
30
173
  }
31
174
  if (data && typeof data === "object" && !Array.isArray(data)) {
32
- const obj = data;
33
- const truncatedKeys = [];
34
- let result;
35
- // Truncate ANY own array-valued key longer than MAX_ITEMS so wrappers like
36
- // { rows }, { coins }, { matrix } are covered, not just the legacy fixed keys.
37
- for (const [key, value] of Object.entries(obj)) {
38
- if (Array.isArray(value) && value.length > MAX_ITEMS) {
39
- if (!result) {
40
- result = { ...obj };
41
- }
42
- result[key] = value.slice(0, MAX_ITEMS);
43
- result.truncated = true;
44
- result.total = value.length;
45
- result.showing = MAX_ITEMS;
46
- truncatedKeys.push(key);
175
+ return capByCharacters(truncateNestedObject(data));
176
+ }
177
+ return data;
178
+ }
179
+ function truncateNestedValue(value) {
180
+ if (Array.isArray(value)) {
181
+ return capArray(value, MAX_ITEMS).kept.map((item) => truncateNestedValue(item));
182
+ }
183
+ if (value && typeof value === "object") {
184
+ return truncateNestedObject(value);
185
+ }
186
+ return value;
187
+ }
188
+ function truncateNestedObject(obj) {
189
+ const result = {};
190
+ for (const [key, value] of Object.entries(obj)) {
191
+ if (Array.isArray(value)) {
192
+ const { kept, latest } = capArray(value, MAX_ITEMS);
193
+ const truncated = kept.map((item) => truncateNestedValue(item));
194
+ result[key] = truncated;
195
+ if (truncated.length < value.length) {
196
+ markTruncated(result, key, value.length, truncated.length, latest);
47
197
  }
198
+ continue;
48
199
  }
49
- if (result) {
50
- return capByCharacters(result, truncatedKeys);
51
- }
52
- return capByCharacters({ ...obj }, getArrayKeys(obj));
200
+ result[key] = truncateNestedValue(value);
53
201
  }
54
- return data;
202
+ return result;
55
203
  }
56
- function getArrayKeys(obj) {
57
- return Object.entries(obj)
58
- .filter(([, value]) => Array.isArray(value))
59
- .map(([key]) => key);
204
+ function markTruncated(owner, key, total, showing, keptLatest = false) {
205
+ owner.truncated = true;
206
+ owner.truncation_message = TRUNCATION_MESSAGE;
207
+ const existing = owner.truncated_fields &&
208
+ typeof owner.truncated_fields === "object" &&
209
+ !Array.isArray(owner.truncated_fields)
210
+ ? owner.truncated_fields
211
+ : {};
212
+ // A field capped more than once (MAX_ITEMS, then each character-limit
213
+ // halving) keeps the length it had before its first cap. Overwriting it
214
+ // reported an intermediate length as the total (2026-09-24 audit).
215
+ const prior = existing[key];
216
+ const originalTotal = typeof prior?.total === "number" ? prior.total : total;
217
+ const fields = {
218
+ ...existing,
219
+ [key]: keptLatest
220
+ ? { total: originalTotal, showing, kept: "latest" }
221
+ : { total: originalTotal, showing },
222
+ };
223
+ owner.truncated_fields = fields;
224
+ // Preserve the established single-array convenience fields used by agents.
225
+ // They describe the first capped field and follow it through every later
226
+ // halving; `truncated_fields` remains authoritative when multiple arrays
227
+ // are capped.
228
+ if (Object.keys(fields)[0] === key) {
229
+ if (owner.total === undefined)
230
+ owner.total = originalTotal;
231
+ owner.showing = showing;
232
+ }
60
233
  }
61
234
  // After serialization, if the payload still exceeds CHARACTER_LIMIT, further
62
- // shrink the largest array-valued keys until it fits (or arrays are exhausted)
63
- // and attach an advisory truncation_message.
64
- function capByCharacters(obj, arrayKeys) {
235
+ // shrink the largest array anywhere in the payload. Several public routes wrap
236
+ // arrays under nested `{ ok, data }` objects, so only looking at top-level keys
237
+ // allows multi-megabyte payloads to bypass the guard.
238
+ function capByCharacters(obj) {
65
239
  if (JSON.stringify(obj).length <= CHARACTER_LIMIT) {
66
240
  return obj;
67
241
  }
68
- const result = { ...obj };
69
- let changed = false;
70
- // Repeatedly halve the longest array until under the limit or nothing left.
242
+ const result = obj;
71
243
  while (JSON.stringify(result).length > CHARACTER_LIMIT) {
72
- const longestKey = arrayKeys
73
- .filter((key) => Array.isArray(result[key]))
74
- .sort((a, b) => result[b].length - result[a].length)[0];
75
- if (longestKey === undefined) {
76
- break;
244
+ const arrays = collectArrayReferences(result).filter(({ value }) => value.length > 0);
245
+ const largest = arrays.sort((a, b) => JSON.stringify(b.value).length - JSON.stringify(a.value).length)[0];
246
+ if (largest) {
247
+ const total = largest.value.length;
248
+ const showing = total <= 1 ? 0 : Math.floor(total / 2);
249
+ const { kept, latest } = capArray(largest.value, showing);
250
+ largest.owner[largest.key] = kept;
251
+ markTruncated(largest.owner, largest.key, total, showing, latest);
252
+ continue;
77
253
  }
78
- const current = result[longestKey];
79
- if (current.length <= 1) {
80
- // The longest array is already minimal; cannot shrink further.
254
+ // A pathological response can exceed the limit with one enormous scalar
255
+ // string even after its arrays are exhausted. Clip the largest remaining
256
+ // string rather than returning invalid or unbounded tool output.
257
+ const strings = collectStringReferences(result).filter(({ key, value }) => key !== "truncation_message" && value.length > 64);
258
+ const largestString = strings.sort((a, b) => b.value.length - a.value.length)[0];
259
+ if (!largestString)
81
260
  break;
261
+ largestString.owner[largestString.key] =
262
+ `${largestString.value.slice(0, Math.floor(largestString.value.length / 2))}…`;
263
+ markTruncated(largestString.owner, largestString.key, largestString.value.length, String(largestString.owner[largestString.key]).length);
264
+ }
265
+ return result;
266
+ }
267
+ function collectArrayReferences(obj) {
268
+ const references = [];
269
+ for (const [key, value] of Object.entries(obj)) {
270
+ if (Array.isArray(value)) {
271
+ references.push({ owner: obj, key, value });
272
+ for (const item of value) {
273
+ if (item && typeof item === "object" && !Array.isArray(item)) {
274
+ references.push(...collectArrayReferences(item));
275
+ }
276
+ }
277
+ }
278
+ else if (value && typeof value === "object") {
279
+ references.push(...collectArrayReferences(value));
82
280
  }
83
- result[longestKey] = current.slice(0, Math.floor(current.length / 2));
84
- result.truncated = true;
85
- changed = true;
86
281
  }
87
- if (changed) {
88
- result.truncation_message = TRUNCATION_MESSAGE;
282
+ return references;
283
+ }
284
+ function collectStringReferences(obj) {
285
+ const references = [];
286
+ for (const [key, value] of Object.entries(obj)) {
287
+ if (typeof value === "string") {
288
+ references.push({ owner: obj, key, value });
289
+ }
290
+ else if (Array.isArray(value)) {
291
+ for (const item of value) {
292
+ if (item && typeof item === "object" && !Array.isArray(item)) {
293
+ references.push(...collectStringReferences(item));
294
+ }
295
+ }
296
+ }
297
+ else if (value && typeof value === "object") {
298
+ references.push(...collectStringReferences(value));
299
+ }
89
300
  }
90
- return result;
301
+ return references;
302
+ }
303
+ /**
304
+ * The result with the API's freshness envelope beside it (engine L5 WP-S12): an object gains `data_freshness`
305
+ * (dataset, `as_of`, `stale_after`, `freshness_status`, `runtime_status`, `warnings`); anything else is wrapped as
306
+ * `{ data, data_freshness }`, the shape a paged answer already has. Nothing changes when the API said nothing.
307
+ */
308
+ export function withFreshness(result, freshness) {
309
+ if (freshness === null)
310
+ return result;
311
+ return result !== null && typeof result === "object" && !Array.isArray(result)
312
+ ? { ...result, data_freshness: freshness }
313
+ : { data: result, data_freshness: freshness };
91
314
  }
92
315
  export function toToolResult(result) {
93
316
  return {
@@ -95,7 +318,9 @@ export function toToolResult(result) {
95
318
  content: [
96
319
  {
97
320
  type: "text",
98
- text: JSON.stringify(result, null, 2),
321
+ // Compact: indentation added ~35% to every payload's token count
322
+ // (2026-09-26 audit) and carries nothing an agent reads.
323
+ text: JSON.stringify(result),
99
324
  },
100
325
  ],
101
326
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tool-runtime.js","sourceRoot":"","sources":["../src/tool-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-runtime.js","sourceRoot":"","sources":["../src/tool-runtime.ts"],"names":[],"mappings":"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"}