You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 39ddc89
Browse filesBrowse the repository at this point in the historyBrowse files
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>
elements its engine actions anchor to, or anchor those actions to elements the engine-host identity can
200
200
read. Full draft: trellis session scratch `egeria-issue-engine-host-403-loop.md`.
201
201
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
**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
+
202
246
### ISSUE-38 (PY-18): `count_relationships_between_elements("Exception")` (276) disagrees with `ClassificationExplorer.get_relationships("Exception")` (55)
203
247
204
248
**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/
751
795
Dr.Egeria-side work each will need once that capability ships is written
752
796
into the entry now, so it isn't rediscovered from scratch later.
753
797
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
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
+
754
829
### 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
0 commit comments