Skip to content

Commit 5c22fca

Browse files
authored
Merge branch 'main' into feat/docstring-param-descriptions
2 parents b08b173 + a3689ab commit 5c22fca

3 files changed

Lines changed: 95 additions & 10 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# Conformance scenarios not yet passing against the Python SDK on main.
2+
# CI exits 0 if only these fail, exits 1 on unexpected failures or stale entries.
3+
#
4+
# Baseline established against @modelcontextprotocol/conformance pinned in
5+
# .github/workflows/conformance.yml (CONFORMANCE_VERSION = 0.2.0-alpha.3).
6+
# New conformance releases are adopted by deliberately bumping that pin and
7+
# reconciling this file in the same change.
8+
#
9+
# Entries are grouped by SEP. As each SEP lands in the SDK the corresponding
10+
# scenarios start passing and MUST be removed from this list (the runner fails
11+
# on stale entries), so the baseline burns down per milestone.
12+
13+
client:
14+
# --- Draft-spec scenarios (in `--suite draft`, also part of `--suite all`) ---
15+
# SEP-2575 (request metadata / _meta envelope): client does not populate the
16+
# _meta envelope or the MCP-Protocol-Version header semantics yet.
17+
- request-metadata
18+
# SEP-2322 (multi-round-trip requests): client does not echo requestState /
19+
# handle IncompleteResult yet.
20+
- sep-2322-client-request-state
21+
# SEP-2243 (HTTP standardization): no fixture handler / client header support yet.
22+
- http-custom-headers
23+
- http-invalid-tool-headers
24+
# SEP-2106 (JSON Schema $ref handling): client still dereferences network $refs.
25+
- json-schema-ref-no-deref
26+
# SEP-2468 (authorization response iss parameter): not implemented in the client.
27+
- auth/iss-supported
28+
- auth/iss-not-advertised
29+
- auth/iss-supported-missing
30+
- auth/iss-wrong-issuer
31+
- auth/iss-unexpected
32+
- auth/iss-normalized
33+
- auth/metadata-issuer-mismatch
34+
# SEP-2352 (authorization server migration): client does not re-register when
35+
# PRM authorization_servers changes.
36+
- auth/authorization-server-migration
37+
# SEP-837 (application_type during DCR): the check only fires on draft-version
38+
# runs; this draft scenario is the one place the client still hits it.
39+
- auth/offline-access-not-supported
40+
41+
# --- Pre-existing scenarios that fail on checks added after conformance 0.1.15 ---
42+
# SEP-2350 (scope step-up): WARNING-only; the expected-failures evaluator
43+
# counts WARNINGs as failures.
44+
- auth/scope-step-up
45+
# SEP-990 (enterprise-managed authorization extension): no fixture handler /
46+
# client support for the token-exchange + JWT bearer flow.
47+
- auth/enterprise-managed-authorization
48+
49+
# The `active` suite (30 scenarios / 42 assertions) is fully green against
50+
# mcp-everything-server. Draft-suite entries are added when the workflow
51+
# gains a `--suite draft` step.
52+
server: []

.github/actions/conformance/run-server.sh

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,36 @@ SERVER_URL="http://localhost:${PORT}/mcp"
77
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
88
cd "$SCRIPT_DIR/../../.."
99

10-
# Start everything-server
10+
# Refuse to start if something is already listening on the port. The readiness
11+
# check below cannot tell our server apart from a stale one, so a leftover
12+
# listener would mean silently running conformance against old code.
13+
if (: > "/dev/tcp/localhost/${PORT}") 2>/dev/null; then
14+
echo "Error: port ${PORT} is already in use." >&2
15+
echo "Stop the stale process first (lsof -ti:${PORT} -sTCP:LISTEN | xargs kill) or set PORT to a free port." >&2
16+
exit 1
17+
fi
18+
19+
echo "Starting mcp-everything-server on port ${PORT}..."
1120
uv run --frozen mcp-everything-server --port "$PORT" &
1221
SERVER_PID=$!
13-
trap "kill $SERVER_PID 2>/dev/null || true; wait $SERVER_PID 2>/dev/null || true" EXIT
1422

15-
# Wait for server to be ready
23+
cleanup() {
24+
echo "Stopping server (PID: ${SERVER_PID})..."
25+
kill $SERVER_PID 2>/dev/null || true
26+
wait $SERVER_PID 2>/dev/null || true
27+
}
28+
trap cleanup EXIT
29+
30+
# Wait for server to be ready. --max-time keeps a hung listener from wedging
31+
# the loop, and a dead server process fails fast instead of retrying.
32+
echo "Waiting for server to be ready..."
1633
MAX_RETRIES=30
1734
RETRY_COUNT=0
18-
while ! curl -s "$SERVER_URL" > /dev/null 2>&1; do
35+
while ! curl -s --max-time 2 "$SERVER_URL" > /dev/null 2>&1; do
36+
if ! kill -0 $SERVER_PID 2>/dev/null; then
37+
echo "Server process exited unexpectedly" >&2
38+
exit 1
39+
fi
1940
RETRY_COUNT=$((RETRY_COUNT + 1))
2041
if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
2142
echo "Server failed to start after ${MAX_RETRIES} retries" >&2
@@ -26,5 +47,5 @@ done
2647

2748
echo "Server ready at $SERVER_URL"
2849

29-
# Run conformance tests
30-
npx @modelcontextprotocol/conformance@0.1.10 server --url "$SERVER_URL" "$@"
50+
npx --yes @modelcontextprotocol/conformance@"${CONFORMANCE_VERSION:?set CONFORMANCE_VERSION (pinned in .github/workflows/conformance.yml)}" \
51+
server --url "$SERVER_URL" "$@"

.github/workflows/conformance.yml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ concurrency:
1313
permissions:
1414
contents: read
1515

16+
env:
17+
# Pinned conformance harness version. Bump deliberately and reconcile
18+
# .github/actions/conformance/expected-failures.yml in the same change.
19+
CONFORMANCE_VERSION: "0.2.0-alpha.3"
20+
1621
jobs:
1722
server-conformance:
1823
runs-on: ubuntu-latest
19-
continue-on-error: true
2024
steps:
2125
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
2226
with:
@@ -29,11 +33,14 @@ jobs:
2933
with:
3034
node-version: 24
3135
- run: uv sync --frozen --all-extras --package mcp-everything-server
32-
- run: ./.github/actions/conformance/run-server.sh
36+
- name: Run server conformance (active suite)
37+
run: >-
38+
./.github/actions/conformance/run-server.sh
39+
--suite active
40+
--expected-failures ./.github/actions/conformance/expected-failures.yml
3341
3442
client-conformance:
3543
runs-on: ubuntu-latest
36-
continue-on-error: true
3744
steps:
3845
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
3946
with:
@@ -46,4 +53,9 @@ jobs:
4653
with:
4754
node-version: 24
4855
- run: uv sync --frozen --all-extras --package mcp
49-
- run: npx @modelcontextprotocol/conformance@0.1.13 client --command 'uv run --frozen python .github/actions/conformance/client.py' --suite all
56+
- name: Run client conformance (all suite)
57+
run: >-
58+
npx --yes @modelcontextprotocol/conformance@"$CONFORMANCE_VERSION" client
59+
--command 'uv run --frozen python .github/actions/conformance/client.py'
60+
--suite all
61+
--expected-failures ./.github/actions/conformance/expected-failures.yml

0 commit comments

Comments
 (0)