Skip to content

Software Engineer & Architect

I connect legacy protocols to modern AI.

Author of open-source MCP servers for Bluesky, the Fediverse, and even Gopher. 20+ years shipping production software in TypeScript and .NET.

hiring → the resumefellow engineer → the labbuilding with agents → llms.txt

agent @ rye.devsnapshot
traversal
→ GET /.well-known/api-catalog
  200 8ms · api-catalog links 5 resources
→ GET /llms.txt
  200 13ms · 7 top-level sections
→ GET /.well-known/mcp/server-card.json
  200 18ms · 12 tools — search_posts, search_site, get_post…
→ GET /blog/making-my-portfolio-agent-readable.md
  200 23ms · "Making My Portfolio Agent-Readable: From Files to an Interface Agents Can Act On"
→ GET /openapi.json
  200 28ms · 6 documented paths
▮ agent found its way around in 90ms

call a tool · real POST /mcp
// click a tool above — the live JSON-RPC response shows here

A replay of an AI agent reading this site; the tool buttons make real MCP calls, not canned ones.

20+ years shipping4 open-source MCP servers15 projects100% agent-readable

01 — Production systems

  • At Universal Logistics: a warehouse platform moving 50K+ shipments a day; order fulfillment time down 30%.
  • At Fortis: serverless payments clearing $50M+ a year at 99.9% uptime.
  • At Zbox.com: the platform grew from 50K to 200K monthly active users; error rate stayed under 1%.

Full history →

03 — Built for agents

Built for humans and AI agents

This site is built for machines too. Point an agent at this domain and it finds its own way around — here's what it sees.

GET /.well-known/mcp/server-card.jsonpublishedopen ↗
{
  "serverInfo": {
    "name": "rye.dev",
    "version": "1.2.0",
    "title": "Cameron Rye Portfolio MCP Server",
    "description": "Access to Cameron Rye's published blog posts, projects, resume, and other portfolio content, plus his current focus (/now), reading list, and live PII-free site stats. Two write tools (contact form, newsletter signup) share the same validation and per-IP rate limits as the site's own forms. Read-only resources mirror the hand-authored markdown page variants. Useful for agents answering questions about the author, summarising/searching published writing, checking what he's up to right now, or getting in touch."
  },
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://rye.dev/mcp"
  },
  "capabilities": [
    "tools",
    "resources"
  ],
  "tools": [
    {
      "name": "search_posts",
      "description": "Full-text search across blog posts. Returns up to 10 matches with slug, title, date, and excerpt."
    },
    {
      "name": "search_site",
      "description": "Semantic (vector similarity) search across blog posts and projects, via the same Cloudflare Vectorize retrieval the Ask chatbot uses. Finds conceptually related content even when the query words don't appear verbatim. Returns scored results with title, URL, and snippet."
    },
    {
      "name": "get_post",
      "description": "Fetch a single blog post by slug. Returns frontmatter and full markdown body."
    },
    {
      "name": "list_posts",
      "description": "List recent blog posts in reverse-chronological order."
    },
    {
      "name": "list_projects",
      "description": "List portfolio projects with brief descriptions."
    },
    {
      "name": "get_project",
      "description": "Fetch a single project by slug. Returns frontmatter and full markdown body."
    },
    {
      "name": "get_about",
      "description": "Return the public profile / bio in markdown."
    },
    {
      "name": "get_now",
      "description": "Return what Cameron is currently working on, learning, building, reading, and up to in life (the /now page sections)."
    },
    {
      "name": "get_reading",
      "description": "Return Cameron's reading list — books currently reading, finished, or abandoned, with notes. Optional status filter."
    },
    {
      "name": "get_pulse",
      "description": "Return live, PII-free site stats: Core Web Vitals p75s, 30-day pageviews, uptime %, top-reacted pages, and last deploy."
    },
    {
      "name": "submit_contact",
      "description": "Send Cameron a message through the site contact form. Same validation and per-IP rate limits as the form itself."
    },
    {
      "name": "subscribe_newsletter",
      "description": "Subscribe an email address to the newsletter. Sends a confirmation email; subscription activates only once confirmed."
    }
  ],
  "resources": [
    {
      "uri": "https://rye.dev/index.md",
      "name": "index",
      "mimeType": "text/markdown"
    },
    {
      "uri": "https://rye.dev/about.md",
      "name": "about",
      "mimeType": "text/markdown"
    },
    {
      "uri": "https://rye.dev/now.md",
      "name": "now",
      "mimeType": "text/markdown"
    },
    {
      "uri": "https://rye.dev/uses.md",
      "name": "uses",
      "mimeType": "text/markdown"
    },
    {
      "uri": "https://rye.dev/colophon.md",
      "name": "colophon",
      "mimeType": "text/markdown"
    },
    {
      "uri": "https://rye.dev/reading.md",
      "name": "reading",
      "mimeType": "text/markdown"
    },
    {
      "uri": "https://rye.dev/resume.md",
      "name": "resume",
      "mimeType": "text/markdown"
    },
    {
      "uri": "https://rye.dev/blogroll.md",
      "name": "blogroll",
      "mimeType": "text/markdown"
    }
  ],
  "documentation": "https://rye.dev/.well-known/agent-skills/index.json"
}
site pulseas of 2026-06-23cached
web vitals p75LCP 1.6s ● INP 56ms ● CLS 0.00 ●· 28d
pageviews 30d 1,887 total
uptime100% · 49ms avg
most loved/blog/web-development-best-… ♥8 /blog/well-known-uris-stand… ♥6 /blog/open-source-contribut… ♥5
last deploydf08120 "Merge pulse web-vitals honesty: trailin…" Jun 24

Web vitals (28-day p75): LCP good, INP good, CLS good. Pageviews last 30 days: 1887 total. Uptime 100 percent.

Live telemetry from this site: page speed, traffic, and uptime.

04 — Expertise

Technical Expertise

Protocols & AI

Model Context ProtocolA2AActivityPubAT ProtocolGopherOAuth/OIDC

Building

TypeScriptRust.NET / C#PreactEdge / Cloudflare Workers

Systems

Agent infrastructureAPI & protocol designlibSQL/TursoRAGDistributed state

06 — What colleagues say

“He led our .NET Framework to .NET 6 migration without pausing feature work. Deploys went from monthly to weekly and stayed there.”

Engineering manager — Universal Logistics

“The code reviews were the actual mentorship — specific, patient, always about the code. Three of the four of us he mentored were promoted within eighteen months.”

Junior developer, since promoted — Fortis

“We stopped rebuilding the same components in every app. His Storybook library became the starting point for twelve-plus applications, and UI work that took a week now takes about three days.”

Frontend engineer — Fortis

07 — Contact

Let's Connect

I'm not looking for new roles right now, but I'm always happy to talk shop — my open-source projects, MCP servers, or anything you've read here.

or view my resume