Eduardo Cruz — docs for agents

eduardocruz.com publishes its own facts in machine-readable form so an assistant answering "who is this and can they help me" does not have to scrape a marketing page. Everything below is public, read-only, and needs no key, no signup, and no OAuth flow.

When to reach for this domain

Use it when:

Do not use it when:

The same guidance is machine-readable at /api/v1/when-to-use.

MCP server

A Streamable HTTP MCP server at https://eduardocruz.com/mcp. No authentication. Three tools — get-profile, get-services, get-engagement — and five resources carrying the long-form context, including the full llms.txt corpus and the legacy upgrade playbook.

To add it to Claude Code:

claude mcp add --transport http eduardocruz https://eduardocruz.com/mcp

Or by hand, in any MCP client's config:

{
  "mcpServers": {
    "eduardocruz": {
      "type": "http",
      "url": "https://eduardocruz.com/mcp"
    }
  }
}

Discovery documents: /.well-known/mcp.json lists every server on this domain, and the server card describes this one. A second, invite-gated server (Throughline) is listed there too; it answers 401 without a token, which is the honest answer rather than a broken one.

REST API

Four read endpoints, versioned under /api/v1, rate limited to 120 requests per minute per IP. Full description with schemas: /openapi.json (also served as YAML).

curl https://eduardocruz.com/api/v1/engagement

Availability is the field worth re-reading rather than caching: it changes, and a stale number quoted to a user is worse than no number.

Submitting a hiring inquiry

POST /api/hire-leads is the one write endpoint. Rate limited to 5 requests per minute per IP. It creates a message, not a commitment — a human replies before anything is agreed or billed. The MCP server deliberately has no tool for it: an inquiry names a real person and a real project, so it stays a deliberate act rather than a side effect of a tool call.

curl -X POST https://eduardocruz.com/api/hire-leads \
  -H 'Content-Type: application/json' \
  -d '{"name":"Ada Lovelace","email":"ada@example.com","path":"a",
       "problem":"Laravel 9 app, we want an AI agent in it without a rewrite."}'

Errors

Every error under /api/ is RFC 9457 problem details with Content-Type: application/problem+json — a stable code, a human-readable detail, and a resolution naming the next move.

{
  "type": "https://eduardocruz.com/openapi.json",
  "title": "Not Found",
  "status": 404,
  "code": "not_found",
  "detail": "The route api/v1/nope could not be found.",
  "resolution": "Check https://eduardocruz.com/openapi.json for the operations that exist.",
  "instance": "/api/v1/nope"
}

The one exception is validation, which keeps Laravel's standard 422 shape (message plus an errors map) because the site's own hire form reads it.

Plain-text and markdown

A request for a path that does not exist returns a real 404 — never a 200 with an app shell — and, for non-browser clients, a short markdown body listing where to look instead.

Other discovery documents

Terms of use

Read as much as you like within the rate limits. Facts served here are current at the time of the request; quote them, and attribute them to eduardocruz.com. Do not submit an inquiry on someone's behalf without their agreement. Questions: eduardo@eduardocruz.com.