{
  "version": "1.0.0",
  "kind": "olonjs-page-mcp-manifest",
  "generatedAt": "2026-08-10T19:12:28.712Z",
  "slug": "blog/e2e-type-safety",
  "title": "Blog post — Andrew Linh",
  "description": "Long-form writing on schema-driven content, type safety, AI agent tooling, and developer experience for structured systems.",
  "contractHref": "/schemas/blog/e2e-type-safety.schema.json",
  "transport": {
    "kind": "window-message",
    "requestType": "olonjs:webmcp:tool-call",
    "resultType": "olonjs:webmcp:tool-result",
    "target": "window"
  },
  "capabilities": {
    "resources": [
      {
        "uri": "olon://pages/blog/e2e-type-safety",
        "name": "Blog post — Andrew Linh Data",
        "mimeType": "application/json",
        "description": "Structured content for the blog/e2e-type-safety page."
      },
      {
        "uri": "olon://pages",
        "name": "Site Map",
        "mimeType": "application/json",
        "description": "Structured content for the map of this site"
      }
    ]
  },
  "sectionTypes": [
    "header",
    "footer",
    "post-detail"
  ],
  "sectionInstances": [
    {
      "id": "global-header",
      "type": "header",
      "scope": "global",
      "label": "header"
    },
    {
      "id": "global-footer",
      "type": "footer",
      "scope": "global",
      "label": "footer"
    },
    {
      "id": "post-detail-1",
      "type": "post-detail",
      "scope": "local",
      "label": "post-detail"
    }
  ],
  "tools": [
    {
      "name": "update-section",
      "description": "Update a section field in the Studio draft. Does not persist — call save when all updates are complete. Use sectionType to select the matching schema from sectionSchemas."
    },
    {
      "name": "save",
      "description": "Persist all pending draft changes using the active save mode (local file, hot save, or save2repo). Call once after all update-section calls are complete."
    }
  ]
}
