jakehandy.com

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

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
84%
命名质量
92%
投毒风险
80%
权限匹配度
100%
协议合规性
100%

发现(2)

  • HIGHTool poisoning patterns detected
  • LOWTool description contains role marker that could confuse chat models在 list_editorials 中

基于对工具定义和协议合规性的自动分析。

上下文开销

~1,652token 数(工具定义)
~966 B典型响应大小
对注意力有中等影响(占 128k 上下文窗口的 1.29%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

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

远程端点

https://jakehandy.com/mcpstreamable-http

它能做什么

工具清单

工具(10)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

{
  "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.

输入模式

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

社区

评价此服务器

证据

最近观测

已验证未记录版本10 个工具
已验证未记录版本10 个工具