@battlegrid/mcp-server 32.0.25 → 32.0.28

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,124 @@ 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 — v131 (an agent's arena decisions and a trade's thesis are read where each is made)
42
+
43
+ **Breaking at v131: one tool is replaced and some keys you read are gone.** v131 is the contract on top of v130.1. No
44
+ input you send to a surviving tool is refused. Reconnect the proxy, or restart it, so discovery reads the new tool,
45
+ schemas and descriptions.
46
+
47
+ ### Removed tool — something you called is gone
48
+
49
+ A call naming it is answered as an unknown tool; there is no alias.
50
+
51
+ - **`get_agent_thought_log`**: call `list_agent_market_grid_decisions({ agentId, cursor?, limit?, window?, since?,
52
+ until? })` for an agent's arena decisions, and `get_signal_log({ agentId, logId })` for a trade, whose thesis is
53
+ `thesisReasoning`. `list_signal_logs({ agentId })` finds the trades.
54
+
55
+ ### Added tool
56
+
57
+ - **`list_agent_market_grid_decisions({ agentId, cursor?, limit?, window?, since?, until? })`** (`mcp:read`) — one of
58
+ your agents' arena decisions, newest first, one keyset page at a time (`limit` 1–50, default 20; page with
59
+ `nextCursor`). Each is a decision the agent's model reached in a Market Grid session — submitted, reassessed, stood
60
+ down after the model was consulted, failed after a model call, or a test generation — with its
61
+ `marketGridSessionId` (never null), its picks, its reasoning, the model's confidence and the floor enforced
62
+ against it. A stand-down before any model call (eligibility, cost limit) is not a decision: it is only in
63
+ `get_agent_activity_feed`. It declares `_meta["anthropic/maxResultSizeChars"]`, narrowed by `limit`.
64
+
65
+ ### Narrowed output — a shape you read has fewer members
66
+
67
+ - **The decision `outcome`** has the arena vocabulary only: `AGENT_TRADE_THESIS`, `SKIPPED_COST_LIMIT` and
68
+ `SKIPPED_ALREADY_SUBMITTED` are not members of `list_agent_market_grid_decisions`'s `outcome`. A decision has no
69
+ `coinGridSessionId`.
70
+
71
+ ### Added output — a field you can read
72
+
73
+ - **`thesisReasoning` on `get_signal_log`**: the trade thesis the agent's model wrote for that decision, `null` for a
74
+ log written before theses were recorded. The public signal-log reads never carry it.
75
+
76
+ ### Removed output — a key you read is gone
77
+
78
+ - **`thoughtLogId` on `get_agent_activity_feed` rows.** An event's `marketGridSessionId` and `createdAt` locate its
79
+ decision: read `list_agent_market_grid_decisions({ agentId })` and match the session.
80
+ - **`sourceThoughtLogId`** on `get_signal_log`, `get_public_agent_signal_logs` and
81
+ `get_public_agent_signal_log_detail` rows, and on `list_gate_blocks` rows. A signal log's thesis is its own
82
+ `thesisReasoning`.
83
+
84
+ ### Renamed field — a key you matched changed
85
+
86
+ - **`test_generate_deployment_grid`**: `thoughtLogId` is **`marketGridAgentDecisionId`**.
87
+
88
+ ## Contract history — v130.1 (your agent's profile header, your account's fills and your trade conversations read through MCP)
89
+
90
+ **Additive at v130.1: three read tools.** v130.1 is the contract on top of v130. Nothing a client sends is refused
91
+ and nothing it reads is reshaped. Reconnect the proxy, or restart it, so discovery reads the new tools.
92
+
93
+ ### Added tools
94
+
95
+ - **`get_agent_profile({ agentId, timeframe?, signalSource? })`** (`mcp:read`) — the profile header of one of your
96
+ agents, as its profile page shows it: identity and run state, then the KPI band over `timeframe` (a trailing
97
+ performance window, `LIFETIME` by default; not `get_agent_explorer`'s leaderboard timeframe) and the
98
+ `signalSource` selection (empty, the default, is every source). The open-position figures are priced live. It
99
+ answers `{ profile }`, or `{ profile: null }` unless the agent is a private agent on your account; archived agents
100
+ are served. For the P&L from the budget baseline read `get_agent_performance`; for the fixed Decision Quality
101
+ window and its slices read `get_agent_review_analytics`.
102
+ - **`list_user_fills({ limit? })`** (`mcp:read`) — what the venue filled on your account, newest first: every agent's
103
+ and every manual order's fills alike, attributed to no agent or decision. `limit` is 1–200, default 50, and
104
+ narrows a result over the declared size cap. `orderId` is the venue's order id; the BattleGrid attribution fields
105
+ are `null` on this read. One trade's fills are `get_trade_outcome_by_decision`'s, on a `list_agent_trades` row's
106
+ `decisionId`. It queries the exchange, so it is slower and can fail when the exchange is unreachable.
107
+ - **`list_trade_conversations({ agentId?, cursor?, limit?, window?, since?, until? })`** (`mcp:read`) — your trade
108
+ conversations, newest activity first, one keyset page at a time (`limit` 1–50, default 20; page with
109
+ `nextCursor`), windowed by last activity. A row's `id` is the `conversationId` `get_trade_conversation` reads.
110
+ `agentId` narrows within your own conversations.
111
+
112
+ ### Corrected descriptions
113
+
114
+ `get_trade_conversation` names a `list_trade_conversations` row's `id`, beside a `propose_entry_decision` result, as
115
+ where its `conversationId` comes from. `get_agent_review_analytics` names `get_agent_profile` for a window or a signal
116
+ source you choose.
117
+
118
+ ## Contract history — v130 (one audit-history tool per audience, and a blocked fire names its gate block)
119
+
120
+ **Breaking at v130: one answer narrows for a call you could already make.** v130 is the contract on top of v129.1.
121
+ No input you could send is refused. Reconnect the proxy, or restart it, so discovery reads the new tool, schemas and
122
+ descriptions.
123
+
124
+ ### Narrowed answer — a call you made now returns less
125
+
126
+ - **`get_position_audit_history` reads your own positions only.** It serves any position your agents opened,
127
+ archived agents included, and answers `NOT_FOUND` for another user's position, as it answers a missing one. Until
128
+ v130 it served another user's ACTIVE agent's position and refused your own archived agent's. To read another
129
+ user's ACTIVE agent's position, call `get_public_agent_position_audit_history` with the same arguments.
130
+
131
+ ### Added tool
132
+
133
+ - **`get_public_agent_position_audit_history({ agentId, positionId })`** (`mcp:read`) serves the public order-lifecycle
134
+ audit trail of a position, for an ACTIVE agent only. An archived agent's position is `NOT_FOUND`, as a missing one
135
+ is. Its result is `get_position_audit_history`'s: one oldest-first `events[]` stream. `get_public_agent_open_positions`
136
+ now names it as the read of a position's live protection and its reprices.
137
+
138
+ ### Added output — a field you can read
139
+
140
+ - **`gateBlockId` on every `get_radar_activity` row and every `get_radar_activity_summary` recent row**, at both
141
+ `detail` levels. On a `FIRE_DISPOSITION` row whose disposition is `FIRED`, it names the gate block that refused that
142
+ fire's evaluation: find it in `list_gate_blocks({ agentId, since: <the row's occurredAt> })`. It is `null` when that
143
+ evaluation wrote no gate block (a fire that wrote a signal log names no gate block) and on every other row. A
144
+ strict-schema client accepts the new key on each variant.
145
+
146
+ ### Declared sizes — the result cap is announced
147
+
148
+ - `list_agent_open_orders` and `list_user_active_positions` carry `_meta["anthropic/maxResultSizeChars"]`. Neither
149
+ takes a narrowing input: each serves the whole live set in one result. For one position's orders read
150
+ `get_position_audit_history`; for one coin's open agent position read `get_agent_decision_context`.
151
+
152
+ ### Corrected descriptions
153
+
154
+ `get_radar_deployment` names `policyId`, `coinId`, `coinTicker`, `enabled` (false is a pause: skipped at sweep
155
+ discovery, slots kept) and every `resolvesNow` member, `isIdle`, `agentRegimeReadings` and `ruleOutcomes` included;
156
+ `get_agent_thought_log` names `list_signal_logs` as the read of trade decisions alone and
157
+ `list_my_market_grid_entries` as the read of arena entries alone; `get_radar_activity` names `gateBlockId`.
158
+
41
159
  ## Contract history — v129.1 (the activity feed names only events that happen)
42
160
 
43
161
  **Not breaking.** v129.1 is the contract on top of v129. No input acceptance moves and no served page changes.
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.25";
50
+ export declare const PACKAGE_VERSION = "32.0.28";
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.25';
52
+ export const PACKAGE_VERSION = '32.0.28';
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.25",
3
+ "version": "32.0.28",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",