Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
b8c4d95
Implementation for SEP-2243 Http Standardization (#1553)
May 14, 2026
74788af
Append `offline_access` to authorization scope when AS advertises it …
Copilot May 19, 2026
712a06b
Fix broken links to MCP Tasks specification (#1594)
tarekgh May 21, 2026
b99d887
Deprecate `McpErrorCode.ResourceNotFound` (-32002) and use `McpErrorC…
jayaraman-venkatesan May 26, 2026
157f855
Add RegisterTools API to McpClient for pre-populating tool cache (#1590)
tarekgh May 26, 2026
fd1ac08
Add ScopeSelectorDelegate to enhance OAuth options for scope filterin…
halllo May 26, 2026
a87518c
Validate user on Streamable HTTP session DELETE (#1604)
halter73 May 28, 2026
168c371
Fix: Relax resource URI validation to accept base URL (#1517)
JBallan Jun 1, 2026
711e5bb
Rename `MinVersionForStandardHeaders` to `DraftProtocolVersion` (#1603)
halter73 Jun 2, 2026
bc372f1
Update release processes to support release servicing branches (#1620)
jeffhandley Jun 3, 2026
8202bcc
feat: Add Enterprise Managed Authorization (SEP-990) support (#1305)
aniket-okta Jun 3, 2026
f6dbe43
Multi Round-Trip Requests (MRTR) (#1458)
halter73 Jun 3, 2026
4c4c5c6
Bump version to 2.0.0-preview.1 (#1621)
jeffhandley Jun 3, 2026
7ba084a
Update CodeQL workflow to include release branches (#1624)
jeffhandley Jun 3, 2026
719eade
Fix flaky AddIncomingMessageFilter_Multiple_Filters_Execute_In_Order …
tarekgh Jun 4, 2026
ed19286
Align x-mcp-header implementation with SEP-2243 spec clarifications (…
tarekgh Jun 5, 2026
a4157f3
perf(server): skip IdleTrackingBackgroundService timer in stateless m…
MukundaKatta Jun 5, 2026
01dd432
Fix flaky test: add sync point in ReadEventsAsync_InStreamingMode_Yie…
Copilot Jun 5, 2026
480979b
Fix flaky DiagnosticTests.Session_TracksActivities by waiting for ful…
Copilot Jun 5, 2026
20ddd2f
Fix $ref pointer resolution after output schema wrapping (#1435)
weinong Jun 5, 2026
af6fcff
Add McpClientOptions.InitializeMeta to set _meta on the initialize re…
adityasingh2400 Jun 5, 2026
a04c3e4
Fix: Remove `charset=utf-8` from `Content-Type: application/json` in …
jayaraman-venkatesan Jun 5, 2026
df0c102
Require Tool inputSchema during deserialization (#1600)
DragonFSKY Jun 5, 2026
acb4cc9
Release SSE response stream reference when GET request ends (#1519)
joelmforsyth Jun 6, 2026
ed07fdb
Add diagnostics for messages dropped on the GET SSE stream (#1609)
halter73 Jun 8, 2026
dbb7a20
Implement SEP-2663 Tasks Extension (#1579)
PranavSenthilnathan Jun 11, 2026
c021d0a
Add SEP-2549 caching hints (ttlMs and cacheScope) to cacheable result…
tarekgh Jun 15, 2026
0663b7c
Relax outputSchema to any JSON Schema 2020-12 document per SEP-2106 (…
jayaraman-venkatesan Jun 16, 2026
de75c7d
Fix main build: remove dangling Tool.Execution reference in BuildLega…
halter73 Jun 17, 2026
f93df7e
Add MCP Apps extension support (typed metadata, attribute, and helper…
Copilot Jun 17, 2026
4dd58c1
Fix broken link to Enterprise-Managed Authorization spec (#1663)
PranavSenthilnathan Jun 19, 2026
9b783d7
Implementation for SEP-2350 Client-side scope accumulation in step-up…
Jun 22, 2026
8ddb3cc
Obsolete Roots, Sampling, and Logging surface area per SEP-2577 (#1651)
tarekgh Jun 22, 2026
9ba1f47
Enable netfx UI MCP clients (#1639)
KirillOsenkov Jun 22, 2026
3368bb7
Use `TimeToLive` (TimeSpan?) instead of `TtlMs` (long?) in public API…
Copilot Jun 23, 2026
6c323e7
Default draft protocol support: sessionless + handshake-less (SEP-257…
halter73 Jun 24, 2026
e7b450e
Reduce absolute time dependencies in tests (#1649)
PranavSenthilnathan Jun 24, 2026
90c8531
Remove `ExperimentalAttribute` from official Extensions/Tasks/MRTR AP…
Copilot Jun 25, 2026
d6b1615
Follow-ups to #1610: de-draft 2026-07-28 terminology, renumber error …
halter73 Jun 25, 2026
8e7f28c
Document caching behavior and warn on non-conformant draft cacheable …
tarekgh Jun 28, 2026
1193b7b
Fix request-scoped draft client capabilities
PranavSenthilnathan Jul 1, 2026
6b5e5ae
Make request-scoped ClientInfo consistent with ClientCapabilities
PranavSenthilnathan Jul 1, 2026
5d00eed
Fully stabilize now-stable protocol properties (#1686)
eiriktsarpalis Jul 1, 2026
e23be1d
Echo request id in post-parse Streamable HTTP error responses (#1687)
tarekgh Jul 2, 2026
1214556
Update package READMEs as part of the release process (#1683)
Copilot Jul 7, 2026
84eb694
Add DeferChangedEvents() to McpServerPrimitiveCollection for batched …
Copilot Jul 7, 2026
3e7ca32
Release v2.0.0-preview.2 (#1695)
jeffhandley Jul 9, 2026
b2a4012
Re-enable http-custom-headers conformance scenario (#1655) (#1691)
tarekgh Jul 10, 2026
878e002
Resolve request-scoped client capabilities in outgoing filters and ad…
Jul 10, 2026
b83f265
Merge remote-tracking branch 'upstream/main' into pr-1685
Jul 10, 2026
c0e58e8
Consolidate July2026 protocol helper and document empty-capabilities …
Jul 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
38 changes: 38 additions & 0 deletions .github/release-process.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Release Process

The following process is used when publishing new releases to NuGet.org.

## 1. Ensure the CI workflow is fully green

- Some integration tests are flaky and may require re-running
- Once the state of the branch is known to be good, a release can proceed
- **The release workflow _does not_ run tests** — CI must be green before starting

## 2. Prepare the release

From a local clone of the repository, use Copilot CLI to invoke the `prepare-release` skill. The skill assesses the semantic version, bumps the version in [`src/Directory.Build.props`](../src/Directory.Build.props), runs API compatibility checks, reviews documentation, drafts release notes, and creates a pull request with all release artifacts.

As part of Step 9 (documentation review), the skill also updates the shared embedded NuGet README (`src/PACKAGE.md`) -- adding any newly introduced packages to the package-list closure, applying the correct badge style (`nuget/vpre` for a prerelease series or `nuget/v` for a stable release), adding a release-notes link pointing to the tag being created, and syncing the same closure changes to the root `README.md`.

Review the PR, request changes if needed, and merge when ready.

## 3. Publish the release

After the prepare-release PR is merged, invoke the `publish-release` skill. The skill checks for any late-arriving PRs that could affect the release, refreshes the release notes, re-runs the README content checklist (confirming package closure, badge style, and release-notes link), and creates a **draft** GitHub release.

Review the draft release on GitHub, check 'Set as a pre-release' if appropriate, and click 'Publish release'.

## Branching

The `main` branch is the next-MAJOR preview and development line; currently, it produces the `2.0.0-preview.*` series. Nightly `cron` CI on `main` publishes CI-suffixed packages to GitHub Packages.
Long-lived `release/{MAJOR}.x` branches are created on demand when a shipped MAJOR needs servicing releases. Every push to a `release/*` branch publishes a CI-suffixed package to GitHub Packages, so servicing CI packages are commit-driven rather than clock-driven.
Short-lived `release-{version}` branches are local prepare-release work branches that become pull requests, such as `release-2.0.0-preview.1` or `release-1.3.1`.
Official NuGet.org publishes occur only when a GitHub Release is created from a branch's tag.
The prepare-release skill asks for the source/base branch first so the release PR targets the same line it assessed.
For the agent-facing, structured version of these rules, see [release-branches.md](skills/shared-resources/release-branches.md).

## 4. Monitor the Release workflow

- After publishing, a workflow will produce build artifacts and publish the NuGet packages to NuGet.org
- If the job fails, troubleshoot and re-run the workflow as needed
- Verify the package version becomes listed at [nuget.org/packages/ModelContextProtocol](https://www.nuget.org/packages/ModelContextProtocol)
28 changes: 18 additions & 10 deletions .github/skills/bump-version/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,21 @@ compatibility: Requires gh CLI with repo access for creating branches and pull r

Assess and bump the SDK version in `src/Directory.Build.props` to prepare for the next release. This skill owns the [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) assessment logic — the [SemVer assessment guide](references/semver-assessment.md) is the single source of truth for version assessment criteria used across the release workflow by both the **prepare-release** and **publish-release** skills.

Use the shared [release branch reference](../shared-resources/release-branches.md) for branch roles, previous-release lookup rules, and release work-branch naming.

> **Note**: For comprehensive release preparation — including ApiCompat/ApiDiff, documentation review, and release notes — use the **prepare-release** skill, which incorporates version assessment as part of its broader workflow.

## Process

### Step 1: Read Current Version and Previous Release

Read `src/Directory.Build.props` on the default branch and extract:
Read `src/Directory.Build.props` on the current branch and extract:
- `<VersionPrefix>` — the `MAJOR.MINOR.PATCH` version
- `<VersionSuffix>` — the prerelease suffix, when present

Display the current version to the user.
The candidate version is `{VersionPrefix}` plus `-{VersionSuffix}` when the suffix is present (for example, `2.0.0-preview.1`). Display the current candidate version to the user.

Determine the previous release tag from `gh release list` (most recent **published** release). Draft releases must be ignored — they represent a pending release that has not yet shipped. Use `--exclude-drafts` or filter to only published releases when querying.
Determine the previous release tag from `gh release list` (most recent **published** release). Draft releases must be ignored — they represent a pending release that has not yet shipped. Use `--exclude-drafts` or filter to only published releases when querying. The lookup is branch-aware: from a `release/{MAJOR}.x` branch, restrict candidates to tags matching `v{MAJOR}.*`; from `main`, use the most recent published release globally. See [release-branches.md](../shared-resources/release-branches.md) for details.

### Step 2: Assess and Determine Next Version

Expand All @@ -40,26 +43,31 @@ When context about queued changes is available or can be gathered, assess the ve

#### Default Suggestion (Fallback)

When a quick bump is needed without full change analysis, suggest the next **minor** version:
When a quick bump is needed without full change analysis, suggest based on the candidate version:

- Current `1.0.0` → suggest `1.1.0`
- Current `1.2.3` → suggest `1.3.0`
- **Stable candidate** — suggest the next **minor** version:
- Current `1.0.0` → suggest `1.1.0`
- Current `1.2.3` → suggest `1.3.0`
- **Prerelease candidate** — if the suffix starts with an identifier such as `preview.` or `rc.` followed by an integer, suggest incrementing the trailing integer:
- Current `2.0.0-preview.1` → suggest `2.0.0-preview.2`
- Current `2.0.0-rc.1` → suggest `2.0.0-rc.2`

Present the suggestion and let the user confirm or provide an alternative.

Parse the confirmed version into its `VersionPrefix` component.
Parse the confirmed version into its `VersionPrefix` and `VersionSuffix` components. Stable versions have no suffix.

### Step 3: Create Pull Request

1. Create a new branch named `bump-version-to-{version}` (e.g. `bump-version-to-1.1.0`) from the default branch
1. Create a new branch named `bump-version-to-{version}` (e.g. `bump-version-to-1.1.0`) from the current branch
2. Update `src/Directory.Build.props`:
- Set `<VersionPrefix>` to the new version
- Set `<VersionPrefix>` to the confirmed stable component
- Set `<VersionSuffix>` for prerelease versions, or clear it for stable versions; add the element if it is missing
- Update `<PackageValidationBaselineVersion>` if the MAJOR version has changed
3. Commit with message: `Bump version to {version}`
4. Push the branch and create a pull request:
- **Title**: `Bump version to {version}`
- **Label**: `infrastructure`
- **Base**: default branch
- **Base**: the current branch (which, for a servicing branch like `release/1.x`, is that servicing branch — not `main`)

### Step 4: Confirm

Expand Down
31 changes: 25 additions & 6 deletions .github/skills/bump-version/references/semver-assessment.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,31 @@ Recommend a PATCH version increment if no MAJOR or MINOR criteria are met.
- MINOR: `MAJOR.(MINOR+1).0`
- PATCH: `MAJOR.MINOR.(PATCH+1)`

**Examples** from previous release `v1.2.0`:
### Prereleases

| Level | Recommended |
|-------|-------------|
| PATCH | `v1.2.1` |
| MINOR | `v1.3.0` |
| MAJOR | `v2.0.0` |
While the candidate version uses a prerelease suffix (e.g., `X.Y.Z-preview.N`, `X.Y.Z-rc.N`), the recommended next version increments the trailing integer of the suffix: `preview.3` → `preview.4`, `rc.1` → `rc.2`.

Going to GA drops the suffix entirely: `2.0.0-rc.2` → `2.0.0`.

This is purely about how to *compute* the next version. It does **not** declare any new policy about what kinds of changes are permitted between previews — refer to the existing [versioning documentation](../../../../docs/versioning.html) for breaking-change policy.

### Branch context

The "previous release" lookup is constrained to tags matching `v{MAJOR}.*` when assessing from a `release/{MAJOR}.x` servicing branch. On `main`, the lookup is unconstrained (most recent published release globally).

The MAJOR/MINOR/PATCH classification criteria above are unchanged regardless of branch.

See [release-branches.md](../../shared-resources/release-branches.md) for branch-role definitions and previous-release lookup rules.

**Examples**:

| Previous release | Branch | Level | Recommended |
|--------------------|---------------|-----------------------|------------------------|
| `v1.2.0` | `main` | PATCH | `v1.2.1` |
| `v1.2.0` | `main` | MINOR | `v1.3.0` |
| `v1.2.0` | `main` | MAJOR | `v2.0.0` |
| `v2.0.0-preview.1` | `main` | (prerelease bump) | `v2.0.0-preview.2` |
| `v1.3.0` | `release/1.x` | PATCH | `v1.3.1` |

## Comparing Against the Candidate Version

Expand All @@ -83,6 +101,7 @@ Present the assessment as a summary table followed by a rationale:

| Aspect | Finding |
|--------|---------|
| Branch context | release/1.x |
| Previous release | v1.0.0 |
| Breaking changes | None confirmed |
| New API surface | Yes — 3 PRs add new public APIs |
Expand Down
Loading