Skip to content

Commit 3b4e00d

Browse files
committed
merge main and scope EOF drain to stdio
2 parents 49ced5b + 0da9092 commit 3b4e00d

115 files changed

Lines changed: 14597 additions & 590 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.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: v2 feedback
2+
description: Bugs, API friction, or docs gaps in v2 of the SDK
3+
title: "[v2] "
4+
labels: ["v2-alpha"]
5+
6+
body:
7+
- type: markdown
8+
attributes:
9+
value: |
10+
Thanks for trying v2. Anything that broke, surprised you, or slowed you down is useful — API feedback is explicitly welcome while v2 is in pre-release.
11+
12+
Docs: https://py.sdk.modelcontextprotocol.io/v2/ · Migration from v1: https://py.sdk.modelcontextprotocol.io/v2/migration/
13+
14+
- type: textarea
15+
id: what
16+
attributes:
17+
label: What happened?
18+
description: What did you do, and what went wrong (or felt wrong)? Paste error output verbatim if there is any.
19+
validations:
20+
required: true
21+
22+
- type: textarea
23+
id: expected
24+
attributes:
25+
label: What did you expect?
26+
validations:
27+
required: false
28+
29+
- type: textarea
30+
id: repro
31+
attributes:
32+
label: Code to reproduce
33+
description: The smallest snippet or repository that shows it. For docs feedback, link the page instead.
34+
render: Python
35+
validations:
36+
required: false
37+
38+
- type: input
39+
id: version
40+
attributes:
41+
label: SDK version
42+
description: The published version (`pip show mcp`) or commit.
43+
validations:
44+
required: false
45+
46+
- type: dropdown
47+
id: area
48+
attributes:
49+
label: Area
50+
options:
51+
- Server
52+
- Client
53+
- Transports
54+
- Auth
55+
- Documentation
56+
- Migration
57+
- Other
58+
validations:
59+
required: false

.github/actions/conformance/expected-failures.yml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,23 @@
1212

1313
client: []
1414

15-
server: []
15+
server:
16+
# SEP-2663 (io.modelcontextprotocol/tasks): the SDK does not implement the
17+
# tasks extension yet. These extension-tagged scenarios are selected only by
18+
# the bare `--suite all` leg — extension scenarios never match a
19+
# --spec-version filter and the active/draft suites exclude them — so these
20+
# entries are inert for the other legs that read this file.
21+
#
22+
# `tasks-status-notifications` is intentionally NOT listed: the harness
23+
# skips it unconditionally (pending its rewrite against subscriptions/
24+
# listen), and a baseline entry for a scenario with no failing checks is
25+
# flagged stale.
26+
- tasks-lifecycle
27+
- tasks-capability-negotiation
28+
- tasks-wire-fields
29+
- tasks-request-state-removal
30+
- tasks-mrtr-input
31+
- tasks-request-headers
32+
- tasks-dispatch-and-envelope
33+
- tasks-required-task-error
34+
- tasks-mrtr-composition

.github/workflows/conformance.yml

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ env:
1919
# Bump deliberately and reconcile both
2020
# .github/actions/conformance/expected-failures*.yml files in the same change.
2121
#
22-
# Temporarily pinned to the pkg.pr.new build of conformance main@b18aa918
23-
# (the merge of #371, which fixes the http-custom-headers fixture's
24-
# spec-forbidden `number`-typed x-mcp-header annotations) — no published
25-
# release includes it yet. Pinned by commit SHA so the tarball cannot move
26-
# under us; CONFORMANCE_PKG_SHA256 pins the bytes and the fetch-and-verify
27-
# step below downloads, checks the digest, and repoints CONFORMANCE_PKG at the
22+
# Temporarily pinned to the pkg.pr.new build of conformance main@4944b268
23+
# (0.2.0-alpha.8, which includes #372: fail checks whose prerequisite is
24+
# missing instead of skipping them) — alpha.8 is not published to npm yet.
25+
# Pinned by commit SHA so the tarball cannot move under us;
26+
# CONFORMANCE_PKG_SHA256 pins the bytes and the fetch-and-verify step below
27+
# downloads, checks the digest, and repoints CONFORMANCE_PKG at the
2828
# verified local copy. Repin to the next published @modelcontextprotocol/
29-
# conformance release (>0.2.0-alpha.7) once it ships, then drop
29+
# conformance release (>=0.2.0-alpha.8) once it ships, then drop
3030
# CONFORMANCE_PKG_SHA256 and the fetch-and-verify steps.
31-
CONFORMANCE_PKG: "https://pkg.pr.new/@modelcontextprotocol/conformance@b18aa918"
32-
CONFORMANCE_PKG_SHA256: "e9f6bc25085b4692e988cbdbd024a4203d54a52a6aaa065376cf8ecaa09bb680"
31+
CONFORMANCE_PKG: "https://pkg.pr.new/@modelcontextprotocol/conformance@4944b268"
32+
CONFORMANCE_PKG_SHA256: "0f70c035782d319d72ab427653c5275db5c50429d59fae0241a645b33aeda1a7"
3333

3434
jobs:
3535
server-conformance:
@@ -75,6 +75,22 @@ jobs:
7575
--suite all
7676
--spec-version 2026-07-28
7777
--expected-failures ./.github/actions/conformance/expected-failures.2026-07-28.yml
78+
- name: Run server conformance (all suite, extension scenarios)
79+
# A bare `--suite all` (no --spec-version) selects every scenario
80+
# shipped with the pinned harness — including the extension-tagged
81+
# tasks-* scenarios and pending-listed ones like server-sse-polling,
82+
# which no other leg reaches (extension scenarios never match a
83+
# --spec-version filter, and the pending list keeps them out of the
84+
# active suite). Running the full set keeps unimplemented surfaces
85+
# visible as baselined known failures in expected-failures.yml instead
86+
# of silent exclusions, and stays robust to scenarios moving between
87+
# harness suite lists across pin bumps. `--suite pending` would cover
88+
# the same union slightly faster; the full set is preferred for the
89+
# self-contained run and for parity with typescript-sdk's CI.
90+
run: >-
91+
./.github/actions/conformance/run-server.sh
92+
--suite all
93+
--expected-failures ./.github/actions/conformance/expected-failures.yml
7894
7995
client-conformance:
8096
runs-on: ubuntu-latest
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Docs Preview Cleanup
2+
3+
# Deletes Cloudflare Pages preview deployments for a PR when it closes.
4+
# Runs as pull_request_target so secrets are available for fork PRs; it never
5+
# checks out PR code, so there is no untrusted-code execution risk.
6+
7+
on:
8+
pull_request_target: # zizmor: ignore[dangerous-triggers] never checks out PR code
9+
types: [closed]
10+
11+
permissions: {}
12+
13+
jobs:
14+
cleanup:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Delete preview deployments for this PR
18+
env:
19+
CF_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
20+
CF_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
21+
CF_PROJECT: ${{ vars.CLOUDFLARE_PAGES_PROJECT }}
22+
BRANCH: pr-${{ github.event.pull_request.number }}
23+
run: |
24+
set -euo pipefail
25+
if [ -z "$CF_API_TOKEN" ] || [ -z "$CF_ACCOUNT_ID" ] || [ -z "$CF_PROJECT" ]; then
26+
echo "Cloudflare credentials/project not configured; skipping cleanup."
27+
exit 0
28+
fi
29+
base="https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/pages/projects/$CF_PROJECT/deployments"
30+
# Collect matching ids across all pages first, then delete — deleting
31+
# mid-pagination would shift later pages and skip entries.
32+
ids=""
33+
for page in $(seq 1 200); do
34+
resp=$(curl -fsS -H "Authorization: Bearer $CF_API_TOKEN" "$base?env=preview&per_page=25&page=$page")
35+
ids="$ids $(jq -r --arg b "$BRANCH" '.result[]? | select(.deployment_trigger.metadata.branch == $b) | .id' <<<"$resp")"
36+
[ "$(jq '.result | length' <<<"$resp")" -lt 25 ] && break
37+
done
38+
deleted=0
39+
for id in $ids; do
40+
echo "Deleting deployment $id"
41+
curl -fsS -X DELETE -H "Authorization: Bearer $CF_API_TOKEN" "$base/$id?force=true" > /dev/null
42+
deleted=$((deleted + 1))
43+
done
44+
echo "Deleted $deleted deployment(s) for $BRANCH."

0 commit comments

Comments
 (0)