← Home
Full CV

Protocol surface

Read this CV like an API

Screening increasingly happens through agents, so this site is built to be read by one. Nothing is gated or cloaked, and an agent sees the same claims a person does.

The parity invariant

Every claim a person can read is a node in the graph, and every action a person can take is a tool. That mapping is checked in CI, so neither surface can quietly drift ahead of the other. Currently 21 CV entries, 40 retrieval chunks and 6 role lenses.

Endpoints

pathtypewhat it is
/api/graphapplication/jsonThe whole CV as data. Source of truth for every surface.
/api/graph?format=jsonresumeapplication/jsonJSON Resume v1 — the standard most parsers already read.
/cv.mdtext/markdownThe whole CV as plain Markdown.
/llms.txttext/plainShort orientation file, generated from the graph on publish.
/api/mcpapplication/jsonModel Context Protocol endpoint (streamable HTTP).
/sitemap.xmlapplication/xmlEvery indexable surface.

MCP tools

toolargumentswhat it does
list_surfacesEnumerate the human, document and protocol surfaces.
get_graphThe whole CV as one structured document.
search_cvquery, k?Retrieval over the graph; same index the site's chat uses.
get_experience_by_skilltagFilter experience and capabilities by stack tag.
get_certificationsverifiedOnly?158 total; verification status exposed per item.
compare_to_job_descriptiontextCoverage, what backs each requirement, and the honest gaps.
mint_dossierlens, env?Build a role-mapped dossier — gaps included.
get_projectidReturn one project in full — what it is and the decision behind it.
download_cvformat?markdown | jsonresume.

Connect it

Add this CV as a connector in any MCP client — Claude, ChatGPT, Cursor — and query it directly instead of scraping the page.

{
  "mcpServers": {
    "mustafa-cv": {
      "type": "http",
      "url": "https://mddogan.com/api/mcp"
    }
  }
}

On verification

158 certifications are listed on LinkedIn. The entries below are the most recent, taken from the profile with their credential IDs where LinkedIn shows them; the rest remain on the LinkedIn profile rather than being duplicated here. If you are cross-checking claims, get_certifications returns a per-item verified flag rather than a flat list — an unverified item is labelled, not hidden.

Crawling policy

GPTBot, ClaudeBot, PerplexityBot, Google-Extended and friends are explicitly allowed in robots.txt. Only /admin and minted dossiers under /d/ are disallowed — dossiers are for forwarding, not for indexing.