@battlegrid/mcp-server 31.2.80 → 31.2.82

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,6 +24,103 @@ 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 — v100 (what one bar did: level interaction, candle patterns, gaps, runs)
28
+
29
+ **Breaking at v100: the `bandTouch` transform is retired and `levelInteraction` takes its place; a column
30
+ gains a `buffer` knob; the catalog gains twelve bar-geometry metrics.** v100 is the contract on top of
31
+ v99.
32
+
33
+ ### Rejected input — something you send is no longer accepted
34
+
35
+ - **A column naming `bandTouch` is refused** by every tool that takes a column — `stage_strategy_draft`,
36
+ `preview_strategy_report`, `derive_strategy_rule_view`, `get_strategy_column_contract` and
37
+ `get_metric_construction_hints` — as any unknown transform id is. Where you want "where the close sits
38
+ in the bands", read `BB_TOUCH × value`; where you want "what the bar's range did at a band", use
39
+ `levelInteraction` below.
40
+
41
+ ### Widened input — something new you can send
42
+
43
+ - **`levelInteraction`** classifies the newest bar of a column against a price level as
44
+ `touch_from_below`, `touch_from_above`, `reject_from_below`, `reject_from_above` or `none`. The side is
45
+ where the prior close stood against the prior bar's level. A reject — the range pierced the level and
46
+ the close came back — reports reject, never touch, so "touched or rejected" is an `in` clause over both
47
+ labels of a side. A close through the level reads `none`: the break is `distance crossesAbove 0` (or
48
+ `crossesBelow 0`) over the same level.
49
+ - It is offered on a level with a value at both bars it reads: a candle-homed level (a band, `VWAP`, a
50
+ moving average, `ST_LINE`, `PSAR`, the Ichimoku lines) or a prior-session level or pivot (`PDH`,
51
+ `PDL`, `PDO`, the floor pivots, `PRIOR_TPO_*`). A prior-session level is a single read and takes no
52
+ hold. It is not offered on a price fact (`CLOSE`, `MARK`, `HLC3`), a developing-session level
53
+ (`TPO_*`), the naked points of control, or the Donchian rails.
54
+ - The header is `{code}_lvl` — `bbUpper_lvl`.
55
+ - **`buffer`**, a column knob declared by `levelInteraction` only: whole basis points of the level,
56
+ `0`–`500`, default `0`. Only a touch reads it. A non-zero buffer names the header (`bbUpper_lvl_b25`),
57
+ so two buffers are two columns. `buffer` on any other transform is refused as an undeclared parameter.
58
+ - **Twelve metrics**, all in the `price` family:
59
+ - candle patterns — `CANDLE_DOJI` (boolean), `CANDLE_PIN` (`lower_wick` / `upper_wick` / `none`),
60
+ `CANDLE_ENGULFING` (`bullish` / `bearish` / `none`), `BAR_CONTAINMENT` (`inside` / `outside` /
61
+ `none`), each judged against the ten bars before it at TA-Lib's default settings;
62
+ - gaps — `GAP` and `GAP_RANGE_CLEAR` (`up` / `down` / `none`) and `GAP_PCT`, the signed % from the
63
+ prior close to the open;
64
+ - run lengths — `CLOSE_RUN` and `CANDLE_RUN`, consecutive bars one way, capped at ±20;
65
+ - price sources — `HL2`, `HLC3`, `OHLC4`, price facts that take every transform a close takes
66
+ (`HLC3 × aggregate(20)` is the 20-bar SMA of typical price).
67
+
68
+ The patterns, gaps and runs compose `value` only, and none of the twelve is ranked.
69
+
70
+ ### Reshaped output
71
+
72
+ - **`effectiveParameters` gains `buffer`** — the declared default `0` or your value on a
73
+ `levelInteraction` column, `null` where no transform in the chain declares it.
74
+ - A transform's authoring parameters may declare `buffer`, and the transform and section column-role
75
+ vocabularies read `levelInteraction` where they read `bandTouch`.
76
+ - The authoring contract digest's `metricKeys` gains the twelve keys.
77
+
78
+ A client that sends `bandTouch`, or reads `effectiveParameters` with a closed key set, breaks at v100 —
79
+ hence the MAJOR.
80
+
81
+ ## Contract history — v99 (your arena entries are one owner-only history)
82
+
83
+ **Breaking at v99: four tools are retired, two are added, and `get_agent_journal` loses a field.** v99 is
84
+ the contract on top of v98.
85
+
86
+ Every Market Grid entry you made — by your deployed agent, an agent you asked for, an MCP client,
87
+ Commander, a grid you built or dice you rolled — is now read from one history, and only by you.
88
+
89
+ ### Removed tools
90
+
91
+ - **`get_agent_game_history`, `get_user_agent_game_history`, `get_public_agent_game_history` and
92
+ `get_mcp_reasoning_journal`** are gone, with no alias; a call gets an unknown-tool error. The
93
+ replacements:
94
+ - `get_agent_game_history { agentId }` → `list_my_market_grid_entries { agentId }`;
95
+ - `get_user_agent_game_history` → `list_my_market_grid_entries` with no `agentId`;
96
+ - `get_public_agent_game_history` → none: arena entry history is owner-only, so no public read
97
+ replaces it;
98
+ - `get_mcp_reasoning_journal { sessionId }` → `get_my_market_grid_entry { sessionId }`, whose
99
+ `reasoning` is the reasoning recorded with the entry's picks.
100
+
101
+ ### Added tools
102
+
103
+ - **`list_my_market_grid_entries { window?, outcome?, source?, agentId?, cursor?, limit? }`** (`mcp:read`)
104
+ pages every entry you made, newest first by its first submission. `outcome` is `PLAYED` (the default:
105
+ every entry except a cancelled one), `IN_PLAY`, `PAID` (a payout above zero), `NOT_PAID` or
106
+ `CANCELLED`; `source` and `agentId` filter by the entry's original author. The same read returns one
107
+ count per outcome, a summary (paid rate, totals, net, averages) and the agents you can filter by. Page
108
+ with `nextCursor`.
109
+ - **`get_my_market_grid_entry { sessionId }`** (`mcp:read`) returns your entry in one session — the same
110
+ record a list row carries. A session you never entered is `NOT_FOUND`.
111
+ - Each entry carries its `entryState` (`WON`, `PLACED`, `NO_WIN`, `VOID_NO_SUBMISSION`, `IN_PLAY` or
112
+ `CANCELLED`), its `entryFee` and signed `netPnl` (null while in play or cancelled), a cancelled entry's
113
+ `refundState`, its `originalSource` and original `agent`, and `edited` — true once another author has
114
+ rewritten the picks. `reasoning` is null on an edited entry, because the record no longer describes the
115
+ picks. Neither tool accepts a user identity: both read the authenticated account's own entries.
116
+
117
+ ### Narrowed output
118
+
119
+ - **`get_agent_journal` no longer returns `recentGames`.** An agent's arena entries are read with
120
+ `list_my_market_grid_entries { agentId }`.
121
+
122
+ A client that calls a retired tool, or reads `recentGames`, breaks at v99 — hence the MAJOR.
123
+
27
124
  ## Contract history — v98 (a clause can read the bar before)
28
125
 
29
126
  **Breaking at v98: a condition clause accepts six operators that compare a column with its own previous
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.80";
52
+ export declare const PACKAGE_VERSION = "31.2.82";
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.80';
55
+ export const PACKAGE_VERSION = '31.2.82';
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.80",
3
+ "version": "31.2.82",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",