Skip to content

Commit 39ddc89

Browse files
committed
docs(PYEGERIA_ISSUES): log ISSUE-91 -- mcp dependency floor too loose
pyproject.toml declares mcp >=0.1 but pyegeria/core/mcp_server.py imports mcp.server.mcpserver.MCPServer, which requires mcp>=2.0 (confirmed live: this dev venv has mcp==2.0.0 installed and the import works; the module path doesn't exist in the 0.x/1.x mcp package line). Found by Egeria Advisor rebuilding its demo deployment against pyegeria 6.1.10 -- worked fine because they pinned mcp==2.1.1 explicitly, not because pyegeria's own floor would have caught an older mcp. Signed-off-by: Dan Wolfson <dan.wolfson@pdr-associates.com>
1 parent a013c79 commit 39ddc89

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

‎PYEGERIA_ISSUES.md‎

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,50 @@ security context changes; (2) quickstart content: give `generalnpa` read access
199199
elements its engine actions anchor to, or anchor those actions to elements the engine-host identity can
200200
read. Full draft: trellis session scratch `egeria-issue-engine-host-403-loop.md`.
201201

202+
### ISSUE-91: `pyegeria.core.mcp_server` imports `mcp.server.mcpserver` (mcp 2.x only) but `pyproject.toml` declares `mcp >=0.1` — any consumer that resolves mcp 1.x gets a server that dies at import
203+
204+
**Layer:** pyegeria packaging · **Status:** open · **Found:** 2026-09-05 (Egeria Advisor dev startup on the M3 Max)
205+
206+
Commit 2b39ba06 (2026-07-30, "migrate mcp_server.py to mcp 2.0.0's MCPServer") changed the
207+
server's import to:
208+
209+
```python
210+
from mcp.server.mcpserver import MCPServer
211+
```
212+
213+
That module exists only in `mcp >= 2.0.0` (1.x ships `mcp.server.fastmcp` instead). The
214+
dependency declaration was not updated and still reads `"mcp >=0.1"` — verified in the released
215+
6.1.5 wheel's METADATA (`Requires-Dist: mcp>=0.1`) and in the current `pyproject.toml` at 6.1.10.
216+
217+
**How it shows up.** trellis pinned `mcp>=1.0.0` and its lock resolved mcp 1.29.0, which satisfies
218+
pyegeria's declared range. Launching the server then fails before it can speak MCP:
219+
220+
```
221+
$ python -m pyegeria.core.mcp_server
222+
MCP import failed.
223+
File ".../pyegeria/core/mcp_server.py", line 24, in <module>
224+
from mcp.server.mcpserver import MCPServer
225+
ModuleNotFoundError: No module named 'mcp.server.mcpserver'
226+
```
227+
228+
A client sees only "No response from MCP server" because the traceback goes to stderr and the
229+
process exits without writing a JSON-RPC frame. With mcp 2.1.1 installed the same command answers
230+
`initialize` normally (`serverInfo.name = "pyegeria-mcp"`).
231+
232+
**Why it went unnoticed.** The quickstart containers run mcp 2.1.1 (pyegeria 6.1.9) and use their own
233+
`/app/mcp_server.py` mounted over SSE in `pyegeria_handler`, not this stdio module, so the
234+
egeria-workspaces path never exercised it. The egeria-python checkout's own venv also has mcp 2.0.0.
235+
236+
**Proposed fix (backward compatible for callers).** In `pyproject.toml` declare `"mcp >=2.0"`. Nothing
237+
else needs to change: the import is already 2.x-only, so raising the floor only turns a runtime
238+
import crash into a resolver error at install time. If 1.x support is wanted instead, gate the
239+
import (`try: from mcp.server.mcpserver import MCPServer except ImportError: from mcp.server.fastmcp
240+
import FastMCP as MCPServer`) — but the 2.x API differs beyond the class name, so the floor bump is
241+
the honest option.
242+
243+
**Consumer-side workaround applied in trellis (8441efb):** both packages now declare `mcp>=2.0.0`
244+
and the lock carries mcp 2.1.1, matching the quickstart containers.
245+
202246
### ISSUE-38 (PY-18): `count_relationships_between_elements("Exception")` (276) disagrees with `ClassificationExplorer.get_relationships("Exception")` (55)
203247

204248
**Update 2026-08-30, from the Egeria team (Mandy Chessell).** Leaving this
@@ -751,6 +795,37 @@ on an Egeria Server capability that doesn't exist yet — but the pyegeria/
751795
Dr.Egeria-side work each will need once that capability ships is written
752796
into the entry now, so it isn't rediscovered from scratch later.
753797

798+
### ISSUE-91: `pyproject.toml` declares `mcp >=0.1`, but `pyegeria.core.mcp_server` needs `mcp>=2.0` — the declared floor lets a resolver install a version too old to import the module at all
799+
800+
**Layer:** Pyegeria · **Status:** open · **Found:** 2026-09-06 (Egeria Advisor, containerized demo deployment rebuild against pyegeria 6.1.10).
801+
802+
`pyproject.toml`'s `[project.dependencies]` declares `"mcp >=0.1"`, but
803+
`pyegeria/core/mcp_server.py` imports `from mcp.server.mcpserver import
804+
MCPServer` — confirmed live in this checkout's dev venv:
805+
`importlib.metadata.version("mcp")` is `2.0.0`, and
806+
`mcp.server.mcpserver.MCPServer` only exists at that version; the module
807+
path is new to the 2.x line, not present in the 0.x/1.x `mcp` package
808+
history. A resolver that's free to pick anything satisfying `>=0.1` (no
809+
upper or tighter lower bound forcing 2.x) can legitimately land on a much
810+
older `mcp` release, at which point `import pyegeria.core.mcp_server`
811+
fails outright rather than degrading gracefully.
812+
813+
**Why it matters, found how:** a container rebuild of Egeria Advisor's
814+
demo deployment against pyegeria 6.1.10 pinned `mcp==2.1.1` explicitly
815+
(not resolved from pyegeria's own floor) and confirmed EA's MCP agent
816+
pre-warms cleanly on it — so 6.1.10 itself works fine when the caller
817+
pins a modern `mcp`, but nothing in pyegeria's own declared dependency
818+
would have caught a caller who didn't.
819+
820+
**Ask:** tighten `pyproject.toml`'s `mcp` constraint to actually match
821+
what `mcp_server.py` requires (`mcp>=2.0` at minimum — confirm the exact
822+
version `MCPServer`/`mcp.server.mcpserver` was introduced at, and pin to
823+
that) rather than the inherited placeholder `>=0.1` floor. Not
824+
independently verified against the `mcp` package's own changelog/git
825+
history here — the live import check above shows 2.0.0 works and the
826+
module path is absent from the 0.x/1.x line by inspection, but the exact
827+
first-working version wasn't pinned down.
828+
754829
### ISSUE-87: `ClassificationExplorer.add_ownership_to_element`'s docstring sample body says `"class": "OwnerProperties"` — the method itself only accepts `"OwnershipProperties"`, so the documented body cannot be sent
755830

756831
**Layer:** Pyegeria · **Status:** fixed 2026-09-05 (Pyegeria —

0 commit comments

Comments
 (0)