@battlegrid/mcp-server 32.0.32 → 32.0.35

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
@@ -38,6 +38,164 @@ Seeing package `31.x` alongside handshake `battlegrid@33.x` — the package **be
38
38
 
39
39
  **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.
40
40
 
41
+ ## Contract history — v136 (one ranked universe: rank within a category, select coins by a ranked metric)
42
+
43
+ **Breaking at v136: `get_top_ranked_coins` is retired, and one value moves.** v136 is the contract on top of v135.2.
44
+ Reconnect the proxy, or restart it, so discovery reads the new tool list and schemas.
45
+
46
+ ### Removed tool — and its replacement
47
+
48
+ - **`get_top_ranked_coins` is gone, with no alias.** Discover leaders with `preview_strategy_report` and a ranked
49
+ `coinSelection`: `{ "mode": "ranked", "limit": 10, "category": "ALL", "rankBy": { "metric": "ROC12", "ordering": "hi" } }`.
50
+ The answer is the leaders' report rows, not a bare list.
51
+ - **The old metrics map onto ranked metrics:** `abs_change` is `CLOSE_CHANGE` with ordering `far`, `volume` is `RVOL`
52
+ with ordering `hi`. `rsi_activity` has no replacement.
53
+ - **Three of the old tool's defaults are not carried over.** A ranked selection defaults to crypto, so name
54
+ `category: "ALL"` to rank every asset class. It ranks at the preview's authorable timeframe, not at any `interval`.
55
+ It has no default `limit`.
56
+ - `toolCount` goes from 150 to 149.
57
+
58
+ ### Widened input
59
+
60
+ - **A `rank` column takes a category `scope`** (`all` by default, or one of the breadth scopes such as `crypto`,
61
+ `l1` or `defi`). The rank is filtered at read time from the same exchange-wide ranked set, so its `universe` is the
62
+ scope's coin count. A scope holding fewer than five coins ranks none. A non-default scope adds an `_<scope>` token
63
+ to the header. `scope` is refused on a report-scoped rank, which ranks the report's own coins.
64
+ - **A ranked `coinSelection` takes `rankBy: { metric, ordering }`.** It is refused outside the served
65
+ `rankScope: "exchangeWide"` / `rankOrderings` vocabulary. Without `rankBy`, ranked selection is by 24h volume, as
66
+ before.
67
+
68
+ ### Added output
69
+
70
+ - **The column contract's effective parameters carry `scope`**: the rank's scope, or `null` for a column that does
71
+ not rank exchange-wide.
72
+
73
+ ### Changed values — the same schema serves a different number
74
+
75
+ - **Category membership is the coin's main category only.** A secondary category assignment no longer places a coin
76
+ in that category, so breadth `defi` folds 12 coins where it folded 13. The Asset Browser filter and counts, the
77
+ breadth fold, a scoped rank and a ranked selection now agree on every category's coins.
78
+
79
+ ### Digest move
80
+
81
+ - **`vocabularyDigest` moves.** A client caching vocabulary against it re-reads `list_strategy_vocabulary`.
82
+
83
+ ## Contract history — v135.1 (the bar clock, trading-session levels and a period level that stops at its roll)
84
+
85
+ **Additive at v135.1: thirty-five metrics and five studies, and one value moves.** v135.1 is the contract on top of
86
+ v135. Nothing a client sends is refused that v135 accepted. Reconnect the proxy, or restart it, so discovery reads the
87
+ widened vocabulary.
88
+
89
+ ### Widened input — new metrics and studies
90
+
91
+ - **The bar clock:** `UTC_HOUR`, `DAY_OF_WEEK` (0–6 UTC, 0 = Sunday) and `TRADING_SESSION` (`asia` 00–08, `london`
92
+ 08–13, `newYork` 13–21, `late` 21–24 UTC; fixed windows, no daylight-saving rule). Each is a fact of the read bar's
93
+ open time, so a session window is an ordinary condition. A weekend or the London–New York overlap is a composition.
94
+ - **Trading-session levels:** `ASIA_*`, `LONDON_*` and `NEW_YORK_*` (`HIGH` / `LOW` / `OPEN`) for the current
95
+ session, `null` outside it, and `PRIOR_*` for the previous instance of each.
96
+ - **Swept flags:** `PRIOR_<S>_HIGH_SWEPT` / `_LOW_SWEPT`, read `swept` or `intact`.
97
+ - **Opening ranges:** `OR15_HIGH`, `OR15_LOW`, `OR30_HIGH`, `OR30_LOW`, absent until each range closes.
98
+ - **Initial-balance extensions:** `IB_EXT_UP_150`, `IB_EXT_DOWN_150`, `IB_EXT_UP_200`, `IB_EXT_DOWN_200`, `null` for
99
+ a zero-range initial balance.
100
+ - **Studies:** `barClock`, `tradingSessions`, `priorTradingSessions`, `openingRange` and `ibExtensions`. The
101
+ metric-key enum widens with them on every input and output that carries it.
102
+
103
+ ### Changed values — the same schema serves a different number
104
+
105
+ - **A period level read across its roll is `null`.** A `spread` with one candle side, or a `levelInteraction`, over
106
+ a bundle-homed period level (a UTC day's or a trading session's) reads `null` on a bar outside the instance the
107
+ level was taken from. Before, it was measured against the next day's or session's level. A required condition over
108
+ one fails closed on the roll bar. `distance` and a spread between two bundle-homed levels are unchanged.
109
+ - **Prose says "UTC day" where it said "session"** for the day-fold metrics, `VWAP` and `CVD`. "Session" is now only a
110
+ game session, and the condition strip labels a trading session with its window ("New York 13–21 UTC"). The served
111
+ `nullBehavior` of `spread` and `levelInteraction` states the roll rule.
112
+
113
+ ### Digest move
114
+
115
+ - **`vocabularyDigest` moves.** A client caching vocabulary against it re-reads `list_strategy_vocabulary`.
116
+
117
+ ## Contract history — v135 (an efficiency window counts changes, and six series statistics)
118
+
119
+ **Breaking at v135: an `efficiency` window means one less than it did, and one output key is replaced.** v135 is the
120
+ contract on top of v134. Reconnect the proxy, or restart it, so discovery reads the new schemas.
121
+
122
+ ### Re-specified input — the same field means something else
123
+
124
+ - **An `efficiency` column's `window` counts bar-to-bar changes** and reads `window + 1` bars, as TradingView's
125
+ `er(src, n)` does; it counted the bars read. The default, 20 changes, reads the same 21 bars as before. An explicit
126
+ window `w` reads one bar more than it did, so send `w − 1` to read the bars you meant. The largest legal window is
127
+ one below the cap, and a window at the cap is refused. Stored windows on the server are already moved to `w − 1`.
128
+
129
+ ### Reshaped output — something you read moved
130
+
131
+ - **`rankableSpreadOperands` is gone** from `get_metric_construction_hints` and every catalog transform entry. Read
132
+ **`chainedOuters`** instead, present exactly when `chainSuccessors` is and keyed by its members. Each entry has the
133
+ `operands` construction accepts under that outer (`null` where the inner names none) and the chained column's
134
+ `windowMaximum`. Rank's operands are `chainedOuters.rank.operands`.
135
+ - **`chainOuterParameters`** (required) declares each chain outer once, on `get_metric_construction_hints` and the
136
+ report catalog.
137
+ - **A served `window` carries required `unit`:** `seriesElements`, `seriesChanges` (`efficiency`) or `priorElements`
138
+ (`pctl`).
139
+
140
+ ### Widened input and enums
141
+
142
+ - **Six transforms:** `zscore`, `stddev`, `linregSlope`, `pctl`, `rollingMin` and `rollingMax`, on every metric with a
143
+ series home and over every relation. A `zscore` header's column contract serves five `zoneBands` (`extreme low`
144
+ below −2 through `extreme high` above 2).
145
+ - **`efficiency` is accepted** on the 27 oscillators and over `distance` and `spread`.
146
+ - **`budgets.columnLookback` is 64**, where it was 32, for windows and offsets.
147
+ - A transform measurement's `nullPolicy` gains `endpoints`.
148
+
149
+ ### Narrowed offer
150
+
151
+ - **A series chain over a spread operand with no per-bar value** (`EMA5 × spread(MARK) × trajectory`) is no longer
152
+ offered. Construction already refused it, and the refusal now names the side and the operands that work.
153
+
154
+ ### Changed values
155
+
156
+ - **An `efficiency` value whose newest or oldest bar is missing, or whose series is shorter than `window + 1`, is
157
+ `null`.** A clause over it reads UNRESOLVED instead of reducing the bars present. Expect this on coins with session
158
+ gaps, young listings and short history homes.
159
+ - **`vocabularyDigest` moves.**
160
+
161
+ ## Contract history — v134 (Multi-Timeframe Confluence becomes columns, and the perp/spot rate gap)
162
+
163
+ **Breaking at v134: the Multi-Timeframe Confluence platform section is retired.** v134 is the contract on top of
164
+ v133. Reconnect the proxy, or restart it, so discovery reads the new schemas.
165
+
166
+ ### Rejected input — something you send is no longer accepted
167
+
168
+ - **`includeMtfConfluence` is refused** wherever an input names a platform section: every authoring, staging and
169
+ preview input, `get_strategy_section_template`'s section key and `get_context_source_full_preview`'s `sourceKey`.
170
+ **`mtfConfluence` is refused** in `get_market_context`'s `modules`.
171
+ - **Its lower-timeframe reads stay authorable as custom columns:** `MA_ALIGN × value`, `RSI14 × classifyZone` and
172
+ `ADX × classifyZone` at `{rel:'lower'}` (headers `MAalign_ltf`, `RSI14_ltf_zone`, `ADX14_ltf_zone`). The primary and
173
+ higher-timeframe reads belong to Moving Averages, RSI, Trend Strength and Higher Timeframe Context.
174
+ - Stored strategies and agents are already migrated on the server. Each placement became a custom section titled
175
+ `Multi-Timeframe Confluence (lower rung)`, and a Market Read marker `ADX14_…_state` became `ADX14_…_zone`.
176
+
177
+ ### Removed output — a key you read is gone
178
+
179
+ - **`includeMtfConfluence`** leaves every agent context-source read (`get_intelligence_agent`,
180
+ `list_intelligence_agents`, `get_agent_explorer`, `activate_intelligence_agent`, `archive_intelligence_agent`,
181
+ `commit_agent_draft`, `get_agent_prompt_context_preview`) and `list_strategy_categories`. The prompt-section kind
182
+ `mtf-confluence` leaves `get_context_sources_preview` and `get_context_source_full_preview`.
183
+
184
+ ### Widened input — a new metric
185
+
186
+ - **`PERP_SPOT_GAP`** (`perpSpotGap`): the perp/spot rate gap `|spot rate − perp rate|`, 0 to 2, offered `value` and
187
+ the report-scoped `rank`. It is `null` on the bar after the UTC-day reset and where the spot tape is unavailable,
188
+ never `0`. A required or direction-setting condition over its rank is refused at radar-policy save with
189
+ `CONDITION_UNREADABLE_BY_RADAR_SCAN`, as a ranked crowd column already is.
190
+
191
+ ### Changed values
192
+
193
+ - **Six verdict glosses state their gates:** `FLOW_ALIGN`, `SMART_RETAIL`, `CAPTAIN_CONF`, `CONFIDENCE`,
194
+ `PERP_SPOT_FLOW` and `PERP_SPOT_STRENGTH` serve the catalog gloss followed by the gate sentence over their operands'
195
+ headers. Read the sentence instead of restating thresholds.
196
+ - **A regime-timeframe column's `timeframe` is the regime timeframe**, whichever sections the report places. Before,
197
+ it read the anchor, or `null` without Module 16 or 17.
198
+
41
199
  ## Contract history — v131 (an agent's arena decisions and a trade's thesis are read where each is made)
42
200
 
43
201
  **Breaking at v131: one tool is replaced and some keys you read are gone.** v131 is the contract on top of v130.1. No
package/dist/index.d.ts CHANGED
@@ -47,7 +47,7 @@ import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/cli
47
47
  * being asked. Move it for a change to THIS package — a proxy fix, a dependency bump, a docs
48
48
  * correction. Never move it to track the server.
49
49
  */
50
- export declare const PACKAGE_VERSION = "32.0.32";
50
+ export declare const PACKAGE_VERSION = "32.0.35";
51
51
  export declare const DEFAULT_URL = "https://mcp.battlegrid.trade/mcp";
52
52
  export interface EnvConfig {
53
53
  apiKeys: string[];
package/dist/index.js CHANGED
@@ -49,7 +49,7 @@ import { Client, SdkHttpError, StreamableHTTPClientTransport } from '@modelconte
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 const PACKAGE_VERSION = '32.0.32';
52
+ export const PACKAGE_VERSION = '32.0.35';
53
53
  export const DEFAULT_URL = 'https://mcp.battlegrid.trade/mcp';
54
54
  const MAX_RETRIES = 3;
55
55
  const RETRY_DELAYS_MS = [2000, 4000, 8000];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@battlegrid/mcp-server",
3
- "version": "32.0.32",
3
+ "version": "32.0.35",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",