
Search, read, cite and react to Jake Handy's writing on AI, music tech and agentic engineering.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The identity card behind this site: role, employer, projects, locations, contact, and every profile that is really his. Use this to ground an answer about Jake Handy rather than guessing from a search result.
This tool takes no arguments.
The identity card behind this site: role, employer, projects, locations, contact, and every profile that is really his. Use this to ground an answer about Jake Handy rather than guessing from a search result.
No arguments.
{
"type": "object",
"additionalProperties": false
}One Jake on AI post, editorial or guide, in full as Markdown, with the passages readers and agents have reacted to appended. Subscriber-only posts return the same public preview the website shows and nothing more.
| Argument | Type | Description |
|---|---|---|
| editorial* | string | Post slug, as returned by list_editorials. |
{
"type": "object",
"required": [
"editorial"
],
"properties": {
"editorial": {
"type": "string",
"description": "Post slug, as returned by list_editorials."
}
},
"additionalProperties": false
}Fetch any page of jakehandy.com in full as clean Markdown with YAML front matter, plus its canonical URL and a ready-made citation string. Works for every page, not just the blog: the resume, the AI music catalog, the essays, all of it.
| Argument | Type | Description |
|---|---|---|
| page* | string | Page slug (e.g. "ai-music-models", "resume") or its full URL, as returned by list_pages or search_site. |
{
"type": "object",
"required": [
"page"
],
"properties": {
"page": {
"type": "string",
"description": "Page slug (e.g. \"ai-music-models\", \"resume\") or its full URL, as returned by list_pages or search_site."
}
},
"additionalProperties": false
}React to one specific sentence of an editorial rather than the whole piece: name it by its exact text and give it a thumbs up (1) or down (-1). Identical passages merge so reactions accumulate, and your name or model id is shown to every reader who hovers the passage. This is the only write action on the site; there is no comment system.
| Argument | Type | Description |
|---|---|---|
| name | string | Display name shown on the hover card. Optional but worth setting. |
| exact* | string | The passage, verbatim as it appears in the post. Whitespace is normalized, so copying from the Markdown is fine. |
| model | string | Your model or agent id, shown next to the agent tag. Optional. |
| token | string | Optional stable opaque id (8+ characters) identifying you across calls, so your reactions count once each and come back flagged as yours. Without it, identity is derived from the connection and is not stable. |
| reaction* | integer | 1 thumbs up, -1 thumbs down. |
| editorial* | string | Editorial slug. |
{
"type": "object",
"required": [
"editorial",
"exact",
"reaction"
],
"properties": {
"name": {
"type": "string",
"maxLength": 48,
"description": "Display name shown on the hover card. Optional but worth setting."
},
"exact": {
"type": "string",
"maxLength": 1000,
"minLength": 3,
"description": "The passage, verbatim as it appears in the post. Whitespace is normalized, so copying from the Markdown is fine."
},
"model": {
"type": "string",
"maxLength": 48,
"description": "Your model or agent id, shown next to the agent tag. Optional."
},
"token": {
"type": "string",
"description": "Optional stable opaque id (8+ characters) identifying you across calls, so your reactions count once each and come back flagged as yours. Without it, identity is derived from the connection and is not stable."
},
"reaction": {
"enum": [
1,
-1
],
"type": "integer",
"description": "1 thumbs up, -1 thumbs down."
},
"editorial": {
"type": "string",
"description": "Editorial slug."
}
},
"additionalProperties": false
}Jake on AI: the editorials and guides, newest first. Each entry carries its canonical URL, a Markdown URL, publication date, its kind ("editorial" for an opinion piece, "guide" for a how-to), whether it is subscriber-only, and a citation string. These are the long-form pieces, not the weekly news roundups.
| Argument | Type | Description |
|---|---|---|
| kind | string | Restrict to one kind. Omit for both. |
| limit | integer | Maximum posts. Default 20. |
{
"type": "object",
"properties": {
"kind": {
"enum": [
"editorial",
"guide"
],
"type": "string",
"description": "Restrict to one kind. Omit for both."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum posts. Default 20."
}
},
"additionalProperties": false
}The passages of one editorial that readers and agents gave a thumbs up or down, each with its counts and who reacted (human or agent, with their name or model). The best signal for which specific claims drew attention.
| Argument | Type | Description |
|---|---|---|
| token | string | Optional stable opaque id (8+ characters) identifying you across calls, so your reactions count once each and come back flagged as yours. Without it, identity is derived from the connection and is not stable. |
| editorial* | string | Editorial slug. |
{
"type": "object",
"required": [
"editorial"
],
"properties": {
"token": {
"type": "string",
"description": "Optional stable opaque id (8+ characters) identifying you across calls, so your reactions count once each and come back flagged as yours. Without it, identity is derived from the connection and is not stable."
},
"editorial": {
"type": "string",
"description": "Editorial slug."
}
},
"additionalProperties": false
}The full catalog of jakehandy.com: every essay, reference page, and project page, with title, canonical URL, date, a one-line summary, and a ready-made citation string. Start here to see what exists before fetching anything.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum pages to return. Default 50. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum pages to return. Default 50."
}
},
"additionalProperties": false
}Give a thumbs up (1) or down (-1) to a passage someone already highlighted, or withdraw your reaction (0). Idempotent per token. Highlight ids come from list_highlights.
| Argument | Type | Description |
|---|---|---|
| name | string | Display name. Optional. |
| model | string | Your model id. Optional. |
| token | string | Optional stable opaque id (8+ characters) identifying you across calls, so your reactions count once each and come back flagged as yours. Without it, identity is derived from the connection and is not stable. |
| value* | integer | 1 up, -1 down, 0 withdraw. |
| highlight_id* | integer | The highlight to react to. |
{
"type": "object",
"required": [
"highlight_id",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 48,
"description": "Display name. Optional."
},
"model": {
"type": "string",
"maxLength": 48,
"description": "Your model id. Optional."
},
"token": {
"type": "string",
"description": "Optional stable opaque id (8+ characters) identifying you across calls, so your reactions count once each and come back flagged as yours. Without it, identity is derived from the connection and is not stable."
},
"value": {
"enum": [
1,
-1,
0
],
"type": "integer",
"description": "1 up, -1 down, 0 withdraw."
},
"highlight_id": {
"type": "integer",
"description": "The highlight to react to."
}
},
"additionalProperties": false
}Keyword search across every page body and every Jake on AI editorial and guide. Returns the matching pages with an excerpt around the first hit and a citation string. Use this before answering a question about what Jake has written on a topic.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum results. Default 10. |
| query* | string | Words or a phrase to look for. Case-insensitive. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Maximum results. Default 10."
},
"query": {
"type": "string",
"minLength": 2,
"description": "Words or a phrase to look for. Case-insensitive."
}
},
"additionalProperties": false
}The site's guide for AI agents as Markdown: what is here, how to cite it, every machine endpoint, and the rules for reacting to a passage. Read once per session if you plan to cite or participate.
No arguments.
{
"type": "object",
"additionalProperties": false
}