@layr-labs/benchmaxx-arena-mcp 0.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 +155 -0
- package/dist/apiTypes.d.ts +379 -0
- package/dist/apiTypes.js +24 -0
- package/dist/apiTypes.js.map +1 -0
- package/dist/browser.d.ts +33 -0
- package/dist/browser.js +65 -0
- package/dist/browser.js.map +1 -0
- package/dist/client.d.ts +210 -0
- package/dist/client.js +407 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +25 -0
- package/dist/config.js +47 -0
- package/dist/config.js.map +1 -0
- package/dist/credentialStore.d.ts +103 -0
- package/dist/credentialStore.js +168 -0
- package/dist/credentialStore.js.map +1 -0
- package/dist/device.d.ts +87 -0
- package/dist/device.js +92 -0
- package/dist/device.js.map +1 -0
- package/dist/errors.d.ts +50 -0
- package/dist/errors.js +167 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/loopback.d.ts +29 -0
- package/dist/loopback.js +120 -0
- package/dist/loopback.js.map +1 -0
- package/dist/pkce.d.ts +24 -0
- package/dist/pkce.js +27 -0
- package/dist/pkce.js.map +1 -0
- package/dist/tools.d.ts +28 -0
- package/dist/tools.js +350 -0
- package/dist/tools.js.map +1 -0
- package/package.json +44 -0
package/dist/tools.js
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool registration.
|
|
3
|
+
*
|
|
4
|
+
* Each tool validates its input with a Zod schema (the SDK builds the advertised
|
|
5
|
+
* JSON Schema from it and rejects bad input before the handler runs), calls the
|
|
6
|
+
* client, and returns pretty-printed JSON text plus `structuredContent`. A
|
|
7
|
+
* failure returns `isError: true` with one actionable message from
|
|
8
|
+
* `toActionableMessage`. No tool prints to stdout, which carries the MCP
|
|
9
|
+
* protocol only: login instructions — the authorize URL on the no-browser path,
|
|
10
|
+
* and liveness while a human approves — go to stderr through the client's
|
|
11
|
+
* operator sink and to the host as an MCP progress notification.
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { toActionableMessage } from './errors.js';
|
|
15
|
+
function ok(payload) {
|
|
16
|
+
const structured = typeof payload === 'object' && payload !== null && !Array.isArray(payload)
|
|
17
|
+
? payload
|
|
18
|
+
: { result: payload };
|
|
19
|
+
return {
|
|
20
|
+
content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],
|
|
21
|
+
structuredContent: structured,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function fail(error) {
|
|
25
|
+
return { content: [{ type: 'text', text: toActionableMessage(error) }], isError: true };
|
|
26
|
+
}
|
|
27
|
+
/** Wrap a tool body so any thrown error becomes an actionable isError result. */
|
|
28
|
+
async function guard(body) {
|
|
29
|
+
try {
|
|
30
|
+
return await body();
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return fail(error);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Human explanation for an empty leaderboard, using the epoch and baseline
|
|
38
|
+
* signals to distinguish the causes of zero rows.
|
|
39
|
+
*
|
|
40
|
+
* The baseline test must be `== null`, not `=== undefined`. `baseline` is a
|
|
41
|
+
* message field and the gateway sets `EmitUnpopulated: true`, so an unset
|
|
42
|
+
* baseline arrives as an explicit `null` and an `=== undefined` test never
|
|
43
|
+
* fires. (The field it replaced, the scalar `baselinePass`, arrived as `0` when
|
|
44
|
+
* unset for the same reason, so that test never fired either.) `== null`
|
|
45
|
+
* catches both null and a genuinely absent key.
|
|
46
|
+
*/
|
|
47
|
+
export function explainEmptyLeaderboard(board) {
|
|
48
|
+
if ((board.epochPendingRuns ?? 0) > 0) {
|
|
49
|
+
return `No ranked rows yet: ${board.epochPendingRuns} run(s) are pending for the current harness epoch. Rankings appear as current-epoch runs complete.`;
|
|
50
|
+
}
|
|
51
|
+
if ((board.runsExcludedByFailure ?? 0) > 0) {
|
|
52
|
+
return `No ranked rows yet: ${board.runsExcludedByFailure} run(s) were excluded for a high model-call failure rate. Rankings appear once a run completes cleanly.`;
|
|
53
|
+
}
|
|
54
|
+
if (board.baseline == null) {
|
|
55
|
+
return 'No ranked rows yet: this class cannot rank yet (no baseline is set for this benchmark and variant).';
|
|
56
|
+
}
|
|
57
|
+
return 'No ranked rows yet: nobody has submitted a ranking run for this benchmark and variant.';
|
|
58
|
+
}
|
|
59
|
+
export function registerTools(server, client) {
|
|
60
|
+
// --- Auth ---------------------------------------------------------------
|
|
61
|
+
server.registerTool('login', {
|
|
62
|
+
title: 'Log in to benchmaxx-arena',
|
|
63
|
+
description: 'Mint an API key through your browser. Opens the arena in your browser, waits for you to approve one login request, then stores the key for later tools. Approval is human-paced and usually takes longer than a default tool timeout, so this tool emits progress while it waits and stops cleanly if you cancel it. If no browser can be opened it returns an authorize URL to open by hand and you finish with finish_login. Run this once.',
|
|
64
|
+
inputSchema: {},
|
|
65
|
+
}, async (_args, extra) => guard(async () => {
|
|
66
|
+
const result = await client.login({
|
|
67
|
+
signal: extra?.signal,
|
|
68
|
+
// Progress both shows liveness and resets the host's tool timeout, so
|
|
69
|
+
// a human-paced approval does not get killed mid-flow.
|
|
70
|
+
reportProgress: extra?.sendNotification
|
|
71
|
+
? async ({ message }) => {
|
|
72
|
+
await extra.sendNotification({
|
|
73
|
+
method: 'notifications/progress',
|
|
74
|
+
params: { progressToken: extra.requestId, progress: 0, message },
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
: undefined,
|
|
78
|
+
});
|
|
79
|
+
if (result.kind === 'manual') {
|
|
80
|
+
return ok({
|
|
81
|
+
authorizeUrl: result.authorizeUrl,
|
|
82
|
+
message: `No browser could be opened. Open ${result.authorizeUrl}, approve the request, then pass the code it shows to finish_login.`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return ok({
|
|
86
|
+
username: result.username,
|
|
87
|
+
keyPrefix: result.keyPrefix,
|
|
88
|
+
expiresAt: result.expiresAt,
|
|
89
|
+
message: `Logged in as ${result.username}.`,
|
|
90
|
+
});
|
|
91
|
+
}));
|
|
92
|
+
server.registerTool('finish_login', {
|
|
93
|
+
title: 'Finish a login with a pasted code',
|
|
94
|
+
description: 'Complete a login that could not use a browser. Pass the one-time code the arena approval page displayed and the API key is minted and stored. The code is single-use and expires shortly after it is issued, so a code that has already been redeemed will be rejected — run login again for a fresh one. Only use this after login reported that no browser could be opened.',
|
|
95
|
+
inputSchema: {
|
|
96
|
+
code: z
|
|
97
|
+
.string()
|
|
98
|
+
.min(1, 'code is required')
|
|
99
|
+
.describe('The one-time code the arena approval page displayed.'),
|
|
100
|
+
},
|
|
101
|
+
}, async (args) => guard(async () => {
|
|
102
|
+
const result = await client.finishLogin(args.code);
|
|
103
|
+
return ok({
|
|
104
|
+
username: result.username,
|
|
105
|
+
keyPrefix: result.keyPrefix,
|
|
106
|
+
expiresAt: result.expiresAt,
|
|
107
|
+
message: `Logged in as ${result.username}.`,
|
|
108
|
+
});
|
|
109
|
+
}));
|
|
110
|
+
server.registerTool('whoami', {
|
|
111
|
+
title: 'Show the stored identity',
|
|
112
|
+
description: 'Return the stored credential identity (username and key prefix) and the base URL. Says to run the login tool first when no key is stored.',
|
|
113
|
+
inputSchema: {},
|
|
114
|
+
}, async () => guard(async () => {
|
|
115
|
+
const credential = await client.currentCredential();
|
|
116
|
+
if (!credential) {
|
|
117
|
+
return ok({
|
|
118
|
+
authenticated: false,
|
|
119
|
+
message: 'Not authenticated — run the login tool first.',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// Enrich with server-side key metadata when reachable; degrade
|
|
123
|
+
// gracefully to the local view when the network or key check fails.
|
|
124
|
+
let keyActive;
|
|
125
|
+
try {
|
|
126
|
+
const keys = await client.listApiKeys();
|
|
127
|
+
const match = keys.keys?.find((k) => k.id === credential.keyId);
|
|
128
|
+
if (match) {
|
|
129
|
+
keyActive = match.revoked !== true;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
keyActive = undefined;
|
|
134
|
+
}
|
|
135
|
+
return ok({
|
|
136
|
+
authenticated: true,
|
|
137
|
+
username: credential.username,
|
|
138
|
+
keyPrefix: credential.keyPrefix,
|
|
139
|
+
keyActive,
|
|
140
|
+
});
|
|
141
|
+
}));
|
|
142
|
+
server.registerTool('logout', {
|
|
143
|
+
title: 'Delete the stored credential',
|
|
144
|
+
description: 'Delete the stored credential for this base URL. Does not revoke the key server-side.',
|
|
145
|
+
inputSchema: {},
|
|
146
|
+
}, async () => guard(async () => {
|
|
147
|
+
const removed = await client.logout();
|
|
148
|
+
return ok({
|
|
149
|
+
removed,
|
|
150
|
+
message: removed ? 'Logged out.' : 'No stored credential to remove.',
|
|
151
|
+
});
|
|
152
|
+
}));
|
|
153
|
+
// --- Catalog & leaderboard ---------------------------------------------
|
|
154
|
+
server.registerTool('get_catalog', {
|
|
155
|
+
title: 'Get the benchmark catalog',
|
|
156
|
+
description: 'List benchmarks, variants, allowed models, harnesses, and the latest harness versions.',
|
|
157
|
+
inputSchema: {},
|
|
158
|
+
}, async () => guard(async () => ok(await client.getCatalog())));
|
|
159
|
+
server.registerTool('get_leaderboard', {
|
|
160
|
+
title: 'Get the leaderboard',
|
|
161
|
+
description: 'Ranked and below-the-bar rows with score, pass rate, cost, and cost-per-pass, plus the baseline row a submission must beat. Explains an empty board.',
|
|
162
|
+
inputSchema: {
|
|
163
|
+
benchmark: z.string().optional().describe('Benchmark name filter.'),
|
|
164
|
+
variant: z.string().optional().describe('Variant name filter.'),
|
|
165
|
+
class: z
|
|
166
|
+
.string()
|
|
167
|
+
.optional()
|
|
168
|
+
.describe('Submission class filter: "prompt_only" or "full_harness".'),
|
|
169
|
+
order_by: z.string().optional().describe('Column to sort by, e.g. "score" or "costUsd".'),
|
|
170
|
+
asc: z.boolean().optional().describe('Sort ascending instead of descending.'),
|
|
171
|
+
limit: z.number().int().positive().max(500).optional().describe('Maximum ranked rows.'),
|
|
172
|
+
offset: z.number().int().nonnegative().optional().describe('Rows to skip, for paging.'),
|
|
173
|
+
username: z.string().optional().describe('Filter to one submitter.'),
|
|
174
|
+
model: z.string().optional().describe('Filter to one model.'),
|
|
175
|
+
harness: z.string().optional().describe('Filter to one harness.'),
|
|
176
|
+
harness_version: z.string().optional().describe('Filter to one harness version.'),
|
|
177
|
+
},
|
|
178
|
+
}, async (args) => guard(async () => {
|
|
179
|
+
const board = await client.getLeaderboard({
|
|
180
|
+
benchmark: args.benchmark,
|
|
181
|
+
variant: args.variant,
|
|
182
|
+
class: args.class,
|
|
183
|
+
orderBy: args.order_by,
|
|
184
|
+
asc: args.asc,
|
|
185
|
+
limit: args.limit,
|
|
186
|
+
offset: args.offset,
|
|
187
|
+
username: args.username,
|
|
188
|
+
model: args.model,
|
|
189
|
+
harness: args.harness,
|
|
190
|
+
harnessVersion: args.harness_version,
|
|
191
|
+
});
|
|
192
|
+
const rows = board.ranked ?? board.rows ?? [];
|
|
193
|
+
if (rows.length === 0) {
|
|
194
|
+
return ok({ ...board, explanation: explainEmptyLeaderboard(board) });
|
|
195
|
+
}
|
|
196
|
+
return ok(board);
|
|
197
|
+
}));
|
|
198
|
+
server.registerTool('list_benchmarks', {
|
|
199
|
+
title: 'List benchmarks',
|
|
200
|
+
description: 'Benchmarks with their allowed models and concurrency limits.',
|
|
201
|
+
inputSchema: {},
|
|
202
|
+
}, async () => guard(async () => ok(await client.listBenchmarks())));
|
|
203
|
+
server.registerTool('get_benchmark', {
|
|
204
|
+
title: 'Get benchmark detail',
|
|
205
|
+
description: "Benchmark detail with its variants: task names, trials, concurrency, and timeouts. Note the variant's capUsd field is deprecated and now reports only a zero — it is not the cap that governs a run; spend is governed by the platform and per-user spend policy.",
|
|
206
|
+
inputSchema: {
|
|
207
|
+
benchmark_id: z.string().min(1).describe('The benchmark id from list_benchmarks.'),
|
|
208
|
+
},
|
|
209
|
+
}, async (args) => guard(async () => ok(await client.getBenchmark(args.benchmark_id))));
|
|
210
|
+
// --- Submissions --------------------------------------------------------
|
|
211
|
+
server.registerTool('submit_prompt', {
|
|
212
|
+
title: 'Submit a system prompt',
|
|
213
|
+
description: "Create a prompt_only submission and return the submission and run id. The model must be on the variant's allowed list (see get_benchmark). WARNING: system prompts are PUBLIC — they are returned by public submission reads, so never put a secret in a prompt. Do not target verifier paths (/logs/verifier/) or reward files; forged rewards void and bill the run.",
|
|
214
|
+
inputSchema: {
|
|
215
|
+
benchmark_variant_id: z.string().min(1).describe('The variant id from get_benchmark.'),
|
|
216
|
+
model: z.string().min(1).describe("A wire model name on the variant's allowed list."),
|
|
217
|
+
system_prompt: z.string().min(1).describe('The system prompt. PUBLIC — no secrets.'),
|
|
218
|
+
idempotency_key: z
|
|
219
|
+
.string()
|
|
220
|
+
.min(1)
|
|
221
|
+
.optional()
|
|
222
|
+
.describe('Optional. Reuse the SAME key when retrying a submit whose response you never saw, so the retry does not create and bill a second run. Omit it and a fresh key is generated, which makes this call a new submission.'),
|
|
223
|
+
},
|
|
224
|
+
}, async (args) => guard(async () => ok(await client.submitPrompt({
|
|
225
|
+
benchmarkVariantId: args.benchmark_variant_id,
|
|
226
|
+
model: args.model,
|
|
227
|
+
systemPrompt: args.system_prompt,
|
|
228
|
+
idempotencyKey: args.idempotency_key,
|
|
229
|
+
}))));
|
|
230
|
+
server.registerTool('list_my_submissions', {
|
|
231
|
+
title: 'List my submissions',
|
|
232
|
+
description: "The caller's submissions, newest first, with class and model.",
|
|
233
|
+
inputSchema: {},
|
|
234
|
+
}, async () => guard(async () => ok(await client.listMySubmissions())));
|
|
235
|
+
server.registerTool('get_submission', {
|
|
236
|
+
title: 'Get submission detail',
|
|
237
|
+
description: 'Public submission detail: state, per-task results, model costs, and protocol/runtime fingerprints.',
|
|
238
|
+
inputSchema: {
|
|
239
|
+
submission_id: z.string().min(1).describe('The submission id.'),
|
|
240
|
+
},
|
|
241
|
+
}, async (args) => guard(async () => ok(await client.getSubmission(args.submission_id))));
|
|
242
|
+
server.registerTool('get_submission_config', {
|
|
243
|
+
title: 'Get submission config',
|
|
244
|
+
description: 'The frozen harness config: instruction, skills, agents, and harness version.',
|
|
245
|
+
inputSchema: {
|
|
246
|
+
submission_id: z.string().min(1).describe('The submission id.'),
|
|
247
|
+
},
|
|
248
|
+
}, async (args) => guard(async () => ok(await client.getSubmissionConfig(args.submission_id))));
|
|
249
|
+
// --- Runs ---------------------------------------------------------------
|
|
250
|
+
server.registerTool('list_runs', {
|
|
251
|
+
title: 'List my runs',
|
|
252
|
+
description: "The caller's runs with status, passes, cost, and integrity verdict. Optionally filter to one submission.",
|
|
253
|
+
inputSchema: {
|
|
254
|
+
submission_id: z.string().optional().describe('Filter to one submission id.'),
|
|
255
|
+
},
|
|
256
|
+
}, async (args) => guard(async () => ok(await client.listRuns({ submissionId: args.submission_id }))));
|
|
257
|
+
server.registerTool('get_run', {
|
|
258
|
+
title: 'Get run detail',
|
|
259
|
+
description: 'Full run detail plus per-task, per-trial results: pass/fail, reward, duration, cost, error, and forgery flag.',
|
|
260
|
+
inputSchema: {
|
|
261
|
+
run_id: z.string().min(1).describe('The run id.'),
|
|
262
|
+
},
|
|
263
|
+
}, async (args) => guard(async () => ok(await client.getRun(args.run_id))));
|
|
264
|
+
server.registerTool('get_run_timeline', {
|
|
265
|
+
title: 'Get run timeline',
|
|
266
|
+
description: 'Persisted run progress events after a sequence number, for incremental polling. Pass since_seq as the next_seq from your last call to get only new events; the response also reports whether the run is complete and its trial progress. This is the way to follow a live run.',
|
|
267
|
+
inputSchema: {
|
|
268
|
+
run_id: z.string().min(1).describe('The run id.'),
|
|
269
|
+
since_seq: z
|
|
270
|
+
.string()
|
|
271
|
+
.regex(/^\d+$/)
|
|
272
|
+
.optional()
|
|
273
|
+
.describe('Return events after this sequence number. Pass the next_seq from your previous call. Defaults to 0 (from the start).'),
|
|
274
|
+
},
|
|
275
|
+
}, async (args, extra) => guard(async () => {
|
|
276
|
+
const page = await client.getRunTimeline(args.run_id, {
|
|
277
|
+
sinceSeq: args.since_seq,
|
|
278
|
+
signal: extra?.signal,
|
|
279
|
+
});
|
|
280
|
+
const events = page.events ?? [];
|
|
281
|
+
return ok({
|
|
282
|
+
...page,
|
|
283
|
+
count: events.length,
|
|
284
|
+
// Always hand back a usable resume cursor, even for an empty page.
|
|
285
|
+
nextSeq: page.nextSeq ?? args.since_seq ?? '0',
|
|
286
|
+
});
|
|
287
|
+
}));
|
|
288
|
+
server.registerTool('get_run_log', {
|
|
289
|
+
title: 'Get run log',
|
|
290
|
+
description: "The run's stdout/stderr chunks after a sequence number, for incremental polling. Pass since_seq as the next_seq from your last call. Reports has_gap or has_delivery_loss when chunks are missing, and an archive URL once one is available.",
|
|
291
|
+
inputSchema: {
|
|
292
|
+
run_id: z.string().min(1).describe('The run id.'),
|
|
293
|
+
since_seq: z
|
|
294
|
+
.string()
|
|
295
|
+
.regex(/^\d+$/)
|
|
296
|
+
.optional()
|
|
297
|
+
.describe('Return chunks after this sequence number. Pass the next_seq from your previous call. Defaults to 0.'),
|
|
298
|
+
},
|
|
299
|
+
}, async (args, extra) => guard(async () => {
|
|
300
|
+
const page = await client.getRunLog(args.run_id, {
|
|
301
|
+
sinceSeq: args.since_seq,
|
|
302
|
+
signal: extra?.signal,
|
|
303
|
+
});
|
|
304
|
+
const chunks = page.chunks ?? [];
|
|
305
|
+
return ok({
|
|
306
|
+
...page,
|
|
307
|
+
count: chunks.length,
|
|
308
|
+
nextSeq: page.nextSeq ?? args.since_seq ?? '0',
|
|
309
|
+
});
|
|
310
|
+
}));
|
|
311
|
+
server.registerTool('cancel_run', {
|
|
312
|
+
title: 'Cancel a run',
|
|
313
|
+
description: 'Request cancellation of one of your runs. Asynchronous: this records the request and returns immediately — the run may still be winding down, so poll get_run to see it settle. Work already performed stays billed, so cancelling does not refund spend.',
|
|
314
|
+
inputSchema: {
|
|
315
|
+
run_id: z.string().min(1).describe('The run id to cancel.'),
|
|
316
|
+
reason: z
|
|
317
|
+
.string()
|
|
318
|
+
.optional()
|
|
319
|
+
.describe('Optional human-readable reason, for the audit log.'),
|
|
320
|
+
request_id: z
|
|
321
|
+
.string()
|
|
322
|
+
.min(1)
|
|
323
|
+
.optional()
|
|
324
|
+
.describe('Optional. Reuse the SAME id when retrying a cancel whose response you never saw. Omit it and one is generated.'),
|
|
325
|
+
},
|
|
326
|
+
}, async (args) => guard(async () => ok(await client.cancelRun(args.run_id, {
|
|
327
|
+
reason: args.reason,
|
|
328
|
+
requestId: args.request_id,
|
|
329
|
+
}))));
|
|
330
|
+
// --- Competition-wide reads ---------------------------------------------
|
|
331
|
+
server.registerTool('get_insights', {
|
|
332
|
+
title: 'Get competition insights',
|
|
333
|
+
description: 'Per-task competition insights: which tasks are solved, which are hard, and how submissions compare across them. Useful for deciding what a prompt should target.',
|
|
334
|
+
inputSchema: {
|
|
335
|
+
benchmark: z.string().optional().describe('Benchmark name filter.'),
|
|
336
|
+
variant: z.string().optional().describe('Variant name filter.'),
|
|
337
|
+
class: z
|
|
338
|
+
.string()
|
|
339
|
+
.optional()
|
|
340
|
+
.describe('Submission class filter: "prompt_only" or "full_harness".'),
|
|
341
|
+
model: z.string().optional().describe('Filter to one model.'),
|
|
342
|
+
},
|
|
343
|
+
}, async (args) => guard(async () => ok(await client.getInsights(args))));
|
|
344
|
+
server.registerTool('get_accounting_status', {
|
|
345
|
+
title: 'Get accounting status',
|
|
346
|
+
description: "Whether run cost accounting is currently healthy, stale, or blocked, and how far it has materialized. Check this when a run's reported cost looks incomplete before treating it as final.",
|
|
347
|
+
inputSchema: {},
|
|
348
|
+
}, async () => guard(async () => ok(await client.getAccountingStatus())));
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@layr-labs/benchmaxx-arena-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for benchmaxx-arena: agent-native benchmark submission over stdio.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "ISC",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/Layr-Labs/benchmaxx-arena.git",
|
|
10
|
+
"directory": "mcp"
|
|
11
|
+
},
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=20"
|
|
14
|
+
},
|
|
15
|
+
"bin": {
|
|
16
|
+
"benchmaxx-arena-mcp": "dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc && chmod +x dist/index.js",
|
|
24
|
+
"prepublishOnly": "npm run build",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
26
|
+
"lint": "eslint .",
|
|
27
|
+
"format": "prettier --write .",
|
|
28
|
+
"format:check": "prettier --check .",
|
|
29
|
+
"test": "vitest run"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@modelcontextprotocol/sdk": "1.30.0",
|
|
33
|
+
"zod": "3.25.76"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@eslint/js": "^9.39.1",
|
|
37
|
+
"@types/node": "^24.10.1",
|
|
38
|
+
"eslint": "^9.39.1",
|
|
39
|
+
"prettier": "^3.9.6",
|
|
40
|
+
"typescript": "~5.9.3",
|
|
41
|
+
"typescript-eslint": "^8.48.0",
|
|
42
|
+
"vitest": "^4.1.10"
|
|
43
|
+
}
|
|
44
|
+
}
|