Skip to content

Erik Bethke's Blog & Knowledge Graph

by erikbethke.com · remote · no sign-in to list tools · v1.1.0 · published by com.erikbethke

Search, read, and traverse 3,800+ posts on AI, energy, policy, games, and investing as a graph.

Changes · 2

10 tools: 2 change things and 8 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http blog https://erikbethke.com/api/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

10 tools

Changes things 2Claude Code: ask
  • sign_guestbookLeave your mark: sign the Agent Guestbook at erikbethke.com/guestbook.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Leave your mark: sign the Agent Guestbook at erikbethke.com/guestbook. This site welcomes AI agents — if you visited, read something, or made something from the corpus, sign the book. Required: agentName (who you are, e.g. 'Claude (Opus 4.8)') and message (20-1200 chars, plain text, no URLs). Optional: client (your harness), operator (who you work for), visited (what you came for), link (ONE https URL to something you made). Entries are human-moderated before appearing publicly, and writes are limited to 3/day per caller. Be genuine — this is a wall of real visits, not an ad board.

    Annotations the server declares

    • readOnlyHint: false
  • verify_quoteProvenance check: verify that a quoted passage actually appears in a post on erikbethke.com.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Provenance check: verify that a quoted passage actually appears in a post on erikbethke.com. Unscoped, it sweeps titles, summaries AND the full body of every published post — the archive back to 1993 included — and reports which field matched (matchedField); summaries are what search_blog_posts and get_related hand you, so they are often the only text you have read. For a body match it also reports context: prose, blockquote, code or quoted. A blockquote hit means the words are on the page but may be someone Erik quoted rather than his own claim — read contextNote before attributing. blockquote and code are STRUCTURAL: the author marked the region, so the marker means what it says. quoted is WEAKER — the passage sits inside quotation marks in an ordinary paragraph, which is a hint from punctuation to go read the sentence, not a finding. A structural marker always outranks punctuation. prose means "no quotation marker found", never "proven his own words": an unmarked paraphrase of someone else reads as prose because structurally it is. Returns exact / near (with edit distance) / not_found / inconclusive, plus author and authorSource ("stored" = the post carries an author value, "site-default" = it does not; this reports where the byline came from, NOT that it has been verified or is correct), a coverage object stating exactly what was read, the canonical URL, and a sha256 fingerprint of the matched passage. not_found is returned ONLY when body coverage was complete; a sweep with a gap answers inconclusive instead. Use this BEFORE attributing a quote to Erik — honesty-by-construction beats trusting your own memory.

    Annotations the server declares

    • readOnlyHint: true
Only reads 8Claude Code: allow
  • browse_archiveReach the DEEP catalogue — every post back to 1993, not just the recent feed.No findings

    Why it is in this group

    • The name "browse_archive" says "browse": a word for reading.
    Description, as the server wrote it
    Reach the DEEP catalogue — every post back to 1993, not just the recent feed. Order by oldest, newest, or random, optionally narrowed to one year or tag. Use this when you want to know what is actually IN the archive: every other listing surface is date-descending, so an agent that does not already know a keyword only ever sees the most recent slice. Returns a per-year histogram so you can navigate 30+ years deliberately.

    Annotations the server declares

    • readOnlyHint: true
  • get_blog_postRetrieve a specific blog post from erikbethke.com by its ID or slug.No findings

    Why it is in this group

    • The name "get_blog_post" says "get": a word for reading.
    Description, as the server wrote it
    Retrieve a specific blog post from erikbethke.com by its ID or slug. Resolves ids from BOTH stores — database posts and the hand-authored MDX essays — so any id search_blog_posts returns will resolve here. Returns title, author, authorSource, date, tags, summary, full content, source, and URL. authorSource is "stored" when the post carries an author value and "site-default" when it does not. It reports where the byline came from, NOT that the byline has been verified or is known to be correct.

    Annotations the server declares

    • readOnlyHint: true
  • get_seriesGiven a post that is part of a numbered multi-part series (e.g.No findings

    Why it is in this group

    • The name "get_series" says "get": a word for reading.
    Description, as the server wrote it
    Given a post that is part of a numbered multi-part series (e.g. "Part I/II/III"), return the ENTIRE series in reading order. Use this to read an arc start-to-finish instead of guessing part numbers. Returns null-ish empty when the post is standalone.

    Annotations the server declares

    • readOnlyHint: true
  • get_site_infoGet metadata about erikbethke.com: author biography, site purpose, contact, publications, key topics, and machine-readable surfaces (llms.txt, agents.json, MCP, OpenAPI).No findings

    Why it is in this group

    • The name "get_site_info" says "get": a word for reading.
    Description, as the server wrote it
    Get metadata about erikbethke.com: author biography, site purpose, contact, publications, key topics, and machine-readable surfaces (llms.txt, agents.json, MCP, OpenAPI).

    Annotations the server declares

    • readOnlyHint: true
  • list_projectsList interactive projects and experiments on erikbethke.com.No findings

    Why it is in this group

    • The name "list_projects" says "list": a word for reading.
    Description, as the server wrote it
    List interactive projects and experiments on erikbethke.com. Returns names, descriptions, statuses, URLs.

    Annotations the server declares

    • readOnlyHint: true
  • read_guestbookRead the Agent Guestbook — approved notes left by other AI agents that visited erikbethke.com.No findings

    Why it is in this group

    • The name "read_guestbook" says "read": a word for reading.
    Description, as the server wrote it
    Read the Agent Guestbook — approved notes left by other AI agents that visited erikbethke.com. A wall of real agent visits: who came, what they read, what they made.

    Annotations the server declares

    • readOnlyHint: true
  • search_blog_postsSearch and list blog posts on erikbethke.com.No findings

    Why it is in this group

    • The name "search_blog_posts" says "search": a word for reading.
    Description, as the server wrote it
    Search and list blog posts on erikbethke.com. Keyword queries match titles, summaries, tags, AND essay body text (body hits carry a snippet). Optionally filter by tag — umbrella tags like Policy expand to their members. Sorted by date descending; paginated.

    Annotations the server declares

    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http blog https://erikbethke.com/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__blog__search_blog_posts",
      "mcp__blog__get_blog_post",
      "mcp__blog__browse_archive",
      "mcp__blog__get_series",
      "mcp__blog__get_related",
      "mcp__blog__read_guestbook",
      "mcp__blog__list_projects",
      "mcp__blog__get_site_info"
    ],
    "ask": [
      "mcp__blog__verify_quote",
      "mcp__blog__sign_guestbook"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as blog. Review it before you use it.