{"serverId":"mcp-registry/dev.rye/portfolio","tools":[{"name":"get_about","fixed":{"name":"get_about","description":"Return a short bio about Cameron Rye, the portfolio owner.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get author profile"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":55,"tokensAfter":55},{"name":"get_now","fixed":{"name":"get_now","description":"Return what Cameron is currently working on, learning, building, reading, and up to in life — the live /now page sections.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get current focus (/now)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":72,"tokensAfter":72},{"name":"get_post","fixed":{"name":"get_post","description":"Return the full markdown body and frontmatter of a post by slug.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","minLength":1}}},"annotations":{"readOnlyHint":true},"title":"Get blog post"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":72,"tokensAfter":72},{"name":"get_project","fixed":{"name":"get_project","description":"Return the full markdown body and frontmatter of a project by slug.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","minLength":1}}},"annotations":{"readOnlyHint":true},"title":"Get project"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":74,"tokensAfter":74},{"name":"get_pulse","fixed":{"name":"get_pulse","description":"Return live, PII-free operational stats for rye.dev: recent Core Web Vitals p75s, 30-day pageviews, trailing-30d uptime %, top-reacted pages, and the last deploy. Same data the homepage pulse strip shows.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get site pulse"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"get_reading","fixed":{"name":"get_reading","description":"Return Cameron's reading list — books currently reading, finished, or abandoned, with notes. Filter by status if given.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"status":{"enum":["reading","finished","abandoned"],"type":"string"}}},"annotations":{"readOnlyHint":true},"title":"Get reading list"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":91,"tokensAfter":91},{"name":"list_posts","fixed":{"name":"list_posts","description":"Return up to N most recent published blog posts.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","default":10,"maximum":50,"minimum":1}}},"annotations":{"readOnlyHint":true},"title":"List blog posts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"list_projects","fixed":{"name":"list_projects","description":"Return all portfolio projects with their slug, title, and short description.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List projects"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":61,"tokensAfter":61},{"name":"search_posts","fixed":{"name":"search_posts","description":"Case-insensitive substring match across title, description, and tags. Returns up to 10 matches.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"query":{"type":"string","minLength":1}}},"annotations":{"readOnlyHint":true},"title":"Search blog posts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":82,"tokensAfter":82},{"name":"search_site","fixed":{"name":"search_site","description":"Semantic (vector similarity) search across blog posts and projects — the same Cloudflare Vectorize retrieval the Ask chatbot uses, without the LLM call. Broader than search_posts (which only does exact substring matching on title/description/tags): finds conceptually related content even when the query words never appear verbatim. Returns scored chunks with deep-link URLs.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","default":5,"maximum":10,"minimum":1},"query":{"type":"string","maxLength":200,"minLength":1}}},"annotations":{"readOnlyHint":true},"title":"Semantic site search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":182,"tokensAfter":182},{"name":"submit_contact","fixed":{"name":"submit_contact","description":"Send Cameron a message through the site contact form. Subject to the same validation and per-IP rate limits as the contact form itself.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name","email","subject","message"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"message":{"type":"string"},"subject":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Submit contact message"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":157,"tokensAfter":157}],"toolsChanged":11,"tokensSaved":0,"todo":[{"tool":"get_post","params":["slug"]},{"tool":"get_project","params":["slug"]},{"tool":"get_reading","params":["status"]},{"tool":"list_posts","params":["limit"]},{"tool":"search_posts","params":["query"]},{"tool":"search_site","params":["limit","query"]},{"tool":"submit_contact","params":["name","email","message","subject"]},{"tool":"subscribe_newsletter","params":["email","source"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}