Developers

Build on edugalbs.com

Everything Eduardo Galbiati publishes here (his profile, the Factory diary and the blog on technology and leadership) can be searched and read from code or an AI agent, over a REST API or an MCP server. Public, read-only, free, and no API key.

Quickstart

Search the site:

curl "https://www.edugalbs.com/api/v1/search?q=12-factor+agents&limit=3"

Read one of the results in full, as Markdown:

curl "https://www.edugalbs.com/api/v1/pages?url=/blog/12-factor-agents"

Or add the MCP server to an agent. In Claude Code:

claude mcp add --transport http edugalbs https://www.edugalbs.com/api/mcp

Any client that speaks MCP over Streamable HTTP works with the same URL. Any page of the site is also available as Markdown: add .md to its address or ask for it with Accept: text/markdown.

Endpoints

All are GET, answer JSON and take lang=pt|en where it applies. The full description is the OpenAPI 3.1 document.

EndpointWhat it returns
/api/v1The list of endpoints.
/api/v1/search?q=The best matching sections of every page, with a snippet and the page URL (section=all|diary|blog|profile, limit=1–10).
/api/v1/pages?url=A page as Markdown, with its title and summary; read long pages in parts with offset and max_chars.
/api/v1/chaptersThe chapters of the Factory diary, in order.
/api/v1/postsThe blog posts, newest first.
/api/v1/profileThe profile Eduardo wrote for AI assistants.
POST /api/mcpThe MCP server (JSON-RPC 2.0): tools search_site, get_page, list_diary_chapters, list_blog_posts, get_profile.

API keys and sandbox

There are no API keys and nothing to sign up for: every endpoint is public. The API only reads what is already published, so there is no separate sandbox: production is safe to experiment with, and nothing you send can change the site. Scheduled chapters and posts stay out of it until their publication time.

Rate limits

60 requests a minute per client address, shared by the REST API and the MCP server. Every answer says where you stand, with the RateLimit headers of the IETF draft and the fields of its earlier versions:

RateLimit-Policy: "default";q=60;w=60
RateLimit: "default";r=59;t=60
RateLimit-Limit: 60
RateLimit-Remaining: 59
RateLimit-Reset: 60

Beyond the limit the answer is 429 with Retry-After, the seconds to wait.

Errors

Every error under /api/ is JSON with the HTTP status, a code to branch on, a message and a hint on what to do:

{ "error": { "status": 400, "code": "missing_parameter",
  "message": "The parameter \"q\" is required.",
  "hint": "Add ?q=… : What to look for.",
  "docs": "https://www.edugalbs.com/openapi.json" } }

The codes: not_found, unsupported_version, method_not_allowed, missing_parameter, invalid_parameter, page_not_found, rate_limited and unavailable. The MCP server answers JSON-RPC errors. A page that does not exist is a 404 in Markdown when you ask for text/markdown.

Versioning and deprecation

Machine-readable files

Questions or a bug? Write to eduardo.galbiati@gmail.com (see contact and privacy).

Updated on October 29, 2026.