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. Twenty years shipping production software in TypeScript and .NET.

agent @ rye.devsnapshot
→ 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 · 9 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

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

02 — 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.0.0",
    "title": "Cameron Rye Portfolio MCP Server",
    "description": "Read-only 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. Useful for agents answering questions about the author, summarising/searching published writing, or checking what he's up to right now."
  },
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://rye.dev/mcp"
  },
  "capabilities": [
    "tools"
  ],
  "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."
    }
  ],
  "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.

03 — Expertise

Technical Expertise

Protocols & AI

Model Context ProtocolA2AActivityPubAT ProtocolGopherOAuth/OIDC

Building

TypeScriptRust.NET / C#PreactEdge / Cloudflare Workers

Systems

Agent infrastructureAPI & protocol designlibSQL/TursoRAGDistributed state

05 — 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