Skip to content

Service management only: serve installed servers, never build or fetch#1

Draft
aprozo wants to merge 2 commits into
mainfrom
feat/service-management-only
Draft

Service management only: serve installed servers, never build or fetch#1
aprozo wants to merge 2 commits into
mainfrom
feat/service-management-only

Conversation

@aprozo

@aprozo aprozo commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Per Wouter's guidance on the packaging restructure:

  • The MCP servers now come installed in the eic_xl image as Spack packages (eic/eic-spack recipes; wired up in eic/containers). eic-mcp only starts/stops/configures them: the bootstrap machinery (git clone + venv/npm builds), the setup command, and the pinned npx supergateway fallback are gone — the script never touches the network.
  • A missing server now fails with an actionable pointer to update eic-shell.
  • EIC_MCP_HOST=0.0.0.0 opts into serving LLM clients on other machines: configs advertise EIC_MCP_ADVERTISE_HOST and a no-authentication warning is printed. (The supergateway bridge always listens on all interfaces — it has no bind flag; this only controls the advertised URL.)
  • CI: a grep guard keeps build/network verbs from coming back, plus asserts for the 0.0.0.0 advertising/warning behaviour.

Companion changes: eic/eic-spack recipes (uproot/rucio/xrootd/zenodo servers, supergateway, py-mcp + deps, opencode) and the eic/containers spec/pin updates. Tested end-to-end inside eicweb/eic_xl:nightly with the Spack-installed servers.

@aprozo
aprozo marked this pull request as draft July 17, 2026 10:48
aprozo added a commit to aprozo/eic-spack that referenced this pull request Jul 17, 2026
…p (+deps)

Ship the EIC MCP stack as proper Spack packages so eic-shell images stop
relying on runtime clone+build:

- py-mcp (with +cli variant) and its missing pure-python deps py-httpx-sse,
  py-sse-starlette, py-restrictedpython; py-pyjwt override adds 2.10.1
  (builtin stops at 2.4.0, mcp needs >=2.10.1)
- uproot-mcp-server (v0.1.0 tag tarball) and rucio-eic-mcp-server (commit-
  pinned; no upstream tag yet)
- xrootd-mcp-server / zenodo-mcp-server: compile the TypeScript explicitly.
  Released tags have no 'prepare' hook so a plain 'npm install --global .'
  ships no build/ tree and no runnable console command; build/ is also
  gitignored with no files list, so npm pack would drop the compiled tree
  (an empty .npmignore keeps it)
- supergateway: the stdio-to-streamable-HTTP bridge (npm prebuilt tarball)
- eic-mcp: the service-management launcher, commit-pinned to eic/eic-mcp#1
- opencode: AI coding agent CLI from the per-platform GitHub release binary
  (the npm wrapper needs a postinstall + optionalDependencies, which does
  not work offline)

py-mcp and its three pure-python deps are general-purpose and could move to
spack/spack-packages later; kept here for now so the container pin can move.
aprozo added 2 commits July 17, 2026 12:00
The MCP servers are installed in the image as Spack packages, so drop the
bootstrap machinery (git clone + venv/npm builds), the setup command, and
the pinned npx supergateway fallback. require_server/require_bridge resolve
installed commands only and point a missing server at an eic-shell image
update. CI guards that no build/network verbs come back.
The supergateway bridge has no bind flag and always listens on all
interfaces, so remote access is a question of what URL the configs
advertise. EIC_MCP_HOST=0.0.0.0 opts in: configs and status advertise
EIC_MCP_ADVERTISE_HOST (default: the host's first address) and a
no-authentication warning is printed. port_open always probes loopback
since 0.0.0.0 is not a connectable address.
@aprozo
aprozo force-pushed the feat/service-management-only branch from f20f1bd to 4a5c610 Compare July 17, 2026 11:00
aprozo added a commit to aprozo/eic-spack that referenced this pull request Jul 17, 2026
Service manager for the installed EIC MCP servers (runtime-deps the four
servers and supergateway). 0.1.0 pins the service-management-only rework
(eic/eic-mcp#1); switch to a tag once released.
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