iammatthias.com developer documentation
This site publishes its content in machine-readable form. Everything is public, unauthenticated, and free — no account, no API key, no paid tier.
Quickstart
# Search the site
curl "https://iammatthias.com/api/search.json?q=cloudflare+workers"
# List one section
curl "https://iammatthias.com/api/content.json?section=recipes"
# Read a document as markdown
curl "https://iammatthias.com/posts/1779066375000-farfield.md"
# The whole corpus in one request
curl "https://iammatthias.com/llms-full.txt"HTTP endpoints
GET /api/search-corpus.json- Every searchable item on the site (documents and feed posts) as compact text, each carrying its Farfield content hash (cid). Intended for building your own index; the site's own search embeds this locally in the browser.
GET /api/search-vectors.json- Precomputed embedding vectors for the corpus, keyed by cid, with the model name and dimension count. Built at deploy time with the ternlight model.
GET /api/content.json- Every published document as structured JSON: title, section, tags, dates, content hash, canonical URL, and markdown URL. Filterable by section and tag.
GET /api/search.json- Ranked keyword search over titles, excerpts, tags, and body text of every published document and feed post. Returns canonical and markdown URLs per hit.
Full specification: openapi.json. Errors are RFC 9457 problem documents carrying aresolution field that says how to retry.
MCP server
Streamable HTTP at https://iammatthias.com/mcp, no authentication. Add it to any MCP client:
{ "mcpServers": { "iammatthias": { "url": "https://iammatthias.com/mcp" } } }search_site— Search Matthias Jordan's writing, photography notes, and recipes by keyword. Returns titles, excerpts, and both HTML and markdown URLs.get_document— Fetch the full markdown source of one document by its path or slug, with front matter (title, dates, tags, content hash) and images resolved to public URLs.list_sections— List the site's publications (art, posts, recipes, melange, open-source) with descriptions and entry counts.list_recent— List the most recently published documents, newest first, optionally filtered to one section.
Preview the tools without connecting:server-card.json.
Markdown twins
Every content URL has a markdown twin at the same path plus.md, with front matter (title, dates, tags, content hash, canonical URL) and images resolved to public URLs. Section indexes live at /<section>.md, and each section has scoped context at /<section>/llms.txt.
Everything else
- llms.txt site map — Index of every published document with links to its markdown twin.
- Full corpus in one file — Every published document, front matter included, in a single markdown file.
- iammatthias.com MCP server — Streamable HTTP MCP server exposing site search and document retrieval as tools. No authentication required.
- GraphQL endpoint — Typed, introspectable GraphQL over the same content: search, list, and read documents in one round trip. Relay connections, schema-modeled errors, no authentication.
- GraphQL schema (SDL) — The GraphQL schema as SDL, for codegen or reading without an introspection query.
- OpenAPI specification — OpenAPI 3.1 description of the site's public read-only JSON endpoints.
- XML sitemap — Every indexable URL with last-modified dates.
- RSS feed — Sitewide RSS with full article bodies; per-section feeds at /<section>/rss.xml.
Caching and etiquette
Every record carries a cid, a CIDv1 content hash: same cid, same bytes, forever. Cache against it rather than refetching. Prefer llms-full.txt to crawling page by page, and send a descriptiveUser-Agent. The site is open source atgithub.com/iammatthias/com.