{
  "serverInfo": {
    "name": "rye.dev",
    "version": "1.3.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" },
    { "uri": "ui://pulse/dashboard", "name": "pulse-dashboard", "mimeType": "text/html;profile=mcp-app" }
  ],
  "documentation": "https://rye.dev/.well-known/agent-skills/index.json"
}
