jetty-mcp-server 1.0.3 → 1.1.1
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 +59 -0
- package/dist/api-client.d.ts +71 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +201 -0
- package/dist/api-client.js.map +1 -0
- package/dist/client.d.ts +12 -39
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +21 -187
- package/dist/client.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/lib.d.ts +14 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +11 -0
- package/dist/lib.js.map +1 -0
- package/dist/tool-definitions.d.ts +49 -0
- package/dist/tool-definitions.d.ts.map +1 -0
- package/dist/tool-definitions.js +428 -0
- package/dist/tool-definitions.js.map +1 -0
- package/dist/tools.d.ts +8 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +10 -339
- package/dist/tools.js.map +1 -1
- package/dist/webmcp.d.ts +61 -0
- package/dist/webmcp.d.ts.map +1 -0
- package/dist/webmcp.js +98 -0
- package/dist/webmcp.js.map +1 -0
- package/package.json +49 -6
- package/src/client.ts +0 -332
- package/src/index.ts +0 -17
- package/src/tools.ts +0 -585
- package/tests/auth.test.mjs +0 -129
- package/tests/routines.test.mjs +0 -236
- package/tsconfig.json +0 -18
package/dist/tools.js
CHANGED
|
@@ -1,342 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
return {
|
|
4
|
-
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
5
|
-
};
|
|
6
|
-
}
|
|
7
|
-
const PROVIDER_KEYS = [
|
|
8
|
-
"OPENAI_API_KEY",
|
|
9
|
-
"ANTHROPIC_API_KEY",
|
|
10
|
-
"GEMINI_API_KEY",
|
|
11
|
-
"REPLICATE_API_TOKEN",
|
|
12
|
-
];
|
|
13
|
-
async function detectTrialEligibility(client, collection) {
|
|
14
|
-
try {
|
|
15
|
-
const trialStatus = (await client.getTrialStatus(collection));
|
|
16
|
-
if (!trialStatus.active) {
|
|
17
|
-
return {
|
|
18
|
-
useTrialKeys: false,
|
|
19
|
-
trialInfo: { trial_active: false },
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
const env = (await client.getCollectionEnvironment(collection));
|
|
23
|
-
const envKeys = Object.keys(env);
|
|
24
|
-
const hasProviderKeys = PROVIDER_KEYS.some((k) => envKeys.includes(k));
|
|
25
|
-
if (hasProviderKeys) {
|
|
26
|
-
return {
|
|
27
|
-
useTrialKeys: false,
|
|
28
|
-
trialInfo: {
|
|
29
|
-
trial_active: true,
|
|
30
|
-
using_trial_keys: false,
|
|
31
|
-
reason: "Collection has its own provider keys",
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return {
|
|
36
|
-
useTrialKeys: true,
|
|
37
|
-
trialInfo: {
|
|
38
|
-
trial_active: true,
|
|
39
|
-
using_trial_keys: true,
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
return { useTrialKeys: false, trialInfo: {} };
|
|
45
|
-
}
|
|
46
|
-
}
|
|
1
|
+
import { JETTY_TOOLS, jsonResult } from "./tool-definitions.js";
|
|
2
|
+
export { JETTY_TOOLS, JETTY_WEBMCP_TOOLS, getJettyTool, jsonResult } from "./tool-definitions.js";
|
|
47
3
|
export function registerTools(server, client) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
server.tool("list-tasks", "List tasks in a collection", { collection: z.string().describe("Collection name") }, async ({ collection }) => {
|
|
57
|
-
return jsonResult(await client.listTasks(collection));
|
|
58
|
-
});
|
|
59
|
-
server.tool("get-task", "Get task details including workflow definition", {
|
|
60
|
-
collection: z.string().describe("Collection name"),
|
|
61
|
-
task: z.string().describe("Task name"),
|
|
62
|
-
}, async ({ collection, task }) => {
|
|
63
|
-
return jsonResult(await client.getTask(collection, task));
|
|
64
|
-
});
|
|
65
|
-
server.tool("create-task", "Create a new task with a workflow definition", {
|
|
66
|
-
collection: z.string().describe("Collection name"),
|
|
67
|
-
name: z.string().describe("Task name"),
|
|
68
|
-
description: z.string().optional().describe("Task description"),
|
|
69
|
-
workflow: z
|
|
70
|
-
.record(z.unknown())
|
|
71
|
-
.describe("Workflow JSON with init_params, step_configs, and steps"),
|
|
72
|
-
}, async ({ collection, name, description, workflow }) => {
|
|
73
|
-
return jsonResult(await client.createTask(collection, name, workflow, description));
|
|
74
|
-
});
|
|
75
|
-
server.tool("update-task", "Update a task's workflow or description", {
|
|
76
|
-
collection: z.string().describe("Collection name"),
|
|
77
|
-
task: z.string().describe("Task name"),
|
|
78
|
-
workflow: z
|
|
79
|
-
.record(z.unknown())
|
|
80
|
-
.optional()
|
|
81
|
-
.describe("Updated workflow JSON"),
|
|
82
|
-
description: z.string().optional().describe("Updated description"),
|
|
83
|
-
}, async ({ collection, task, workflow, description }) => {
|
|
84
|
-
const updates = {};
|
|
85
|
-
if (workflow)
|
|
86
|
-
updates.workflow = workflow;
|
|
87
|
-
if (description)
|
|
88
|
-
updates.description = description;
|
|
89
|
-
return jsonResult(await client.updateTask(collection, task, updates));
|
|
90
|
-
});
|
|
91
|
-
// ── Trial Keys ────────────────────────────────────────────────
|
|
92
|
-
server.tool("get-trial-status", "Get trial key status for a collection", { collection: z.string().describe("Collection name") }, async ({ collection }) => {
|
|
93
|
-
return jsonResult(await client.getTrialStatus(collection));
|
|
94
|
-
});
|
|
95
|
-
server.tool("activate-trial", "Activate trial keys for a collection", { collection: z.string().describe("Collection name") }, async ({ collection }) => {
|
|
96
|
-
return jsonResult(await client.activateTrial(collection));
|
|
97
|
-
});
|
|
98
|
-
// ── Run Workflows ────────────────────────────────────────────
|
|
99
|
-
server.tool("run-workflow", "Run a workflow asynchronously (returns immediately with workflow_id). Auto-detects trial key eligibility.", {
|
|
100
|
-
collection: z.string().describe("Collection name"),
|
|
101
|
-
task: z.string().describe("Task name"),
|
|
102
|
-
init_params: z
|
|
103
|
-
.record(z.unknown())
|
|
104
|
-
.optional()
|
|
105
|
-
.describe("Input parameters for the workflow"),
|
|
106
|
-
}, async ({ collection, task, init_params }) => {
|
|
107
|
-
const { useTrialKeys, trialInfo } = await detectTrialEligibility(client, collection);
|
|
108
|
-
const result = await client.runWorkflow(collection, task, init_params, useTrialKeys);
|
|
109
|
-
return jsonResult({ ...trialInfo, result });
|
|
110
|
-
});
|
|
111
|
-
server.tool("run-workflow-sync", "Run a workflow synchronously (blocks until completion, may take 30-60s). Auto-detects trial key eligibility.", {
|
|
112
|
-
collection: z.string().describe("Collection name"),
|
|
113
|
-
task: z.string().describe("Task name"),
|
|
114
|
-
init_params: z
|
|
115
|
-
.record(z.unknown())
|
|
116
|
-
.optional()
|
|
117
|
-
.describe("Input parameters for the workflow"),
|
|
118
|
-
}, async ({ collection, task, init_params }) => {
|
|
119
|
-
const { useTrialKeys, trialInfo } = await detectTrialEligibility(client, collection);
|
|
120
|
-
const result = await client.runWorkflowSync(collection, task, init_params, useTrialKeys);
|
|
121
|
-
return jsonResult({ ...trialInfo, result });
|
|
122
|
-
});
|
|
123
|
-
// ── Trajectories ─────────────────────────────────────────────
|
|
124
|
-
server.tool("list-trajectories", "List recent workflow runs (trajectories) for a task", {
|
|
125
|
-
collection: z.string().describe("Collection name"),
|
|
126
|
-
task: z.string().describe("Task name"),
|
|
127
|
-
limit: z.number().optional().default(10).describe("Max results"),
|
|
128
|
-
page: z.number().optional().default(1).describe("Page number"),
|
|
129
|
-
}, async ({ collection, task, limit, page }) => {
|
|
130
|
-
return jsonResult(await client.listTrajectories(collection, task, limit, page));
|
|
131
|
-
});
|
|
132
|
-
server.tool("get-trajectory", "Get full details of a specific workflow run", {
|
|
133
|
-
collection: z.string().describe("Collection name"),
|
|
134
|
-
task: z.string().describe("Task name"),
|
|
135
|
-
trajectory_id: z.string().describe("Trajectory ID"),
|
|
136
|
-
}, async ({ collection, task, trajectory_id }) => {
|
|
137
|
-
return jsonResult(await client.getTrajectory(collection, task, trajectory_id));
|
|
138
|
-
});
|
|
139
|
-
// ── Stats ────────────────────────────────────────────────────
|
|
140
|
-
server.tool("get-stats", "Get execution statistics for a task", {
|
|
141
|
-
collection: z.string().describe("Collection name"),
|
|
142
|
-
task: z.string().describe("Task name"),
|
|
143
|
-
}, async ({ collection, task }) => {
|
|
144
|
-
return jsonResult(await client.getStats(collection, task));
|
|
145
|
-
});
|
|
146
|
-
// ── Labels ───────────────────────────────────────────────────
|
|
147
|
-
server.tool("add-label", "Add a label to a trajectory (e.g., quality=high)", {
|
|
148
|
-
collection: z.string().describe("Collection name"),
|
|
149
|
-
task: z.string().describe("Task name"),
|
|
150
|
-
trajectory_id: z.string().describe("Trajectory ID"),
|
|
151
|
-
key: z.string().describe("Label key (e.g., 'quality', 'status')"),
|
|
152
|
-
value: z.string().describe("Label value (e.g., 'high', 'approved')"),
|
|
153
|
-
author: z.string().describe("Author email"),
|
|
154
|
-
}, async ({ collection, task, trajectory_id, key, value, author }) => {
|
|
155
|
-
return jsonResult(await client.addLabel(collection, task, trajectory_id, key, value, author));
|
|
156
|
-
});
|
|
157
|
-
// ── Step Templates ───────────────────────────────────────────
|
|
158
|
-
server.tool("list-step-templates", "List all available workflow step templates", {}, async () => {
|
|
159
|
-
return jsonResult(await client.listStepTemplates());
|
|
160
|
-
});
|
|
161
|
-
server.tool("get-step-template", "Get details and schema for a step template", { name: z.string().describe("Step template activity name") }, async ({ name }) => {
|
|
162
|
-
return jsonResult(await client.getStepTemplate(name));
|
|
163
|
-
});
|
|
164
|
-
// ── Environment Variables ─────────────────────────────────────
|
|
165
|
-
server.tool("check-secrets", "Check which environment variables a collection has configured vs. what a runbook needs", {
|
|
166
|
-
collection: z.string().describe("Collection name"),
|
|
167
|
-
required_keys: z
|
|
168
|
-
.array(z.string())
|
|
169
|
-
.describe("Environment variable names the runbook requires"),
|
|
170
|
-
}, async ({ collection, required_keys }) => {
|
|
171
|
-
const col = (await client.getCollectionEnvironment(collection));
|
|
172
|
-
const envVars = (col.environment_variables || {});
|
|
173
|
-
const configured = Object.keys(envVars);
|
|
174
|
-
const missing = required_keys.filter((k) => !configured.includes(k));
|
|
175
|
-
return jsonResult({
|
|
176
|
-
configured,
|
|
177
|
-
missing,
|
|
178
|
-
ready: missing.length === 0,
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
server.tool("set-environment-vars", "Set environment variables on a collection (merge semantics, pass null to delete a key)", {
|
|
182
|
-
collection: z.string().describe("Collection name"),
|
|
183
|
-
variables: z
|
|
184
|
-
.record(z.string().nullable())
|
|
185
|
-
.describe("Key-value pairs to set (null to delete)"),
|
|
186
|
-
}, async ({ collection, variables }) => {
|
|
187
|
-
return jsonResult(await client.setEnvironmentVars(collection, variables));
|
|
188
|
-
});
|
|
189
|
-
// ── Routines (Scheduled Runs) ─────────────────────────────────
|
|
190
|
-
const cadenceSchema = z
|
|
191
|
-
.object({
|
|
192
|
-
type: z
|
|
193
|
-
.enum(["manual", "hourly", "daily", "weekdays", "weekly"])
|
|
194
|
-
.describe("Cadence type. 'manual' creates a saved invocation preset (no schedule); the others register a Temporal schedule."),
|
|
195
|
-
hour_utc: z
|
|
196
|
-
.number()
|
|
197
|
-
.int()
|
|
198
|
-
.min(0)
|
|
199
|
-
.max(23)
|
|
200
|
-
.optional()
|
|
201
|
-
.describe("Hour of day in UTC (0-23). Required for daily/weekdays/weekly."),
|
|
202
|
-
minute_utc: z
|
|
203
|
-
.number()
|
|
204
|
-
.int()
|
|
205
|
-
.min(0)
|
|
206
|
-
.max(59)
|
|
207
|
-
.optional()
|
|
208
|
-
.describe("Minute of the hour in UTC (0-59). Defaults to 0."),
|
|
209
|
-
day_of_week: z
|
|
210
|
-
.enum(["mon", "tue", "wed", "thu", "fri", "sat", "sun"])
|
|
211
|
-
.optional()
|
|
212
|
-
.describe("Day of week. Required for weekly cadence."),
|
|
213
|
-
})
|
|
214
|
-
.describe("Cadence config. Examples: {type:'hourly', minute_utc:15}, {type:'daily', hour_utc:9}, {type:'weekly', day_of_week:'mon', hour_utc:9}.");
|
|
215
|
-
server.tool("list-routines", "List scheduled routines for a collection (optionally scoped to a task)", {
|
|
216
|
-
collection: z.string().describe("Collection name"),
|
|
217
|
-
task: z
|
|
218
|
-
.string()
|
|
219
|
-
.optional()
|
|
220
|
-
.describe("Task name (omit to list all routines in the collection)"),
|
|
221
|
-
}, async ({ collection, task }) => {
|
|
222
|
-
return jsonResult(await client.listRoutines(collection, task));
|
|
223
|
-
});
|
|
224
|
-
server.tool("get-routine", "Get a single routine including resolved next_run_at from Temporal", {
|
|
225
|
-
collection: z.string().describe("Collection name"),
|
|
226
|
-
task: z.string().describe("Task name"),
|
|
227
|
-
name: z.string().describe("Routine name (unique per collection+task)"),
|
|
228
|
-
}, async ({ collection, task, name }) => {
|
|
229
|
-
return jsonResult(await client.getRoutine(collection, task, name));
|
|
230
|
-
});
|
|
231
|
-
server.tool("create-routine", "Create a scheduled routine for an existing task. init_params_overrides keys must be a subset of task.workflow.init_params.", {
|
|
232
|
-
collection: z.string().describe("Collection name"),
|
|
233
|
-
task: z.string().describe("Task name"),
|
|
234
|
-
name: z.string().describe("Routine name (slug, unique per task)"),
|
|
235
|
-
cadence: cadenceSchema,
|
|
236
|
-
init_params_overrides: z
|
|
237
|
-
.record(z.unknown())
|
|
238
|
-
.optional()
|
|
239
|
-
.describe("Init param overrides. Keys must be a subset of task.workflow.init_params; unknown keys return 400."),
|
|
240
|
-
secret_params: z
|
|
241
|
-
.record(z.unknown())
|
|
242
|
-
.optional()
|
|
243
|
-
.describe("Secrets injected at fire time (encrypted at rest, never logged)."),
|
|
244
|
-
paused: z
|
|
245
|
-
.boolean()
|
|
246
|
-
.optional()
|
|
247
|
-
.describe("Create the routine in paused state"),
|
|
248
|
-
webhook_url: z
|
|
249
|
-
.string()
|
|
250
|
-
.optional()
|
|
251
|
-
.describe("Optional webhook to notify on each run"),
|
|
252
|
-
webhook_secret: z
|
|
253
|
-
.string()
|
|
254
|
-
.optional()
|
|
255
|
-
.describe("Optional shared secret for webhook signing"),
|
|
256
|
-
}, async ({ collection, task, name, cadence, init_params_overrides, secret_params, paused, webhook_url, webhook_secret, }) => {
|
|
257
|
-
const body = { name, cadence };
|
|
258
|
-
if (init_params_overrides !== undefined)
|
|
259
|
-
body.init_params_overrides = init_params_overrides;
|
|
260
|
-
if (secret_params !== undefined)
|
|
261
|
-
body.secret_params = secret_params;
|
|
262
|
-
if (paused !== undefined)
|
|
263
|
-
body.paused = paused;
|
|
264
|
-
if (webhook_url !== undefined)
|
|
265
|
-
body.webhook_url = webhook_url;
|
|
266
|
-
if (webhook_secret !== undefined)
|
|
267
|
-
body.webhook_secret = webhook_secret;
|
|
268
|
-
return jsonResult(await client.createRoutine(collection, task, body));
|
|
269
|
-
});
|
|
270
|
-
server.tool("update-routine", "Patch a routine — provide any subset of cadence/overrides/secrets/paused/webhook fields", {
|
|
271
|
-
collection: z.string().describe("Collection name"),
|
|
272
|
-
task: z.string().describe("Task name"),
|
|
273
|
-
name: z.string().describe("Routine name"),
|
|
274
|
-
cadence: cadenceSchema.optional(),
|
|
275
|
-
init_params_overrides: z
|
|
276
|
-
.record(z.unknown())
|
|
277
|
-
.optional()
|
|
278
|
-
.describe("Replace init param overrides"),
|
|
279
|
-
secret_params: z
|
|
280
|
-
.record(z.unknown())
|
|
281
|
-
.optional()
|
|
282
|
-
.describe("Replace secret params"),
|
|
283
|
-
paused: z.boolean().optional().describe("Pause/resume the routine"),
|
|
284
|
-
webhook_url: z.string().optional().describe("Update webhook URL"),
|
|
285
|
-
webhook_secret: z
|
|
286
|
-
.string()
|
|
287
|
-
.optional()
|
|
288
|
-
.describe("Update webhook signing secret"),
|
|
289
|
-
}, async ({ collection, task, name, cadence, init_params_overrides, secret_params, paused, webhook_url, webhook_secret, }) => {
|
|
290
|
-
const patch = {};
|
|
291
|
-
if (cadence !== undefined)
|
|
292
|
-
patch.cadence = cadence;
|
|
293
|
-
if (init_params_overrides !== undefined)
|
|
294
|
-
patch.init_params_overrides = init_params_overrides;
|
|
295
|
-
if (secret_params !== undefined)
|
|
296
|
-
patch.secret_params = secret_params;
|
|
297
|
-
if (paused !== undefined)
|
|
298
|
-
patch.paused = paused;
|
|
299
|
-
if (webhook_url !== undefined)
|
|
300
|
-
patch.webhook_url = webhook_url;
|
|
301
|
-
if (webhook_secret !== undefined)
|
|
302
|
-
patch.webhook_secret = webhook_secret;
|
|
303
|
-
return jsonResult(await client.updateRoutine(collection, task, name, patch));
|
|
304
|
-
});
|
|
305
|
-
server.tool("delete-routine", "Delete a routine and unregister its Temporal schedule", {
|
|
306
|
-
collection: z.string().describe("Collection name"),
|
|
307
|
-
task: z.string().describe("Task name"),
|
|
308
|
-
name: z.string().describe("Routine name"),
|
|
309
|
-
}, async ({ collection, task, name }) => {
|
|
310
|
-
return jsonResult(await client.deleteRoutine(collection, task, name));
|
|
311
|
-
});
|
|
312
|
-
server.tool("pause-routine", "Pause a routine (stops future fires until resumed)", {
|
|
313
|
-
collection: z.string().describe("Collection name"),
|
|
314
|
-
task: z.string().describe("Task name"),
|
|
315
|
-
name: z.string().describe("Routine name"),
|
|
316
|
-
}, async ({ collection, task, name }) => {
|
|
317
|
-
return jsonResult(await client.pauseRoutine(collection, task, name));
|
|
318
|
-
});
|
|
319
|
-
server.tool("resume-routine", "Resume a paused routine", {
|
|
320
|
-
collection: z.string().describe("Collection name"),
|
|
321
|
-
task: z.string().describe("Task name"),
|
|
322
|
-
name: z.string().describe("Routine name"),
|
|
323
|
-
}, async ({ collection, task, name }) => {
|
|
324
|
-
return jsonResult(await client.resumeRoutine(collection, task, name));
|
|
325
|
-
});
|
|
326
|
-
server.tool("run-routine-now", "Fire a routine immediately, bypassing the schedule. Returns workflow_id (parity with run-workflow).", {
|
|
327
|
-
collection: z.string().describe("Collection name"),
|
|
328
|
-
task: z.string().describe("Task name"),
|
|
329
|
-
name: z.string().describe("Routine name"),
|
|
330
|
-
}, async ({ collection, task, name }) => {
|
|
331
|
-
return jsonResult(await client.runRoutineNow(collection, task, name));
|
|
332
|
-
});
|
|
333
|
-
server.tool("list-routine-runs", "List recent trajectories triggered by this routine (filtered by triggered_by_routine_id)", {
|
|
334
|
-
collection: z.string().describe("Collection name"),
|
|
335
|
-
task: z.string().describe("Task name"),
|
|
336
|
-
name: z.string().describe("Routine name"),
|
|
337
|
-
limit: z.number().optional().describe("Max results"),
|
|
338
|
-
}, async ({ collection, task, name, limit }) => {
|
|
339
|
-
return jsonResult(await client.listRoutineRuns(collection, task, name, limit));
|
|
340
|
-
});
|
|
4
|
+
for (const tool of JETTY_TOOLS) {
|
|
5
|
+
server.registerTool(tool.name, {
|
|
6
|
+
title: tool.title,
|
|
7
|
+
description: tool.description,
|
|
8
|
+
inputSchema: tool.inputSchema,
|
|
9
|
+
annotations: tool.annotations,
|
|
10
|
+
}, async (args) => jsonResult(await tool.handler(client, args)));
|
|
11
|
+
}
|
|
341
12
|
}
|
|
342
13
|
//# sourceMappingURL=tools.js.map
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGlG,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAsB;IACrE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAC7D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/webmcp.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { JettyApiClient } from "./api-client.js";
|
|
2
|
+
import { type JettyToolDefinition, type ToolAnnotations, type ToolResult } from "./tool-definitions.js";
|
|
3
|
+
export interface WebMcpTool {
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
/** JSON Schema (draft-07) for the tool's input. */
|
|
7
|
+
inputSchema: Record<string, unknown>;
|
|
8
|
+
annotations: ToolAnnotations;
|
|
9
|
+
execute: (input?: Record<string, unknown>) => Promise<ToolResult>;
|
|
10
|
+
}
|
|
11
|
+
/** The subset of `ModelContext` this module touches, in either API shape. */
|
|
12
|
+
export interface ModelContextLike {
|
|
13
|
+
registerTool?: (tool: WebMcpTool, options?: {
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
}) => unknown;
|
|
16
|
+
provideContext?: (context: {
|
|
17
|
+
tools: WebMcpTool[];
|
|
18
|
+
}) => unknown;
|
|
19
|
+
clearContext?: () => unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface JettyWebMcpOptions {
|
|
22
|
+
/** Only these tool names (default: every tool). */
|
|
23
|
+
include?: string[];
|
|
24
|
+
/** Never these tool names. */
|
|
25
|
+
exclude?: string[];
|
|
26
|
+
/** Only tools whose annotations say readOnlyHint (list/get). */
|
|
27
|
+
readOnly?: boolean;
|
|
28
|
+
/** Prefix added to every tool name, e.g. "jetty_". Default: none. */
|
|
29
|
+
namePrefix?: string;
|
|
30
|
+
}
|
|
31
|
+
/** JSON Schema for a definition's zod input shape. */
|
|
32
|
+
export declare function toolInputJsonSchema(tool: JettyToolDefinition): Record<string, unknown>;
|
|
33
|
+
/** One WebMCP tool descriptor for a definition, executing through `client`. */
|
|
34
|
+
export declare function toWebMcpTool(tool: JettyToolDefinition, client: JettyApiClient, namePrefix?: string): WebMcpTool;
|
|
35
|
+
/**
|
|
36
|
+
* The catalog as WebMCP tool descriptors, filtered per `options`. Tools the
|
|
37
|
+
* catalog marks `webmcp: false` (trial-key management) are never exposed,
|
|
38
|
+
* even when `include` names them.
|
|
39
|
+
*/
|
|
40
|
+
export declare function jettyWebMcpTools(client: JettyApiClient, options?: JettyWebMcpOptions): WebMcpTool[];
|
|
41
|
+
/** `document.modelContext` first (current spec), then `navigator.modelContext`. */
|
|
42
|
+
export declare function findModelContext(globals?: {
|
|
43
|
+
document?: unknown;
|
|
44
|
+
navigator?: unknown;
|
|
45
|
+
}): ModelContextLike | null;
|
|
46
|
+
export interface RegisterJettyWebMcpResult {
|
|
47
|
+
/** Which API shape was used, or null when the context offers neither. */
|
|
48
|
+
via: "registerTool" | "provideContext" | null;
|
|
49
|
+
/** Names of the tools registered. */
|
|
50
|
+
tools: string[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register the (filtered) catalog on `modelContext`. With `registerTool`,
|
|
54
|
+
* `signal` unregisters the tools when aborted; with `provideContext`, abort
|
|
55
|
+
* calls `clearContext()` when the context has one. A signal that is already
|
|
56
|
+
* aborted registers nothing (`via: null`).
|
|
57
|
+
*/
|
|
58
|
+
export declare function registerJettyWebMcpTools(modelContext: ModelContextLike, client: JettyApiClient, options?: JettyWebMcpOptions & {
|
|
59
|
+
signal?: AbortSignal;
|
|
60
|
+
}): RegisterJettyWebMcpResult;
|
|
61
|
+
//# sourceMappingURL=webmcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webmcp.d.ts","sourceRoot":"","sources":["../src/webmcp.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,EAAE,eAAe,CAAC;IAC7B,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACnE;AAED,6EAA6E;AAC7E,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC;IACjF,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC;IAC/D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOtF;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,cAAc,EACtB,UAAU,SAAK,GACd,UAAU,CAiBZ;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,kBAAuB,GAC/B,UAAU,EAAE,CASd;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAGjD,GACA,gBAAgB,GAAG,IAAI,CAYzB;AAED,MAAM,WAAW,yBAAyB;IACxC,yEAAyE;IACzE,GAAG,EAAE,cAAc,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAC9C,qCAAqC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,gBAAgB,EAC9B,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,kBAAkB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAC1D,yBAAyB,CAoB3B"}
|
package/dist/webmcp.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebMCP adapter: the Jetty tool catalog on a page's `modelContext`
|
|
3
|
+
* (https://webmachinelearning.github.io/webmcp/). Browser-safe.
|
|
4
|
+
*
|
|
5
|
+
* A site that already authenticates the visitor registers the same tools the
|
|
6
|
+
* stdio MCP server offers, executed with the visitor's own session:
|
|
7
|
+
*
|
|
8
|
+
* const client = new JettyApiClient({ token: () => session.getToken(), ... });
|
|
9
|
+
* registerJettyWebMcpTools(navigator.modelContext, client, { signal });
|
|
10
|
+
*
|
|
11
|
+
* Both API shapes are handled: the current `registerTool(tool, { signal })`
|
|
12
|
+
* and the earlier `provideContext({ tools })`.
|
|
13
|
+
*/
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
16
|
+
import { JETTY_WEBMCP_TOOLS, jsonResult, } from "./tool-definitions.js";
|
|
17
|
+
/** JSON Schema for a definition's zod input shape. */
|
|
18
|
+
export function toolInputJsonSchema(tool) {
|
|
19
|
+
const schema = zodToJsonSchema(z.object(tool.inputSchema), {
|
|
20
|
+
target: "jsonSchema7",
|
|
21
|
+
$refStrategy: "none",
|
|
22
|
+
});
|
|
23
|
+
delete schema.$schema;
|
|
24
|
+
return schema;
|
|
25
|
+
}
|
|
26
|
+
/** One WebMCP tool descriptor for a definition, executing through `client`. */
|
|
27
|
+
export function toWebMcpTool(tool, client, namePrefix = "") {
|
|
28
|
+
const parser = z.object(tool.inputSchema);
|
|
29
|
+
return {
|
|
30
|
+
name: `${namePrefix}${tool.name}`,
|
|
31
|
+
description: tool.description,
|
|
32
|
+
inputSchema: toolInputJsonSchema(tool),
|
|
33
|
+
annotations: tool.annotations,
|
|
34
|
+
execute: async (input) => {
|
|
35
|
+
try {
|
|
36
|
+
const args = parser.parse(input ?? {});
|
|
37
|
+
return jsonResult(await tool.handler(client, args));
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
41
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The catalog as WebMCP tool descriptors, filtered per `options`. Tools the
|
|
48
|
+
* catalog marks `webmcp: false` (trial-key management) are never exposed,
|
|
49
|
+
* even when `include` names them.
|
|
50
|
+
*/
|
|
51
|
+
export function jettyWebMcpTools(client, options = {}) {
|
|
52
|
+
const include = options.include ? new Set(options.include) : null;
|
|
53
|
+
const exclude = new Set(options.exclude ?? []);
|
|
54
|
+
return JETTY_WEBMCP_TOOLS.filter((tool) => (!include || include.has(tool.name)) &&
|
|
55
|
+
!exclude.has(tool.name) &&
|
|
56
|
+
(!options.readOnly || tool.annotations.readOnlyHint)).map((tool) => toWebMcpTool(tool, client, options.namePrefix));
|
|
57
|
+
}
|
|
58
|
+
/** `document.modelContext` first (current spec), then `navigator.modelContext`. */
|
|
59
|
+
export function findModelContext(globals = globalThis) {
|
|
60
|
+
for (const host of [globals.document, globals.navigator]) {
|
|
61
|
+
const candidate = host?.modelContext;
|
|
62
|
+
if (candidate &&
|
|
63
|
+
(typeof candidate.registerTool === "function" ||
|
|
64
|
+
typeof candidate.provideContext === "function")) {
|
|
65
|
+
return candidate;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Register the (filtered) catalog on `modelContext`. With `registerTool`,
|
|
72
|
+
* `signal` unregisters the tools when aborted; with `provideContext`, abort
|
|
73
|
+
* calls `clearContext()` when the context has one. A signal that is already
|
|
74
|
+
* aborted registers nothing (`via: null`).
|
|
75
|
+
*/
|
|
76
|
+
export function registerJettyWebMcpTools(modelContext, client, options = {}) {
|
|
77
|
+
// An AbortSignal never replays an earlier abort, so a signal that is
|
|
78
|
+
// already aborted would register tools nothing ever unregisters.
|
|
79
|
+
if (options.signal?.aborted)
|
|
80
|
+
return { via: null, tools: [] };
|
|
81
|
+
const tools = jettyWebMcpTools(client, options);
|
|
82
|
+
const names = tools.map((tool) => tool.name);
|
|
83
|
+
if (typeof modelContext.registerTool === "function") {
|
|
84
|
+
for (const tool of tools) {
|
|
85
|
+
modelContext.registerTool(tool, options.signal ? { signal: options.signal } : undefined);
|
|
86
|
+
}
|
|
87
|
+
return { via: "registerTool", tools: names };
|
|
88
|
+
}
|
|
89
|
+
if (typeof modelContext.provideContext === "function") {
|
|
90
|
+
modelContext.provideContext({ tools });
|
|
91
|
+
if (options.signal && typeof modelContext.clearContext === "function") {
|
|
92
|
+
options.signal.addEventListener("abort", () => modelContext.clearContext?.(), { once: true });
|
|
93
|
+
}
|
|
94
|
+
return { via: "provideContext", tools: names };
|
|
95
|
+
}
|
|
96
|
+
return { via: null, tools: [] };
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=webmcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webmcp.js","sourceRoot":"","sources":["../src/webmcp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jetty-mcp-server",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "MCP server for Jetty
|
|
3
|
+
"version": "1.1.1",
|
|
4
|
+
"description": "MCP server for the Jetty agent workload platform, plus the same tools for WebMCP in the browser",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"jetty-mcp-server": "dist/index.js"
|
|
8
8
|
},
|
|
9
|
-
"main": "dist/
|
|
9
|
+
"main": "dist/lib.js",
|
|
10
|
+
"types": "dist/lib.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/lib.d.ts",
|
|
14
|
+
"default": "./dist/lib.js"
|
|
15
|
+
},
|
|
16
|
+
"./client": {
|
|
17
|
+
"types": "./dist/client.d.ts",
|
|
18
|
+
"default": "./dist/client.js"
|
|
19
|
+
},
|
|
20
|
+
"./api-client": {
|
|
21
|
+
"types": "./dist/api-client.d.ts",
|
|
22
|
+
"default": "./dist/api-client.js"
|
|
23
|
+
},
|
|
24
|
+
"./tool-definitions": {
|
|
25
|
+
"types": "./dist/tool-definitions.d.ts",
|
|
26
|
+
"default": "./dist/tool-definitions.js"
|
|
27
|
+
},
|
|
28
|
+
"./tools": {
|
|
29
|
+
"types": "./dist/tools.d.ts",
|
|
30
|
+
"default": "./dist/tools.js"
|
|
31
|
+
},
|
|
32
|
+
"./webmcp": {
|
|
33
|
+
"types": "./dist/webmcp.d.ts",
|
|
34
|
+
"default": "./dist/webmcp.js"
|
|
35
|
+
},
|
|
36
|
+
"./package.json": "./package.json"
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"dist",
|
|
40
|
+
"README.md"
|
|
41
|
+
],
|
|
42
|
+
"sideEffects": [
|
|
43
|
+
"./dist/index.js"
|
|
44
|
+
],
|
|
10
45
|
"scripts": {
|
|
11
46
|
"build": "tsc",
|
|
12
47
|
"dev": "tsc --watch",
|
|
@@ -15,11 +50,19 @@
|
|
|
15
50
|
"test": "node --test 'tests/**/*.test.mjs'",
|
|
16
51
|
"prepublishOnly": "npm run build"
|
|
17
52
|
},
|
|
18
|
-
"keywords": [
|
|
53
|
+
"keywords": [
|
|
54
|
+
"mcp",
|
|
55
|
+
"webmcp",
|
|
56
|
+
"jetty",
|
|
57
|
+
"ai",
|
|
58
|
+
"agents",
|
|
59
|
+
"runbooks"
|
|
60
|
+
],
|
|
19
61
|
"license": "MIT",
|
|
20
62
|
"dependencies": {
|
|
21
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
22
|
-
"zod": "^3.24.4"
|
|
63
|
+
"@modelcontextprotocol/sdk": "^1.13.0",
|
|
64
|
+
"zod": "^3.24.4",
|
|
65
|
+
"zod-to-json-schema": "^3.24.1"
|
|
23
66
|
},
|
|
24
67
|
"devDependencies": {
|
|
25
68
|
"@types/node": "^22.15.3",
|