@battlegrid/mcp-server 1.0.1 → 1.1.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 CHANGED
@@ -1,27 +1,38 @@
1
1
  # @battlegrid/mcp-server
2
2
 
3
- Play crypto prediction games on [BattleGrid](https://battlegrid.trade) directly from AI agents. This MCP server connects your agent to BattleGrid's platform — analyze markets, make predictions, and compete on leaderboards.
3
+ [![npm version](https://img.shields.io/npm/v/@battlegrid/mcp-server)](https://www.npmjs.com/package/@battlegrid/mcp-server)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ MCP server for [BattleGrid](https://battlegrid.trade) — play crypto prediction games from AI agents.
4
7
 
5
8
  ## Quick Start
6
9
 
7
- 1. **Get an API key** at [battlegrid.trade](https://battlegrid.trade) → Profile → MCP tab
8
- 2. **Add to your MCP client** (see below)
9
- 3. **Ask your agent**: *"Play a Market Grid game for me"*
10
+ ### npm (stdio transport)
10
11
 
11
- ## Setup
12
+ ```bash
13
+ BATTLEGRID_API_KEY=bg_live_xxx npx @battlegrid/mcp-server
14
+ ```
12
15
 
13
- ### Claude Desktop
16
+ ### Remote server (streamable-http transport)
14
17
 
15
- Add to your Claude Desktop MCP settings:
18
+ ```
19
+ https://mcp.battlegrid.trade
20
+ ```
21
+
22
+ No npm install required — connect directly from any MCP client that supports streamable-http.
23
+
24
+ ## Configuration
25
+
26
+ ### Claude Desktop
16
27
 
17
28
  ```json
18
29
  {
19
30
  "mcpServers": {
20
31
  "battlegrid": {
21
32
  "command": "npx",
22
- "args": ["-y", "@battlegrid/mcp-server"],
33
+ "args": ["@battlegrid/mcp-server"],
23
34
  "env": {
24
- "BATTLEGRID_API_KEY": "bg_live_your_key_here"
35
+ "BATTLEGRID_API_KEY": "bg_live_xxx"
25
36
  }
26
37
  }
27
38
  }
@@ -31,120 +42,85 @@ Add to your Claude Desktop MCP settings:
31
42
  ### Claude Code
32
43
 
33
44
  ```bash
34
- claude mcp add battlegrid \
35
- --transport stdio \
36
- -- npx -y @battlegrid/mcp-server \
37
- --env BATTLEGRID_API_KEY=bg_live_your_key_here
45
+ claude mcp add battlegrid -- npx @battlegrid/mcp-server
38
46
  ```
39
47
 
40
- ### Cursor
48
+ Set your API key:
49
+
50
+ ```bash
51
+ export BATTLEGRID_API_KEY=bg_live_xxx
52
+ ```
41
53
 
42
- In **Settings > MCP**, click **Add new MCP server**:
54
+ ### Cursor
43
55
 
44
56
  ```json
45
57
  {
46
58
  "mcpServers": {
47
59
  "battlegrid": {
48
60
  "command": "npx",
49
- "args": ["-y", "@battlegrid/mcp-server"],
61
+ "args": ["@battlegrid/mcp-server"],
50
62
  "env": {
51
- "BATTLEGRID_API_KEY": "bg_live_your_key_here"
63
+ "BATTLEGRID_API_KEY": "bg_live_xxx"
52
64
  }
53
65
  }
54
66
  }
55
67
  }
56
68
  ```
57
69
 
58
- ### Windsurf / Other MCP Clients
59
-
60
- Any client supporting stdio transport:
61
-
62
- | Setting | Value |
63
- |---------|-------|
64
- | **Command** | `npx` |
65
- | **Args** | `-y @battlegrid/mcp-server` |
66
- | **Env** | `BATTLEGRID_API_KEY=bg_live_your_key_here` |
70
+ ## Skills
67
71
 
68
- ## Alternative: Direct Remote Connection
72
+ Install the BattleGrid skill for AI agent instructions:
69
73
 
70
- If you prefer connecting directly without npm (no Node.js required):
71
-
72
- | Setting | Value |
73
- |---------|-------|
74
- | **URL** | `https://mcp.battlegrid.trade` |
75
- | **Transport** | `streamable-http` |
76
- | **Auth Header** | `Authorization: Bearer bg_live_your_key_here` |
77
-
78
- ## Environment Variables
79
-
80
- | Variable | Required | Description |
81
- |----------|----------|-------------|
82
- | `BATTLEGRID_API_KEY` | Yes | Your API key (starts with `bg_live_`) |
83
- | `BATTLEGRID_API_URL` | No | Override server URL (default: `https://mcp.battlegrid.trade`) |
74
+ ```bash
75
+ npx skills add playbattlegrid/battlegrid-mcp
76
+ ```
84
77
 
85
- ## What You Get
78
+ ## Capabilities
86
79
 
87
- ### 23 Tools
80
+ ### Tools (28)
88
81
 
89
82
  | Category | Tools |
90
83
  |----------|-------|
91
- | **Market Grid** (7) | `list_market_grid_sessions`, `get_market_grid_session`, `check_market_grid_submission`, `submit_market_grid`, `update_market_grid`, `get_market_grid_results`, `get_market_grid_player_grid` |
84
+ | **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` |
92
85
  | **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` |
93
- | **Account** (3) | `get_account_balance`, `get_user_profile`, `get_user_stats` |
86
+ | **Account** (6) | `get_account_balance`, `get_user_profile`, `get_user_stats`, `list_user_favorites`, `add_user_favorite_preset`, `remove_user_favorite_preset` |
94
87
  | **Leaderboard** (3) | `get_leaderboard`, `get_market_grid_leaderboard`, `get_hall_of_fame` |
95
88
  | **Market Data** (4) | `get_coin_overview`, `get_recent_candles`, `get_top_ranked_coins`, `list_game_presets` |
89
+ | **Intelligence Agent** (2) | `list_intelligence_agents`, `get_intelligence_agent` |
96
90
 
97
- ### 5 Prompts
91
+ ### Prompts (5)
98
92
 
99
93
  | Prompt | Description |
100
94
  |--------|-------------|
101
- | `play-market-grid` | Full game workflow: find session, research coins, submit predictions |
102
- | `play-coin-grid` | Coin Grid game workflow |
103
- | `analyze-market` | Deep market analysis for a coin or broad overview |
104
- | `check-performance` | Review stats, rankings, recent results |
105
- | `strategy-guide` | Learn game rules and strategies |
95
+ | `play-market-grid` | End-to-end workflow for playing a Market Grid prediction game |
96
+ | `play-coin-grid` | End-to-end workflow for playing a Coin Grid prediction game |
97
+ | `analyze-market` | Deep market analysis for informed predictions |
98
+ | `check-performance` | Review your game results, stats, and leaderboard standing |
99
+ | `strategy-guide` | Learn BattleGrid game mechanics, rules, and strategies |
106
100
 
107
- ### 3 Resources
101
+ ### Resources (3)
108
102
 
109
103
  | Resource | URI |
110
104
  |----------|-----|
111
105
  | Game Rules | `battlegrid://rules/overview` |
112
- | Grid Format | `battlegrid://reference/grid-format` |
113
- | Quick Start | `battlegrid://guide/quick-start` |
106
+ | Grid Format Reference | `battlegrid://reference/grid-format` |
107
+ | Quick Start Guide | `battlegrid://guide/quick-start` |
114
108
 
115
- ## How It Works
109
+ ## Authentication
116
110
 
117
- ```
118
- Your MCP Client (Claude, Cursor, etc.)
119
- |
120
- | stdio (local process)
121
- v
122
- @battlegrid/mcp-server (this package)
123
- |
124
- | streamable-http (authenticated)
125
- v
126
- https://mcp.battlegrid.trade
127
- (23 tools + 5 prompts + 3 resources)
128
- ```
129
-
130
- This package is a thin proxy — it connects to BattleGrid's remote server and re-exposes all capabilities over stdio. Tools, prompts, and resources auto-sync with the server. No package updates needed when new features launch.
131
-
132
- ## How to Deposit
111
+ 1. Go to [battlegrid.trade](https://battlegrid.trade) → **Profile** → **MCP** tab
112
+ 2. Generate an API key (format: `bg_live_*`)
113
+ 3. Set `BATTLEGRID_API_KEY` in your environment
133
114
 
134
- 1. Go to [battlegrid.trade](https://battlegrid.trade) and deposit funds into your account
135
- 2. Enable vault account at **Profile > MCP** tab to allow your agent to enter competitions remotely
136
- 3. Daily limits: 50 operations, $500 USD per day
115
+ For paid games, enable **Server-Signed Wagers** in the MCP tab to allow the agent to submit entries on your behalf.
137
116
 
138
- ## Troubleshooting
117
+ ## Environment Variables
139
118
 
140
- | Problem | Solution |
141
- |---------|----------|
142
- | `BATTLEGRID_API_KEY is required` | Set the environment variable in your MCP config |
143
- | `API key must start with "bg_live_"` | Create a new key at Profile > MCP tab |
144
- | `Cannot connect to BattleGrid server` | Check internet connection; verify `https://mcp.battlegrid.trade/health` |
145
- | `Invalid or revoked API key` | Create a new key at Profile > MCP tab |
146
- | Agent doesn't know game rules | Game instructions are auto-delivered on connect |
119
+ | Variable | Required | Description |
120
+ |----------|----------|-------------|
121
+ | `BATTLEGRID_API_KEY` | Yes | Your BattleGrid API key (`bg_live_*`) |
122
+ | `BATTLEGRID_API_URL` | No | Override server URL (default: `https://mcp.battlegrid.trade`) |
147
123
 
148
124
  ## License
149
125
 
150
- MIT
126
+ [MIT](LICENSE)
package/dist/index.d.ts CHANGED
@@ -2,24 +2,38 @@
2
2
  /**
3
3
  * @battlegrid/mcp-server — stdio proxy to BattleGrid's remote MCP server
4
4
  *
5
- * Reads BATTLEGRID_API_KEY from environment, connects to the remote BattleGrid
6
- * MCP server via Streamable HTTP, and re-exposes all tools, prompts, and
7
- * resources over stdio transport for local MCP clients.
5
+ * Reads BATTLEGRID_API_KEYS (comma-separated) or BATTLEGRID_API_KEY from
6
+ * environment, discovers account identities via GET /mcp/identity, connects
7
+ * to the remote BattleGrid MCP server via Streamable HTTP, and re-exposes
8
+ * all tools, prompts, and resources over stdio transport for local MCP clients.
9
+ *
10
+ * Multi-account support: when multiple keys are configured, an `account`
11
+ * enum parameter is injected into every tool so the AI agent can choose
12
+ * which account to act as. Tool calls are routed with the matching Bearer token.
8
13
  *
9
14
  * Architecture: Matches Stripe's @stripe/mcp pattern — thin authenticated proxy.
10
15
  *
11
16
  * Usage:
12
17
  * BATTLEGRID_API_KEY=bg_live_... npx @battlegrid/mcp-server
18
+ * BATTLEGRID_API_KEYS=bg_live_aaa,bg_live_bbb npx @battlegrid/mcp-server
13
19
  *
14
20
  * Environment Variables:
15
- * BATTLEGRID_API_KEY (required) — Your BattleGrid API key (starts with bg_live_)
21
+ * BATTLEGRID_API_KEYS (optional) — Comma-separated list of API keys
22
+ * BATTLEGRID_API_KEY (optional) — Single API key (fallback if BATTLEGRID_API_KEYS not set)
16
23
  * BATTLEGRID_API_URL (optional) — Override server URL (default: https://mcp.battlegrid.trade)
17
24
  */
18
- export declare const VERSION = "1.0.1";
25
+ export declare const VERSION = "1.1.0";
19
26
  export declare const DEFAULT_URL = "https://mcp.battlegrid.trade";
20
27
  export interface EnvConfig {
21
- apiKey: string;
28
+ apiKeys: string[];
22
29
  apiUrl: string;
23
30
  }
31
+ export interface AccountIdentity {
32
+ apiKey: string;
33
+ userId: string;
34
+ username: string;
35
+ keyLabel: string | null;
36
+ }
24
37
  export declare function validateEnv(env: Record<string, string | undefined>): EnvConfig;
38
+ export declare function discoverIdentities(apiKeys: string[], apiUrl: string): Promise<AccountIdentity[]>;
25
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG;AAeH,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAM1D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAmB9E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAeH,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAM1D,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,CA2C5B"}
package/dist/index.js CHANGED
@@ -2,17 +2,24 @@
2
2
  /**
3
3
  * @battlegrid/mcp-server — stdio proxy to BattleGrid's remote MCP server
4
4
  *
5
- * Reads BATTLEGRID_API_KEY from environment, connects to the remote BattleGrid
6
- * MCP server via Streamable HTTP, and re-exposes all tools, prompts, and
7
- * resources over stdio transport for local MCP clients.
5
+ * Reads BATTLEGRID_API_KEYS (comma-separated) or BATTLEGRID_API_KEY from
6
+ * environment, discovers account identities via GET /mcp/identity, connects
7
+ * to the remote BattleGrid MCP server via Streamable HTTP, and re-exposes
8
+ * all tools, prompts, and resources over stdio transport for local MCP clients.
9
+ *
10
+ * Multi-account support: when multiple keys are configured, an `account`
11
+ * enum parameter is injected into every tool so the AI agent can choose
12
+ * which account to act as. Tool calls are routed with the matching Bearer token.
8
13
  *
9
14
  * Architecture: Matches Stripe's @stripe/mcp pattern — thin authenticated proxy.
10
15
  *
11
16
  * Usage:
12
17
  * BATTLEGRID_API_KEY=bg_live_... npx @battlegrid/mcp-server
18
+ * BATTLEGRID_API_KEYS=bg_live_aaa,bg_live_bbb npx @battlegrid/mcp-server
13
19
  *
14
20
  * Environment Variables:
15
- * BATTLEGRID_API_KEY (required) — Your BattleGrid API key (starts with bg_live_)
21
+ * BATTLEGRID_API_KEYS (optional) — Comma-separated list of API keys
22
+ * BATTLEGRID_API_KEY (optional) — Single API key (fallback if BATTLEGRID_API_KEYS not set)
16
23
  * BATTLEGRID_API_URL (optional) — Override server URL (default: https://mcp.battlegrid.trade)
17
24
  */
18
25
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
@@ -20,22 +27,70 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
20
27
  import { Client } from '@modelcontextprotocol/sdk/client/index.js';
21
28
  import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
22
29
  import { ListToolsRequestSchema, CallToolRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
23
- export const VERSION = '1.0.1';
30
+ export const VERSION = '1.1.0';
24
31
  export const DEFAULT_URL = 'https://mcp.battlegrid.trade';
25
32
  const MAX_RETRIES = 3;
26
33
  const RETRY_DELAYS_MS = [2000, 4000, 8000];
34
+ // --- Environment validation (exported for testing) ---
27
35
  export function validateEnv(env) {
28
- const apiKey = env.BATTLEGRID_API_KEY;
29
36
  const apiUrl = env.BATTLEGRID_API_URL || DEFAULT_URL;
30
- if (!apiKey) {
31
- throw new Error('BATTLEGRID_API_KEY environment variable is required.\n' +
37
+ // BATTLEGRID_API_KEYS (comma-separated) takes precedence
38
+ const keysRaw = env.BATTLEGRID_API_KEYS;
39
+ let apiKeys;
40
+ if (keysRaw) {
41
+ apiKeys = keysRaw.split(',').map(k => k.trim()).filter(Boolean);
42
+ }
43
+ else {
44
+ const singleKey = env.BATTLEGRID_API_KEY;
45
+ apiKeys = singleKey ? [singleKey] : [];
46
+ }
47
+ if (apiKeys.length === 0) {
48
+ throw new Error('BATTLEGRID_API_KEY or BATTLEGRID_API_KEYS environment variable is required.\n' +
32
49
  'Get your API key at: https://battlegrid.trade → Profile → MCP tab');
33
50
  }
34
- if (!apiKey.startsWith('bg_live_')) {
35
- throw new Error('API key must start with "bg_live_"\n' +
36
- 'Create a new key at: https://battlegrid.trade Profile MCP tab');
51
+ for (const key of apiKeys) {
52
+ if (!key.startsWith('bg_live_')) {
53
+ throw new Error(`API key must start with "bg_live_" (got "${key.slice(0, 12)}...")\n` +
54
+ 'Create a new key at: https://battlegrid.trade → Profile → MCP tab');
55
+ }
56
+ }
57
+ return { apiKeys, apiUrl };
58
+ }
59
+ // --- Identity discovery (exported for testing) ---
60
+ export async function discoverIdentities(apiKeys, apiUrl) {
61
+ // Derive identity base URL from MCP URL (strip /mcp suffix if present)
62
+ const baseUrl = apiUrl.replace(/\/mcp\/?$/, '');
63
+ const results = await Promise.allSettled(apiKeys.map(async (apiKey) => {
64
+ const response = await fetch(`${baseUrl}/mcp/identity`, {
65
+ headers: { Authorization: `Bearer ${apiKey}` },
66
+ });
67
+ if (!response.ok) {
68
+ const text = await response.text().catch(() => '');
69
+ throw new Error(`HTTP ${response.status}: ${text}`);
70
+ }
71
+ const data = await response.json();
72
+ return {
73
+ apiKey,
74
+ userId: data.userId,
75
+ username: data.username ?? data.userId.slice(0, 8),
76
+ keyLabel: data.keyLabel,
77
+ };
78
+ }));
79
+ const identities = [];
80
+ for (let i = 0; i < results.length; i++) {
81
+ const result = results[i];
82
+ if (result.status === 'fulfilled') {
83
+ identities.push(result.value);
84
+ }
85
+ else {
86
+ process.stderr.write(`Warning: identity discovery failed for key #${i + 1}: ${result.reason}\n`);
87
+ }
88
+ }
89
+ if (identities.length === 0) {
90
+ throw new Error('No valid API keys — all identity lookups failed.\n' +
91
+ 'Check your keys at: https://battlegrid.trade → Profile → MCP tab');
37
92
  }
38
- return { apiKey, apiUrl };
93
+ return identities;
39
94
  }
40
95
  // --- Connection with retry ---
41
96
  function isAuthError(error) {
@@ -52,7 +107,6 @@ async function connectWithRetry(client, transport, apiUrl) {
52
107
  return;
53
108
  }
54
109
  catch (error) {
55
- // Auth errors should not be retried — the key is wrong
56
110
  if (isAuthError(error)) {
57
111
  throw new Error('Invalid or revoked API key.\n' +
58
112
  'Create a new key at: https://battlegrid.trade → Profile → MCP tab');
@@ -65,12 +119,26 @@ async function connectWithRetry(client, transport, apiUrl) {
65
119
  const delay = RETRY_DELAYS_MS[attempt] ?? 8000;
66
120
  process.stderr.write(`Connection attempt ${attempt + 1} failed, retrying in ${delay / 1000}s...\n`);
67
121
  await sleep(delay);
68
- // Recreate transport for retry (previous one may be in a broken state)
69
- // Note: we can't reconnect the same transport, so we create a fresh Client+Transport
70
- // on each retry in the main function instead
71
122
  }
72
123
  }
73
124
  }
125
+ function injectAccountParam(tools, accountNames) {
126
+ return tools.map(tool => ({
127
+ ...tool,
128
+ inputSchema: {
129
+ ...tool.inputSchema,
130
+ properties: {
131
+ account: {
132
+ type: 'string',
133
+ enum: accountNames,
134
+ description: `Which BattleGrid account to use for this action. Available: ${accountNames.join(', ')}`,
135
+ },
136
+ ...tool.inputSchema.properties,
137
+ },
138
+ required: ['account', ...(tool.inputSchema.required ?? [])],
139
+ },
140
+ }));
141
+ }
74
142
  // --- Main ---
75
143
  async function main() {
76
144
  let config;
@@ -81,11 +149,29 @@ async function main() {
81
149
  process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
82
150
  process.exit(1);
83
151
  }
84
- // Connect to remote BattleGrid MCP server with retry
85
- const remoteTransport = new StreamableHTTPClientTransport(new URL(config.apiUrl), { requestInit: { headers: { Authorization: `Bearer ${config.apiKey}` } } });
86
- const remoteClient = new Client({ name: 'battlegrid-proxy', version: VERSION }, { capabilities: {} });
152
+ // Discover identities for all keys
153
+ let identities;
154
+ try {
155
+ identities = await discoverIdentities(config.apiKeys, config.apiUrl);
156
+ }
157
+ catch (error) {
158
+ process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
159
+ process.exit(1);
160
+ }
161
+ const isMultiAccount = identities.length > 1;
162
+ const accountNames = identities.map(id => id.username);
163
+ // Build lookup: username → apiKey
164
+ const keyByAccount = new Map();
165
+ for (const id of identities) {
166
+ keyByAccount.set(id.username, id.apiKey);
167
+ }
168
+ process.stderr.write(`BattleGrid MCP: ${identities.length} account(s) discovered — ${accountNames.join(', ')}\n`);
169
+ // Connect to remote using the first key (for capability discovery)
170
+ const primaryKey = identities[0].apiKey;
171
+ const primaryTransport = new StreamableHTTPClientTransport(new URL(config.apiUrl), { requestInit: { headers: { Authorization: `Bearer ${primaryKey}` } } });
172
+ const primaryClient = new Client({ name: 'battlegrid-proxy', version: VERSION }, { capabilities: {} });
87
173
  try {
88
- await connectWithRetry(remoteClient, remoteTransport, config.apiUrl);
174
+ await connectWithRetry(primaryClient, primaryTransport, config.apiUrl);
89
175
  }
90
176
  catch (error) {
91
177
  process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
@@ -93,13 +179,17 @@ async function main() {
93
179
  }
94
180
  // Discover remote capabilities
95
181
  const [toolsResult, promptsResult, resourcesResult] = await Promise.all([
96
- remoteClient.listTools(),
97
- remoteClient.listPrompts(),
98
- remoteClient.listResources(),
182
+ primaryClient.listTools(),
183
+ primaryClient.listPrompts(),
184
+ primaryClient.listResources(),
99
185
  ]);
100
186
  process.stderr.write(`BattleGrid MCP: ${toolsResult.tools.length} tools, ` +
101
187
  `${promptsResult.prompts.length} prompts, ` +
102
188
  `${resourcesResult.resources.length} resources\n`);
189
+ // Augment tools with account parameter if multi-account
190
+ const exposedTools = isMultiAccount
191
+ ? injectAccountParam(toolsResult.tools, accountNames)
192
+ : toolsResult.tools;
103
193
  // Create local stdio server
104
194
  const localServer = new Server({ name: 'battlegrid', version: VERSION }, {
105
195
  capabilities: {
@@ -110,13 +200,43 @@ async function main() {
110
200
  });
111
201
  // --- Proxy: tools ---
112
202
  localServer.setRequestHandler(ListToolsRequestSchema, async () => ({
113
- tools: toolsResult.tools,
203
+ tools: exposedTools,
114
204
  }));
205
+ // Keep a pool of remote clients keyed by API key for routing
206
+ const clientPool = new Map();
207
+ clientPool.set(primaryKey, primaryClient);
208
+ async function getClientForKey(apiKey) {
209
+ const existing = clientPool.get(apiKey);
210
+ if (existing)
211
+ return existing;
212
+ const transport = new StreamableHTTPClientTransport(new URL(config.apiUrl), { requestInit: { headers: { Authorization: `Bearer ${apiKey}` } } });
213
+ const client = new Client({ name: 'battlegrid-proxy', version: VERSION }, { capabilities: {} });
214
+ await connectWithRetry(client, transport, config.apiUrl);
215
+ clientPool.set(apiKey, client);
216
+ return client;
217
+ }
115
218
  localServer.setRequestHandler(CallToolRequestSchema, async (request) => {
116
219
  try {
117
- return await remoteClient.callTool({
220
+ let targetKey = primaryKey;
221
+ const args = { ...request.params.arguments };
222
+ if (isMultiAccount) {
223
+ const selectedAccount = args.account;
224
+ if (!selectedAccount || !keyByAccount.has(selectedAccount)) {
225
+ return {
226
+ content: [{
227
+ type: 'text',
228
+ text: `Error: "account" parameter is required. Choose one of: ${accountNames.join(', ')}`,
229
+ }],
230
+ isError: true,
231
+ };
232
+ }
233
+ targetKey = keyByAccount.get(selectedAccount);
234
+ delete args.account; // Strip before forwarding to remote
235
+ }
236
+ const client = await getClientForKey(targetKey);
237
+ return await client.callTool({
118
238
  name: request.params.name,
119
- arguments: request.params.arguments,
239
+ arguments: args,
120
240
  });
121
241
  }
122
242
  catch (error) {
@@ -132,7 +252,7 @@ async function main() {
132
252
  prompts: promptsResult.prompts,
133
253
  }));
134
254
  localServer.setRequestHandler(GetPromptRequestSchema, async (request) => {
135
- return await remoteClient.getPrompt({
255
+ return await primaryClient.getPrompt({
136
256
  name: request.params.name,
137
257
  arguments: request.params.arguments,
138
258
  });
@@ -142,7 +262,7 @@ async function main() {
142
262
  resources: resourcesResult.resources,
143
263
  }));
144
264
  localServer.setRequestHandler(ReadResourceRequestSchema, async (request) => {
145
- return await remoteClient.readResource({
265
+ return await primaryClient.readResource({
146
266
  uri: request.params.uri,
147
267
  });
148
268
  });
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@battlegrid/mcp-server",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "BattleGrid MCP server — play crypto prediction games from AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -44,11 +44,10 @@
44
44
  "license": "MIT",
45
45
  "repository": {
46
46
  "type": "git",
47
- "url": "https://github.com/blockfer-rp/battlegrid-app",
48
- "directory": "packages/mcp-server"
47
+ "url": "https://github.com/playbattlegrid/battlegrid-mcp"
49
48
  },
50
49
  "homepage": "https://battlegrid.trade",
51
50
  "bugs": {
52
- "url": "https://github.com/blockfer-rp/battlegrid-app/issues"
51
+ "url": "https://github.com/playbattlegrid/battlegrid-mcp/issues"
53
52
  }
54
53
  }