mondello.dev · agent-era surface atlas

Agents on mondello.dev

Every way an agent, LLM, or agent-curious developer can consume this blog. Use Claude Code? Start with the MCP server. Prefer plain HTTP? The JSON APIs below are self-describing. Want the whole site in one call? /archive.md.

Every surface documented here is covered by an end-to-end test in pnpm verify against production. The numbers in /stats come from the same shared libraries as the MCP tools — zero drift.

Install once, ten tools

Model Context Protocol

  • MCP server (Streamable HTTP)

    /api/mcp

    Claude Code + any MCP-aware client installs mondello.dev as a live tool source. JSON-RPC 2.0 over POST. Tools below.

    claude mcp add mondello https://mondello.dev/api/mcp
  • search_cues

    /api/mcp (tools/call)

    Audio-timestamped full-text search across every narrated post. Each hit carries a deep-link that auto-seeks the AudioPlayer.

    curl -sX POST https://mondello.dev/api/mcp -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_cues","arguments":{"query":"x402","limit":5}}}'
  • list_posts · get_post_markdown · get_post_outline

    /api/mcp

    Walk the corpus (list_posts), fetch bodies as Markdown (get_post_markdown), or see structure first (get_post_outline) to decide what to pull.

  • find_similar_posts

    /api/mcp

    tf-idf + cosine similarity over full post bodies. Smarter than tag overlap.

  • get_cue_at_time

    /api/mcp

    Timestamp → spoken text. Closes the audio-addressability loop (text → timestamp via search_cues; timestamp → text here).

  • get_site_stats · get_latest · get_changelog · get_archive

    /api/mcp

    One-shot observability: whole-site shape, freshness pulse, filtered ship log, or the entire blog as a single Markdown doc.

  • get_random_quote · get_featured_cue · search_all

    /api/mcp

    Quote-of-the-day picker (random or seeded), one post's most-quotable cue, and unified post+cue+tag search. Five surfaces (REST, OG card, MCP, Schema.org, visible pull quote) all share one pickFeaturedCue() scorer.

  • list_skills · get_skill_preview

    /api/mcp

    Browse + preview the x402 skills marketplace through MCP. list_skills returns the catalog with currency=USDC + network=eip155:8453 so x402-aware agents can budget the buy in one round-trip; get_skill_preview returns the explicit free-preview block (full body stays behind the 402 at /skills/<slug>/raw).

    curl -sX POST https://mondello.dev/api/mcp -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_skills","arguments":{}}}'
Pure REST for non-MCP clients

JSON APIs

  • Search cues across narrations

    /api/search/cues.json?q=QUERY

    Same data as MCP search_cues. deepLinkUrl in every hit.

    curl "https://mondello.dev/api/search/cues.json?q=x402&limit=5" | jq '.hits[0]'
  • Cue at timestamp

    /api/posts/<slug>/cue-at.json?t=SECONDS

    Given a slug + audio seconds, returns the cue being spoken, plus prev + next for context.

  • Similar posts (tf-idf)

    /api/similar/<slug>.json

    Semantic neighbors with cosine scores and shared salient terms.

  • Post outline

    /posts/<slug>.outline.json

    Flat heading tree with audio startSeconds per section. Cheap discovery step.

  • Random narrated cue

    /api/random-cue.json

    Serendipity endpoint. Cache-Control: no-store so every call rolls fresh.

  • Quote wall + random quote

    /api/quotes.json · /api/quotes/random.json

    Every narrated post's featured cue in one payload (sorted by score), plus a single-pick endpoint for 'quote of the day' surfaces. Browseable HTML at /quotes. MCP tool: get_random_quote.

    curl -s https://mondello.dev/api/quotes/random.json | jq .quote
  • Site stats + Latest pulse + Changelog

    /stats.json · /api/latest.json · /api/changelog.json

    Three composite freshness views. Shared buildSiteStats() + changelog module → zero drift between surfaces.

Same source, five formats

Content exports

  • Full archive (one Markdown file)

    /archive.md

    Every post concatenated with per-post YAML frontmatter + `---` separators. ~47KB, newest first.

    curl -s https://mondello.dev/archive.md | claude -p "summarize this blog"
  • Per-post: HTML · Markdown · ANSI · VTT · BibTeX

    /posts/<slug>(.md | .ansi | .vtt | .bib)

    One PortableText source, five serializers. ANSI for terminal reading; VTT for synced transcripts; .bib for Zotero / Mendeley.

    curl -s https://mondello.dev/posts/eight-plugins-one-session.ansi | less -R
Subscribe everything, import once

Syndication feeds

  • RSS · Atom · JSON Feed · Podcast

    /rss.xml · /atom.xml · /feed.json · /podcast.xml

    All four site-wide feeds with full post bodies + audio enclosures. Podcast feed ships Podcasting 2.0 extensions (chapters, transcripts, license, funding, person).

  • Per-tag feeds

    /tag/<slug>/rss.xml · /tag/<slug>/atom.xml · /tag/<slug>/feed.json

    Topic-filtered syndication. Enumerated in /feeds.opml.

  • Changelog RSS

    /changelog.xml

    145+ entries of shipping history. Permalinks land on the right anchor on the HTML page.

  • OPML subscription bundle

    /feeds.opml

    One-click bulk import into Feedly / Inoreader / NetNewsWire / Pocket Casts / Podverse.

Agents pay in USDC on Base

x402 paid surfaces

  • Gated endpoints (5)

    /api/export/posts · /llms-full.txt · /skills/<slug>/raw · …

    Return HTTP 402 + x402 v2 accepts block. Payment via EIP-712 TransferWithAuthorization on Base USDC. See /stats for live prices.

For any crawler

Discovery

  • llms.txt · OpenAPI · sitemap.xml · robots.txt

    /llms.txt · /openapi.json · /sitemap.xml · /robots.txt

    Every agent-facing URL enumerated. robots.txt explicitly allows 16 known AI bots.

  • Schema.org + microformats2

    Post pages

    BlogPosting + PodcastEpisode + AudioObject + SpeakableSpecification + Person JSON-LD; h-entry + h-card microformats2 for IndieWeb readers.

Keyboard shortcuts

+ K
Focus search
Space
Play / pause current audio
Seek back / forward 5 seconds
J L
Seek back 10s / forward 30s (podcast-style)
[ ]
Jump to previous / next paragraph (post pages)
F
Toggle ✨ follow-along karaoke
T
Toggle 📝 transcript panel
C
Copy link at current audio timestamp
?
Toggle this dialog
Esc
Close this dialog

Audio controls work on any page with an <audio> — they follow whichever player is currently playing.