@battlegrid/mcp-server 31.2.64 → 31.2.66
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 +105 -22
- package/SKILL.md +33 -28
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/skills/EXPORT.json +8 -8
- package/skills/battlegrid-agent-management/SKILL.md +113 -73
- package/skills/battlegrid-market-analysis/SKILL.md +9 -5
- package/skills/battlegrid-strategy-authoring/SKILL.md +248 -208
- package/skills/battlegrid-strategy-doctor/SKILL.md +15 -6
- package/skills/battlegrid-strategy-examples/SKILL.md +34 -24
- package/skills/battlegrid-strategy-examples/references/playbooks.md +5 -5
- package/skills/battlegrid-strategy-examples/references/recipes.md +3 -2
package/README.md
CHANGED
|
@@ -24,6 +24,91 @@ 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 — v85 (agents and strategies change only through their drafts)
|
|
28
|
+
|
|
29
|
+
**Breaking at v85: seven tools are retired, and a surviving tool refuses an input it accepted at v84.**
|
|
30
|
+
v85 is the contract on top of v84.
|
|
31
|
+
|
|
32
|
+
Every agent and strategy is now created and changed the same way: stage the change into the
|
|
33
|
+
entity's draft, read the draft back with its diff, diagnostics and impact, and commit exactly the
|
|
34
|
+
draft version and the live revision that read returned.
|
|
35
|
+
|
|
36
|
+
### Removed tools
|
|
37
|
+
|
|
38
|
+
- **`compile_strategy_plan`, `stage_strategy_plan`, `apply_strategy_plan`, `update_strategy_signal_rule`,
|
|
39
|
+
`create_intelligence_agent`, `update_intelligence_agent`, `rebind_intelligence_agent`** are gone, with
|
|
40
|
+
no alias; a call gets an unknown-tool error. The replacements: `get_strategy_draft` →
|
|
41
|
+
`stage_strategy_draft` → `commit_strategy_draft` for a strategy (a signal rule is a row of the draft's
|
|
42
|
+
`SIGNAL_RULES` axis), and `stage_agent_draft` → `get_agent_draft` → `commit_agent_draft` for an agent
|
|
43
|
+
(a rebind is the draft's `STRATEGY_BINDING` axis).
|
|
44
|
+
|
|
45
|
+
### Added tools
|
|
46
|
+
|
|
47
|
+
- **`stage_strategy_draft { strategyId?, draftVersion, axes }`**, **`commit_strategy_draft`** and
|
|
48
|
+
**`commit_agent_draft`** (`{ <id>, draftVersion, expectedRevision }`, `expectedRevision` null for a
|
|
49
|
+
create). A commit publishes exactly the draft version and the live revision the caller read, is
|
|
50
|
+
idempotent on `{ id, draftVersion }`, and returns the kind's committer response plus the draft's
|
|
51
|
+
`draftVersion` after its clear (null when the commit emptied it).
|
|
52
|
+
|
|
53
|
+
### Rejected input
|
|
54
|
+
|
|
55
|
+
- **`archive_strategy` no longer takes `confirm`.** A request carrying it is refused with the
|
|
56
|
+
unknown-key error — a break on a surviving tool.
|
|
57
|
+
- **`discard_agent_draft` and `discard_strategy_draft` take `draftVersion`** (the version
|
|
58
|
+
`get_<kind>_draft` returned) in place of `confirm`; `confirm` is refused as an unknown key, and a
|
|
59
|
+
version the draft moved past is refused `DRAFT_VERSION_MOVED`.
|
|
60
|
+
- **`preview_strategy_report` takes `{ coinSelection, source }`.** The report fields move under
|
|
61
|
+
`source: { kind: 'FIELDS', … }`, and `source: { kind: 'DRAFT', strategyId, draftVersion }` previews the
|
|
62
|
+
owner's draft as a commit would compose it. A body with the fields at the top level is refused.
|
|
63
|
+
- **A strategy's ENTRY axis is a union discriminated by `trigger`**: `{ trigger: 'ON_CANDLE_CLOSE' }`
|
|
64
|
+
alone, or a level trigger with `levelOffsetAtrMultiple` and `validForBars`. `ON_CANDLE_CLOSE` naming
|
|
65
|
+
either dial is refused, which the retired compile accepted; the server stamps the seed values.
|
|
66
|
+
|
|
67
|
+
### Widened input
|
|
68
|
+
|
|
69
|
+
- **`stage_agent_draft` accepts `STRATEGY_BINDING` on an edit draft**, where v84 refused it: a staged
|
|
70
|
+
binding commits as the agent's rebind. Its TRADING_CONFIG axis now describes each size preset as the
|
|
71
|
+
risk budget lost at the hard stop.
|
|
72
|
+
|
|
73
|
+
### Reshaped output
|
|
74
|
+
|
|
75
|
+
- **`fork_strategy` returns `{ strategyId, draftVersion }`** — the create draft it wrote, holding a copy
|
|
76
|
+
of the source — in place of `{ strategy }`. No strategy exists until that draft commits.
|
|
77
|
+
- **`get_agent_draft` and `get_strategy_draft` gain `draftVersion`** (0 when no draft is held, beside a
|
|
78
|
+
null `draft`), **`committedRevision`, a per-axis `diff` against live, `diagnostics` and `impact`.**
|
|
79
|
+
- **`stage_agent_draft` gains `diagnostics`**, the composed draft's errors and warnings.
|
|
80
|
+
- **`discard_agent_draft` and `discard_strategy_draft` return `discarded: true` only**; a discard that
|
|
81
|
+
finds nothing is refused rather than answered `false`.
|
|
82
|
+
|
|
83
|
+
### Widened enum
|
|
84
|
+
|
|
85
|
+
- **Strategy draft axes gain `ORIGIN`**, the create-only axis a fork writes, on `list_strategy_drafts`
|
|
86
|
+
and every strategy draft read. A client switching exhaustively on a strategy draft axis must add the
|
|
87
|
+
branch.
|
|
88
|
+
- **Error codes gain `DRAFT_VERSION_MOVED`** (details `draftVersion`, null when no draft is held) **and
|
|
89
|
+
`DRAFT_AXIS_CONTESTED`** (details `contestedAxes` and `draftVersion`), both 409.
|
|
90
|
+
- **Refusal details gain `nextAct`.** Every draft-specific refusal, the revision `CONFLICT` and the
|
|
91
|
+
in-flight commit refusal carry `nextAct: 'get_draft'`; a commit's validation refusal carries
|
|
92
|
+
`nextAct: 'stage'`; every other refusal carries none. `details.expectedRevision` widens to
|
|
93
|
+
`number | null`.
|
|
94
|
+
|
|
95
|
+
### Removed error code
|
|
96
|
+
|
|
97
|
+
- **`PLAN_APPROVAL_NOT_FOUND`**, with the plan path that raised it.
|
|
98
|
+
|
|
99
|
+
### Behaviour behind unchanged schemas
|
|
100
|
+
|
|
101
|
+
- **`archive_strategy` and `restore_strategy` no longer refuse around the owner's unsaved draft**: they
|
|
102
|
+
re-base it onto the revision they write. `restore_strategy`'s description drops the compile route — a
|
|
103
|
+
repair is staged into the draft and committed, which restores the strategy.
|
|
104
|
+
- **The `author-strategy` prompt** reads "Discover, stage, review, and commit a BattleGrid strategy
|
|
105
|
+
through its draft".
|
|
106
|
+
- **The server's manifest records a description hash per tool** (manifest format 4), and the tool count
|
|
107
|
+
moves 142 → 138.
|
|
108
|
+
|
|
109
|
+
A strict client that rejects unknown keys fails to parse `fork_strategy` and the draft reads at v85;
|
|
110
|
+
list the tools again after the server deploys.
|
|
111
|
+
|
|
27
112
|
## Contract history — v84 (the hold moves from the condition to each clause and group)
|
|
28
113
|
|
|
29
114
|
**Breaking at v84: a condition body accepted at v83 is refused, and condition evidence is reshaped.**
|
|
@@ -2077,8 +2162,8 @@ Retained for authors upgrading from 4.x. Everything below still describes the cu
|
|
|
2077
2162
|
|
|
2078
2163
|
The v3 authoring contract below is unchanged and still current:
|
|
2079
2164
|
|
|
2080
|
-
- **Strict authoring envelopes.** `get_strategy_section_template`, `
|
|
2081
|
-
- **`create_strategy` is retired.** Direct strategy creation no longer exists. Author strategies
|
|
2165
|
+
- **Strict authoring envelopes.** `get_strategy_section_template` and every draft lifecycle tool (`stage_<kind>_draft`, `get_<kind>_draft`, `commit_<kind>_draft`, `discard_<kind>_draft`, `list_<kind>_drafts`) publish one strict server-owned object, `{ request: canonicalPayload }`. In multi-account mode the proxy adds `account` **only** as a sibling of `request`, producing exactly `{ account, request }`; on a call it strips only `account` and forwards the unchanged `{ request }`. It never descends into, flattens, or reconstructs the nested request.
|
|
2166
|
+
- **`create_strategy` is retired.** Direct strategy creation no longer exists. Author strategies through the strategy draft lifecycle below, and bind an agent to one through its draft's `STRATEGY_BINDING` axis. There is no alias, shim, or flat-payload fallback.
|
|
2082
2167
|
- **Rediscover after deployment.** Publishing the package does **not** refresh a running proxy's cached capability snapshot. After the server cutover, restart/reconnect the proxy process and re-run `tools/list`, `prompts/list`, and `resources/list`.
|
|
2083
2168
|
|
|
2084
2169
|
> Earlier majors: **v1.x** single/multi-account stdio proxy; **v2.0.0** moved the default `BATTLEGRID_API_URL` to the `/mcp` suffix; **v3.0.0** the strategy-authoring major; **v4.0.0** made `conditions` and `conditionVerdicts` required on the apply post-state; **v5.0.0** fused the conditions/verdicts split (section above). **v6.0.0** through **v11.0.0** were never published as separate package versions — they are absorbed by the v11 cutover at the top. See [Rediscovery & versioning](#rediscovery--versioning).
|
|
@@ -2250,7 +2335,7 @@ For the strict authoring tools, the multi-account input is exactly `{ account, r
|
|
|
2250
2335
|
|
|
2251
2336
|
```json
|
|
2252
2337
|
{
|
|
2253
|
-
"name": "
|
|
2338
|
+
"name": "commit_strategy_draft",
|
|
2254
2339
|
"inputSchema": {
|
|
2255
2340
|
"type": "object",
|
|
2256
2341
|
"properties": {
|
|
@@ -2260,11 +2345,14 @@ For the strict authoring tools, the multi-account input is exactly `{ account, r
|
|
|
2260
2345
|
"description": "Which BattleGrid account to use for this action"
|
|
2261
2346
|
},
|
|
2262
2347
|
"request": {
|
|
2263
|
-
"
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2348
|
+
"type": "object",
|
|
2349
|
+
"properties": {
|
|
2350
|
+
"strategyId": { "type": "string", "format": "uuid" },
|
|
2351
|
+
"draftVersion": { "type": "integer", "minimum": 1 },
|
|
2352
|
+
"expectedRevision": { "anyOf": [{ "type": "integer", "minimum": 1 }, { "type": "null" }] }
|
|
2353
|
+
},
|
|
2354
|
+
"required": ["strategyId", "draftVersion", "expectedRevision"],
|
|
2355
|
+
"additionalProperties": false
|
|
2268
2356
|
}
|
|
2269
2357
|
},
|
|
2270
2358
|
"required": ["account", "request"],
|
|
@@ -2287,24 +2375,19 @@ Each account supports one active key at a time. Generating a new key automatical
|
|
|
2287
2375
|
|
|
2288
2376
|
For paid games and autonomous wagering, enable **Server-Signed Wagers** in the MCP tab (`mcp:wager` scope). Strategy discovery and non-financial configuration writes only need `mcp:read`.
|
|
2289
2377
|
|
|
2290
|
-
## Strategy authoring (
|
|
2378
|
+
## Strategy and agent authoring (stage → read → commit)
|
|
2291
2379
|
|
|
2292
|
-
Strategies
|
|
2380
|
+
Strategies and intelligence agents change only through their drafts, with one tool family per kind (`<kind>` is `strategy` or `agent`): `stage_<kind>_draft`, `get_<kind>_draft`, `commit_<kind>_draft`, `discard_<kind>_draft` and `list_<kind>_drafts`. **A stage writes the player's unsaved draft and commits nothing; `commit_<kind>_draft` is the only write to the entity itself**, and it publishes exactly the draft the caller read.
|
|
2293
2381
|
|
|
2294
|
-
1. **Choose the
|
|
2382
|
+
1. **Choose the entity.** `list_strategies` (add `includeInactive:true` when repairing an archived strategy) and `get_strategy`, or `list_intelligence_agents` and `get_intelligence_agent`. `fork_strategy({ strategyId, sourceRevision })` copies a visible revision into a new create draft and returns its `strategyId` and `draftVersion`; it creates nothing.
|
|
2295
2383
|
2. **Discover the report vocabulary live.** Walk `list_strategy_categories` → `list_strategy_vocabulary` → `get_metric_construction_hints` → `get_strategy_column_contract`, and use `get_strategy_section_template` / `preview_strategy_report`. Do not guess metric, transform, parameter, template, or enabled-timeframe facts — they are server-discovered.
|
|
2296
|
-
3. **
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
- **RESTORE** targets an owned inactive revision (with any repair axes).
|
|
2300
|
-
4. **Review before confirming.** Inspect the returned `approvedPlan` (complete post-state, proposed revision, diff, bound-agent impact, expiry) and `reviewContext` (column contracts, point-in-time report preview, open positions, quota/name admission). The plan token expires after five minutes; recompile after expiry or drift.
|
|
2301
|
-
5. **Apply the plan the server already holds.** After explicit user approval, call `apply_strategy_plan({ request: { planToken, confirm: true } })`. **There is no `plan` member** — one is rejected as an unknown key. The server keeps the plan its own compile approved and reads it back, so nothing is copied out of the compile response and nothing can be mistyped or truncated in transit. Forward `planToken` byte-for-byte exactly as received: it is an opaque signed value, never retyped, paraphrased or rebuilt from memory, and a mangled one addresses no approved plan and is refused. `PLAN_APPROVAL_NOT_FOUND` means no approved plan answers to this token — already applied, lapsed, or never issued — and the recovery is to compile again; so is `TOKEN_EXPIRED` once the five minutes run out. Any other refusal (quota, name collision, a bound agent that changed, a moved catalog) **leaves the plan applicable**: clear the cause and confirm again with the same token while it lives. Changed configuration propagates to every bound agent immediately.
|
|
2302
|
-
|
|
2303
|
-
The authored axes — including normalized `sections` and `conditions`, each condition carrying its own required, nullable `verdict` — belong on the **compile** request. Every derived field (`diff`, `viability`, `mismatches`, `signalRules`, `creationSeed`, `proposedRevision`, `bindingImpact`, `authoringCatalogDigest`, `reviewContext`) is re-derived server-side and rejected as an unknown key if resubmitted, and `conditionVerdicts` is rejected with a message naming its replacement — the verdict belongs on the condition.
|
|
2384
|
+
3. **Read the draft.** `get_<kind>_draft({ request: { <id> } })` returns the draft (or `null`), its `draftVersion` (0 when none is held), the live `committedRevision` (null for an entity not created yet), a per-axis `diff` against live, `diagnostics` and `impact`.
|
|
2385
|
+
4. **Stage the change.** `stage_<kind>_draft({ request: { <id>?, draftVersion, axes } })` names the version you read. Each axis is whole, except a strategy's `SIGNAL_RULES`, whose rows replace the drafted rows for the same signals and keep every other one. Omit the id to open a new create draft; the response carries the minted id. A stage that has written never refuses: the composed draft's errors and warnings come back as `diagnostics`. It is refused only when the version is one the draft never reached (`DRAFT_VERSION_MOVED`) or when the player's own form changed an axis you are staging after that version (`DRAFT_AXIS_CONTESTED`, naming `contestedAxes`).
|
|
2386
|
+
5. **Review with the player, then commit.** Read the draft again, show the player its diff and impact, and on their explicit word call `commit_<kind>_draft({ request: { <id>, draftVersion, expectedRevision } })` with exactly the two numbers that read returned — `expectedRevision: null` creates the entity at revision 1. A draft that moved is refused `DRAFT_VERSION_MOVED`, a moved revision `CONFLICT`, and an invalid draft with the same code its diagnostics carried; nothing is written. Each refusal's `details.nextAct` says what to do next (`get_draft` or `stage`). The commit is idempotent on `{ id, draftVersion }`: a retried commit replays its outcome. Changed strategy configuration propagates to every bound agent immediately; committing a draft of an archived strategy restores it.
|
|
2304
2387
|
|
|
2305
|
-
`
|
|
2388
|
+
`discard_<kind>_draft({ request: { <id>, draftVersion } })` removes the draft at the version you read and never one that moved since. `preview_strategy_report({ coinSelection, source: { kind: 'DRAFT', strategyId, draftVersion } })` previews a draft as a commit would compose it. In multi-account mode the lifecycle tools use the `{ account, request }` sibling envelope; `preview_strategy_report` keeps its own flat input and takes `account` beside `coinSelection` and `source`.
|
|
2306
2389
|
|
|
2307
|
-
**Strategy-bound agents.**
|
|
2390
|
+
**Strategy-bound agents.** An agent binds to a strategy through its draft's `STRATEGY_BINDING` axis — on a create draft, or on an edit draft as a rebind that commits through the same `commit_agent_draft` (discover `strategyId` via `list_strategies`). The plan tools, `update_strategy_signal_rule` and the direct agent writers are retired, and so is `create_strategy`.
|
|
2308
2391
|
|
|
2309
2392
|
## Capabilities
|
|
2310
2393
|
|
|
@@ -2468,7 +2551,7 @@ you reach over MCP:
|
|
|
2468
2551
|
| `battlegrid-arena-play` | Enter Market Grid sessions: find an open session, read its coin pool and live market context, compose a grid with real per-coin reasoning or have an agent generate it, submit, then read results and the reasoning journal |
|
|
2469
2552
|
| `battlegrid-market-analysis` | Read the current crypto market — regime, funding and open interest, leaders and laggards, a deep-dive on any named coin — and close with the levels worth watching |
|
|
2470
2553
|
| `battlegrid-radar-deployment` | Put agents on standing duty: per-coin Radar policies that fire on confirmed regime flips, and per-preset Arena deployment policies, previewed before they are written and un-deployed with the blast radius stated |
|
|
2471
|
-
| `battlegrid-strategy-authoring` | Build a strategy from a plain-English idea: gather evidence, lock the spec,
|
|
2554
|
+
| `battlegrid-strategy-authoring` | Build a strategy from a plain-English idea: gather evidence, lock the spec, stage it into the strategy's draft, review the diff, diagnostics and impact, commit only on confirmation. Also fork, tune, restore, archive, preview |
|
|
2472
2555
|
| `battlegrid-strategy-doctor` | Diagnose an agent that is not doing what was expected — why it has not traded, why it stopped, whether it is healthy — from typed fields, then rank the fixes with the exact lever each needs |
|
|
2473
2556
|
| `battlegrid-strategy-examples` | Full-surface composition patterns: custom report sections and header grammar, benchmark sections, condition trees with verdicts and enforcement gates, tiered signal weights and the aggregate gate math, routing gates, ATR trade levels, position management, plus validated desk-grade playbooks and TradingView process ports |
|
|
2474
2557
|
| `battlegrid-trade-analysis` | Read your own trading position: where the money is, whether each agent is doing its job, what is open and how close it sits to its protections, and whether the automation is actually running |
|
package/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: battlegrid
|
|
3
|
-
description: MCP skill for BattleGrid — play crypto prediction games (Market Grid), author trading strategies
|
|
3
|
+
description: MCP skill for BattleGrid — play crypto prediction games (Market Grid), author trading strategies and intelligence agents through their drafts (stage → read the diff → commit on the player's word), and manage strategy-bound agents from AI agents.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# BattleGrid
|
|
@@ -34,44 +34,47 @@ to connect and to know which one to open.
|
|
|
34
34
|
|
|
35
35
|
## Single-account vs multi-account request shape
|
|
36
36
|
|
|
37
|
-
The
|
|
37
|
+
The draft lifecycle tools — `stage_<kind>_draft`, `get_<kind>_draft`, `commit_<kind>_draft`, `discard_<kind>_draft` and `list_<kind>_drafts` for the `strategy` and `agent` kinds — and `get_strategy_section_template` use one strict server-owned envelope, `{ request: canonicalPayload }`.
|
|
38
38
|
|
|
39
|
-
- **Single account:** call them as the server publishes them, e.g. `
|
|
39
|
+
- **Single account:** call them as the server publishes them, e.g. `stage_strategy_draft({ request })`.
|
|
40
40
|
- **Multiple accounts (proxy):** live discovery adds a sibling `account`, so the shape is exactly `{ account, request }`. Select the account in the outer field; keep `request` exactly as discovered. The proxy strips only `account` and forwards the unchanged `{ request }`.
|
|
41
41
|
|
|
42
42
|
Never put `account` inside `request`, and never flatten request fields beside it. Other tools keep whatever input shape live discovery reports for them.
|
|
43
43
|
|
|
44
44
|
## Scopes
|
|
45
45
|
|
|
46
|
-
- `mcp:read` — strategy discovery **and** non-financial configuration writes (
|
|
46
|
+
- `mcp:read` — strategy discovery **and** non-financial configuration writes (stage and commit strategy and agent drafts, customize signals). Treat it as configuration authority, not view-only.
|
|
47
47
|
- `mcp:wager` — financial actions (submit paid entries, accept/cancel entry decisions, deployment policies). Enable **Server-Signed Wagers** in Profile → MCP to grant it. Pending entry decisions come from the conversational surface, which waits for approval; an agent deployed to a radar coin or a trading-enabled arena slot executes without one.
|
|
48
48
|
|
|
49
|
-
## Author a strategy, and bind
|
|
49
|
+
## Author a strategy or an agent, and bind them
|
|
50
50
|
|
|
51
|
-
**The arc lives in `battlegrid-strategy-authoring
|
|
52
|
-
|
|
53
|
-
it states only what the *proxy* adds to
|
|
51
|
+
**The arc lives in `battlegrid-strategy-authoring` and `battlegrid-agent-management`** — activate the
|
|
52
|
+
one you need, and `battlegrid-strategy-examples` alongside the first when the strategy goes beyond a
|
|
53
|
+
bare template. Do not compose a draft from this document; it states only what the *proxy* adds to
|
|
54
|
+
that arc.
|
|
54
55
|
|
|
55
|
-
|
|
56
|
+
Four facts about transport, which are this skill's to state because they are about the wire rather
|
|
56
57
|
than about authoring:
|
|
57
58
|
|
|
58
59
|
- **The envelope is `{ request }`, or `{ account, request }` on a multi-account proxy** (see above).
|
|
59
|
-
It applies to `get_strategy_section_template
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
`
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
agent
|
|
60
|
+
It applies to every draft lifecycle tool and to `get_strategy_section_template`.
|
|
61
|
+
- **Every change goes through the entity's draft.** `stage_<kind>_draft({ request: { <id>?,
|
|
62
|
+
draftVersion, axes } })` writes proposed axes into the player's unsaved draft and commits nothing;
|
|
63
|
+
omit the id to open a new create draft, whose minted id the response carries.
|
|
64
|
+
`get_<kind>_draft({ request: { <id> } })` returns the draft, its `draftVersion`, the live
|
|
65
|
+
`committedRevision`, a per-axis `diff`, `diagnostics` and `impact`.
|
|
66
|
+
- **A commit names exactly the two numbers that read returned.**
|
|
67
|
+
`commit_<kind>_draft({ request: { <id>, draftVersion, expectedRevision } })` — `expectedRevision`
|
|
68
|
+
is `null` for an entity not created yet. Commit only after the player has seen the diff and impact
|
|
69
|
+
and said yes. `discard_<kind>_draft({ request: { <id>, draftVersion } })` is the same fence.
|
|
70
|
+
- **The proxy forwards numbers and `null` unchanged.** It never fills in a version, never retries a
|
|
71
|
+
refused call and never rebuilds a request: a `DRAFT_VERSION_MOVED`, `DRAFT_AXIS_CONTESTED` or
|
|
72
|
+
revision `CONFLICT` refusal carries `details.nextAct`, and the next act is the caller's.
|
|
73
|
+
|
|
74
|
+
`fork_strategy` copies a revision into a new create draft and creates nothing until that draft is
|
|
75
|
+
committed. An agent binds to a strategy through its draft's `STRATEGY_BINDING` axis, on a create or
|
|
76
|
+
as a rebind. **`battlegrid-radar-deployment`** carries putting an agent on standing duty;
|
|
77
|
+
**`battlegrid-strategy-doctor`** carries diagnosing one that is not trading.
|
|
75
78
|
|
|
76
79
|
## Play a game (Market Grid)
|
|
77
80
|
|
|
@@ -85,7 +88,7 @@ The `play-market-grid` prompt (discover via `prompts/list`) provides a guided en
|
|
|
85
88
|
|
|
86
89
|
## Retired operations
|
|
87
90
|
|
|
88
|
-
`create_strategy`
|
|
91
|
+
`create_strategy`, the plan tools (`compile_strategy_plan`, `stage_strategy_plan`, `apply_strategy_plan`), `update_strategy_signal_rule`, and the direct agent writers (`create_intelligence_agent`, `update_intelligence_agent`, `rebind_intelligence_agent`) are **retired** — they are absent from discovery and cannot be invoked. Stage into the entity's draft, read it back, and commit the version you read; a signal rule is a row of the strategy draft's `SIGNAL_RULES` axis, and a strategy binding is the agent draft's `STRATEGY_BINDING` axis. Do not attempt flat legacy payloads; the server enforces a closed-world request root and the proxy never reconstructs them.
|
|
89
92
|
|
|
90
93
|
## Common errors
|
|
91
94
|
|
|
@@ -95,7 +98,9 @@ The `play-market-grid` prompt (discover via `prompts/list`) provides a guided en
|
|
|
95
98
|
| `API key must start with "bg_live_"` | Invalid key format | Generate a new key at battlegrid.trade → Profile → MCP |
|
|
96
99
|
| Authentication failed (401/403) | Key revoked/rotated | Generate a new key and **restart** the proxy (keys read once at startup) |
|
|
97
100
|
| `"account" parameter is required` | Multi-account call missing `account` | Add the outer `account`; keep `request` unchanged |
|
|
98
|
-
|
|
|
101
|
+
| `DRAFT_VERSION_MOVED` | The draft changed after you read it, or no draft is held (`details.draftVersion` null) | Call `get_<kind>_draft` again and commit what it now holds |
|
|
102
|
+
| `DRAFT_AXIS_CONTESTED` | The player changed `details.contestedAxes` in their open form after the version you staged against | Read the draft again and propose against what they now have |
|
|
103
|
+
| `CONFLICT` on a commit | The live revision moved after the draft read | Read the draft again; commit at the new `committedRevision` |
|
|
99
104
|
| Required at allocation Off | A rule flags `required` on a signal weighted `0` (contract 34) | Read `details.inertRequiredSignalIds`; per signal either raise `allocation` or set `required: false` |
|
|
100
|
-
| Method not found | Calling a retired/unknown tool | Re-run `tools/list`;
|
|
105
|
+
| Method not found | Calling a retired/unknown tool | Re-run `tools/list`; stage, read and commit through the entity's draft |
|
|
101
106
|
| `Wager scope required` | `mcp:wager` not enabled | Enable Server-Signed Wagers in Profile → MCP |
|
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.
|
|
52
|
+
export declare const PACKAGE_VERSION = "31.2.66";
|
|
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.
|
|
55
|
+
export const PACKAGE_VERSION = '31.2.66';
|
|
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
package/skills/EXPORT.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"generator": "battlegrid-app/server/scripts/export-mcp-skills.mjs",
|
|
3
|
-
"contractVersion": "
|
|
3
|
+
"contractVersion": "85.0.0",
|
|
4
4
|
"files": {
|
|
5
|
-
"battlegrid-agent-management/SKILL.md": "
|
|
5
|
+
"battlegrid-agent-management/SKILL.md": "708a37732e822184f99e58fc96b87780e61155e792482fcd56ae56aa7064cd5b",
|
|
6
6
|
"battlegrid-arena-play/SKILL.md": "4cfaa92a8d0dcaf477b227abd774e7aa8642c185d72108dfd401be0cf8aecd7f",
|
|
7
|
-
"battlegrid-market-analysis/SKILL.md": "
|
|
7
|
+
"battlegrid-market-analysis/SKILL.md": "3a9943de9f482a8230fb2983efd2f2d8b8c17d49c242e49b68e7243c20c3aa7b",
|
|
8
8
|
"battlegrid-radar-deployment/SKILL.md": "17301fa66f4b128154435462ffa967efcb3d016df671b03c485d0f8b840fc891",
|
|
9
|
-
"battlegrid-strategy-authoring/SKILL.md": "
|
|
10
|
-
"battlegrid-strategy-doctor/SKILL.md": "
|
|
11
|
-
"battlegrid-strategy-examples/SKILL.md": "
|
|
12
|
-
"battlegrid-strategy-examples/references/playbooks.md": "
|
|
13
|
-
"battlegrid-strategy-examples/references/recipes.md": "
|
|
9
|
+
"battlegrid-strategy-authoring/SKILL.md": "4c708dc90029e0b991c4c154d9c74a366a29c2d3a827b78936f2f344df3efeb4",
|
|
10
|
+
"battlegrid-strategy-doctor/SKILL.md": "14f20bff9e2b5a59d11634fe3615b1298d672d5e2eba06d3dc8698b571b3bee3",
|
|
11
|
+
"battlegrid-strategy-examples/SKILL.md": "3c11942f7327e00208d48a7a256faf83d80faf568bd0181b707657bace3c1ef9",
|
|
12
|
+
"battlegrid-strategy-examples/references/playbooks.md": "63aa07f3d55f97e53b2bf6401528807ab23bd093a4bbc37e598158249db24a59",
|
|
13
|
+
"battlegrid-strategy-examples/references/recipes.md": "61382acdd295fa159f055b787ba501f1c015f383f59a6714a973057f10de611f",
|
|
14
14
|
"battlegrid-strategy-examples/references/tradingview-ports.md": "2b13adbc137178955edcca31b6ab40c01c745a932a0750b91db8820c736700bb",
|
|
15
15
|
"battlegrid-trade-analysis/SKILL.md": "f5d817022ab912f00e9c17ffa720a7599f6e6fa4b806d873fe5e7520c51a8dcd",
|
|
16
16
|
"battlegrid-trade-proposal/SKILL.md": "9bf7b7648fb009db118a3a428b15abf38df5ba56a2ef4c8a4eae3d979bdc8bcb"
|