API Documentation

This site publishes a small public agent surface for reading public content, exploring portfolio projects, and sending reviewed contact inquiries.

Discovery

Article endpoints

GET /api/articles.json

Lists public articles with canonical HTML URLs, Markdown alternate URLs, and per-article JSON URLs.

GET /api/articles/{slug}.json

Returns a public article by slug, including the source MDX body. Example:

/api/articles/how-i-like-to-keep-ai-honest.json

Project endpoints

GET /api/projects.json

Lists public projects and portfolio items with canonical HTML URLs, Markdown alternate URLs, and per-project JSON URLs.

GET /api/projects/{slug}.json

Returns a public project by slug, including the source MDX body. Example:

/api/projects/church-on-the-move-messages-platform.json

Contact form endpoint

POST /api/contact

The contact endpoint accepts the same form fields used by the public contact page:

  • name
  • email
  • message
  • source
  • g-recaptcha-response
  • page_url
  • referrer_url
  • utm_source
  • utm_medium
  • utm_campaign
  • utm_content
  • utm_term
  • self_reported_source
  • referral_person_or_org
  • company
  • website
  • project_type
  • budget_range
  • timeline
  • preferred_contact_method
  • phone
  • asset_urls

Submissions are validated server-side with reCAPTCHA before email forwarding. Automated clients should only submit after the user has reviewed the exact message and the client has a valid g-recaptcha-response token from the public contact page.

MCP endpoint

POST /mcp

The MCP endpoint supports JSON-RPC requests for:

  • initialize
  • ping
  • tools/list
  • tools/call

Published tools:

  • list_articles
  • read_article
  • list_projects
  • read_project
  • submit_contact_form

The contact submission tool requires confirm_user_reviewed: true and a valid g_recaptcha_response. It is intentionally guarded so agents can prepare and submit reviewed inquiries without bypassing the site’s existing spam protection.

Health endpoint

GET /api/health

Returns a small JSON status response so automated clients can verify that the public API surface is reachable.