@battlegrid/mcp-server 31.2.15 → 31.2.16

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 CHANGED
@@ -24,7 +24,7 @@ Seeing package `31.x` alongside handshake `battlegrid@33.x` — the package **be
24
24
 
25
25
  **What this changes for you:** nothing about how you call anything. Upgrading the package no longer waits on a server deploy, and a server deploy no longer strands you on a package that names the wrong contract — reconnect and the announcement follows. **Contract breaking-change notes are no longer keyed to package versions**, since a contract move is no longer a release here; the v11-and-earlier notes below are kept as history, and the live vocabulary is always discovery.
26
26
 
27
- ## Contract history — v37 → v53
27
+ ## Contract history — v37 → v54
28
28
 
29
29
  Eleven majors reached authors while this section stopped at v36. That gap is the mechanism, not an
30
30
  oversight: since v31 a contract move needs no release here, so nothing forced a note to be written —
@@ -291,6 +291,45 @@ refuse is now stored. Listed because a client that special-cased the refusal can
291
291
 
292
292
  ### Reshaped output — the same call returns a different shape
293
293
 
294
+ - **`scan_agent_coins` returns the ranking, not an explanation of every coin** (54.0.0,
295
+ `fix-mcp-scan-row-altitude`). The scan used to wrap the app's full per-coin qualification verdict
296
+ in every row — two directions with candidate-level construction and a stop-loss policy band, four
297
+ gates each with its own measurement, condition reach reasons, the ATR corridor. For a 78-coin
298
+ catalog that was **82,147 characters, ~1,053 per row**, which is past the tool-result cap of every
299
+ client we know of: the calling model received a file path instead of an answer, so the tool did not
300
+ deliver its result even when the scan succeeded.
301
+
302
+ `rows` is gone. Three ranked arrays replace it, and `rank` is **global across all three**, so
303
+ reading them in this order reproduces the server's own sequence:
304
+
305
+ ```
306
+ qualified[] { rank, coinTicker, scorePercent, coinDataStopped }
307
+ rejected[] { rank, coinTicker, scorePercent, firstFailReason, scoreShortfallPercent }
308
+ unscorable[] { rank, coinTicker, coinDataStopped }
309
+ ```
310
+
311
+ Array membership now carries what the row `kind` discriminator and the `qualifies` flag used to,
312
+ and both are gone with them; `firstFailReason` is non-nullable on a rejected row, because a
313
+ non-qualifying verdict always names the gate that blocked it. Rows also lose `long`, `short`,
314
+ `gates`, `tradeableAtrRange`, `evaluatedAt`, `coinName`, `assetClass` and `category`.
315
+
316
+ Two things are new. The agent's `agentId`, `agentName`, `strategyTimeframe` and `minScorePercent`
317
+ move to an `agent` object carried **once** instead of on all 78 rows — `null` when the scan scored
318
+ nothing at all. And `scoreShortfallPercent` is server-computed: how far below the minimum the score
319
+ fell, non-null exactly when the aggregate score is what blocked, so you never subtract a published
320
+ threshold from a published reading yourself.
321
+
322
+ `scanStartedAt`, `coinsScanned` and `qualifiedCount` are unchanged, and so is every coin: same
323
+ rows, same order, same ranks, same verdicts, same rate buckets, same evaluator. Only the fields
324
+ moved — about 8.8 KB for the same 78-coin scan.
325
+
326
+ **Migration.** Read `qualified` / `rejected` / `unscorable` instead of `rows`, and take the agent's
327
+ thresholds from `agent` rather than from the first row. For a shortlisted coin's full per-direction
328
+ and per-gate detail, call `get_agent_coin_qualification` on up to 12 tickers — it carries every
329
+ dropped field and costs no second scan (the scan is rate-limited to 3 per agent and 10 per user a
330
+ minute; the probe is not).
331
+
332
+
294
333
  - **Report headers, glosses and signal indicator keys are renamed for the Donchian channel**
295
334
  (53.0.0, `rename-donchian-channel`). Every report surface — `preview_strategy_report`,
296
335
  `get_strategy_section_template`, the agent prompt previews — renders `donchianHi` / `donchianLo`
package/dist/index.d.ts CHANGED
@@ -49,7 +49,7 @@ import { type Implementation, type Prompt, type Resource } from '@modelcontextpr
49
49
  * being asked. Move it for a change to THIS package — a proxy fix, a dependency bump, a docs
50
50
  * correction. Never move it to track the server.
51
51
  */
52
- export declare const PACKAGE_VERSION = "31.2.15";
52
+ export declare const PACKAGE_VERSION = "31.2.16";
53
53
  export declare const DEFAULT_URL = "https://mcp.battlegrid.trade/mcp";
54
54
  export interface EnvConfig {
55
55
  apiKeys: string[];
package/dist/index.js CHANGED
@@ -52,7 +52,7 @@ import { ListToolsRequestSchema, CallToolRequestSchema, ListPromptsRequestSchema
52
52
  * being asked. Move it for a change to THIS package — a proxy fix, a dependency bump, a docs
53
53
  * correction. Never move it to track the server.
54
54
  */
55
- export const PACKAGE_VERSION = '31.2.15';
55
+ export const PACKAGE_VERSION = '31.2.16';
56
56
  export const DEFAULT_URL = 'https://mcp.battlegrid.trade/mcp';
57
57
  const MAX_RETRIES = 3;
58
58
  const RETRY_DELAYS_MS = [2000, 4000, 8000];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@battlegrid/mcp-server",
3
- "version": "31.2.15",
4
- "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
3
+ "version": "31.2.16",
4
+ "description": "BattleGrid MCP server \u2014 play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {