{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "name": "Michael Kappel Enterprise AI MCP Deployment Verification Manifest",
  "version": "3.126.0",
  "generatedUtc": "2026-06-19T01:55:00Z",
  "status": "package-validated-live-runtime-not-proven",
  "deploymentBoundary": "v3.126.0 remediates production QA findings from the live v3.125.0 audit. Deploy the WordPress theme ZIP through WordPress and extract the separate root-files ZIP into the site web root to publish static discovery files, HTTPS rewrite support, sitemap mirrors, and MCP deployment metadata.",
  "expectedRuntime": {
    "canonicalMcpEndpoint": "https://mikekappel.com/mcp",
    "restMcpFallback": "https://mikekappel.com/wp-json/mk/v1/mcp",
    "statusEndpoint": "https://mikekappel.com/wp-json/mk/v1/mcp-status",
    "deploymentManifestEndpoint": "https://mikekappel.com/mcp-deployment-manifest.json",
    "deploymentManifestRestEndpoint": "https://mikekappel.com/wp-json/mk/v1/mcp-deployment-manifest",
    "humanGuide": "https://mikekappel.com/mcp-server/",
    "protocolVersion": "2025-11-25",
    "jsonRpc": "2.0",
    "requestIdTypes": [
      "string",
      "integer"
    ],
    "requiredAcceptMediaTypes": [
      "application/json",
      "text/event-stream"
    ],
    "httpMethods": [
      "POST",
      "OPTIONS"
    ],
    "getBehavior": "405-method-not-allowed-no-sse-listener",
    "strictDefinitionListParams": true,
    "strictPromptArgumentValidation": true,
    "strictResourceReadValidation": true,
    "browserLocalDiagnostics": true,
    "toolCount": 10,
    "resourceCount": 12,
    "resourceTemplateCount": 3,
    "promptCount": 3,
    "openApiPathCount": 25,
    "declaredStaticArtifactCount": 43,
    "declaredRestEndpointCount": 19
  },
  "research": {
    "snapshotVersion": "3.121.0",
    "releaseDescriptor": "/research-archive-import-3.126.0.json",
    "sourceImportManifest": "/research-archive-import-3.121.0.json",
    "archiveRecords": 804,
    "readableMarkdownRecords": 802,
    "publicSearchRecords": 903,
    "guardedSearchRecords": 999,
    "publicVectorDocuments": 697,
    "guardedVectorDocuments": 793,
    "vectorDimensions": 4096,
    "reportMarkdownSetSha256": "9da52f9e01b76df020dc019ea4dfcd5dae48385ade1cb9d59d0db8d800a7532e",
    "signedReadGrantDefaultTtlSeconds": 900,
    "citationGuideResource": "mk://research/citation-guide",
    "citationFields": [
      "citation",
      "sourceStatus",
      "claimBoundary",
      "sha256"
    ],
    "contextTool": "build_research_context",
    "contextResourceTemplate": "mk://research/context{?q,source,type,mode,limit,characterBudget,perItemCharacters,cursor}",
    "contextGuideResource": "mk://research/context-guide",
    "contextCharacterBudget": {
      "minimum": 4000,
      "maximum": 50000,
      "default": 20000
    },
    "contextPerItemCharacters": {
      "minimum": 1000,
      "maximum": 12000,
      "default": 4000
    },
    "contextMaximumItems": 8,
    "contentSafetyClassification": "untrusted-retrieved-content",
    "grantBoundary": "Grant values are short-lived continuation capabilities; do not log, persist, or include them in citations.",
    "archiveImportDescriptor": "/research-archive-import-3.126.0.json",
    "restContextEndpoint": "/wp-json/mk/v1/research-context",
    "contextCapability": "MCP build_research_context and REST /wp-json/mk/v1/research-context both assemble bounded citation-ready context bundles."
  },
  "routeChecks": [
    {
      "method": "GET",
      "path": "/mcp",
      "expectedStatus": 405,
      "reason": "Stateless server does not expose a GET/SSE listener."
    },
    {
      "method": "OPTIONS",
      "path": "/mcp",
      "expectedStatus": 204
    },
    {
      "method": "POST",
      "path": "/mcp",
      "check": "initialize",
      "expectedStatus": 200,
      "headers": {
        "Content-Type": "application/json",
        "Accept": "application/json, text/event-stream"
      }
    },
    {
      "method": "POST",
      "path": "/mcp",
      "check": "notifications/initialized",
      "expectedStatus": 202,
      "headers": {
        "Content-Type": "application/json",
        "Accept": "application/json, text/event-stream"
      }
    },
    {
      "method": "POST",
      "path": "/mcp",
      "check": "strict-accept-json-only",
      "expectedStatus": 406,
      "headers": {
        "Content-Type": "application/json",
        "Accept": "application/json"
      },
      "reason": "Both application/json and text/event-stream must be acceptable."
    },
    {
      "method": "GET",
      "path": "/wp-json/mk/v1/mcp-status",
      "expectedStatus": 200
    },
    {
      "method": "GET",
      "path": "/wp-json/mk/v1/mcp-deployment-manifest",
      "expectedStatus": 200
    },
    {
      "method": "GET",
      "path": "/mcp-server/",
      "expectedStatus": 200
    },
    {
      "method": "GET",
      "path": "/research-search/",
      "expectedStatus": 200
    },
    {
      "method": "GET",
      "path": "/.well-known/mcp.json",
      "expectedStatus": 200
    },
    {
      "method": "GET",
      "path": "/server.json",
      "expectedStatus": 200
    },
    {
      "method": "GET",
      "path": "/mcp-deployment-manifest.json",
      "expectedStatus": 200
    }
  ],
  "protocolChecks": [
    "initialize returns the negotiated protocol version and v3.126.0 server metadata",
    "notifications/initialized returns HTTP 202 without a JSON-RPC response body",
    "tools/list, resources/list, resources/templates/list, prompts/list, and completion/complete are available",
    "all four definition-list methods paginate with signed opaque list-kind and definition-fingerprint-bound cursors",
    "invalid, tampered, null, and cross-list definition cursors fail with JSON-RPC -32602",
    "JSON-RPC identifiers are strings or integers; null, floating-point, object, array, and Boolean ids fail closed",
    "MCP POST Accept negotiation requires both application/json and text/event-stream with nonzero quality",
    "research cursor signatures and query/filter context binding fail closed when changed",
    "gated-read grants are signed, expiring, item-bound, and fail closed when changed, expired, or used for another item",
    "grant-bearing links are used for immediate reads while citation.resourceUri and citationText remain grant-free",
    "search and read preserve citation, sourceStatus, claimBoundary, sha256, and archive-snapshot provenance",
    "source/type/mode/limit plus context-budget completion and bounded resource continuation are available",
    "build_research_context assembles a provenance-bearing context bundle within the requested 4,000–50,000-character budget",
    "mk://research/context provides equivalent resource-only context assembly with signed continuation",
    "retrieved research blocks are labeled untrusted and cannot authorize commands, tool calls, task changes, or secret disclosure",
    "unknown and array-shaped list, resource-read, and prompt envelopes fail with JSON-RPC -32602",
    "browser-local diagnostics are opt-in, same-origin, bounded, and redact signed grant values"
  ],
  "artifactHashAlgorithm": "sha256",
  "artifactHashes": {
    ".well-known/mcp.json": "765a30ff3282f636daf84e9e5bd8f5d52a819c5120653e6ab8b43ca8dd6b3b62",
    ".well-known/openapi.json": "1520cb76b788bf1699fbdfdd2ed1df657103295b59165f27f56b617c5511f191",
    "404.php": "fb3fbc3e98922d5225d8d76cd8b30a632816941eb3fe6d04f5613825beef99b8",
    "api/openapi-3.1.json": "1520cb76b788bf1699fbdfdd2ed1df657103295b59165f27f56b617c5511f191",
    "api/public-route-index.json": "1cc71e9b4dc6eec3cb5d05804d1d3fe1a734ece4519450f0f49ace123d35ce6d",
    "assets/data/mcp-manifest.json": "765a30ff3282f636daf84e9e5bd8f5d52a819c5120653e6ab8b43ca8dd6b3b62",
    "assets/data/research-archive-import-3.126.0.json": "1e408d552206f89eefc696d2f0d1095b7824eff922d22c67f233c455d543a144",
    "assets/data/research-dashboard.json": "9d1cd9d01d18e284e6819878d49333757ef6255d59673f6939ba8170a09659b4",
    "assets/data/route-qa-contract.json": "a1f1b25f0a1e8b49371dea63b986056622bc7bd3f490421bb7abf8b034b5cf59",
    "assets/js/mcp-server.js": "4e675ee33b1507c12219271116c8db2f92b7350022b0640c9b92a6612d81d41b",
    "functions.php": "2c74c39aad876b4e6fbd50086b48bb01288207867f7f2606c3af26bca3c03423",
    "inc/mcp.php": "7de0d89d5840e4485fd0695f16153b5b89cbd21ac96c6246fabad5563070113b",
    "llms-full.txt": "eac35fa485413d0e7e4585649a5b2267ea3500f1b976d74c647c20623de77a18",
    "llms.txt": "2cf41e023279c381c10ce168dab9af68dfe27b45356a793345bc75ee2b82222b",
    "mcp-client-config.json": "9ce71a7e0b9d3ca41eea9b4caf2978ec2641266de9c1060efdccb6aab3589948",
    "ops/mcp-research-smoke.php": "6c862b7e9beb5dce1f99b5879187e86dbf0a47a23a5661d1ca1c0d4eb6e216d7",
    "research-archive-import-3.126.0.json": "1e408d552206f89eefc696d2f0d1095b7824eff922d22c67f233c455d543a144",
    "research-dashboard.json": "9d1cd9d01d18e284e6819878d49333757ef6255d59673f6939ba8170a09659b4",
    "research-vectors/index.json": "0b5b87340eeb80c4208256253ba47a251b83ab6d39881e059368ae5664819b75",
    "research-vectors/manifest.json": "f0f9d01bedf9a4b95472aea9eede752741c584234adcb84a595b9474c512c8f3",
    "robots.txt": "40487c27dbdcb85266e6f1571686c8601e5cb7b627c75751b465081dd650cb8a",
    "root-htaccess-v3.126.0.example": "9801e0c903db5797b1cdb098b9e071bd38ab5c94640e71c937dc471262cdf517",
    "route-qa-contract.json": "a1f1b25f0a1e8b49371dea63b986056622bc7bd3f490421bb7abf8b034b5cf59",
    "schemas/mcp-site-discovery-v1.schema.json": "6fe6ce3a0a6a8b65d94c82b90722d09ae06fb4b14e4dbb689b4a48113845e7cf",
    "server.json": "d5775a7f81869c7e84cfb0bb2377974db2db18a448719487959397189701c0f1",
    "sitemap.xml": "aeeeeaa1740f2af42cf9e9aa26b6faa76e2f57b92061bc88ed4fe75f178c4d50",
    "sitemaps.xml": "aeeeeaa1740f2af42cf9e9aa26b6faa76e2f57b92061bc88ed4fe75f178c4d50",
    "style.css": "3a0f6b1dec074165521b368ce4e400b8e554320de2d637d0b1c0246d9dc29854",
    "templates/page-about.php": "d9ecfe1055de93b4a153591e226845049f1382dfc538e00400765922c876dfa2",
    "templates/page-expertise.php": "9fd67e07165bf85d9a44f40d4163f231dea990d3878fbaa28f914a71f84c5c8f",
    "templates/page-mcp-server.php": "e48bdfc33bd89ef8feb9447a75441c971fbebc8d346cb933b53148cd4c785eea",
    "verify-mikekappel-mcp-v3.126.0.sh": "f32465aff4f0fd39298b5d7e07ab5e59f002721ee970071182bb3073766ba886"
  },
  "mirrorAssertions": [
    {
      "left": "/.well-known/mcp.json",
      "right": "/assets/data/mcp-manifest.json",
      "byteIdentical": true
    },
    {
      "left": "/.well-known/openapi.json",
      "right": "/api/openapi-3.1.json",
      "byteIdentical": true
    },
    {
      "left": "/route-qa-contract.json",
      "right": "/assets/data/route-qa-contract.json",
      "byteIdentical": true
    },
    {
      "left": "/research-dashboard.json",
      "right": "/assets/data/research-dashboard.json",
      "byteIdentical": true
    },
    {
      "left": "/research-archive-import-3.126.0.json",
      "right": "/assets/data/research-archive-import-3.126.0.json",
      "byteIdentical": true
    },
    {
      "left": "/mcp-deployment-manifest.json",
      "right": "/assets/data/mcp-deployment-manifest.json",
      "byteIdentical": true
    }
  ],
  "remediation": {
    "source": "uploaded production QA report",
    "version": "3.126.0",
    "closedFindings": [
      "HTTP to HTTPS enforcement provided through root .htaccess",
      "root /mcp-deployment-manifest.json packaged and mirrored",
      "/about/ /expertise/ /research-archive/ managed pages added",
      "REST /wp-json/mk/v1/research-context added",
      "active route-index metadata advanced to 3.126.0"
    ]
  },
  "expectedRoutes": [
    {
      "path": "/about/",
      "kind": "page",
      "expectedStatus": 200,
      "addedIn": "3.126.0"
    },
    {
      "path": "/expertise/",
      "kind": "page",
      "expectedStatus": 200,
      "addedIn": "3.126.0"
    },
    {
      "path": "/research-archive/",
      "kind": "page",
      "expectedStatus": 200,
      "addedIn": "3.126.0"
    },
    {
      "path": "/mcp-deployment-manifest.json",
      "kind": "static-json",
      "expectedStatus": 200,
      "addedIn": "3.126.0"
    },
    {
      "path": "/sitemaps.xml",
      "kind": "static-xml",
      "expectedStatus": 200,
      "addedIn": "3.126.0"
    },
    {
      "path": "/wp-json/mk/v1/research-context",
      "kind": "rest-json",
      "expectedStatus": 200,
      "addedIn": "3.126.0"
    }
  ],
  "productionQaRemediation": {
    "sourceReport": "docs/qa/production-qa-report-v3.125.0.md",
    "sourceAgentLog": "docs/qa/production-qa-agent-log-v3.125.0.txt",
    "fixedIn": "3.126.0",
    "items": [
      {
        "id": "MK-PQA-001",
        "finding": "HTTP did not redirect to HTTPS",
        "remediation": "root-htaccess-v3.126.0.example and root ZIP .htaccess enforce HTTPS with HSTS when deployed at public_html."
      },
      {
        "id": "MK-PQA-002",
        "finding": "/mcp-deployment-manifest.json returned 404",
        "remediation": "root-files ZIP publishes /mcp-deployment-manifest.json and WordPress static-route fallback serves the same file."
      },
      {
        "id": "MK-PQA-003",
        "finding": "Route index contained stale metadataConversionQaPolish version 3.120.0",
        "remediation": "public route index now reports 3.126.0 and records the production QA remediation set."
      },
      {
        "id": "MK-PQA-004",
        "finding": "/about/, /expertise/, and /research-archive/ returned 404",
        "remediation": "managed templates and direct-route fallback now render these pages server-side."
      },
      {
        "id": "MK-PQA-005",
        "finding": "/wp-json/mk/v1/research-context returned 404",
        "remediation": "REST research-context endpoint now exposes the same bounded context bundle used by MCP."
      },
      {
        "id": "MK-PQA-006",
        "finding": "Generic 404 recovery",
        "remediation": "404 template now presents recovery links for resume, MCP, research, route index, and sitemap."
      }
    ],
    "operatorNote": "The HTTPS rule only takes effect after deploying the root-files ZIP into the web root or manually merging the included .htaccess rules with host-managed rewrite rules."
  }
}
