* feat: add specVersions classification to conformance scenarios
Each scenario declares which spec versions it applies to as a list.
Scenarios that carry forward (e.g. initialize) list all applicable versions
['2025-06-18', '2025-11-25']. Scenarios removed from newer specs (e.g.
backcompat auth) only list their original version ['2025-03-26'].
- specVersions list on Scenario and ClientScenario interfaces
- --spec-version CLI filter uses simple .includes()
- Tier-check conformance matrix (Server / Client: Core / Client: Auth)
with per-version columns and unique All* count
- 7 unit tests for specVersions helpers
- Updated tier-audit skill docs with matrix format
* fix: fix console output template for tier audit skill
The template had an orphan table header (Check | Value | T2 | T1)
with no rows above the conformance matrix, causing an empty table
to render. The scorecard rows below the matrix also lacked their
own header.
Fix: two self-contained tables with clear labels — 'Conformance:'
for the per-version matrix, 'Scorecard:' for the check rows.
* fix: align skill console template with tier-check script output
Add asterisk footnote ('unique scenarios — a scenario may apply to
multiple spec versions') and rename 'Scorecard' to 'Repository Health'
to match the labels used by the tier-check CLI output.
* fix: add specVersions to CrossAppAccessCompleteFlowScenario
Added in 83c446d on main after this branch diverged.
72 lines
2.2 KiB
TypeScript
72 lines
2.2 KiB
TypeScript
/**
|
|
* Lifecycle test scenarios for MCP servers
|
|
*/
|
|
|
|
import { ClientScenario, ConformanceCheck, SpecVersion } from '../../types';
|
|
import { connectToServer } from './client-helper';
|
|
|
|
export class ServerInitializeScenario implements ClientScenario {
|
|
name = 'server-initialize';
|
|
specVersions: SpecVersion[] = ['2025-06-18', '2025-11-25'];
|
|
description = `Test basic server initialization handshake.
|
|
|
|
**Server Implementation Requirements:**
|
|
|
|
**Endpoint**: \`initialize\`
|
|
|
|
**Requirements**:
|
|
- Accept \`initialize\` request with client info and capabilities
|
|
- Return valid initialize response with server info, protocol version, and capabilities
|
|
- Accept \`initialized\` notification from client after handshake
|
|
|
|
This test verifies the server can complete the two-phase initialization handshake successfully.`;
|
|
|
|
async run(serverUrl: string): Promise<ConformanceCheck[]> {
|
|
const checks: ConformanceCheck[] = [];
|
|
|
|
try {
|
|
const connection = await connectToServer(serverUrl);
|
|
|
|
// The connection process already does initialization
|
|
// Check that we have a connected client
|
|
checks.push({
|
|
id: 'server-initialize',
|
|
name: 'ServerInitialize',
|
|
description:
|
|
'Server responds to initialize request with valid structure',
|
|
status: 'SUCCESS',
|
|
timestamp: new Date().toISOString(),
|
|
specReferences: [
|
|
{
|
|
id: 'MCP-Initialize',
|
|
url: 'https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle#initialization'
|
|
}
|
|
],
|
|
details: {
|
|
serverUrl,
|
|
connected: true
|
|
}
|
|
});
|
|
|
|
await connection.close();
|
|
} catch (error) {
|
|
checks.push({
|
|
id: 'server-initialize',
|
|
name: 'ServerInitialize',
|
|
description:
|
|
'Server responds to initialize request with valid structure',
|
|
status: 'FAILURE',
|
|
timestamp: new Date().toISOString(),
|
|
errorMessage: `Failed to initialize: ${error instanceof Error ? error.message : String(error)}`,
|
|
specReferences: [
|
|
{
|
|
id: 'MCP-Initialize',
|
|
url: 'https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle#initialization'
|
|
}
|
|
]
|
|
});
|
|
}
|
|
|
|
return checks;
|
|
}
|
|
}
|