# info.summary
Read-only access to the pages, posts and agent tooling on reeceharris.net.

# info.description
Every page on this site answers to `Accept: text/markdown` with a markdown rendition of itself. For structured access, POST JSON-RPC to the MCP endpoint. There are no write operations and no authentication.

# paths./.get.description
Who Reece Harris is, the roles he has held, and the projects he maintains.

# paths./.get.parameters[].description
Send `text/markdown` to receive markdown instead of HTML.

# paths./blog.get.description
Every published post, newest first, with reading times and publication dates.

# paths./blog.get.parameters[].description
Send `text/markdown` to receive markdown instead of HTML.

# paths./apps.get.description
Index of the small browser-only tools hosted on the site.

# paths./apps.get.parameters[].description
Send `text/markdown` to receive markdown instead of HTML.

# paths./apps/codec.get.description
Encode and decode between base-N encodings, character sets, escaping schemes, integer formats, compression formats and substitution ciphers. Runs entirely in the tab.

# paths./apps/codec.get.parameters[].description
Send `text/markdown` to receive markdown instead of HTML.

# paths./apps/converter.get.description
Convert images between PNG, JPEG, GIF, WebP, BMP, ICO, TIFF, TGA, PNM, QOI, HDR and OpenEXR, with resizing and alpha handling. Runs entirely in the tab.

# paths./apps/converter.get.parameters[].description
Send `text/markdown` to receive markdown instead of HTML.

# paths./blog/{id}/{slug}.get.description
Returns the post. With `Accept: text/markdown` the response is the original markdown source, with frontmatter carrying the title, canonical URL, publication date and reading time. A stale slug redirects to the canonical one.

# paths./blog/{id}/{slug}.get.parameters[].description
Numeric post id, as listed in llms.txt or by the MCP `list_posts` tool.

# paths./blog/{id}/{slug}.get.parameters[].description
Title slug. Decoration on top of the id; a stale value redirects.

# paths./blog/{id}/{slug}.get.parameters[].description
Send `text/markdown` to receive markdown instead of HTML.

# paths./blog/{id}/{slug}.get.responses.302.description
The slug is stale or the post does not exist.

# paths./sitemap.xml.get.summary
Canonical URLs with last-modified timestamps

# paths./mcp.get.description
Server info and the tool list, for clients that just want to look.

# paths./mcp.post.description
Stateless Streamable HTTP MCP endpoint. One JSON-RPC 2.0 message per request, one reply per response; notifications get 202 with no body. Tools: list_posts, get_post, search_posts, get_profile, list_projects, list_apps.

# externalDocs.description
Agent skill describing how to read this site