Skip to content

Commit c449255

Browse files
authored
Drop support for Python 3.10 (#3690)
1 parent 9535c0e commit c449255

47 files changed

Lines changed: 84 additions & 422 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.claude/skills/test-quality/SKILL.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ where one exists; a rule with no stated why is a convention — follow it anyway
107107
silently become load-bearing.
108108
- Comments live next to the line they explain, not in docstrings; single backticks for code
109109
refs; match the surrounding comment density (one-liners next to one-liners). No
110-
`from __future__ import annotations` (py310+ repo).
110+
`from __future__ import annotations` (py311+ repo).
111111
- Test work doesn't change `src/` as a side effect — the one mechanical exception is deleting a
112112
pragma a new test now covers. If a test can't be written without a library change, raise it
113113
as a finding or defer the test; don't quietly edit `src/`.

‎.github/workflows/shared.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
version: 0.12.24
2525

2626
- name: Install dependencies
27-
run: uv sync --frozen --all-extras --python 3.10
27+
run: uv sync --frozen --all-extras --python 3.11
2828

2929
- uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1
3030
with:
@@ -55,7 +55,7 @@ jobs:
5555
strategy:
5656
fail-fast: false
5757
matrix:
58-
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
58+
python-version: ["3.11", "3.12", "3.13", "3.14", "3.15"]
5959
dep-resolution:
6060
- name: lowest-direct
6161
install-flags: "--upgrade --resolution lowest-direct"
@@ -110,7 +110,7 @@ jobs:
110110
version: 0.12.24
111111

112112
- name: Install dependencies
113-
run: uv sync --frozen --all-extras --python 3.10
113+
run: uv sync --frozen --all-extras --python 3.11
114114

115115
- name: Check README snippets are up to date
116116
run: uv run --frozen scripts/update_readme_snippets.py --check

‎AGENTS.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ assigned to their author are closed automatically.
3434
the example packages still take plain `uv add`.
3535
- Running tools: `uv run --frozen <tool>`. Always pass `--frozen` so uv doesn't
3636
rewrite `uv.lock` as a side effect.
37-
- Cross-version testing: `uv run --frozen --python 3.10 pytest ...` to run
38-
against a specific interpreter (CI covers 3.10–3.14).
37+
- Cross-version testing: `uv run --frozen --python 3.11 pytest ...` to run
38+
against a specific interpreter (CI covers 3.11–3.15).
3939
- Upgrading: `uv lock --upgrade-package <package>`
4040
- FORBIDDEN: `uv pip install`, `@latest` syntax
4141
- Don't raise dependency floors for CVEs alone. The `>=` constraint already
@@ -100,7 +100,7 @@ assigned to their author are closed automatically.
100100
CI requires 100% (`fail_under = 100`, `branch = true`).
101101

102102
- Full check: `./scripts/test` (~23s). Runs coverage + `strict-no-cover` on the
103-
default Python. Not identical to CI: CI runs 3.10–3.14 × {ubuntu, windows}
103+
default Python. Not identical to CI: CI runs 3.11–3.15 × {ubuntu, windows}
104104
× {locked, lowest-direct}, and some branch-coverage quirks only surface on
105105
specific matrix entries.
106106
- Targeted check while iterating (~4s, deterministic):

‎CONTRIBUTING.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Security reports do not belong in the issue tracker; [SECURITY.md](SECURITY.md)
7878

7979
## Development Setup
8080

81-
1. Make sure you have Python 3.10+ installed
81+
1. Make sure you have Python 3.11+ installed
8282
2. Install [uv](https://docs.astral.sh/uv/getting-started/installation/)
8383
3. Fork the repository
8484
4. Clone your fork: `git clone https://github.com/YOUR-USERNAME/python-sdk.git`

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ The [Model Context Protocol](https://modelcontextprotocol.io) lets you build ser
2929

3030
## Requirements
3131

32-
Python 3.10+.
32+
Python 3.11+.
3333

3434
## Installation
3535

‎docs/get-started/installation.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Installation
22

3-
The Python SDK is on PyPI as [`mcp`](https://pypi.org/project/mcp/). It requires **Python 3.10+**.
3+
The Python SDK is on PyPI as [`mcp`](https://pypi.org/project/mcp/). It requires **Python 3.11+**.
44

55
These docs describe **v2**, the current stable release line:
66

@@ -33,7 +33,7 @@ You don't need to know any of this to use the SDK, but if you're wondering what
3333
* [`jsonschema`](https://pypi.org/project/jsonschema/): validates a tool's structured output against its declared output schema.
3434
* [`pyjwt[crypto]`](https://pyjwt.readthedocs.io/): OAuth token handling for authorization.
3535
* [`opentelemetry-api`](https://opentelemetry-python.readthedocs.io/): just the lightweight API, so the SDK's tracing middleware costs nothing unless you install an OpenTelemetry SDK and exporter yourself.
36-
* [`typing-extensions`](https://typing-extensions.readthedocs.io/) and [`typing-inspection`](https://pypi.org/project/typing-inspection/): modern typing features on Python 3.10.
36+
* [`typing-extensions`](https://typing-extensions.readthedocs.io/) and [`typing-inspection`](https://pypi.org/project/typing-inspection/): modern typing features on Python 3.11.
3737
* [`pywin32`](https://pypi.org/project/pywin32/): Windows only, used for `stdio` subprocess management.
3838

3939
## Optional extras

‎docs/index.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ This is the official Python SDK for it. With it you can:
1515

1616
## Requirements
1717

18-
Python 3.10+.
18+
Python 3.11+.
1919

2020
## Installation
2121

‎examples/clients/simple-auth-client/pyproject.toml‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "mcp-simple-auth-client"
33
version = "0.1.0"
44
description = "A simple OAuth client for the MCP simple-auth server"
55
readme = "README.md"
6-
requires-python = ">=3.10"
6+
requires-python = ">=3.11"
77
authors = [{ name = "Model Context Protocol a Series of LF Projects, LLC." }]
88
keywords = ["mcp", "oauth", "client", "auth"]
99
license = { text = "MIT" }
@@ -12,7 +12,6 @@ classifiers = [
1212
"Intended Audience :: Developers",
1313
"License :: OSI Approved :: MIT License",
1414
"Programming Language :: Python :: 3",
15-
"Programming Language :: Python :: 3.10",
1615
]
1716
dependencies = ["click>=8.2.0", "mcp"]
1817

@@ -37,7 +36,7 @@ ignore = []
3736

3837
[tool.ruff]
3938
line-length = 120
40-
target-version = "py310"
39+
target-version = "py311"
4140

4241
[dependency-groups]
4342
dev = ["pyright>=1.1.379", "pytest>=8.3.3", "ruff>=0.6.9"]

‎examples/clients/simple-chatbot/.python-version‎

Lines changed: 0 additions & 1 deletion
This file was deleted.

‎examples/clients/simple-chatbot/README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This example demonstrates how to integrate the Model Context Protocol (MCP) into
44

55
## Requirements
66

7-
- Python 3.10
7+
- Python 3.11
88
- `python-dotenv`
99
- `requests`
1010
- `mcp`

0 commit comments

Comments
 (0)