diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b16b1d57..c7649620 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -24,7 +24,14 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install pyyaml>=6.0 pytest pytest-timeout + pip install pyyaml>=6.0 pytest pytest-timeout pytest-asyncio + # Install the `mcp` package so tests/test_mcp_server.py runs in CI. + # The package is an optional runtime dep of mcp_server.py — users + # who run the MCP integration install it themselves; CI installs + # it so test coverage exists. If mcp install fails (Python 3.13 + # wheel not yet available, etc.), tests/test_mcp_server.py uses + # importorskip and the matrix stays green. + pip install mcp || echo "mcp install failed — test_mcp_server.py will importorskip" - name: Run tests run: pytest tests/ -v --timeout=60 diff --git a/tests/test_mcp_server.py b/tests/test_mcp_server.py index 291a1d01..98e2a0b2 100644 --- a/tests/test_mcp_server.py +++ b/tests/test_mcp_server.py @@ -17,6 +17,17 @@ from pathlib import Path import pytest +# Skip the entire module when the optional `mcp` package isn't installed. +# CI runs with stdlib-only deps (pyyaml + pytest + pytest-timeout), and the +# `mcp` package is only required for users who actually run the MCP server. +# Locally with `pip install mcp pytest-asyncio` these tests run; on CI they +# skip cleanly without breaking the matrix. +pytest.importorskip("mcp", reason="mcp package not installed (optional MCP server dep)") + +# pytest-asyncio is also optional but always installed alongside mcp tests +# in our local runs. If absent, importorskip the asyncio plugin gracefully. +pytest.importorskip("pytest_asyncio", reason="pytest-asyncio required for MCP server tests") + pytestmark = pytest.mark.asyncio # ── Ensure repo root on path ──────────────────────────────────────────────