> ## Documentation Index
> Fetch the complete documentation index at: https://docs.olonjs.com/next-dev-portfolio/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP Manifests: AI-Readable Portfolio Endpoints

> next-dev-portfolio generates MCP manifests for every page, making your portfolio discoverable by AI agents, assistants, and language model tools.

Every page in your next-dev-portfolio automatically generates a machine-readable MCP (Model Context Protocol) manifest. These manifests describe your portfolio's structure, content, and data contracts in a format that AI agents, assistants, and LLM-powered tools can understand and query — no extra configuration required.

## What Are MCP Manifests?

MCP manifests are structured JSON documents that describe your pages in a way AI systems can parse and act on. Instead of an AI agent scraping your HTML or guessing what your portfolio contains, it can read the manifest directly and understand:

* Which pages exist and what they contain
* The section types that make up each page (hero, skills, timeline, etc.)
* The JSON Schema contract that governs the shape of each page's data
* Metadata like titles and descriptions for every page

This makes your portfolio natively compatible with agent frameworks, AI coding assistants, and any tool that speaks the Model Context Protocol.

## Manifest Endpoints

Your deployed site exposes four types of manifest endpoints, all served as static files from your CDN:

| Endpoint                          | Description                                                        |
| --------------------------------- | ------------------------------------------------------------------ |
| `GET /mcp-manifest.json`          | Root index — lists every page with titles, descriptions, and links |
| `GET /mcp-manifests/{slug}.json`  | Per-page manifest — describes the section types for one page       |
| `GET /schemas/{slug}.schema.json` | Per-page JSON Schema — the data contract for a page's content      |
| `GET /llms.txt`                   | Plain-text site summary for LLM crawlers and AI assistants         |

### Root Manifest

The root manifest at `/mcp-manifest.json` is the entry point for any agent discovering your portfolio. It lists every page alongside its manifest link and schema link.

```json theme={null}
{
  "version": "1.0.0",
  "kind": "olonjs-mcp-manifest-index",
  "generatedAt": "2026-07-29T06:58:07.050Z",
  "pages": [
    {
      "slug": "about",
      "title": "About Andrew Linh — Path, Stack, Principles",
      "description": "The story behind the engineer: how I got here, what I build with, and why I work the way I do.",
      "manifestHref": "/mcp-manifests/about.json",
      "contractHref": "/schemas/about.schema.json",
      "sectionTypes": [
        "header",
        "footer",
        "page-hero",
        "about-story",
        "skills-stack",
        "philosophy"
      ]
    }
  ]
}
```

### Per-Page Manifests

Each page has its own manifest at `/mcp-manifests/{slug}.json`. This document describes the section types present on that page, their data shapes, and links to the full JSON Schema contract.

### Per-Page JSON Schemas

The JSON Schema for each page lives at `/schemas/{slug}.schema.json`. These are the same Zod schemas used during the build, converted to standard JSON Schema format. External tools — validators, agent frameworks, OpenAPI integrations — can consume them directly.

## HTML Link Tags

Every page's `<head>` includes two link tags that allow agents and browsers to auto-discover the manifests for that specific page:

```html theme={null}
<link rel="mcp-manifest" href="/mcp-manifests/about.json" />
<link rel="olon-contract" href="/schemas/about.schema.json" />
```

Any agent that follows the MCP discovery convention will find these tags and be able to navigate directly to the manifest and schema for the current page, without needing to consult the root index first.

## `public/llms.txt`

In addition to the JSON manifests, your site generates a plain-text file at `/llms.txt`. This file is specifically designed for LLM crawlers that index sites for use in AI assistants and search tools.

`llms.txt` follows an emerging convention for machine-readable site summaries. It describes your site's purpose, lists your pages and their descriptions, and provides links to the full manifest index. It is generated by `scripts/generate-llms-txt.mjs` as part of the prebuild step.

<Tip>
  Some AI assistants and agent frameworks check for `/llms.txt` before attempting to crawl a site. Having it present signals that your content is AI-ready and reduces unnecessary scraping.
</Tip>

## How Manifests Are Generated

You never need to write or edit manifest files by hand. They are generated automatically by the `scripts/bake.mjs` prebuild script, which runs before every build:

<Steps>
  <Step title="Prebuild runs automatically">
    When you run `npm run build`, the `prebuild` npm script executes first. This calls `scripts/bake.mjs`, which reads all your content from `src/data/` and your section schemas.
  </Step>

  <Step title="Manifests and schemas are written to `public/`">
    The bake script writes the root manifest, all per-page manifests, and all JSON Schema files into the `public/` directory. These become static assets served directly by your CDN.
  </Step>

  <Step title="`llms.txt` is generated">
    `scripts/generate-llms-txt.mjs` runs and writes `public/llms.txt` using the same content data.
  </Step>

  <Step title="Next.js build continues">
    With all static manifest files in place, the Next.js build proceeds normally. The `<link>` tags are injected into each page's `<head>` at build time.
  </Step>
</Steps>

<Note>
  The generated files in `public/` are committed to your repository. This means they are available immediately on the CDN without any server-side rendering overhead, and they are versioned alongside your content.
</Note>

## Keeping Manifests Up to Date

Because manifests are regenerated on every build, they always reflect the current state of your content. If you add a new page, rename a section, or update a description, the next build will produce updated manifests automatically.

<Warning>
  If you manually edit files in `public/mcp-manifests/`, `public/schemas/`, or `public/mcp-manifest.json`, your changes will be overwritten the next time you run `npm run build`. Always update your source content in `src/data/` instead.
</Warning>
