{"name":"com.michaelchurley/site","title":"Michael C. Hurley","description":"Tools for Michael C. Hurley's site: resume, portfolio, blog, page Markdown, search, and scheduling a 30-minute call (get_booking_options -> get_availability -> book_meeting). Guide: https://www.michaelchurley.com/agents.md","version":"1.0.0","websiteUrl":"https://www.michaelchurley.com","documentationUrl":"https://www.michaelchurley.com/agents.md","serverInfo":{"name":"michaelchurley.com","title":"Michael C. Hurley","version":"1.0.0"},"protocolVersions":["2026-07-28","2025-11-25","2025-06-18","2025-03-26"],"remotes":[{"type":"streamable-http","url":"https://www.michaelchurley.com/mcp"}],"transport":{"type":"streamable-http","url":"https://www.michaelchurley.com/mcp"},"authentication":{"required":false},"capabilities":{"tools":{"listChanged":false}},"tools":[{"name":"get_resume","title":"Get resume","description":"Michael C. Hurley's resume in JSON Resume format (same as /resume.json).","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Get resume","readOnlyHint":true,"openWorldHint":false}},{"name":"list_portfolio","title":"List portfolio","description":"Portfolio pieces (sites, interfaces, marks) with media and live links.","inputSchema":{"type":"object","properties":{"category":{"type":"string","enum":["sites","interfaces","marks"]}}},"annotations":{"title":"List portfolio","readOnlyHint":true,"openWorldHint":false}},{"name":"list_blog_posts","title":"List blog posts","description":"Published blog posts, newest first, with URLs and Markdown links.","inputSchema":{"type":"object","properties":{"tag":{"type":"string","description":"Only posts with this tag"},"limit":{"type":"integer","minimum":1,"description":"Maximum posts to return"}}},"annotations":{"title":"List blog posts","readOnlyHint":true,"openWorldHint":false}},{"name":"get_blog_post","title":"Get blog post","description":"Full Markdown of one blog post by slug (see list_blog_posts).","inputSchema":{"type":"object","properties":{"slug":{"type":"string"}},"required":["slug"]},"annotations":{"title":"Get blog post","readOnlyHint":true,"openWorldHint":false}},{"name":"get_page_markdown","title":"Get page as Markdown","description":"Markdown for any page on this site, e.g. \"/\", \"/portfolio\", \"/blog/<slug>\", \"/aeo\".","inputSchema":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]},"annotations":{"title":"Get page as Markdown","readOnlyHint":true,"openWorldHint":false}},{"name":"search_site","title":"Search site","description":"Keyword search across the resume, portfolio, and blog posts.","inputSchema":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]},"annotations":{"title":"Search site","readOnlyHint":true,"openWorldHint":false}},{"name":"get_booking_options","title":"Get booking options","description":"How to schedule a call with Michael: meeting types, duration, time zone, hours, and required fields. Step 1 of get_booking_options -> get_availability -> book_meeting.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Get booking options","readOnlyHint":true,"openWorldHint":false}},{"name":"get_availability","title":"Get availability","description":"Open 30-minute slots between two dates (inclusive, up to 62 days). Pass a slot_start from the result to book_meeting.","inputSchema":{"type":"object","properties":{"date_from":{"type":"string","description":"YYYY-MM-DD (default: today, Eastern)"},"date_to":{"type":"string","description":"YYYY-MM-DD (default: date_from + 7 days)"},"timezone":{"type":"string","description":"IANA zone for the 'local' labels, e.g. America/Chicago"},"meeting_type":{"type":"string","enum":["intro-call"]}}},"annotations":{"title":"Get availability","readOnlyHint":true,"openWorldHint":false}},{"name":"book_meeting","title":"Book a meeting","description":"Books a 30-minute call with Michael for an open slot from get_availability. Same path as the /book form: saves the booking and emails the visitor a confirmation with a calendar invite. Set dry_run to validate without booking.","inputSchema":{"type":"object","properties":{"slot_start":{"type":"string","description":"ISO 8601 start time from get_availability"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"notes":{"type":"string"},"timezone":{"type":"string","description":"Visitor's IANA zone, used for the 'local' label"},"meeting_type":{"type":"string","enum":["intro-call"]},"dry_run":{"type":"boolean","description":"Validate only; nothing is booked or emailed"}},"required":["slot_start","name","email"]},"annotations":{"title":"Book a meeting","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}}]}