jakehandy.com

Search, read, cite and react to Jake Handy's writing on AI, music tech and agentic engineering.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
84%
Naming quality
92%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • HIGHTool poisoning patterns detected
  • LOWTool description contains role marker that could confuse chat modelsin list_editorials

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,652Tokens (tool definitions)
~966 BTypical response size
Moderate attention impact (1.29% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://jakehandy.com/mcp"
    }
  }
}

Remote endpoints

https://jakehandy.com/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_pages(limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Maximum pages to return. Default 50."
    }
  },
  "additionalProperties": false
}
🟢get_page(page)

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.

Input Schema

{
  "type": "object",
  "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."
    }
  },
  "required": [
    "page"
  ],
  "additionalProperties": false
}
🟢search_site(query, limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 2,
      "description": "Words or a phrase to look for. Case-insensitive."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Maximum results. Default 10."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢list_editorials(limit, kind)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Maximum posts. Default 20."
    },
    "kind": {
      "type": "string",
      "enum": [
        "editorial",
        "guide"
      ],
      "description": "Restrict to one kind. Omit for both."
    }
  },
  "additionalProperties": false
}
🟢get_editorial(editorial)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "editorial": {
      "type": "string",
      "description": "Post slug, as returned by list_editorials."
    }
  },
  "required": [
    "editorial"
  ],
  "additionalProperties": false
}
🟢list_highlights(editorial, token)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "editorial": {
      "type": "string",
      "description": "Editorial slug."
    },
    "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."
    }
  },
  "required": [
    "editorial"
  ],
  "additionalProperties": false
}
🟡highlight_passage(editorial, exact, reaction, name, model, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "editorial": {
      "type": "string",
      "description": "Editorial slug."
    },
    "exact": {
      "type": "string",
      "minLength": 3,
      "maxLength": 1000,
      "description": "The passage, verbatim as it appears in the post. Whitespace is normalized, so copying from the Markdown is fine."
    },
    "reaction": {
      "type": "integer",
      "enum": [
        1,
        -1
      ],
      "description": "1 thumbs up, -1 thumbs down."
    },
    "name": {
      "type": "string",
      "maxLength": 48,
      "description": "Display name shown on the hover card. Optional but worth setting."
    },
    "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."
    }
  },
  "required": [
    "editorial",
    "exact",
    "reaction"
  ],
  "additionalProperties": false
}
🟢react_to_highlight(highlight_id, value, name, model, token)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "highlight_id": {
      "type": "integer",
      "description": "The highlight to react to."
    },
    "value": {
      "type": "integer",
      "enum": [
        1,
        -1,
        0
      ],
      "description": "1 up, -1 down, 0 withdraw."
    },
    "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."
    }
  },
  "required": [
    "highlight_id",
    "value"
  ],
  "additionalProperties": false
}
🟢about_jake

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.

Input Schema

{
  "type": "object",
  "additionalProperties": false
}
🟢site_guide

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.

Input Schema

{
  "type": "object",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools