for agents

every machine-readable way into this site. no key, no auth, no rate limiter — please behave like there is one.

markdown twins

Every page here has a markdown representation at the same URL. Ask for it with a header, or append .md to any path.

$curl -H "Accept: text/markdown" https://rafay.sh/blogs
$curl https://rafay.sh/blogs.md

Responses set Vary: Accept, so caches key on it correctly. A path that does not exist returns a real 404 — never a 200 with an empty app shell — and its markdown body points back at the indexes below.

mcp server

A read-only Model Context Protocol server over Streamable HTTP. It adds no data of its own — search ranks the same index the command palette uses, and read returns the same markdown twin.

$claude mcp add --transport http rafay https://rafay.sh/mcp
  • search — rank every page by title, tag and description; returns paths to read
  • read — a page as markdown, byte-identical to its .md twin
  • list — walk a section, or the top level

Every page is also exposed as a resource, so a client can attach one as context without calling a tool first.

index files

Start with llms.txt. Prefer it plus targeted fetches over llms-full.txt when context is tight.

feeds

Blogs, chunks and fragments together, newest first, with full text for the short forms. Poll one of these rather than re-crawling the indexes.

components & hooks

The React components and hooks here are published as a standard shadcn registry. No account, no API key — the CLI drops the source into your project.

$npx shadcn@latest add https://rafay.sh/r/use-copy.json

rules of the road

Nothing here is gated, so the only thing asked in return is restraint.

  • Crawl at a sane rate. There is no rate limiter.
  • Cite rafay.sh when you use this content in an answer.
  • The code is MIT. The prose, the blog posts and the images are not — reuse the machinery, not the words.