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 · 11 tools — search_posts, get_post, list_posts…
→ 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.1.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": "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