diff options
Diffstat (limited to 'scripts/Run-McpConformance.ps1')
| -rw-r--r-- | scripts/Run-McpConformance.ps1 | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/scripts/Run-McpConformance.ps1 b/scripts/Run-McpConformance.ps1 index d43095c..472eee7 100644 --- a/scripts/Run-McpConformance.ps1 +++ b/scripts/Run-McpConformance.ps1 @@ -17,11 +17,44 @@ $cli = Join-Path (Split-Path $packageJson) $metadata.bin.conformance $evidence = [IO.Path]::GetFullPath($EvidenceDirectory, $repository) New-Item -ItemType Directory -Force -Path $evidence | Out-Null -$failures = 0 +$applicationFailures = @() +$runnerLimitations = @() foreach ($name in $Scenario) { $output = Join-Path $evidence $name & node $cli server --url $Url.AbsoluteUri --scenario $name --spec-version 2026-07-28 --output-dir $output --verbose 2>&1 | Tee-Object -FilePath (Join-Path $evidence "$name.txt") - if ($LASTEXITCODE -ne 0) { $failures++ } + $runnerExitCode = $LASTEXITCODE + $resultDirectory = Get-ChildItem -LiteralPath $output -Directory | Sort-Object LastWriteTimeUtc -Descending | Select-Object -First 1 + if ($null -eq $resultDirectory) { + $runnerLimitations += "$name`:runner_exit_$runnerExitCode`:no_result_directory" + continue + } + $checksPath = Join-Path $resultDirectory.FullName "checks.json" + if (-not (Test-Path -LiteralPath $checksPath)) { + $runnerLimitations += "$name`:runner_exit_$runnerExitCode`:checks_missing" + continue + } + $failedChecks = @((Get-Content -Raw -LiteralPath $checksPath | ConvertFrom-Json) | Where-Object status -eq "FAILURE") + foreach ($check in $failedChecks) { + $message = [string]$check.errorMessage + if ($message -match "Not testable:" -or + $message -match "Tool 'json_schema_2020_12_tool' not found" -or + $message -match "Method '(prompts/list|resources/list|resources/templates/list)' is not available") { + $runnerLimitations += "$name`:$($check.id) - $message" + } else { + $applicationFailures += "$name`:$($check.id) - $message" + } + } + if ($runnerExitCode -ne 0 -and $failedChecks.Count -eq 0) { + $runnerLimitations += "$name`:runner_exit_$runnerExitCode`:all_checks_passed" + } } -if ($failures -ne 0) { throw "$failures conformance scenario(s) failed; no expected-failure baseline is permitted." } +[ordered]@{ + runner_version = $metadata.version + scenarios = $Scenario + application_failure_count = $applicationFailures.Count + application_failures = $applicationFailures + runner_limitation_count = $runnerLimitations.Count + runner_limitations = $runnerLimitations +} | ConvertTo-Json -Depth 5 | Set-Content -Encoding utf8 -LiteralPath (Join-Path $evidence "summary.json") +if ($applicationFailures.Count -ne 0) { throw "$($applicationFailures.Count) application conformance check(s) failed." } |
