@battlegrid/mcp-server 2.0.0 → 3.0.0
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 +90 -66
- package/dist/index.d.ts +53 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -51
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,19 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@battlegrid/mcp-server)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
MCP server for [BattleGrid](https://battlegrid.trade) — play crypto prediction games from AI agents.
|
|
6
|
+
MCP server for [BattleGrid](https://battlegrid.trade) — play crypto prediction games, author trading strategies, and manage intelligence agents from AI agents.
|
|
7
|
+
|
|
8
|
+
It is a thin, authenticated **stdio proxy** to BattleGrid's remote MCP server (Stripe `@stripe/mcp` pattern — no business logic). It discovers tools, prompts, and resources live from the server and re-exposes them to local MCP clients (Claude Desktop, Claude Code, Cursor). Capabilities are always **discovered live** — this package never hardcodes the tool catalog.
|
|
9
|
+
|
|
10
|
+
## v3 — breaking major (strategy authoring)
|
|
11
|
+
|
|
12
|
+
**v3 is a breaking major that pairs with the BattleGrid server's strategy-authoring release.** Upgrade the package and the server major together.
|
|
13
|
+
|
|
14
|
+
- **Strict authoring envelopes.** `get_strategy_section_template`, `update_strategy_signal_rule`, `compile_strategy_plan`, and `apply_strategy_plan` 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.
|
|
15
|
+
- **`create_strategy` is retired.** Direct strategy creation no longer exists. Author strategies with the compile → review → apply workflow below, and bind them to agents at agent-creation time (`create_intelligence_agent({ …, strategyId })`). There is no alias, shim, or flat-payload fallback.
|
|
16
|
+
- **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`.
|
|
17
|
+
|
|
18
|
+
> Earlier majors: **v1.x** single/multi-account stdio proxy; **v2.0.0** moved the default `BATTLEGRID_API_URL` to the `/mcp` suffix. See [Rediscovery & versioning](#rediscovery--versioning).
|
|
7
19
|
|
|
8
20
|
## Quick Start
|
|
9
21
|
|
|
@@ -19,7 +31,7 @@ BATTLEGRID_API_KEY=bg_live_xxx npx @battlegrid/mcp-server
|
|
|
19
31
|
BATTLEGRID_API_KEYS=bg_live_alice_key,bg_live_bob_key npx @battlegrid/mcp-server
|
|
20
32
|
```
|
|
21
33
|
|
|
22
|
-
When multiple keys are provided, the server discovers each account's identity and injects
|
|
34
|
+
When multiple keys are provided, the server discovers each account's identity and injects a required `account` parameter into every tool so the AI agent can choose which account to act as.
|
|
23
35
|
|
|
24
36
|
### Remote server (streamable-http transport)
|
|
25
37
|
|
|
@@ -83,8 +95,6 @@ export BATTLEGRID_API_KEYS=bg_live_alice_key,bg_live_bob_key
|
|
|
83
95
|
|
|
84
96
|
### Cursor
|
|
85
97
|
|
|
86
|
-
**Single account:**
|
|
87
|
-
|
|
88
98
|
```json
|
|
89
99
|
{
|
|
90
100
|
"mcpServers": {
|
|
@@ -99,108 +109,102 @@ export BATTLEGRID_API_KEYS=bg_live_alice_key,bg_live_bob_key
|
|
|
99
109
|
}
|
|
100
110
|
```
|
|
101
111
|
|
|
102
|
-
|
|
112
|
+
Use `BATTLEGRID_API_KEYS` (comma-separated) for multiple accounts.
|
|
103
113
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
```
|
|
114
|
+
### ChatGPT Desktop
|
|
115
|
+
|
|
116
|
+
ChatGPT Desktop connects via **OAuth 2.1** — no npm package or API key needed. ChatGPT handles the OAuth flow automatically.
|
|
117
|
+
|
|
118
|
+
1. Open ChatGPT Desktop → **Settings** → **MCP Servers** → **Add Server**
|
|
119
|
+
2. Enter the MCP endpoint URL: `https://mcp.battlegrid.trade/mcp`
|
|
120
|
+
3. Select **OAuth** as the authentication method
|
|
121
|
+
4. ChatGPT discovers OAuth endpoints, registers as a client (Dynamic Client Registration), and opens BattleGrid's consent page
|
|
122
|
+
5. Log in to BattleGrid and click **Authorize**
|
|
117
123
|
|
|
118
|
-
|
|
124
|
+
| | Claude Desktop / Cursor | ChatGPT Desktop |
|
|
125
|
+
|---|---|---|
|
|
126
|
+
| **Transport** | stdio proxy (`@battlegrid/mcp-server`) | Direct HTTPS |
|
|
127
|
+
| **Auth** | API key (`bg_live_*`) | OAuth 2.1 (Bearer token) |
|
|
128
|
+
| **Setup** | npm package + env vars | URL + OAuth consent |
|
|
129
|
+
| **Multi-account** | `BATTLEGRID_API_KEYS` env var | One OAuth grant per account |
|
|
119
130
|
|
|
120
|
-
|
|
131
|
+
## Account management
|
|
121
132
|
|
|
122
|
-
|
|
133
|
+
### Single account
|
|
123
134
|
|
|
124
|
-
|
|
135
|
+
Set `BATTLEGRID_API_KEY` with one API key. All tool calls use that account, and the tools are exactly the server-native shapes — the authoring tools take the strict `{ request }` envelope with no `account` field.
|
|
125
136
|
|
|
126
|
-
|
|
137
|
+
### Multiple accounts
|
|
138
|
+
|
|
139
|
+
Set `BATTLEGRID_API_KEYS` with a comma-separated list of API keys (one per BattleGrid account). On startup the proxy:
|
|
127
140
|
|
|
128
141
|
1. Calls `GET /mcp/identity` for each key to discover the account username
|
|
129
|
-
2. Injects a required `account` enum parameter into every tool
|
|
130
|
-
3. Routes each tool call to the correct account using the matching Bearer token
|
|
142
|
+
2. Injects a required `account` enum parameter into every tool — as a **sibling** of the existing input, never nested inside it
|
|
143
|
+
3. Routes each tool call to the correct account using the matching Bearer token, stripping only `account` before forwarding
|
|
131
144
|
|
|
132
|
-
|
|
145
|
+
For the strict authoring tools, the multi-account input is exactly `{ account, request }`:
|
|
133
146
|
|
|
134
147
|
```json
|
|
135
148
|
{
|
|
136
|
-
"name": "
|
|
149
|
+
"name": "compile_strategy_plan",
|
|
137
150
|
"inputSchema": {
|
|
151
|
+
"type": "object",
|
|
138
152
|
"properties": {
|
|
139
153
|
"account": {
|
|
140
154
|
"type": "string",
|
|
141
155
|
"enum": ["alice", "bob"],
|
|
142
156
|
"description": "Which BattleGrid account to use for this action"
|
|
157
|
+
},
|
|
158
|
+
"request": {
|
|
159
|
+
"oneOf": [
|
|
160
|
+
{ "properties": { "operation": { "const": "CREATE" } } },
|
|
161
|
+
{ "properties": { "operation": { "const": "UPDATE" } } },
|
|
162
|
+
{ "properties": { "operation": { "const": "RESTORE" } } }
|
|
163
|
+
]
|
|
143
164
|
}
|
|
144
165
|
},
|
|
145
|
-
"required": ["account"]
|
|
166
|
+
"required": ["account", "request"],
|
|
167
|
+
"additionalProperties": false
|
|
146
168
|
}
|
|
147
169
|
}
|
|
148
170
|
```
|
|
149
171
|
|
|
150
|
-
|
|
172
|
+
The proxy consumes only the outer `account` and forwards the unchanged `{ request }` upstream. Never put `account` inside `request`, and never flatten request fields beside it.
|
|
151
173
|
|
|
152
|
-
`BATTLEGRID_API_KEYS` takes precedence over `BATTLEGRID_API_KEY` when both are set.
|
|
174
|
+
If a key fails identity discovery (revoked, invalid), it is skipped with a warning. If all keys fail, the process exits. `BATTLEGRID_API_KEYS` takes precedence over `BATTLEGRID_API_KEY` when both are set.
|
|
153
175
|
|
|
154
|
-
### Getting an API
|
|
176
|
+
### Getting an API key
|
|
155
177
|
|
|
156
178
|
1. Go to [battlegrid.trade](https://battlegrid.trade) → **Profile** → **MCP** tab
|
|
157
179
|
2. Generate an API key (format: `bg_live_*`)
|
|
158
180
|
3. Copy the key immediately — it is shown only once
|
|
159
181
|
|
|
160
|
-
Each account supports one active key at a time. Generating a new key automatically revokes the previous one.
|
|
182
|
+
Each account supports one active key at a time. Generating a new key automatically revokes the previous one — restart any running proxy process afterward, since keys are read once at startup.
|
|
161
183
|
|
|
162
|
-
For paid games, enable **Server-Signed Wagers** in the MCP tab
|
|
184
|
+
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`.
|
|
163
185
|
|
|
164
|
-
##
|
|
186
|
+
## Strategy authoring (compile → review → apply)
|
|
165
187
|
|
|
166
|
-
|
|
188
|
+
Strategies are authored through one strict, whole-plan workflow. **Compilation writes nothing; `apply_strategy_plan` is the only write.** Always review the exact returned plan before confirming.
|
|
167
189
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
190
|
+
1. **Choose the operation and revision.** `list_strategies` (add `includeInactive:true` when preparing a RESTORE) and `get_strategy` return the current `revision`; thread it into the next revisioned call.
|
|
191
|
+
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.
|
|
192
|
+
3. **Compile one complete plan.** Call `compile_strategy_plan({ request })` where the nested request is exactly one strict branch plus a bounded `coinSelection`, `intentSummary`, and `assumptions`:
|
|
193
|
+
- **CREATE** supplies the full new strategy.
|
|
194
|
+
- **UPDATE** supplies at least one changed axis and `expectedRevision`.
|
|
195
|
+
- **RESTORE** targets an owned inactive revision (with any repair axes).
|
|
196
|
+
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.
|
|
197
|
+
5. **Apply only the exact reviewed plan.** After explicit user approval, call `apply_strategy_plan({ request: { approvedPlan, planToken, confirm: true } })`. Resubmit `approvedPlan` exactly as returned. Changed configuration propagates to every bound agent immediately.
|
|
171
198
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
### Tools (28)
|
|
175
|
-
|
|
176
|
-
| Category | Tools |
|
|
177
|
-
|----------|-------|
|
|
178
|
-
| **Market Grid** (7) | `list_market_grid_sessions`, `get_market_grid_session`, `check_market_grid_submission`, `submit_market_grid`, `get_market_grid_results`, `get_market_grid_player_grid`, `update_market_grid` |
|
|
179
|
-
| **Coin Grid** (6) | `list_coin_grid_sessions`, `get_coin_grid_session`, `check_coin_grid_submission`, `submit_coin_grid`, `get_coin_grid_results`, `get_coin_grid_player_grid` |
|
|
180
|
-
| **Account** (6) | `get_account_balance`, `get_user_profile`, `get_user_stats`, `list_user_favorites`, `add_user_favorite_preset`, `remove_user_favorite_preset` |
|
|
181
|
-
| **Leaderboard** (3) | `get_leaderboard`, `get_market_grid_leaderboard`, `get_hall_of_fame` |
|
|
182
|
-
| **Market Data** (4) | `get_coin_overview`, `get_recent_candles`, `get_top_ranked_coins`, `list_game_presets` |
|
|
183
|
-
| **Intelligence Agent** (2) | `list_intelligence_agents`, `get_intelligence_agent` |
|
|
199
|
+
`update_strategy_signal_rule({ request })` is the thin, focused one-rule edit. In multi-account mode every one of these calls uses the `{ account, request }` sibling envelope.
|
|
184
200
|
|
|
185
|
-
|
|
201
|
+
**Strategy-bound agents.** Bind a strategy to an intelligence agent at creation time — `create_intelligence_agent({ …, strategyId })` (discover `strategyId` via `list_strategies`). Rebinding via `update_intelligence_agent` requires `confirm:true`. There is no direct `create_strategy` operation.
|
|
186
202
|
|
|
187
|
-
|
|
188
|
-
|--------|-------------|
|
|
189
|
-
| `play-market-grid` | End-to-end workflow for playing a Market Grid prediction game |
|
|
190
|
-
| `play-coin-grid` | End-to-end workflow for playing a Coin Grid prediction game |
|
|
191
|
-
| `analyze-market` | Deep market analysis for informed predictions |
|
|
192
|
-
| `check-performance` | Review your game results, stats, and leaderboard standing |
|
|
193
|
-
| `strategy-guide` | Learn BattleGrid game mechanics, rules, and strategies |
|
|
194
|
-
|
|
195
|
-
### Resources (3)
|
|
203
|
+
## Capabilities
|
|
196
204
|
|
|
197
|
-
|
|
198
|
-
|----------|-----|
|
|
199
|
-
| Game Rules | `battlegrid://rules/overview` |
|
|
200
|
-
| Grid Format Reference | `battlegrid://reference/grid-format` |
|
|
201
|
-
| Quick Start Guide | `battlegrid://guide/quick-start` |
|
|
205
|
+
Tools, prompts, and resources are **discovered live** from the connected server via `tools/list`, `prompts/list`, and `resources/list`. This package intentionally does not copy the server's catalog, formulas, signal IDs, or defaults — inspect the live connection for the authoritative, current surface. Broadly, the server exposes game play (Market Grid), market context, account state, leaderboards, intelligence agents and automation, strategy discovery/authoring, and trading signals/decisions.
|
|
202
206
|
|
|
203
|
-
## Environment
|
|
207
|
+
## Environment variables
|
|
204
208
|
|
|
205
209
|
| Variable | Required | Description |
|
|
206
210
|
|----------|----------|-------------|
|
|
@@ -208,6 +212,26 @@ npx skills add playbattlegrid/battlegrid-mcp
|
|
|
208
212
|
| `BATTLEGRID_API_KEY` | One of these | Single API key (fallback if `BATTLEGRID_API_KEYS` not set) |
|
|
209
213
|
| `BATTLEGRID_API_URL` | No | Override server URL (default: `https://mcp.battlegrid.trade/mcp`) |
|
|
210
214
|
|
|
215
|
+
## Rediscovery & versioning
|
|
216
|
+
|
|
217
|
+
- **Package/server major pairing.** This package's major version pairs with the BattleGrid server's strategy-authoring major. Run matching majors.
|
|
218
|
+
- **Rediscover after a server cutover.** Package publication does not refresh a running proxy's cached startup snapshot. Restart/reconnect the proxy and re-run `tools/list`, `prompts/list`, and `resources/list` after the server deploys.
|
|
219
|
+
- **Restart after key rotation.** API keys are read once at process startup; rotate a key, then restart the proxy.
|
|
220
|
+
|
|
221
|
+
| Version | Changes |
|
|
222
|
+
|---------|---------|
|
|
223
|
+
| 1.x | Single/multi-account stdio proxy, identity discovery, connection retry, capability discovery |
|
|
224
|
+
| 2.0.0 | Default `BATTLEGRID_API_URL` moved to the `/mcp` suffix |
|
|
225
|
+
| **3.0.0** | Strategy-authoring major: strict `{ account, request }` authoring envelopes with strip-only-account routing, compile → review → apply workflow, strategy-bound agent creation, and removal of the retired `create_strategy` operation |
|
|
226
|
+
|
|
227
|
+
## Skills
|
|
228
|
+
|
|
229
|
+
Install the BattleGrid skill for AI agent instructions:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
npx skills add playbattlegrid/battlegrid-mcp
|
|
233
|
+
```
|
|
234
|
+
|
|
211
235
|
## License
|
|
212
236
|
|
|
213
237
|
[MIT](LICENSE)
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,14 @@
|
|
|
11
11
|
* enum parameter is injected into every tool so the AI agent can choose
|
|
12
12
|
* which account to act as. Tool calls are routed with the matching Bearer token.
|
|
13
13
|
*
|
|
14
|
+
* Strategy authoring (v3): the strategy-authoring tools publish one strict
|
|
15
|
+
* server-owned outer object, `{ request: canonicalPayload }`. In multi-account
|
|
16
|
+
* mode the proxy adds `account` only as a sibling of `request`, producing
|
|
17
|
+
* exactly `{ account, request }`; on a call it strips only `account` and
|
|
18
|
+
* forwards the unchanged `{ request }`. It never descends into or reconstructs
|
|
19
|
+
* the nested request — the server owns every required field, bound, union
|
|
20
|
+
* discriminator, and `additionalProperties:false` constraint.
|
|
21
|
+
*
|
|
14
22
|
* Architecture: Matches Stripe's @stripe/mcp pattern — thin authenticated proxy.
|
|
15
23
|
*
|
|
16
24
|
* Usage:
|
|
@@ -22,7 +30,9 @@
|
|
|
22
30
|
* BATTLEGRID_API_KEY (optional) — Single API key (fallback if BATTLEGRID_API_KEYS not set)
|
|
23
31
|
* BATTLEGRID_API_URL (optional) — Override server URL (default: https://mcp.battlegrid.trade/mcp)
|
|
24
32
|
*/
|
|
25
|
-
|
|
33
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
34
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
35
|
+
export declare const VERSION = "3.0.0";
|
|
26
36
|
export declare const DEFAULT_URL = "https://mcp.battlegrid.trade/mcp";
|
|
27
37
|
export interface EnvConfig {
|
|
28
38
|
apiKeys: string[];
|
|
@@ -36,4 +46,46 @@ export interface AccountIdentity {
|
|
|
36
46
|
}
|
|
37
47
|
export declare function validateEnv(env: Record<string, string | undefined>): EnvConfig;
|
|
38
48
|
export declare function discoverIdentities(apiKeys: string[], apiUrl: string): Promise<AccountIdentity[]>;
|
|
49
|
+
export interface ToolDefinition {
|
|
50
|
+
name: string;
|
|
51
|
+
description?: string;
|
|
52
|
+
inputSchema: {
|
|
53
|
+
type: string;
|
|
54
|
+
properties?: Record<string, unknown>;
|
|
55
|
+
required?: string[];
|
|
56
|
+
[key: string]: unknown;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Add a required `account` enum to every discovered tool, as a sibling of the
|
|
61
|
+
* existing top-level properties. For the strict authoring tools whose schema is
|
|
62
|
+
* `{ request: canonicalPayload }`, this produces exactly `{ account, request }`
|
|
63
|
+
* with `required: ["account", "request"]`; the server-owned root
|
|
64
|
+
* `additionalProperties:false` and the entire nested `request` (unions,
|
|
65
|
+
* required fields, bounds) are preserved by reference, never rewritten.
|
|
66
|
+
*/
|
|
67
|
+
export declare function injectAccountParam(tools: ToolDefinition[], accountNames: string[]): ToolDefinition[];
|
|
68
|
+
export interface CreateProxyServerOptions {
|
|
69
|
+
/** Discovered account identities (index 0 is the primary key used for capability discovery). */
|
|
70
|
+
identities: AccountIdentity[];
|
|
71
|
+
/** Connect (or reuse) a remote MCP client for a given API key. Called once per key, lazily. */
|
|
72
|
+
connect: (apiKey: string) => Promise<Client>;
|
|
73
|
+
/** Advertised server version; defaults to VERSION. */
|
|
74
|
+
version?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface ProxyServer {
|
|
77
|
+
server: Server;
|
|
78
|
+
toolCount: number;
|
|
79
|
+
promptCount: number;
|
|
80
|
+
resourceCount: number;
|
|
81
|
+
isMultiAccount: boolean;
|
|
82
|
+
accountNames: string[];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Build the local stdio-facing MCP server that proxies to the remote BattleGrid
|
|
86
|
+
* server. Discovers remote capabilities through the primary client, augments
|
|
87
|
+
* tools with the `account` enum when multiple accounts resolved, and wires
|
|
88
|
+
* strip-only-account routing to a lazily-populated per-key client pool.
|
|
89
|
+
*/
|
|
90
|
+
export declare function createProxyServer(options: CreateProxyServerOptions): Promise<ProxyServer>;
|
|
39
91
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWnE,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,WAAW,qCAAqC,CAAC;AAM9D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAID,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CA+B9E;AAID,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC,CA6C5B;AA6DD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAgBpG;AAID,MAAM,WAAW,wBAAwB;IACvC,gGAAgG;IAChG,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,+FAA+F;IAC/F,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,CA+H/F"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,14 @@
|
|
|
11
11
|
* enum parameter is injected into every tool so the AI agent can choose
|
|
12
12
|
* which account to act as. Tool calls are routed with the matching Bearer token.
|
|
13
13
|
*
|
|
14
|
+
* Strategy authoring (v3): the strategy-authoring tools publish one strict
|
|
15
|
+
* server-owned outer object, `{ request: canonicalPayload }`. In multi-account
|
|
16
|
+
* mode the proxy adds `account` only as a sibling of `request`, producing
|
|
17
|
+
* exactly `{ account, request }`; on a call it strips only `account` and
|
|
18
|
+
* forwards the unchanged `{ request }`. It never descends into or reconstructs
|
|
19
|
+
* the nested request — the server owns every required field, bound, union
|
|
20
|
+
* discriminator, and `additionalProperties:false` constraint.
|
|
21
|
+
*
|
|
14
22
|
* Architecture: Matches Stripe's @stripe/mcp pattern — thin authenticated proxy.
|
|
15
23
|
*
|
|
16
24
|
* Usage:
|
|
@@ -28,7 +36,7 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
28
36
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
29
37
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
30
38
|
import { ListToolsRequestSchema, CallToolRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
31
|
-
export const VERSION = '
|
|
39
|
+
export const VERSION = '3.0.0';
|
|
32
40
|
export const DEFAULT_URL = 'https://mcp.battlegrid.trade/mcp';
|
|
33
41
|
const MAX_RETRIES = 3;
|
|
34
42
|
const RETRY_DELAYS_MS = [2000, 4000, 8000];
|
|
@@ -141,7 +149,15 @@ async function connectWithRetry(client, transport, apiUrl) {
|
|
|
141
149
|
}
|
|
142
150
|
}
|
|
143
151
|
}
|
|
144
|
-
|
|
152
|
+
/**
|
|
153
|
+
* Add a required `account` enum to every discovered tool, as a sibling of the
|
|
154
|
+
* existing top-level properties. For the strict authoring tools whose schema is
|
|
155
|
+
* `{ request: canonicalPayload }`, this produces exactly `{ account, request }`
|
|
156
|
+
* with `required: ["account", "request"]`; the server-owned root
|
|
157
|
+
* `additionalProperties:false` and the entire nested `request` (unions,
|
|
158
|
+
* required fields, bounds) are preserved by reference, never rewritten.
|
|
159
|
+
*/
|
|
160
|
+
export function injectAccountParam(tools, accountNames) {
|
|
145
161
|
return tools.map(tool => ({
|
|
146
162
|
...tool,
|
|
147
163
|
inputSchema: {
|
|
@@ -158,31 +174,15 @@ function injectAccountParam(tools, accountNames) {
|
|
|
158
174
|
},
|
|
159
175
|
}));
|
|
160
176
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
// Log key diagnostics for cross-referencing with server logs
|
|
172
|
-
for (let i = 0; i < config.apiKeys.length; i++) {
|
|
173
|
-
const key = config.apiKeys[i];
|
|
174
|
-
const hashPrefix = createHash('sha256').update(key).digest('hex').substring(0, 16);
|
|
175
|
-
process.stderr.write(`BattleGrid MCP: Key #${i + 1} prefix=${key.substring(0, 12)} hashPrefix=${hashPrefix} len=${key.length}\n`);
|
|
176
|
-
}
|
|
177
|
-
// Discover identities for all keys
|
|
178
|
-
let identities;
|
|
179
|
-
try {
|
|
180
|
-
identities = await discoverIdentities(config.apiKeys, config.apiUrl);
|
|
181
|
-
}
|
|
182
|
-
catch (error) {
|
|
183
|
-
process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
184
|
-
process.exit(1);
|
|
185
|
-
}
|
|
177
|
+
/**
|
|
178
|
+
* Build the local stdio-facing MCP server that proxies to the remote BattleGrid
|
|
179
|
+
* server. Discovers remote capabilities through the primary client, augments
|
|
180
|
+
* tools with the `account` enum when multiple accounts resolved, and wires
|
|
181
|
+
* strip-only-account routing to a lazily-populated per-key client pool.
|
|
182
|
+
*/
|
|
183
|
+
export async function createProxyServer(options) {
|
|
184
|
+
const { identities, connect } = options;
|
|
185
|
+
const version = options.version ?? VERSION;
|
|
186
186
|
const isMultiAccount = identities.length > 1;
|
|
187
187
|
const accountNames = identities.map(id => id.username);
|
|
188
188
|
// Build lookup: username → apiKey
|
|
@@ -190,43 +190,27 @@ async function main() {
|
|
|
190
190
|
for (const id of identities) {
|
|
191
191
|
keyByAccount.set(id.username, id.apiKey);
|
|
192
192
|
}
|
|
193
|
-
|
|
194
|
-
// Connect to remote using the first key (for capability discovery)
|
|
193
|
+
// Primary client (first key) is used for capability discovery and non-tool proxying.
|
|
195
194
|
const primaryKey = identities[0].apiKey;
|
|
196
|
-
const
|
|
197
|
-
const primaryClient = new Client({ name: 'battlegrid-proxy', version: VERSION }, { capabilities: {} });
|
|
198
|
-
try {
|
|
199
|
-
await connectWithRetry(primaryClient, primaryTransport, config.apiUrl);
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
203
|
-
process.exit(1);
|
|
204
|
-
}
|
|
195
|
+
const primaryClient = await connect(primaryKey);
|
|
205
196
|
// Discover remote capabilities
|
|
206
197
|
const [toolsResult, promptsResult, resourcesResult] = await Promise.all([
|
|
207
198
|
primaryClient.listTools(),
|
|
208
199
|
primaryClient.listPrompts(),
|
|
209
200
|
primaryClient.listResources(),
|
|
210
201
|
]);
|
|
211
|
-
process.stderr.write(`BattleGrid MCP: ${toolsResult.tools.length} tools, ` +
|
|
212
|
-
`${promptsResult.prompts.length} prompts, ` +
|
|
213
|
-
`${resourcesResult.resources.length} resources\n`);
|
|
214
202
|
// Augment tools with account parameter if multi-account
|
|
215
203
|
const exposedTools = isMultiAccount
|
|
216
204
|
? injectAccountParam(toolsResult.tools, accountNames)
|
|
217
205
|
: toolsResult.tools;
|
|
218
206
|
// Create local stdio server
|
|
219
|
-
const localServer = new Server({ name: 'battlegrid', version
|
|
207
|
+
const localServer = new Server({ name: 'battlegrid', version }, {
|
|
220
208
|
capabilities: {
|
|
221
209
|
tools: {},
|
|
222
210
|
prompts: {},
|
|
223
211
|
resources: {},
|
|
224
212
|
},
|
|
225
213
|
});
|
|
226
|
-
// --- Proxy: tools ---
|
|
227
|
-
localServer.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
228
|
-
tools: exposedTools,
|
|
229
|
-
}));
|
|
230
214
|
// Keep a pool of remote clients keyed by API key for routing
|
|
231
215
|
const clientPool = new Map();
|
|
232
216
|
clientPool.set(primaryKey, primaryClient);
|
|
@@ -234,12 +218,14 @@ async function main() {
|
|
|
234
218
|
const existing = clientPool.get(apiKey);
|
|
235
219
|
if (existing)
|
|
236
220
|
return existing;
|
|
237
|
-
const
|
|
238
|
-
const client = new Client({ name: 'battlegrid-proxy', version: VERSION }, { capabilities: {} });
|
|
239
|
-
await connectWithRetry(client, transport, config.apiUrl);
|
|
221
|
+
const client = await connect(apiKey);
|
|
240
222
|
clientPool.set(apiKey, client);
|
|
241
223
|
return client;
|
|
242
224
|
}
|
|
225
|
+
// --- Proxy: tools ---
|
|
226
|
+
localServer.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
227
|
+
tools: exposedTools,
|
|
228
|
+
}));
|
|
243
229
|
localServer.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
244
230
|
try {
|
|
245
231
|
let targetKey = primaryKey;
|
|
@@ -256,7 +242,7 @@ async function main() {
|
|
|
256
242
|
};
|
|
257
243
|
}
|
|
258
244
|
targetKey = keyByAccount.get(selectedAccount);
|
|
259
|
-
delete args.account; // Strip before forwarding
|
|
245
|
+
delete args.account; // Strip ONLY account before forwarding; request is forwarded unchanged
|
|
260
246
|
}
|
|
261
247
|
const client = await getClientForKey(targetKey);
|
|
262
248
|
return await client.callTool({
|
|
@@ -291,9 +277,60 @@ async function main() {
|
|
|
291
277
|
uri: request.params.uri,
|
|
292
278
|
});
|
|
293
279
|
});
|
|
280
|
+
return {
|
|
281
|
+
server: localServer,
|
|
282
|
+
toolCount: toolsResult.tools.length,
|
|
283
|
+
promptCount: promptsResult.prompts.length,
|
|
284
|
+
resourceCount: resourcesResult.resources.length,
|
|
285
|
+
isMultiAccount,
|
|
286
|
+
accountNames,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
// --- Main ---
|
|
290
|
+
async function main() {
|
|
291
|
+
let config;
|
|
292
|
+
try {
|
|
293
|
+
config = validateEnv(process.env);
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
297
|
+
process.exit(1);
|
|
298
|
+
}
|
|
299
|
+
// Log key diagnostics for cross-referencing with server logs
|
|
300
|
+
for (let i = 0; i < config.apiKeys.length; i++) {
|
|
301
|
+
const key = config.apiKeys[i];
|
|
302
|
+
const hashPrefix = createHash('sha256').update(key).digest('hex').substring(0, 16);
|
|
303
|
+
process.stderr.write(`BattleGrid MCP: Key #${i + 1} prefix=${key.substring(0, 12)} hashPrefix=${hashPrefix} len=${key.length}\n`);
|
|
304
|
+
}
|
|
305
|
+
// Discover identities for all keys
|
|
306
|
+
let identities;
|
|
307
|
+
try {
|
|
308
|
+
identities = await discoverIdentities(config.apiKeys, config.apiUrl);
|
|
309
|
+
}
|
|
310
|
+
catch (error) {
|
|
311
|
+
process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
312
|
+
process.exit(1);
|
|
313
|
+
}
|
|
314
|
+
process.stderr.write(`BattleGrid MCP: ${identities.length} account(s) discovered — ${identities.map(id => id.username).join(', ')}\n`);
|
|
315
|
+
// Lazily connect a remote MCP client per API key, with retry + auth diagnostics.
|
|
316
|
+
const connect = async (apiKey) => {
|
|
317
|
+
const transport = new StreamableHTTPClientTransport(new URL(config.apiUrl), { requestInit: { headers: { Authorization: `Bearer ${apiKey}` } } });
|
|
318
|
+
const client = new Client({ name: 'battlegrid-proxy', version: VERSION }, { capabilities: {} });
|
|
319
|
+
await connectWithRetry(client, transport, config.apiUrl);
|
|
320
|
+
return client;
|
|
321
|
+
};
|
|
322
|
+
let proxy;
|
|
323
|
+
try {
|
|
324
|
+
proxy = await createProxyServer({ identities, connect });
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
process.stderr.write(`BattleGrid MCP: ${proxy.toolCount} tools, ${proxy.promptCount} prompts, ${proxy.resourceCount} resources\n`);
|
|
294
331
|
// --- Start stdio transport ---
|
|
295
332
|
const stdioTransport = new StdioServerTransport();
|
|
296
|
-
await
|
|
333
|
+
await proxy.server.connect(stdioTransport);
|
|
297
334
|
process.stderr.write('BattleGrid MCP server running on stdio\n');
|
|
298
335
|
}
|
|
299
336
|
// Only run when executed directly (not when imported for testing)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|