@leo000001/claude-code-mcp 2.8.3 → 2.8.6

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/CHANGELOG.md CHANGED
@@ -8,7 +8,7 @@
8
8
  - Expand SDK stream/event mapping for `rate_limit_event`, `system/api_retry`, `system/local_command_output`, `system/elicitation_complete`, `system/compact_boundary`, and partial `stream_event` output.
9
9
  - Preserve newer SDK metadata in session/results, including `fastModeState` and richer permission prompt labels (`title`, `displayName`).
10
10
  - Prefer SDK permission `suggestions` for `allow_for_session` responses and sync session metadata from `system/init` (for example actual model / permission mode).
11
- - Add default Claude executable resolution with explicit env overrides (`CLAUDE_CODE_MCP_DEFAULT_CLAUDE_PATH` / `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_COMMAND`) and auto-detection order `claude` -> `claude-internal` -> SDK-bundled.
11
+ - Add default Claude executable resolution with explicit env overrides (`CLAUDE_CODE_MCP_PATH` / `CLAUDE_CODE_MCP_COMMAND`) and auto-detection order `claude` -> `claude-internal` -> SDK-bundled.
12
12
 
13
13
  ### Documentation
14
14
 
package/README.md CHANGED
@@ -43,7 +43,7 @@ See `CHANGELOG.md` for release history.
43
43
  This MCP server uses the [`@anthropic-ai/claude-agent-sdk`](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk) package, which **bundles its own Claude Code CLI** (`cli.js`). When no explicit `pathToClaudeCodeExecutable` is provided, this server now prefers a detected local `claude` command, then `claude-internal`, and falls back to the SDK-bundled CLI if neither is found.
44
44
 
45
45
  - The SDK bundles a Claude Code CLI; its version generally tracks the SDK package version, but the exact scheme is not guaranteed
46
- - Default executable resolution order is: request-level `pathToClaudeCodeExecutable` -> `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_PATH` -> `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_COMMAND` -> auto-detected `claude` -> auto-detected `claude-internal` -> SDK-bundled CLI
46
+ - Default executable resolution order is: request-level `pathToClaudeCodeExecutable` -> `CLAUDE_CODE_MCP_PATH` -> `CLAUDE_CODE_MCP_COMMAND` -> auto-detected `claude` -> auto-detected `claude-internal` -> SDK-bundled CLI
47
47
  - **Configuration is shared** — the bundled CLI reads API keys and settings from `~/.claude/`, same as the system-installed `claude`
48
48
  - **All local settings are loaded by default** — unlike the raw SDK (which defaults to isolation mode), this MCP server loads `user`, `project`, and `local` settings automatically, including `CLAUDE.md` project context. Pass `advanced.settingSources: []` to opt out
49
49
  - You must have Claude Code configured (API key set up) before using this MCP server: see [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code/overview)
@@ -383,7 +383,7 @@ Notes:
383
383
  - `permission_result` event data is `{ requestId, toolName, behavior, source, message?, interrupt? }` (denial details only present for `deny`).
384
384
  - `result.fastModeState` may be present when the SDK reports fast-mode state, and `claude_code_session` surfaces the latest known `fastModeState` for each session.
385
385
  - In `"minimal"` mode (default): assistant message events are slimmed (strips `usage`, `model`, `id`, `cache_control` from content blocks); noisy SDK progress subtypes (`tool_progress`, `auth_status`, `system/api_retry`, `system/task_progress`, `system/hook_progress`) are filtered out; `lastEventId`/`lastToolUseId` are omitted; `AgentResult` omits `durationApiMs`/`sessionTotalTurns`/`sessionTotalCostUsd`. Use `responseMode: "full"` or individual `include*` flags to restore any of these.
386
- - In `"delta_compact"` mode: defaults are optimized for high-frequency polling (`events` and top-level `result` omitted unless explicitly enabled via `pollOptions`), while still returning session status/actions/cursors.
386
+ - In `"delta_compact"` mode: defaults minimize per-poll payload size (`events` and top-level `result` omitted unless explicitly enabled via `pollOptions`), while still returning session status/actions/cursors. Note: this does not change the recommended poll interval — `running` sessions should still be polled at >=2 minute intervals.
387
387
 
388
388
  ## Usage Example
389
389
 
@@ -520,21 +520,21 @@ setx CLAUDE_CODE_GIT_BASH_PATH "C:\Program Files\Git\bin\bash.exe"
520
520
 
521
521
  All environment variables are optional. They are set on the MCP server process (not on the Claude Code child process — for that, use the `env` tool parameter).
522
522
 
523
- | Variable | Description | Default |
524
- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
525
- | `CLAUDE_CODE_GIT_BASH_PATH` | Path to `bash.exe` on Windows (see [Windows Support](#windows-support)) | Auto-detected |
526
- | `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_COMMAND` | Exact command name to resolve from `PATH` as the default Claude executable (for example `claude` or `claude-internal`). Mutually exclusive with `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_PATH` | _(unset)_ |
527
- | `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_PATH` | Explicit filesystem path to use as the default Claude executable. Mutually exclusive with `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_COMMAND` | _(unset)_ |
528
- | `CLAUDE_CODE_MCP_ALLOW_DISK_RESUME` | Set to `1` to allow `claude_code_reply` to resume from on-disk transcripts when the in-memory session is missing | `0` (disabled) |
529
- | `CLAUDE_CODE_MCP_RESUME_SECRET` | HMAC secret used to validate `resumeToken` for disk resume fallback (recommended if disk resume is enabled) | _(unset)_ |
530
- | `CLAUDE_CODE_MCP_MAX_SESSIONS` | Maximum number of in-memory sessions (set `0` to disable the limit) | `128` |
531
- | `CLAUDE_CODE_MCP_MAX_PENDING_PERMISSIONS` | Maximum number of outstanding permission requests per session (set `0` to disable the limit) | `64` |
532
- | `CLAUDE_CODE_MCP_EVENT_BUFFER_MAX_SIZE` | Soft limit for in-memory event buffer per session (`0` is not supported) | `1000` |
533
- | `CLAUDE_CODE_MCP_EVENT_BUFFER_HARD_MAX_SIZE` | Hard limit for in-memory event buffer per session (clamped to be `>= max`; `0` is not supported) | `2000` |
523
+ | Variable | Description | Default |
524
+ | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
525
+ | `CLAUDE_CODE_GIT_BASH_PATH` | Path to `bash.exe` on Windows (see [Windows Support](#windows-support)) | Auto-detected |
526
+ | `CLAUDE_CODE_MCP_COMMAND` | Exact command name to resolve from `PATH` as the default Claude executable (for example `claude` or `claude-internal`). Mutually exclusive with `CLAUDE_CODE_MCP_PATH` | _(unset)_ |
527
+ | `CLAUDE_CODE_MCP_PATH` | Explicit filesystem path to use as the default Claude executable. Mutually exclusive with `CLAUDE_CODE_MCP_COMMAND` | _(unset)_ |
528
+ | `CLAUDE_CODE_MCP_ALLOW_DISK_RESUME` | Set to `1` to allow `claude_code_reply` to resume from on-disk transcripts when the in-memory session is missing | `0` (disabled) |
529
+ | `CLAUDE_CODE_MCP_RESUME_SECRET` | HMAC secret used to validate `resumeToken` for disk resume fallback (recommended if disk resume is enabled) | _(unset)_ |
530
+ | `CLAUDE_CODE_MCP_MAX_SESSIONS` | Maximum number of in-memory sessions (set `0` to disable the limit) | `128` |
531
+ | `CLAUDE_CODE_MCP_MAX_PENDING_PERMISSIONS` | Maximum number of outstanding permission requests per session (set `0` to disable the limit) | `64` |
532
+ | `CLAUDE_CODE_MCP_EVENT_BUFFER_MAX_SIZE` | Soft limit for in-memory event buffer per session (`0` is not supported) | `1000` |
533
+ | `CLAUDE_CODE_MCP_EVENT_BUFFER_HARD_MAX_SIZE` | Hard limit for in-memory event buffer per session (clamped to be `>= max`; `0` is not supported) | `2000` |
534
534
 
535
535
  ### Choosing the default Claude executable
536
536
 
537
- - `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_PATH` and `CLAUDE_CODE_MCP_DEFAULT_CLAUDE_COMMAND` are mutually exclusive.
537
+ - `CLAUDE_CODE_MCP_PATH` and `CLAUDE_CODE_MCP_COMMAND` are mutually exclusive.
538
538
  - If neither is set, the server auto-detects `claude`, then `claude-internal`, then falls back to the SDK-bundled CLI.
539
539
  - Request-level `pathToClaudeCodeExecutable` still overrides these server defaults.
540
540
  - Invalid values for these env vars are treated as startup misconfiguration and will fail the server fast.
package/dist/index.js CHANGED
@@ -920,6 +920,8 @@ import { existsSync as existsSync3, statSync as statSync2 } from "fs";
920
920
  var EFFORT_LEVELS = ["low", "medium", "high", "max"];
921
921
  var SESSION_ACTIONS = ["list", "get", "cancel", "interrupt"];
922
922
  var DEFAULT_SETTING_SOURCES = ["user", "project", "local"];
923
+ var DEFAULT_POLL_INTERVAL_RUNNING_MS = 12e4;
924
+ var DEFAULT_POLL_INTERVAL_WAITING_MS = 1e3;
923
925
  var CHECK_ACTIONS = ["poll", "respond_permission"];
924
926
  var CHECK_RESPONSE_MODES = ["minimal", "full", "delta_compact"];
925
927
  var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
@@ -1952,8 +1954,8 @@ function toSessionCreateParams(input) {
1952
1954
  // src/utils/claude-executable.ts
1953
1955
  import { accessSync, constants, existsSync as existsSync2, statSync } from "fs";
1954
1956
  import path3 from "path";
1955
- var DEFAULT_CLAUDE_COMMAND_ENV = "CLAUDE_CODE_MCP_DEFAULT_CLAUDE_COMMAND";
1956
- var DEFAULT_CLAUDE_PATH_ENV = "CLAUDE_CODE_MCP_DEFAULT_CLAUDE_PATH";
1957
+ var CLAUDE_COMMAND_ENV = "CLAUDE_CODE_MCP_COMMAND";
1958
+ var CLAUDE_PATH_ENV = "CLAUDE_CODE_MCP_PATH";
1957
1959
  var AUTO_CLAUDE_COMMANDS = ["claude", "claude-internal"];
1958
1960
  function trimEnv(name) {
1959
1961
  const value = process.env[name];
@@ -2000,7 +2002,7 @@ function windowsExecutableNames(command) {
2000
2002
  function resolveCommandFromPath(command) {
2001
2003
  if (command.includes("/") || command.includes("\\")) {
2002
2004
  throw new Error(
2003
- `${DEFAULT_CLAUDE_COMMAND_ENV} must be a command name without path separators. Use ${DEFAULT_CLAUDE_PATH_ENV} for filesystem paths.`
2005
+ `${CLAUDE_COMMAND_ENV} must be a command name without path separators. Use ${CLAUDE_PATH_ENV} for filesystem paths.`
2004
2006
  );
2005
2007
  }
2006
2008
  const names = process.platform === "win32" ? windowsExecutableNames(command) : [command];
@@ -2019,17 +2021,17 @@ function resolveConfiguredPath(rawPath) {
2019
2021
  const normalized = normalizeMaybeQuotedPath2(rawPath);
2020
2022
  const resolved = path3.isAbsolute(normalized) ? normalized : path3.resolve(normalized);
2021
2023
  if (!isUsableExecutablePath(resolved)) {
2022
- throw new Error(`${DEFAULT_CLAUDE_PATH_ENV} does not point to an executable file: ${resolved}`);
2024
+ throw new Error(`${CLAUDE_PATH_ENV} does not point to an executable file: ${resolved}`);
2023
2025
  }
2024
2026
  return path3.normalize(resolved);
2025
2027
  }
2026
2028
  function resolveDefaultClaudeExecutable() {
2027
- const configuredPath = trimEnv(DEFAULT_CLAUDE_PATH_ENV);
2028
- const configuredCommandRaw = trimEnv(DEFAULT_CLAUDE_COMMAND_ENV);
2029
+ const configuredPath = trimEnv(CLAUDE_PATH_ENV);
2030
+ const configuredCommandRaw = trimEnv(CLAUDE_COMMAND_ENV);
2029
2031
  const configuredCommand = configuredCommandRaw ? normalizeMaybeQuotedToken(configuredCommandRaw) : void 0;
2030
2032
  if (configuredPath && configuredCommand) {
2031
2033
  throw new Error(
2032
- `${DEFAULT_CLAUDE_PATH_ENV} and ${DEFAULT_CLAUDE_COMMAND_ENV} are mutually exclusive; set only one.`
2034
+ `${CLAUDE_PATH_ENV} and ${CLAUDE_COMMAND_ENV} are mutually exclusive; set only one.`
2033
2035
  );
2034
2036
  }
2035
2037
  if (configuredPath) {
@@ -2041,9 +2043,7 @@ function resolveDefaultClaudeExecutable() {
2041
2043
  if (configuredCommand) {
2042
2044
  const resolved = resolveCommandFromPath(configuredCommand);
2043
2045
  if (!resolved) {
2044
- throw new Error(
2045
- `${DEFAULT_CLAUDE_COMMAND_ENV}='${configuredCommand}' was not found in PATH.`
2046
- );
2046
+ throw new Error(`${CLAUDE_COMMAND_ENV}='${configuredCommand}' was not found in PATH.`);
2047
2047
  }
2048
2048
  return {
2049
2049
  source: "env_command",
@@ -2175,7 +2175,7 @@ async function executeClaudeCode(input, sessionManager, serverCwd, toolCache, re
2175
2175
  return {
2176
2176
  sessionId,
2177
2177
  status: "running",
2178
- pollInterval: 3e3,
2178
+ pollInterval: DEFAULT_POLL_INTERVAL_RUNNING_MS,
2179
2179
  resumeToken: resumeSecret ? computeResumeToken(sessionId, resumeSecret) : void 0
2180
2180
  };
2181
2181
  } catch (err) {
@@ -2361,7 +2361,7 @@ async function executeClaudeCodeReply(input, sessionManager, toolCache, requestS
2361
2361
  return {
2362
2362
  sessionId: input.sessionId,
2363
2363
  status: "running",
2364
- pollInterval: 3e3,
2364
+ pollInterval: DEFAULT_POLL_INTERVAL_RUNNING_MS,
2365
2365
  resumeToken: computeResumeToken(input.sessionId, resumeSecret)
2366
2366
  };
2367
2367
  } catch (err) {
@@ -2508,7 +2508,7 @@ async function executeClaudeCodeReply(input, sessionManager, toolCache, requestS
2508
2508
  return {
2509
2509
  sessionId,
2510
2510
  status: "running",
2511
- pollInterval: 3e3,
2511
+ pollInterval: DEFAULT_POLL_INTERVAL_RUNNING_MS,
2512
2512
  resumeToken: resumeSecret ? computeResumeToken(sessionId, resumeSecret) : void 0
2513
2513
  };
2514
2514
  } catch (err) {
@@ -2709,8 +2709,8 @@ function buildInternalToolsDescription(tools) {
2709
2709
 
2710
2710
  // src/tools/claude-code-check.ts
2711
2711
  function pollIntervalForStatus(status) {
2712
- if (status === "waiting_permission") return 1e3;
2713
- if (status === "running") return 3e3;
2712
+ if (status === "waiting_permission") return DEFAULT_POLL_INTERVAL_WAITING_MS;
2713
+ if (status === "running") return DEFAULT_POLL_INTERVAL_RUNNING_MS;
2714
2714
  return void 0;
2715
2715
  }
2716
2716
  function toPermissionResult(params) {
@@ -3496,8 +3496,8 @@ function registerResources(server, deps) {
3496
3496
  ),
3497
3497
  eventBuffer: deps.sessionManager.getEventBufferConfig(),
3498
3498
  pollDefaults: {
3499
- runningMs: 3e3,
3500
- waitingPermissionMs: 1e3
3499
+ runningMs: DEFAULT_POLL_INTERVAL_RUNNING_MS,
3500
+ waitingPermissionMs: DEFAULT_POLL_INTERVAL_WAITING_MS
3501
3501
  }
3502
3502
  }
3503
3503
  };
@@ -3606,7 +3606,7 @@ function registerResources(server, deps) {
3606
3606
  "",
3607
3607
  "- This backend is asynchronous: `claude_code` and `claude_code_reply` start work, and the final result arrives later via polling.",
3608
3608
  "- Claude Code may keep working for 10+ minutes on larger tasks, especially with `effort='high'` or `effort='max'`; keep polling and be patient before treating it as stuck.",
3609
- "- Adjust poll intervals to the current progress: poll faster while new events or permission actions are arriving, and slower while the session is quietly thinking with no new output.",
3609
+ "- **Poll frequency**: For `running` sessions, sleep at least 2 minutes between polls; increase for complex tasks. Do NOT high-frequency poll \u2014 it wastes tokens. Only poll frequently (~1s) when `waiting_permission`. Adapt interval based on task complexity and whether the previous poll returned new events.",
3610
3610
  "- `model` is optional. If omitted, Claude Code chooses the effective model from its own defaults/settings.",
3611
3611
  "- `allowedTools` is pre-approval by default; set `strictAllowedTools=true` when you need a strict allowlist.",
3612
3612
  "- `allow_for_session` usually works best when the same tool will be used repeatedly in one session.",
@@ -3621,7 +3621,7 @@ function registerResources(server, deps) {
3621
3621
  "Notes:",
3622
3622
  "- `respond_user_input` is not supported. Use only `respond_permission` for approvals.",
3623
3623
  "- OpenCode/Codex-style clients usually work best when they store `sessionId` + `nextCursor` and answer approvals with `decision=allow_for_session`.",
3624
- "- Prefer `responseMode='delta_compact'` for high-frequency polling."
3624
+ "- Prefer `responseMode='delta_compact'` to reduce per-poll payload size (does not change recommended poll interval)."
3625
3625
  ].join("\n"),
3626
3626
  "text/markdown"
3627
3627
  )
@@ -3728,9 +3728,9 @@ function registerResources(server, deps) {
3728
3728
  recommendedSettings: {
3729
3729
  responseMode: "delta_compact",
3730
3730
  poll: {
3731
- runningMs: 3e3,
3732
- waitingPermissionMs: 1e3,
3733
- cursorStrategy: "Persist nextCursor and de-duplicate by event.id."
3731
+ runningMs: DEFAULT_POLL_INTERVAL_RUNNING_MS,
3732
+ waitingPermissionMs: DEFAULT_POLL_INTERVAL_WAITING_MS,
3733
+ cursorStrategy: "Persist nextCursor and de-duplicate by event.id. Do NOT high-frequency poll running sessions."
3734
3734
  },
3735
3735
  timeouts: {
3736
3736
  sessionInitTimeoutMs: 1e4,
@@ -3743,9 +3743,9 @@ function registerResources(server, deps) {
3743
3743
  "Treat tool descriptions and MCP resources as agent-visible guidance; do not assume README-level documentation is visible to the model.",
3744
3744
  "Use allowedTools/disallowedTools only with exact runtime tool names.",
3745
3745
  "Set strictAllowedTools=true when you need allowedTools to behave as a strict allowlist.",
3746
- "Default Claude executable selection prefers request path, then CLAUDE_CODE_MCP_DEFAULT_CLAUDE_PATH, then CLAUDE_CODE_MCP_DEFAULT_CLAUDE_COMMAND, then auto-detected 'claude'/'claude-internal', then SDK-bundled.",
3746
+ "Default Claude executable selection prefers request path, then CLAUDE_CODE_MCP_PATH, then CLAUDE_CODE_MCP_COMMAND, then auto-detected 'claude'/'claude-internal', then SDK-bundled.",
3747
3747
  "This server assumes MCP client and server run on the same machine/platform.",
3748
- "For high-frequency status checks, prefer responseMode='delta_compact'.",
3748
+ "Prefer responseMode='delta_compact' to reduce per-poll payload size. Running sessions should still poll at >=2 minute intervals.",
3749
3749
  "respond_user_input is not supported on this backend; use poll/respond_permission flow."
3750
3750
  ],
3751
3751
  toolCounts: {
@@ -3911,7 +3911,7 @@ function registerResources(server, deps) {
3911
3911
  clientFamily: "codex",
3912
3912
  detectedMismatches: [],
3913
3913
  recommendations: [
3914
- "Prefer responseMode='delta_compact' for fast status loops.",
3914
+ "Prefer responseMode='delta_compact' to reduce per-poll payload size. Poll running sessions at >=2 minute intervals.",
3915
3915
  "Enable pollOptions.includeTools=true when exact runtime tool names are required.",
3916
3916
  "Do not assume human-facing README guidance is visible to the agent; keep critical calling rules in tool descriptions or MCP resources."
3917
3917
  ]
@@ -3946,7 +3946,7 @@ function registerResources(server, deps) {
3946
3946
  detectedMismatches: [],
3947
3947
  recommendations: [
3948
3948
  "Persist nextCursor and de-duplicate by event.id.",
3949
- "Use responseMode='delta_compact' for high-frequency polling, full mode only for diagnostics.",
3949
+ "Use responseMode='delta_compact' to reduce payload size; use 'full' only for diagnostics. Poll running sessions at >=2 minute intervals.",
3950
3950
  "Do not assume repository docs are model-visible; tool descriptions and resources are safer places for runtime guidance."
3951
3951
  ]
3952
3952
  };
@@ -3962,9 +3962,9 @@ function registerResources(server, deps) {
3962
3962
  recommendedSettings: {
3963
3963
  responseMode: "delta_compact",
3964
3964
  poll: {
3965
- runningMs: 3e3,
3966
- waitingPermissionMs: 1e3,
3967
- cursorStrategy: "Persist nextCursor and de-duplicate by event.id."
3965
+ runningMs: DEFAULT_POLL_INTERVAL_RUNNING_MS,
3966
+ waitingPermissionMs: DEFAULT_POLL_INTERVAL_WAITING_MS,
3967
+ cursorStrategy: "Persist nextCursor and de-duplicate by event.id. Do NOT high-frequency poll running sessions."
3968
3968
  }
3969
3969
  }
3970
3970
  }
@@ -3975,7 +3975,7 @@ function registerResources(server, deps) {
3975
3975
  }
3976
3976
 
3977
3977
  // src/server.ts
3978
- var SERVER_VERSION = true ? "2.8.3" : "0.0.0-dev";
3978
+ var SERVER_VERSION = true ? "2.8.6" : "0.0.0-dev";
3979
3979
  function createServerContext(serverCwd) {
3980
3980
  const sessionManager = new SessionManager();
3981
3981
  const server = new McpServer(
@@ -4372,7 +4372,15 @@ function createServerContext(serverCwd) {
4372
4372
  server.registerTool(
4373
4373
  "claude_code_check",
4374
4374
  {
4375
- description: "Poll session state or answer a pending permission request. Main loop: call action='poll', persist nextCursor, and use action='respond_permission' for approvals. respond_user_input is not supported.",
4375
+ description: `Poll session state or answer a pending permission request.
4376
+
4377
+ POLLING FREQUENCY: Do NOT poll every turn. Claude Code tasks take minutes, not seconds.
4378
+ - "running": sleep at least 2 minutes between polls; increase for complex tasks. Do NOT high-frequency poll \u2014 it wastes tokens.
4379
+ - "waiting_permission": poll ~1s and respond quickly.
4380
+ - "idle"/"error"/"cancelled": stop polling.
4381
+ - Adapt interval based on task complexity and whether the previous poll returned new events.
4382
+
4383
+ Main loop: call action='poll', persist nextCursor, and use action='respond_permission' for approvals.`,
4376
4384
  inputSchema: {
4377
4385
  action: z.enum(CHECK_ACTIONS).describe(
4378
4386
  "'poll' fetches new events/actions/result; 'respond_permission' answers one pending permission request."
@@ -4382,7 +4390,7 @@ function createServerContext(serverCwd) {
4382
4390
  "Default: 0. Pass the previous nextCursor to avoid replaying old buffered events."
4383
4391
  ),
4384
4392
  responseMode: z.enum(CHECK_RESPONSE_MODES).optional().describe(
4385
- "Default: 'minimal'. Use 'delta_compact' for lightweight high-frequency polling; use 'full' mainly for diagnostics."
4393
+ "Default: 'minimal'. Use 'delta_compact' for compact event payloads; use 'full' mainly for diagnostics."
4386
4394
  ),
4387
4395
  maxEvents: z.number().int().positive().optional().describe("Default: 200 (minimal), unlimited (full/delta_compact)"),
4388
4396
  requestId: z.string().optional().describe("Default: none. Required for action='respond_permission'."),