Split draft-spec scenarios into their own suite (#317)

* feat: split draft-spec scenarios into their own suite

- add --suite draft to the server command, selecting scenarios whose
  source.introducedIn is the draft protocol version
- exclude draft scenarios from the default active suite until the draft
  spec is published as a dated release
- derive the client command's draft suite from source.introducedIn so the
  non-auth draft scenarios (SEP-2243/2575/2322/2106) are included alongside
  the auth ones
- keep everything-server self-test coverage for draft scenarios in
  all-scenarios.test.ts (active + non-pending draft)
- document available suites in the README and add suite-membership tests

* fix: repair broken specReferences URLs

- SEP-986: SEP/SEP-986.md no longer exists in the spec repo; point at the
  Tool Names section of the published 2025-11-25 tools page instead
- SEP-990: the ext-auth spec file is enterprise-managed-authorization.mdx,
  not enterprise-oauth.mdx

Fixes #313
This commit is contained in:
Paul Carleton 2026-05-26 18:00:44 +01:00 • committed by GitHub
commit e2e65e5595
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 117 additions and 14 deletions

View file

@ -1,6 +1,11 @@
import { spawn, ChildProcess } from 'child_process';
import { createServer } from 'net';
import { getClientScenario, listActiveClientScenarios } from '../index';
import {
getClientScenario,
listActiveClientScenarios,
listDraftClientScenarios,
listPendingClientScenarios
} from '../index';
import path from 'path';
function getFreePort(): Promise<number> {
@ -116,8 +121,14 @@ describe('Server Scenarios', () => {
}
});
// Generate individual test for each scenario
const scenarios = listActiveClientScenarios();
// Generate individual test for each scenario: the active suite plus the
// draft-spec scenarios that aren't parked in `pending` — the same set this
// file covered before draft scenarios were split out of `active`.
const pendingScenarios = new Set(listPendingClientScenarios());
const scenarios = [
...listActiveClientScenarios(),
...listDraftClientScenarios().filter((name) => !pendingScenarios.has(name))
];
for (const scenarioName of scenarios) {
it(`${scenarioName}`, async () => {

View file

@ -21,7 +21,7 @@ const TOOLS_NAME_FORMAT_SPEC_REFS = [
},
{
id: 'SEP-986',
url: 'https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/SEP/SEP-986.md'
url: 'https://modelcontextprotocol.io/specification/2025-11-25/server/tools#tool-names'
}
];