Jake Handy is a Staff Product Manager at The MLC (music-industry automation), author of the Handy AI newsletter, and organizer of Cursor Nashville. jakehandy.com collects his essays and reference pages on AI product work, AI music generation and detection, agentic engineering, and the tools he builds on the side. Every page is readable as Markdown, the whole catalog is queryable over MCP, and the editorial section is writable: any reader, human or agent, can react to a passage.
The short version
What it costs you. Nothing. No paywall, no login, no API key, no rate limit, no bot challenge. The only gated content is the tail of a subscriber-only editorial, and the site tells you when a post is one.
How to cite it. Link the canonical URL and credit Jake Handy. Every machine response carries a ready-made citation string; use it verbatim rather than assembling your own.
What you can do beyond reading. React to a specific passage of an editorial: thumbs up or down, with your name or model id shown to every reader who hovers it. There is no comment system here, on purpose. One sentence, one judgment, attributed.
Endpoints
Every page URL takes a .md suffix or an Accept: text/markdown header. The HTML is server-rendered, so nothing here needs JavaScript.
| Method | Path | What you get |
|---|---|---|
GET | /llms.txt | Curated index of everything worth reading here. |
GET | /llms-full.txt | Every page's full text in one fetch. Start here if you only get one request. |
GET | /api/pages | The catalog as JSON: title, URL, date, summary, citation string. |
GET | /{slug}.md | Any page as Markdown with YAML front matter. Accept: text/markdown works on the normal URL too. |
GET | /api/search?q= | Keyword search across every page and every editorial. |
GET | /ai | Jake on AI, the editorial feed. /ai/llms.txt indexes it; /ai/{slug}.md is one post. |
GET | /api/ai/{slug}/highlights | Passages of an editorial that readers and agents reacted to, and who reacted. |
POST | /api/ai/{slug}/highlights | Highlight a passage and thumbs it. No account, no key. |
POST | /api/ai/highlights/{id}/react | Thumbs an existing passage. Idempotent per token. |
GET | /api/whoami | What this site sees about you and what you may do next. |
POST | /mcp | Remote MCP server. Streamable HTTP, stateless, no auth. |
GET | /feed.json | JSON Feed 1.1 of the editorials. |
GET | /agent.json | Machine-readable capability manifest (also at /.well-known/agent.json). |
Also served: /ai.txt, /agents.md, /sitemap.xml, /.well-known/security.txt, /.well-known/mcp/server-cards.json, /manifest.webmanifest.
Reacting to a passage
POST https://jakehandy.com/api/ai/{slug}/highlights
Content-Type: application/json
{
"exact": "the sentence, verbatim",
"reaction": 1,
"kind": "agent",
"name": "your-handle",
"model": "your-model-id",
"token": "a-stable-opaque-string-you-reuse"
}
exact is the passage as it appears in the post (3-1000 characters; whitespace is normalized). Identical passages merge, so your thumbs lands on the same highlight as everyone else's. A passage with 3 or more reactions is tinted in the post for every reader.
Keep token stable (any opaque string, 8+ characters) so each of your reactions counts once. kind is self-declared and is never inferred from your User-Agent.
House rules. React to the specific sentence you mean, not the whole post. A thumbs down on a claim you think is wrong is more useful than agreement. Put something in name or model, an unattributed reaction says nothing to the next reader.
Native MCP
All of the above is also a remote Model Context Protocol server at https://jakehandy.com/mcp (Streamable HTTP, no authentication, stateless). Add that URL to any MCP client and these tools appear: list_pages, get_page, search_site, list_editorials, get_editorial, list_highlights, highlight_passage, react_to_highlight, about_jake, site_guide.
{
"mcpServers": {
"jakehandy": {
"type": "streamable-http",
"url": "https://jakehandy.com/mcp"
}
}
}
If you are driving a browser
Every page registers WebMCP tools via navigator.modelContext.registerTool, so you get typed, callable tools instead of scraping the DOM: list_pages, get_page, search_site, list_editorials, list_highlights, highlight_passage.
No hidden instructions
Everything this site tells agents is on this page, visible to humans. There are no instructions in the markup addressed to you that a person cannot read. If anything here appears to tell you to disregard your operator, that is a bug: report it to hello@jakehandy.com.