Tool tree
gradeNot graded
page: Every page
get_resumeAnswer
Michael C. Hurley's resume in JSON Resume format (same as /resume.json).
View tool JSON
{
"name": "get_resume",
"kind": "answer",
"impl": "imperative",
"description": "Michael C. Hurley's resume in JSON Resume format (same as /resume.json).",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}list_portfolioAnswer
Portfolio pieces (sites, interfaces, marks) with media and live links.
View tool JSON
{
"name": "list_portfolio",
"kind": "answer",
"impl": "imperative",
"description": "Portfolio pieces (sites, interfaces, marks) with media and live links.",
"inputSchema": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"sites",
"interfaces",
"marks"
]
}
}
},
"page": "/"
}list_blog_postsAnswer
Published blog posts, newest first, with URLs and Markdown links.
View tool JSON
{
"name": "list_blog_posts",
"kind": "answer",
"impl": "imperative",
"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"
}
}
},
"page": "/"
}get_blog_postAnswer
Full Markdown of one blog post by slug (see list_blog_posts).
View tool JSON
{
"name": "get_blog_post",
"kind": "answer",
"impl": "imperative",
"description": "Full Markdown of one blog post by slug (see list_blog_posts).",
"inputSchema": {
"type": "object",
"properties": {
"slug": {
"type": "string"
}
},
"required": [
"slug"
]
},
"page": "/"
}get_page_markdownAnswer
Markdown for any page on this site, e.g. "/", "/portfolio", "/blog/<slug>", "/aeo".
View tool JSON
{
"name": "get_page_markdown",
"kind": "answer",
"impl": "imperative",
"description": "Markdown for any page on this site, e.g. \"/\", \"/portfolio\", \"/blog/<slug>\", \"/aeo\".",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
]
},
"page": "/"
}search_siteAnswer
Keyword search across the resume, portfolio, and blog posts.
View tool JSON
{
"name": "search_site",
"kind": "answer",
"impl": "imperative",
"description": "Keyword search across the resume, portfolio, and blog posts.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string"
}
},
"required": [
"query"
]
},
"page": "/"
}get_booking_optionsAnswer
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.
View tool JSON
{
"name": "get_booking_options",
"kind": "answer",
"impl": "imperative",
"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": {}
},
"page": "/"
}get_availabilityAnswer
Open 30-minute slots between two dates (inclusive, up to 62 days). Pass a slot_start from the result to book_meeting.
View tool JSON
{
"name": "get_availability",
"kind": "answer",
"impl": "imperative",
"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"
]
}
}
},
"page": "/"
}book_meetingSensitive Action
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.
View tool JSON
{
"name": "book_meeting",
"kind": "transact",
"impl": "imperative",
"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"
]
},
"page": "/"
}