@battlegrid/mcp-server 31.2.29 → 31.2.31

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.29";
52
+ export declare const PACKAGE_VERSION = "31.2.31";
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.29';
55
+ export const PACKAGE_VERSION = '31.2.31';
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.29",
3
+ "version": "31.2.31",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "generator": "battlegrid-app/server/scripts/export-mcp-skills.mjs",
3
- "contractVersion": "61.1.0",
3
+ "contractVersion": "61.2.0",
4
4
  "files": {
5
- "battlegrid-agent-management/SKILL.md": "b6ea75b3d838c1dbaaf3984d7e99a11c81686de2c1a1910c35699ee7e70dafa5",
6
- "battlegrid-arena-play/SKILL.md": "03fa153bf82be18bf5ed01e3ba12e2cd9f99a81b08d903a77b52169e7519a182",
5
+ "battlegrid-agent-management/SKILL.md": "8c7ed25e61e013c69694ada82e5893e7af8d12d0c0a6dccdaaaedea868efa47e",
6
+ "battlegrid-arena-play/SKILL.md": "67375816c1b5a40f55fcd4616386eb5afd97f3d91ea6fb94aeb6a56c7d0948a5",
7
7
  "battlegrid-market-analysis/SKILL.md": "22fde9c4eac0261c89a8056ab8b20b66fcbe1fd58447fa0ac84fd410b4d134d7",
8
8
  "battlegrid-radar-deployment/SKILL.md": "d2a012b154e1e529db19529bd7c3d75d069f4e410d5804add51165f0f0902b2e",
9
- "battlegrid-strategy-authoring/SKILL.md": "93e1c9709079a4e9c968597ac572b4b62f5b0e68c01f9e9947db7e2ba304dcdf",
10
- "battlegrid-strategy-doctor/SKILL.md": "9ab3f79128ec81d3e90167c3f1ea4bd6f6b570290e5ebe2bf855195263c58239",
9
+ "battlegrid-strategy-authoring/SKILL.md": "66ed78d8e83401586b6d0ec33ce59b0fdc8b22b04a3db0ab529cc77779bfe1c9",
10
+ "battlegrid-strategy-doctor/SKILL.md": "d0b9e9e07648246d5a23b0c17183278b70b5bcbb5f472ac7da13d03e42a6c6c6",
11
11
  "battlegrid-strategy-examples/SKILL.md": "17e8cf8040813622bd5b82165c7af82e03287fee1f6aac974e0b6c584580dd27",
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",
15
- "battlegrid-trade-analysis/SKILL.md": "32573a67e55d735e6ee4e36b3b48c815694102704bc453c4d1c13db39551b3da",
15
+ "battlegrid-trade-analysis/SKILL.md": "f49482702f17d7fc44db00c31a19fc6e9350668fe76e8948d22faaa9c7e9d6bf",
16
16
  "battlegrid-trade-proposal/SKILL.md": "0d8ffecd493f7916d352cee3d22aee5812c3790592b100d3f9802c75ca1180c0"
17
17
  }
18
18
  }
@@ -96,8 +96,9 @@ State the blast radius **from server fields, as numbers**, before the confirm fo
96
96
  Agent-owned settings are untouched.
97
97
  - **Update** — the concrete diff: each field, from what, to what.
98
98
 
99
- Then one confirmation. Act only on an explicit pick. Free text while a confirmation is open is
100
- not consent — answer what they said and re-present the same confirmation.
99
+ Then one confirmation. Act only on an explicit pick — one of the options you offered. Free text
100
+ while a confirmation is open is not consent, whether it arrives in chat or in the form's own
101
+ answer-in-your-own-words box — answer what they said and re-present the same confirmation.
101
102
 
102
103
  **`expectedRevision` comes from the latest read.** A CONFLICT means the stored agent moved since
103
104
  you read it: re-read, re-state the radius against the NEW state, and re-confirm. Never retry with a
@@ -120,7 +120,8 @@ Each is typed and distinguishable. Read the code, do not paraphrase:
120
120
  you to think.
121
121
  - **Your confirmation with the player is interaction, never authorization.** Do not describe it as
122
122
  a permission check, do not add a wager gate of your own, and do not treat free text typed while a
123
- confirmation is open as consent.
123
+ confirmation is open as consent — in chat or in the form's own answer-in-your-own-words box. Only
124
+ an explicit pick from the options you offered confirms.
124
125
  - **Never re-submit over an unknown outcome.** An interrupted submit may have committed the fee.
125
126
  Run `check_market_grid_submission` first and report what actually exists.
126
127
 
@@ -213,7 +213,9 @@ On **Revise**, return to step 4. On **Cancel**, stop and let the token lapse.
213
213
 
214
214
  If the player types free text while the confirm form is open, that is **not** consent and not a
215
215
  cancellation. Answer what they said, then present the same plan's confirmation again, unchanged.
216
- Prose never triggers an apply.
216
+ Prose never triggers an apply. The same holds for an answer typed into the form's own
217
+ answer-in-your-own-words box: it is the player's words in an answer slot, not a confirming pick,
218
+ so treat it exactly as you would free text in the chat.
217
219
 
218
220
  Do not pre-check expiry, digests, ownership, viability or quota before calling. The server is the
219
221
  only authority on all of them; your job is to react to what it returns.
@@ -241,7 +243,9 @@ with the player:
241
243
  independently requires `confirm:true` whenever the strategy has bound agents, so stating the radius
242
244
  and calling anyway is refused, not committed. Send `confirm:true` only on a turn where the player
243
245
  made an explicit confirming pick — never because you judged the edit safe. Free text typed while a
244
- confirmation is open is not consent: answer it, then present the same confirmation again.
246
+ confirmation is open is not consent: answer it, then present the same confirmation again. That
247
+ covers words typed into the form's own answer box as well as words sent in chat — a confirming pick
248
+ is one of the options you offered, and nothing else is.
245
249
 
246
250
  **Send only the fields you were asked to change.** `allocation`, `required` and `params` are each
247
251
  optional and each preserves on omission. "Raise volume_surge to Critical" is
@@ -61,6 +61,16 @@ Three reads, and they are not interchangeable:
61
61
  four-member verdict as written: `NOT_ENFORCED` means the agent's own threshold switches the gate
62
62
  off, `UNMEASURABLE` means the input was missing and the gate fail-opened. Neither is a pass, and
63
63
  reporting either as "cleared" is the conflation the verdict vocabulary exists to prevent.
64
+ - **A failing condition comes back as a KEY — resolve it.** `requiredConditions.failedKeys` names
65
+ gates like `LOCATION_OK`: an identifier, not an explanation. Read the agent's bound strategy with
66
+ `get_strategy` (the `strategyId` is on `get_intelligence_agent`), find the matching
67
+ `conditions[].conditionKey`, and say what that condition actually tests in the player's terms.
68
+ Quoting the key back at the player is the same defect as a raw enum on screen.
69
+ - **Check `bindingState` before you present that definition as live.** `get_intelligence_agent`
70
+ carries it. At `BOUND`, the strategy's current revision is what the agent evaluates. At `SYNCING`
71
+ or `ORPHANED` it is not — the agent runs a materialized copy at its own `strategyRevision` — so
72
+ name the binding state beside the definition rather than letting current rules read as running
73
+ ones.
64
74
  - **Gate blocks link to their thought log** through `sourceThoughtLogId` — follow it with
65
75
  `get_agent_thought_log` when the block's reason needs the evaluation behind it.
66
76
  - `get_signal_performance` / `list_signal_logs` when the question is whether the signals fired, as
@@ -132,6 +142,10 @@ it is undetermined.
132
142
  player's intelligence credits and writes thought and activity records. It is the deployment
133
143
  flow's composition aid for tuning a draft — it is not a diagnostic read, and running it as one
134
144
  charges the player to answer a question the journals already answer.
145
+ - **Never name a strategy write tool, even to forbid it.** Reading a rule is not authority to change
146
+ one: route a rule change by naming the `strategy-authoring` skill, as step 4 does. The authoring
147
+ tools are in a family this skill does not declare, and a skill body that names an unreachable tool
148
+ — including in a negative — fails the registry's reachability check.
135
149
  - Never diagnose from the agent's own prose or overlay text where a typed field exists.
136
150
  - Never present a gate-block count as a rate, a trend, or a percentage — report it as served.
137
151
 
@@ -27,6 +27,11 @@ Not "what were its returns" — whether it did *the thing it was told to do*.
27
27
 
28
28
  - `get_intelligence_agent` — restate the agent's mandate in one line, in the player's terms. This
29
29
  is the yardstick; without it "up 4%" means nothing.
30
+ - `get_strategy` on the `strategyId` that read returns — the mandate is the bound strategy, so the
31
+ yardstick is its admission gates, required conditions and trade levels, not the agent's overlay
32
+ prose. Read `bindingState` too: at `SYNCING` or `ORPHANED` the agent evaluates a materialized copy
33
+ at its own `strategyRevision`, and judging it against the strategy's current revision measures it
34
+ by rules it is not running.
30
35
  - `get_agent_performance` and `list_trade_outcomes` — judge against that mandate.
31
36
  - `get_trade_outcome_by_decision` / `get_trade_chart` when a specific trade needs explaining.
32
37
  - `get_signal_performance` when the question is whether the agent's signals are working, as