@battlegrid/mcp-server 31.2.21 → 31.2.23

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/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.21";
52
+ export declare const PACKAGE_VERSION = "31.2.23";
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.21';
55
+ export const PACKAGE_VERSION = '31.2.23';
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@battlegrid/mcp-server",
3
- "version": "31.2.21",
3
+ "version": "31.2.23",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "generator": "battlegrid-app/server/scripts/export-mcp-skills.mjs",
3
- "contractVersion": "55.2.0",
3
+ "contractVersion": "56.2.0",
4
4
  "files": {
5
5
  "battlegrid-agent-management/SKILL.md": "b6ea75b3d838c1dbaaf3984d7e99a11c81686de2c1a1910c35699ee7e70dafa5",
6
6
  "battlegrid-arena-play/SKILL.md": "03fa153bf82be18bf5ed01e3ba12e2cd9f99a81b08d903a77b52169e7519a182",
7
7
  "battlegrid-market-analysis/SKILL.md": "22fde9c4eac0261c89a8056ab8b20b66fcbe1fd58447fa0ac84fd410b4d134d7",
8
8
  "battlegrid-radar-deployment/SKILL.md": "d2a012b154e1e529db19529bd7c3d75d069f4e410d5804add51165f0f0902b2e",
9
- "battlegrid-strategy-authoring/SKILL.md": "2a973a9e52832ab1e0d9bf1b6d21b8bf898899bc3a455fde223646a01e914242",
9
+ "battlegrid-strategy-authoring/SKILL.md": "1f1bf1ecfbf1a20d585a53e8f1ba8e9fbdeaa329cad9ebdc16ce6cac2b213358",
10
10
  "battlegrid-strategy-doctor/SKILL.md": "9ab3f79128ec81d3e90167c3f1ea4bd6f6b570290e5ebe2bf855195263c58239",
11
- "battlegrid-strategy-examples/SKILL.md": "5343cb1ec76a1b1f1b3caface886ee87526ecd0da159abf98f34cf2de1392c3e",
11
+ "battlegrid-strategy-examples/SKILL.md": "6f15da8b29a8aff15f6829d7ae87cbe74904bfe5372e37fe17d578cc0c289577",
12
12
  "battlegrid-strategy-examples/references/playbooks.md": "35c543c090d00ba19e4bcf0a80502afac7a4954643fc535de0b24381c91ecbf4",
13
13
  "battlegrid-strategy-examples/references/recipes.md": "53887daece17995543e7d3fe1bf2577fc41a6254c291acacde48d7de63853641",
14
14
  "battlegrid-strategy-examples/references/tradingview-ports.md": "2b13adbc137178955edcca31b6ab40c01c745a932a0750b91db8820c736700bb",
@@ -187,6 +187,12 @@ point-in-time reading, and you say so.
187
187
 
188
188
  ### 6. Confirm, then apply
189
189
 
190
+ **In a conversation the Strategy Builder hosts, this section does not apply: compile and stop.**
191
+ The compiled plan lands on the player's rail as unsaved changes and their Review & save is the one
192
+ consent. Report that it is staged, name the axes, and present no apply confirmation — the server
193
+ refuses `apply_strategy_plan` from such a conversation as a tool error, so calling it spends an op
194
+ of your budget and commits nothing.
195
+
190
196
  One confirmation carrying the plan's own `confirmationSummary`, offering Apply / Revise / Cancel.
191
197
 
192
198
  On **Apply**, call `apply_strategy_plan` with two values and nothing else:
@@ -215,6 +221,12 @@ only authority on all of them; your job is to react to what it returns.
215
221
  `fork_strategy`, `update_strategy_signal_rule`, `restore_strategy`, `archive_strategy` and
216
222
  `preview_strategy_report` are part of this flow.
217
223
 
224
+ **In a builder-hosted conversation, three of those are refused at execution** —
225
+ `update_strategy_signal_rule`, `restore_strategy` and `archive_strategy`, alongside
226
+ `apply_strategy_plan` — because each commits a revision of the open strategy around the player's
227
+ save. `fork_strategy` stays available: it writes a DIFFERENT strategy, which is not the one the
228
+ builder owns. `preview_strategy_report` and every read stay available.
229
+
218
230
  Before any destructive one, state the blast radius from the server's own fields and confirm it
219
231
  with the player:
220
232
 
@@ -104,9 +104,12 @@ setups block and from the `decide_trade` contract, not merely discouraged in the
104
104
  declares no verdict-carrying condition resolves `null` and constrains nothing.
105
105
 
106
106
  A verdict carrier must read a SETTLED bar wherever one is available to it — `clock: "CLOSE"`
107
- whenever every column it reads accepts a closed frame and every condition it references is itself
108
- `CLOSE`. Where no closed frame moves its operands (a published regime label, an open-interest
109
- regime), `LIVE` stays legal: there is no settled bar to take.
107
+ whenever every column in its CLOSURE accepts a closed frame. The closure is what it reads directly
108
+ plus everything reached through `conditionRef`, transitively: a referenced condition contributes what
109
+ IT reads, never the clock it happens to declare, so moving a clause into a building block and leaving
110
+ that block `LIVE` does not make a settled bar unavailable to the carrier. Where no closed frame moves
111
+ some operand in the closure (a published regime label, an open-interest regime, a published rolling
112
+ change), `LIVE` stays legal at any depth: there is no settled bar to take.
110
113
 
111
114
  Evaluation is three-valued: UNRESOLVED never collapses to FALSE; forming-bar reads are provisional.
112
115
 
@@ -117,10 +120,13 @@ this coin's own candle series at offset 0. Frame-inert operands are refused
117
120
  (`CONDITION_CLOCK_OPERAND_ILLEGAL`): perp-payload scalars, published rolling changes, ranks, zone
118
121
  entities, MDS regime labels, enrichment metrics, session scalars, and any clause authored at a
119
122
  non-zero offset. A closed frame cannot move them, so "held for N closes" would describe reads
120
- that never happened. The remedy is a split, not a re-clock: move that clause into its own LIVE
121
- condition and `conditionRef` it. **Worked liquidity floor:** `LIQUID_FLOOR` is LIVE because
122
- `vol24hUsd` is a bundle scalar; the carrier that refs it may be CLOSE over its own candle-series
123
- clauses.
123
+ that never happened. A frame-inert operand anywhere in a condition's closure simply keeps that
124
+ condition on `LIVE`, and that is legal — splitting the clause into its own condition and
125
+ `conditionRef`-ing it does NOT buy the referencing condition a CLOSE clock, because a `CLOSE`
126
+ condition may not reference a `LIVE` one (`CONDITION_CLOCK_REFERENCE_ILLEGAL`) and availability walks
127
+ into the referenced closure anyway. **Worked liquidity floor:** `LIQUID_FLOOR` is `LIVE` because
128
+ `vol24hUsd` is a bundle scalar, and a condition that references it is `LIVE` too. Reach for a split to
129
+ keep a condition's MEANING separable, not to change its clock.
124
130
 
125
131
  **The lane a strategy is deployed to.** Report-level scalars split by LANE, and the split is not a
126
132
  quality of the header — it is which reader runs. Market breadth and the reference pairs are ordinary