name: MCP Server Tests on: push: branches: [ main ] paths: - 'src/local_deep_research/mcp/**' - 'tests/mcp/**' - 'scripts/mcp_smoke_test.sh' - '.github/workflows/mcp-tests.yml' pull_request: branches: [ main ] paths: - 'src/local_deep_research/mcp/**' - 'tests/mcp/**' - 'scripts/mcp_smoke_test.sh' - '.github/workflows/mcp-tests.yml' workflow_dispatch: # No concurrency group โ€” intentionally omitted. # Previous attempt (#3554, reverted #3599) used cancel-in-progress which # killed in-progress PR runs before they produced useful results. # Future iteration could safely add concurrency for scheduled/push-only # triggers (where head_ref is empty and runs get unique groups). permissions: contents: read jobs: mcp-tests: name: MCP Server Tests runs-on: ubuntu-latest timeout-minutes: 15 steps: - name: Harden the runner (Audit all outbound calls) uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4 with: egress-policy: audit - name: Checkout code uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - name: Set up Python uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 with: python-version: '3.12' - name: Install dependencies run: | python -m pip install pip==25.0 pip install pdm==2.26.2 pdm install --dev --no-editable -G mcp - name: Check if MCP server module exists id: check-mcp run: | if [ -f "src/local_deep_research/mcp/server.py" ]; then echo "mcp_exists=true" >> "$GITHUB_OUTPUT" echo "MCP server module found, will run tests" else echo "mcp_exists=false" >> "$GITHUB_OUTPUT" echo "MCP server module not found (feature not yet merged), skipping tests" fi - name: Run MCP smoke tests if: steps.check-mcp.outputs.mcp_exists == 'true' run: pdm run bash scripts/mcp_smoke_test.sh - name: Run MCP unit tests if: steps.check-mcp.outputs.mcp_exists == 'true' run: | pdm run pytest tests/mcp/ -v --tb=short -n auto env: LDR_TESTING_WITH_MOCKS: "true" - name: Skip notice if: steps.check-mcp.outputs.mcp_exists != 'true' run: | echo "::notice::MCP server module not yet implemented. Tests will run once feature/mcp-server is merged." - name: Generate test summary if: always() env: MCP_EXISTS: ${{ steps.check-mcp.outputs.mcp_exists }} run: | { echo "## MCP Server Test Summary" echo "" if [ "$MCP_EXISTS" != "true" ]; then echo "### โญ๏ธ Tests Skipped" echo "" echo "MCP server module (\`src/local_deep_research/mcp/server.py\`) not yet implemented." echo "Tests will run automatically once the MCP feature branch is merged." else echo "### What was tested:" echo "- ๐Ÿ”Œ MCP server module loading" echo "- ๐Ÿ”ง Discovery tools (list_strategies, list_search_engines, get_configuration)" echo "- ๐Ÿงช Unit tests for all MCP tools" echo "- ๐Ÿš€ Server startup verification" echo "" echo "### MCP Tools Tested:" echo "| Tool | Description |" echo "|------|-------------|" echo "| \`quick_research\` | Fast research summary (1-5 min) |" echo "| \`detailed_research\` | Comprehensive analysis (5-15 min) |" echo "| \`generate_report\` | Full markdown report (10-30 min) |" echo "| \`analyze_documents\` | Search local collections |" echo "| \`list_search_engines\` | List available search engines |" echo "| \`list_strategies\` | List research strategies |" echo "| \`get_configuration\` | Get current config |" fi } >> "$GITHUB_STEP_SUMMARY"