/docs

jlopes.eu has a small read-only JSON API and a set of machine-readable files for agents.

Base URL and versioning

The current major version is v1, carried in the URL path:https://jlopes.eu/api/v1/. The unversioned/api/mcp/... paths are stable aliases of v1. Breaking changes only ever appear under a new version prefix; retired paths sendDeprecation and Sunset headers for at least 90 days before removal.

Endpoints

Full machine-readable spec: openapi.json(OpenAPI 3.1). Paths use trailing slashes; requests without one are redirected.

  • GET /api/v1/mcp/profile/ β€” author profile: name, job title, skills, social links.
  • GET /api/v1/mcp/content/ β€” every published post, project, and tool with slug, title, description, date, category, and tags.
  • GET /api/v1/mcp/content/{slug}/ β€” one item by slug; posts include the first 3000 characters of the body.
  • GET /api/v1/mcp/search/{q}/ β€” fuzzy search over titles, descriptions, and tags.
curl https://jlopes.eu/api/v1/mcp/search/react/
curl https://jlopes.eu/api/v1/mcp/content/minesweeper/

Errors

Errors are JSON, never HTML, with a real HTTP status code and a structured body:

{ "error": { "code": "not_found",
    "message": "No post or tool with slug \"nope\"",
    "hint": "List valid slugs at /api/mcp/content/" } }

Content as markdown

The homepage and every blog post negotiate markdown: request/ or /blog/{slug}/ withAccept: text/markdown to get markdown instead of HTML. Posts are also served raw at /blog/{slug}.md.

Machine-readable discovery

Questions? See /about for where to find me.