@battlegrid/mcp-server 31.1.5 → 31.2.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 +2 -2
- package/dist/index.d.ts +60 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +183 -68
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -705,7 +705,7 @@ Tools, prompts, and resources are **discovered live** from the connected server
|
|
|
705
705
|
|
|
706
706
|
- **The announced contract is relayed, not declared.** The proxy reads the upstream server's identity from the handshake it just completed and re-announces it verbatim to the local client. A local client therefore always reads the contract it will actually reach, and the package version is free to mean only what it should: this proxy's own code. **There is no pairing rule to keep, and no publish-time deploy gate** — a released package makes no claim about the server, so there is no ordering between a release here and a deploy there. This replaces the `MAJOR.MINOR` pairing that held through v11; see [v12](#v12--the-announced-contract-is-read-from-the-server-not-declared-here).
|
|
707
707
|
- **Fails closed, never falls back.** If a connected server announced no `serverInfo` — a protocol violation, since it is required in a successful `initialize` result — the proxy refuses to start rather than substituting its own version. There is no honest number to announce in that case, and announcing a dishonest one silently is the failure this design removes.
|
|
708
|
-
- **Rediscover after a server cutover.**
|
|
708
|
+
- **Rediscover after a server cutover.** The proxy resolves its catalog on first use and then caches it for the life of the process; a resolution that *failed* is retried on the next request, but a server deploy is never noticed. Package publication does not refresh it either. Restart/reconnect the proxy and re-run `tools/list`, `prompts/list`, and `resources/list` after the server deploys.
|
|
709
709
|
- **Restart after key rotation.** API keys are read once at process startup; rotate a key, then restart the proxy.
|
|
710
710
|
|
|
711
711
|
| Version | Changes |
|
|
@@ -798,7 +798,7 @@ Also confirm npm's Trusted Publisher for `@battlegrid/mcp-server` is GitHub Acti
|
|
|
798
798
|
|
|
799
799
|
Two things do still need doing, neither of them a release:
|
|
800
800
|
|
|
801
|
-
- **Reconnect** to pick up the new contract — the announcement and the capability snapshot
|
|
801
|
+
- **Reconnect** to pick up the new contract — the announcement is read once from the handshake at startup, and the capability snapshot is resolved on first use and cached thereafter (see [Rediscovery & versioning](#rediscovery--versioning)).
|
|
802
802
|
- **Document the break** where the contract is documented, in `battlegrid-app`. Contract breaking-change notes are no longer keyed to package versions in this README, because a contract move is no longer a release here.
|
|
803
803
|
|
|
804
804
|
### Verify publication
|
package/dist/index.d.ts
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
*/
|
|
38
38
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
39
39
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
40
|
-
import { type Implementation } from '@modelcontextprotocol/sdk/types.js';
|
|
40
|
+
import { type Implementation, type Prompt, type Resource } from '@modelcontextprotocol/sdk/types.js';
|
|
41
41
|
/**
|
|
42
42
|
* This package's own version — the proxy's code, and nothing else.
|
|
43
43
|
*
|
|
@@ -49,7 +49,7 @@ import { type Implementation } from '@modelcontextprotocol/sdk/types.js';
|
|
|
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.
|
|
52
|
+
export declare const PACKAGE_VERSION = "31.2.0";
|
|
53
53
|
export declare const DEFAULT_URL = "https://mcp.battlegrid.trade/mcp";
|
|
54
54
|
export interface EnvConfig {
|
|
55
55
|
apiKeys: string[];
|
|
@@ -106,26 +106,73 @@ export declare function injectAccountParam(tools: ToolDefinition[], accountNames
|
|
|
106
106
|
*/
|
|
107
107
|
export declare function announcedIdentityOf(serverInfo: Implementation | undefined): Implementation;
|
|
108
108
|
export interface CreateProxyServerOptions {
|
|
109
|
-
/**
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
/**
|
|
110
|
+
* The operator's FIRST configured key — used for the announcing handshake, the prompt and
|
|
111
|
+
* resource surfaces, and single-account routing. Deliberately not derived from whichever
|
|
112
|
+
* identity lookups happened to succeed: that made a mistyped first key silently promote the
|
|
113
|
+
* second, relocating every unqualified call to a different account.
|
|
114
|
+
*/
|
|
115
|
+
primaryKey: string;
|
|
116
|
+
/**
|
|
117
|
+
* Whether a tool call must name an account. Derived from the CONFIGURED key count, so the guard
|
|
118
|
+
* is armed before any network call. Deriving it from resolved identities would let a transient
|
|
119
|
+
* identity failure convert a multi-account proxy into a single-account one and route an
|
|
120
|
+
* unqualified money-moving call to the primary.
|
|
121
|
+
*/
|
|
122
|
+
isMultiAccount: boolean;
|
|
123
|
+
/** Connect (or reuse) a remote MCP client for a given API key. */
|
|
112
124
|
connect: (apiKey: string) => Promise<Client>;
|
|
125
|
+
/** Resolve account identities. Awaited lazily, on the first request that needs the catalog. */
|
|
126
|
+
resolveIdentities: () => Promise<AccountIdentity[]>;
|
|
113
127
|
}
|
|
114
|
-
|
|
115
|
-
|
|
128
|
+
/**
|
|
129
|
+
* Everything the catalog resolution produces, resolved together as one shared value.
|
|
130
|
+
*
|
|
131
|
+
* The account selector published on every tool schema and the membership check applied to an
|
|
132
|
+
* incoming call are one rule at two altitudes, so `accountNames` and `keyByAccount` are members
|
|
133
|
+
* here rather than re-derived at each handler.
|
|
134
|
+
*/
|
|
135
|
+
export interface ProxyCatalog {
|
|
136
|
+
identities: AccountIdentity[];
|
|
137
|
+
accountNames: string[];
|
|
138
|
+
keyByAccount: Map<string, string>;
|
|
139
|
+
tools: ToolDefinition[];
|
|
140
|
+
prompts: Prompt[];
|
|
141
|
+
resources: Resource[];
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* What a completed warm-up reports back to `main()`, which owns every startup diagnostic.
|
|
145
|
+
*
|
|
146
|
+
* Carries `accountNames` as well as the counts because the account-roster line is the only surface
|
|
147
|
+
* naming which accounts actually resolved — the signal a dangling primary or a silent single-account
|
|
148
|
+
* collapse would otherwise hide.
|
|
149
|
+
*/
|
|
150
|
+
export interface WarmSummary {
|
|
151
|
+
accountNames: string[];
|
|
116
152
|
toolCount: number;
|
|
117
153
|
promptCount: number;
|
|
118
154
|
resourceCount: number;
|
|
119
|
-
|
|
120
|
-
|
|
155
|
+
}
|
|
156
|
+
export interface ProxyServer {
|
|
157
|
+
server: Server;
|
|
121
158
|
/** The upstream identity relayed downstream — the contract a local client will actually reach. */
|
|
122
159
|
announced: Implementation;
|
|
160
|
+
/**
|
|
161
|
+
* Resolve the catalog, returning its counts. Returns the SAME memoized resolution a request
|
|
162
|
+
* triggers — it starts nothing of its own, so warm-up and a first request never resolve twice.
|
|
163
|
+
*/
|
|
164
|
+
warm: () => Promise<WarmSummary>;
|
|
123
165
|
}
|
|
124
166
|
/**
|
|
125
|
-
* Build the local stdio-facing MCP server that proxies to the remote BattleGrid
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
167
|
+
* Build the local stdio-facing MCP server that proxies to the remote BattleGrid server.
|
|
168
|
+
*
|
|
169
|
+
* ORDERING IS THE POINT. Exactly one upstream operation happens here: the handshake that yields the
|
|
170
|
+
* identity this proxy relays. `serverInfo` is captured by the SDK at `Server` construction and read
|
|
171
|
+
* when `initialize` is answered, with no setter, so relaying the upstream's identity verbatim makes
|
|
172
|
+
* one round trip inherent. Everything else — identity discovery and the three catalog calls —
|
|
173
|
+
* resolves lazily, after the caller has bound the transport, because none of it is needed to answer
|
|
174
|
+
* `initialize` and every unit of work placed ahead of the bind is paid by every client on every
|
|
175
|
+
* start.
|
|
129
176
|
*/
|
|
130
177
|
export declare function createProxyServer(options: CreateProxyServerOptions): Promise<ProxyServer>;
|
|
131
178
|
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAOL,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -52,10 +52,16 @@ 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.
|
|
55
|
+
export const PACKAGE_VERSION = '31.2.0';
|
|
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];
|
|
59
|
+
// One rule, two expressions. Asserted here so the delay table genuinely bounds the attempt count,
|
|
60
|
+
// which is what lets connectWithRetry index it without a fallback.
|
|
61
|
+
if (RETRY_DELAYS_MS.length !== MAX_RETRIES) {
|
|
62
|
+
throw new Error(`Retry budget disagrees with itself: MAX_RETRIES=${MAX_RETRIES} but RETRY_DELAYS_MS carries ` +
|
|
63
|
+
`${RETRY_DELAYS_MS.length} delays. Reconcile them at their declaration.`);
|
|
64
|
+
}
|
|
59
65
|
// --- Environment validation (exported for testing) ---
|
|
60
66
|
export function validateEnv(env) {
|
|
61
67
|
const apiUrl = env.BATTLEGRID_API_URL || DEFAULT_URL;
|
|
@@ -133,7 +139,8 @@ function isAuthError(error) {
|
|
|
133
139
|
function sleep(ms) {
|
|
134
140
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
135
141
|
}
|
|
136
|
-
async function connectWithRetry(client, transport, apiUrl) {
|
|
142
|
+
async function connectWithRetry(client, transport, apiUrl, apiKey) {
|
|
143
|
+
const keyPrefix = apiKey.substring(0, 12);
|
|
137
144
|
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
138
145
|
try {
|
|
139
146
|
await client.connect(transport);
|
|
@@ -146,7 +153,7 @@ async function connectWithRetry(client, transport, apiUrl) {
|
|
|
146
153
|
: undefined;
|
|
147
154
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
148
155
|
if (isAuthError(error)) {
|
|
149
|
-
throw new Error(`Authentication failed (HTTP ${errorCode ?? 'unknown'}): ${errorMessage}\n` +
|
|
156
|
+
throw new Error(`Authentication failed for key ${keyPrefix} (HTTP ${errorCode ?? 'unknown'}): ${errorMessage}\n` +
|
|
150
157
|
'This means the server rejected your API key. Possible causes:\n' +
|
|
151
158
|
' 1. Key was revoked (a new key invalidates all previous keys)\n' +
|
|
152
159
|
' 2. Key was corrupted during copy-paste\n' +
|
|
@@ -154,12 +161,13 @@ async function connectWithRetry(client, transport, apiUrl) {
|
|
|
154
161
|
'Create a new key at: https://battlegrid.trade → Profile → MCP tab');
|
|
155
162
|
}
|
|
156
163
|
if (attempt === MAX_RETRIES) {
|
|
157
|
-
throw new Error(`Cannot connect to BattleGrid server at ${apiUrl}
|
|
164
|
+
throw new Error(`Cannot connect to BattleGrid server at ${apiUrl} with key ${keyPrefix} after ` +
|
|
165
|
+
`${MAX_RETRIES + 1} attempts.\n` +
|
|
158
166
|
`Last error: ${errorMessage}\n` +
|
|
159
167
|
`Check your internet connection or verify the server is running.\n` +
|
|
160
168
|
`Health check: ${apiUrl.replace('/mcp', '')}/health`);
|
|
161
169
|
}
|
|
162
|
-
const delay = RETRY_DELAYS_MS[attempt]
|
|
170
|
+
const delay = RETRY_DELAYS_MS[attempt];
|
|
163
171
|
process.stderr.write(`Connection attempt ${attempt + 1} failed (${errorMessage}), retrying in ${delay / 1000}s...\n`);
|
|
164
172
|
await sleep(delay);
|
|
165
173
|
}
|
|
@@ -222,64 +230,153 @@ export function announcedIdentityOf(serverInfo) {
|
|
|
222
230
|
return serverInfo;
|
|
223
231
|
}
|
|
224
232
|
/**
|
|
225
|
-
* Build the local stdio-facing MCP server that proxies to the remote BattleGrid
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
233
|
+
* Build the local stdio-facing MCP server that proxies to the remote BattleGrid server.
|
|
234
|
+
*
|
|
235
|
+
* ORDERING IS THE POINT. Exactly one upstream operation happens here: the handshake that yields the
|
|
236
|
+
* identity this proxy relays. `serverInfo` is captured by the SDK at `Server` construction and read
|
|
237
|
+
* when `initialize` is answered, with no setter, so relaying the upstream's identity verbatim makes
|
|
238
|
+
* one round trip inherent. Everything else — identity discovery and the three catalog calls —
|
|
239
|
+
* resolves lazily, after the caller has bound the transport, because none of it is needed to answer
|
|
240
|
+
* `initialize` and every unit of work placed ahead of the bind is paid by every client on every
|
|
241
|
+
* start.
|
|
229
242
|
*/
|
|
230
243
|
export async function createProxyServer(options) {
|
|
231
|
-
const {
|
|
232
|
-
|
|
233
|
-
const accountNames = identities.map(id => id.username);
|
|
234
|
-
// Build lookup: username → apiKey
|
|
235
|
-
const keyByAccount = new Map();
|
|
236
|
-
for (const id of identities) {
|
|
237
|
-
keyByAccount.set(id.username, id.apiKey);
|
|
238
|
-
}
|
|
239
|
-
// Primary client (first key) is used for capability discovery and non-tool proxying.
|
|
240
|
-
const primaryKey = identities[0].apiKey;
|
|
244
|
+
const { primaryKey, isMultiAccount, connect, resolveIdentities } = options;
|
|
245
|
+
// The one retained pre-bind round trip.
|
|
241
246
|
const primaryClient = await connect(primaryKey);
|
|
242
247
|
// What this proxy announces downstream is what the upstream just announced to it — read here,
|
|
243
248
|
// from the completed handshake, so it can never be a stale constant.
|
|
244
249
|
const announced = announcedIdentityOf(primaryClient.getServerVersion());
|
|
245
|
-
//
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
primaryClient.listResources(),
|
|
250
|
-
]);
|
|
251
|
-
// Augment tools with account parameter if multi-account
|
|
252
|
-
const exposedTools = isMultiAccount
|
|
253
|
-
? injectAccountParam(toolsResult.tools, accountNames)
|
|
254
|
-
: toolsResult.tools;
|
|
255
|
-
// Create local stdio server, announcing the upstream's identity rather than one of our own.
|
|
250
|
+
// `listChanged` is declared HERE and can never be added later: registerCapabilities throws once a
|
|
251
|
+
// transport is connected, and a client only registers list-changed handlers for capabilities the
|
|
252
|
+
// server advertised. Without it, a client whose first tools/list failed holds an empty catalog for
|
|
253
|
+
// the life of the process — the symptom this lazy catalog exists to remove, made silent.
|
|
256
254
|
const localServer = new Server(announced, {
|
|
257
255
|
capabilities: {
|
|
258
|
-
tools: {},
|
|
259
|
-
prompts: {},
|
|
260
|
-
resources: {},
|
|
256
|
+
tools: { listChanged: true },
|
|
257
|
+
prompts: { listChanged: true },
|
|
258
|
+
resources: { listChanged: true },
|
|
261
259
|
},
|
|
262
260
|
});
|
|
263
|
-
//
|
|
261
|
+
// Pool of PROMISES, not clients: concurrent callers for one key share one in-flight connect
|
|
262
|
+
// rather than each building a transport that is never closed. A rejection is removed so the next
|
|
263
|
+
// caller retries.
|
|
264
264
|
const clientPool = new Map();
|
|
265
|
-
clientPool.set(primaryKey, primaryClient);
|
|
266
|
-
|
|
265
|
+
clientPool.set(primaryKey, Promise.resolve(primaryClient));
|
|
266
|
+
function getClientForKey(apiKey) {
|
|
267
267
|
const existing = clientPool.get(apiKey);
|
|
268
268
|
if (existing)
|
|
269
269
|
return existing;
|
|
270
|
-
const
|
|
271
|
-
clientPool.set(apiKey,
|
|
272
|
-
|
|
270
|
+
const pending = connect(apiKey);
|
|
271
|
+
clientPool.set(apiKey, pending);
|
|
272
|
+
pending.catch(() => {
|
|
273
|
+
if (clientPool.get(apiKey) === pending)
|
|
274
|
+
clientPool.delete(apiKey);
|
|
275
|
+
});
|
|
276
|
+
return pending;
|
|
277
|
+
}
|
|
278
|
+
let catalogMemo = null;
|
|
279
|
+
let servedCatalogError = false;
|
|
280
|
+
async function announceListsChanged() {
|
|
281
|
+
try {
|
|
282
|
+
await Promise.all([
|
|
283
|
+
localServer.sendToolListChanged(),
|
|
284
|
+
localServer.sendPromptListChanged(),
|
|
285
|
+
localServer.sendResourceListChanged(),
|
|
286
|
+
]);
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
290
|
+
process.stderr.write(`Warning: could not notify client that the catalog recovered: ${message}\n`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async function buildCatalog() {
|
|
294
|
+
const identities = await resolveIdentities();
|
|
295
|
+
// The declared primary must be in the resolved roster. Identity discovery is a single unretried
|
|
296
|
+
// request while the handshake retries three times, so a primary can complete the handshake and
|
|
297
|
+
// still be missing here — which would serve prompts and resources as an account that appears in
|
|
298
|
+
// no selector and no log line.
|
|
299
|
+
if (!identities.some((identity) => identity.apiKey === primaryKey)) {
|
|
300
|
+
throw new Error(`Primary key (${primaryKey.substring(0, 12)}) is absent from the resolved account roster, ` +
|
|
301
|
+
'so every call routed to it would execute as an account this proxy never resolved.');
|
|
302
|
+
}
|
|
303
|
+
const accountNames = identities.map((identity) => identity.username);
|
|
304
|
+
const keyByAccount = new Map();
|
|
305
|
+
for (const identity of identities) {
|
|
306
|
+
if (keyByAccount.has(identity.username)) {
|
|
307
|
+
throw new Error(`Two configured accounts resolved to the display name "${identity.username}", so an ` +
|
|
308
|
+
'account selection cannot name one of them unambiguously.');
|
|
309
|
+
}
|
|
310
|
+
keyByAccount.set(identity.username, identity.apiKey);
|
|
311
|
+
}
|
|
312
|
+
const [toolsResult, promptsResult, resourcesResult] = await Promise.all([
|
|
313
|
+
primaryClient.listTools(),
|
|
314
|
+
primaryClient.listPrompts(),
|
|
315
|
+
primaryClient.listResources(),
|
|
316
|
+
]);
|
|
317
|
+
const discovered = toolsResult.tools;
|
|
318
|
+
return {
|
|
319
|
+
identities,
|
|
320
|
+
accountNames,
|
|
321
|
+
keyByAccount,
|
|
322
|
+
tools: isMultiAccount ? injectAccountParam(discovered, accountNames) : discovered,
|
|
323
|
+
prompts: promptsResult.prompts,
|
|
324
|
+
resources: resourcesResult.resources,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* The catalog, resolved at most once and shared by every caller.
|
|
329
|
+
*
|
|
330
|
+
* The clear-on-failure is identity-guarded deliberately. The obvious shape — an async IIFE whose
|
|
331
|
+
* inner catch nulls the memo — poisons it permanently when the body throws before its first
|
|
332
|
+
* `await`: that catch runs during the synchronous prefix and the outer assignment then
|
|
333
|
+
* re-installs the rejected promise. Guarding on identity is correct for both timings and also
|
|
334
|
+
* cannot discard a newer resolution another request installed.
|
|
335
|
+
*/
|
|
336
|
+
function resolveCatalog() {
|
|
337
|
+
const existing = catalogMemo;
|
|
338
|
+
if (existing)
|
|
339
|
+
return existing;
|
|
340
|
+
const pending = buildCatalog();
|
|
341
|
+
catalogMemo = pending;
|
|
342
|
+
pending.catch(() => {
|
|
343
|
+
if (catalogMemo === pending)
|
|
344
|
+
catalogMemo = null;
|
|
345
|
+
});
|
|
346
|
+
void pending.then(() => {
|
|
347
|
+
if (!servedCatalogError)
|
|
348
|
+
return;
|
|
349
|
+
servedCatalogError = false;
|
|
350
|
+
void announceListsChanged();
|
|
351
|
+
}, () => undefined);
|
|
352
|
+
return pending;
|
|
353
|
+
}
|
|
354
|
+
/** Resolve the catalog, remembering that a failure was served so a later recovery can be announced. */
|
|
355
|
+
async function catalogOrThrow() {
|
|
356
|
+
try {
|
|
357
|
+
return await resolveCatalog();
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
servedCatalogError = true;
|
|
361
|
+
throw error;
|
|
362
|
+
}
|
|
273
363
|
}
|
|
274
364
|
// --- Proxy: tools ---
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
365
|
+
// Throws on rejection: ListToolsResult carries only `tools`, so the tools/call in-band
|
|
366
|
+
// `{content, isError}` shape would ship as a SUCCESSFUL result that fails the client's own parse.
|
|
367
|
+
// The SDK maps a thrown handler error to a proper JSON-RPC error.
|
|
368
|
+
localServer.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
369
|
+
const catalog = await catalogOrThrow();
|
|
370
|
+
return { tools: catalog.tools };
|
|
371
|
+
});
|
|
278
372
|
localServer.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
279
373
|
try {
|
|
280
374
|
let targetKey = primaryKey;
|
|
281
375
|
const args = { ...request.params.arguments };
|
|
376
|
+
// Read from the constructor option, never from the catalog: the guard must be armed even
|
|
377
|
+
// while the account set is still unknown.
|
|
282
378
|
if (isMultiAccount) {
|
|
379
|
+
const { keyByAccount, accountNames } = await catalogOrThrow();
|
|
283
380
|
const selectedAccount = args.account;
|
|
284
381
|
if (!selectedAccount || !keyByAccount.has(selectedAccount)) {
|
|
285
382
|
return {
|
|
@@ -308,9 +405,10 @@ export async function createProxyServer(options) {
|
|
|
308
405
|
}
|
|
309
406
|
});
|
|
310
407
|
// --- Proxy: prompts ---
|
|
311
|
-
localServer.setRequestHandler(ListPromptsRequestSchema, async () =>
|
|
312
|
-
|
|
313
|
-
|
|
408
|
+
localServer.setRequestHandler(ListPromptsRequestSchema, async () => {
|
|
409
|
+
const catalog = await catalogOrThrow();
|
|
410
|
+
return { prompts: catalog.prompts };
|
|
411
|
+
});
|
|
314
412
|
localServer.setRequestHandler(GetPromptRequestSchema, async (request) => {
|
|
315
413
|
return await primaryClient.getPrompt({
|
|
316
414
|
name: request.params.name,
|
|
@@ -318,9 +416,10 @@ export async function createProxyServer(options) {
|
|
|
318
416
|
});
|
|
319
417
|
});
|
|
320
418
|
// --- Proxy: resources ---
|
|
321
|
-
localServer.setRequestHandler(ListResourcesRequestSchema, async () =>
|
|
322
|
-
|
|
323
|
-
|
|
419
|
+
localServer.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
420
|
+
const catalog = await catalogOrThrow();
|
|
421
|
+
return { resources: catalog.resources };
|
|
422
|
+
});
|
|
324
423
|
localServer.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
325
424
|
return await primaryClient.readResource({
|
|
326
425
|
uri: request.params.uri,
|
|
@@ -328,12 +427,16 @@ export async function createProxyServer(options) {
|
|
|
328
427
|
});
|
|
329
428
|
return {
|
|
330
429
|
server: localServer,
|
|
331
|
-
toolCount: toolsResult.tools.length,
|
|
332
|
-
promptCount: promptsResult.prompts.length,
|
|
333
|
-
resourceCount: resourcesResult.resources.length,
|
|
334
|
-
isMultiAccount,
|
|
335
|
-
accountNames,
|
|
336
430
|
announced,
|
|
431
|
+
warm: async () => {
|
|
432
|
+
const catalog = await resolveCatalog();
|
|
433
|
+
return {
|
|
434
|
+
accountNames: catalog.accountNames,
|
|
435
|
+
toolCount: catalog.tools.length,
|
|
436
|
+
promptCount: catalog.prompts.length,
|
|
437
|
+
resourceCount: catalog.resources.length,
|
|
438
|
+
};
|
|
439
|
+
},
|
|
337
440
|
};
|
|
338
441
|
}
|
|
339
442
|
// --- Main ---
|
|
@@ -352,27 +455,25 @@ async function main() {
|
|
|
352
455
|
const hashPrefix = createHash('sha256').update(key).digest('hex').substring(0, 16);
|
|
353
456
|
process.stderr.write(`BattleGrid MCP: Key #${i + 1} prefix=${key.substring(0, 12)} hashPrefix=${hashPrefix} len=${key.length}\n`);
|
|
354
457
|
}
|
|
355
|
-
//
|
|
356
|
-
let identities;
|
|
357
|
-
try {
|
|
358
|
-
identities = await discoverIdentities(config.apiKeys, config.apiUrl);
|
|
359
|
-
}
|
|
360
|
-
catch (error) {
|
|
361
|
-
process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
362
|
-
process.exit(1);
|
|
363
|
-
}
|
|
364
|
-
process.stderr.write(`BattleGrid MCP: ${identities.length} account(s) discovered — ${identities.map(id => id.username).join(', ')}\n`);
|
|
365
|
-
// Lazily connect a remote MCP client per API key, with retry + auth diagnostics.
|
|
458
|
+
// Connect a remote MCP client for a given API key, with retry + auth diagnostics.
|
|
366
459
|
const connect = async (apiKey) => {
|
|
367
460
|
const transport = new StreamableHTTPClientTransport(new URL(config.apiUrl), { requestInit: { headers: { Authorization: `Bearer ${apiKey}` } } });
|
|
368
461
|
// Upstream is told which proxy build is calling — the one question PACKAGE_VERSION answers.
|
|
369
462
|
const client = new Client({ name: 'battlegrid-proxy', version: PACKAGE_VERSION }, { capabilities: {} });
|
|
370
|
-
await connectWithRetry(client, transport, config.apiUrl);
|
|
463
|
+
await connectWithRetry(client, transport, config.apiUrl, apiKey);
|
|
371
464
|
return client;
|
|
372
465
|
};
|
|
373
466
|
let proxy;
|
|
374
467
|
try {
|
|
375
|
-
proxy = await createProxyServer({
|
|
468
|
+
proxy = await createProxyServer({
|
|
469
|
+
// The operator's declared first key, chosen before discovery so an unreachable one fails
|
|
470
|
+
// loudly here instead of silently promoting the second.
|
|
471
|
+
primaryKey: config.apiKeys[0],
|
|
472
|
+
// Armed by configuration, so a later identity failure cannot stand the account guard down.
|
|
473
|
+
isMultiAccount: config.apiKeys.length > 1,
|
|
474
|
+
connect,
|
|
475
|
+
resolveIdentities: () => discoverIdentities(config.apiKeys, config.apiUrl),
|
|
476
|
+
});
|
|
376
477
|
}
|
|
377
478
|
catch (error) {
|
|
378
479
|
process.stderr.write(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
@@ -383,11 +484,25 @@ async function main() {
|
|
|
383
484
|
// unnoticed for ten days.
|
|
384
485
|
process.stderr.write(`BattleGrid MCP: announcing ${proxy.announced.name}@${proxy.announced.version} ` +
|
|
385
486
|
`(server contract, read from the upstream handshake) — proxy ${PACKAGE_VERSION}\n`);
|
|
386
|
-
|
|
387
|
-
//
|
|
487
|
+
// --- Start stdio transport, BEFORE any catalog work ---
|
|
488
|
+
//
|
|
489
|
+
// Everything above is the single upstream handshake the relayed serverInfo requires. From here the
|
|
490
|
+
// process answers `initialize`; identity discovery and the three catalog calls happen behind it.
|
|
388
491
|
const stdioTransport = new StdioServerTransport();
|
|
389
492
|
await proxy.server.connect(stdioTransport);
|
|
390
493
|
process.stderr.write('BattleGrid MCP server running on stdio\n');
|
|
494
|
+
// Warm the catalog so the first tools/list joins an in-flight resolution rather than starting one.
|
|
495
|
+
// Deliberately NOT awaited, and the rejection handler is the whole of the guarantee that a
|
|
496
|
+
// background failure cannot kill a process that has already answered `initialize`. The failure is
|
|
497
|
+
// reported and absorbed; the next request that needs the catalog retries it.
|
|
498
|
+
void proxy.warm().then((summary) => {
|
|
499
|
+
process.stderr.write(`BattleGrid MCP: ${summary.accountNames.length} account(s) discovered — ${summary.accountNames.join(', ')}\n`);
|
|
500
|
+
process.stderr.write(`BattleGrid MCP: ${summary.toolCount} tools, ${summary.promptCount} prompts, ${summary.resourceCount} resources\n`);
|
|
501
|
+
}, (error) => {
|
|
502
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
503
|
+
process.stderr.write(`Warning: catalog warm-up failed (${message}). The proxy is connected; the next request ` +
|
|
504
|
+
'that needs the catalog will retry it.\n');
|
|
505
|
+
});
|
|
391
506
|
}
|
|
392
507
|
// Only run when executed directly (not when imported for testing)
|
|
393
508
|
const isDirectExecution = process.argv[1] &&
|
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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"}
|