[GH-ISSUE #4081] compare_web_captures tool fails to register in Claude Desktop Windows - problem with that connector #1614

Closed
opened 2026-10-16 21:07:59 +00:00 by bsakaguchi · 8 comments
Owner

Originally created by @hhabilaz on GitHub (Oct 15, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4081

Originally assigned to: @kaoru0822-kitauji on GitHub.

Before submitting

  • I searched the open and closed issues for a related report.
  • I removed credentials, tokens, private paths, and sensitive target data.

Area

MCP or agent integration

Observed behavior

After running npx --yes rea-agents@latest setup on Windows and selecting Claude Desktop among the registered agents, setup completed successfully (13/13 planned changes applied, no errors in the CLI output). Claude Desktop was fully quit (not just the window closed) before approving the plan, per the setup tool's own instruction, and reopened afterward.

Most REA tools are confirmed working in Claude Desktop after this — asking "do you have access to REA tools?" returns a full working toolkit (binary analysis, Android/ADB, Frida/GDB debugging, SQLite, plists, web/JS bundle analysis, etc.) with no errors.

However, Claude Desktop's UI shows a persistent error toast: "Claude can't use Compare Web Captures from REA because of a problem with that connector. Update or reinstall REA." This specifically affects the compare_web_captures tool and has not been resolved by re-running setup or by fully restarting Claude Desktop.

REA version: 6.5.0 (confirmed via npx rea-agents --version).

Reproduction

  1. Run npx --yes rea-agents@latest setup on Windows.
  2. Select Claude Desktop in the agent picker, review and approve the setup plan.
  3. Fully quit Claude Desktop (not just close the window), then reopen it.
  4. In Claude Desktop, ask "do you have access to REA tools?" — most tools report working, but a persistent error toast appears referencing the compare_web_captures ("Compare Web Captures") tool.

Reproduced on 2 separate full setup/restart cycles. Both times the error toast reappeared identically. Re-running setup and restarting Claude Desktop again did not resolve it.

Expected behavior

Expected compare_web_captures to register and behave consistently with how it works through other MCP clients (see Additional context below) — either connecting successfully or, on bad/empty input, returning a normal validation error — rather than a persistent "problem with that connector" failure that survives a full setup and restart cycle.

No documented contract for this specific error state was found in the README or docs/installation.md — this expectation is based on observed behavior in a different client, not cited documentation.

Impact and scope

Scope: isolated to one tool (compare_web_captures) within Claude Desktop on this machine. All other REA tools tested in the same Claude Desktop session (binary analysis, Android/ADB, Frida/GDB debugging, SQLite, plists, web/JS bundle analysis) work without error — this does not block REA's broader functionality.

Frequency: 100% reproducible across 2 separate setup/restart cycles, not intermittent.

Untested/unknown: whether this affects other Claude Desktop installs or machines, or is specific to this one. Severity beyond "one tool unusable in one client" not established.

REA version

6.5.0 (confirmed via npx rea-agents --version)

Runtime and platform

Node v24.20.0; Windows (PowerShell 7.6.7); Claude Desktop installed as MSIX package; Ghidra/Hopper not installed (not applicable — issue is unrelated to native binary analysis).

Target and artifact context

Not applicable — this report concerns MCP tool registration/connector behavior in Claude Desktop, not a specific analyzed binary or artifact. Cross-client test used an empty {} input and a valid empty HAR file, not a real capture target.

Interface

MCP

Earliest failure stage

Setup or provider admission

Relevant output or evidence

Command or MCP request actually run: Asked Claude Desktop "do you have access to REA tools?" after setup/restart. Separately, compare_web_captures was invoked with empty {} input via a different MCP client (not Claude Desktop).
Relevant result, error, or artifact: Claude Desktop UI error toast: "Claude can't use Compare Web Captures from REA because of a problem with that connector. Update or reinstall REA." The other MCP client returned a proper validation error (missing before/after captures) instead of a connector failure for the same tool.
For source-only findings, link the file/revision and relevant code: NOT_ENOUGH_INFO — no access to REA's source for the Claude Desktop connector registration path.
Missing evidence or remaining uncertainty: Exact internal error/stack trace not captured; REA_LOG_LEVEL=debug was not set during reproduction.

Typed outcome or recovery expected

Either successful tool registration, or a specific actionable error distinct from the generic "update or reinstall REA" message — both of those recovery steps were already attempted without resolving it.

Analysis or suspected cause

Hypothesis, not confirmed: likely a Claude Desktop-specific registration issue for this one tool during provider admission, since the same underlying tool (compare_web_captures) was invoked successfully through a different MCP client and returned a proper validation error rather than a connector failure.

Additional context

Cross-client comparison: via a separate MCP client (not Claude Desktop), compare_web_captures was invoked with empty {} input and returned a correct validation error (missing before/after captures) rather than a connector failure. A related tool, inspect_web_network_capture, succeeded there against a valid empty HAR file (total_records: 0, no error). This suggests the failure is isolated to Claude Desktop's connector/registration handling for this one tool, not a dead feature in REA overall.

Originally created by @hhabilaz on GitHub (Oct 15, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/4081 Originally assigned to: @kaoru0822-kitauji on GitHub. ### Before submitting - [x] I searched the open and closed issues for a related report. - [x] I removed credentials, tokens, private paths, and sensitive target data. ### Area MCP or agent integration ### Observed behavior After running `npx --yes rea-agents@latest setup` on Windows and selecting Claude Desktop among the registered agents, setup completed successfully (13/13 planned changes applied, no errors in the CLI output). Claude Desktop was fully quit (not just the window closed) before approving the plan, per the setup tool's own instruction, and reopened afterward. Most REA tools are confirmed working in Claude Desktop after this — asking "do you have access to REA tools?" returns a full working toolkit (binary analysis, Android/ADB, Frida/GDB debugging, SQLite, plists, web/JS bundle analysis, etc.) with no errors. However, Claude Desktop's UI shows a persistent error toast: "Claude can't use Compare Web Captures from REA because of a problem with that connector. Update or reinstall REA." This specifically affects the compare_web_captures tool and has not been resolved by re-running setup or by fully restarting Claude Desktop. REA version: 6.5.0 (confirmed via `npx rea-agents --version`). ### Reproduction 1. Run `npx --yes rea-agents@latest setup` on Windows. 2. Select Claude Desktop in the agent picker, review and approve the setup plan. 3. Fully quit Claude Desktop (not just close the window), then reopen it. 4. In Claude Desktop, ask "do you have access to REA tools?" — most tools report working, but a persistent error toast appears referencing the compare_web_captures ("Compare Web Captures") tool. Reproduced on 2 separate full setup/restart cycles. Both times the error toast reappeared identically. Re-running setup and restarting Claude Desktop again did not resolve it. ### Expected behavior Expected compare_web_captures to register and behave consistently with how it works through other MCP clients (see Additional context below) — either connecting successfully or, on bad/empty input, returning a normal validation error — rather than a persistent "problem with that connector" failure that survives a full setup and restart cycle. No documented contract for this specific error state was found in the README or docs/installation.md — this expectation is based on observed behavior in a different client, not cited documentation. ### Impact and scope Scope: isolated to one tool (compare_web_captures) within Claude Desktop on this machine. All other REA tools tested in the same Claude Desktop session (binary analysis, Android/ADB, Frida/GDB debugging, SQLite, plists, web/JS bundle analysis) work without error — this does not block REA's broader functionality. Frequency: 100% reproducible across 2 separate setup/restart cycles, not intermittent. Untested/unknown: whether this affects other Claude Desktop installs or machines, or is specific to this one. Severity beyond "one tool unusable in one client" not established. ### REA version 6.5.0 (confirmed via `npx rea-agents --version`) ### Runtime and platform Node v24.20.0; Windows (PowerShell 7.6.7); Claude Desktop installed as MSIX package; Ghidra/Hopper not installed (not applicable — issue is unrelated to native binary analysis). ### Target and artifact context Not applicable — this report concerns MCP tool registration/connector behavior in Claude Desktop, not a specific analyzed binary or artifact. Cross-client test used an empty {} input and a valid empty HAR file, not a real capture target. ### Interface MCP ### Earliest failure stage Setup or provider admission ### Relevant output or evidence Command or MCP request actually run: Asked Claude Desktop "do you have access to REA tools?" after setup/restart. Separately, compare_web_captures was invoked with empty {} input via a different MCP client (not Claude Desktop). Relevant result, error, or artifact: Claude Desktop UI error toast: "Claude can't use Compare Web Captures from REA because of a problem with that connector. Update or reinstall REA." The other MCP client returned a proper validation error (missing before/after captures) instead of a connector failure for the same tool. For source-only findings, link the file/revision and relevant code: NOT_ENOUGH_INFO — no access to REA's source for the Claude Desktop connector registration path. Missing evidence or remaining uncertainty: Exact internal error/stack trace not captured; REA_LOG_LEVEL=debug was not set during reproduction. ### Typed outcome or recovery expected Either successful tool registration, or a specific actionable error distinct from the generic "update or reinstall REA" message — both of those recovery steps were already attempted without resolving it. ### Analysis or suspected cause Hypothesis, not confirmed: likely a Claude Desktop-specific registration issue for this one tool during provider admission, since the same underlying tool (compare_web_captures) was invoked successfully through a different MCP client and returned a proper validation error rather than a connector failure. ### Additional context Cross-client comparison: via a separate MCP client (not Claude Desktop), compare_web_captures was invoked with empty {} input and returned a correct validation error (missing before/after captures) rather than a connector failure. A related tool, inspect_web_network_capture, succeeded there against a valid empty HAR file (total_records: 0, no error). This suggests the failure is isolated to Claude Desktop's connector/registration handling for this one tool, not a dead feature in REA overall.
Author
Owner

@SoGeRiEn commented on GitHub (Oct 15, 2026):

Patched on fix/reliability-pack-20261015 at 12309d27. Claude Desktop now gets the compact input schema by default; explicit full stays untouched. Real Windows Claude Desktop verification remains.

<!-- gh-comment-id:6192264681 --> @SoGeRiEn commented on GitHub (Oct 15, 2026): Patched on `fix/reliability-pack-20261015` at 12309d27. Claude Desktop now gets the compact input schema by default; explicit `full` stays untouched. Real Windows Claude Desktop verification remains.
Author
Owner

@matbrgz commented on GitHub (Oct 16, 2026):

This behavior directly ties into the Claude Desktop MCP schema complexity cluster:

  • Root Defect: #3408 (Array and object tool parameters rejected when REA runs as a local MCP server in Claude Desktop (Windows))
  • Direct Duplicate: #4058 (compare_web_screenshots fails in Claude Desktop: $ref params passed as strings)
  • Schema Nesting Depth: #2813 (inputSchema nesting depth exceeds 10 on 24 tools - max 19: compare_web_captures)
  • Consolidation Tracker: #4330

In Claude Desktop on Windows, compare_web_captures fails connector registration because its inputSchema nesting depth (19 levels) and complex object definitions exceed the client's internal schema validator, showing the persistent "problem with that connector" toast.

<!-- gh-comment-id:6206357639 --> @matbrgz commented on GitHub (Oct 16, 2026): This behavior directly ties into the Claude Desktop MCP schema complexity cluster: - **Root Defect:** #3408 (`Array and object tool parameters rejected when REA runs as a local MCP server in Claude Desktop (Windows)`) - **Direct Duplicate:** #4058 (`compare_web_screenshots fails in Claude Desktop: $ref params passed as strings`) - **Schema Nesting Depth:** #2813 (`inputSchema nesting depth exceeds 10 on 24 tools - max 19: compare_web_captures`) - **Consolidation Tracker:** #4330 In Claude Desktop on Windows, `compare_web_captures` fails connector registration because its inputSchema nesting depth (19 levels) and complex object definitions exceed the client's internal schema validator, showing the persistent "problem with that connector" toast.
Author
Owner

@IanBaswana commented on GitHub (Oct 17, 2026):

Also reproduced on macOS (Apple Silicon, Claude Desktop, REA 6.5.0 via npx rea-agents setup --client claude_desktop), so this is not Windows-specific. Same toast: "Claude can't use Compare Web Captures from REA because of a problem with that connector."

Measurements (from tools/list sent directly to npx rea-agents@6.5.0 mcp, 207 tools):

Profile compare_web_captures inputSchema Largest other tool
default (full) 168,238 bytes serialized, 31 JSON nesting levels (objects + arrays) compare_application_versions: 31,107 bytes
REA_MCP_INPUT_SCHEMA_PROFILE=compact ~700 bytes, 5 properties typed as object capture_process_scenario: 3,807 bytes

compare_web_captures is about 5x larger than any other tool's schema in the default profile, because it inlines the full inspect_web_page / discover_webmcp_tools / capture_browser_scenario result schemas for before, after, before_scenario and after_scenario.

Workaround: add "REA_MCP_INPUT_SCHEMA_PROFILE": "compact" to the env block of the rea server in claude_desktop_config.json (quit Claude Desktop fully before editing). The compact profile keeps all 207 tools and, per mcpInputSchemaProfile.js, the server still validates the full canonical input.

Suggestion: setup could write the compact profile for Claude Desktop by default (as it may also help #3408 / #4058), or compare_web_captures could reference the capture results by evidence_id instead of inlining their full schemas.

<!-- gh-comment-id:6227004590 --> @IanBaswana commented on GitHub (Oct 17, 2026): Also reproduced on **macOS** (Apple Silicon, Claude Desktop, REA 6.5.0 via `npx rea-agents setup --client claude_desktop`), so this is not Windows-specific. Same toast: "Claude can't use Compare Web Captures from REA because of a problem with that connector." **Measurements** (from `tools/list` sent directly to `npx rea-agents@6.5.0 mcp`, 207 tools): | Profile | `compare_web_captures` inputSchema | Largest other tool | |---|---|---| | default (`full`) | 168,238 bytes serialized, 31 JSON nesting levels (objects + arrays) | `compare_application_versions`: 31,107 bytes | | `REA_MCP_INPUT_SCHEMA_PROFILE=compact` | ~700 bytes, 5 properties typed as `object` | `capture_process_scenario`: 3,807 bytes | `compare_web_captures` is about 5x larger than any other tool's schema in the default profile, because it inlines the full `inspect_web_page` / `discover_webmcp_tools` / `capture_browser_scenario` result schemas for `before`, `after`, `before_scenario` and `after_scenario`. **Workaround:** add `"REA_MCP_INPUT_SCHEMA_PROFILE": "compact"` to the `env` block of the `rea` server in `claude_desktop_config.json` (quit Claude Desktop fully before editing). The compact profile keeps all 207 tools and, per `mcpInputSchemaProfile.js`, the server still validates the full canonical input. **Suggestion:** setup could write the compact profile for Claude Desktop by default (as it may also help #3408 / #4058), or `compare_web_captures` could reference the capture results by `evidence_id` instead of inlining their full schemas.
Author
Owner

@CassieFox23 commented on GitHub (Oct 19, 2026):

Edit: I checked both schemas on main e8da7e1ed (6.7.0). Neither has a $ref. Details are here.

matbrgz groups this issue with #3408 in #4330. That one is about array and object arguments that Claude Desktop rejects. Two open PRs say they fix #3408: #3486 and #3525. This issue links to neither.

#4973 was opened on Oct 18. It reports the same "problem with that connector" warning for these tools. It also shows "expected object, received string". It may be worth checking this issue against #3486 and #3525.

🤖 Generated with Claude Code (Sonnet 5.5, verified by Opus 5.5) 🦊

<!-- gh-comment-id:6256816639 --> @CassieFox23 commented on GitHub (Oct 19, 2026): **Edit:** I checked both schemas on main e8da7e1ed (6.7.0). Neither has a `$ref`. Details are [here](https://github.com/morluto/rea/issues/4973#issuecomment-6270053127). matbrgz groups this issue with #3408 in #4330. That one is about array and object arguments that Claude Desktop rejects. Two open PRs say they fix #3408: #3486 and #3525. This issue links to neither. #4973 was opened on Oct 18. It reports the same "problem with that connector" warning for these tools. It also shows "expected object, received string". It may be worth checking this issue against #3486 and #3525. 🤖 Generated with Claude Code (Sonnet 5.5, verified by Opus 5.5) 🦊
Author
Owner

@hhabilaz commented on GitHub (Oct 20, 2026):

Confirmed: the compact-profile workaround resolved the connector warning on my Windows Claude Desktop installation using REA 6.5.0.

I added this to the existing rea server entry:

"env": {
"REA_MCP_INPUT_SCHEMA_PROFILE": "compact"
}

After fully quitting and reopening Claude Desktop and starting a new session:

  • The “problem with that connector” warning no longer appears.
  • compare_web_captures is now exposed as a callable tool.
  • Its advertised schema identifies the compact profile.
  • Deliberately incomplete test inputs return input-validation errors instead of a connector-registration failure.

I have not yet tested a successful comparison with valid captures. This confirms the workaround for my original registration issue, rather than verification of the patch branch or a newer release.

Thanks for the workaround!

<!-- gh-comment-id:6288726894 --> @hhabilaz commented on GitHub (Oct 20, 2026): Confirmed: the compact-profile workaround resolved the connector warning on my Windows Claude Desktop installation using REA 6.5.0. I added this to the existing rea server entry: "env": { "REA_MCP_INPUT_SCHEMA_PROFILE": "compact" } After fully quitting and reopening Claude Desktop and starting a new session: - The “problem with that connector” warning no longer appears. - compare_web_captures is now exposed as a callable tool. - Its advertised schema identifies the compact profile. - Deliberately incomplete test inputs return input-validation errors instead of a connector-registration failure. I have not yet tested a successful comparison with valid captures. This confirms the workaround for my original registration issue, rather than verification of the patch branch or a newer release. Thanks for the workaround!
Author
Owner

@yule1048596-art commented on GitHub (Oct 23, 2026):

TL;DR: The toast is caused by schema size. Claude Desktop drops any local connector tool whose inputSchema, serialized as compact JSON, is over 65,536 bytes. In REA 6.7.0 only compare_web_captures is over that limit (165,694 bytes). Nesting depth and $ref are not part of this check. Bringing that one schema under 64 KiB removes the toast without the compact profile.

The limit

When Claude Desktop builds the tool list for a message, it drops some local connector tools. One drop reason is schema_too_large: the tool's inputSchema, serialized as compact JSON, is over 65,536 UTF-8 bytes. A tool dropped for that reason gets the generic toast "Claude can't use {tool} from {connector} because of a problem with that connector. Update or reinstall {connector}." The check runs per tool, and on this path the client does not look at nesting depth or $ref.

I traced the toast to the client-side tool filter in the Claude Desktop web bundle (Claude Desktop 3.1623.4, macOS 27.0.1, 2026-10-23). Then I replayed the client's per-tool checks against REA 6.7.0's tools/list (207 tools, default full profile):

REA 6.7.0 as published After shrinking compare_web_captures
compare_web_captures input schema 165,694 bytes 46,877 bytes
Next largest (compare_application_versions) 30,271 bytes unchanged
Tools the client drops 1 (schema_too_large) 0

This also answers the open question in #4973. compare_web_captures never had a $ref, so the $ref fix could not help it. On this client build, 6.7.0 with the default profile still shows the toast.

What the compact workaround costs

REA_MCP_INPUT_SCHEMA_PROFILE=compact does remove the toast, as confirmed above. But it affects every tool, not just this one, because compactAdvertisedInputSchema always strips annotations first. On 6.7.0 it removes 1,259 of 1,295 nested parameter descriptions, across 180 of 207 tools. compare_web_captures is left with five plain object properties. That drops the before/after → inspection/webmcp layout and the normalization.rules[] shape that the model has to write itself. #4828 proposed making compact the Claude Desktop default, which would pass this cost on to every Claude Desktop user.

A narrower fix (tested locally on 6.7.0)

I patched the installed bundle so the full profile fits oversized schemas, and only those over 64 KiB:

  1. Keep every schema position down to the deepest level at which the whole schema still fits.
  2. Below that level, replace each subschema that contains nested schemas with { type, items?, description }. This is the same stub shape that reduceToShallowProperties already writes.
  3. Append one sentence to the root description: deep inputs are summarized, and the server still validates complete canonical inputs.

Runtime validation is untouched, because only the advertised projection changes. For compare_web_captures the result (46,877 bytes) keeps:

  • before/after → inspection/webmcp and all of their fields
  • every top-level field of the scenario captures
  • the full normalization.rules[] schema, including the artifacts enum
  • the tool's examples

The other 206 schemas are byte-identical. The fitted schema passes the JSON Schema 2020-12 metaschema and still accepts the tool's own example input.

Sketch against main (8d8d85ba2), not tested there
// src/contracts/compactInputSchema.ts
/** Claude Desktop drops a local tool whose compact-JSON input schema exceeds this size. */
export const ADVERTISED_INPUT_SCHEMA_LIMIT_BYTES = 64 * 1024;

const SUMMARIZED_ANNOTATION =
  "Deeply nested inputs are advertised in summarized form to fit client schema-size limits; the server still validates complete canonical inputs.";

const hasNestedSchema = (schema: Record<string, unknown>): boolean =>
  Object.entries(schema).some(
    ([key, value]) =>
      !schemaLiteralValues.has(key) &&
      (schemaMaps.has(key) || schemaArrays.has(key) || schemaChildren.has(key)) &&
      typeof value === "object" &&
      value !== null,
  );

const summarizeSubschema = (
  schema: Record<string, unknown>,
  references: JsonSchemaReferences,
): Record<string, unknown> => {
  const types = detectedTypes(schema, references, references.rootScope);
  const type = types?.length === 1 ? types[0] : types;
  return {
    ...(type === undefined ? {} : { type }),
    ...(types?.includes("array") ? { items: jsonValueSchema() } : {}),
    ...(typeof schema.description === "string"
      ? { description: schema.description }
      : {}),
  };
};

const truncateSchemaDepth = (
  node: unknown,
  references: JsonSchemaReferences,
  depth: number,
): unknown =>
  rebuildSchemaPositions(node, (child) =>
    !isSchemaObject(child)
      ? child
      : depth > 1
        ? truncateSchemaDepth(child, references, depth - 1)
        : hasNestedSchema(child)
          ? summarizeSubschema(child, references)
          : child,
  );

/** Fit a full-profile advertisement under the client limit, summarizing only its deepest structure. */
export const fitAdvertisedInputSchema = (
  schema: Record<string, unknown>,
): Record<string, unknown> => {
  if (serializedBytes(schema) <= ADVERTISED_INPUT_SCHEMA_LIMIT_BYTES)
    return schema;
  const described = {
    ...schema,
    description:
      (typeof schema.description === "string"
        ? `${schema.description} `
        : "") + SUMMARIZED_ANNOTATION,
  };
  const references = new JsonSchemaReferences(described);
  let fitted: Record<string, unknown> | undefined;
  // The uncut schema is over the limit, so the loop always ends.
  for (let depth = 1; ; depth++) {
    const truncated = truncateSchemaDepth(described, references, depth) as Record<
      string,
      unknown
    >;
    if (serializedBytes(truncated) > ADVERTISED_INPUT_SCHEMA_LIMIT_BYTES) break;
    fitted = truncated;
  }
  return (
    fitted ??
    compactAdvertisedInputSchema(schema, ADVERTISED_INPUT_SCHEMA_LIMIT_BYTES)
      .schema
  );
};
// src/contracts/toolSchemaMetadata.ts
import { fitAdvertisedInputSchema } from "./compactInputSchema.js";

// in toolInputSchemaWithMetadata
return fitAdvertisedInputSchema({
  ...presentInputJsonSchema(inline, fallbackPropertyDescription),
  ...(examples.length === 0 ? {} : { examples }),
});

The compact profile still applies on top of this through presentAdvertisedInputSchema. The recorded catalog digest would change.

A catalog-wide check in tests/boundary/mcp/toolSchemaValidity.test.ts that every advertised input schema is at most 65,536 bytes would catch the next one early. #4973 measured inspect_analysis_view at 49,804 bytes on main.

Not run

  • Claude Desktop itself with the patched server. Only the replayed client check above was run.
  • A full compare_web_captures comparison with real captures.
  • The compact profile on top of the patch.
  • Claude Desktop on Windows.

🤖 Investigated and drafted with Claude Code (Opus 5.5); reviewed and posted by me.

<!-- gh-comment-id:6370308898 --> @yule1048596-art commented on GitHub (Oct 23, 2026): **TL;DR:** The toast is caused by schema size. Claude Desktop drops any local connector tool whose `inputSchema`, serialized as compact JSON, is over **65,536 bytes**. In REA 6.7.0 only `compare_web_captures` is over that limit (165,694 bytes). Nesting depth and `$ref` are not part of this check. Bringing that one schema under 64 KiB removes the toast without the compact profile. ### The limit When Claude Desktop builds the tool list for a message, it drops some local connector tools. One drop reason is `schema_too_large`: the tool's `inputSchema`, serialized as compact JSON, is over 65,536 UTF-8 bytes. A tool dropped for that reason gets the generic toast "Claude can't use {tool} from {connector} because of a problem with that connector. Update or reinstall {connector}." The check runs per tool, and on this path the client does not look at nesting depth or `$ref`. I traced the toast to the client-side tool filter in the Claude Desktop web bundle (Claude Desktop 3.1623.4, macOS 27.0.1, 2026-10-23). Then I replayed the client's per-tool checks against REA 6.7.0's `tools/list` (207 tools, default `full` profile): | | REA 6.7.0 as published | After shrinking `compare_web_captures` | |---|---:|---:| | `compare_web_captures` input schema | 165,694 bytes | 46,877 bytes | | Next largest (`compare_application_versions`) | 30,271 bytes | unchanged | | Tools the client drops | 1 (`schema_too_large`) | 0 | This also answers the open question in #4973. `compare_web_captures` never had a `$ref`, so the `$ref` fix could not help it. On this client build, 6.7.0 with the default profile still shows the toast. ### What the compact workaround costs `REA_MCP_INPUT_SCHEMA_PROFILE=compact` does remove the toast, as confirmed above. But it affects every tool, not just this one, because `compactAdvertisedInputSchema` always strips annotations first. On 6.7.0 it removes 1,259 of 1,295 nested parameter descriptions, across 180 of 207 tools. `compare_web_captures` is left with five plain `object` properties. That drops the `before`/`after` → `inspection`/`webmcp` layout and the `normalization.rules[]` shape that the model has to write itself. #4828 proposed making compact the Claude Desktop default, which would pass this cost on to every Claude Desktop user. ### A narrower fix (tested locally on 6.7.0) I patched the installed bundle so the `full` profile fits oversized schemas, and only those over 64 KiB: 1. Keep every schema position down to the deepest level at which the whole schema still fits. 2. Below that level, replace each subschema that contains nested schemas with `{ type, items?, description }`. This is the same stub shape that `reduceToShallowProperties` already writes. 3. Append one sentence to the root description: deep inputs are summarized, and the server still validates complete canonical inputs. Runtime validation is untouched, because only the advertised projection changes. For `compare_web_captures` the result (46,877 bytes) keeps: - `before`/`after` → `inspection`/`webmcp` and all of their fields - every top-level field of the scenario captures - the full `normalization.rules[]` schema, including the `artifacts` enum - the tool's `examples` The other 206 schemas are byte-identical. The fitted schema passes the JSON Schema 2020-12 metaschema and still accepts the tool's own example input. <details> <summary>Sketch against main (8d8d85ba2), not tested there</summary> ```ts // src/contracts/compactInputSchema.ts /** Claude Desktop drops a local tool whose compact-JSON input schema exceeds this size. */ export const ADVERTISED_INPUT_SCHEMA_LIMIT_BYTES = 64 * 1024; const SUMMARIZED_ANNOTATION = "Deeply nested inputs are advertised in summarized form to fit client schema-size limits; the server still validates complete canonical inputs."; const hasNestedSchema = (schema: Record<string, unknown>): boolean => Object.entries(schema).some( ([key, value]) => !schemaLiteralValues.has(key) && (schemaMaps.has(key) || schemaArrays.has(key) || schemaChildren.has(key)) && typeof value === "object" && value !== null, ); const summarizeSubschema = ( schema: Record<string, unknown>, references: JsonSchemaReferences, ): Record<string, unknown> => { const types = detectedTypes(schema, references, references.rootScope); const type = types?.length === 1 ? types[0] : types; return { ...(type === undefined ? {} : { type }), ...(types?.includes("array") ? { items: jsonValueSchema() } : {}), ...(typeof schema.description === "string" ? { description: schema.description } : {}), }; }; const truncateSchemaDepth = ( node: unknown, references: JsonSchemaReferences, depth: number, ): unknown => rebuildSchemaPositions(node, (child) => !isSchemaObject(child) ? child : depth > 1 ? truncateSchemaDepth(child, references, depth - 1) : hasNestedSchema(child) ? summarizeSubschema(child, references) : child, ); /** Fit a full-profile advertisement under the client limit, summarizing only its deepest structure. */ export const fitAdvertisedInputSchema = ( schema: Record<string, unknown>, ): Record<string, unknown> => { if (serializedBytes(schema) <= ADVERTISED_INPUT_SCHEMA_LIMIT_BYTES) return schema; const described = { ...schema, description: (typeof schema.description === "string" ? `${schema.description} ` : "") + SUMMARIZED_ANNOTATION, }; const references = new JsonSchemaReferences(described); let fitted: Record<string, unknown> | undefined; // The uncut schema is over the limit, so the loop always ends. for (let depth = 1; ; depth++) { const truncated = truncateSchemaDepth(described, references, depth) as Record< string, unknown >; if (serializedBytes(truncated) > ADVERTISED_INPUT_SCHEMA_LIMIT_BYTES) break; fitted = truncated; } return ( fitted ?? compactAdvertisedInputSchema(schema, ADVERTISED_INPUT_SCHEMA_LIMIT_BYTES) .schema ); }; ``` ```ts // src/contracts/toolSchemaMetadata.ts import { fitAdvertisedInputSchema } from "./compactInputSchema.js"; // in toolInputSchemaWithMetadata return fitAdvertisedInputSchema({ ...presentInputJsonSchema(inline, fallbackPropertyDescription), ...(examples.length === 0 ? {} : { examples }), }); ``` The compact profile still applies on top of this through `presentAdvertisedInputSchema`. The recorded catalog digest would change. </details> A catalog-wide check in `tests/boundary/mcp/toolSchemaValidity.test.ts` that every advertised input schema is at most 65,536 bytes would catch the next one early. #4973 measured `inspect_analysis_view` at 49,804 bytes on main. ### Not run - Claude Desktop itself with the patched server. Only the replayed client check above was run. - A full `compare_web_captures` comparison with real captures. - The compact profile on top of the patch. - Claude Desktop on Windows. 🤖 Investigated and drafted with Claude Code (Opus 5.5); reviewed and posted by me.
Author
Owner

@kaoru0822-kitauji commented on GitHub (Oct 25, 2026):

Reopening: the fix in #7119 is being reverted by #7135 because it broke main CI. Once other merges grew inspect_analysis_view's complete input schema to 71,762 bytes plus 3,003 bytes of examples, the fitter fell back from instance level 3 to level 2. That summarized the inline Evidence source and view selectors, which existing contract tests require in full. A follow-up needs to shrink that schema's representation, not just pick a different cut.

🤖 Written with Claude Code (Opus 5.5)

<!-- gh-comment-id:6397972392 --> @kaoru0822-kitauji commented on GitHub (Oct 25, 2026): Reopening: the fix in #7119 is being reverted by #7135 because it broke main CI. Once other merges grew `inspect_analysis_view`'s complete input schema to 71,762 bytes plus 3,003 bytes of examples, the fitter fell back from instance level 3 to level 2. That summarized the inline Evidence source and view selectors, which existing contract tests require in full. A follow-up needs to shrink that schema's representation, not just pick a different cut. 🤖 Written with Claude Code (Opus 5.5)
Author
Owner

@morluto commented on GitHub (Oct 26, 2026):

Thank you for the detailed report and for confirming that the compact profile removes the connector warning on your installation. The same remaining compare_web_captures warning on the full profile is being tracked in #4973, including the later schema-size investigation and the reverted #7119 fix. I am closing this duplicate to keep the investigation together; the problem has not been established as fixed for the full profile. Please reopen if your installation exposes a distinct case that #4973 does not cover.

<!-- gh-comment-id:6428218505 --> @morluto commented on GitHub (Oct 26, 2026): Thank you for the detailed report and for confirming that the compact profile removes the connector warning on your installation. The same remaining `compare_web_captures` warning on the full profile is being tracked in #4973, including the later schema-size investigation and the reverted #7119 fix. I am closing this duplicate to keep the investigation together; the problem has not been established as fixed for the full profile. Please reopen if your installation exposes a distinct case that #4973 does not cover.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#1614
No description provided.