[PR #3026] [CLOSED] feat(mcp): scope advertised tools by family through REA_MCP_TOOL_FAMILIES #5565

Closed
opened 2026-10-31 01:07:37 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/3026
Author: @0xLLVEL
Created: 10/13/2026
Status: ❌ Closed

Base: main ← Head: feat/mcp-tool-families


📝 Commits (10+)

  • 36ab380 feat(mcp): scope advertised tools by family through REA_MCP_TOOL_FAMILIES
  • 30202ca docs(mcp): recommend tool-family scopes per common workflow
  • aaa9217 fix(mcp): honor tool-family scope in status reports and stop suppressing Hopper offer
  • 16c24d2 docs(mcp): include browser family for Electron and browser-hosted apps
  • e28e01d chore: merge main into PR #3026
  • a53b370 chore: merge upstream main to pick up doctor Hopper path retention fix
  • b7aa7b2 fix(mcp): honor tool-family scope in doctor, identity and status
  • 63c4702 fix(mcp): skip availability probes for scoped-out providers
  • 24395c9 fix(mcp): preserve DSH unknowns and gate budget resolver by client in status
  • f594216 chore: merge upstream main into MCP tool family scope

📊 Changes

40 files changed (+1659 additions, -332 deletions)

View changed files

📝 docs/client-configuration.md (+8 -0)
📝 docs/installation.md (+3 -3)
📝 docs/mcp-contracts.md (+64 -0)
📝 docs/mcp-prompts.md (+7 -0)
📝 experiments/analysis-efficiency/mcp-profile-digest.mjs (+5 -4)
📝 scripts/lib/catalog-builders.mjs (+8 -138)
📝 scripts/lib/catalog-core.mjs (+1 -3)
📝 scripts/verify-claude-client.mjs (+6 -4)
📝 src/application/ClientRegistrationEnvironment.ts (+6 -1)
📝 src/application/ClientRegistrationStatus.ts (+10 -1)
📝 src/application/DirectAnalysisStatus.ts (+4 -4)
📝 src/application/Doctor.ts (+5 -1)
📝 src/application/Setup.configuration.test.ts (+57 -0)
📝 src/application/Setup.ts (+8 -0)
📝 src/application/SetupTypes.ts (+2 -0)
📝 src/application/binary/BinarySessionStatus.test.ts (+40 -1)
📝 src/application/binary/BinarySessionStatus.ts (+47 -1)
📝 src/catalogIdentity.ts (+33 -22)
📝 src/cli/setupCommands.ts (+20 -0)
📝 src/config/environment.ts (+2 -0)

...and 20 more files

📄 Description

Summary

Closes #3246.

REA advertises its complete MCP tool catalog (200+ tools) to every client. Agents pay context for each advertised schema, which prices local models with small context windows out entirely. This PR scopes the advertised tool set by family through REA_MCP_TOOL_FAMILIES (env var, or rea setup --tool-families <ids> persisted into the registration entry). Unset behavior is unchanged: the complete catalog is advertised exactly as before.

Problem and expected behavior

A local 32K-context model driving REA over MCP gets a ~249K-token tool advertisement it cannot fit, so the investigation never starts (independent benchmark in discussion #3098: full list refused at once; session,direct + compact still 28K tokens and failed; only a 10-tool allowlist at 4.4K tokens succeeded 3 of 3). Users need a supported, server-side way to narrow the advertised set to the families their investigation needs, without client-side filtering hacks.

Change and scope

  • New REA_MCP_TOOL_FAMILIES selection (env var or rea setup --tool-families <ids>, persisted into the registration entry) omits out-of-scope schemas from tools/list entirely.
  • Fail-safe, not silent: out-of-scope tools stay registered but disabled; direct calls fail with the SDK's Tool ... disabled invalid-params error.
  • Selections outside the published family ids fail server startup with the complete id list; doctor validates the selection against the same ids.
  • The grouping moves from a literal block in scripts/lib/catalog-builders.mjs into src/contracts/toolFamilies.ts, so runtime advertising and the product catalog derive from one grouping.
  • Docs: workflow-to-family recommendation table (firmware, web, Android, native, managed, Electron, evidence-only) with session as the near-universal base; browser family included for Electron and browser-hosted apps.
  • Status reports honor the scope instead of directing agents at calls that always fail, and no longer suppress the Hopper offer for scoped registrations.
  • The family id inventory lives in src/contracts/toolFamilyIds.ts, so startup configuration validates a scope without loading the canonical schema graph the deferred MCP runtime deliberately avoids; src/contracts/toolFamilies.ts keeps the contract ownership.
  • Because the build-owned recorded catalog holds the complete inventory and a full-catalog identity, a scoped registration composes the canonical scope eagerly instead of being served from that catalog; an unscoped registration keeps the deferred path.
  • Review fixes: scripts/verify-claude-client.mjs calls the named-options catalog identity API, and the EVM limiter probe is gated on the artifact family like the other provider probes.

Follow the contribution scope. No target execution, injection, mutation, or protection recovery is introduced; scope decision: not applicable beyond the documented MCP advertisement contract.

Contract and boundary impact

  • Semantic owner and earliest changed stage: MCP tool-catalog contract (src/contracts/toolFamilies.ts owns the grouping); earliest changed stage is server startup/registration.
  • Contribution scope fit and linked maintainer decision: MCP advertisement scoping only; no new provider or target-facing capability. Linked issue: #3246.
  • CLI and MCP/tool-catalog contract: tools/list omits out-of-scope tools; direct out-of-scope calls return the SDK disabled-tool error; rea setup --tool-families and doctor validation added. Default (unset) output is unchanged.
  • Provider, bridge, target-format, or platform compatibility: none. No provider, bridge, or OS-specific behavior changes.
  • Evidence, artifact, provenance, or reconstruction contract: none. Investigation behavior for in-scope tools is unchanged.
  • Target selection, authority, upstream behavior, and cleanup details (if applicable): not applicable.
  • Generated metadata (docs/public/product-catalog.json), package, or installation impact: catalog derives from the same grouping; metadata:check validates the family inventory against every TOOL_CONTRACTS entry. No build outputs committed.

Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.

This change only filters which schemas are advertised and which calls are accepted; it adds no new target interaction:

  • Read existing files or captured data.
  • Launch or attach to a process.
  • Inject instrumentation or run scripts/code.
  • Change process memory, registers, files, or configuration.
  • Contact network services.
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

Evidence and regression coverage

  • Tests added or updated:
    • src/contracts/toolFamilies.test.ts (unit: every catalog tool resolves to a family; unknown names resolve undefined)
    • tests/conformance/contracts/mcpToolFamilies.test.ts (family inventory covers every TOOL_CONTRACTS entry)
    • tests/boundary/mcp/toolFamiliesMcp.test.ts (tools/list omission + disabled-call error at the boundary)
    • src/application/Setup.configuration.test.ts (scope persisted into the registration env; status reports honor scope)
  • Base reproduction or other evidence: independent end-to-end benchmark by @CassieFox23 in discussion #3098 (local Qwen3.8-27B, 32K context, single 12 GB GPU): full catalog refused, session,direct+compact failed, 10-tool allowlist succeeded 3 of 3. That benchmark used PR #3026 at d993ffeb1 plus a client-side allowlist; this PR provides the server-side half.
  • User-visible CLI/MCP output (if applicable):
    • tools/list with REA_MCP_TOOL_FAMILIES=session,direct returns only in-scope tools; calling an out-of-scope tool returns the SDK Tool ... disabled invalid-params error.
    • rea setup --tool-families <ids> persists the scope; an unknown id fails startup listing the complete valid ids.
  • Remaining proof gaps:
    • The benchmark covers one target, one model, one client, and three runs over the same path (as its author notes); broader local-model coverage is unverified.
    • No real Hopper/Ghidra/provider run was performed for this change (advertisement-only change; providers untouched).
    • Catalog-regeneration byte-identity was re-run by the post-merge build and produced no change; metadata:check (inventory coverage) passes on the merged tree.

For evidence-bearing changes:

  • Observed, derived, and inferred claims remain distinguishable.
  • Artifact identity, source provenance, and failed attempts remain preserved.
  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Validation performed

Commands below ran on 5881a830f (merges upstream/main at bd5d189a8, after an earlier merge of 4a4bbab3c), Windows x64, Node.js v26.12.0. The merge commits alone did not carry the resolution for files that merged cleanly, so the family scope and its tests are committed separately in 5881a830f; the tree it commits is the tree these commands ran against.

  • npm ci and npm run build:cached — clean; the build regenerated the catalog digests and the recorded MCP catalog without a change
  • npm run check:fast (typecheck + lint, including verify:module-boundaries) — 2 tasks successful, 0 errors
  • npm run test:focused over toolFamiliesMcp and mcpDoctor — 27 passed
  • npm run test:focused over deferredRuntime and promptMcp — 42 passed, including the new scoped-registration case and the phase test that keeps the deferred entry from loading the schema graph
  • npm run test:focused over serverIdentity, sessionMcp, compactInputSchemaMcp, outputSchemaProfile — 32 passed, 1 failed. The failure is the pre-existing win32 case at serverIdentity.test.ts:213: it compares resolve("/packaged/rea.mjs") with the literal POSIX path, which resolves to C:\packaged\rea.mjs. I checked out unmodified upstream/main at 4a4bbab3c, built it, and the same case fails there identically, so it is not caused by this PR.
  • npm run test:local over src/contracts/toolFamilies.test.ts and tests/conformance/contracts/mcpToolFamilies.test.ts — 12 passed, including the new assertion that the id inventory and the definitions stay one list
  • npm run docs:check — pass, including the family catalog read from TOOL_FAMILY_DEFINITIONS; the builder throws when the families do not cover TOOL_CONTRACTS
  • Live rea mcp over stdio: unset 213 tools / 6 prompts, session 23/3, session,native 46/3, session,enhanced 37/3, direct 41/0, browser 12/0. No listed prompt names a hidden tool, inspect_macho is refused with -32602 outside native, and session,typo fails startup.
  • Packaged recorded-catalog runtime with REA_MCP_TOOL_FAMILIES=session: 23 tools listed and binary_session succeeds. Before the composition fix this path listed 213 tools and failed every call with MCP catalog identity does not match runtime.
  • REA_MCP_TOOL_FAMILIES=session node scripts/rea.mjs mcp doctor --json — healthy, 23/23 tools, expected and observed catalog digest equal
  • rea capabilities --json — unset and REA_MCP_INPUT_SCHEMA_PROFILE=compact share digests; full differs, so #5975's compact default survives the merge
  • Verifier expectation recomputed from the built dist — equals the default server identity (213 tools / 6 prompts) and differs from full, matching what scripts/verify-claude-client.mjs now asserts
  • Not run: npm run verify:claude-client (needs the Claude Code CLI and a host account); a deliberately slow or unresponsive REA_EVM_PRLIMIT_COMMAND mount (the probe is no longer attempted rather than bounded); real Hopper/Ghidra provider workloads (no installation available).

Compatibility, safety, and release

  • Breaking changes or migration steps: none. Unset selection advertises the complete catalog exactly as before; no migration needed. No ! / BREAKING CHANGE marker.
  • Real Hopper/Ghidra, browser, or OS coverage: none performed; no OS- or provider-specific code paths touched.
  • Package or release metadata impact: none beyond the additive env var, setup flag, and docs. No version bump in this PR.
  • Security, privacy, process, or containment review: strictly reduces advertised surface (fewer schemas exposed per registration). No credentials, network, or execution-scope changes. Final diff checked for secrets and unrelated cleanup.

Author readiness

Human owner: @0xLLVEL

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/3026 **Author:** [@0xLLVEL](https://github.com/0xLLVEL) **Created:** 10/13/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `feat/mcp-tool-families` --- ### 📝 Commits (10+) - [`36ab380`](https://github.com/morluto/rea/commit/36ab380d6919af42f1ad2db2fa54188d265194ce) feat(mcp): scope advertised tools by family through REA_MCP_TOOL_FAMILIES - [`30202ca`](https://github.com/morluto/rea/commit/30202ca759ce08da244a2b3ec77fca21ab3fddd5) docs(mcp): recommend tool-family scopes per common workflow - [`aaa9217`](https://github.com/morluto/rea/commit/aaa9217af580370fc890ba2f60db5491d7bdedc4) fix(mcp): honor tool-family scope in status reports and stop suppressing Hopper offer - [`16c24d2`](https://github.com/morluto/rea/commit/16c24d20485150bae375d627361223c3d05aa280) docs(mcp): include browser family for Electron and browser-hosted apps - [`e28e01d`](https://github.com/morluto/rea/commit/e28e01d160d7f8251b075470f51b6a0350314371) chore: merge main into PR #3026 - [`a53b370`](https://github.com/morluto/rea/commit/a53b370ca840d287e7a3a5247fae22d0a7587cfd) chore: merge upstream main to pick up doctor Hopper path retention fix - [`b7aa7b2`](https://github.com/morluto/rea/commit/b7aa7b2a90d81ef341e89a2a4ab9b1a72a51301b) fix(mcp): honor tool-family scope in doctor, identity and status - [`63c4702`](https://github.com/morluto/rea/commit/63c470219bb306203b2ce09862890b6f57a8fb7f) fix(mcp): skip availability probes for scoped-out providers - [`24395c9`](https://github.com/morluto/rea/commit/24395c9b267c81f0119cdb3a329af13cae0c3ff3) fix(mcp): preserve DSH unknowns and gate budget resolver by client in status - [`f594216`](https://github.com/morluto/rea/commit/f5942167a0b3ac4844b5ffe961b693e4e990daa1) chore: merge upstream main into MCP tool family scope ### 📊 Changes **40 files changed** (+1659 additions, -332 deletions) <details> <summary>View changed files</summary> 📝 `docs/client-configuration.md` (+8 -0) 📝 `docs/installation.md` (+3 -3) 📝 `docs/mcp-contracts.md` (+64 -0) 📝 `docs/mcp-prompts.md` (+7 -0) 📝 `experiments/analysis-efficiency/mcp-profile-digest.mjs` (+5 -4) 📝 `scripts/lib/catalog-builders.mjs` (+8 -138) 📝 `scripts/lib/catalog-core.mjs` (+1 -3) 📝 `scripts/verify-claude-client.mjs` (+6 -4) 📝 `src/application/ClientRegistrationEnvironment.ts` (+6 -1) 📝 `src/application/ClientRegistrationStatus.ts` (+10 -1) 📝 `src/application/DirectAnalysisStatus.ts` (+4 -4) 📝 `src/application/Doctor.ts` (+5 -1) 📝 `src/application/Setup.configuration.test.ts` (+57 -0) 📝 `src/application/Setup.ts` (+8 -0) 📝 `src/application/SetupTypes.ts` (+2 -0) 📝 `src/application/binary/BinarySessionStatus.test.ts` (+40 -1) 📝 `src/application/binary/BinarySessionStatus.ts` (+47 -1) 📝 `src/catalogIdentity.ts` (+33 -22) 📝 `src/cli/setupCommands.ts` (+20 -0) 📝 `src/config/environment.ts` (+2 -0) _...and 20 more files_ </details> ### 📄 Description ## Summary Closes #3246. REA advertises its complete MCP tool catalog (200+ tools) to every client. Agents pay context for each advertised schema, which prices local models with small context windows out entirely. This PR scopes the advertised tool set by family through `REA_MCP_TOOL_FAMILIES` (env var, or `rea setup --tool-families <ids>` persisted into the registration entry). Unset behavior is unchanged: the complete catalog is advertised exactly as before. ## Problem and expected behavior A local 32K-context model driving REA over MCP gets a ~249K-token tool advertisement it cannot fit, so the investigation never starts (independent benchmark in discussion #3098: full list refused at once; `session,direct` + compact still 28K tokens and failed; only a 10-tool allowlist at 4.4K tokens succeeded 3 of 3). Users need a supported, server-side way to narrow the advertised set to the families their investigation needs, without client-side filtering hacks. ## Change and scope - New `REA_MCP_TOOL_FAMILIES` selection (env var or `rea setup --tool-families <ids>`, persisted into the registration entry) omits out-of-scope schemas from `tools/list` entirely. - Fail-safe, not silent: out-of-scope tools stay registered but disabled; direct calls fail with the SDK's `Tool ... disabled` invalid-params error. - Selections outside the published family ids fail server startup with the complete id list; doctor validates the selection against the same ids. - The grouping moves from a literal block in `scripts/lib/catalog-builders.mjs` into `src/contracts/toolFamilies.ts`, so runtime advertising and the product catalog derive from one grouping. - Docs: workflow-to-family recommendation table (firmware, web, Android, native, managed, Electron, evidence-only) with `session` as the near-universal base; browser family included for Electron and browser-hosted apps. - Status reports honor the scope instead of directing agents at calls that always fail, and no longer suppress the Hopper offer for scoped registrations. - The family id inventory lives in `src/contracts/toolFamilyIds.ts`, so startup configuration validates a scope without loading the canonical schema graph the deferred MCP runtime deliberately avoids; `src/contracts/toolFamilies.ts` keeps the contract ownership. - Because the build-owned recorded catalog holds the complete inventory and a full-catalog identity, a scoped registration composes the canonical scope eagerly instead of being served from that catalog; an unscoped registration keeps the deferred path. - Review fixes: `scripts/verify-claude-client.mjs` calls the named-options catalog identity API, and the EVM limiter probe is gated on the `artifact` family like the other provider probes. Follow the [contribution scope](https://github.com/morluto/rea/blob/main/CONTRIBUTING.md#contribution-scope). No target execution, injection, mutation, or protection recovery is introduced; scope decision: not applicable beyond the documented MCP advertisement contract. ## Contract and boundary impact - Semantic owner and earliest changed stage: MCP tool-catalog contract (`src/contracts/toolFamilies.ts` owns the grouping); earliest changed stage is server startup/registration. - Contribution scope fit and linked maintainer decision: MCP advertisement scoping only; no new provider or target-facing capability. Linked issue: #3246. - CLI and MCP/tool-catalog contract: `tools/list` omits out-of-scope tools; direct out-of-scope calls return the SDK disabled-tool error; `rea setup --tool-families` and doctor validation added. Default (unset) output is unchanged. - Provider, bridge, target-format, or platform compatibility: none. No provider, bridge, or OS-specific behavior changes. - Evidence, artifact, provenance, or reconstruction contract: none. Investigation behavior for in-scope tools is unchanged. - Target selection, authority, upstream behavior, and cleanup details (if applicable): not applicable. - Generated metadata (`docs/public/product-catalog.json`), package, or installation impact: catalog derives from the same grouping; `metadata:check` validates the family inventory against every `TOOL_CONTRACTS` entry. No build outputs committed. Expected effects (check known effects; use documentation-only on its own). Unchecked items do not establish absence; leave uncertainties visible. This change only filters which schemas are advertised and which calls are accepted; it adds no new target interaction: - [ ] Read existing files or captured data. - [ ] Launch or attach to a process. - [ ] Inject instrumentation or run scripts/code. - [x] Change process memory, registers, files, or configuration. - [ ] Contact network services. - [ ] Recover protected code or work around protections. - [ ] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. ## Evidence and regression coverage - Tests added or updated: - `src/contracts/toolFamilies.test.ts` (unit: every catalog tool resolves to a family; unknown names resolve undefined) - `tests/conformance/contracts/mcpToolFamilies.test.ts` (family inventory covers every `TOOL_CONTRACTS` entry) - `tests/boundary/mcp/toolFamiliesMcp.test.ts` (`tools/list` omission + disabled-call error at the boundary) - `src/application/Setup.configuration.test.ts` (scope persisted into the registration env; status reports honor scope) - Base reproduction or other evidence: independent end-to-end benchmark by @CassieFox23 in discussion #3098 (local Qwen3.8-27B, 32K context, single 12 GB GPU): full catalog refused, `session,direct`+compact failed, 10-tool allowlist succeeded 3 of 3. That benchmark used PR #3026 at `d993ffeb1` plus a client-side allowlist; this PR provides the server-side half. - User-visible CLI/MCP output (if applicable): - `tools/list` with `REA_MCP_TOOL_FAMILIES=session,direct` returns only in-scope tools; calling an out-of-scope tool returns the SDK `Tool ... disabled` invalid-params error. - `rea setup --tool-families <ids>` persists the scope; an unknown id fails startup listing the complete valid ids. - Remaining proof gaps: - The benchmark covers one target, one model, one client, and three runs over the same path (as its author notes); broader local-model coverage is unverified. - No real Hopper/Ghidra/provider run was performed for this change (advertisement-only change; providers untouched). - Catalog-regeneration byte-identity was re-run by the post-merge build and produced no change; `metadata:check` (inventory coverage) passes on the merged tree. For evidence-bearing changes: - [x] Observed, derived, and inferred claims remain distinguishable. - [x] Artifact identity, source provenance, and failed attempts remain preserved. - [x] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. ## Validation performed Commands below ran on `5881a830f` (merges `upstream/main` at `bd5d189a8`, after an earlier merge of `4a4bbab3c`), Windows x64, Node.js v26.12.0. The merge commits alone did not carry the resolution for files that merged cleanly, so the family scope and its tests are committed separately in `5881a830f`; the tree it commits is the tree these commands ran against. - `npm ci` and `npm run build:cached` — clean; the build regenerated the catalog digests and the recorded MCP catalog without a change - `npm run check:fast` (typecheck + lint, including `verify:module-boundaries`) — 2 tasks successful, 0 errors - `npm run test:focused` over `toolFamiliesMcp` and `mcpDoctor` — 27 passed - `npm run test:focused` over `deferredRuntime` and `promptMcp` — 42 passed, including the new scoped-registration case and the phase test that keeps the deferred entry from loading the schema graph - `npm run test:focused` over `serverIdentity`, `sessionMcp`, `compactInputSchemaMcp`, `outputSchemaProfile` — 32 passed, 1 failed. The failure is the pre-existing win32 case at `serverIdentity.test.ts:213`: it compares `resolve("/packaged/rea.mjs")` with the literal POSIX path, which resolves to `C:\packaged\rea.mjs`. I checked out unmodified `upstream/main` at `4a4bbab3c`, built it, and the same case fails there identically, so it is not caused by this PR. - `npm run test:local` over `src/contracts/toolFamilies.test.ts` and `tests/conformance/contracts/mcpToolFamilies.test.ts` — 12 passed, including the new assertion that the id inventory and the definitions stay one list - `npm run docs:check` — pass, including the family catalog read from `TOOL_FAMILY_DEFINITIONS`; the builder throws when the families do not cover `TOOL_CONTRACTS` - Live `rea mcp` over stdio: unset 213 tools / 6 prompts, `session` 23/3, `session,native` 46/3, `session,enhanced` 37/3, `direct` 41/0, `browser` 12/0. No listed prompt names a hidden tool, `inspect_macho` is refused with `-32602` outside `native`, and `session,typo` fails startup. - Packaged recorded-catalog runtime with `REA_MCP_TOOL_FAMILIES=session`: 23 tools listed and `binary_session` succeeds. Before the composition fix this path listed 213 tools and failed every call with `MCP catalog identity does not match runtime`. - `REA_MCP_TOOL_FAMILIES=session node scripts/rea.mjs mcp doctor --json` — healthy, 23/23 tools, expected and observed catalog digest equal - `rea capabilities --json` — unset and `REA_MCP_INPUT_SCHEMA_PROFILE=compact` share digests; `full` differs, so #5975's compact default survives the merge - Verifier expectation recomputed from the built `dist` — equals the default server identity (213 tools / 6 prompts) and differs from `full`, matching what `scripts/verify-claude-client.mjs` now asserts - Not run: `npm run verify:claude-client` (needs the Claude Code CLI and a host account); a deliberately slow or unresponsive `REA_EVM_PRLIMIT_COMMAND` mount (the probe is no longer attempted rather than bounded); real Hopper/Ghidra provider workloads (no installation available). ## Compatibility, safety, and release - Breaking changes or migration steps: none. Unset selection advertises the complete catalog exactly as before; no migration needed. No `!` / `BREAKING CHANGE` marker. - Real Hopper/Ghidra, browser, or OS coverage: none performed; no OS- or provider-specific code paths touched. - Package or release metadata impact: none beyond the additive env var, setup flag, and docs. No version bump in this PR. - Security, privacy, process, or containment review: strictly reduces advertised surface (fewer schemas exposed per registration). No credentials, network, or execution-scope changes. Final diff checked for secrets and unrelated cleanup. ## Author readiness Human owner: @0xLLVEL - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [x] User-visible CLI/MCP changes include representative output. - [x] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 01:07:37 +00:00
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#5565
No description provided.