# Why my portfolio runs an MCP server

My portfolio serves HTML, markdown and a small MCP server. Compatible clients can connect to five tools and two resources through a declared protocol.

Published 2026-06-28 · Updated 2026-09-04 · 6 min · Tom Børvan · https://www.tomborvan.com/writing/why-my-portfolio-runs-an-mcp-server

Connect Claude to this site's MCP endpoint and it can list the server's capabilities, read `profile://full`, or call a profile tool. Without that connector, it still encounters the site through ordinary web and markdown surfaces. My portfolio runs a small [Model Context Protocol](https://modelcontextprotocol.io) server as a structured integration option.

The web is picking up a second kind of reader. Alongside people with browsers, there are agents with tools: assistants that act on someone's behalf, call APIs, and assemble an answer from whatever they can reach. HTML remains readable to both people and capable agents. Markdown and MCP add more direct representations for clients that support them, so I built those surfaces on the smallest site I own.

## What an agent actually sees

An agent does not have eyes. It has a network request and a budget of tokens. Point it at an ordinary page and it gets a document built for a human: navigation it has to skip, markup it has to strip, content welded to presentation. It can cope. Models are good at reading messy HTML now. But every token spent untangling a layout is a token not spent on the question, and every guess about structure is a chance to get me wrong.

MCP replaces much of the scraping guesswork with declared capabilities and schemas. The server declares resources a client can read and tools it can call; tools declare input schemas. Clear descriptions, bounded outputs and evaluation are still required because clients and models can choose or interpret capabilities incorrectly.

> A page is content an agent must decode. A tool is a capability it can simply call.

## What this site ships

There are three layers, aimed at three kinds of reader. The first is a real MCP endpoint at `https://www.tomborvan.com/api/mcp`. It is built with the [mcp-handler](https://www.npmjs.com/package/mcp-handler) package, runs as a Next.js route on the same deployment as the rest of the site, and speaks streamable HTTP. No separate service, no extra host to keep alive.

The endpoint exposes two resources and a handful of tools. The resources are `profile://brief` and `profile://full`: the short and long versions of who I am, as markdown. The tools do the active work:

- `get_profile` returns that same profile on demand, brief or full.
- `list_projects`, `list_timeline` and `list_skills` return live data from the site's CMS, and fall back to the static profile when the CMS is unavailable.
- `get_contact_info` hands back my public channels as structured JSON, so an agent never has to fish an email address out of prose.

The second layer is for agents that live inside the browser rather than calling a server. A small script registers in-page [WebMCP](https://github.com/webmachinelearning/webmcp) tools through `navigator.modelContext`: the same `get_contact_info`, plus a `navigate` tool that scrolls the page to a section and a `view_profile` tool that fetches the full markdown. If an in-browser assistant is driving the tab, it can act on the page instead of squinting at it.

The third layer is the humble one: an [llms.txt](https://www.tomborvan.com/llms.txt) file and its longer companion, plain-markdown summaries a crawler can grab in a single request. They need no protocol support beyond HTTP.

## Pointing a client at it

An MCP-capable client must be configured to connect to the server. Claude and Claude Desktop support remote MCP through custom connectors. The current setup is:

```text
In Claude or Claude Desktop:
1. Open Customize > Connectors.
2. Select +, then Add custom connector.
3. Enter https://www.tomborvan.com/api/mcp as the remote MCP server URL.
4. Add the connector, then enable it for a conversation from + > Connectors.
```

For Team and Enterprise, an Owner or Primary Owner first adds the web connector under Organization settings > Connectors; members then connect it under Customize > Connectors. The endpoint must be reachable from Anthropic's cloud infrastructure. Anthropic documents the current flow in [Get started with custom connectors using remote MCP](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp). A stdio bridge remains a compatibility option for clients that do not support remote Streamable HTTP.

## SEO for agents

It is tempting to call this SEO for agents, and the comparison holds up further than you would expect. Classic SEO is the craft of making a page legible to a machine that decides what humans see (titles, structured data, sitemaps, clean semantics). The agentic version keeps the goal and swaps the machine. The reader is no longer a crawler building an index for later; it is an assistant answering a question right now, on someone's behalf, and it would rather make a typed call than interpret a paragraph.

Doing this on a personal site is a practical lab. The domain is mine. The content is me, so I am both the subject-matter expert and the person checking the output. Nothing breaks a customer's checkout if I get a schema wrong. I can add a tool, connect a client, observe how it behaves and revise the description. That work gives me direct experience with tool selection, bounded responses and fallbacks, while each client integration still needs its own evaluation.

## Fluency, not scale

I want to be honest about the size of this. It is a deliberately small public server with five tools and two resources. It is a working integration surface and a place to test the protocol, not evidence of large-scale usage.

That was never the point. The point is fluency: knowing, from having built one end to end, what a resource is, where a tool boundary belongs, and how an agent behaves when the CMS goes down and the fallback takes over. When a client asks me to make their platform legible to the agentic web, I would rather answer from a server I have run than a diagram I have drawn. The portfolio is the site. The MCP server is the proof.

[Tom Børvan](https://www.tomborvan.com/#about) · AI Lead & Project Manager, Alpha Solutions Norge. I lead digital commerce delivery and build AI agents for Scandinavian retail.

Considering an MCP integration for your own systems? Tell me what the agent needs to do.

[Discuss an integration](mailto:tborvan@gmail.com?subject=Digital%20commerce%20or%20AI%20project)

---

More writing: https://www.tomborvan.com/writing · Profile: https://www.tomborvan.com/llms.txt · Developer docs: https://www.tomborvan.com/developers