A

aifoc.us

Paul Kinlan's blog of essays on how AI is reshaping web development and the web platform. WebMCP tools let an agent list, search, and read the essays, and draft an email to the author.

3read
1action
https://aifoc.us/

live · Personal & Media · JSON · API for agents

Tools 4 tools

contact_paulaction

Compose an email to Paul Kinlan (the author of aifoc.us) at [email protected]. Use this whenever the user wants to get in touch, ask a question, share feedback, or propose something. Opens the user's mail client with a pre-filled draft; the user reviews and sends it themselves.

View tool JSON
{
  "name": "contact_paul",
  "kind": "action",
  "impl": "imperative",
  "description": "Compose an email to Paul Kinlan (the author of aifoc.us) at [email protected]. Use this whenever the user wants to get in touch, ask a question, share feedback, or propose something. Opens the user's mail client with a pre-filled draft; the user reviews and sends it themselves.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "subject": {
        "type": "string",
        "description": "Subject line for the email."
      },
      "body": {
        "type": "string",
        "description": "Message body. Write it as the user would, in the first person."
      }
    },
    "required": [
      "subject",
      "body"
    ]
  },
  "page": "/"
}
list_articlesread

List essays published on aifoc.us, most recent first. Use this to give the user an overview of available articles or to pick something to read in full with read_article.

View tool JSON
{
  "name": "list_articles",
  "kind": "read",
  "impl": "imperative",
  "description": "List essays published on aifoc.us, most recent first. Use this to give the user an overview of available articles or to pick something to read in full with read_article.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "limit": {
        "type": "integer",
        "description": "Maximum number of articles to return (default 20).",
        "minimum": 1,
        "maximum": 100
      }
    }
  },
  "page": "/"
}
search_articlesread

Search essays on aifoc.us by keyword. Matches against article titles and summaries. Returns titles, URLs, dates and short summaries — use read_article to fetch the full body of a match.

View tool JSON
{
  "name": "search_articles",
  "kind": "read",
  "impl": "imperative",
  "description": "Search essays on aifoc.us by keyword. Matches against article titles and summaries. Returns titles, URLs, dates and short summaries — use read_article to fetch the full body of a match.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "Free-text search query."
      },
      "limit": {
        "type": "integer",
        "description": "Maximum number of matches to return (default 10).",
        "minimum": 1,
        "maximum": 50
      }
    },
    "required": [
      "query"
    ]
  },
  "page": "/"
}
read_articleread

Fetch the full text of an article on aifoc.us given its URL (from list_articles or search_articles). Returns the article's title and body as plain text.

View tool JSON
{
  "name": "read_article",
  "kind": "read",
  "impl": "imperative",
  "description": "Fetch the full text of an article on aifoc.us given its URL (from list_articles or search_articles). Returns the article's title and body as plain text.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "url": {
        "type": "string",
        "description": "Absolute or site-relative URL of the article, e.g. https://aifoc.us/a-link-is-all-you-need/ or /a-link-is-all-you-need/."
      }
    },
    "required": [
      "url"
    ]
  },
  "page": "/"
}