stefannio-mcp Live

My work, as tools your AI can call.

Endpoint
/api/mcp
Transport
Streamable HTTP
Tools
Six, read only
Sign in
None

Why

Recruiters already ask AI about candidates. This gives it facts.

An agent that browses this site gets prose and has to guess. Connected here, it gets my projects, decisions and skills as fields it can quote and compare.

Every tool reads the same files the pages render, so it cannot say anything the site does not. Anything I have not confirmed stays out.

Connect

One command, one URL, or one block of JSON.

claude mcp add --transport http stefannio https://stefannio.tech/api/mcp

In Claude, open Customize, then Connectors. Choose Add, then Add custom connector. Name it stefannio, paste the URL, and choose No sign in. The Free plan allows one custom connector.

https://stefannio.tech/api/mcp

ChatGPT needs a paid plan and runs custom servers on the web only. Open Plugins, choose the plus button, then Add custom MCP server, paste the URL, and set authentication to none. OpenAI has moved this menu more than once, so if a label differs, look for the option to add a custom MCP server.

https://stefannio.tech/api/mcp

Add this to ~/.cursor/mcp.json.

{  "mcpServers": {    "stefannio": { "url": "https://stefannio.tech/api/mcp" }  }}

Then ask it something, like "What has Stefan shipped, and what did he decide along the way?"

Tools

Six tools. Each returns fields, not a paragraph.

get_background()

Stefan Nio's background as fields: the claim his work argues, current role, every role with its highlights, education, how he works with coding agents, and links. Start here for a general question about who he is.

list_projects()

Every project on Stefan's portfolio. Case studies come with their role, team, timeline, skills, and section outline, and each slug works with get_case_study. Smaller projects follow under alsoBuilt.

get_case_study(slug)

One case study in full, section by section, as typed blocks. Decision blocks list the options Stefan weighed, which one he chose, and why. Stats, charts, and comparisons keep their structure.

slug

  • bizsec
  • seizure-classification
  • this-site
get_skills(area?)

Stefan's skills grouped by area, each with the case studies that mention it. Pass an area for one group, or leave it out for all of them.

area

  • agents-and-llm-systems
  • machine-learning
  • product-engineering
  • infrastructure-and-data
get_availability()

Whether Stefan is open to roles, which titles and kinds of work he wants, where he is based, whether he will relocate, and how to reach him.

search_work(query, limit?)

Keyword search across the case studies, the smaller projects, experience, education, skills, and Stefan's profile. Returns ranked matches with an excerpt, and for each one the tool call that returns the full record.

Responses

What an agent gets back.

These are real responses, produced when the site was built.

get_availability()
{  "open": true,  "roles": [    "Founding engineer",    "Product engineer"  ],  "companies": "companies of any size",  "work": [    "taking AI and agentic systems from a promising demo to a mature product that people rely on",    "owning a product from a user's problem through to something people use, and keeping it running after launch",    "making the AI inside a product good"  ],  "location": {    "basedIn": "Australia",    "remote": true,    "willRelocate": true,    "relocation": "anywhere for the right role"  },  "contact": {    "form": "https://stefannio.tech/#contact",    "linkedin": "https://linkedin.com/in/stefan-nio"  },  "detail": [    "He is open to roles at companies of any size, as long as the work is taking AI and agentic systems from a promising demo to a mature product that people rely on. Founding engineer and product engineer are the titles closest to how he works, and he would rather own an outcome than a single layer of the stack.",    "Two kinds of work draw him, and at bizsec.io he found them equally rewarding. The first is owning a product from a user's problem through to something people use, and keeping it running after launch. The second is making the AI inside a product good: choosing current models, agents, and tooling where they improve the output or a decision, and leaving them out where plain code is more reliable. He wants to keep maturing how agents work inside real products. That means giving an agent clear, small tasks, a codebase it can read, and checks it can run to prove its own work, then handing it more as it earns that trust. He already works this way at bizsec.io, where agents write and review code inside limits he set.",    "He works remotely from Australia and will relocate anywhere for the right role."  ]}
search_work("MCP", 3)
{  "query": "MCP",  "terms": [    "mcp"  ],  "matches": [    {      "source": "case-study",      "slug": "this-site",      "section": "reflection",      "heading": "Reflection: My worst estimate on this project was off by a factor of six.",      "url": "https://stefannio.tech/work/this-site#reflection",      "next": {        "tool": "get_case_study",        "arguments": {          "slug": "this-site"        }      },      "excerpt": "…the guess, but I now measure before I plan around a number. Next is an MCP server at `/api/mcp`, so an agent can ask for my projects and skills as structured data instead of scraping this page. It will live in a…",      "score": 2    },    {      "source": "case-study",      "slug": "bizsec",      "section": "stack",      "heading": "Stack: Boring where it can be, strict where it matters.",      "url": "https://stefannio.tech/work/bizsec#stack",      "next": {        "tool": "get_case_study",        "arguments": {          "slug": "bizsec"        }      },      "excerpt": "…Anthropic models through the AI Gateway, Stripe, Upstash for rate limits, PostHog, Attio for CRM sync, and Vitest. bizsec.io also ships an MCP server, with its scope set by ADR 0011, so agents can reach the product too.",      "score": 1    },    {      "source": "skills",      "section": "agents-and-llm-systems",      "heading": "Agents and LLM systems",      "url": "https://stefannio.tech/about#skills",      "next": {        "tool": "get_skills",        "arguments": {          "area": "agents-and-llm-systems"        }      },      "excerpt": "Anthropic API, Claude, MCP, Vercel AI SDK, AWS Bedrock, AgentCore, Strands, LangGraph, LangChain, Prompt caching, RAG and pgvector",      "score": 1    }  ]}

Source

The code is moving to a public repository.

The rest of this site's code is private. The MCP server is the piece I am opening up, with its tests, as stefannio-mcp on GitHub. Until then, the This site case study walks through how it is built.