Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
15 changes: 11 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ import {
listActiveClientScenarios,
listPendingClientScenarios,
listAuthScenarios,
listMetadataScenarios
listMetadataScenarios,
listCoreScenarios,
listExtensionScenarios
} from './scenarios';
import { ConformanceCheck } from './types';
import { ClientOptionsSchema, ServerOptionsSchema } from './schemas';
Expand Down Expand Up @@ -65,6 +67,8 @@ program

const suites: Record<string, () => string[]> = {
all: listScenarios,
core: listCoreScenarios,
extensions: listExtensionScenarios,
auth: listAuthScenarios,
metadata: listMetadataScenarios,
'sep-835': () =>
Expand Down Expand Up @@ -177,7 +181,9 @@ program
console.error('Either --scenario or --suite is required');
console.error('\nAvailable client scenarios:');
listScenarios().forEach((s) => console.error(` - ${s}`));
console.error('\nAvailable suites: all, auth, metadata, sep-835');
console.error(
'\nAvailable suites: all, core, extensions, auth, metadata, sep-835'
);
process.exit(1);
}

Expand Down Expand Up @@ -296,13 +302,14 @@ program

if (suite === 'all') {
scenarios = listClientScenarios();
} else if (suite === 'active') {
} else if (suite === 'active' || suite === 'core') {
// 'core' is an alias for 'active' - tier 1 requirements
scenarios = listActiveClientScenarios();
} else if (suite === 'pending') {
scenarios = listPendingClientScenarios();
} else {
console.error(`Unknown suite: ${suite}`);
console.error('Available suites: active, all, pending');
console.error('Available suites: active, all, core, pending');
process.exit(1);
}

Expand Down
7 changes: 6 additions & 1 deletion src/scenarios/client/auth/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
ClientCredentialsBasicScenario
} from './client-credentials';

// Auth scenarios (required for tier 1)
export const authScenariosList: Scenario[] = [
...metadataScenarios,
new AuthBasicCIMDScenario(),
Expand All @@ -34,7 +35,11 @@ export const authScenariosList: Scenario[] = [
new ScopeRetryLimitScenario(),
new ClientSecretBasicAuthScenario(),
new ClientSecretPostAuthScenario(),
new PublicClientAuthScenario(),
new PublicClientAuthScenario()
];

// Extension scenarios (optional for tier 1 - protocol extensions)
export const extensionScenariosList: Scenario[] = [
new ClientCredentialsJwtScenario(),
new ClientCredentialsBasicScenario()
];
30 changes: 20 additions & 10 deletions src/scenarios/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,24 +53,16 @@ import {

import { DNSRebindingProtectionScenario } from './server/dns-rebinding';

import { authScenariosList } from './client/auth/index';
import { authScenariosList, extensionScenariosList } from './client/auth/index';
import { listMetadataScenarios } from './client/auth/discovery-metadata';

// Pending client scenarios (not yet fully tested/implemented)
const pendingClientScenariosList: ClientScenario[] = [
// Elicitation scenarios (SEP-1330)
new ElicitationEnumsScenario(),

// JSON Schema 2020-12 (SEP-1613)
// This test is pending until the SDK includes PR #1135 which preserves
// $schema, $defs, and additionalProperties fields in tool schemas.
new JsonSchema2020_12Scenario(),

// On hold until elicitation schema types are fixed
// https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1863
new ToolsCallElicitationScenario(),
new ElicitationDefaultsScenario(),

// On hold until server-side SSE improvements are made
// https://github.com/modelcontextprotocol/typescript-sdk/pull/1129
new ServerSSEPollingScenario()
Expand Down Expand Up @@ -145,8 +137,18 @@ export const clientScenarios = new Map<string, ClientScenario>(
allClientScenariosList.map((scenario) => [scenario.name, scenario])
);

// Scenario scenarios
// All client test scenarios (core + extensions)
const scenariosList: Scenario[] = [
new InitializeScenario(),
new ToolsCallScenario(),
new ElicitationClientDefaultsScenario(),
new SSERetryScenario(),
...authScenariosList,
...extensionScenariosList
];

// Core scenarios (tier 1 requirements)
const coreScenariosList: Scenario[] = [
new InitializeScenario(),
new ToolsCallScenario(),
new ElicitationClientDefaultsScenario(),
Expand Down Expand Up @@ -191,4 +193,12 @@ export function listAuthScenarios(): string[] {
return authScenariosList.map((scenario) => scenario.name);
}

export function listCoreScenarios(): string[] {
return coreScenariosList.map((scenario) => scenario.name);
}

export function listExtensionScenarios(): string[] {
return extensionScenariosList.map((scenario) => scenario.name);
}

export { listMetadataScenarios };
Loading