Skip to content

MCP Release Watch

MCP Release Watch #46

# 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