Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
154 commits
Select commit Hold shift + click to select a range
bd9885f
Add regression test for stateless request memory cleanup (#1140)
felixweinberger Jul 15, 2025
eb5146d
Implement RFC9728 - Support WWW-Authenticate header by MCP client (#1…
yurikunash Jul 15, 2025
0130f5b
Add streamable HTTP starlette example to Python SDK docs (#1111)
pamelafox Jul 15, 2025
6566c08
fix markdown error in README in main (#1147)
ihrpr Jul 15, 2025
0b4ce00
README - replace code snippets with examples - add lowlevel to snippe…
ihrpr Jul 16, 2025
e975d05
README - replace code snippets with examples - streamable http (#1155)
ihrpr Jul 16, 2025
a99711d
chore: don't allow users to create issues outside the templates (#1163)
Kludex Jul 17, 2025
c0bc666
Tests(cli): Add coverage for helper functions (#635)
davenpi Jul 17, 2025
dd79297
Docs: Update CallToolResult parsing in README (#812)
functicons Jul 17, 2025
11162d7
docs: add pre-commit install guide on CONTRIBUTING.md (#995)
dingo4dev Jul 17, 2025
813da6a
fix flaky fix-test_streamablehttp_client_resumption test (#1166)
ihrpr Jul 17, 2025
41184ba
README - replace code snippets with examples -- auth examples (#1164)
ihrpr Jul 17, 2025
99c4f3c
Support falling back to OIDC metadata for auth (#1061)
LucaButBoring Jul 17, 2025
ba58ebc
Add CODEOWNERS file for sdk (#1169)
ihrpr Jul 18, 2025
0b1b52b
fix flaky test test_88_random_error (#1171)
ihrpr Jul 18, 2025
7570ba3
Make sure `RequestId` is not coerced as `int` (#1178)
Kludex Jul 21, 2025
c260e29
Fix: Replace threading.Lock with anyio.Lock for Ray deployment compat…
only-weng Jul 21, 2025
6a84a2f
fix: fix OAuth flow request object handling (#1174)
clareliguori Jul 21, 2025
6d2e6d4
update codeowners group (#1191)
ihrpr Jul 23, 2025
35777b9
fix: perform auth server metadata discovery fallbacks on any 4xx (#1193)
LucaButBoring Jul 24, 2025
b34e720
server: skip duplicate response on CancelledError (#1153)
lukacf Jul 25, 2025
959d4e3
Unpack settings in FastMCP (#1198)
Kludex Jul 26, 2025
6c61058
chore: Remove unused prompt_manager.py file (#1229)
chughtapan Aug 4, 2025
68e25d4
Improved supported for ProtectedResourceMetadata (#1235)
yannj-fr Aug 4, 2025
34e3664
chore: Remove unused variable notification_options (#1238)
sreenaths Aug 5, 2025
d475928
Improve README around the Context object (#1203)
jbkkd Aug 5, 2025
e68e513
fix: allow to pass `list[str]` to `token_endpoint_auth_signing_alg_va…
yannj-fr Aug 6, 2025
ef4e167
Remove strict validation on `response_modes_supported` member of `OAu…
joesavage-silabs Aug 7, 2025
c7671e4
Add pyright strict mode on the whole project (#1254)
Kludex Aug 11, 2025
a82c69b
Consistent casing for default headers Accept and Content-Type (#1263)
glinf Aug 12, 2025
0926613
Update dependencies and fix type issues (#1268)
dsp-ant Aug 14, 2025
d1ac8d6
fix: prevent async generator cleanup errors in StreamableHTTP transpo…
mous222 Aug 14, 2025
824ef8a
chore: uncomment .idea/ in .gitignore (#1287)
maxisbey Aug 20, 2025
ff02c59
docs: clarify streamable_http_path configuration when mounting server…
felixweinberger Aug 21, 2025
09e3a05
feat: Add CORS configuration for browser-based MCP clients (#1059)
jerome3o-anthropic Aug 21, 2025
f4b2957
Added Audio to FastMCP (#1130)
dragonier23 Aug 22, 2025
e750a06
fix: avoid uncessary retries in OAuth authenticated requests (#1206)
keurcien Aug 22, 2025
9a8592e
Add PATHEXT to default STDIO env vars in windows (#1256)
timesler Aug 22, 2025
eaf7cf4
fix: error too many values to unpack (expected 2) (#1279)
sandangel Aug 23, 2025
9c6fd15
SDK Parity: Avoid Parsing Server Response for non-JsonRPCMessage Requ…
justin-yi-wang Aug 26, 2025
07ae8c0
types: Setting default value for method: Literal (#1292)
sreenaths Aug 26, 2025
1644b82
changes structured temperature to not deadly (#1328)
monkeywithacupcake Aug 31, 2025
356dfa6
Update simple-resource example to use non-deprecated read_resource re…
pja-ant Sep 1, 2025
346e794
docs: Update README to include link to API docs for #1329 (#1330)
reidg44 Sep 1, 2025
47d35f0
Allow ping requests before initialization (#1312)
eleftherias Sep 1, 2025
c47c767
Python lint: Ruff rules for pylint and code complexity (#525)
cclauss Sep 5, 2025
c3717e7
Fix context injection for resources and prompts (#1336)
dsp-ant Sep 11, 2025
ca5cb4c
fix(fastmcp): propagate mimeType in resource template list (#1186)
pchoudhury22 Sep 17, 2025
b41b917
fix: allow elicitations accepted without content (#1285)
owengo Sep 17, 2025
ca34666
Use --frozen in pre-commit config (#1375)
pja-ant Sep 17, 2025
7e93a9f
Return HTTP 403 for invalid Origin headers (#1353)
pja-ant Sep 22, 2025
20596e5
Add test for ProtectedResourceMetadataParsing (#1236)
yannj-fr Sep 23, 2025
03e19f1
Fastmcp logging progress example (#1270)
stevebillings Sep 23, 2025
4fb975c
feat: add paginated list decorators for prompts, resources, and tools…
maxisbey Sep 23, 2025
7629fe6
Remove "unconditionally" from conditional description (#1289)
mssalvatore Sep 23, 2025
c0f1657
Use streamable-http consistently in examples (#1389)
maxisbey Sep 23, 2025
b85e7bd
feat: Add SDK support for SEP-1034 default values in elicitation sche…
chughtapan Sep 24, 2025
71889d7
Implementation of SEP 973 - Additional metadata + icons support (#1357)
pja-ant Sep 24, 2025
146d7ef
Add error log for client stdio (#924)
pengwa Sep 26, 2025
1940040
Accept additional response_types values from OAuth servers (#1323)
jonshea Sep 26, 2025
9323efa
Issue 1379 patch - Fix MCP server OAuth not working with Visual Studi…
automaton82 Sep 29, 2025
60f4b2d
Add comprehensive Unicode tests for streamable HTTP transport (#1381)
pja-ant Sep 29, 2025
80c0d23
Update Icon.sizes to use string array format (#1411)
pja-ant Sep 29, 2025
8dd15ac
Delete CODEOWNERS to eliminate notification overload (#1413)
felixweinberger Sep 30, 2025
c81ff64
fix: fix the system message in simple-chatbot example (#1394)
yukuanj Sep 30, 2025
d648a31
fix: improve misleading warning for progress callback exceptions (#775)
lorenzocesconetto Sep 30, 2025
f676f6c
fix: catch and rethrow SSEError during SSE connection establishment (…
zhangch-ss Sep 30, 2025
3e798bf
Add icons support for ResourceTemplate (#1412)
pja-ant Oct 1, 2025
89619a8
Add documentation structure (#1425)
Kludex Oct 3, 2025
814c9c0
Add documentation about testing (#1426)
Kludex Oct 3, 2025
df3e428
Improve OAuth protected resource metadata URL construction per RFC 97…
shulkx Oct 6, 2025
b8e758b
feat: add ability to remove tools (#1322)
brandonspark Oct 6, 2025
7d335ef
Update README to link to Python SDK documentation (#1430)
felixweinberger Oct 6, 2025
61399b3
fix: update CLAUDE.md to remove auto-addition of reviewers. (#1431)
felixweinberger Oct 6, 2025
0e29cc4
[client] Implement MCP OAuth scope selection and step-up authorizatio…
dogacancolak Oct 13, 2025
b4e50aa
Handles message type Exception in lowlevel/server.py _handle_message …
AishwaryaKalloli Oct 13, 2025
7a933fe
Fix workspace configuration error with structured_output_lowlevel.py …
felixweinberger Oct 13, 2025
eb34ab7
fix: Remove unnecessary constructor from ResourceServerSettings (#1424)
rocky-d Oct 14, 2025
cd7253c
feat: add resource annotations support to FastMCP (#1468)
fennb Oct 14, 2025
de89457
fix: send params as empty object for list methods without cursor (#1453)
felixweinberger Oct 14, 2025
dcc68ce
fix: Set the Server session initialization state immediately after re…
daamitt Oct 15, 2025
98f8248
feat: add tool metadata in FastMCP.tool decorator (#1463)
mat-octave Oct 17, 2025
c733eec
Make client examples workspaces to reflect package code (#1466)
LucaButBoring Oct 17, 2025
40acbc5
Expose RequestParams._meta in ClientSession.call_tool (#1231)
samchenatti Oct 17, 2025
1200ba0
Allow CallToolResult to be returned directly to support _meta field f…
BrandonShar Oct 21, 2025
35a9ccd
fix: uv CVE-2025-62518 astral-tokio-tar issue GHSA-j5gw-2vrg-8fgx (#1…
cclauss Oct 22, 2025
9f9dbad
fix: use proper dependency resolution in CI (#1507)
felixweinberger Oct 23, 2025
bbc8b49
Upgrade GitHub Actions (#1473)
cclauss Oct 23, 2025
b7e4ae7
test: use errno.ENOENT for command not found assertion (#1498)
mingo1996 Oct 23, 2025
340af40
Replace deprecated dev-dependencies with dependency-groups (#1488)
yukuanj Oct 24, 2025
6c26d08
update uv to 0.9.5 (#1510)
maxisbey Oct 24, 2025
31ae5f4
Relax Accept header requirement for JSON-only responses (#1500)
domdomegg Oct 27, 2025
673423d
fix: replace deprecated dev-dependencies in examples/clients (#1518)
yukuanj Oct 28, 2025
7ac40af
fix: Update spec links to new modelcontextprotocol.io location (#1491)
maxisbey Oct 28, 2025
f97f7c4
fix: Replace fixed sleep with active server readiness check in SSE te…
maxisbey Oct 28, 2025
3e86edf
fix: Replace arbitrary sleeps with active server readiness checks in …
maxisbey Oct 28, 2025
c44e68f
Fix flaky timeout test in test_88_random_error (#1525)
maxisbey Oct 28, 2025
db9e451
fix: Replace remaining manual server polling with wait_for_server hel…
maxisbey Oct 29, 2025
f161149
Implement RFC 7523 JWT flows (#1247)
LucaButBoring Oct 29, 2025
8cdac3d
Fix pyright error and replace wildcard import with explicit imports (…
maxisbey Oct 29, 2025
6f2cd0c
Fix auth client example URL handling for oauth provider (#1549)
pcarleton Oct 30, 2025
202af49
docs: use article "an" before "MCP" instead of "a" (#1558)
koic Oct 31, 2025
3a9f118
Update Starlette to 0.49.1 in uv.lock (#1559)
ColeMurray Nov 3, 2025
de2289d
Fix typo in `ClientSessionGroup` doc string (#1572)
inaku-Gyan Nov 4, 2025
3390e49
Implement SEP-985: OAuth Protected Resource Metadata discovery fallba…
cbcoutinho Nov 5, 2025
b7b0f8e
Add --frozen flag to uv run commands in Claude config (#1583)
maxisbey Nov 6, 2025
9eae96a
Add get_server_capabilities() to ClientSession (#1588)
crondinini-ant Nov 6, 2025
da4fce2
Add everything-server for comprehensive MCP conformance testing (#1587)
felixweinberger Nov 9, 2025
89e9c43
Get baseline 100% clean coverage (#1553)
maxisbey Nov 11, 2025
a864840
Add end-of-file-fixer pre-commit hook (#1610)
maxisbey Nov 11, 2025
720d713
Add coverage baseline commit to git-blame-ignore (#1613)
maxisbey Nov 11, 2025
be73067
Add SEP-1034 conformance test support to everything-server (#1604)
felixweinberger Nov 11, 2025
7d12e83
refactor: extract OAuth helper functions and simplify provider state …
maxisbey Nov 13, 2025
5e1aa40
Add client_id_metadata_document_supported to OAuthMetadata (#1603)
maxisbey Nov 13, 2025
91ccdb3
Fix OAuth discovery fallback and URL ordering (#1624)
maxisbey Nov 13, 2025
116c13e
Refactor `func_metadata()` implementation (#1496)
Viicos Nov 13, 2025
9724ad1
Fix CI highest resolution test to actually test highest versions (#1609)
maxisbey Nov 13, 2025
a357380
feat: Pass through and expose additional parameters in `ClientSession…
inaku-Gyan Nov 16, 2025
5489e8b
fix get_client_metadata_scopes on 401 (#1631)
abliznyuk Nov 16, 2025
9c8f763
chore: Lazy import `jsonschema` library (#1596)
wuliang229 Nov 19, 2025
fcffa14
docs: Update examples to use stateless HTTP with JSON responses (#1499)
domdomegg Nov 20, 2025
397089a
Add tests for JSON Schema 2020-12 field preservation (SEP-1613) (#1649)
felixweinberger Nov 20, 2025
c51936f
Add client_secret_basic authentication support (#1334)
jonshea Nov 20, 2025
71c4755
Implement SEP-1577 - Sampling With Tools (#1594)
ochafik Nov 23, 2025
b19fa6f
SEP-1330: Elicitation Enum Schema Improvements and Standards Complian…
chughtapan Nov 23, 2025
998f0ee
[auth][conformance] add conformance auth client (#1640)
pcarleton Nov 24, 2025
091afb8
Implement SEP-986: Tool name validation (#1655)
felixweinberger Nov 24, 2025
f2517fe
fix: url for spec (#1659)
felixweinberger Nov 24, 2025
f225013
feat: implement SEP-991 URL-based client ID (CIMD) support (#1652)
pcarleton Nov 24, 2025
27279bc
Update doc string on custom_route (#1660)
pcarleton Nov 24, 2025
02b7889
Implement SEP-1036: URL mode elicitation for secure out-of-band inter…
cbcoutinho Nov 25, 2025
5983a65
Skip empty SSE data to avoid parsing errors (#1670)
felixweinberger Nov 26, 2025
c92bb2f
SEP-1686: Tasks (#1645)
maxisbey Nov 28, 2025
2cd178a
Add on_session_created callback option (#1710)
crondinini-ant Dec 1, 2025
281fd47
Add SSE polling support (SEP-1699) (#1654)
felixweinberger Dec 2, 2025
f82b0c9
Support client_credentials flow with JWT and Basic auth (#1663)
pcarleton Dec 2, 2025
fa851d9
feat: backwards-compatible create_message overloads for SEP-1577 (#1713)
felixweinberger Dec 2, 2025
d3a1841
Merge commit from fork
pcarleton Dec 2, 2025
8e02fc1
chore: update LATEST_PROTOCOL_VERSION to 2025-11-25 (#1715)
felixweinberger Dec 2, 2025
72a3400
fix: add lifespan context manager to StreamableHTTP mounting examples…
TheMailmans Dec 3, 2025
9ed0b93
fix: handle ClosedResourceError in StreamableHTTP message router (#1384)
Edison-A-N Dec 4, 2025
89ff338
fix: skip priming events and close_sse_stream for old protocol versio…
felixweinberger Dec 4, 2025
8b984d9
refactor(auth): remove unused _register_client method (#1748)
maxisbey Dec 8, 2025
17c1201
[MCP-266] Add tests for Gumloop server extensions
dvlpjrs Dec 9, 2025
304d8fa
Fix uv workspace config for gumloop-mcp package name
dvlpjrs Dec 9, 2025
a5953cf
Merge branch 'main' of https://github.com/modelcontextprotocol/python…
dvlpjrs Dec 9, 2025
08db629
Sync with upstream MCP SDK and fix merge conflicts
dvlpjrs Dec 9, 2025
dd64b22
Fix tool cache timing and missing properties check in server.py
dvlpjrs Dec 9, 2025
bccd11c
Fix coverage and add proper type annotations for Gumloop extensions
dvlpjrs Dec 9, 2025
871ffce
Version up
dvlpjrs Dec 9, 2025
420f9d1
Skip README code example tests (Gumloop README has no code snippets)
dvlpjrs Dec 9, 2025
728c9c7
Merge remote-tracking branch 'origin/main' into jyoti-mcp-266
dvlpjrs Dec 9, 2025
dc7a85e
Support gumloop and mcp outptuschema
dvlpjrs Dec 9, 2025
84af889
Add publish tools to dev dependencies and update README for uv
dvlpjrs Dec 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
# Applied 120 line-length rule to all files: https://github.com/modelcontextprotocol/python-sdk/pull/856
543961968c0634e93d919d509cce23a1d6a56c21

# Added 100% code coverage baseline with pragma comments: https://github.com/modelcontextprotocol/python-sdk/pull/1553
89e9c43acf7e23cf766357d776ec1ce63ac2c58e
2 changes: 1 addition & 1 deletion .gitattribute
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# Generated
uv.lock linguist-generated=true
uv.lock linguist-generated=true
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@
# Auth-related examples
/examples/clients/simple-auth-client/ @modelcontextprotocol/python-sdk-auth
/examples/snippets/clients/oauth_client.py @modelcontextprotocol/python-sdk-auth
/examples/snippets/servers/oauth_server.py @modelcontextprotocol/python-sdk-auth
/examples/snippets/servers/oauth_server.py @modelcontextprotocol/python-sdk-auth
2 changes: 1 addition & 1 deletion .github/workflows/publish-docs-manually.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
version: 0.7.2
version: 0.9.5

- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
- uses: actions/cache@v4
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
version: 0.7.2
version: 0.9.5

- name: Set up Python 3.12
run: uv python install 3.12
Expand Down Expand Up @@ -68,7 +68,7 @@ jobs:
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
version: 0.7.2
version: 0.9.5

- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
- uses: actions/cache@v4
Expand Down
37 changes: 22 additions & 15 deletions .github/workflows/shared.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,56 +13,63 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: astral-sh/setup-uv@v5
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
version: 0.7.2

version: 0.9.5
- name: Install dependencies
run: uv sync --frozen --all-extras --python 3.10

- uses: pre-commit/[email protected].0
- uses: pre-commit/[email protected].1
with:
extra_args: --all-files --verbose
env:
SKIP: no-commit-to-branch

test:
name: test (${{ matrix.python-version }}, ${{ matrix.dep-resolution.name }}, ${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 10
continue-on-error: true
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
dep-resolution: ["lowest-direct", "highest"]
dep-resolution:
- name: lowest-direct
install-flags: "--upgrade --resolution lowest-direct"
- name: highest
install-flags: "--upgrade --resolution highest"
os: [ubuntu-latest, windows-latest]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- name: Install uv
uses: astral-sh/setup-uv@v3
uses: astral-sh/setup-uv@v7
with:
enable-cache: true
version: 0.7.2
version: 0.9.5

- name: Install the project
run: uv sync --frozen --all-extras --python ${{ matrix.python-version }} --resolution ${{ matrix.dep-resolution }}
run: uv sync ${{ matrix.dep-resolution.install-flags }} --all-extras --python ${{ matrix.python-version }}

- name: Run pytest
run: uv run --frozen --no-sync pytest
- name: Run pytest with coverage
run: |
uv run --frozen --no-sync coverage run -m pytest
uv run --frozen --no-sync coverage combine
uv run --frozen --no-sync coverage report

readme-snippets:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- uses: astral-sh/setup-uv@v5
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
version: 0.7.2
version: 0.9.5

- name: Install dependencies
run: uv sync --frozen --all-extras --python 3.10
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
.python-version

# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
Expand Down
5 changes: 5 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
fail_fast: true

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: end-of-file-fixer

- repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.1.0
hooks:
Expand Down
2 changes: 0 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@ This document contains critical information about working with this codebase. Fo
the problem it tries to solve, and how it is solved. Don't go into the specifics of the
code unless it adds clarity.

- Always add `jerome3o-anthropic` and `jspahrsummers` as reviewer.

- NEVER ever mention a `co-authored-by` or similar aspects. In particular, never
mention the tool used to create the commit message or PR.

Expand Down
16 changes: 10 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,32 @@ This fork was created because there were some changes and PRs that had functiona

The main src/ folder should be rebased from `main` of the official repository from time to time.

### Official Repository
## Official Repository

[Official Repository URL](https://github.com/modelcontextprotocol/python-sdk)

## Building and Deploying

### Building the Package

To build the package:

```bash
python -m build --verbose --no-isolation
uv build
```

This will create distribution packages in the `dist/` directory.

### Deploying to Artifact Registry

To deploy to Google Artifact Registry:
First, install the publish tools:

```bash
uv sync --group publish
```

Then upload to Artifact Registry:

```bash
python -m twine upload --repository-url https://us-west1-python.pkg.dev/agenthub-dev/gumloop/ dist/* --skip-existing
uv run twine upload --repository-url https://us-west1-python.pkg.dev/agenthub-dev/gumloop/ dist/gumloop_mcp-<VERSION>-py3-none-any.whl
```

You'll need appropriate authentication credentials configured for the Artifact Registry repository.
5 changes: 5 additions & 0 deletions docs/authorization.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Authorization

!!! warning "Under Construction"

This page is currently being written. Check back soon for complete documentation.
13 changes: 13 additions & 0 deletions docs/concepts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Concepts

!!! warning "Under Construction"

This page is currently being written. Check back soon for complete documentation.

<!--
- Server vs Client
- Three primitives (tools, resources, prompts)
- Transports (stdio, SSE, streamable HTTP)
- Context and sessions
- Lifecycle and state
-->
43 changes: 43 additions & 0 deletions docs/experimental/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Experimental Features

!!! warning "Experimental APIs"

The features in this section are experimental and may change without notice.
They track the evolving MCP specification and are not yet stable.

This section documents experimental features in the MCP Python SDK. These features
implement draft specifications that are still being refined.

## Available Experimental Features

### [Tasks](tasks.md)

Tasks enable asynchronous execution of MCP operations. Instead of waiting for a
long-running operation to complete, the server returns a task reference immediately.
Clients can then poll for status updates and retrieve results when ready.

Tasks are useful for:

- **Long-running computations** that would otherwise block
- **Batch operations** that process many items
- **Interactive workflows** that require user input (elicitation) or LLM assistance (sampling)

## Using Experimental APIs

Experimental features are accessed via the `.experimental` property:

```python
# Server-side
@server.experimental.get_task()
async def handle_get_task(request: GetTaskRequest) -> GetTaskResult:
...

# Client-side
result = await session.experimental.call_tool_as_task("tool_name", {"arg": "value"})
```

## Providing Feedback

Since these features are experimental, feedback is especially valuable. If you encounter
issues or have suggestions, please open an issue on the
[python-sdk repository](https://github.com/modelcontextprotocol/python-sdk/issues).
Loading