/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
- /llms.txt β site overview for agents
- /llms-full.txt β full text of every post
- /openapi.json β OpenAPI 3.1 spec
- /.well-known/api-catalog β RFC 9727 linkset of everything on this page
- /.well-known/mcp/server-card.json β MCP server card
- /.well-known/agent-skills/index.json β public agent skills
- /sitemap-index.xml β sitemap
- /rss.xml β RSS feed
Questions? See /about for where to find me.