Conversation
Design-only proposal (no runtime/code change) for extending ARI beyond ToolUniverse's biomedical-only scope via a single staged stdio broker skill (ari-skill-tool-registry): breadth from the official MCP Registry, cross-science domain-fit from mcp.science + the Argonne MCP-for-Science pattern, with ARI supplying reproducibility (snapshot/cache/digest-pin into the EAR) since none of the upstreams do. Marked NOT build-ready: records two blockers re-verified against code — ARI_PHASE does not exist (phase never reaches a skill subprocess), and the reproduce sandbox runs an isolated reproduce.sh that cannot see the broker or its cassettes — plus the real compute-node spike that gates any implementation. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ero ari-core change) Adversarial review (verified against code) confirmed the two blockers are a single coupled hand-off mismatch, both resolvable with zero ari-core change: - BLOCKER 1 (phase signal): drop it entirely. All four reproduce stages are `phase: paper` direct tool calls with no react block (workflow.yaml), so the broker never runs during reproduce and needs no phase awareness. Live-vs-replay is governed by phase-scoping + ARI_TOOL_REGISTRY_LIVE + the explicit invoke(mode=) arg. No ARI_PHASE, no core change. - BLOCKER 2 (sandbox can't see cassettes): vendor frozen cassettes via the existing curate->publish->clone chain — an explicit ear/publish.yaml include rule lands tool_registry_cassettes/** + CATALOG.lock + a dependency-free .ari_lib/replay.sh in repro_sandbox/; reproduce.sh reads them as on-disk fixtures (fail-loud on miss), no skill/MCP/network. No core change. Adds §4a; reframes §6 (NOT READY -> blockers resolved, real-env spike the only gate); marks §7 step 2 done. Applies the review's 6 corrections (client.py:310/38 citations, future tense for net-new broker pieces, publish.yaml-absent ships silently-without-cassettes not skip, no-jq replay shim, cow_node_id caveat). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Update — both build blockers resolved in design (§4a, zero ari-core change)Followed up on the two adversarial-review blockers. A verification pass against the actual code found they are a single coupled hand-off mismatch, and both are resolvable with zero ari-core change:
The resolution itself was adversarially re-checked (verdict sound-with-fixes); its 6 corrections are applied — corrected Status moves from NOT build-ready → blockers resolved; gated only on the real-env spike (§7.1). See new §4a. Remaining gate before a Stage A.0 code PR: the R-CCS compute-node spike ( |
… fx700/A64FX
Ran the §7.1 launch spike on a real R-CCS fx700 (A64FX, aarch64) compute node:
spawned a pinned `uvx mcp-science <server>` over stdio exactly as ari-core's
MCPClient launches skills, then completed initialize + list_tools. All four
cases passed — online AND offline (cache-only), for both the light `timer` and
the heavy `python-code-execution` (numpy/scipy/matplotlib) server.
The spike surfaced 3 arch/robustness provisions (each a real failure first),
now folded into Stage A.0 and §4 "Launch robustness":
1. arch-correct uv — the shared ~/.local/bin/uv is x86 and Exec-format-errors
on aarch64 even though `command -v uvx` resolves (shared /home).
2. uv-managed aarch64 CPython — an active x86 VIRTUAL_ENV broke uv; force
UV_PYTHON_PREFERENCE=only-managed with VIRTUAL_ENV cleared.
3. broker stdout sanitizer — the mcp-science launcher prints a non-JSON
"Running command: [...]" preamble to stdout that corrupts the MCP stream.
Secondary: fx700 has PyPI network (not air-gapped) yet the offline-cache path
is validated; no docker (singularity present); x86 login cache does not transfer
to aarch64. Status moves to: blockers resolved + spike cleared; ready for a
Stage A.0 PR. Full logs in workspace/checkpoints (gitignored).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
§7.1 spike run on real hardware (R-CCS
|
| Test | Result |
|---|---|
timer online |
✅ ok, handshake 3.85s, tools ["wait"] |
timer offline (cache-only) |
✅ ok, 3.1s |
python-code-execution online (numpy/scipy/matplotlib/plotly) |
✅ ok, 5.66s |
python-code-execution offline (cache-only) |
✅ ok, 4.68s |
Launch/stdio/offline is viable on ARI's demonstrated platform — but only after 3 provisions, each a real failure first (now folded into Stage A.0 + §4 "Launch robustness"):
- arch-correct
uv— the shared~/.local/bin/uvis x86_64 andExec format errors on aarch64, even thoughcommand -v uvxresolves (shared/home). Classic "path resolves ≠ binary runs." - uv-managed aarch64 CPython — an active x86
VIRTUAL_ENVbrokeuv; forceUV_PYTHON_PREFERENCE=only-managedwithVIRTUAL_ENVcleared. - broker stdout sanitizer — the
mcp-sciencelauncher prints a non-JSONRunning command: […]line to stdout that corrupts the MCP JSON-RPC stream (the server itself was fine). The broker must forward only JSON-RPC lines.
Secondary: fx700 has PyPI network (not air-gapped) yet the offline-from-cache path is independently validated (reproducibility posture holds); no docker, singularity present (confirms the no-docker assumption); an x86-login cache does not transfer to aarch64; heavy cold-spawn (~190 MiB wheels) stays within the 300 s tool timeout but pre-warm is recommended.
See new §7.2. Status → blockers resolved + spike cleared; ready for a Stage A.0 implementation PR.
Quality Report
Checkers
Areas
Dead code
|
|
Implementation of this RFC is now available in draft PR #66 from the separate |
What
This remains a design-only RFC. It revises
proposals/2026-06-broad-tool-registry-integration.mdfrom a small hand-curated broker into a provider-neutral MCP federation control plane with an ARI scientific-admission layer.No runtime, API, or skill implementation is included.
Decision
ARI will expose a stable five-tool surface:
discoverdescribeinvokeget_statusget_resultBehind it, catalog collections are integrated by source/provider adapters:
The manual extension unit is a catalog source or collection-level adapter, not an individual tool.
What the revised RFC adds
sources.yaml -> candidates -> admission -> CATALOG.locklifecycle;tool_refidentities and bounded/paginated descriptions;Why
A hand-maintained list cannot scale to ToolUniverse-sized or future MCP collections. Conversely, live registry discovery cannot safely imply execution or scientific validity.
The revised design separates:
Implementation sequence
Stages A/B preserve the existing zero-
ari-core-change approach unless a domain pilot proves a concrete limitation.Existing verified constraints retained
ARI_PHASEreaches skill subprocesses;uv, a clean managed interpreter, and malformed-stdout isolation;Validation
git diff --check— passed.origin/main.docs/node_modulesand report pre-existing archived-link/README drift unrelated to these two proposal files.