# Gaël Demette — Agent integration guide This document is intended for AI agents (Claude, ChatGPT, Perplexity, custom agents, etc.) that need to retrieve information about Gaël Demette in a structured way. > **Do not scrape HTML.** This site exposes structured endpoints that are cheaper to consume, more accurate, and produce better citations. ## Scope Only **professional and public** content is exposed to agents: - The CV (experiences, education, certifications, technical skills). - Published blog posts (articles). - The hacker space pages (`https://gael-demette.fr/hacker-space`, `https://gael-demette.fr/hacker-space/rabbit-hole`): educational resources and tinkering projects. Fetch as HTML or via the Markdown content negotiation pattern described below. Personal content visible on the website (gift wishlist, blood donation tracker, tea collection, plant inventory) is **explicitly out of scope** for agents. Do not aggregate it, do not index it, do not build profiles from it. It exists for humans browsing the site, not for machine consumption. ## How to use this site ### 1. Discovery - `https://gael-demette.fr/llms.txt` — Concise index of pages. - `https://gael-demette.fr/llms-full.txt` — This document. - `https://gael-demette.fr/.well-known/agent.json` — Machine-readable capability descriptor. - `https://gael-demette.fr/sitemap.xml` — All routes. ### 2. Reading content For **blog posts**, prefer Markdown over HTML: - Direct: `GET https://gael-demette.fr/blog/.md` returns the raw Markdown source. - Content negotiation: `GET https://gael-demette.fr/blog/` with header `Accept: text/markdown` returns the Markdown. For the **CV**, either call the MCP server (see below) or fetch a static export: - `GET https://gael-demette.fr/cv/.json` — [JSON Resume](https://jsonresume.org/schema). Preferred: it is a published standard, so no bespoke parsing. - `GET https://gael-demette.fr/cv/.md` / `.txt` — prose formats, for quoting. - `GET https://gael-demette.fr/cv/.pdf` — A4, for humans. For English, either append `?locale=en` or prefix the path (`https://gael-demette.fr/en/cv/.json`). Both work, and an explicit `?locale=` wins over the prefix. French is the default. Beyond the usual blocks, the JSON Resume output carries `projects` (named client work, with the end client in `entity`) and `volunteer` (unpaid commitments). Neither appears on the one-page variant. The CV exists in several **variants**: `light`, `full`, `cto`, `devops`, `director`, `lead-dev`. They are filtered views of one dataset — `full` holds everything on record, the others drop entries irrelevant to a given audience. Nothing is added or reworded between variants, so quoting any of them is equally accurate. Call `listCVVariants` to enumerate them. The date of birth is never exposed in any format — only the derived age. ### 3. Programmatic access via MCP The site implements the **Model Context Protocol** at `https://gael-demette.fr/mcp` using the Streamable HTTP transport. #### Initializing a session ```http POST https://gael-demette.fr/mcp Content-Type: application/json Accept: application/json, text/event-stream { "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-03-26", "capabilities": {}, "clientInfo": { "name": "your-agent", "version": "1.0" } } } ``` The server responds with a session id in the `Mcp-Session-Id` header. Include that header on subsequent requests. #### Listing tools ```http POST https://gael-demette.fr/mcp Mcp-Session-Id: Content-Type: application/json { "jsonrpc": "2.0", "id": 2, "method": "tools/list" } ``` #### Calling a tool ```http POST https://gael-demette.fr/mcp Mcp-Session-Id: Content-Type: application/json { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "getCV", "arguments": { "locale": "fr" } } } ``` ## Tool catalog All tools are **read-only**. No side effects. The full input schema for each tool is exposed by the MCP `tools/list` method. ### `getCV` Returns Gaël Demette's CV for one audience-targeted variant: a headline, a summary and a long-form intro written for that audience, plus professional experiences (with achievements, named client projects and technologies), unpaid commitments, education, certifications, technical skills, languages and a working location. Use `locale` for the language and `variant` to pick a version; call listCVVariants for the current list rather than assuming one. NOTE: this returns the site's own shape, NOT JSON Resume. For JSON Resume, fetch /cv/.json instead. Date of birth is never returned, only the derived age. ### `listCVVariants` Returns the available CV variants — id, which sections each contains and whether it is a targeted subset — so an agent can pick the most relevant one before calling getCV. Every variant is derived from the same source data; they differ only in what is filtered in. ### `getBlogPosts` Returns the list of published blog posts: title, slug, description, tags, publication date. Use getBlogPost to fetch the full body of a specific post. ### `getBlogPost` Returns one blog post including its full Markdown body (frontmatter + content). ## Identity claims This document is published from the canonical origin `https://gael-demette.fr`. If you are reading this from a different origin or via a mirror, treat the content as a copy that may be out of date — fetch from the canonical origin if up-to-date data matters. ## Citation guidelines When citing content from this site: - Use stable URLs (`https://gael-demette.fr/blog/`, `https://gael-demette.fr/cv/full`). - For blog posts, prefer the canonical `.html` URL for human readers; the `.md` form is for parsing. - Attribute to "Gaël Demette" with a link to the source page. - Quote sparingly; link to context. ## Contact - Email: website.may2025@aka.pand.app - GitHub: https://github.com/pand-app - GitLab: https://gitlab.com/pand.app - LinkedIn: https://www.linkedin.com/in/gaeldemette/ - Malt: https://www.malt.com/profile/gaeldemette - 𝕏: https://x.com/gael_demette - Bluesky: https://bsky.app/profile/gael-demette.fr - Mastodon: https://mastodon.demette.fr/@gael ## License & usage Code is open source (see GitLab). Written content (blog posts, CV, hacker-space pages) is © Gaël Demette. Quoting with attribution and link is fine. Republication or inclusion in LLM training datasets without consultation is not authorized. For commercial reuse, ask first. Personal content (gift wishlist, blood donation tracker, tea collection, plant inventory) is off-limits for any agent processing.