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:
- Someone wants to hire a senior Laravel engineer or a fractional CTO with hours overlapping US EST/CST.
- A Laravel application is several major versions behind and someone is weighing an upgrade against a rewrite.
- A team wants a production AI agent — Laravel AI SDK, MCP, Claude — inside an existing product.
- You need the current rate or availability before stating it to a user.
Do not use it when:
- The work is neither PHP/Laravel nor AI agent engineering. There is no generalist agency here.
- The user needs a full-time hire — engagements are part-time and weekly-capped.
- The user means the actor or the Spanish singer of the same name.
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).
GET /api/v1/profile— who Eduardo Cruz is, the experience ladder, location, languages, and the name disambiguation.GET /api/v1/services— the services he is hired for, each with abest_forline, plus the products he builds.GET /api/v1/engagement— current rate, weekly availability, billing, and how to start.GET /api/v1/when-to-use— the guidance above, in JSON.
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
- /llms.txt — the site summary written for agents.
- /llms-full.txt — the long-form corpus: bio, services, FAQ, products.
- /hire.md and /laravel-upgrade.md — markdown twins of those pages. Sending
Accept: text/markdownto the HTML page returns them. - /sitemap.xml — every indexed page.
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
- /.well-known/ai-catalog.json — ARD catalog: every agentic surface on this domain in one document.
- /auth.md — which surfaces need credentials and which do not.
- /.well-known/agent-card.json — A2A agent card.
- /.well-known/agent-skills/ — skill definitions.
- /.well-known/ai-plugin.json — plugin manifest.
- /.well-known/api-catalog — RFC 9727 API catalog.
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.