-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Add VERSIONING.md, ROADMAP.md, and DEPENDENCY_POLICY.md #2084
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+164
−0
Merged
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
301cfdf
ci: backport weekly lockfile update and dependabot from main
felixweinberger 2dfd474
docs: add dependency update and triage policies to CONTRIBUTING.md
felixweinberger 6ba15b9
Add VERSIONING.md, ROADMAP.md, and DEPENDENCY_POLICY.md
felixweinberger 471c47b
Merge branch 'v1.x' into fweinberger/v1x-policy-and-process
felixweinberger File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| version: 2 | ||
| updates: | ||
| - package-ecosystem: "github-actions" | ||
| directory: "/" | ||
| schedule: | ||
| interval: monthly | ||
| groups: | ||
| github-actions: | ||
| patterns: | ||
| - "*" |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| name: Weekly Lockfile Update | ||
|
|
||
| on: | ||
| workflow_dispatch: | ||
| schedule: | ||
| # Every Thursday at 8:00 UTC | ||
| - cron: "0 8 * * 4" | ||
|
|
||
| permissions: | ||
| contents: write | ||
| pull-requests: write | ||
|
|
||
| jobs: | ||
| update-lockfile: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 | ||
|
|
||
| - uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1 | ||
| with: | ||
| version: 0.9.5 | ||
|
|
||
| - name: Update lockfile | ||
| run: | | ||
| echo '## Updated Dependencies' > pr_body.md | ||
| echo '' >> pr_body.md | ||
| echo '```' >> pr_body.md | ||
| uv lock --upgrade 2>&1 | tee -a pr_body.md | ||
| echo '```' >> pr_body.md | ||
|
|
||
| - name: Create pull request | ||
| uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v7 | ||
| with: | ||
| commit-message: "chore: update uv.lock with latest dependencies" | ||
| title: "chore: weekly dependency update" | ||
| body-path: pr_body.md | ||
| branch: weekly-lockfile-update-v1x | ||
| delete-branch: true | ||
| add-paths: uv.lock | ||
| labels: dependencies |
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,30 @@ | ||
| # Dependency Policy | ||
|
|
||
| As a library consumed by downstream projects, the MCP Python SDK takes a conservative approach to dependency updates. Dependencies are kept stable unless there is a specific reason to update, such as a security vulnerability, a bug fix, or a need for new functionality. | ||
|
|
||
| ## Update Triggers | ||
|
|
||
| Dependencies are updated when: | ||
|
|
||
| - A **security vulnerability** is disclosed (via GitHub security alerts or PyPI advisories) in a dependency that directly affects the SDK's functionality or its consumers. | ||
| - A bug in a dependency directly affects the SDK. | ||
| - A new dependency feature is needed for SDK development. | ||
| - A dependency drops support for a Python version the SDK still targets. | ||
|
|
||
| Routine version bumps without a clear motivation are avoided to minimize churn for downstream consumers. | ||
|
|
||
| ## What We Don't Do | ||
|
|
||
| The SDK does not run ad-hoc version bumps for PyPI dependencies. Updating a dependency can force downstream consumers to adopt that update transitively, which can be disruptive for projects with strict dependency policies. | ||
|
|
||
| Dependencies are only updated when there is a concrete reason, not simply because a newer version is available. | ||
|
|
||
| ## Automated Tooling | ||
|
|
||
| - **Lockfile refresh**: The lockfile is updated automatically every Thursday at 08:00 UTC by the [`weekly-lockfile-update.yml`](.github/workflows/weekly-lockfile-update.yml) workflow, which runs `uv lock --upgrade` and opens a PR. This does not alter the minimum or maximum versions for dependencies of the `mcp` package itself. | ||
| - **GitHub security updates** are enabled at the repository level and automatically open pull requests for packages with known vulnerabilities. This is a GitHub repo setting, separate from the `dependabot.yml` configuration. | ||
| - **GitHub Actions versions** are kept up to date via Dependabot on a monthly schedule (see `.github/dependabot.yml`). | ||
|
|
||
| ## Pinning and Ranges | ||
|
|
||
| Production dependencies use compatible-release specifiers (`~=`) or lower-bound constraints (`>=`) to allow compatible updates. Exact versions are pinned only when necessary to work around a specific issue. The lockfile (`uv.lock`) records exact resolved versions for reproducible installs. |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| # Roadmap | ||
|
|
||
| ## Spec Implementation Tracking | ||
|
|
||
| The SDK tracks implementation of MCP spec components via GitHub Projects, with a dedicated project board for each spec revision. For example, see the [2025-11-25 spec revision board](https://github.com/orgs/modelcontextprotocol/projects/26). | ||
|
|
||
| ## Current Focus Areas | ||
|
|
||
| ### Next Spec Revision | ||
|
|
||
| The next MCP specification revision is being developed in the [protocol repository](https://github.com/modelcontextprotocol/modelcontextprotocol). Key areas expected in the next revision include extensions and stateless transports. | ||
|
|
||
| The SDK has historically implemented spec changes promptly as they are finalized, with dedicated project boards tracking component-level progress for each revision. | ||
|
|
||
| ### v2 | ||
|
|
||
| A major version of the SDK is in active development, tracked via [GitHub Project](https://github.com/orgs/modelcontextprotocol/projects/31). Target milestones: | ||
|
|
||
| - **Alpha**: ~mid-March 2026 | ||
| - **Beta**: ~May 2026 | ||
|
|
||
| The v2 release is planned to align with the next spec release, expected around mid-2026. |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| # Versioning Policy | ||
|
|
||
| The MCP Python SDK (`mcp`) follows [Semantic Versioning 2.0.0](https://semver.org/). | ||
|
|
||
| ## Version Format | ||
|
|
||
| `MAJOR.MINOR.PATCH` | ||
|
|
||
| - **MAJOR**: Incremented for breaking changes (see below). | ||
| - **MINOR**: Incremented for new features that are backward-compatible. | ||
| - **PATCH**: Incremented for backward-compatible bug fixes. | ||
|
|
||
| ## What Constitutes a Breaking Change | ||
|
|
||
| The following changes are considered breaking and require a major version bump: | ||
|
|
||
| - Removing or renaming a public API export (class, function, type, or constant). | ||
| - Changing the signature of a public function or method in a way that breaks existing callers (removing parameters, changing required/optional status, changing types). | ||
| - Removing or renaming a public type or dataclass/TypedDict field. | ||
| - Changing the behavior of an existing API in a way that breaks documented contracts. | ||
| - Dropping support for a Python version that is still receiving security updates. | ||
| - Removing support for a transport type. | ||
| - Changes to the MCP protocol version that require client/server code changes. | ||
|
|
||
| The following are **not** considered breaking: | ||
|
|
||
| - Adding new optional parameters to existing functions. | ||
| - Adding new exports, types, or classes. | ||
| - Adding new optional fields to existing types. | ||
| - Bug fixes that correct behavior to match documented intent. | ||
| - Internal refactoring that does not affect the public API. | ||
| - Adding support for new MCP spec features. | ||
| - Changes to dev dependencies or build tooling. | ||
|
|
||
| ## How Breaking Changes Are Communicated | ||
|
|
||
| 1. **Changelog**: All breaking changes are documented in the GitHub release notes with migration instructions. | ||
felixweinberger marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| 2. **Deprecation**: When feasible, APIs are deprecated for at least one minor release before removal using `warnings.warn()` with `DeprecationWarning`, which surfaces warnings at runtime and through static analysis tooling. | ||
| 3. **Migration guide**: Major version releases include a migration guide describing what changed and how to update. | ||
| 4. **PR labels**: Pull requests containing breaking changes are labeled with `breaking change`. | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.