myhotlunchbox-mcp 1.2.4 → 1.2.5
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +2 -1
- package/dist/bundle.js +32 -4
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "MCP server for My Hot Lunchbox — order school lunches, manage students, and track payments via natural language",
|
|
10
|
-
"version": "1.2.
|
|
10
|
+
"version": "1.2.5"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "My Hot Lunchbox",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "MCP server for My Hot Lunchbox — school lunch calendar, ordering, and payments. Signs in server-side with the parent account credentials.",
|
|
18
|
-
"version": "1.2.
|
|
18
|
+
"version": "1.2.5",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "myhotlunchbox-mcp",
|
|
3
3
|
"displayName": "My Hot Lunchbox",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.5",
|
|
5
5
|
"description": "MCP server for My Hot Lunchbox — order school lunches, manage students, and track payments via natural language",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Hall",
|
package/README.md
CHANGED
|
@@ -87,7 +87,8 @@ changing any argument between the two calls is refused (`DRAFT_CHANGED`).
|
|
|
87
87
|
|
|
88
88
|
| variable | default | |
|
|
89
89
|
|---|---|---|
|
|
90
|
-
| `MCP_CONFIRM_MODE` | `ask-user` | What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). `ask-user`: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. `auto`: the same two steps, but the model may use the token after reviewing the preview itself. `refuse`: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt
|
|
90
|
+
| `MCP_CONFIRM_MODE` | `ask-user` | What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). `ask-user`: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. `auto`: the same two steps, but the model may use the token after reviewing the preview itself. `refuse`: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless `MCP_CONFIRM_ELICITATION=off`. An unrecognised value is treated as `refuse`. |
|
|
91
|
+
| `MCP_CONFIRM_ELICITATION` | `on` | `off` never sends a confirmation prompt, so every client gets the `MCP_CONFIRM_MODE` path. Set it for a client that declares it can show prompts but never does (the gated call hangs — opencode 2.0.x). Any other value stays `on`, with a stderr warning. |
|
|
91
92
|
| `MCP_CONFIRM_TTL_SECONDS` | `600` | How long a token stays valid. |
|
|
92
93
|
| `MCP_CONFIRM_SECRET` | random per process | Signing key; set it only if tokens must survive a server restart. |
|
|
93
94
|
|
package/dist/bundle.js
CHANGED
|
@@ -58002,6 +58002,7 @@ function escapeKey(key) {
|
|
|
58002
58002
|
var DEFAULT_REQUEST_KEY = "confirmation";
|
|
58003
58003
|
var DEFAULT_CONFIRMATION_LABEL = "Confirm this action should proceed.";
|
|
58004
58004
|
var UNSUPPORTED_NOTE = "Nothing was done because this client cannot show a confirmation prompt (it declares no MCP elicitation capability), and this action is never taken without one";
|
|
58005
|
+
var DISABLED_NOTE = "Nothing was done because confirmation prompts are turned off for this server, and this action is never taken without one";
|
|
58005
58006
|
var STATE_PREFIX = "mcpu.confirm.v1.";
|
|
58006
58007
|
function bindingKey(binding) {
|
|
58007
58008
|
if (binding.ttlSeconds !== void 0 && !(Number.isFinite(binding.ttlSeconds) && binding.ttlSeconds > 0)) {
|
|
@@ -58074,6 +58075,15 @@ ${JSON.stringify(preview, null, 2)}`,
|
|
|
58074
58075
|
};
|
|
58075
58076
|
const response = inputResponse(ctx.mcpReq.inputResponses, requestKey);
|
|
58076
58077
|
const accepted = acceptedContent(ctx.mcpReq.inputResponses, requestKey, confirmationSchema);
|
|
58078
|
+
if (options.elicitation === false) {
|
|
58079
|
+
return textResult({
|
|
58080
|
+
confirmed: false,
|
|
58081
|
+
dispatched: false,
|
|
58082
|
+
action: options.action,
|
|
58083
|
+
reason: "confirmation-unsupported",
|
|
58084
|
+
note: options.unsupportedNote ? `${DISABLED_NOTE}. ${options.unsupportedNote}` : `${DISABLED_NOTE}.`
|
|
58085
|
+
});
|
|
58086
|
+
}
|
|
58077
58087
|
if (response.kind === "missing") {
|
|
58078
58088
|
if (callerAcceptsFormElicitation(ctx) === false) {
|
|
58079
58089
|
return textResult({
|
|
@@ -58268,7 +58278,7 @@ async function tokenConfirmation(action, fb) {
|
|
|
58268
58278
|
}
|
|
58269
58279
|
async function requireConfirmationWithFallback(ctx, options) {
|
|
58270
58280
|
const { tokenFallback, ...confirmation } = options;
|
|
58271
|
-
if (tokenFallback && callerAcceptsFormElicitation(ctx) === false) {
|
|
58281
|
+
if (tokenFallback && (options.elicitation === false || callerAcceptsFormElicitation(ctx) === false)) {
|
|
58272
58282
|
return tokenConfirmation(options.action, tokenFallback);
|
|
58273
58283
|
}
|
|
58274
58284
|
return requireConfirmation(ctx, confirmation);
|
|
@@ -58419,6 +58429,20 @@ function readConfirmMode(env = process.env) {
|
|
|
58419
58429
|
}
|
|
58420
58430
|
return "refuse";
|
|
58421
58431
|
}
|
|
58432
|
+
function readConfirmElicitation(env = process.env) {
|
|
58433
|
+
const raw = readEnvVar("MCP_CONFIRM_ELICITATION", { env })?.trim().toLowerCase();
|
|
58434
|
+
if (!raw || raw === "on")
|
|
58435
|
+
return "on";
|
|
58436
|
+
if (raw === "off")
|
|
58437
|
+
return "off";
|
|
58438
|
+
const key = `elicitation:${raw}`;
|
|
58439
|
+
if (!warned.has(key)) {
|
|
58440
|
+
warned.add(key);
|
|
58441
|
+
process.stderr.write(`MCP_CONFIRM_ELICITATION="${raw}" is not one of on, off; treating it as on.
|
|
58442
|
+
`);
|
|
58443
|
+
}
|
|
58444
|
+
return "on";
|
|
58445
|
+
}
|
|
58422
58446
|
function readConfirmTtl(env) {
|
|
58423
58447
|
const raw = readEnvVar("MCP_CONFIRM_TTL_SECONDS", { env })?.trim();
|
|
58424
58448
|
if (!raw)
|
|
@@ -58463,6 +58487,7 @@ function spentTokenStoreFromEnv(env = process.env) {
|
|
|
58463
58487
|
}
|
|
58464
58488
|
var CONFIRM_TOKEN_AUTO_INSTRUCTION = "Nothing has been done yet. Review this preview; if it is what was intended, call again with the same arguments plus confirmToken. (This server runs with MCP_CONFIRM_MODE=auto, so the user's approval in chat is not required.)";
|
|
58465
58489
|
var REFUSE_HINT = "Set MCP_CONFIRM_MODE=ask-user on the server to allow two-step confirmation instead.";
|
|
58490
|
+
var ELICITATION_OFF_HINT = "MCP_CONFIRM_ELICITATION=off on the server turns confirmation prompts off.";
|
|
58466
58491
|
var BAD_TTL_HINT = "MCP_CONFIRM_TTL_SECONDS on the server is not a positive whole number of seconds; fix it to allow two-step confirmation.";
|
|
58467
58492
|
function boundArgs(args) {
|
|
58468
58493
|
if (args === null || typeof args !== "object" || Array.isArray(args) || !("confirmToken" in args))
|
|
@@ -58476,10 +58501,13 @@ function confirmationFromEnv(options) {
|
|
|
58476
58501
|
const spent = callerSpent ?? spentTokenStoreFromEnv(env);
|
|
58477
58502
|
const mode = readConfirmMode(env);
|
|
58478
58503
|
const ttlSeconds = readConfirmTtl(env);
|
|
58504
|
+
const elicitationOff = readConfirmElicitation(env) === "off";
|
|
58479
58505
|
const bound = args === void 0 ? void 0 : boundArgs(args);
|
|
58480
|
-
const
|
|
58506
|
+
const bindingAdded = bound === void 0 || rest.binding ? rest : { ...rest, binding: { key: confirmKeyFromEnv(env), args: bound, ttlSeconds: ttlSeconds ?? DEFAULT_TTL_SECONDS2 } };
|
|
58507
|
+
const confirmation = elicitationOff ? { ...bindingAdded, elicitation: false } : bindingAdded;
|
|
58481
58508
|
if (mode === "refuse" || ttlSeconds === void 0) {
|
|
58482
|
-
const
|
|
58509
|
+
const reason = mode === "refuse" ? REFUSE_HINT : BAD_TTL_HINT;
|
|
58510
|
+
const hint = elicitationOff ? `${ELICITATION_OFF_HINT} ${reason}` : reason;
|
|
58483
58511
|
return {
|
|
58484
58512
|
...confirmation,
|
|
58485
58513
|
unsupportedNote: confirmation.unsupportedNote ? `${confirmation.unsupportedNote} ${hint}` : hint
|
|
@@ -59931,7 +59959,7 @@ var MhlbClient = class {
|
|
|
59931
59959
|
};
|
|
59932
59960
|
|
|
59933
59961
|
// src/version.ts
|
|
59934
|
-
var VERSION = "1.2.
|
|
59962
|
+
var VERSION = "1.2.5";
|
|
59935
59963
|
|
|
59936
59964
|
// src/tools/_shared.ts
|
|
59937
59965
|
var CONFIRMS = ` ${CONFIRM_FLOW_SENTENCE}`;
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Single source of truth for the server version; release-please rewrites it. */
|
|
2
|
-
export const VERSION = '1.2.
|
|
2
|
+
export const VERSION = '1.2.5'; // x-release-please-version
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "myhotlunchbox-mcp",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.5",
|
|
4
4
|
"mcpName": "io.github.chrischall/myhotlunchbox-mcp",
|
|
5
5
|
"description": "My Hot Lunchbox MCP server for Claude — developed and maintained by AI (Claude Code)",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"capture:writes": "node scripts/capture-writes.mjs"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@chrischall/mcp-utils": "^2.
|
|
48
|
+
"@chrischall/mcp-utils": "^2.15.0",
|
|
49
49
|
"@modelcontextprotocol/server": "^2.3.0",
|
|
50
50
|
"dotenv": "^18.0.0",
|
|
51
51
|
"zod": "^4.6.5"
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/chrischall/myhotlunchbox-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "1.2.
|
|
9
|
+
"version": "1.2.5",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "myhotlunchbox-mcp",
|
|
14
|
-
"version": "1.2.
|
|
14
|
+
"version": "1.2.5",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|