Verify a published release of the C# MCP SDK. Monitors the Release and Publish Docs workflows triggered by publishing a GitHub release, confirms the packages are listed on NuGet.org, and confirms the versioned documentation site reflects the release. Use when asked to verify a release, check whether a release published correctly, monitor the release or docs workflow, confirm packages on NuGet, or check whether the docs site updated.
76
96%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Verify that a published release of modelcontextprotocol/csharp-sdk fully shipped. Publishing a
GitHub release triggers two workflows in parallel, and the release is not done until both have
succeeded and both of their outputs are confirmed live.
| Workflow | File | Trigger | Produces |
|---|---|---|---|
| Release | .github/workflows/release.yml | release: published | NuGet packages published to NuGet.org |
| Publish Docs | .github/workflows/docs.yml | release: published | The versioned docs site at https://csharp.sdk.modelcontextprotocol.io |
Use the shared release branch reference for branch roles and release tag conventions.
Safety: This skill is read-only by default. It inspects workflow runs, releases, and published artifacts. The only actions it may take are re-running a failed workflow or dispatching a docs refresh, and both require explicit user confirmation.
Work through each step sequentially. Present findings at each step and get user confirmation before taking any action.
The user may provide:
2.0.0-preview.1, v1.3.1) — use directlygh release list --limit 10 and ask the user to selectConfirm the release is published, not a draft:
gh release view {tag} --json tagName,isDraft,isPrerelease,publishedAt,targetCommitish,urlIf the release is still a draft, stop. Neither workflow has run — nothing is published, and no verification is possible. Tell the user the draft must be published in the GitHub UI first, and that publishing is a deliberate human action this skill will not perform.
Record the tag, the published timestamp, and the target commitish for the following steps.
Find the runs triggered by publishing this release. A release-event run carries the tag name in
headBranch, which is an exact identifier — use it rather than correlating on timestamps:
gh run list --workflow release.yml --event release --branch v{version} --limit 5 --json databaseId,status,conclusion,headBranch,headSha,createdAt,url
gh run list --workflow docs.yml --event release --branch v{version} --limit 5 --json databaseId,status,conclusion,headBranch,headSha,createdAt,urlDo not identify runs by "the most recent run" or "created at or after publishedAt." Those
match any release published in the same window, so a concurrent or closely-following release —
including a servicing patch published from another branch minutes later — can be reported as this
release's result, showing a green run for the wrong tag. Confirm headBranch equals v{version}
on every run before evaluating it.
Cross-check headSha against the release's target commitish recorded in Step 1. A mismatch means
the tag moved between drafting and publishing, and the run validated something other than what was
reviewed — stop and report it rather than evaluating the run.
If more than one run matches the tag, the workflow was re-run; evaluate the latest attempt and say that earlier attempts existed rather than silently reporting only the newest.
Present both runs with their status, conclusion, and URL. Watch them together — they run concurrently and either can fail independently. Do not report success for the release until both are accounted for.
If a run cannot be found for either workflow, report which one is missing and check whether the
workflow is disabled or whether its if repository guard excluded the run (both workflows only run
in the modelcontextprotocol/csharp-sdk repository, not in forks).
Report the run's conclusion. If it failed, identify the failing job and step and summarize the error:
gh run view {run-id} --log-failedA failure here does not roll back the release — the GitHub release and its tag remain, and the workflow is simply re-run once the cause is addressed. Re-running is safe and is usually the right first move. Recommend it, but do not re-run without explicit user confirmation.
Never run
dotnet nuget pushand never handle NuGet API keys. Package publishing happens only through the workflow.
Report the run's conclusion, accounting for these docs-specific behaviors:
pages concurrency group with
cancel-in-progress: true. Every run rediscovers the current releases and rebuilds the whole site
from scratch, so a newer run fully supersedes the one it cancels. Report a cancelled run as
superseded and follow the newer run instead.v{MAJOR}.*. A draft release contributes
nothing./v1/, /v2/). A manual dispatch defaults to the same release-tag content,
or can build every major from release/{MAJOR}.x, using main for its matching major,
by selecting docs_source=latest-branches. A new MAJOR adds a new path; the site root redirects
to the newest release, prereleases included.main. The scripts and picker assets are always checked out from
main. Release-triggered and default manual runs use release-tag content; a manual
docs_source=latest-branches run uses source-branch content. A docs fix that lives only in a
release branch will not affect orchestration.If it failed, summarize the failing step. Common causes are a docs build failure in one version's
worktree (make generate-docs) or a Pages deployment error.
Confirm the exact released version is listed for each shipping package on NuGet.org.
Listing can lag a successful workflow run by several minutes. If the workflow succeeded but the version is not yet visible, say so explicitly and offer to re-check — do not report this as a failure. Distinguish "published but not yet indexed" from "not published."
Report each package with its status, and flag any shipping package missing from the release.
Confirm https://csharp.sdk.modelcontextprotocol.io reflects this release:
/v2/) is live and
serving the new content.https://csharp.sdk.modelcontextprotocol.io/v{MAJOR}/versioning.html, resolves. Release notes
link to it from the Breaking Changes section, and for the first release of a new MAJOR that path
only comes into existence with this workflow run. Confirm the release notes use the slugged form
and not the unslugged /versioning.html, which tracks the site default and can silently repoint
when a later MAJOR ships.GitHub Pages caches aggressively, so a short delay after a successful deploy is normal. Distinguish "deployed but not yet propagated" from "deployed wrong."
Summarize the verification as a table covering both workflows and both published outputs, and state plainly whether the release is fully verified or what remains outstanding.
| Check | Status |
|---|---|
| Release workflow | ✅ succeeded — {run URL} |
| Publish Docs workflow | ✅ succeeded — {run URL} |
| Packages on NuGet.org | ✅ {version} listed for all N packages |
| Docs site | ✅ /v2/ live, picker updated, root redirects |
Both remediations require explicit user confirmation.
Re-run a failed workflow:
gh run rerun {run-id} --failedRebuild the released docs — use the default release-tags source to retry a failed Pages
deployment after a release, without minting a product release:
gh workflow run docs.yml --field docs_source=release-tagsRefresh docs without a new release — select latest-branches to rebuild every published major
from its current source branch (release/{MAJOR}.x, using main for its matching major):
gh workflow run docs.yml --field docs_source=latest-branchesThe workflow fails instead of silently using a release tag when any major has no matching branch.
pages concurrency group; report as superseded and follow the newer run.v{MAJOR}.*./v{MAJOR}/versioning.html for the released version. Report it so the user can correct the body; the unslugged form tracks the site default and will repoint when a later MAJOR ships.324ccd8
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.