@battlegrid/mcp-server 32.0.21 → 32.0.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/README.md CHANGED
@@ -38,6 +38,111 @@ 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 — v129.1 (the activity feed names only events that happen)
42
+
43
+ **Not breaking.** v129.1 is the contract on top of v129. No input acceptance moves and no served page changes.
44
+ Reconnect the proxy, or restart it, so discovery reads the new schemas.
45
+
46
+ ### Narrowed output — a shape you read has fewer members
47
+
48
+ - **`get_agent_activity_feed`**'s `eventType` no longer lists `AGENT_UPDATED`, `EARLY_ENTRY_SUBMITTED`,
49
+ `GRID_SUBMITTED_VIA_TELEGRAM` or `GRID_UPDATED_VIA_TELEGRAM`. Nothing records them and no stored event carries one,
50
+ so no row you could read changes. The historical values older rows carry — `MULTI_AGENT_DISPATCHED`,
51
+ `AGENT_OUTCOMPETED`, `AGENT_WON_COMPETITION`, `REASSESSMENT_TRIGGERED`, `AGENT_BLOCKED_NO_ALLOCATION` — are still
52
+ served.
53
+
54
+ ### Corrected descriptions
55
+
56
+ `get_agent_activity_feed` no longer names an "updated" lifecycle event. `get_radar_activity`'s `filter` input states
57
+ that `FIRES` keeps each fire's disposition and its evaluation outcome, which is what it has returned since v127.
58
+
59
+ ## Contract history — v129 (every record list takes one time window)
60
+
61
+ **Breaking at v129: `get_public_agent_realized_trades` renames its `timeframe` input to `window`, and sixteen list
62
+ tools accept the same window.** v129 is the contract on top of v128.1. No output moves. Reconnect the proxy, or
63
+ restart it, so discovery reads the new schemas.
64
+
65
+ ### Rejected input — a key you sent is refused
66
+
67
+ - **`get_public_agent_realized_trades` no longer takes `timeframe`.** Send the same value as `window` (`1D`, `7D`,
68
+ `30D` or `LIFETIME`; default `LIFETIME`). The input is strict: a call that still sends `timeframe` is refused as
69
+ invalid arguments.
70
+
71
+ ### Widened input — a window you can now ask for
72
+
73
+ - **One window on every record list paged by `cursor`:** `list_signal_logs`, `list_agent_trades`, `list_gate_blocks`,
74
+ `get_radar_activity`, `get_radar_close_decisions`, `get_public_agent_signal_logs`,
75
+ `get_public_agent_realized_trades`, `get_agent_thought_log`, `get_agent_activity_feed`,
76
+ `list_my_market_grid_entries`, and `list_strategy_drafts`, `list_agent_drafts`, `list_radar_deployment_drafts`,
77
+ `list_deployment_policy_drafts`, `list_officer_drafts` and `list_market_grid_entry_drafts`.
78
+ - **Either a trailing preset or explicit bounds, never both.** `window: '1D' | '7D' | '30D'` is the last 24 hours,
79
+ 7 days or 30 days, measured by the server on every page you read. Or leave `window` at `LIFETIME` and send
80
+ `since` (inclusive) and/or `until` (exclusive), each an ISO-8601 date-time with an offset (`Z` or `±hh:mm`).
81
+ - **The window is over the instant the list is ordered by:** a signal log's or thought's creation, a trade's close,
82
+ a radar event's occurrence, a close decision's bar open, an entry's original submission, a draft's last update.
83
+ - **Refused before any read, naming the field:** `since` not strictly before `until` (names `since`); a preset other
84
+ than `LIFETIME` beside `since` or `until` (names `window`); a bound with no offset, or before year 0001 (names the
85
+ bound).
86
+ - **Summaries follow the window.** `list_agent_trades`' `summary` and `resultSummary`, `list_signal_logs`' `summary`,
87
+ `list_gate_blocks`' `summary` and `list_my_market_grid_entries`' facets cover the windowed scope, not all history.
88
+ - **Cursors are unchanged.** A `nextCursor` you already hold still pages. Read the next page with the same window;
89
+ a cursor read under a different window serves the rows after its key that lie inside the window you send now.
90
+
91
+ ### Not windowed
92
+
93
+ `list_market_grid_sessions`, `list_officer_reviews`, the live-state reads (positions, open orders), catalogs,
94
+ rankings and bar series take no window; sending `window` to them is refused as an unknown input, as before.
95
+
96
+ ## Contract history — v128.1 (a signal's debrief reads through MCP)
97
+
98
+ **Additive at v128.1: two read tools.** v128.1 is the contract on top of v128. Nothing a client sends
99
+ is refused and nothing it reads is reshaped.
100
+
101
+ ### Added tools
102
+
103
+ - **`get_signal_debrief`** — `{ agentId, logId }`: the debrief of a signal log of your own agent.
104
+ - **`get_public_agent_signal_debrief`** — `{ agentId, logId }`: the same debrief for a signal log on an
105
+ agent's public profile.
106
+
107
+ Both answer `{ debrief }`, a `DecisionDebriefDTO` or `null`. The debrief's verdict is `null` until its
108
+ 24-hour mark resolves; read again after that.
109
+
110
+ ## Contract history — v128 (an agent's stop and take-profit move through the agent's own protection)
111
+
112
+ **Breaking at v128: `override_agent_protection` takes new input and returns a new answer, and two tools announce
113
+ that they are destructive and reach the exchange.** v128 is the contract on top of v127. Reconnect the proxy, or
114
+ restart it, so discovery reads the new schemas and annotations.
115
+
116
+ ### Rejected input — a key you sent is refused
117
+
118
+ - **`override_agent_protection` no longer takes `effectiveStopLoss` or `effectiveStopLossOrderId`.** Send
119
+ `{ decisionId, stopLossPrice?, takeProfitPrice? }` — each price a positive decimal string, at least one of the two.
120
+ The input is strict: a call that still sends `effectiveStopLossOrderId` is refused as invalid arguments. You name
121
+ levels, never orders; the server finds the live leg itself.
122
+ - **A level the live mark has already crossed is refused** — a stop must sit on the loss side of the mark and a
123
+ take-profit on its profit side. Read `decisionId`, `effectiveStopLoss` and `effectiveTakeProfit` from
124
+ `list_user_active_positions` or `get_agent_decision_context`. To exit now, call `close_agent_position`.
125
+
126
+ ### Reshaped output — the answer you read changed
127
+
128
+ - **`override_agent_protection` answers `{ decisionId, success, result }`.** `success` is true only when every leg you
129
+ asked to move committed. `result.kind` is one of:
130
+ - `level-crossed` — `{ leg, markPrice }`: that leg (`SL` or `TP`) would fill at once against the mark; nothing was
131
+ written;
132
+ - `mark-unavailable` — the live mark is stale or missing; nothing was written;
133
+ - `rate-limited` — `{ retryAfter }` seconds; nothing was written;
134
+ - `dispatched` — `{ stopLoss, takeProfit }`, each leg's own outcome (`null` for a leg you did not send).
135
+ - **Read each leg on its own.** Only `committed` moved the leg. A stop can come back `queued`: it is recorded and will
136
+ be placed as soon as the amendment in progress finishes. A take-profit with no resting leg is `execution-not-open`
137
+ with `observedStatus: "MISSING_TAKE_PROFIT"`. The never-produced `stale-order` outcome is gone. A committed stop is
138
+ never rolled back because the take-profit failed.
139
+ - **The take-profit moves too.** The tool used to move the stop only.
140
+
141
+ ### Changed annotations
142
+
143
+ - `close_agent_position` and `override_agent_protection` declare `destructiveHint: true` and `openWorldHint: true`.
144
+ A client that asks before destructive or open-world calls now asks before both.
145
+
41
146
  ## Contract history — v127 (a read serves what its code computes, and says so)
42
147
 
43
148
  **Breaking at v127: two answers narrow for calls you could already make, and every radar journal row gains one
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.21";
50
+ export declare const PACKAGE_VERSION = "32.0.23";
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.21';
52
+ export const PACKAGE_VERSION = '32.0.23';
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.21",
3
+ "version": "32.0.23",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",