@battlegrid/mcp-server 31.2.11 → 31.2.12

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.11";
52
+ export declare const PACKAGE_VERSION = "31.2.12";
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.11';
55
+ export const PACKAGE_VERSION = '31.2.12';
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.11",
3
+ "version": "31.2.12",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -12,6 +12,7 @@
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": "1ff63367de1f9a9fbbcd7ecd5367137800373df47aaeb1d61fb1298d3a1924f4",
15
- "battlegrid-trade-analysis/SKILL.md": "32573a67e55d735e6ee4e36b3b48c815694102704bc453c4d1c13db39551b3da"
15
+ "battlegrid-trade-analysis/SKILL.md": "32573a67e55d735e6ee4e36b3b48c815694102704bc453c4d1c13db39551b3da",
16
+ "battlegrid-trade-proposal/SKILL.md": "0a4586f660f605281c7775523c9e41422c6e52646ce52bf0688254af4619e46c"
16
17
  }
17
18
  }
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: battlegrid-trade-proposal
3
+ description: Find and stage a trade for one of the player's agents, for the player to approve. Activate whenever the player asks which coins fit an agent right now, wants a trade found or proposed for an agent, asks the agent to evaluate a coin, or wants to approve or decline a proposal it made. The scan is the agent's own gates over every active coin; the proposal is the agent's own conversational turn; approval is always the player's word.
4
+ ---
5
+
6
+ # Trade Proposal
7
+
8
+ You are finding and staging a trade for an agent the player configured — never placing one. Every
9
+ step below reads what the server decided and puts it to the player in their terms; nothing here
10
+ re-sorts a list, re-derives a verdict, or approves on the player's behalf.
11
+
12
+ ## 0. What is already held — before anything else
13
+
14
+ - `list_pending_approvals` and `list_user_active_positions` first, every time.
15
+ - A proposal holds the player's live-position slot for that coin across **all** their agents until
16
+ it is accepted, cancelled or expires. **Never propose on a coin the player already holds a pending
17
+ or live position on** — say why, and name the decision or position that holds it.
18
+
19
+ ## 1. Which coins fit the agent right now
20
+
21
+ - `scan_agent_coins` for the agent. The rows arrive server-ranked: qualifying coins first by score,
22
+ then the rest with their first failing gate, then coins that could not be scored with the reason.
23
+ - Read the rows **as written**: the rank, the verdict, the first failing gate, the unscorable
24
+ label. Never re-sort them and never re-derive a verdict from its numbers — the server's ranking
25
+ is the answer.
26
+ - A refused scan (`RATE_LIMITED`) is a refusal: say the scan was refused and when it can be retried
27
+ (`retryAfterSeconds`). Never say "nothing fits".
28
+
29
+ ## 2. Propose
30
+
31
+ - `propose_entry_decision` **only** on the coins the player named, or on the top qualifying row
32
+ when they asked for the best fit. One coin per call.
33
+ - `userMessage` is the player's own words for the turn. Mint a **fresh UUID** `idempotencyKey` per
34
+ proposal; a retry with the same key replays the recorded result and never runs a second turn.
35
+ - The call is synchronous and may take the turn's full LLM latency. Do not retry while it is in
36
+ flight; a same-key call during that time is refused with `CONFLICT`.
37
+
38
+ ## 3. Report the outcome in the player's terms
39
+
40
+ - `type: "recommendation"` — the PROPOSED decision, awaiting approval. State the direction, the
41
+ entry, stop and take-profit levels, the position size, the **`convictionPercent`**, and the
42
+ expiry (`expiresAt`). No conviction floor was applied on this surface: the conviction is the
43
+ agent's own reading, and the player judges it.
44
+ - `type: "no_trade"` — the reason (`reasonCode`) and the next coins worth asking about.
45
+ - `type: "error"` — the engine's block or a post-billing failure, with its remedy:
46
+ `OPEN_POSITION_CONFLICT` means a position already holds the slot (see step 0);
47
+ `LLM_CREDITS_EXHAUSTED` means top up when `topupAvailable` is true; a `SURFACE` / `LLM_FAILURE`
48
+ means the model was billed and produced nothing usable — retry **with a new key**, since the
49
+ same key replays this failure.
50
+ - A refused proposal (`RATE_LIMITED`) is a refusal with its retry-after. Never "nothing to do".
51
+
52
+ ## 4. Approve or decline — only on the player's word
53
+
54
+ - Present the decision and **ask**. `accept_entry_decision` only after the player explicitly
55
+ approves; `cancel_entry_decision` only after they explicitly decline.
56
+ - Never accept because the conviction reads high, because the scan ranked the coin first, or
57
+ because the player asked you to "find a trade" — finding is not approving. `get_entry_decision`
58
+ re-reads the row if the conversation moved on before they answered.