Back to portfolioGet in touch
ContentOps · Docs-as-Code · AI ToolingIntel + independent prototype · 2021–2024 · prototype 2026

Headless Documentation: Git as CMS, one-click publishing, machine-ready content

At Intel I worked on ContentOps to move documentation from a docs-as-code and AEM setup onto GitHub as a headless CMS with one-click publishing. I then built an independent, open-source prototype that extends the pattern to serve the same content to AI agents over the Model Context Protocol.

AEM → Git
Headless CMS migration
2 wks → nightly
Publishing turnaround
MCP
Docs served to AI agents
2
Audiences: humans + agents
GitGitHub ActionsMarkdownHeadless CMSModel Context ProtocolNode.jsContentOpsCI/CD

From a heavyweight CMS to Git as the source of truth

At Intel, documentation ran on a docs-as-code setup paired with Adobe Experience Manager and a CI/CD pipeline. It worked, but publishing was heavy: content lived partly in the CMS, releases were coupled to it, and every change carried more process than the content itself warranted.

The goal was to make Git the single source of truth: author in Markdown, treat docs like code, and publish to a lightweight static site with one click, so ContentOps stopped being a bottleneck and writers could ship without waiting on the CMS.

Content in a CMS

Source of truth split between the repo and AEM, so authoring and publishing pulled in two directions.

Heavy release path

Publishing coupled to the CMS and its CI/CD, adding process to every routine content change.

Two audiences ahead

Human readers today, and AI coding agents next, that need structured content rather than scraped HTML.

ContentOps, working across the org

I worked mainly on ContentOps for the migration, partnering with system architects, developers, and product managers and owners to move authoring and publishing onto GitHub as a headless CMS with one-click publishing.

01
Content operations
  • Shaped how content was structured, versioned, and reviewed once Git was the source of truth: repo layout, frontmatter, and the review-as-pull-request workflow.
02
Cross-functional partnership
  • Worked with system architects on the publishing architecture, with developers on the pipeline, and with PMs and POs on scope, sequencing, and rollout.
03
One-click publishing
  • Helped move publishing off the CMS and onto Jenkins CI/CD with GitHub Pages hosting: nightly builds by default, urgent fixes live in minutes instead of the 1.5 to 2 weeks the AEM pipeline took.

A working reference implementation I own

To make the pattern concrete, defensible, and independent of any employer’s internal systems, I built a small open-source reference implementation from scratch in 2026. It is real code that runs, not a diagram.

One note on timeline, for accuracy: the headless CMS and one-click publishing above was my Intel engagement. The Model Context Protocol layer below is my own later prototype, built after that engagement and after MCP existed. It extends the same headless pattern to a new audience; it does not describe anything shipped at Intel.

Documentation lives as Markdown with frontmatter in Git. A GitHub Actions workflow publishes it to a static site with one click or on merge. The same Markdown is served to AI agents over the Model Context Protocol, so an agent queries structured content instead of scraping a rendered page.

01
Git as the headless CMS
  • Each topic is one Markdown file with structured frontmatter (title, slug, summary, tags, audience) and an explicit "Rules for agents" section written as constraints, not prose.
02
One-click publishing
  • A GitHub Actions workflow builds a static site plus a machine-readable index and deploys to GitHub Pages, triggered manually or automatically when content changes.
03
MCP server for agents
  • A Node.js MCP server exposes list, get, and search tools over the same Markdown, so agents such as Claude Desktop or Cline retrieve grounded answers instead of hallucinating.

What this is, without the jargon

A short version for anyone who does not work with documentation tooling day to day.

Documentation is normally written for people to read in a browser. AI assistants, like the ones built into modern coding tools, increasingly need that same information too. They work far better when it is handed to them as clean, structured data than when they have to read a web page and guess.

This project keeps one copy of the documentation, written as plain text files in GitHub, the place software teams already store their code. From that single copy, two things happen automatically: a normal website is published for people, and a small program (the "MCP server") makes the exact same content available to an AI assistant whenever it asks. Change the text once, and both the website and the AI stay in sync.

MCP, the Model Context Protocol, is simply an open standard for how an AI assistant asks an outside source for information. Here it lets the assistant look things up in the real documentation instead of inventing an answer. The payoff: no duplicated effort, no separate system to maintain, and AI that answers from your actual docs.

Connect an AI assistant to it yourself

The prototype is open source and runs locally. With Node.js and an MCP-capable client such as Claude Desktop, you can point an assistant at these docs in a couple of minutes.

01
Get the code
  • Clone the repository and run npm install to pull the one dependency, the official MCP SDK.
02
Point your client at the server
  • Add the server to your MCP client. For Claude Desktop, add this to claude_desktop_config.json and restart the app.
03
Ask a question
  • Ask the assistant something like "search the docs for how to handle a 429". It calls the server’s tools and answers from the real files rather than guessing.
{
  "mcpServers": {
    "headless-docs": {
      "command": "node",
      "args": ["/absolute/path/to/headless-docs-mcp/src/server.mjs"]
    }
  }
}

Prefer to just look? The published docs site and its machine-readable index are linked at the top of this page. The site is what a person sees; the MCP server serves the same content to an agent.

One source, two audiences

2 wks → nightly
Publishing turnaround

Publishing a change took 1.5 to 2 weeks through the AEM pipeline. On the new stack, Jenkins CI/CD shipped nightly builds to GitHub Pages, with urgent fixes live in minutes.

AEM → Git
Platform shift

Moved the source of truth into the repository, so authoring and publishing stopped pulling in two directions.

MCP
Machine access

The working prototype serves the same content to AI agents as structured, queryable tools.

Treat documentation as code and you get one source of truth. Deliver it headlessly and the same content can serve both human readers and the AI agents that are becoming a second audience.

What this project demonstrates

  1. 1ContentOps is an architecture problem as much as a writing one: repo layout, frontmatter, and the review workflow decide whether a headless setup scales.
  2. 2Making Git the single source of truth removes a whole class of drift between a CMS and the repository.
  3. 3The same structured content that publishes cleanly for humans is what an AI agent needs to answer without hallucinating.
  4. 4A small working prototype you own and can run is the most defensible way to show a pattern you have led professionally.