← Back to Blog
Stylized illustration of a website window on the left serving content over dashed lines to a terminal running curl and an AI agent node on the right.

AI Agents Welcome: A REST API and MCP Server for This Site

August 19, 20265 min read

Portrait of Adam Brauns

Adam Brauns

More and more, the "reader" landing on a website is not a person at all — it is an AI assistant answering a question on someone's behalf. Left to fend for itself, an agent visiting this site has to scrape HTML, guess at URL structures, and burn tokens wading through navigation chrome to find the actual content. A personal website is the one corner of the internet you fully control, so rather than making agents reverse-engineer mine, I decided to hand them the content directly.

This site has always been built for people reading it in a browser. As of this week, it is also built for everything else: every piece of content here — blog posts, portfolio projects, my resume, my profile, and my reading list — is now available through two new interfaces.

  • A public REST API at /api that serves everything as JSON
  • An MCP server at /mcp that exposes the same content as tools, resources, and prompts for AI agents

Both are read-only and completely open — no API keys, no authentication, no signup. Point a script, a browser, or an AI agent at them and start pulling content.

The REST API

The API is a small set of read-only JSON endpoints:

Endpoint Returns
/api/posts All blog posts, newest first, with slugs, excerpts, and tags
/api/posts/{slug} One full post, including the rendered content and a table of contents
/api/projects Portfolio projects with descriptions, tech stacks, and links
/api/resume Work experience, education, certifications, languages, and technologies
/api/profile Who I am — the about-page intro and highlighted strengths
/api/books My reading list, grouped by year

Trying it takes one command:

curl https://adambrauns.com/api/posts

An OpenAPI spec describes every endpoint and response shape, and an interactive API reference built on it lets you browse the schemas and fire requests straight from the browser.

Responses are cached for five minutes at the edge, which is plenty fresh for content that changes when I publish something.

The MCP server

MCP (Model Context Protocol) is an open standard for connecting AI assistants to external data and tools. Instead of an agent guessing at URL structures or parsing HTML, an MCP server tells the client exactly what it offers — typed tools with schemas, addressable resources, and reusable prompts — and the client calls them like functions.

This site's server lives at https://adambrauns.com/mcp over streamable HTTP. Any MCP client that speaks streamable HTTP can point at that endpoint. Here's how to connect a few popular ones:

Claude Code — connecting is a one-liner:

claude mcp add --transport http adambrauns https://adambrauns.com/mcp

Codex CLI — a one-liner, same as Claude Code:

codex mcp add adambrauns --url https://adambrauns.com/mcp

Cursor — add the server to ~/.cursor/mcp.json (or a project's .cursor/mcp.json):

{
  "mcpServers": {
    "adambrauns": {
      "url": "https://adambrauns.com/mcp"
    }
  }
}

VS Code / GitHub Copilot — add it to .vscode/mcp.json in a workspace:

{
  "servers": {
    "adambrauns": {
      "type": "http",
      "url": "https://adambrauns.com/mcp"
    }
  }
}

ChatGPT — on a paid plan, enable developer mode (Settings → Apps → Advanced settings), then add a custom connector pointing at the URL with no authentication.

Claude on web or desktop — Settings → Connectors → Add custom connector, and paste the URL.

Tools

The tools mirror the REST API and return structured JSON with full output schemas, so clients know the shape of every response before calling:

Tool What it does
list_posts List all blog posts, newest first, with slugs
get_post Fetch one post by slug, with full content and a table of contents
get_projects List portfolio projects
get_resume Fetch my resume
get_profile Fetch my profile and highlighted strengths
get_books Fetch my reading list

Every tool is annotated as read-only, so well-behaved clients know nothing here mutates anything.

Resources

The same content is also exposed as MCP resources under adambrauns:// URIs — adambrauns://resume, adambrauns://profile, adambrauns://projects, adambrauns://reading-list, and adambrauns://posts/{slug}. Where the tools return JSON for programmatic use, the resources render as markdown, which reads naturally as prose when attached to a context window. Post slugs even autocomplete: the resource template completes adambrauns://posts/ against the published posts.

A prompt, too

The server ships one prompt, introduce_adam, which walks a client through gathering my profile, resume, projects, and posts and writing a grounded introduction from them. It is a small thing, but it demos exactly what a personal MCP server is good at: ask your assistant to run it, and you get an introduction built only from what the server provides.

Try it

The API

Grab the post you are reading right now, as JSON:

curl https://adambrauns.com/api/posts/rest-api-and-mcp-server

The MCP server

Connect Claude Code to the MCP server:

claude mcp add --transport http adambrauns https://adambrauns.com/mcp

Then ask your assistant things like:

  • "What has Adam written about lately?" — and watch it call list_posts instead of scraping HTML
  • "What does Adam do for work?" — answered straight from get_resume
  • "What kind of projects has Adam built?" — pulled from get_projects
  • "What has Adam been reading this year?" — served by get_books
  • Or run the introduce_adam prompt and get a full introduction grounded in everything above

Final thoughts

None of this changes anything about reading the site in a browser. What it changes is who — or what — the site can serve. Extending structured access to agents feels like the natural next step: the same content, three interfaces.

If you build something against the API or wire the MCP server into an agent, I would genuinely love to hear about it.

Share this post