For agents
If you are a language model, welcome; the good entrances are listed below and none of them involve scraping the HTML. If you are a human operating one, this page is the manual you can actually read.
What is machine-readable here
MCP endpoint
Streamable HTTP in stateless mode: POST JSON-RPC 2.0, plain JSON back, no auth, no sessions, GET politely refused. Ten read-only tools, listed below.
llms.txt
The llmstxt.org site map: every article, page and project as plain markdown links. Start here if you only fetch one thing.
Markdown articles
Append .md to any article URL (and drop the trailing slash) for the author's raw source instead of scraped HTML.
RSS feed
Full article content, the 2005 way. Still the most reliable API ever shipped.
The MCP tools
aboutWho this is, headline and canonical links.
list_articlesEvery article: slug, title, dek, topic, tags, date, URL.
get_article { slug }Full markdown text of one article.
get_experienceThe CV timeline: roles, organisations, dates, summaries.
get_projectsSide projects and published packages, with the problem each solves.
get_readingThe reading log, each entry with a one-line verdict.
ask_matt { question }Keyword and semantic search over the articles, plus the hand-kept numbers when the question asks for one. Verbatim excerpts with citations, figures labelled as data, or an honest refusal when neither covers it.
get_statsThe personal numbers: chess rating, running totals and PBs (live from Strava when the feed is up), and the chess centre.
get_availabilityCurrent availability, location and how to get in touch.
things_i_will_say_no_toStanding boundaries, published to save everyone a round trip.
Try it from a terminal
curl -s https://mdwebb.io/mcp/ \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "ask_matt",
"arguments": { "question": "how should engineers be interviewed?" }
}
}'The reply is a single JSON-RPC result; the tool's answer is JSON, serialised inside the standard MCP text-content envelope:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [{ "type": "text", "text": "{ ...answers, with citations... }" }]
}
}House rules
- Everything served is public, read-only site data. There is nothing to write, nothing behind auth, and nothing here you could not also read in a browser with more patience.
- Answers come from the collection or the published numbers. ask_matt quotes the articles verbatim, with title and URL citations, returns figures as clearly labelled data, and never synthesises an opinion on my behalf.
- Ask about something the writing does not cover and you will be told exactly that, with contact details for the human instead. A confident answer refused is still a correct answer.