- Final reporting-hardening patch after authenticated Apify MCP cloud validation.
- A successful run with a supplied bearer credential no longer reports
authorization.required=false; it records credentialSupplied=true and leaves required=null unless an actual 401/403 challenge proves protection.
- Adds a non-scoring informational finding explaining that a credentialed-only run cannot prove whether the same operation is public without credentials.
- Narrows generic credential redaction to concrete
Authorization: Bearer ... header values plus exact supplied secrets/JWTs/credential assignments, so safe protocol prose such as Bearer WWW-Authenticate challenge is no longer cosmetically mangled.
- Downgrades absence of the RFC 9207 authorization-response issuer advertisement from medium to low warning because MCP 2026-07-28 describes the authorization-server
iss response behavior as SHOULD-level hardening, not a mandatory server-conformance failure.
- Keeps the two live findings observed on
mcp.apify.com as high failures: missing MCP-Protocol-Version accepted and unrelated Origin accepted. Both are backed by current MCP Streamable HTTP MUST requirements.
- Authenticated Apify MCP validation returned 11 tools and 5 resource templates, with zero MCP tool calls and no bearer credential present in the supplied run log, dataset JSON, or OUTPUT summary.
- Automated suite remains 37/37, including 500 complete audits with zero
tools/call invocations.
- Corrects authorization-aware list handling discovered during the first live Apify MCP cloud audit.
- HTTP 401/403 responses from
tools/list, resources/list, resources/templates/list, and prompts/list are now classified as authorization-blocked/inconclusive rather than malformed JSON-RPC responses.
- Detects operation-specific authorization when
server/discover is public but capability-list methods are protected.
- Runs the invalid-bearer-token safety probe against the method that actually returned the authorization challenge, preventing false positives on intentionally public
server/discover.
- Adds a regression fixture for public discovery + protected capability lists.
- Automated suite now passes 37/37, including 500 complete audits with zero
tools/call invocations.
Publication-schema correction against Apify's current input.schema.json.
- Keeps the required
description on servers.items.properties.url.
- Removes the forbidden
description from the intermediate servers.items object; Apify permits descriptions on child sub-properties, not on the array item wrapper.
- Removes
maxLength from the isSecret: true bearer-token input because Apify's secret-string schema does not permit string-length validators there; the same 8,192-character limit remains enforced in runtime code before any network activity.
- Adds package-check regression gates for both Apify-specific schema rules.
- No MCP probing, security, transport, or monetization behavior changed from 0.2.0.
Security-hardening publication candidate.
- Adds output-wide exact-secret, Bearer, JWT, common credential-assignment, and control-character redaction.
- Adds bounded untrusted-output structures and null-prototype output objects to neutralize prototype-pollution keys.
- Validates Bearer-token syntax and rejects unsafe whitespace/control characters.
- Forbids authorization/cookie credentials over plaintext HTTP in production.
- Blocks HTTPS downgrade redirects and cross-origin redirects by default; credential headers are stripped if cross-origin redirects are explicitly enabled by an internal caller.
- Expands SSRF/abuse defenses with credential-like query rejection, URL/hostname caps, sensitive infrastructure-port blocking, header limits, and socket-time DNS revalidation.
- Adds absolute wall-clock request deadlines to stop slow-drip responses.
- Adds pagination cursor size/loop defenses.
- Corrects MCP-required OAuth/OIDC discovery for path-bearing issuers by trying RFC 8414 path insertion, OIDC path insertion, then OIDC path appending.
- Redacts credentials, sensitive query values, and fragments from resource/resource-template URIs before persistence.
- Deepens OAuth checks: RFC 9728 resource matching, RFC 8414/OIDC discovery, exact issuer consistency, endpoint URL safety, PKCE S256, authorization-code/implicit-flow indicators, RFC 9207 signal, and scope hygiene.
- Corrects authorization metadata status so discovered metadata with security-critical defects is not marked valid.
- Adds TLS/certificate observations, legacy
Mcp-Session-Id detection, cookie/server disclosure observations, and Content-Type validation.
- Adds MCP tool risk-hint summaries using conservative defaults plus contradictory-annotation detection.
- Expands automated suite to 36 tests, including 500 full endpoint audits with zero tool calls.
- Adds one high-entropy per-audit invalid-token
server/discover probe plus passive 403 insufficient_scope challenge validation, without OAuth login or tool execution.
- Adds MCP 2026 Client ID Metadata Document (CIMD) readiness reporting, DCR-deprecation guidance, and deprecated IPv6 site-local (
fec0::/10) blocking.
- Adds deployment security gate: required SHA-256 verification, pre-dependency source checks, lockfile generation from the official npm registry and verifies every locked package resolves there with an integrity hash, HIGH/CRITICAL
npm audit before install, npm ci --ignore-scripts, npm registry signature/available provenance verification, full rebuild/tests/package checks, Apify CLI 1.6+ all-schema validation, and then apify push --open.
- Docker cloud builds require
package-lock.json, use npm ci --ignore-scripts, compile from source, and prune dev dependencies with lifecycle scripts disabled.
- Adds
.actorignore to exclude local tests, research, and deployment-only material from production Actor uploads.
- Initial publication candidate targeting final MCP
2026-07-28.
- Validates final
HeaderMismatch -32020, resultType, modern response metadata, cache hints, routing headers, OAuth protected-resource discovery, Origin behavior, capability schemas, and legacy 2025 migration state.
- Never invokes MCP tools.
- Corrected Apify schemaBased array metadata for current CLI validation.
- Removed the Docker build dependency on a locally generated package-lock.json.
- Docker builder/runtime now install the exact direct versions pinned in package.json with dependency lifecycle scripts disabled.
- Deployment ZIP is self-contained: no pre-push npm generation or manual source patch is required.