[GH-ISSUE #4973] [Bug] compare_web_captures / compare_web_screenshots fail in Claude ("problem with that connector") #3077

Open
opened 2026-10-31 00:36:03 +00:00 by bsakaguchi · 22 comments
Owner

Originally created by @fahadfarj on GitHub (Oct 18, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/4973

Before submitting

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

Area

Setup, packaging, or upgrade

Observed behavior

Claude shows: "Claude can't use Compare Web Captures from REA because of a problem with that connector."
compare_web_screenshots rejects every call: "before: Invalid input: expected object, received string, after: expected object, received string, channel_threshold: expected number, received string".
Other REA tools work normally (e.g. list_browser_targets returns structured errors).

Reproduction

  1. Run npx rea-agents@latest setup on Windows and select Claude Desktop.
  2. Restart Claude Desktop.
  3. Ask Claude to call compare_web_screenshots (or compare_web_captures).
  4. Observe the connector warning and the validation error.

Expected behavior

Both tools load in Claude without a connector warning and accept object/number arguments.

Impact and scope

Claude shows the warning every session, and both compare tools are unusable. Other REA tools are unaffected.

REA version

6.5.0

Runtime and platform

Node 24.20.0; Windows; Claude Desktop

Target and artifact context

not applicable

Interface

MCP

Earliest failure stage

Request parsing or validation

Relevant output or evidence

Command or MCP request actually run: compare_web_screenshots with two valid 1x1 PNG artifacts (before/after objects) and channel_threshold: 0.
Relevant result, error, or artifact: "Invalid arguments for tool compare_web_screenshots: before: expected object, received string, after: expected object, received string, channel_threshold: expected number, received string"
Missing evidence or remaining uncertainty: exact client-side schema handling is not visible to me.

Typed outcome or recovery expected

No response

Analysis or suspected cause

Both tools' input schemas use $ref/$defs (e.g. "#/$defs/__schema0"), and compare_web_captures has a very large nested schema. The client seems unable to resolve these refs, so object/number args arrive as strings. Suggested fix: inline/flatten the $ref definitions in these tools' input schemas.

Additional context

No response

Originally created by @fahadfarj on GitHub (Oct 18, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/4973 ### 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 Setup, packaging, or upgrade ### Observed behavior Claude shows: "Claude can't use Compare Web Captures from REA because of a problem with that connector." compare_web_screenshots rejects every call: "before: Invalid input: expected object, received string, after: expected object, received string, channel_threshold: expected number, received string". Other REA tools work normally (e.g. list_browser_targets returns structured errors). ### Reproduction 1. Run `npx rea-agents@latest setup` on Windows and select Claude Desktop. 2. Restart Claude Desktop. 3. Ask Claude to call compare_web_screenshots (or compare_web_captures). 4. Observe the connector warning and the validation error. ### Expected behavior Both tools load in Claude without a connector warning and accept object/number arguments. ### Impact and scope Claude shows the warning every session, and both compare tools are unusable. Other REA tools are unaffected. ### REA version 6.5.0 ### Runtime and platform Node 24.20.0; Windows; Claude Desktop ### Target and artifact context not applicable ### Interface MCP ### Earliest failure stage Request parsing or validation ### Relevant output or evidence Command or MCP request actually run: compare_web_screenshots with two valid 1x1 PNG artifacts (before/after objects) and channel_threshold: 0. Relevant result, error, or artifact: "Invalid arguments for tool compare_web_screenshots: before: expected object, received string, after: expected object, received string, channel_threshold: expected number, received string" Missing evidence or remaining uncertainty: exact client-side schema handling is not visible to me. ### Typed outcome or recovery expected _No response_ ### Analysis or suspected cause Both tools' input schemas use $ref/$defs (e.g. "#/$defs/__schema0"), and compare_web_captures has a very large nested schema. The client seems unable to resolve these refs, so object/number args arrive as strings. Suggested fix: inline/flatten the $ref definitions in these tools' input schemas. ### Additional context _No response_
Author
Owner

@VarunRaj004 commented on GitHub (Oct 18, 2026):

Hi, I’d like to take this one. I want to use REA from Claude myself, so a connector warning on every session is exactly the kind of thing I’d like to see fixed.

My plan is to dump the tools/list schemas first to confirm where $ref/$defs show up for these two tools, then flatten them and add a regression test so it stays fixed. I’ll post what I find here before opening a PR.

Could a maintainer assign it to me?

<!-- gh-comment-id:6246491549 --> @VarunRaj004 commented on GitHub (Oct 18, 2026): Hi, I’d like to take this one. I want to use REA from Claude myself, so a connector warning on every session is exactly the kind of thing I’d like to see fixed. My plan is to dump the tools/list schemas first to confirm where $ref/$defs show up for these two tools, then flatten them and add a regression test so it stays fixed. I’ll post what I find here before opening a PR. Could a maintainer assign it to me?
Author
Owner

@avichal-08 commented on GitHub (Oct 18, 2026):

Same root cause as #3408 / #4058 / #4081 : on 6.5.0 these tools' input schemas use $ref/$defs, and Claude Desktop passes the referenced object/number arguments as strings.

Fixed on main by 5e30969cc (from #4147), which is in the rea-agents-6.6.0 GitHub release. It isn't on npm yet, though: latest is still 6.5.0 and rea-agents@6.6.0 returns 404 (checked 2026-10-18 06:14 UTC), so npx rea-agents@latest setup still installs the affected version.

<!-- gh-comment-id:6246509237 --> @avichal-08 commented on GitHub (Oct 18, 2026): Same root cause as #3408 / #4058 / #4081 : on 6.5.0 these tools' input schemas use `$ref`/`$defs`, and Claude Desktop passes the referenced object/number arguments as strings. Fixed on `main` by 5e30969cc (from #4147), which is in the `rea-agents-6.6.0` GitHub release. It isn't on npm yet, though: `latest` is still 6.5.0 and `rea-agents@6.6.0` returns 404 (checked 2026-10-18 06:14 UTC), so `npx rea-agents@latest setup` still installs the affected version.
Author
Owner

@XinwangTao commented on GitHub (Oct 18, 2026):

avichal-08's bisect matches what I'd expect — 5e30969 resolving it on main confirms the $ref/$defs root cause, and the error shape (object/number args arriving as strings) is exactly what a client that can't resolve refs produces. The npm gap is now the real blocker: 6.6.0 exists as a GitHub release but rea-agents@6.6.0 returns 404, so every npx rea-agents@latest setup still installs the broken 6.5.0 schemas — same release story as #4985. VarunRaj004: +1 for the dump-schemas-then-flatten-plus-regression-test plan; if feasible, also add an assertion that tools/list contains no $ref for these two tools (or at all), since that's the contract Claude Desktop actually consumes. And separately: publishing 6.6.0 to npm would close this for end users even before the PR lands.

<!-- gh-comment-id:6247525415 --> @XinwangTao commented on GitHub (Oct 18, 2026): avichal-08's bisect matches what I'd expect — 5e30969 resolving it on main confirms the $ref/$defs root cause, and the error shape (object/number args arriving as strings) is exactly what a client that can't resolve refs produces. The npm gap is now the real blocker: 6.6.0 exists as a GitHub release but rea-agents@6.6.0 returns 404, so every npx rea-agents@latest setup still installs the broken 6.5.0 schemas — same release story as #4985. VarunRaj004: +1 for the dump-schemas-then-flatten-plus-regression-test plan; if feasible, also add an assertion that tools/list contains no $ref for these two tools (or at all), since that's the contract Claude Desktop actually consumes. And separately: publishing 6.6.0 to npm would close this for end users even before the PR lands.
Author
Owner

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

TL;DR: On main, compare_web_screenshots no longer has any $ref in its input schema, and it accepts object and number arguments. I could not test Claude Desktop itself. The compare_web_captures warning is still unexplained, because that tool had no $ref in 6.5.0 either.

Edit: I tested main e8da7e1ed (6.7.0) too. Results are here.

Results

I started the real stdio server (scripts/rea.mjs --mcp) and sent it raw tools/list and tools/call requests. Main is 92dadf933 (REA 6.7.0). The older build is the rea-agents-6.5.0 tag.

Check 6.5.0 (Node 24.18.0) main (Node 22.23.1, 24.18.0, 26.11.1)
Tools with an input $ref 168 of 207 0 of 207, same on all three Nodes
compare_web_screenshots input schema 7 $ref, 1 $defs 0 $ref, 0 $defs
compare_web_captures input schema 0 $ref, 0 $defs, 154,738 bytes 0 $ref, 0 $defs, 165,694 bytes
compare_web_screenshots with two 1x1 PNG objects and channel_threshold: 0 identical, 0 changed pixels identical, 0 changed pixels, same on all three Nodes
  • The same call with strings gives "expected object, received string" on both builds. So that message comes from a client that sends strings. The server is right to refuse them.
  • Existing tests pass on Node 22, 24 and 26. There are 37 tests in total on each Node. They are toolSchemaValidity, browserComparisonInput and toolInputReferences.
  • toolSchemaValidity already asserts that no tool advertises an input $ref.
  • rea-agents@latest on npm is now 6.7.0 (published 08:12 UTC). There was never a 6.6.0 on npm. So the npm gap mentioned in this thread is closed.

One open question

In 6.5.0, compare_web_captures had no $ref or $defs in its input schema. Only compare_web_screenshots did. The 6.5.0 source has a likely reason. It has a budget of 32 shared references per input. A schema over that budget is sent inline (inputSchemaWithinReferenceExpansionBudget in src/contracts/inputSchemaPresentation.ts). I did not count the expansions for compare_web_captures, but its schema is huge, so it probably went inline. If so, $ref was never the cause for that tool, and its schema is the same inline shape on main. That input schema is also the largest by far: about 5 times the next tool, on 6.5.0 and on main. I do not know if size matters to Claude Desktop, or what else in it could trip the client.

Not run

  • Claude Desktop, Windows, and Node 24.20.0 from the report.
  • Any change to the compare_web_captures schema to see if the warning goes away.

Thanks, fahadfarj, for the clear report. Thanks, avichal-08, for tracing the fix to 5e30969cc.

Commands
  • Build: npm ci --ignore-scripts, npm run prepare, npm run build:cached, npm run test:prepare.
  • Tests: npm run test:focused -- tests/boundary/mcp/toolSchemaValidity.test.ts tests/boundary/mcp/browserComparisonInput.test.ts src/contracts/toolInputReferences.test.ts.
  • Probe: a small script started node scripts/rea.mjs --mcp, sent initialize, tools/list and tools/call as JSON lines, and counted the $ref and $defs keys in each tool's input schema.
Test setup
  • Box: Nobara 44 (Fedora 44 base), Linux 7.2.9
  • CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads
  • RAM: 32 GB DDR4-3600
  • Node: 22.23.1, 24.18.0, 26.11.1
  • Head / base: 92dadf9334 / none (comparison build: tag rea-agents-6.5.0)

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

<!-- gh-comment-id:6256993306 --> @CassieFox23 commented on GitHub (Oct 19, 2026): **TL;DR:** On main, `compare_web_screenshots` no longer has any `$ref` in its input schema, and it accepts object and number arguments. I could not test Claude Desktop itself. The `compare_web_captures` warning is still unexplained, because that tool had no `$ref` in 6.5.0 either. **Edit:** I tested main e8da7e1ed (6.7.0) too. Results are [here](https://github.com/morluto/rea/issues/4973#issuecomment-6270053127). ### Results I started the real stdio server (`scripts/rea.mjs --mcp`) and sent it raw `tools/list` and `tools/call` requests. Main is 92dadf933 (REA 6.7.0). The older build is the rea-agents-6.5.0 tag. | Check | 6.5.0 (Node 24.18.0) | main (Node 22.23.1, 24.18.0, 26.11.1) | |---|---|---| | Tools with an input `$ref` | 168 of 207 | 0 of 207, same on all three Nodes | | `compare_web_screenshots` input schema | 7 `$ref`, 1 `$defs` | 0 `$ref`, 0 `$defs` | | `compare_web_captures` input schema | 0 `$ref`, 0 `$defs`, 154,738 bytes | 0 `$ref`, 0 `$defs`, 165,694 bytes | | `compare_web_screenshots` with two 1x1 PNG objects and `channel_threshold: 0` | identical, 0 changed pixels | identical, 0 changed pixels, same on all three Nodes | - The same call with strings gives "expected object, received string" on both builds. So that message comes from a client that sends strings. The server is right to refuse them. - Existing tests pass on Node 22, 24 and 26. There are 37 tests in total on each Node. They are `toolSchemaValidity`, `browserComparisonInput` and `toolInputReferences`. - `toolSchemaValidity` already asserts that no tool advertises an input `$ref`. - `rea-agents@latest` on npm is now 6.7.0 (published 08:12 UTC). There was never a 6.6.0 on npm. So the npm gap mentioned in this thread is closed. ### One open question In 6.5.0, `compare_web_captures` had no `$ref` or `$defs` in its input schema. Only `compare_web_screenshots` did. The 6.5.0 source has a likely reason. It has a budget of 32 shared references per input. A schema over that budget is sent inline (`inputSchemaWithinReferenceExpansionBudget` in `src/contracts/inputSchemaPresentation.ts`). I did not count the expansions for `compare_web_captures`, but its schema is huge, so it probably went inline. If so, `$ref` was never the cause for that tool, and its schema is the same inline shape on main. That input schema is also the largest by far: about 5 times the next tool, on 6.5.0 and on main. I do not know if size matters to Claude Desktop, or what else in it could trip the client. ### Not run - Claude Desktop, Windows, and Node 24.20.0 from the report. - Any change to the `compare_web_captures` schema to see if the warning goes away. Thanks, fahadfarj, for the clear report. Thanks, avichal-08, for tracing the fix to 5e30969cc. <details> <summary>Commands</summary> - Build: `npm ci --ignore-scripts`, `npm run prepare`, `npm run build:cached`, `npm run test:prepare`. - Tests: `npm run test:focused -- tests/boundary/mcp/toolSchemaValidity.test.ts tests/boundary/mcp/browserComparisonInput.test.ts src/contracts/toolInputReferences.test.ts`. - Probe: a small script started `node scripts/rea.mjs --mcp`, sent `initialize`, `tools/list` and `tools/call` as JSON lines, and counted the `$ref` and `$defs` keys in each tool's input schema. </details> <details> <summary>Test setup</summary> - Box: Nobara 44 (Fedora 44 base), Linux 7.2.9 - CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads - RAM: 32 GB DDR4-3600 - Node: 22.23.1, 24.18.0, 26.11.1 - Head / base: 92dadf93344296516b960487d2f49c0f67e246fa / none (comparison build: tag rea-agents-6.5.0) </details> 🤖 Generated with Claude Code (Sonnet 5.5, verified by Opus 5.5) 🦊
Author
Owner

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

Thanks for the detailed report. I can reproduce the same failure on Claude Desktop: both compare_web_captures and compare_web_screenshots fail with "problem with that connector", and the validation errors show the params are being sent as strings instead of the expected object/number types. This looks related to the $ref parameter serialization issue referenced in the linked reports, so fixing the MCP tool schema should resolve both tools at the same time.

<!-- gh-comment-id:6257518748 --> @XinwangTao commented on GitHub (Oct 19, 2026): Thanks for the detailed report. I can reproduce the same failure on Claude Desktop: both compare_web_captures and compare_web_screenshots fail with "problem with that connector", and the validation errors show the params are being sent as strings instead of the expected object/number types. This looks related to the $ref parameter serialization issue referenced in the linked reports, so fixing the MCP tool schema should resolve both tools at the same time.
Author
Owner

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

TL;DR: On main, neither tool sends a $ref, so a $ref fix would change nothing for them. Both tools do reject JSON strings, with the same expected object, received string wording as this issue. compare_web_captures is still a 165,694-byte schema. I could not run Claude Desktop to see if that is the cause.

Thanks to XinwangTao for reproducing this on Claude Desktop. Thanks, fahadfarj, for the report. I started the MCP server from main (e8da7e1ed, version 6.7.0) and read what it sends in tools/list. My earlier test did the same on 6.5.0.

Results

Tool Schema size $ref Schema levels
compare_web_captures 165,694 bytes 0 17
compare_web_screenshots 1,465 bytes 0 2
capture_web_screenshot 631 bytes 0 2
  • Schema levels count nested schemas. Counting every JSON object level gives a higher number. This includes the wrapper keys. So IanBaswana's 31 on #4081 is a different count. I did not recount it that way.
  • In 6.5.0, compare_web_captures had no $ref either, so $ref does not explain that tool.
  • I sent both tools their object and number arguments as JSON strings. The server answered Invalid input: expected object, received string and channel_threshold: Invalid input: expected number, received string. That matches the message in this issue. The server never converts strings. So the client is the one sending strings, and I can't tell why from here.
  • Setting REA_MCP_INPUT_SCHEMA_PROFILE=compact shrinks compare_web_captures to 891 bytes. IanBaswana suggests the compact profile on #4081. It is a workaround for Claude Desktop. I could not check that.
  • No commit since 6.7.0 changes these schemas' source files. Open PRs #2905 and #3806 change only the compact-profile file, and I did not run them.

XinwangTao, which REA version were you on, and can you paste the full error text?

More schema numbers
  • None of the 207 tools has a $ref, a $defs, a top-level anyOf, oneOf or allOf, or a type array.
  • The next largest schema is compare_application_versions at 30,271 bytes. The next deepest has 11 levels. So compare_web_captures is the one outlier.
Side finding
  • compare_web_screenshots' own built-in example (examples[0]) fails on main with invalid_format: Invalid PNG chunk checksum. Open PR #3995 has a fix, the commit "advertise a screenshot example with a valid PNG checksum" (066a48ab6). I did not read that PR further.

Not run

  • Claude Desktop, on any system. I do not have it, so I can't say what makes the warning appear or go away.
  • Any trimmed version of the compare_web_captures schema.
  • A build of the 6.7.0 tag itself. The browser schema files and their direct imports are identical in the tag and main.
Test setup
  • Box: Nobara 44 (Fedora 44 base), Linux 7.2.9
  • CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads
  • RAM: 32 GB DDR4-3600
  • Node: 24.18.0
  • Head: e8da7e1ed (version 6.7.0), tag rea-agents-6.7.0 is 27dc42d10
Commands
git archive e8da7e1ed | tar -x -C /tmp/ev-4973
npm --prefix /tmp/ev-4973 ci --ignore-scripts
npm --prefix /tmp/ev-4973 run build:cached
node scripts/rea.mjs --mcp   # stdio: initialize, tools/list, tools/call
REA_MCP_INPUT_SCHEMA_PROFILE=compact node scripts/rea.mjs --mcp

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

<!-- gh-comment-id:6270053127 --> @CassieFox23 commented on GitHub (Oct 19, 2026): **TL;DR:** On main, neither tool sends a `$ref`, so a `$ref` fix would change nothing for them. Both tools do reject JSON strings, with the same `expected object, received string` wording as this issue. `compare_web_captures` is still a 165,694-byte schema. I could not run Claude Desktop to see if that is the cause. Thanks to XinwangTao for reproducing this on Claude Desktop. Thanks, fahadfarj, for the report. I started the MCP server from main (e8da7e1ed, version 6.7.0) and read what it sends in `tools/list`. [My earlier test](https://github.com/morluto/rea/issues/4973#issuecomment-6256993306) did the same on 6.5.0. ### Results | Tool | Schema size | `$ref` | Schema levels | |---|---|---|---| | `compare_web_captures` | 165,694 bytes | 0 | 17 | | `compare_web_screenshots` | 1,465 bytes | 0 | 2 | | `capture_web_screenshot` | 631 bytes | 0 | 2 | - Schema levels count nested schemas. Counting every JSON object level gives a higher number. This includes the wrapper keys. So IanBaswana's 31 on #4081 is a different count. I did not recount it that way. - In 6.5.0, `compare_web_captures` had no `$ref` either, so `$ref` does not explain that tool. - I sent both tools their object and number arguments as JSON strings. The server answered `Invalid input: expected object, received string` and `channel_threshold: Invalid input: expected number, received string`. That matches the message in this issue. The server never converts strings. So the client is the one sending strings, and I can't tell why from here. - Setting `REA_MCP_INPUT_SCHEMA_PROFILE=compact` shrinks `compare_web_captures` to 891 bytes. IanBaswana suggests the compact profile on #4081. It is a workaround for Claude Desktop. I could not check that. - No commit since 6.7.0 changes these schemas' source files. Open PRs #2905 and #3806 change only the compact-profile file, and I did not run them. XinwangTao, which REA version were you on, and can you paste the full error text? <details> <summary>More schema numbers</summary> - None of the 207 tools has a `$ref`, a `$defs`, a top-level `anyOf`, `oneOf` or `allOf`, or a `type` array. - The next largest schema is `compare_application_versions` at 30,271 bytes. The next deepest has 11 levels. So `compare_web_captures` is the one outlier. </details> <details> <summary>Side finding</summary> - `compare_web_screenshots`' own built-in example (`examples[0]`) fails on main with `invalid_format: Invalid PNG chunk checksum`. Open PR #3995 has a fix, the commit "advertise a screenshot example with a valid PNG checksum" (066a48ab6). I did not read that PR further. </details> ### Not run - Claude Desktop, on any system. I do not have it, so I can't say what makes the warning appear or go away. - Any trimmed version of the `compare_web_captures` schema. - A build of the 6.7.0 tag itself. The browser schema files and their direct imports are identical in the tag and main. <details> <summary>Test setup</summary> - Box: Nobara 44 (Fedora 44 base), Linux 7.2.9 - CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads - RAM: 32 GB DDR4-3600 - Node: 24.18.0 - Head: e8da7e1ed (version 6.7.0), tag rea-agents-6.7.0 is 27dc42d10 </details> <details> <summary>Commands</summary> ``` git archive e8da7e1ed | tar -x -C /tmp/ev-4973 npm --prefix /tmp/ev-4973 ci --ignore-scripts npm --prefix /tmp/ev-4973 run build:cached node scripts/rea.mjs --mcp # stdio: initialize, tools/list, tools/call REA_MCP_INPUT_SCHEMA_PROFILE=compact node scripts/rea.mjs --mcp ``` </details> 🤖 Generated with Claude Code (Sonnet 5.5, verified by Opus 5.5) 🦊
Author
Owner

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

Good catch on the version question. When I reproduced the failure it was Claude Desktop on Windows with npx rea-agents@latest from npm at that time — which was still 6.5.0, since the 6.6.0 GitHub release was never published to npm. The error text matched the report exactly: the connector warning "Claude can't use Compare Web Captures from REA because of a problem with that connector", plus compare_web_screenshots rejecting calls with "expected object, received string / channel_threshold: expected number, received string".

Since 6.7.0 is now on npm and main no longer advertises $ref for these tools, the $ref family should be resolved for end users after upgrading. The remaining open question is the compare_web_captures connector warning on 6.5.0, which never had $ref — worth re-testing on 6.7.0; if it persists, the compact-profile workaround from #4081 is the pragmatic path while the schema size question is investigated.

<!-- gh-comment-id:6281030792 --> @XinwangTao commented on GitHub (Oct 20, 2026): Good catch on the version question. When I reproduced the failure it was Claude Desktop on Windows with `npx rea-agents@latest` from npm at that time — which was still 6.5.0, since the 6.6.0 GitHub release was never published to npm. The error text matched the report exactly: the connector warning "Claude can't use Compare Web Captures from REA because of a problem with that connector", plus compare_web_screenshots rejecting calls with "expected object, received string / channel_threshold: expected number, received string". Since 6.7.0 is now on npm and main no longer advertises $ref for these tools, the $ref family should be resolved for end users after upgrading. The remaining open question is the compare_web_captures connector warning on 6.5.0, which never had $ref — worth re-testing on 6.7.0; if it persists, the compact-profile workaround from #4081 is the pragmatic path while the schema size question is investigated.
Author
Owner

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

TL;DR: On REA 6.7.0 in Claude Code on Linux, compare_web_screenshots works with a number threshold. A string threshold gets the same type error as this issue. The compare_web_captures schema loads, but I did not call that tool. I did not test Claude Desktop or Windows.

Thanks, XinwangTao, for the version answer and the exact error text. This run is Claude Code on Linux, not Claude Desktop on Windows.

Results

Check Result
Both tool schemas load in Claude Code Yes, compare_web_captures included. Not called.
compare_web_screenshots, channel_threshold: 0 ok, status different, 100 of 4,096 pixels changed
Same call, channel_threshold: "0.1" (string) Error: channel_threshold: Invalid input: expected number, received string

The schema types channel_threshold as an integer from 0 to 255. So 0.1 is not a valid value for it, as a number or a string.

The 100 changed pixels match a 10x10 red square I drew into the second test image.

Not run

  • Claude Desktop and Windows.
  • REA 6.5.0 with npx rea-agents@latest on Windows.
  • compare_web_captures calls. No live browser was run.
Test setup
  • Box: Nobara 44 (Fedora 44 base), Linux 7.2.11
  • CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads
  • RAM: 32 GB DDR4-3600
  • Node: 22.23.1
  • Other: REA 6.7.0 MCP server, Claude Code 2.1.304
  • Test images: two 64x64 RGB PNGs made by a short stdlib-only Python script

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

<!-- gh-comment-id:6294287437 --> @CassieFox23 commented on GitHub (Oct 20, 2026): **TL;DR:** On REA 6.7.0 in Claude Code on Linux, `compare_web_screenshots` works with a number threshold. A string threshold gets the same type error as this issue. The `compare_web_captures` schema loads, but I did not call that tool. I did not test Claude Desktop or Windows. Thanks, XinwangTao, for the version answer and the exact error text. This run is Claude Code on Linux, not Claude Desktop on Windows. ### Results | Check | Result | |---|---| | Both tool schemas load in Claude Code | Yes, `compare_web_captures` included. Not called. | | `compare_web_screenshots`, `channel_threshold: 0` | ok, status `different`, 100 of 4,096 pixels changed | | Same call, `channel_threshold: "0.1"` (string) | Error: `channel_threshold: Invalid input: expected number, received string` | The schema types `channel_threshold` as an integer from 0 to 255. So `0.1` is not a valid value for it, as a number or a string. The 100 changed pixels match a 10x10 red square I drew into the second test image. ### Not run - Claude Desktop and Windows. - REA 6.5.0 with `npx rea-agents@latest` on Windows. - `compare_web_captures` calls. No live browser was run. <details> <summary>Test setup</summary> - Box: Nobara 44 (Fedora 44 base), Linux 7.2.11 - CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads - RAM: 32 GB DDR4-3600 - Node: 22.23.1 - Other: REA 6.7.0 MCP server, Claude Code 2.1.304 - Test images: two 64x64 RGB PNGs made by a short stdlib-only Python script </details> 🤖 Generated with Claude Code (Haiku 5.5, verified by Opus 5.5) 🦊
Author
Owner

@XinwangTao commented on GitHub (Oct 21, 2026):

Thanks for the Claude Code / Linux datapoint, CassieFox23. The schema/behaviour mismatch you noticed is worth pinning down: the schema declares channel_threshold as integer 0–255, yet 0.1 (a non-integer float) is accepted and works, which means the declared type and the actual validation don't agree. If the intent is to accept fractional thresholds, the schema should be widened to number (and docs updated); if only integers are valid, the float acceptance is a separate validation bug. This inconsistency also explains part of the "expected number, received string" confusion for clients that just mirror the schema. Either way, aligning schema + validation + docs here would close the remaining gap on 6.7.0+.

<!-- gh-comment-id:6305516506 --> @XinwangTao commented on GitHub (Oct 21, 2026): Thanks for the Claude Code / Linux datapoint, CassieFox23. The schema/behaviour mismatch you noticed is worth pinning down: the schema declares channel_threshold as integer 0–255, yet 0.1 (a non-integer float) is accepted and works, which means the declared type and the actual validation don't agree. If the intent is to accept fractional thresholds, the schema should be widened to number (and docs updated); if only integers are valid, the float acceptance is a separate validation bug. This inconsistency also explains part of the "expected number, received string" confusion for clients that just mirror the schema. Either way, aligning schema + validation + docs here would close the remaining gap on 6.7.0+.
Author
Owner

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

Thanks, XinwangTao. To be clear on what I ran: 0 as a number worked, and "0.1" as a string got the type error. I never sent a plain number 0.1. My line about 0.1 came from reading the schema, not from a test. So I can't confirm the float case either way.

🤖 Written with Claude Code (Haiku 5.5, verified by Opus 5.5), posted with my OK 🦊

<!-- gh-comment-id:6307046700 --> @CassieFox23 commented on GitHub (Oct 21, 2026): Thanks, XinwangTao. To be clear on what I ran: `0` as a number worked, and `"0.1"` as a string got the type error. I never sent a plain number 0.1. My line about 0.1 came from reading the schema, not from a test. So I can't confirm the float case either way. 🤖 Written with Claude Code (Haiku 5.5, verified by Opus 5.5), posted with my OK 🦊
Author
Owner

@XinwangTao commented on GitHub (Oct 21, 2026):

Thanks for the clarification, CassieFox23 — so the float case (plain number 0.1) is still untested, which means the schema/validation mismatch I flagged is unconfirmed either way. A quick probe sending a real numeric 0.1 (and 0.25) to compare_web_screenshots on main would settle it: if accepted, the integer 0–255 declaration is wrong and should be widened to number; if rejected, validation and schema agree and there's nothing to fix there. Separately, the 165 KB / 17-level compare_web_captures schema remains the plausible trigger for the Claude Desktop warning on 6.5.0 — worth verifying whether the compact-profile workaround (#4081) makes the connector warning disappear on the same client, which would isolate schema size/depth as the cause.

<!-- gh-comment-id:6307755491 --> @XinwangTao commented on GitHub (Oct 21, 2026): Thanks for the clarification, CassieFox23 — so the float case (plain number 0.1) is still untested, which means the schema/validation mismatch I flagged is unconfirmed either way. A quick probe sending a real numeric 0.1 (and 0.25) to compare_web_screenshots on main would settle it: if accepted, the integer 0–255 declaration is wrong and should be widened to number; if rejected, validation and schema agree and there's nothing to fix there. Separately, the 165 KB / 17-level compare_web_captures schema remains the plausible trigger for the Claude Desktop warning on 6.5.0 — worth verifying whether the compact-profile workaround (#4081) makes the connector warning disappear on the same client, which would isolate schema size/depth as the cause.
Author
Owner

@Shreyash021104 commented on GitHub (Oct 21, 2026):

Checked the suspected cause against current main (a5f982d): built from source and listed the tools over stdio (tools/list, protocol 2025-06-18).

  • No tool in the 212-tool catalog uses $ref or $defs anymore.
  • compare_web_screenshots now has a flat input schema (1,465 bytes): before and after are plain objects, and channel_threshold is an integer (0 to 255). There is nothing left for a client to resolve, so the string-argument failure described here should be gone.
  • compare_web_captures is still the largest input schema in the catalog: 166,024 bytes of compact JSON (the next largest, inspect_analysis_view, is 49,804). It contains 230 anyOf, 46 oneOf, 18 not and 220 const. before_scenario and after_scenario are about 48.7 KB each, and before and after about 31.1 KB each.

So the $ref part looks fixed on main, but compare_web_captures is still a very large nested schema. I could not test Claude Desktop itself (Linux only here).

@fahadfarj, could you retest both tools on the latest release? If only compare_web_captures still shows the connector warning, that would point at its schema size rather than references.

<!-- gh-comment-id:6310441193 --> @Shreyash021104 commented on GitHub (Oct 21, 2026): Checked the suspected cause against current `main` (`a5f982d`): built from source and listed the tools over stdio (`tools/list`, protocol `2025-06-18`). - No tool in the 212-tool catalog uses `$ref` or `$defs` anymore. - `compare_web_screenshots` now has a flat input schema (1,465 bytes): `before` and `after` are plain objects, and `channel_threshold` is an integer (0 to 255). There is nothing left for a client to resolve, so the string-argument failure described here should be gone. - `compare_web_captures` is still the largest input schema in the catalog: 166,024 bytes of compact JSON (the next largest, `inspect_analysis_view`, is 49,804). It contains 230 `anyOf`, 46 `oneOf`, 18 `not` and 220 `const`. `before_scenario` and `after_scenario` are about 48.7 KB each, and `before` and `after` about 31.1 KB each. So the `$ref` part looks fixed on `main`, but `compare_web_captures` is still a very large nested schema. I could not test Claude Desktop itself (Linux only here). @fahadfarj, could you retest both tools on the latest release? If only `compare_web_captures` still shows the connector warning, that would point at its schema size rather than references.
Author
Owner

@VarunRaj004 commented on GitHub (Oct 21, 2026):

Tested on REA 6.7.0 (pinned by rea setup) in Claude Desktop on Windows, Node 26.12.1, Claude Desktop .

  • compare_web_screenshots: called with two 1x1 PNG objects and channel_threshold: 0 as a number. It succeeded: status different, 1/1 pixels changed, max channel delta 255, mean 127.5. No “expected object, received string” errors.

  • compare_web_captures: loads and is callable, with no “problem with that connector” warning. I called it with no arguments and got the expected validation error for before/after/before_scenario/after_scenario. I did not run a full comparison with real inspect_web_page captures.

Not tested: 6.5.0, or a non-integer channel_threshold. Both symptoms from the report don’t reproduce on 6.7.0. @fahadfarj could you confirm after upgrading?

<!-- gh-comment-id:6321204251 --> @VarunRaj004 commented on GitHub (Oct 21, 2026): Tested on REA 6.7.0 (pinned by rea setup) in Claude Desktop on Windows, Node 26.12.1, Claude Desktop <version>. - compare_web_screenshots: called with two 1x1 PNG objects and channel_threshold: 0 as a number. It succeeded: status different, 1/1 pixels changed, max channel delta 255, mean 127.5. No “expected object, received string” errors. - compare_web_captures: loads and is callable, with no “problem with that connector” warning. I called it with no arguments and got the expected validation error for before/after/before_scenario/after_scenario. I did not run a full comparison with real inspect_web_page captures. Not tested: 6.5.0, or a non-integer channel_threshold. Both symptoms from the report don’t reproduce on 6.7.0. @fahadfarj could you confirm after upgrading?
Author
Owner

@Shreyash021104 commented on GitHub (Oct 21, 2026):

Thanks for testing on real Claude Desktop, that closes the gap I couldn't cover from Linux. Matches the schema check on main (no $ref, flat compare_web_screenshots input). The one open item is a full compare_web_captures run with real inspect_web_page captures, given its input schema is still ~166 KB.

<!-- gh-comment-id:6322275326 --> @Shreyash021104 commented on GitHub (Oct 21, 2026): Thanks for testing on real Claude Desktop, that closes the gap I couldn't cover from Linux. Matches the schema check on main (no `$ref`, flat `compare_web_screenshots` input). The one open item is a full `compare_web_captures` run with real `inspect_web_page` captures, given its input schema is still ~166 KB.
Author
Owner

@XinwangTao commented on GitHub (Oct 22, 2026):

VarunRaj004 的 Claude Desktop / Windows 实测很有价值:原始报告的两个症状(connector warning 和 string 参数校验失败)在 6.7.0 上都不再复现,说明 $ref 家族根因已随 npm 6.7.0 发布闭合。剩余两个未覆盖点值得收尾:1) channel_threshold 的浮点语义仍未实测——目前 schema 声明 integer 0-255,若真传 number 0.1 被接受则 schema 声明过窄,被拒绝则一致;2) compare_web_captures 尚未用真实 inspect_web_page 捕获跑完整对比,且其输入 schema 仍是目录里最大的(约 166 KB),需在原报告人升级后确认是否仍触发 connector warning——若仍触发,则可锁定为 schema 规模问题并推动 #2905/#3806 的 compact profile 默认化。

<!-- gh-comment-id:6330451824 --> @XinwangTao commented on GitHub (Oct 22, 2026): VarunRaj004 的 Claude Desktop / Windows 实测很有价值:原始报告的两个症状(connector warning 和 string 参数校验失败)在 6.7.0 上都不再复现,说明 $ref 家族根因已随 npm 6.7.0 发布闭合。剩余两个未覆盖点值得收尾:1) channel_threshold 的浮点语义仍未实测——目前 schema 声明 integer 0-255,若真传 number 0.1 被接受则 schema 声明过窄,被拒绝则一致;2) compare_web_captures 尚未用真实 inspect_web_page 捕获跑完整对比,且其输入 schema 仍是目录里最大的(约 166 KB),需在原报告人升级后确认是否仍触发 connector warning——若仍触发,则可锁定为 schema 规模问题并推动 #2905/#3806 的 compact profile 默认化。
Author
Owner

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

Thanks, XinwangTao. I ran the float case on REA 6.7.0 over MCP, from Claude Code on Linux. I sent the number 0.1 as channel_threshold. It was refused before any work: "expected int, received number". 0.25 gave the same error. So the integer schema and the check agree.

A side note: with a threshold of 0, the tool's own example PNG fails. The error is "Invalid PNG chunk checksum". #3995 fixes that example. I did not run compare_web_captures.

🤖 Written and tested with Claude Code (Opus 5.5), posted with my OK 🦊

<!-- gh-comment-id:6348368286 --> @CassieFox23 commented on GitHub (Oct 22, 2026): Thanks, XinwangTao. I ran the float case on REA 6.7.0 over MCP, from Claude Code on Linux. I sent the number 0.1 as `channel_threshold`. It was refused before any work: "expected int, received number". 0.25 gave the same error. So the integer schema and the check agree. A side note: with a threshold of 0, the tool's own example PNG fails. The error is "Invalid PNG chunk checksum". #3995 fixes that example. I did not run `compare_web_captures`. 🤖 Written and tested with Claude Code (Opus 5.5), posted with my OK 🦊
Author
Owner

@XinwangTao commented on GitHub (Oct 23, 2026):

Thanks for running the float case, CassieFox23 — that settles the open question: the integer 0-255 schema declaration and the actual validation agree (0.1/0.25 both refused as "expected int"), so nothing needs widening there. The example-PNG checksum failure at threshold 0 being tracked by #3995 is a good catch too; after that lands, the tool's own docs example should work end to end. The remaining suspect stays compare_web_captures' ~166 KB schema size for the 6.5.0 connector warning, so asking the original reporter to retest on 6.7.0 is still the right next step.

<!-- gh-comment-id:6354947437 --> @XinwangTao commented on GitHub (Oct 23, 2026): Thanks for running the float case, CassieFox23 — that settles the open question: the integer 0-255 schema declaration and the actual validation agree (0.1/0.25 both refused as "expected int"), so nothing needs widening there. The example-PNG checksum failure at threshold 0 being tracked by #3995 is a good catch too; after that lands, the tool's own docs example should work end to end. The remaining suspect stays compare_web_captures' ~166 KB schema size for the 6.5.0 connector warning, so asking the original reporter to retest on 6.7.0 is still the right next step.
Author
Owner

@abdullah-erturk commented on GitHub (Oct 23, 2026):

Same on Windows 11 x64 + Claude Desktop with latest rea-agents (global npm install, node.exe + rea.mjs mcp).
Warning appears on every session; reproduces after reinstall/update.

<!-- gh-comment-id:6370884095 --> @abdullah-erturk commented on GitHub (Oct 23, 2026): Same on Windows 11 x64 + Claude Desktop with latest rea-agents (global npm install, node.exe + rea.mjs mcp). Warning appears on every session; reproduces after reinstall/update.
Author
Owner

@VarunRaj004 commented on GitHub (Oct 23, 2026):

Tested on REA 6.7.0 (pinned by rea setup) in Claude Desktop on Windows, Node 26.12.1, Claude Desktop .

  • compare_web_screenshots: called with two 1x1 PNG objects and channel_threshold: 0 as a number. It succeeded: status different, 1/1 pixels changed, max channel delta 255, mean 127.5. No “expected object, received string” errors.
  • compare_web_captures: loads and is callable, with no “problem with that connector” warning. I called it with no arguments and got the expected validation error for before/after/before_scenario/after_scenario. I did not run a full comparison with real inspect_web_page captures.

Not tested: 6.5.0, or a non-integer channel_threshold. Both symptoms from the report don’t reproduce on 6.7.0. @fahadfarj could you confirm after upgrading?

Correction to my earlier comment. On REA 6.7.0 (pinned by rea setup) in Claude Desktop on Windows (Node 26.12.1, Claude Desktop), the connector warning does still appear: “Claude can’t use Compare Web Captures from REA because of a problem with that connector. Update or reinstall REA.” It shows at Claude Desktop startup, and I missed it in my first test. compare_web_screenshots is unaffected and works with object and number arguments.

Since compare_web_captures has no $ref on 6.7.0, the warning isn’t a $ref problem. That fits the large schema theory (about 166 KB). I’m testing REA_MCP_INPUT_SCHEMA_PROFILE=compact next and will report whether the warning goes away.

<!-- gh-comment-id:6370957402 --> @VarunRaj004 commented on GitHub (Oct 23, 2026): > Tested on REA 6.7.0 (pinned by rea setup) in Claude Desktop on Windows, Node 26.12.1, Claude Desktop . > > * compare_web_screenshots: called with two 1x1 PNG objects and channel_threshold: 0 as a number. It succeeded: status different, 1/1 pixels changed, max channel delta 255, mean 127.5. No “expected object, received string” errors. > * compare_web_captures: loads and is callable, with no “problem with that connector” warning. I called it with no arguments and got the expected validation error for before/after/before_scenario/after_scenario. I did not run a full comparison with real inspect_web_page captures. > > Not tested: 6.5.0, or a non-integer channel_threshold. Both symptoms from the report don’t reproduce on 6.7.0. [@fahadfarj](https://github.com/fahadfarj) could you confirm after upgrading? Correction to my earlier comment. On REA 6.7.0 (pinned by rea setup) in Claude Desktop on Windows (Node 26.12.1, Claude Desktop), the connector warning does still appear: “Claude can’t use Compare Web Captures from REA because of a problem with that connector. Update or reinstall REA.” It shows at Claude Desktop startup, and I missed it in my first test. compare_web_screenshots is unaffected and works with object and number arguments. Since compare_web_captures has no $ref on 6.7.0, the warning isn’t a $ref problem. That fits the large schema theory (about 166 KB). I’m testing REA_MCP_INPUT_SCHEMA_PROFILE=compact next and will report whether the warning goes away.
Author
Owner

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

For context, the original reporter of #4081 confirmed that the compact profile removes the same connector warning, while its later comments document the full-profile schema-size investigation and the #7119 revert. I closed that duplicate to keep the remaining work here; the full-profile warning remains open.

<!-- gh-comment-id:6428219003 --> @morluto commented on GitHub (Oct 26, 2026): For context, the original reporter of #4081 confirmed that the compact profile removes the same connector warning, while its later comments document the full-profile schema-size investigation and the #7119 revert. I closed that duplicate to keep the remaining work here; the full-profile warning remains open.
Author
Owner

@VarunRaj004 commented on GitHub (Oct 27, 2026):

27. For context, the original reporter of #4081 confirmed that the compact profile removes the same connector warning, while its later comments document the full-profile schema-size investigation and the #7119 revert. I closed that duplicate to keep the remaining work here; the full-profile warning remains open.

Result of the compact test (Windows, Claude Desktop Store install, REA ___, Claude Desktop ___):

Full profile (REA 6.7.0, default): the “problem with that connector” warning for Compare Web Captures appears after Claude Desktop starts.
With "env": { "REA_MCP_INPUT_SCHEMA_PROFILE": "compact" } in the REA server entry, I did not see the warning after fully quitting and reopening Claude Desktop.
The warning also came back once with env removed, so this isn’t a clean A-B-A yet. I’ve only done a few restarts.

This matches the 64 KiB per-tool limit from #4081 (full compare_web_captures is about 166 KB). I haven’t tested a release where compact is the default. Happy to take a look at the reverted fitting fix (#7119 / #7135) if that’s still wanted. Which direction would you prefer for the full profile?

<!-- gh-comment-id:6433209289 --> @VarunRaj004 commented on GitHub (Oct 27, 2026): > 27\. For context, the original reporter of [#4081](https://github.com/morluto/rea/issues/4081) confirmed that the compact profile removes the same connector warning, while its later comments document the full-profile schema-size investigation and the [#7119](https://github.com/morluto/rea/pull/7119) revert. I closed that duplicate to keep the remaining work here; the full-profile warning remains open. Result of the compact test (Windows, Claude Desktop Store install, REA ___, Claude Desktop ___): Full profile (REA 6.7.0, default): the “problem with that connector” warning for Compare Web Captures appears after Claude Desktop starts. With "env": { "REA_MCP_INPUT_SCHEMA_PROFILE": "compact" } in the REA server entry, I did not see the warning after fully quitting and reopening Claude Desktop. The warning also came back once with env removed, so this isn’t a clean A-B-A yet. I’ve only done a few restarts. This matches the 64 KiB per-tool limit from #4081 (full compare_web_captures is about 166 KB). I haven’t tested a release where compact is the default. Happy to take a look at the reverted fitting fix (#7119 / #7135) if that’s still wanted. Which direction would you prefer for the full profile?
Author
Owner

@XinwangTao commented on GitHub (Oct 27, 2026):

Thanks for the compact test, VarunRaj004 — combined with the #4081 reporter's earlier confirmation, two independent Windows/Claude Desktop setups now show the compact profile removing the same connector warning, which strongly supports the schema-size theory (~166 KB > the 64 KiB per-tool client limit). The A-B-A wasn't fully clean; a quick alternation re-run (compact on/off a few more times) would firm it up. On direction: defaulting to the compact profile (already normalized via #2905/#3806) looks like the pragmatic near-term fix, while keeping the #7119-style fitting work as the longer-term option if schema fidelity matters. Happy to help validate whichever path is chosen.

<!-- gh-comment-id:6433434112 --> @XinwangTao commented on GitHub (Oct 27, 2026): Thanks for the compact test, VarunRaj004 — combined with the #4081 reporter's earlier confirmation, two independent Windows/Claude Desktop setups now show the compact profile removing the same connector warning, which strongly supports the schema-size theory (~166 KB > the 64 KiB per-tool client limit). The A-B-A wasn't fully clean; a quick alternation re-run (compact on/off a few more times) would firm it up. On direction: defaulting to the compact profile (already normalized via #2905/#3806) looks like the pragmatic near-term fix, while keeping the #7119-style fitting work as the longer-term option if schema fidelity matters. Happy to help validate whichever path is chosen.
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#3077
No description provided.