From b4bc6b50582741b023e1cf7b6673d51d9c380d9b Mon Sep 17 00:00:00 2001 From: Bill Nykaza Date: Mon, 10 Aug 2026 13:38:21 -0500 Subject: [PATCH 1/2] fix(mcp): cap mcp SDK below 2.0 so clean installs work The dependency was pinned as an unbounded "mcp>=1.2.0" in both mcp/pyproject.toml and mcp/requirements.txt. mcp SDK 2.0.0 is now the version pip resolves to, and 2.0.0 removed the mcp.server.fastmcp module that server.py imports at line 56. A clean install therefore fails at import time with ModuleNotFoundError. Cap the range at "mcp>=1.2.0,<2" in both files. This keeps every 1.x release eligible and blocks the breaking 2.x line until the server is ported to the new API. Co-Authored-By: Claude Fable 5 --- mcp/pyproject.toml | 2 +- mcp/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mcp/pyproject.toml b/mcp/pyproject.toml index 26298c9..100d8f3 100644 --- a/mcp/pyproject.toml +++ b/mcp/pyproject.toml @@ -4,7 +4,7 @@ version = "1.3.0" description = "stdio MCP server backing the aura-orchestrator skill (On-Chain Lab creation + public or private/encrypted data-room uploads) — wraps Privy, on-chain OCL reads, Labs GraphQL, the x402 payment flow, S3 uploads, AES-256-GCM envelope crypto, ABI encoding and on-chain access conditions (OCL/V3 surface, oclId)." requires-python = ">=3.10" dependencies = [ - "mcp>=1.2.0", + "mcp>=1.2.0,<2", "httpx>=0.27", "cryptography>=42", "eth-abi>=5", diff --git a/mcp/requirements.txt b/mcp/requirements.txt index c054039..66d36b1 100644 --- a/mcp/requirements.txt +++ b/mcp/requirements.txt @@ -1,4 +1,4 @@ -mcp>=1.2.0 +mcp>=1.2.0,<2 httpx>=0.27 cryptography>=42 eth-abi>=5 From ca4a4be7c7c83aa9211b8bc119f9132bfbe87d43 Mon Sep 17 00:00:00 2001 From: Bill Nykaza Date: Mon, 10 Aug 2026 13:41:22 -0500 Subject: [PATCH 2/2] ci: run the offline smoke suite on a linux and windows matrix The repo had no .github directory and nothing ran mcp/smoke.py, so an upstream SDK release could break every clean install without a signal. This adds a matrix over ubuntu-latest and windows-latest across Python 3.11, 3.12 and 3.13 that installs mcp/requirements.txt and runs the suite. It needs no network and no secrets. Two details make the Windows leg work. Every step runs under bash so GITHUB_ENV and the heredoc behave the same on both runners. And smoke.py selects its subprocess interpreter with os.environ.get("PYTHON", HERE/".venv"/"bin"/"python"), a fallback that is POSIX-only and that CI never creates anyway, so a step exports PYTHON from sys.executable before the run. A guard step imports mcp.server.fastmcp and asserts the resolved major version is below 2, which fails loudly if the cap ever stops holding. Co-Authored-By: Claude Fable 5 --- .github/workflows/smoke.yml | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/workflows/smoke.yml diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml new file mode 100644 index 0000000..48c2e96 --- /dev/null +++ b/.github/workflows/smoke.yml @@ -0,0 +1,63 @@ +name: smoke + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +jobs: + smoke: + name: smoke (${{ matrix.os }}, py${{ matrix.python-version }}) + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + python-version: ["3.11", "3.12", "3.13"] + + defaults: + run: + # bash on every runner, including Windows, so $GITHUB_ENV and the + # heredoc below behave identically across the matrix. + shell: bash + working-directory: mcp + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install -r requirements.txt + + - name: Resolve the interpreter for smoke.py + # smoke.py spawns server.py as a stdio subprocess and picks the command + # with os.environ.get("PYTHON", HERE/".venv"/"bin"/"python"). CI never + # creates a .venv, and that fallback path is POSIX-only anyway, so both + # the Linux and the Windows legs export PYTHON explicitly. sys.executable + # is already the correct absolute path on either platform. + run: python -c "import sys; print('PYTHON=' + sys.executable)" >> "$GITHUB_ENV" + + - name: Confirm the mcp cap holds + # Regression guard for the reason this workflow exists: mcp 2.0.0 removed + # mcp.server.fastmcp, which server.py imports. + run: | + python - <<'PY' + from importlib.metadata import version + + import mcp.server.fastmcp # noqa: F401 + + resolved = version("mcp") + print("resolved mcp version:", resolved) + major = int(resolved.split(".")[0]) + assert major < 2, f"mcp {resolved} resolved, so the <2 cap is not holding" + PY + + - name: Run smoke.py + run: python smoke.py