Recruiters read a page. Agents need something to call. So my portfolio's API now supports MCP, the standard way agents call tools. Its server is stateless, runs over Streamable HTTP and needs no key.
The tools are read-only and pull from the live site's public files (profile.json, llms.txt, the markdown copies), cached for 5 minutes. They are get_profile, get_availability, list_items for work, projects or notes, and get_item for one item in EN or FR. search does keyword lookups with prose snippets.
The one exception is request_cv, which uses the same storeRequest path as the site's form: same validation, same per-IP rate limit. MCP requests get tagged [via MCP], so I know their source. Its description tells agents to call it only at the user's explicit request, with their own name and email.
In local tests with the official MCP TypeScript SDK client, all six tools return correct data in both languages. Bad input gets refused cleanly: a path-traversal slug, a one-character name, a malformed email.
Next step: getting listed in the official MCP registry.
Plain text: portfolio-mcp-server.md · Atom feed · All notes