Skip to content

Install the EIC MCP stack and opencode via spack packages#356

Closed
aprozo wants to merge 3 commits into
eic:masterfrom
aprozo:feat/eic-mcp
Closed

Install the EIC MCP stack and opencode via spack packages#356
aprozo wants to merge 3 commits into
eic:masterfrom
aprozo:feat/eic-mcp

Conversation

@aprozo

@aprozo aprozo commented Jul 17, 2026

Copy link
Copy Markdown

Draft — CI test build for the MCP packaging restructure (supersedes #328, per Wouter's review there: no single-file script in this repo, no runtime clone/build; everything installed properly via packages).

What

  • spack-environment/xl/spack.yaml: add eic-mcp, opencode, rucio-eic-mcp-server, supergateway, uproot-mcp-server (xrootd-mcp-server/zenodo-mcp-server were already in).
  • packages.yaml: version/variant requires for the new packages; py-mcp +cli.
  • Drop containers/eic/eic-mcp and its Dockerfile COPY — the launcher now comes from the eic-mcp spack package (repo: eic/eic-mcp, reworked to service management only in Service management only: serve installed servers, never build or fetch eic-mcp#1) and lands in /opt/local/bin via the view.
  • eic-spack.sh: TEMPORARY pin to aprozo/eic-spack@feat/mcp-servers which carries the new recipes (py-mcp + missing deps, the servers, supergateway, opencode, py-pyjwt 2.10.1 override). Will be reverted to eic/eic-spack at the merge SHA once the eic-spack PR lands — keeping this PR draft until then.

Why the current image ships a broken xrootd-mcp-server

npm install --global . from a git checkout never compiled the TypeScript (released tags have no prepare hook), and build/ is gitignored with no files list so npm pack drops the compiled tree anyway. The updated recipes build explicitly and neutralize the ignore; verified in eicweb/eic_xl:nightly that the fixed xrootd-mcp-server/zenodo-mcp-server installs ship build/src/index.js and runnable console commands.

Testing done (locally, inside eicweb/eic_xl:nightly)

  • All 11 new/changed packages concretize; supergateway, opencode, py-pyjwt 2.10.1, py-httpx-sse, py-sse-starlette, py-restrictedpython, and the two fixed node servers spack-install cleanly.
  • End-to-end: eic-mcp up with the installed servers → MCP initialize + tools/list served on ports 9101–9104 (11/16/13/9 tools), two concurrent clients OK, config writers for 7 LLM clients validated, port-conflict/stale-pidfile/missing-server edge cases pass, and no git/pip/npm/npx is ever spawned at runtime.
  • opencode --version runs inside the image (glibc OK).

aprozo added 3 commits July 17, 2026 12:01
The eic-mcp launcher and every MCP server now come from eic-spack recipes
and land in /opt/local/bin via the environment view (supersedes eic#328: no
bundled script, no runtime clone/build).

- xl/spack.yaml: add eic-mcp, rucio-eic-mcp-server, supergateway,
  uproot-mcp-server (xrootd-/zenodo-mcp-server were already in)
- packages.yaml: version requires for the servers and bridge; py-mcp +cli
For headless LLM-client use inside eic-shell (farm nodes, CI reproducers).
Installed from the per-platform GitHub release binary.
Points at aprozo/eic-spack feat/mcp-servers (develop@dd8a73e + the new
recipes). Revert to eic/eic-spack at the merge SHA before undrafting.
@aprozo

aprozo commented Jul 17, 2026

Copy link
Copy Markdown
Author

Superseded by #357 (same change from an org branch so CI gets credentials).

@aprozo aprozo closed this Jul 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant