diff options
Diffstat (limited to 'scripts/Run-McpConformance.ps1')
| -rw-r--r-- | scripts/Run-McpConformance.ps1 | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/scripts/Run-McpConformance.ps1 b/scripts/Run-McpConformance.ps1 new file mode 100644 index 0000000..d43095c --- /dev/null +++ b/scripts/Run-McpConformance.ps1 @@ -0,0 +1,27 @@ +[CmdletBinding()] +param( + [Parameter(Mandatory)] [uri]$Url, + [string[]]$Scenario = @("server-stateless", "tools-list", "json-schema-2020-12", "server-sse-multiple-streams", "dns-rebinding-protection", "caching", "http-header-validation"), + [string]$EvidenceDirectory = "artifacts/evidence/mcp-2026-07-28/conformance-production" +) + +$ErrorActionPreference = "Stop" +if (-not $Url.IsLoopback) { throw "Conformance target must be loopback." } +$repository = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path +$runnerDirectory = Join-Path $repository "build/conformance-runner" +$packageJson = Join-Path $runnerDirectory "node_modules/@modelcontextprotocol/conformance/package.json" +if (-not (Test-Path -LiteralPath $packageJson)) { throw "Offline runner is absent. Run scripts/Acquire-McpConformance.ps1 first." } +$metadata = Get-Content -Raw -LiteralPath $packageJson | ConvertFrom-Json +if ($metadata.version -ne "0.2.0-alpha.11") { throw "Unexpected conformance version: $($metadata.version)" } +$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 +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++ } +} +if ($failures -ne 0) { throw "$failures conformance scenario(s) failed; no expected-failure baseline is permitted." } |
