MCP Release Watch #46
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # MCP Release Watcher | |
| # Watches modelcontextprotocol/specification for new releases and triggers spec-drift check. | |
| # Runs daily - faster detection than weekly polling for this critical S-tier source. | |
| name: MCP Release Watch | |
| on: | |
| schedule: | |
| # Daily at 6am UTC (offset from spec-drift schedules) | |
| - cron: '0 6 * * *' | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| actions: write | |
| defaults: | |
| run: | |
| shell: bash | |
| jobs: | |
| check-mcp-release: | |
| name: Check for MCP spec releases | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Check latest MCP release | |
| id: check-release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| set -euo pipefail | |
| BASELINE_FILE=".github/spec-baselines.json" | |
| MCP_REPO="modelcontextprotocol/specification" | |
| # Get current baseline URL (contains version date) | |
| baseline_url=$(jq -r '.sources["s-tier"]["mcp-spec"].url' "$BASELINE_FILE") | |
| echo "Baseline URL: $baseline_url" | |
| # Extract version from URL (e.g., 2025-11-25 from .../specification/2025-11-25) | |
| baseline_version=$(echo "$baseline_url" | grep -oP '\d{4}-\d{2}-\d{2}$' || echo "unknown") | |
| echo "Baseline version: $baseline_version" | |
| # Get latest release from GitHub | |
| latest_release=$(gh api "repos/$MCP_REPO/releases/latest" --jq '.tag_name // .name // empty' 2>/dev/null || echo "") | |
| if [[ -z "$latest_release" ]]; then | |
| # No releases, check tags instead | |
| latest_release=$(gh api "repos/$MCP_REPO/tags" --jq '.[0].name // empty' 2>/dev/null || echo "") | |
| fi | |
| echo "Latest release/tag: $latest_release" | |
| # Check if this looks like a new version | |
| # MCP uses date-based versioning like "2025-11-25" | |
| if [[ -n "$latest_release" && "$latest_release" != "$baseline_version" ]]; then | |
| # Could be a new version - check if it's actually newer | |
| if [[ "$latest_release" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then | |
| if [[ "$latest_release" > "$baseline_version" ]]; then | |
| echo "NEW_RELEASE=true" >> "$GITHUB_OUTPUT" | |
| echo "NEW_VERSION=$latest_release" >> "$GITHUB_OUTPUT" | |
| echo "New MCP spec version detected: $latest_release (was: $baseline_version)" | |
| else | |
| echo "NEW_RELEASE=false" >> "$GITHUB_OUTPUT" | |
| echo "Release $latest_release is not newer than baseline $baseline_version" | |
| fi | |
| else | |
| # Non-date format, might still be new | |
| echo "NEW_RELEASE=true" >> "$GITHUB_OUTPUT" | |
| echo "NEW_VERSION=$latest_release" >> "$GITHUB_OUTPUT" | |
| echo "Potential new MCP version detected: $latest_release" | |
| fi | |
| else | |
| echo "NEW_RELEASE=false" >> "$GITHUB_OUTPUT" | |
| echo "No new release detected" | |
| fi | |
| - name: Trigger spec-drift check | |
| if: steps.check-release.outputs.NEW_RELEASE == 'true' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| NEW_VERSION: ${{ steps.check-release.outputs.NEW_VERSION }} | |
| run: | | |
| set -euo pipefail | |
| echo "Triggering spec-drift workflow for MCP version: $NEW_VERSION" | |
| gh workflow run spec-drift.yml -f tier=s-tier |