Skip to content

EIC MCP servers and the eic-mcp launcher - #986

Draft
aprozo wants to merge 25 commits into
developfrom
feat/mcp-servers
Draft

EIC MCP servers and the eic-mcp launcher#986
aprozo wants to merge 25 commits into
developfrom
feat/mcp-servers

Conversation

@aprozo

@aprozo aprozo commented Jul 17, 2026

Copy link
Copy Markdown

Ships the EIC MCP stack as Spack packages so eic-shell stops relying on runtime clone+build (companion to the containers wiring PR).

  • uproot-mcp-server, rucio-eic-mcp-server: Python recipes; inert 0.2.0 entries for the native-streamable-HTTP releases (shas filled once the v0.2.0 tags land — grep TODO(push)).
  • xrootd-mcp-server / zenodo-mcp-server: compile the TypeScript explicitly — released tags have no prepare hook, so a plain global install shipped no build/ tree; an empty .npmignore keeps the gitignored compiled tree in the npm pack.
  • eic-mcp: the native-HTTP, service-management-only launcher.
  • CI: no --test root (install-time import tests run in an env frozen pre-install and fail for pure-python packages); the stand-alone spack test run step covers testing.

py-mcp and its deps merged upstream (spack/spack-packages#5637, d18c9ad) — the copies formerly carried here are dropped; the containers PR cherry-picks that commit onto its pinned spack-packages release. supergateway is gone (the servers speak streamable HTTP natively) and opencode stays a host-side install.

aprozo and others added 20 commits July 28, 2026 14:37
Builtin stops at 2.4.0; py-mcp needs pyjwt>=2.10.1. Newer sdists use the
PEP 625 lowercase filename, so the version carries its own url.
The Model Context Protocol python SDK. All other deps exist in builtin;
+cli (default on) adds py-typer and py-python-dotenv for mcp[cli].
Talks to the Rucio REST API over requests; no rucio client dependency.
No release tag upstream yet, so 0.1.0 pins the current main commit.
Released tags have no 'prepare' hook, so 'npm install --global .' from
source never ran tsc and shipped no build/ tree and no runnable console
command. build/ is also gitignored with no files list, so npm pack would
drop the compiled tree even after building — an empty .npmignore keeps it.
Also chmod the bin entry point, which older build scripts skip.
Same prepare-hook and npm-pack gap as xrootd-mcp-server.
stdio to SSE/streamable-HTTP bridge for MCP servers. The npm registry
tarball ships a prebuilt dist/, so install with --ignore-scripts.
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.
AI coding agent CLI, from the per-platform GitHub release binary (the npm
wrapper resolves its binary in a postinstall via optionalDependencies,
which does not work in an offline install phase).
The cli extra pulls py-typer, whose newest packaged version (0.23.2) pins
py-click@:8.1.8 — unsatisfiable in environments that need click 8.3+
(eic_xl: flask via pyrobird). The MCP servers only import mcp.server core
(rucio-eic-mcp-server included, despite its mcp[cli] metadata), so nothing
needs the typer-based mcp dev CLI at runtime.
--test root runs test_imports in the build environment that spack freezes
before the package is installed; python-venv only adds an extension's
site-packages to PYTHONPATH if it already exists on disk, so every
from-source pure-python package fails its import test regardless of the
recipe (verified with stock py-colorama; spack-packages#49275 introduced
the isdir guard). The stand-alone 'Run package tests' step already covers
tests in a correctly constructed post-install environment; promoting it
from informational to a hard gate can be a follow-up.
@aprozo
aprozo force-pushed the feat/mcp-servers branch from 29b5092 to f8c0a08 Compare July 28, 2026 09:37
aprozo added 2 commits August 31, 2026 13:45
The launcher now starts each server in its own native streamable-HTTP mode
(eic/eic-mcp feat/native-http-servers); there is no stdio bridge any more,
so the supergateway package is removed entirely.  zenodo-mcp-server stays a
run dependency: it is stdio-only upstream for now, eic-mcp keeps it
registered, and clients can still launch it directly.
…HTTP)

The 0.2.0 entries are inert until the v0.2.0 tags are pushed: the
placeholder sha256 values are deliberately all-zeros so a build fails loudly
rather than fetching the wrong thing.  Grep TODO(push) for everything that
needs filling once the tags exist.  uproot gains the py-mcp@1.10: floor its
0.2.0 pyproject declares; py-mcp gets a comment guarding the uvicorn
dependency that streamable HTTP relies on.
@aprozo

aprozo commented Aug 31, 2026

Copy link
Copy Markdown
Author

Pushed the native-HTTP follow-up: supergateway removed (package + eic-mcp run-dep), inert 0.2.0 placeholder versions for the three servers (grep TODO(push) — filled once the v0.2.0 tags land: uproot-mcp-server#42, rucio-eic-mcp-server#2, xrootd + eic-mcp PRs pending), py-mcp capped @1.10:1 for 0.2.0+ (mcp 2.x removes mcp.server.fastmcp).

The tutorial installs opencode on the user's machine; in-container
assistants remain claude-code and github-copilot.
@aprozo

aprozo commented Aug 31, 2026

Copy link
Copy Markdown
Author

spack/spack-packages#5637 - duplicated py-* recipes get dropped

aprozo added 2 commits August 31, 2026 15:11
…: drop — merged upstream

spack/spack-packages#5637 (d18c9ad); containers cherry-picks it onto its
pinned spack-packages release.
# Conflicts:
#	.github/workflows/build_and_test.yml
@aprozo aprozo changed the title EIC MCP servers, supergateway, eic-mcp, opencode, py-mcp (+deps) EIC MCP servers and the eic-mcp launcher Aug 31, 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.

2 participants