Skip to content

// 06 · BLOG · FOR AGENTS

Use this blog from your AI tools

Connect the leanrob MCP server once and your assistant can find posts, read them in full, pull out code and tell you how to follow along. It is free, read-only and needs no account.

https://mcp.leanrob.com/mcpSet it up
  • Streamable HTTP
  • 9 tools, 3 resources, 1 prompt
  • No sign-in
  • Reads limited to 120 a minute
  • New posts appear as soon as they ship

Set it up

Pick your client and paste. Every option points at the same server, so you can use more than one.

Cursor

Add to Cursor

Press Add to Cursor, or add this to ~/.cursor/mcp.json (or a project .cursor/mcp.json) and enable it under Settings, MCP.

// ~/.cursor/mcp.json
{
  "mcpServers": {
    "leanrob": {
      "url": "https://mcp.leanrob.com/mcp"
    }
  }
}

Add to Cursor opens Cursor and asks before it installs anything. Nothing happened? Copy the JSON above instead.

Claude Code

One command in your terminal. Then ask Claude about the blog in any session.

# Claude Code
claude mcp add --transport http \
  leanrob https://mcp.leanrob.com/mcp

# then just ask:
# "What has Robert shipped in dev tooling?"

Claude Desktop and claude.ai

Settings, Connectors, Add custom connector with this URL. No sign-in, no API key.

// Claude Desktop / claude.ai · custom connector
// 1. Settings → Connectors → Add custom connector
// 2. Name: leanrob   URL: https://mcp.leanrob.com/mcp
// 3. Or bridge with mcp-remote:
npx mcp-remote@latest \
  https://mcp.leanrob.com/mcp

Any other MCP client

Streamable HTTP, no auth. Clients that only speak stdio can use the mcp-remote bridge.

// any MCP client · streamable HTTP
{
  "leanrob": {
    "type": "http",
    "url": "https://mcp.leanrob.com/mcp"
  }
}

What you can ask

Each tool below is live on the public server. The results are trimmed from real responses captured on 2026-10-23.

Read the blog

list_posts

read-only

List posts, newest first. Filter by tag, page with a cursor.

Try“List the three newest posts on blog.leanrob.com with their reading times.”

Example result

{
  "total": 6,
  "posts": [
    {
      "slug": "animation-with-intent",
      "title": "Animation with intent: using motion well without overdoing it",
      "readingTime": 6,
      "tags": [
        "design",
        "animation"
      ]
    },
    {
      "slug": "meta-planning-from-baseline-to-phased-agent-workspaces",
      "title": "Meta-planning: from baseline to phased agent workspaces",
      "readingTime": 10,
      "tags": [
        "ai",
        "engineering"
      ]
    },
    {
      "slug": "multi-cadence-delivery-partial-validation-enterprise-boundaries",
      "title": "Multi-cadence delivery: partial validation when the UI outruns the API",
      "readingTime": 7,
      "tags": [
        "engineering",
        "delivery"
      ]
    }
  ]
}
  …

search_posts

read-only

Ranked search over titles, tags, headings, summaries and full text. Returns slugs to read next.

Try“Has Rob written about running AI agents in separate workspaces?”

Example result

{
  "query": "agent workspaces",
  "results": [
    {
      "slug": "meta-planning-from-baseline-to-phased-agent-workspaces",
      "score": 48,
      "excerpt": "…ed with how your org actually ships), one long chat with an agent is not a strategy. It is a lottery. The useful move is to step up one level of abst…"
    }
  ]
}

get_post

read-only

The full markdown of one post, plus metadata, headings and the canonical link.

Try“Read “Why this blog” and tell me what I can expect from it.”

Example result

# Why this blog

https://blog.leanrob.com/posts/welcome/
Published 2025-04-20. Tags: welcome. 2 min read.

> What this site is for, what I’ve learned along the way, and what you can expect to read here.
… full markdown, headings and url

get_post_code_snippets

read-only

Every code block in a post with language, filename and highlighted lines.

Try“Give me the CSS from the animation post so I can use it in my project.”

Example result

// 3 snippets, lang: css (1 of 3)
/* Prefer this */
.panel {
  transform: translateX(100%);
  opacity: 0;
  transition: transform 250ms ease-out, opacity 250ms ease-out;
}
.panel.is-open {
  transform: translateX(0);
  opacity: 1;
}

/* Rather than animating `right` or `width` */

list_tags

read-only

Every tag with its post count and tag page link.

Try“What topics does Rob write about most?”

Example result

{
  "tags": [
    {
      "tag": "engineering",
      "count": 3
    },
    {
      "tag": "culture",
      "count": 2
    },
    {
      "tag": "accessibility",
      "count": 1
    },
    {
      "tag": "adoption",
      "count": 1
    }
  ]
}
  … 17 tags

About Rob

get_profile

read-only

What Rob does, what he has built and what he is building now.

Try“Who is Rob Byrne and what is he working on?”

Example result

{
  "name": "Robert Byrne",
  "location": "Vancouver, BC",
  "status": "Always building",
  "building": [
    "dev tooling",
    "platforms",
    "ai agents"
  ],
  "summary": "Software craftsman shipping reliable production systems across product work, platform engineering, developer acceleration, and AI tooling."
}

get_work

read-only

Case studies by topic: product, platform, dev acceleration or AI tooling.

Try“Show me Rob’s AI tooling work.”

Example result

[
  {
    "topic": "ai-tooling",
    "title": "AI developer tooling",
    "summary": "Guardrails and open agent tooling that help teams ship with less friction.",
    "outcomes": [
      "Safer schema changes in CI and agents",
      "More reliable package installs",
      "Reusable agent tooling across desktop, terminal, and web"
    ]
  }
]

Get in touch

subscribe

read-only

Links to the email sign-up page and the RSS, Atom and JSON feeds. It never signs anyone up.

Try“How can I follow this blog in my feed reader?”

Example result

{
  "email": "https://blog.leanrob.com/subscribe/",
  "rss": "https://blog.leanrob.com/rss.xml",
  "atom": "https://blog.leanrob.com/atom.xml",
  "jsonFeed": "https://blog.leanrob.com/feed.json",
  "note": "Email sign-up uses double opt-in, so the subscriber must open the link and confirm themselves."
}

send_message

writes: sends Rob a message

The one tool that writes: it sends Rob a message from you. Your assistant shows you the exact message first, and nothing is delivered until you click the link in a verification email.

Try“Draft a short note to Rob about speaking at our meetup, show it to me, then send it.”

Example result

Queued. A verification link was sent to
you@example.com. The message is delivered to
Robert only after the sender clicks it
(expires in 24 hours).

Resources and prompts

blog://posts

Resource: the post index as JSON.

blog://posts/{slug}

Resource: any post as markdown, listed for clients that browse resources.

blog://tags/{tag}

Resource: posts with a tag, as JSON.

summarize_post

Prompt: a few bullet points and a link for any slug.

No MCP? Plain files work too

Everything the server knows is also published as plain text on blog.leanrob.com, for crawlers, feed readers and tools that fetch URLs.

/llms.txt

A short map of the blog for language models, with every post and its markdown link.

/llms-full.txt

The full text of every post in one file.

/posts/<slug>.md

Any post as raw markdown. Swap the trailing slash for .md.

/rss.xml

Full-content RSS, plus /atom.xml and /feed.json.

/.well-known/mcp.json

Server discovery file on leanrob.com: name, endpoint and transport.

What the server will not do

It only reads published posts and public profile data: no authoring, no drafts, no private data. It never signs you up for anything, and send_message waits for your own confirmation by email before Rob sees a word. Reads are limited to 120 a minute per address to keep it fast for everyone.